Skip to content

Commit

Permalink
Explicitly wait for thread termination at tearDown
Browse files Browse the repository at this point in the history
  • Loading branch information
bgounon committed Aug 26, 2020
1 parent 229aa4d commit 7cd4a09
Showing 1 changed file with 22 additions and 6 deletions.
28 changes: 22 additions & 6 deletions tests/test_butler.py
Original file line number Diff line number Diff line change
Expand Up @@ -1242,6 +1242,9 @@ class WebdavDatastoreButlerTestCase(FileLikeDatastoreButlerTests, unittest.TestC
registryStr = ":memory:"
"""Expected format of the Registry string."""

serverThread = None
stopWebdavServer = False

def genRoot(self):
"""Returns a random string of len 20 to serve as a root
name for the temporary bucket repo.
Expand All @@ -1262,11 +1265,18 @@ def setUpClass(cls):

cls.portNumber = cls._getfreeport()
# Run a local webdav server on which tests will be run
t = Thread(target=cls._serveWebdav, args=(cls.portNumber, ), daemon=True)
t.start()
cls.serverThread = Thread(target=cls._serveWebdav,
args=(cls, cls.portNumber, lambda: cls.stopWebdavServer),
daemon=True)
cls.serverThread.start()
# Wait for it to start
time.sleep(3)

@classmethod
def tearDownClass(cls):
cls.stopWebdavServer = True
cls.serverThread.join()

# Mock required environment variables during tests
@unittest.mock.patch.dict(os.environ, {"WEBDAV_AUTH_METHOD": "TOKEN",
"WEBDAV_BEARER_TOKEN": "XXXXXX"})
Expand All @@ -1293,7 +1303,7 @@ def setUp(self):
def tearDown(self):
ButlerURI(self.rooturi).remove()

def _serveWebdav(port: int):
def _serveWebdav(self, port: int, stopWebdavServer):
"""Starts a local webdav-compatible HTTP server,
Listening on http://localhost:8080
This server only runs when this test class is instantiated,
Expand Down Expand Up @@ -1323,13 +1333,19 @@ def _serveWebdav(port: int):
"wsgi_app": app,
}
server = wsgi.Server(**server_args)
server.prepare()

try:
server.start()
t = Thread(target=server.serve, daemon=True)
t.start()
while True:
if stopWebdavServer():
server.stop()
t.join()
break
time.sleep(1)
except KeyboardInterrupt:
print("Caught Ctrl-C, shutting down...")
finally:
server.stop()

def _getfreeport():
"""
Expand Down

0 comments on commit 7cd4a09

Please sign in to comment.