mirror of https://github.com/docker/docker-py.git
Tidy up stream test harness & fix race conditions
This commit is contained in:
parent
8aded4842b
commit
17c1869304
|
@ -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,24 +2092,31 @@ class StreamTest(Cleanup, unittest.TestCase):
|
|||
def stop(self):
|
||||
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):
|
||||
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)
|
||||
while not self.stop_server:
|
||||
try:
|
||||
connection, client_address = self.server_sock.accept()
|
||||
except socket.error:
|
||||
time.sleep(0.01)
|
||||
continue
|
||||
|
||||
connection.setblocking(1)
|
||||
try:
|
||||
self.request_handler(connection)
|
||||
finally:
|
||||
connection.close()
|
||||
|
||||
self.server_sock.close()
|
||||
connection.setblocking(1)
|
||||
try:
|
||||
self.request_handler(connection)
|
||||
finally:
|
||||
connection.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
|
||||
|
|
Loading…
Reference in New Issue