From 02e99e4967bebb116a7d9d650647df912c608297 Mon Sep 17 00:00:00 2001 From: Joffrey F Date: Wed, 17 Aug 2016 18:42:52 -0700 Subject: [PATCH] Service API integration tests Signed-off-by: Joffrey F --- docker/api/service.py | 7 ++- tests/integration/service_test.py | 100 ++++++++++++++++++++++++++++++ 2 files changed, 105 insertions(+), 2 deletions(-) create mode 100644 tests/integration/service_test.py diff --git a/docker/api/service.py b/docker/api/service.py index 4be96242..db19ae53 100644 --- a/docker/api/service.py +++ b/docker/api/service.py @@ -42,10 +42,11 @@ class ServiceApiMixin(object): url = self._url('/services/{0}', service) resp = self._delete(url) self._raise_for_status(resp) + return True @utils.minimum_version('1.24') @utils.check_resource - def update_service(self, service, task_template=None, name=None, + def update_service(self, service, version, task_template=None, name=None, labels=None, mode=None, update_config=None, networks=None, endpoint_config=None): url = self._url('/services/{0}/update', service) @@ -65,7 +66,9 @@ class ServiceApiMixin(object): if endpoint_config is not None: data['Endpoint'] = endpoint_config - return self._result(self._post_json(url, data=data), True) + resp = self._post_json(url, data=data, params={'version': version}) + self._raise_for_status(resp) + return True class TaskTemplate(dict): diff --git a/tests/integration/service_test.py b/tests/integration/service_test.py new file mode 100644 index 00000000..00109868 --- /dev/null +++ b/tests/integration/service_test.py @@ -0,0 +1,100 @@ +import random + +import docker +# import pytest + +from ..base import requires_api_version +from .. import helpers + + +BUSYBOX = helpers.BUSYBOX + + +class ServiceTest(helpers.BaseTestCase): + def setUp(self): + super(ServiceTest, self).setUp() + try: + self.client.leave_swarm(force=True) + except docker.errors.APIError: + pass + self.client.init_swarm('eth0') + + def tearDown(self): + super(ServiceTest, self).tearDown() + for service in self.client.services(filters={'name': 'dockerpytest_'}): + try: + self.client.remove_service(service['ID']) + except docker.errors.APIError: + pass + try: + self.client.leave_swarm(force=True) + except docker.errors.APIError: + pass + + def get_service_name(self): + return 'dockerpytest_{0:x}'.format(random.getrandbits(64)) + + def create_simple_service(self, name=None): + if name: + name = 'dockerpytest_{0}'.format(name) + else: + name = self.get_service_name() + + container_spec = docker.api.ContainerSpec('busybox', ['echo', 'hello']) + task_tmpl = docker.api.TaskTemplate(container_spec) + return name, self.client.create_service(task_tmpl, name=name) + + @requires_api_version('1.24') + def test_list_services(self): + services = self.client.services() + assert isinstance(services, list) + + test_services = self.client.services(filters={'name': 'dockerpytest_'}) + assert len(test_services) == 0 + self.create_simple_service() + test_services = self.client.services(filters={'name': 'dockerpytest_'}) + assert len(test_services) == 1 + assert 'dockerpytest_' in test_services[0]['Spec']['Name'] + + def test_inspect_service_by_id(self): + svc_name, svc_id = self.create_simple_service() + svc_info = self.client.inspect_service(svc_id) + assert 'ID' in svc_info + assert svc_info['ID'] == svc_id['ID'] + + def test_inspect_service_by_name(self): + svc_name, svc_id = self.create_simple_service() + svc_info = self.client.inspect_service(svc_name) + assert 'ID' in svc_info + assert svc_info['ID'] == svc_id['ID'] + + def test_remove_service_by_id(self): + svc_name, svc_id = self.create_simple_service() + assert self.client.remove_service(svc_id) + test_services = self.client.services(filters={'name': 'dockerpytest_'}) + assert len(test_services) == 0 + + def test_rempve_service_by_name(self): + svc_name, svc_id = self.create_simple_service() + assert self.client.remove_service(svc_name) + test_services = self.client.services(filters={'name': 'dockerpytest_'}) + assert len(test_services) == 0 + + def test_create_service_simple(self): + name, svc_id = self.create_simple_service() + assert self.client.inspect_service(svc_id) + services = self.client.services(filters={'name': name}) + assert len(services) == 1 + assert services[0]['ID'] == svc_id['ID'] + + def test_update_service_name(self): + name, svc_id = self.create_simple_service() + svc_info = self.client.inspect_service(svc_id) + svc_version = svc_info['Version']['Index'] + new_name = self.get_service_name() + assert self.client.update_service( + svc_id, svc_version, name=new_name, + task_template=svc_info['Spec']['TaskTemplate'] + ) + svc_info = self.client.inspect_service(svc_id) + assert svc_info['Spec']['Name'] == new_name