Skip to content

Commit

Permalink
failing test for #208
Browse files Browse the repository at this point in the history
  • Loading branch information
sunew committed Oct 3, 2018
1 parent 6c9748d commit 5a760e8
Showing 1 changed file with 57 additions and 0 deletions.
57 changes: 57 additions & 0 deletions src/ZODB/tests/testThreadedShutdown.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
import sys
import threading
import time
import unittest

import transaction

import ZODB


class ZODBClientThread(threading.Thread):

def __init__(self, db, test):
threading.Thread.__init__(self)
self._exc_info = None
# self.setDaemon(1)
self.db = db
self.test = test

def run(self):
conn = self.db.open()
conn.sync()

time.sleep(15)

# conn.close calls self.transaction_manager.unregisterSynch(self)
# and this succeeds.
conn.close()


class ShutdownTest(ZODB.tests.util.TestCase):

def setUp(self):
# Our default transaction manager is
# transaction._manager.ThreadTransactionManager
# so no need to set it.
ZODB.tests.util.TestCase.setUp(self)
self._storage = ZODB.FileStorage.FileStorage(
'ZODBTests.fs', create=1)
self._db = ZODB.DB(self._storage)

def check_shutdown(self):
client_thread = ZODBClientThread(self._db, self)
client_thread.start()
# calls conn._release_resources, that calls conn.close(),
# that calls conn.transaction_manager.unregisterSynch(self),
# but from a different thread, so transaction_manager._synchs
# have different contents.
# So this is expected to fail with a keyerror:
self._db.close()

def tearDown(self):
ZODB.tests.util.TestCase.tearDown(self)


def test_suite():
return unittest.makeSuite(ShutdownTest, "check")

0 comments on commit 5a760e8

Please sign in to comment.