Kaydet (Commit) d7a9d9a9 authored tarafından Joffrey F's avatar Joffrey F

Merge pull request #432 from leth/fix_test_race

Tidy up stream test harness & fix race conditions
......@@ -2074,16 +2074,15 @@ class DockerClientTest(Cleanup, unittest.TestCase):
class StreamTest(Cleanup, unittest.TestCase):
def setUp(self):
folder = tempfile.mkdtemp()
socket_dir = tempfile.mkdtemp()
self.build_context = tempfile.mkdtemp()
self.addCleanup(shutil.rmtree, folder)
self.addCleanup(shutil.rmtree, socket_dir)
self.addCleanup(shutil.rmtree, self.build_context)
self.socket_file = os.path.join(folder, 'test_sock.sock')
self.server_sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
self.server_sock.bind(self.socket_file)
self.socket_file = os.path.join(socket_dir, 'test_sock.sock')
self.server_socket = self._setup_socket()
self.stop_server = False
server_thread = threading.Thread(target=self.run_server)
server_thread.setDaemon(True)
self.stop_server = False
server_thread.start()
self.response = None
self.request_handler = None
......@@ -2093,14 +2092,21 @@ class StreamTest(Cleanup, unittest.TestCase):
def stop(self):
self.stop_server = True
def run_server(self):
self.server_sock.setblocking(0)
def _setup_socket(self):
server_sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
server_sock.bind(self.socket_file)
# Non-blocking mode so that we can shut the test down easily
server_sock.setblocking(0)
server_sock.listen(5)
return server_sock
self.server_sock.listen(5)
def run_server(self):
try:
while not self.stop_server:
try:
connection, client_address = self.server_sock.accept()
connection, client_address = self.server_socket.accept()
except socket.error:
# Probably no connection to accept yet
time.sleep(0.01)
continue
......@@ -2109,8 +2115,8 @@ class StreamTest(Cleanup, unittest.TestCase):
self.request_handler(connection)
finally:
connection.close()
self.server_sock.close()
finally:
self.server_socket.close()
def early_response_sending_handler(self, connection):
data = b''
......@@ -2152,7 +2158,7 @@ class StreamTest(Cleanup, unittest.TestCase):
for i in range(5):
try:
stream = client.build(
path=os.path.dirname(self.build_context),
path=self.build_context,
stream=True
)
break
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment