From 719d4e9e2091edef8c084857051a751bb8f97ea2 Mon Sep 17 00:00:00 2001 From: Viktor Adam Date: Wed, 21 Feb 2018 22:16:21 +0000 Subject: Allow cancelling the streams from other threads Signed-off-by: Viktor Adam --- tests/integration/api_container_test.py | 48 +++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) (limited to 'tests/integration/api_container_test.py') diff --git a/tests/integration/api_container_test.py b/tests/integration/api_container_test.py index 8447aa5..cc2c071 100644 --- a/tests/integration/api_container_test.py +++ b/tests/integration/api_container_test.py @@ -2,6 +2,7 @@ import os import re import signal import tempfile +import threading from datetime import datetime import docker @@ -880,6 +881,30 @@ Line2''' assert logs == (snippet + '\n').encode(encoding='ascii') + def test_logs_streaming_and_follow_and_cancel(self): + snippet = 'Flowering Nights (Sakuya Iyazoi)' + container = self.client.create_container( + BUSYBOX, 'sh -c "echo \\"{0}\\" && sleep 3"'.format(snippet) + ) + id = container['Id'] + self.tmp_containers.append(id) + self.client.start(id) + logs = six.binary_type() + + generator = self.client.logs(id, stream=True, follow=True) + + exit_timer = threading.Timer(3, os._exit, args=[1]) + exit_timer.start() + + threading.Timer(1, generator.close).start() + + for chunk in generator: + logs += chunk + + exit_timer.cancel() + + assert logs == (snippet + '\n').encode(encoding='ascii') + def test_logs_with_dict_instead_of_id(self): snippet = 'Flowering Nights (Sakuya Iyazoi)' container = self.client.create_container( @@ -1226,6 +1251,29 @@ class AttachContainerTest(BaseAPIIntegrationTest): output = self.client.attach(container, stream=False, logs=True) assert output == 'hello\n'.encode(encoding='ascii') + def test_attach_stream_and_cancel(self): + container = self.client.create_container( + BUSYBOX, 'sh -c "echo hello && sleep 60"', + tty=True + ) + self.tmp_containers.append(container) + self.client.start(container) + output = self.client.attach(container, stream=True, logs=True) + + exit_timer = threading.Timer(3, os._exit, args=[1]) + exit_timer.start() + + threading.Timer(1, output.close).start() + + lines = [] + for line in output: + lines.append(line) + + exit_timer.cancel() + + assert len(lines) == 1 + assert lines[0] == 'hello\r\n'.encode(encoding='ascii') + def test_detach_with_default(self): container = self.client.create_container( BUSYBOX, 'cat', -- cgit v1.2.1 From 284c3d90d6ab1c49410d5622ca8cd3f37dcbe296 Mon Sep 17 00:00:00 2001 From: Joffrey F Date: Mon, 19 Mar 2018 14:40:49 +0100 Subject: Remove redundant single-socket select call Clean up + use pytest-timeout Signed-off-by: Joffrey F --- tests/integration/api_container_test.py | 13 ++----------- 1 file changed, 2 insertions(+), 11 deletions(-) (limited to 'tests/integration/api_container_test.py') diff --git a/tests/integration/api_container_test.py b/tests/integration/api_container_test.py index cc2c071..e212518 100644 --- a/tests/integration/api_container_test.py +++ b/tests/integration/api_container_test.py @@ -881,6 +881,7 @@ Line2''' assert logs == (snippet + '\n').encode(encoding='ascii') + @pytest.mark.timeout(5) def test_logs_streaming_and_follow_and_cancel(self): snippet = 'Flowering Nights (Sakuya Iyazoi)' container = self.client.create_container( @@ -892,17 +893,11 @@ Line2''' logs = six.binary_type() generator = self.client.logs(id, stream=True, follow=True) - - exit_timer = threading.Timer(3, os._exit, args=[1]) - exit_timer.start() - threading.Timer(1, generator.close).start() for chunk in generator: logs += chunk - exit_timer.cancel() - assert logs == (snippet + '\n').encode(encoding='ascii') def test_logs_with_dict_instead_of_id(self): @@ -1251,6 +1246,7 @@ class AttachContainerTest(BaseAPIIntegrationTest): output = self.client.attach(container, stream=False, logs=True) assert output == 'hello\n'.encode(encoding='ascii') + @pytest.mark.timeout(5) def test_attach_stream_and_cancel(self): container = self.client.create_container( BUSYBOX, 'sh -c "echo hello && sleep 60"', @@ -1260,17 +1256,12 @@ class AttachContainerTest(BaseAPIIntegrationTest): self.client.start(container) output = self.client.attach(container, stream=True, logs=True) - exit_timer = threading.Timer(3, os._exit, args=[1]) - exit_timer.start() - threading.Timer(1, output.close).start() lines = [] for line in output: lines.append(line) - exit_timer.cancel() - assert len(lines) == 1 assert lines[0] == 'hello\r\n'.encode(encoding='ascii') -- cgit v1.2.1 From cef9940ed3d993145c6db075b2f7f0f005415ff2 Mon Sep 17 00:00:00 2001 From: Matthieu Nottale Date: Tue, 13 Mar 2018 15:31:36 +0100 Subject: stop(), restart(): Adjust request timeout. Signed-off-by: Matthieu Nottale --- tests/integration/api_container_test.py | 11 +++++++++++ 1 file changed, 11 insertions(+) (limited to 'tests/integration/api_container_test.py') diff --git a/tests/integration/api_container_test.py b/tests/integration/api_container_test.py index e212518..3d985a4 100644 --- a/tests/integration/api_container_test.py +++ b/tests/integration/api_container_test.py @@ -1165,6 +1165,17 @@ class RestartContainerTest(BaseAPIIntegrationTest): assert info2['State']['Running'] is True self.client.kill(id) + def test_restart_with_hight_timeout(self): + container = self.client.create_container(BUSYBOX, ['sleep', '9999']) + id = container['Id'] + self.client.start(id) + self.client.timeout = 1 + self.client.restart(id, timeout=3) + self.client.timeout = None + self.client.restart(id, timeout=3) + self.client.timeout = 1 + self.client.stop(id, timeout=3) + def test_restart_with_dict_instead_of_id(self): container = self.client.create_container(BUSYBOX, ['sleep', '9999']) assert 'Id' in container -- cgit v1.2.1 From da028d88a2f133d038fa4a651318b60bed770ba5 Mon Sep 17 00:00:00 2001 From: Joffrey F Date: Wed, 25 Apr 2018 14:36:41 -0700 Subject: Total timeout should be HTTP timeout + operation timeout Signed-off-by: Joffrey F --- tests/integration/api_container_test.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'tests/integration/api_container_test.py') diff --git a/tests/integration/api_container_test.py b/tests/integration/api_container_test.py index 3d985a4..da9b3ec 100644 --- a/tests/integration/api_container_test.py +++ b/tests/integration/api_container_test.py @@ -1165,7 +1165,7 @@ class RestartContainerTest(BaseAPIIntegrationTest): assert info2['State']['Running'] is True self.client.kill(id) - def test_restart_with_hight_timeout(self): + def test_restart_with_high_timeout(self): container = self.client.create_container(BUSYBOX, ['sleep', '9999']) id = container['Id'] self.client.start(id) -- cgit v1.2.1 From ae8f77737c164d2474681f839c43f51400b9e119 Mon Sep 17 00:00:00 2001 From: Joffrey F Date: Wed, 25 Apr 2018 15:12:49 -0700 Subject: Fix session timeout = None case Signed-off-by: Joffrey F --- tests/integration/api_container_test.py | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) (limited to 'tests/integration/api_container_test.py') diff --git a/tests/integration/api_container_test.py b/tests/integration/api_container_test.py index da9b3ec..afd439f 100644 --- a/tests/integration/api_container_test.py +++ b/tests/integration/api_container_test.py @@ -1165,16 +1165,14 @@ class RestartContainerTest(BaseAPIIntegrationTest): assert info2['State']['Running'] is True self.client.kill(id) - def test_restart_with_high_timeout(self): + def test_restart_with_low_timeout(self): container = self.client.create_container(BUSYBOX, ['sleep', '9999']) - id = container['Id'] - self.client.start(id) + self.client.start(container) self.client.timeout = 1 - self.client.restart(id, timeout=3) + self.client.restart(container, timeout=3) self.client.timeout = None - self.client.restart(id, timeout=3) - self.client.timeout = 1 - self.client.stop(id, timeout=3) + self.client.restart(container, timeout=3) + self.client.kill(container) def test_restart_with_dict_instead_of_id(self): container = self.client.create_container(BUSYBOX, ['sleep', '9999']) -- cgit v1.2.1 From b4efdc1b28062c835d04ac56995cb293d74de92b Mon Sep 17 00:00:00 2001 From: Joffrey F Date: Thu, 24 May 2018 17:21:53 -0700 Subject: Fix several integration tests on Windows Signed-off-by: Joffrey F --- tests/integration/api_container_test.py | 19 ++++--------------- 1 file changed, 4 insertions(+), 15 deletions(-) (limited to 'tests/integration/api_container_test.py') diff --git a/tests/integration/api_container_test.py b/tests/integration/api_container_test.py index afd439f..ff70148 100644 --- a/tests/integration/api_container_test.py +++ b/tests/integration/api_container_test.py @@ -491,6 +491,9 @@ class CreateContainerTest(BaseAPIIntegrationTest): assert rule in self.client.logs(ctnr).decode('utf-8') +@pytest.mark.xfail( + IS_WINDOWS_PLATFORM, reason='Test not designed for Windows platform' +) class VolumeBindTest(BaseAPIIntegrationTest): def setUp(self): super(VolumeBindTest, self).setUp() @@ -507,9 +510,6 @@ class VolumeBindTest(BaseAPIIntegrationTest): ['touch', os.path.join(self.mount_dest, self.filename)], ) - @pytest.mark.xfail( - IS_WINDOWS_PLATFORM, reason='Test not designed for Windows platform' - ) def test_create_with_binds_rw(self): container = self.run_with_volume( @@ -525,9 +525,6 @@ class VolumeBindTest(BaseAPIIntegrationTest): inspect_data = self.client.inspect_container(container) self.check_container_data(inspect_data, True) - @pytest.mark.xfail( - IS_WINDOWS_PLATFORM, reason='Test not designed for Windows platform' - ) def test_create_with_binds_ro(self): self.run_with_volume( False, @@ -548,9 +545,6 @@ class VolumeBindTest(BaseAPIIntegrationTest): inspect_data = self.client.inspect_container(container) self.check_container_data(inspect_data, False) - @pytest.mark.xfail( - IS_WINDOWS_PLATFORM, reason='Test not designed for Windows platform' - ) @requires_api_version('1.30') def test_create_with_mounts(self): mount = docker.types.Mount( @@ -569,9 +563,6 @@ class VolumeBindTest(BaseAPIIntegrationTest): inspect_data = self.client.inspect_container(container) self.check_container_data(inspect_data, True) - @pytest.mark.xfail( - IS_WINDOWS_PLATFORM, reason='Test not designed for Windows platform' - ) @requires_api_version('1.30') def test_create_with_mounts_ro(self): mount = docker.types.Mount( @@ -1116,9 +1107,7 @@ class ContainerTopTest(BaseAPIIntegrationTest): self.client.start(container) res = self.client.top(container) - if IS_WINDOWS_PLATFORM: - assert res['Titles'] == ['PID', 'USER', 'TIME', 'COMMAND'] - else: + if not IS_WINDOWS_PLATFORM: assert res['Titles'] == [ 'UID', 'PID', 'PPID', 'C', 'STIME', 'TTY', 'TIME', 'CMD' ] -- cgit v1.2.1