From 6ed0c010189dc4d0ffb0511ae145346bfdc49117 Mon Sep 17 00:00:00 2001 From: Joffrey F Date: Tue, 9 May 2017 17:18:46 -0700 Subject: [PATCH] Adjust tests and add newest engine version to Jenkinsfile Signed-off-by: Joffrey F --- Jenkinsfile | 4 ++-- Makefile | 4 ++-- tests/helpers.py | 24 +++++++++++++++++------- tests/integration/api_service_test.py | 22 ++++++++++++++++------ 4 files changed, 37 insertions(+), 17 deletions(-) diff --git a/Jenkinsfile b/Jenkinsfile index a61e6d51..987df7af 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -7,7 +7,7 @@ def images = [:] // Note: Swarm in dind seem notoriously flimsy with 1.12.1+, which is why we're // sticking with 1.12.0 for the 1.12 series -def dockerVersions = ["1.12.0", "1.13.1", "17.04.0-ce-rc1"] +def dockerVersions = ["1.12.0", "1.13.1", "17.04.0-ce", "17.05.0-ce"] def buildImage = { name, buildargs, pyTag -> img = docker.image(name) @@ -35,7 +35,7 @@ def buildImages = { -> } def getAPIVersion = { engineVersion -> - def versionMap = ['1.12.': '1.24', '1.13.': '1.26', '17.04': '1.27'] + def versionMap = ['1.12.': '1.24', '1.13.': '1.26', '17.04': '1.27', '17.05': '1.29'] return versionMap[engineVersion.substring(0, 5)] } diff --git a/Makefile b/Makefile index cd117467..e4cd3f7b 100644 --- a/Makefile +++ b/Makefile @@ -41,8 +41,8 @@ integration-test: build integration-test-py3: build-py3 docker run --rm -v /var/run/docker.sock:/var/run/docker.sock docker-sdk-python3 py.test tests/integration/${file} -TEST_API_VERSION ?= 1.27 -TEST_ENGINE_VERSION ?= 17.04.0-ce-rc1 +TEST_API_VERSION ?= 1.29 +TEST_ENGINE_VERSION ?= 17.05.0-ce .PHONY: integration-dind integration-dind: build build-py3 diff --git a/tests/helpers.py b/tests/helpers.py index 1d86619a..124ae2da 100644 --- a/tests/helpers.py +++ b/tests/helpers.py @@ -54,13 +54,23 @@ def requires_api_version(version): ) -def requires_experimental(f): - @functools.wraps(f) - def wrapped(self, *args, **kwargs): - if not self.client.info()['ExperimentalBuild']: - pytest.skip('Feature requires Docker Engine experimental mode') - return f(self, *args, **kwargs) - return wrapped +def requires_experimental(until=None): + test_version = os.environ.get( + 'DOCKER_TEST_API_VERSION', docker.constants.DEFAULT_DOCKER_API_VERSION + ) + + def req_exp(f): + @functools.wraps(f) + def wrapped(self, *args, **kwargs): + if not self.client.info()['ExperimentalBuild']: + pytest.skip('Feature requires Docker Engine experimental mode') + return f(self, *args, **kwargs) + + if until and docker.utils.version_gte(test_version, until): + return f + return wrapped + + return req_exp def wait_on_condition(condition, delay=0.1, timeout=40): diff --git a/tests/integration/api_service_test.py b/tests/integration/api_service_test.py index 6858ad0e..914e516b 100644 --- a/tests/integration/api_service_test.py +++ b/tests/integration/api_service_test.py @@ -103,18 +103,28 @@ class ServiceTest(BaseAPIIntegrationTest): assert services[0]['ID'] == svc_id['ID'] @requires_api_version('1.25') - @requires_experimental + @requires_experimental(until='1.29') def test_service_logs(self): name, svc_id = self.create_simple_service() assert self.get_service_container(name, include_stopped=True) - logs = self.client.service_logs(svc_id, stdout=True, is_tty=False) - log_line = next(logs) + attempts = 20 + while True: + if attempts == 0: + self.fail('No service logs produced by endpoint') + return + logs = self.client.service_logs(svc_id, stdout=True, is_tty=False) + try: + log_line = next(logs) + except StopIteration: + attempts -= 1 + time.sleep(0.1) + continue + else: + break + if six.PY3: log_line = log_line.decode('utf-8') assert 'hello\n' in log_line - assert 'com.docker.swarm.service.id={}'.format( - svc_id['ID'] - ) in log_line def test_create_service_custom_log_driver(self): container_spec = docker.types.ContainerSpec(