mirror of https://github.com/docker/docker-py.git
Merge pull request #432 from leth/fix_test_race
Tidy up stream test harness & fix race conditions
This commit is contained in:
commit
d7a9d9a935
|
|
@ -2074,16 +2074,15 @@ class DockerClientTest(Cleanup, unittest.TestCase):
|
||||||
class StreamTest(Cleanup, unittest.TestCase):
|
class StreamTest(Cleanup, unittest.TestCase):
|
||||||
|
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
folder = tempfile.mkdtemp()
|
socket_dir = tempfile.mkdtemp()
|
||||||
self.build_context = 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.addCleanup(shutil.rmtree, self.build_context)
|
||||||
self.socket_file = os.path.join(folder, 'test_sock.sock')
|
self.socket_file = os.path.join(socket_dir, 'test_sock.sock')
|
||||||
self.server_sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
|
self.server_socket = self._setup_socket()
|
||||||
self.server_sock.bind(self.socket_file)
|
self.stop_server = False
|
||||||
server_thread = threading.Thread(target=self.run_server)
|
server_thread = threading.Thread(target=self.run_server)
|
||||||
server_thread.setDaemon(True)
|
server_thread.setDaemon(True)
|
||||||
self.stop_server = False
|
|
||||||
server_thread.start()
|
server_thread.start()
|
||||||
self.response = None
|
self.response = None
|
||||||
self.request_handler = None
|
self.request_handler = None
|
||||||
|
|
@ -2093,24 +2092,31 @@ class StreamTest(Cleanup, unittest.TestCase):
|
||||||
def stop(self):
|
def stop(self):
|
||||||
self.stop_server = True
|
self.stop_server = True
|
||||||
|
|
||||||
|
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
|
||||||
|
|
||||||
def run_server(self):
|
def run_server(self):
|
||||||
self.server_sock.setblocking(0)
|
try:
|
||||||
|
while not self.stop_server:
|
||||||
|
try:
|
||||||
|
connection, client_address = self.server_socket.accept()
|
||||||
|
except socket.error:
|
||||||
|
# Probably no connection to accept yet
|
||||||
|
time.sleep(0.01)
|
||||||
|
continue
|
||||||
|
|
||||||
self.server_sock.listen(5)
|
connection.setblocking(1)
|
||||||
while not self.stop_server:
|
try:
|
||||||
try:
|
self.request_handler(connection)
|
||||||
connection, client_address = self.server_sock.accept()
|
finally:
|
||||||
except socket.error:
|
connection.close()
|
||||||
time.sleep(0.01)
|
finally:
|
||||||
continue
|
self.server_socket.close()
|
||||||
|
|
||||||
connection.setblocking(1)
|
|
||||||
try:
|
|
||||||
self.request_handler(connection)
|
|
||||||
finally:
|
|
||||||
connection.close()
|
|
||||||
|
|
||||||
self.server_sock.close()
|
|
||||||
|
|
||||||
def early_response_sending_handler(self, connection):
|
def early_response_sending_handler(self, connection):
|
||||||
data = b''
|
data = b''
|
||||||
|
|
@ -2152,7 +2158,7 @@ class StreamTest(Cleanup, unittest.TestCase):
|
||||||
for i in range(5):
|
for i in range(5):
|
||||||
try:
|
try:
|
||||||
stream = client.build(
|
stream = client.build(
|
||||||
path=os.path.dirname(self.build_context),
|
path=self.build_context,
|
||||||
stream=True
|
stream=True
|
||||||
)
|
)
|
||||||
break
|
break
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue