diff options
author | Joffrey F <joffrey@docker.com> | 2017-02-10 15:40:55 -0800 |
---|---|---|
committer | Joffrey F <joffrey@docker.com> | 2017-02-13 17:06:25 -0800 |
commit | e8a86e40cc387e98fa40e7e3638b921e1b9e18d1 (patch) | |
tree | 3c9ae19d9885717881145ef4fc7703947478c7e1 /tests | |
parent | d1038c422b2a069494476dd743cc06e11e8939e7 (diff) | |
download | docker-py-e8a86e40cc387e98fa40e7e3638b921e1b9e18d1.tar.gz |
Add tests for secret API implementation
Signed-off-by: Joffrey F <joffrey@docker.com>
Diffstat (limited to 'tests')
-rw-r--r-- | tests/integration/api_secret_test.py | 69 | ||||
-rw-r--r-- | tests/integration/api_service_test.py | 70 | ||||
-rw-r--r-- | tests/integration/base.py | 7 | ||||
-rw-r--r-- | tests/unit/api_container_test.py | 6 | ||||
-rw-r--r-- | tests/unit/api_image_test.py | 2 |
5 files changed, 150 insertions, 4 deletions
diff --git a/tests/integration/api_secret_test.py b/tests/integration/api_secret_test.py new file mode 100644 index 0000000..dcd880f --- /dev/null +++ b/tests/integration/api_secret_test.py @@ -0,0 +1,69 @@ +# -*- coding: utf-8 -*- + +import docker +import pytest + +from ..helpers import force_leave_swarm, requires_api_version +from .base import BaseAPIIntegrationTest + + +@requires_api_version('1.25') +class SecretAPITest(BaseAPIIntegrationTest): + def setUp(self): + super(SecretAPITest, self).setUp() + self.init_swarm() + + def tearDown(self): + super(SecretAPITest, self).tearDown() + force_leave_swarm(self.client) + + def test_create_secret(self): + secret_id = self.client.create_secret( + 'favorite_character', 'sakuya izayoi' + ) + self.tmp_secrets.append(secret_id) + assert 'ID' in secret_id + data = self.client.inspect_secret(secret_id) + assert data['Spec']['Name'] == 'favorite_character' + + def test_create_secret_unicode_data(self): + secret_id = self.client.create_secret( + 'favorite_character', u'いざよいさくや' + ) + self.tmp_secrets.append(secret_id) + assert 'ID' in secret_id + data = self.client.inspect_secret(secret_id) + assert data['Spec']['Name'] == 'favorite_character' + + def test_inspect_secret(self): + secret_name = 'favorite_character' + secret_id = self.client.create_secret( + secret_name, 'sakuya izayoi' + ) + self.tmp_secrets.append(secret_id) + data = self.client.inspect_secret(secret_id) + assert data['Spec']['Name'] == secret_name + assert 'ID' in data + assert 'Version' in data + + def test_remove_secret(self): + secret_name = 'favorite_character' + secret_id = self.client.create_secret( + secret_name, 'sakuya izayoi' + ) + self.tmp_secrets.append(secret_id) + + assert self.client.remove_secret(secret_id) + with pytest.raises(docker.errors.NotFound): + self.client.inspect_secret(secret_id) + + def test_list_secrets(self): + secret_name = 'favorite_character' + secret_id = self.client.create_secret( + secret_name, 'sakuya izayoi' + ) + self.tmp_secrets.append(secret_id) + + data = self.client.secrets(filters={'names': ['favorite_character']}) + assert len(data) == 1 + assert data[0]['ID'] == secret_id['ID'] diff --git a/tests/integration/api_service_test.py b/tests/integration/api_service_test.py index fe96459..1dd295d 100644 --- a/tests/integration/api_service_test.py +++ b/tests/integration/api_service_test.py @@ -1,4 +1,7 @@ +# -*- coding: utf-8 -*- + import random +import time import docker @@ -24,6 +27,21 @@ class ServiceTest(BaseAPIIntegrationTest): def get_service_name(self): return 'dockerpytest_{0:x}'.format(random.getrandbits(64)) + def get_service_container(self, service_name, attempts=20, interval=0.5): + # There is some delay between the service's creation and the creation + # of the service's containers. This method deals with the uncertainty + # when trying to retrieve the container associated with a service. + while True: + containers = self.client.containers( + filters={'name': [service_name]}, quiet=True + ) + if len(containers) > 0: + return containers[0] + attempts -= 1 + if attempts <= 0: + return None + time.sleep(interval) + def create_simple_service(self, name=None): if name: name = 'dockerpytest_{0}'.format(name) @@ -317,3 +335,55 @@ class ServiceTest(BaseAPIIntegrationTest): new_index = svc_info['Version']['Index'] assert new_index > version_index assert svc_info['Spec']['TaskTemplate']['ForceUpdate'] == 10 + + @requires_api_version('1.25') + def test_create_service_with_secret(self): + secret_name = 'favorite_touhou' + secret_data = b'phantasmagoria of flower view' + secret_id = self.client.create_secret(secret_name, secret_data) + self.tmp_secrets.append(secret_id) + secret_ref = docker.types.SecretReference(secret_id, secret_name) + container_spec = docker.types.ContainerSpec( + 'busybox', ['top'], secrets=[secret_ref] + ) + task_tmpl = docker.types.TaskTemplate(container_spec) + name = self.get_service_name() + svc_id = self.client.create_service(task_tmpl, name=name) + svc_info = self.client.inspect_service(svc_id) + assert 'Secrets' in svc_info['Spec']['TaskTemplate']['ContainerSpec'] + secrets = svc_info['Spec']['TaskTemplate']['ContainerSpec']['Secrets'] + assert secrets[0] == secret_ref + + container = self.get_service_container(name) + assert container is not None + exec_id = self.client.exec_create( + container, 'cat /run/secrets/{0}'.format(secret_name) + ) + assert self.client.exec_start(exec_id) == secret_data + + @requires_api_version('1.25') + def test_create_service_with_unicode_secret(self): + secret_name = 'favorite_touhou' + secret_data = u'東方花映塚' + secret_id = self.client.create_secret(secret_name, secret_data) + self.tmp_secrets.append(secret_id) + secret_ref = docker.types.SecretReference(secret_id, secret_name) + container_spec = docker.types.ContainerSpec( + 'busybox', ['top'], secrets=[secret_ref] + ) + task_tmpl = docker.types.TaskTemplate(container_spec) + name = self.get_service_name() + svc_id = self.client.create_service(task_tmpl, name=name) + svc_info = self.client.inspect_service(svc_id) + assert 'Secrets' in svc_info['Spec']['TaskTemplate']['ContainerSpec'] + secrets = svc_info['Spec']['TaskTemplate']['ContainerSpec']['Secrets'] + assert secrets[0] == secret_ref + + container = self.get_service_container(name) + assert container is not None + exec_id = self.client.exec_create( + container, 'cat /run/secrets/{0}'.format(secret_name) + ) + container_secret = self.client.exec_start(exec_id) + container_secret = container_secret.decode('utf-8') + assert container_secret == secret_data diff --git a/tests/integration/base.py b/tests/integration/base.py index 6f00a46..aa7c6af 100644 --- a/tests/integration/base.py +++ b/tests/integration/base.py @@ -28,6 +28,7 @@ class BaseIntegrationTest(unittest.TestCase): self.tmp_volumes = [] self.tmp_networks = [] self.tmp_plugins = [] + self.tmp_secrets = [] def tearDown(self): client = docker.from_env(version=TEST_API_VERSION) @@ -52,6 +53,12 @@ class BaseIntegrationTest(unittest.TestCase): except docker.errors.APIError: pass + for secret in self.tmp_secrets: + try: + client.api.remove_secret(secret) + except docker.errors.APIError: + pass + for folder in self.tmp_folders: shutil.rmtree(folder) diff --git a/tests/unit/api_container_test.py b/tests/unit/api_container_test.py index abf3613..51d6678 100644 --- a/tests/unit/api_container_test.py +++ b/tests/unit/api_container_test.py @@ -45,7 +45,7 @@ class StartContainerTest(BaseAPIClientTest): self.assertEqual( str(excinfo.value), - 'image or container param is undefined', + 'Resource ID was not provided', ) with pytest.raises(ValueError) as excinfo: @@ -53,7 +53,7 @@ class StartContainerTest(BaseAPIClientTest): self.assertEqual( str(excinfo.value), - 'image or container param is undefined', + 'Resource ID was not provided', ) def test_start_container_regression_573(self): @@ -1559,7 +1559,7 @@ class ContainerTest(BaseAPIClientTest): self.client.inspect_container(arg) self.assertEqual( - excinfo.value.args[0], 'image or container param is undefined' + excinfo.value.args[0], 'Resource ID was not provided' ) def test_container_stats(self): diff --git a/tests/unit/api_image_test.py b/tests/unit/api_image_test.py index fbfb146..36b2a46 100644 --- a/tests/unit/api_image_test.py +++ b/tests/unit/api_image_test.py @@ -204,7 +204,7 @@ class ImageTest(BaseAPIClientTest): self.client.inspect_image(arg) self.assertEqual( - excinfo.value.args[0], 'image or container param is undefined' + excinfo.value.args[0], 'Resource ID was not provided' ) def test_insert_image(self): |