From 489db2a63631f29c04e25ac7ed48071a50181e3c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebasti=C3=A1n=20Ram=C3=ADrez?= Date: Tue, 15 Oct 2019 10:17:41 -0500 Subject: [PATCH 1/4] :recycle: Refactor tests to use env vars, Travis matrix, and push dated tags --- .travis.yml | 23 +++-- docker-compose.build.yml | 20 ----- scripts/build-push-all.sh | 7 ++ scripts/build-push.sh | 10 ++- scripts/process_all.py | 84 +++++++++++++++++++ scripts/test-all.sh | 4 + scripts/test.sh | 4 +- tests/test_01_main/test_defaults.py | 38 ++------- tests/test_01_main/test_env_vars_1.py | 40 ++------- tests/test_01_main/test_env_vars_2.py | 19 ++--- tests/test_01_main/test_env_vars_3.py | 40 ++------- tests/test_02_app/test_custom_app.py | 71 +++------------- tests/test_02_app/test_package_app.py | 40 ++------- tests/test_02_app/test_package_app_config.py | 40 ++------- .../test_package_app_custom_config.py | 40 ++------- .../test_package_app_sub_config.py | 40 ++------- tests/test_02_app/test_simple_app.py | 41 ++------- tests/test_02_app/test_simple_app_prestart.py | 41 ++------- 18 files changed, 212 insertions(+), 390 deletions(-) delete mode 100644 docker-compose.build.yml create mode 100644 scripts/build-push-all.sh create mode 100644 scripts/process_all.py create mode 100644 scripts/test-all.sh diff --git a/.travis.yml b/.travis.yml index e7b57af..513bc12 100644 --- a/.travis.yml +++ b/.travis.yml @@ -11,11 +11,24 @@ install: services: - docker +env: + - NAME='latest' BUILD_PATH='python3.7' TEST_STR1='Hello World from a default Python 3.7 app in a Docker container, with Meinheld and Gunicorn (default)' TEST_STR2='Test app. From Meinheld with Gunicorn. Using Python 3.7' + - NAME='python3.7' BUILD_PATH='python3.7' TEST_STR1='Hello World from a default Python 3.7 app in a Docker container, with Meinheld and Gunicorn (default)' TEST_STR2='Test app. From Meinheld with Gunicorn. Using Python 3.7' + - NAME='python3.6' BUILD_PATH='python3.6' TEST_STR1='Hello World from a default Python 3.6 app in a Docker container, with Meinheld and Gunicorn (default)' TEST_STR2='Test app. From Meinheld with Gunicorn. Using Python 3.6' + - NAME='python2.7' BUILD_PATH='python3.6' TEST_STR1='Hello World from a default Python 2.7 app in a Docker container, with Meinheld and Gunicorn (default)' TEST_STR2='Test app. From Meinheld with Gunicorn. Using Python 2.7' + - NAME='python3.7-alpine3.8' BUILD_PATH='python3.7-alpine3.8' TEST_STR1='Hello World from a default Python 3.7 app in a Docker container, with Meinheld and Gunicorn on Alpine (default)' TEST_STR2='Test app. From Meinheld with Gunicorn. Using Python 3.7' + - NAME='python3.6-alpine3.8' BUILD_PATH='python3.6-alpine3.8' TEST_STR1='Hello World from a default Python 3.6 app in a Docker container, with Meinheld and Gunicorn on Alpine (default)' TEST_STR2='Test app. From Meinheld with Gunicorn. Using Python 3.6' + script: - bash scripts/test.sh -deploy: - provider: script - script: bash scripts/build-push.sh - on: - branch: master +jobs: + include: + - script: bash scripts/test.sh + - stage: deploy + script: skip + deploy: + provider: script + script: bash scripts/build-push-all.sh + on: + branch: master diff --git a/docker-compose.build.yml b/docker-compose.build.yml deleted file mode 100644 index 4091be6..0000000 --- a/docker-compose.build.yml +++ /dev/null @@ -1,20 +0,0 @@ -version: '3' -services: - latest: - build: ./python3.7 - image: tiangolo/meinheld-gunicorn:latest - python2.7: - build: ./python2.7 - image: tiangolo/meinheld-gunicorn:python2.7 - python3.6: - build: ./python3.6 - image: tiangolo/meinheld-gunicorn:python3.6 - python3.6-alpine3.8: - build: ./python3.6-alpine3.8 - image: tiangolo/meinheld-gunicorn:python3.6-alpine3.8 - python3.7: - build: ./python3.7 - image: tiangolo/meinheld-gunicorn:python3.7 - python3.7-alpine3.8: - build: ./python3.7-alpine3.8 - image: tiangolo/meinheld-gunicorn:python3.7-alpine3.8 diff --git a/scripts/build-push-all.sh b/scripts/build-push-all.sh new file mode 100644 index 0000000..e54d3f1 --- /dev/null +++ b/scripts/build-push-all.sh @@ -0,0 +1,7 @@ +#!/usr/bin/env bash + +set -e + +echo "$DOCKER_PASSWORD" | docker login -u "$DOCKER_USERNAME" --password-stdin + +BUILD_PUSH=1 python scripts/process_all.py diff --git a/scripts/build-push.sh b/scripts/build-push.sh index 7a00143..d59325e 100644 --- a/scripts/build-push.sh +++ b/scripts/build-push.sh @@ -2,8 +2,12 @@ set -e -echo "$DOCKER_PASSWORD" | docker login -u "$DOCKER_USERNAME" --password-stdin +use_tag="tiangolo/meinheld-gunicorn:$NAME" +use_dated_tag="${use_tag}-$(date -I)" -docker-compose -f docker-compose.build.yml build +docker build -t "$use_tag" "$BUILD_PATH" -docker-compose -f docker-compose.build.yml push +docker tag "$use_tag" "$use_dated_tag" + +docker push "$use_tag" +docker push "$use_dated_tag" diff --git a/scripts/process_all.py b/scripts/process_all.py new file mode 100644 index 0000000..d273111 --- /dev/null +++ b/scripts/process_all.py @@ -0,0 +1,84 @@ +import os +import subprocess +import sys + +environments = [ + { + "NAME": "latest", + "BUILD_PATH": "python3.7", + "TEST_STR1": "Hello World from a default Python 3.7 app in a Docker container, with Meinheld and Gunicorn (default)", + "TEST_STR2": "Test app. From Meinheld with Gunicorn. Using Python 3.7", + }, + { + "NAME": "python3.7", + "BUILD_PATH": "python3.7", + "TEST_STR1": "Hello World from a default Python 3.7 app in a Docker container, with Meinheld and Gunicorn (default)", + "TEST_STR2": "Test app. From Meinheld with Gunicorn. Using Python 3.7", + }, + { + "NAME": "python3.6", + "BUILD_PATH": "python3.6", + "TEST_STR1": "Hello World from a default Python 3.6 app in a Docker container, with Meinheld and Gunicorn (default)", + "TEST_STR2": "Test app. From Meinheld with Gunicorn. Using Python 3.6", + }, + { + "NAME": "python2.7", + "BUILD_PATH": "python2.7", + "TEST_STR1": "Hello World from a default Python 2.7 app in a Docker container, with Meinheld and Gunicorn (default)", + "TEST_STR2": "Test app. From Meinheld with Gunicorn. Using Python 2.7", + }, + { + "NAME": "python3.7-alpine3.8", + "BUILD_PATH": "python3.7-alpine3.8", + "TEST_STR1": "Hello World from a default Python 3.7 app in a Docker container, with Meinheld and Gunicorn on Alpine (default)", + "TEST_STR2": "Test app. From Meinheld with Gunicorn. Using Python 3.7", + }, + { + "NAME": "python3.6-alpine3.8", + "BUILD_PATH": "python3.6-alpine3.8", + "TEST_STR1": "Hello World from a default Python 3.6 app in a Docker container, with Meinheld and Gunicorn on Alpine (default)", + "TEST_STR2": "Test app. From Meinheld with Gunicorn. Using Python 3.6", + }, +] + +start_with = os.environ.get("START_WITH") +build_push = os.environ.get("BUILD_PUSH") + + +def process_tag(*, env: dict): + use_env = {**os.environ, **env} + script = "scripts/test.sh" + if build_push: + script = "scripts/build-push.sh" + return_code = subprocess.call(["bash", script], env=use_env) + if return_code != 0: + sys.exit(return_code) + + +def print_version_envs(): + env_lines = [] + for env in environments: + env_vars = [] + for key, value in env.items(): + env_vars.append(f"{key}='{value}'") + env_lines.append(" ".join(env_vars)) + for line in env_lines: + print(line) + + +def main(): + start_at = 0 + if start_with: + start_at = [ + i for i, env in enumerate((environments)) if env["NAME"] == start_with + ][0] + for i, env in enumerate(environments[start_at:]): + print(f"Processing tag: {env['NAME']}") + process_tag(env=env) + + +if __name__ == "__main__": + if len(sys.argv) > 1: + print_version_envs() + else: + main() diff --git a/scripts/test-all.sh b/scripts/test-all.sh new file mode 100644 index 0000000..89b34d3 --- /dev/null +++ b/scripts/test-all.sh @@ -0,0 +1,4 @@ +#!/usr/bin/env bash +set -e + +python scripts/process_all.py diff --git a/scripts/test.sh b/scripts/test.sh index dfcc3a9..c88f592 100644 --- a/scripts/test.sh +++ b/scripts/test.sh @@ -1,5 +1,7 @@ #!/usr/bin/env bash set -e -docker-compose -f docker-compose.build.yml build +use_tag="tiangolo/meinheld-gunicorn:$NAME" + +docker build -t "$use_tag" "$BUILD_PATH" pytest tests diff --git a/tests/test_01_main/test_defaults.py b/tests/test_01_main/test_defaults.py index 86cae69..3b0caf1 100644 --- a/tests/test_01_main/test_defaults.py +++ b/tests/test_01_main/test_defaults.py @@ -1,3 +1,4 @@ +import os import time import docker @@ -27,46 +28,21 @@ def verify_container(container, response_text): assert response.text == response_text -@pytest.mark.parametrize( - "image,response_text", - [ - ( - "tiangolo/meinheld-gunicorn:python2.7", - "Hello World from a default Python 2.7 app in a Docker container, with Meinheld and Gunicorn (default)", - ), - ( - "tiangolo/meinheld-gunicorn:python3.6", - "Hello World from a default Python 3.6 app in a Docker container, with Meinheld and Gunicorn (default)", - ), - ( - "tiangolo/meinheld-gunicorn:python3.6-alpine3.8", - "Hello World from a default Python 3.6 app in a Docker container, with Meinheld and Gunicorn on Alpine (default)", - ), - ( - "tiangolo/meinheld-gunicorn:python3.7", - "Hello World from a default Python 3.7 app in a Docker container, with Meinheld and Gunicorn (default)", - ), - ( - "tiangolo/meinheld-gunicorn:python3.7-alpine3.8", - "Hello World from a default Python 3.7 app in a Docker container, with Meinheld and Gunicorn on Alpine (default)", - ), - ( - "tiangolo/meinheld-gunicorn:latest", - "Hello World from a default Python 3.7 app in a Docker container, with Meinheld and Gunicorn (default)", - ), - ], -) def test_defaults(image, response_text): + name = os.getenv("NAME") + image = f"tiangolo/meinheld-gunicorn:{name}" + response_text = os.getenv("TEST_STR1") + sleep_time = int(os.getenv("SLEEP_TIME", 1)) remove_previous_container(client) container = client.containers.run( image, name=CONTAINER_NAME, ports={"80": "8000"}, detach=True ) - time.sleep(1) + time.sleep(sleep_time) verify_container(container, response_text) container.stop() # Test that everything works after restarting too container.start() - time.sleep(1) + time.sleep(sleep_time) verify_container(container, response_text) container.stop() container.remove() diff --git a/tests/test_01_main/test_env_vars_1.py b/tests/test_01_main/test_env_vars_1.py index 268a839..bf26018 100644 --- a/tests/test_01_main/test_env_vars_1.py +++ b/tests/test_01_main/test_env_vars_1.py @@ -1,3 +1,4 @@ +import os import time import docker @@ -26,36 +27,11 @@ def verify_container(container, response_text): assert response.text == response_text -@pytest.mark.parametrize( - "image,response_text", - [ - ( - "tiangolo/meinheld-gunicorn:python2.7", - "Hello World from a default Python 2.7 app in a Docker container, with Meinheld and Gunicorn (default)", - ), - ( - "tiangolo/meinheld-gunicorn:python3.6", - "Hello World from a default Python 3.6 app in a Docker container, with Meinheld and Gunicorn (default)", - ), - ( - "tiangolo/meinheld-gunicorn:python3.6-alpine3.8", - "Hello World from a default Python 3.6 app in a Docker container, with Meinheld and Gunicorn on Alpine (default)", - ), - ( - "tiangolo/meinheld-gunicorn:python3.7", - "Hello World from a default Python 3.7 app in a Docker container, with Meinheld and Gunicorn (default)", - ), - ( - "tiangolo/meinheld-gunicorn:python3.7-alpine3.8", - "Hello World from a default Python 3.7 app in a Docker container, with Meinheld and Gunicorn on Alpine (default)", - ), - ( - "tiangolo/meinheld-gunicorn:latest", - "Hello World from a default Python 3.7 app in a Docker container, with Meinheld and Gunicorn (default)", - ), - ], -) -def test_env_vars_1(image, response_text): +def test_env_vars_1(): + name = os.getenv("NAME") + image = f"tiangolo/meinheld-gunicorn:{name}" + response_text = os.getenv("TEST_STR1") + sleep_time = int(os.getenv("SLEEP_TIME", 1)) remove_previous_container(client) container = client.containers.run( image, @@ -64,12 +40,12 @@ def test_env_vars_1(image, response_text): ports={"8000": "8000"}, detach=True, ) - time.sleep(1) + time.sleep(sleep_time) verify_container(container, response_text) container.stop() # Test that everything works after restarting too container.start() - time.sleep(1) + time.sleep(sleep_time) verify_container(container, response_text) container.stop() container.remove() diff --git a/tests/test_01_main/test_env_vars_2.py b/tests/test_01_main/test_env_vars_2.py index b4928c0..e0fd7a3 100644 --- a/tests/test_01_main/test_env_vars_2.py +++ b/tests/test_01_main/test_env_vars_2.py @@ -1,3 +1,4 @@ +import os import time import docker @@ -31,18 +32,10 @@ def verify_container(container): ) -@pytest.mark.parametrize( - "image", - [ - ("tiangolo/meinheld-gunicorn:python2.7"), - ("tiangolo/meinheld-gunicorn:python3.6"), - ("tiangolo/meinheld-gunicorn:python3.7"), - ("tiangolo/meinheld-gunicorn:latest"), - ("tiangolo/meinheld-gunicorn:python3.6-alpine3.8"), - ("tiangolo/meinheld-gunicorn:python3.7-alpine3.8"), - ], -) def test_env_vars_2(image): + name = os.getenv("NAME") + image = f"tiangolo/meinheld-gunicorn:{name}" + sleep_time = int(os.getenv("SLEEP_TIME", 1)) remove_previous_container(client) container = client.containers.run( image, @@ -51,12 +44,12 @@ def test_env_vars_2(image): ports={"80": "8000"}, detach=True, ) - time.sleep(1) + time.sleep(sleep_time) verify_container(container) container.stop() # Test that everything works after restarting too container.start() - time.sleep(1) + time.sleep(sleep_time) verify_container(container) container.stop() container.remove() diff --git a/tests/test_01_main/test_env_vars_3.py b/tests/test_01_main/test_env_vars_3.py index 04e8c25..6cc2c63 100644 --- a/tests/test_01_main/test_env_vars_3.py +++ b/tests/test_01_main/test_env_vars_3.py @@ -1,3 +1,4 @@ +import os import time import docker @@ -24,36 +25,11 @@ def verify_container(container, response_text): assert response.text == response_text -@pytest.mark.parametrize( - "image,response_text", - [ - ( - "tiangolo/meinheld-gunicorn:python2.7", - "Hello World from a default Python 2.7 app in a Docker container, with Meinheld and Gunicorn (default)", - ), - ( - "tiangolo/meinheld-gunicorn:python3.6", - "Hello World from a default Python 3.6 app in a Docker container, with Meinheld and Gunicorn (default)", - ), - ( - "tiangolo/meinheld-gunicorn:python3.6-alpine3.8", - "Hello World from a default Python 3.6 app in a Docker container, with Meinheld and Gunicorn on Alpine (default)", - ), - ( - "tiangolo/meinheld-gunicorn:python3.7", - "Hello World from a default Python 3.7 app in a Docker container, with Meinheld and Gunicorn (default)", - ), - ( - "tiangolo/meinheld-gunicorn:python3.7-alpine3.8", - "Hello World from a default Python 3.7 app in a Docker container, with Meinheld and Gunicorn on Alpine (default)", - ), - ( - "tiangolo/meinheld-gunicorn:latest", - "Hello World from a default Python 3.7 app in a Docker container, with Meinheld and Gunicorn (default)", - ), - ], -) -def test_env_bind(image, response_text): +def test_env_bind(): + name = os.getenv("NAME") + image = f"tiangolo/meinheld-gunicorn:{name}" + response_text = os.getenv("TEST_STR1") + sleep_time = int(os.getenv("SLEEP_TIME", 1)) remove_previous_container(client) container = client.containers.run( image, @@ -62,12 +38,12 @@ def test_env_bind(image, response_text): ports={"8080": "8000"}, detach=True, ) - time.sleep(1) + time.sleep(sleep_time) verify_container(container, response_text) container.stop() # Test that everything works after restarting too container.start() - time.sleep(1) + time.sleep(sleep_time) verify_container(container, response_text) container.stop() container.remove() diff --git a/tests/test_02_app/test_custom_app.py b/tests/test_02_app/test_custom_app.py index 6e99d02..9cce6b6 100644 --- a/tests/test_02_app/test_custom_app.py +++ b/tests/test_02_app/test_custom_app.py @@ -1,3 +1,4 @@ +import os import time from pathlib import Path, PurePath @@ -33,66 +34,18 @@ def verify_container(container, response_text): @pytest.mark.parametrize( - "dockerfile,environment,response_text", + "environment", [ - ( - "python2.7.dockerfile", - {"MODULE_NAME": "custom_app.custom_main", "VARIABLE_NAME": "custom_var"}, - "Test app. From Meinheld with Gunicorn. Using Python 2.7", - ), - ( - "python3.6.dockerfile", - {"MODULE_NAME": "custom_app.custom_main", "VARIABLE_NAME": "custom_var"}, - "Test app. From Meinheld with Gunicorn. Using Python 3.6", - ), - ( - "python3.6-alpine3.8.dockerfile", - {"MODULE_NAME": "custom_app.custom_main", "VARIABLE_NAME": "custom_var"}, - "Test app. From Meinheld with Gunicorn. Using Python 3.6", - ), - ( - "python3.7.dockerfile", - {"MODULE_NAME": "custom_app.custom_main", "VARIABLE_NAME": "custom_var"}, - "Test app. From Meinheld with Gunicorn. Using Python 3.7", - ), - ( - "python3.7-alpine3.8.dockerfile", - {"MODULE_NAME": "custom_app.custom_main", "VARIABLE_NAME": "custom_var"}, - "Test app. From Meinheld with Gunicorn. Using Python 3.7", - ), - ( - "latest.dockerfile", - {"MODULE_NAME": "custom_app.custom_main", "VARIABLE_NAME": "custom_var"}, - "Test app. From Meinheld with Gunicorn. Using Python 3.7", - ), - ( - "python3.6.dockerfile", - {"APP_MODULE": "custom_app.custom_main:custom_var"}, - "Test app. From Meinheld with Gunicorn. Using Python 3.6", - ), - ( - "python3.6-alpine3.8.dockerfile", - {"APP_MODULE": "custom_app.custom_main:custom_var"}, - "Test app. From Meinheld with Gunicorn. Using Python 3.6", - ), - ( - "python3.7.dockerfile", - {"APP_MODULE": "custom_app.custom_main:custom_var"}, - "Test app. From Meinheld with Gunicorn. Using Python 3.7", - ), - ( - "python3.7-alpine3.8.dockerfile", - {"APP_MODULE": "custom_app.custom_main:custom_var"}, - "Test app. From Meinheld with Gunicorn. Using Python 3.7", - ), - ( - "latest.dockerfile", - {"APP_MODULE": "custom_app.custom_main:custom_var"}, - "Test app. From Meinheld with Gunicorn. Using Python 3.7", - ), + {"MODULE_NAME": "custom_app.custom_main", "VARIABLE_NAME": "custom_var"}, + {"APP_MODULE": "custom_app.custom_main:custom_var"}, + ], ) -def test_custom_app(dockerfile, environment, response_text): +def test_custom_app(environment): + name = os.getenv("NAME") + dockerfile = f"{name}.dockerfile" + response_text = os.getenv("TEST_STR2") + sleep_time = int(os.getenv("SLEEP_TIME", 1)) remove_previous_container(client) test_path: PurePath = Path(__file__) path = test_path.parent / "custom_app" @@ -104,12 +57,12 @@ def test_custom_app(dockerfile, environment, response_text): ports={"80": "8000"}, detach=True, ) - time.sleep(1) + time.sleep(sleep_time) verify_container(container, response_text) container.stop() # Test that everything works after restarting too container.start() - time.sleep(1) + time.sleep(sleep_time) verify_container(container, response_text) container.stop() container.remove() diff --git a/tests/test_02_app/test_package_app.py b/tests/test_02_app/test_package_app.py index 96967b7..dccdd72 100644 --- a/tests/test_02_app/test_package_app.py +++ b/tests/test_02_app/test_package_app.py @@ -1,3 +1,4 @@ +import os import time from pathlib import Path, PurePath @@ -34,36 +35,11 @@ def verify_container(container, response_text): assert response.text == response_text -@pytest.mark.parametrize( - "dockerfile,response_text", - [ - ( - "python2.7.dockerfile", - "Test app. From Meinheld with Gunicorn. Using Python 2.7", - ), - ( - "python3.6.dockerfile", - "Test app. From Meinheld with Gunicorn. Using Python 3.6", - ), - ( - "python3.7.dockerfile", - "Test app. From Meinheld with Gunicorn. Using Python 3.7", - ), - ( - "latest.dockerfile", - "Test app. From Meinheld with Gunicorn. Using Python 3.7", - ), - ( - "python3.6-alpine3.8.dockerfile", - "Test app. From Meinheld with Gunicorn. Using Python 3.6", - ), - ( - "python3.7-alpine3.8.dockerfile", - "Test app. From Meinheld with Gunicorn. Using Python 3.7", - ), - ], -) -def test_package_app(dockerfile, response_text): +def test_package_app(): + name = os.getenv("NAME") + dockerfile = f"{name}.dockerfile" + response_text = os.getenv("TEST_STR2") + sleep_time = int(os.getenv("SLEEP_TIME", 1)) remove_previous_container(client) test_path: PurePath = Path(__file__) path = test_path.parent / "package_app" @@ -71,12 +47,12 @@ def test_package_app(dockerfile, response_text): container = client.containers.run( IMAGE_NAME, name=CONTAINER_NAME, ports={"80": "8000"}, detach=True ) - time.sleep(1) + time.sleep(sleep_time) verify_container(container, response_text) container.stop() # Test that everything works after restarting too container.start() - time.sleep(1) + time.sleep(sleep_time) verify_container(container, response_text) container.stop() container.remove() diff --git a/tests/test_02_app/test_package_app_config.py b/tests/test_02_app/test_package_app_config.py index 59c250e..6c13856 100644 --- a/tests/test_02_app/test_package_app_config.py +++ b/tests/test_02_app/test_package_app_config.py @@ -1,3 +1,4 @@ +import os import time from pathlib import Path, PurePath @@ -34,36 +35,11 @@ def verify_container(container, response_text): assert response.text == response_text -@pytest.mark.parametrize( - "dockerfile,response_text", - [ - ( - "python2.7.dockerfile", - "Test app. From Meinheld with Gunicorn. Using Python 2.7", - ), - ( - "python3.6.dockerfile", - "Test app. From Meinheld with Gunicorn. Using Python 3.6", - ), - ( - "python3.7.dockerfile", - "Test app. From Meinheld with Gunicorn. Using Python 3.7", - ), - ( - "latest.dockerfile", - "Test app. From Meinheld with Gunicorn. Using Python 3.7", - ), - ( - "python3.6-alpine3.8.dockerfile", - "Test app. From Meinheld with Gunicorn. Using Python 3.6", - ), - ( - "python3.7-alpine3.8.dockerfile", - "Test app. From Meinheld with Gunicorn. Using Python 3.7", - ), - ], -) -def test_package_app_config(dockerfile, response_text): +def test_package_app_config(): + name = os.getenv("NAME") + dockerfile = f"{name}.dockerfile" + response_text = os.getenv("TEST_STR2") + sleep_time = int(os.getenv("SLEEP_TIME", 1)) remove_previous_container(client) test_path: PurePath = Path(__file__) path = test_path.parent / "package_app_config" @@ -71,12 +47,12 @@ def test_package_app_config(dockerfile, response_text): container = client.containers.run( IMAGE_NAME, name=CONTAINER_NAME, ports={"8000": "8000"}, detach=True ) - time.sleep(1) + time.sleep(sleep_time) verify_container(container, response_text) container.stop() # Test that everything works after restarting too container.start() - time.sleep(1) + time.sleep(sleep_time) verify_container(container, response_text) container.stop() container.remove() diff --git a/tests/test_02_app/test_package_app_custom_config.py b/tests/test_02_app/test_package_app_custom_config.py index 1d7aa19..d4eee41 100644 --- a/tests/test_02_app/test_package_app_custom_config.py +++ b/tests/test_02_app/test_package_app_custom_config.py @@ -1,3 +1,4 @@ +import os import time from pathlib import Path, PurePath @@ -34,36 +35,11 @@ def verify_container(container, response_text): assert response.text == response_text -@pytest.mark.parametrize( - "dockerfile,response_text", - [ - ( - "python2.7.dockerfile", - "Test app. From Meinheld with Gunicorn. Using Python 2.7", - ), - ( - "python3.6.dockerfile", - "Test app. From Meinheld with Gunicorn. Using Python 3.6", - ), - ( - "python3.7.dockerfile", - "Test app. From Meinheld with Gunicorn. Using Python 3.7", - ), - ( - "latest.dockerfile", - "Test app. From Meinheld with Gunicorn. Using Python 3.7", - ), - ( - "python3.6-alpine3.8.dockerfile", - "Test app. From Meinheld with Gunicorn. Using Python 3.6", - ), - ( - "python3.7-alpine3.8.dockerfile", - "Test app. From Meinheld with Gunicorn. Using Python 3.7", - ), - ], -) -def test_package_app_custom_config(dockerfile, response_text): +def test_package_app_custom_config(): + name = os.getenv("NAME") + dockerfile = f"{name}.dockerfile" + response_text = os.getenv("TEST_STR2") + sleep_time = int(os.getenv("SLEEP_TIME", 1)) remove_previous_container(client) test_path: PurePath = Path(__file__) path = test_path.parent / "package_app_custom_config" @@ -75,12 +51,12 @@ def test_package_app_custom_config(dockerfile, response_text): ports={"8000": "8000"}, detach=True, ) - time.sleep(1) + time.sleep(sleep_time) verify_container(container, response_text) container.stop() # Test that everything works after restarting too container.start() - time.sleep(1) + time.sleep(sleep_time) verify_container(container, response_text) container.stop() container.remove() diff --git a/tests/test_02_app/test_package_app_sub_config.py b/tests/test_02_app/test_package_app_sub_config.py index 8b95fbe..0b03c9e 100644 --- a/tests/test_02_app/test_package_app_sub_config.py +++ b/tests/test_02_app/test_package_app_sub_config.py @@ -1,3 +1,4 @@ +import os import time from pathlib import Path, PurePath @@ -34,36 +35,11 @@ def verify_container(container, response_text): assert response.text == response_text -@pytest.mark.parametrize( - "dockerfile,response_text", - [ - ( - "python2.7.dockerfile", - "Test app. From Meinheld with Gunicorn. Using Python 2.7", - ), - ( - "python3.6.dockerfile", - "Test app. From Meinheld with Gunicorn. Using Python 3.6", - ), - ( - "python3.7.dockerfile", - "Test app. From Meinheld with Gunicorn. Using Python 3.7", - ), - ( - "latest.dockerfile", - "Test app. From Meinheld with Gunicorn. Using Python 3.7", - ), - ( - "python3.6-alpine3.8.dockerfile", - "Test app. From Meinheld with Gunicorn. Using Python 3.6", - ), - ( - "python3.7-alpine3.8.dockerfile", - "Test app. From Meinheld with Gunicorn. Using Python 3.7", - ), - ], -) -def test_package_app_sub_config(dockerfile, response_text): +def test_package_app_sub_config(): + name = os.getenv("NAME") + dockerfile = f"{name}.dockerfile" + response_text = os.getenv("TEST_STR2") + sleep_time = int(os.getenv("SLEEP_TIME", 1)) remove_previous_container(client) test_path: PurePath = Path(__file__) path = test_path.parent / "package_app_sub_config" @@ -71,12 +47,12 @@ def test_package_app_sub_config(dockerfile, response_text): container = client.containers.run( IMAGE_NAME, name=CONTAINER_NAME, ports={"8000": "8000"}, detach=True ) - time.sleep(1) + time.sleep(sleep_time) verify_container(container, response_text) container.stop() # Test that everything works after restarting too container.start() - time.sleep(1) + time.sleep(sleep_time) verify_container(container, response_text) container.stop() container.remove() diff --git a/tests/test_02_app/test_simple_app.py b/tests/test_02_app/test_simple_app.py index 27b4398..62a6a72 100644 --- a/tests/test_02_app/test_simple_app.py +++ b/tests/test_02_app/test_simple_app.py @@ -1,3 +1,4 @@ +import os import time from pathlib import Path, PurePath @@ -34,50 +35,24 @@ def verify_container(container, response_text): assert response.text == response_text -@pytest.mark.parametrize( - "dockerfile,response_text", - [ - ( - "python2.7.dockerfile", - "Test app. From Meinheld with Gunicorn. Using Python 2.7", - ), - ( - "python3.6.dockerfile", - "Test app. From Meinheld with Gunicorn. Using Python 3.6", - ), - ( - "python3.7.dockerfile", - "Test app. From Meinheld with Gunicorn. Using Python 3.7", - ), - ( - "latest.dockerfile", - "Test app. From Meinheld with Gunicorn. Using Python 3.7", - ), - ( - "python3.6-alpine3.8.dockerfile", - "Test app. From Meinheld with Gunicorn. Using Python 3.6", - ), - ( - "python3.7-alpine3.8.dockerfile", - "Test app. From Meinheld with Gunicorn. Using Python 3.7", - ), - ], -) -def test_simple_app(dockerfile, response_text): +def test_simple_app(): + name = os.getenv("NAME") + dockerfile = f"{name}.dockerfile" + response_text = os.getenv("TEST_STR2") + sleep_time = int(os.getenv("SLEEP_TIME", 1)) remove_previous_container(client) - IMAGE_NAME test_path: PurePath = Path(__file__) path = test_path.parent / "simple_app" client.images.build(path=str(path), dockerfile=dockerfile, tag=IMAGE_NAME) container = client.containers.run( IMAGE_NAME, name=CONTAINER_NAME, ports={"80": "8000"}, detach=True ) - time.sleep(1) + time.sleep(sleep_time) verify_container(container, response_text) container.stop() # Test that everything works after restarting too container.start() - time.sleep(1) + time.sleep(sleep_time) verify_container(container, response_text) container.stop() container.remove() diff --git a/tests/test_02_app/test_simple_app_prestart.py b/tests/test_02_app/test_simple_app_prestart.py index 4d910f5..1683f49 100644 --- a/tests/test_02_app/test_simple_app_prestart.py +++ b/tests/test_02_app/test_simple_app_prestart.py @@ -1,3 +1,4 @@ +import os import time from pathlib import Path, PurePath @@ -32,50 +33,24 @@ def verify_container(container, response_text): assert response.text == response_text -@pytest.mark.parametrize( - "dockerfile,response_text", - [ - ( - "python2.7.dockerfile", - "Test app. From Meinheld with Gunicorn. Using Python 2.7", - ), - ( - "python3.6.dockerfile", - "Test app. From Meinheld with Gunicorn. Using Python 3.6", - ), - ( - "python3.7.dockerfile", - "Test app. From Meinheld with Gunicorn. Using Python 3.7", - ), - ( - "latest.dockerfile", - "Test app. From Meinheld with Gunicorn. Using Python 3.7", - ), - ( - "python3.6-alpine3.8.dockerfile", - "Test app. From Meinheld with Gunicorn. Using Python 3.6", - ), - ( - "python3.7-alpine3.8.dockerfile", - "Test app. From Meinheld with Gunicorn. Using Python 3.7", - ), - ], -) -def test_simple_app(dockerfile, response_text): +def test_simple_app(): + name = os.getenv("NAME") + dockerfile = f"{name}.dockerfile" + response_text = os.getenv("TEST_STR2") + sleep_time = int(os.getenv("SLEEP_TIME", 1)) remove_previous_container(client) - IMAGE_NAME test_path: PurePath = Path(__file__) path = test_path.parent / "simple_app_prestart" client.images.build(path=str(path), dockerfile=dockerfile, tag=IMAGE_NAME) container = client.containers.run( IMAGE_NAME, name=CONTAINER_NAME, ports={"80": "8000"}, detach=True ) - time.sleep(1) + time.sleep(sleep_time) verify_container(container, response_text) container.stop() # Test that everything works after restarting too container.start() - time.sleep(1) + time.sleep(sleep_time) verify_container(container, response_text) container.stop() container.remove() From 2f9bb9e1ecf635a7d08aa8a8457efcd19462d62f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebasti=C3=A1n=20Ram=C3=ADrez?= Date: Tue, 15 Oct 2019 10:21:45 -0500 Subject: [PATCH 2/4] :white_check_mark: Fix obsolete pytest parameters --- tests/test_01_main/test_defaults.py | 2 +- tests/test_01_main/test_env_vars_2.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/test_01_main/test_defaults.py b/tests/test_01_main/test_defaults.py index 3b0caf1..5e2c3ea 100644 --- a/tests/test_01_main/test_defaults.py +++ b/tests/test_01_main/test_defaults.py @@ -28,7 +28,7 @@ def verify_container(container, response_text): assert response.text == response_text -def test_defaults(image, response_text): +def test_defaults(): name = os.getenv("NAME") image = f"tiangolo/meinheld-gunicorn:{name}" response_text = os.getenv("TEST_STR1") diff --git a/tests/test_01_main/test_env_vars_2.py b/tests/test_01_main/test_env_vars_2.py index e0fd7a3..8758cd6 100644 --- a/tests/test_01_main/test_env_vars_2.py +++ b/tests/test_01_main/test_env_vars_2.py @@ -32,7 +32,7 @@ def verify_container(container): ) -def test_env_vars_2(image): +def test_env_vars_2(): name = os.getenv("NAME") image = f"tiangolo/meinheld-gunicorn:{name}" sleep_time = int(os.getenv("SLEEP_TIME", 1)) From 189fb395b4f65a3c76f630119061ef0b9d328225 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebasti=C3=A1n=20Ram=C3=ADrez?= Date: Tue, 15 Oct 2019 10:31:58 -0500 Subject: [PATCH 3/4] :bug: Fix incorrect test build path in Travis --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 513bc12..ffbf929 100644 --- a/.travis.yml +++ b/.travis.yml @@ -15,7 +15,7 @@ env: - NAME='latest' BUILD_PATH='python3.7' TEST_STR1='Hello World from a default Python 3.7 app in a Docker container, with Meinheld and Gunicorn (default)' TEST_STR2='Test app. From Meinheld with Gunicorn. Using Python 3.7' - NAME='python3.7' BUILD_PATH='python3.7' TEST_STR1='Hello World from a default Python 3.7 app in a Docker container, with Meinheld and Gunicorn (default)' TEST_STR2='Test app. From Meinheld with Gunicorn. Using Python 3.7' - NAME='python3.6' BUILD_PATH='python3.6' TEST_STR1='Hello World from a default Python 3.6 app in a Docker container, with Meinheld and Gunicorn (default)' TEST_STR2='Test app. From Meinheld with Gunicorn. Using Python 3.6' - - NAME='python2.7' BUILD_PATH='python3.6' TEST_STR1='Hello World from a default Python 2.7 app in a Docker container, with Meinheld and Gunicorn (default)' TEST_STR2='Test app. From Meinheld with Gunicorn. Using Python 2.7' + - NAME='python2.7' BUILD_PATH='python2.6' TEST_STR1='Hello World from a default Python 2.7 app in a Docker container, with Meinheld and Gunicorn (default)' TEST_STR2='Test app. From Meinheld with Gunicorn. Using Python 2.7' - NAME='python3.7-alpine3.8' BUILD_PATH='python3.7-alpine3.8' TEST_STR1='Hello World from a default Python 3.7 app in a Docker container, with Meinheld and Gunicorn on Alpine (default)' TEST_STR2='Test app. From Meinheld with Gunicorn. Using Python 3.7' - NAME='python3.6-alpine3.8' BUILD_PATH='python3.6-alpine3.8' TEST_STR1='Hello World from a default Python 3.6 app in a Docker container, with Meinheld and Gunicorn on Alpine (default)' TEST_STR2='Test app. From Meinheld with Gunicorn. Using Python 3.6' From 8ccb020b9a8abc3d47ac178309adc420c388a96b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebasti=C3=A1n=20Ram=C3=ADrez?= Date: Tue, 15 Oct 2019 10:37:49 -0500 Subject: [PATCH 4/4] :bug: Fix again build context --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index ffbf929..2bb624c 100644 --- a/.travis.yml +++ b/.travis.yml @@ -15,7 +15,7 @@ env: - NAME='latest' BUILD_PATH='python3.7' TEST_STR1='Hello World from a default Python 3.7 app in a Docker container, with Meinheld and Gunicorn (default)' TEST_STR2='Test app. From Meinheld with Gunicorn. Using Python 3.7' - NAME='python3.7' BUILD_PATH='python3.7' TEST_STR1='Hello World from a default Python 3.7 app in a Docker container, with Meinheld and Gunicorn (default)' TEST_STR2='Test app. From Meinheld with Gunicorn. Using Python 3.7' - NAME='python3.6' BUILD_PATH='python3.6' TEST_STR1='Hello World from a default Python 3.6 app in a Docker container, with Meinheld and Gunicorn (default)' TEST_STR2='Test app. From Meinheld with Gunicorn. Using Python 3.6' - - NAME='python2.7' BUILD_PATH='python2.6' TEST_STR1='Hello World from a default Python 2.7 app in a Docker container, with Meinheld and Gunicorn (default)' TEST_STR2='Test app. From Meinheld with Gunicorn. Using Python 2.7' + - NAME='python2.7' BUILD_PATH='python2.7' TEST_STR1='Hello World from a default Python 2.7 app in a Docker container, with Meinheld and Gunicorn (default)' TEST_STR2='Test app. From Meinheld with Gunicorn. Using Python 2.7' - NAME='python3.7-alpine3.8' BUILD_PATH='python3.7-alpine3.8' TEST_STR1='Hello World from a default Python 3.7 app in a Docker container, with Meinheld and Gunicorn on Alpine (default)' TEST_STR2='Test app. From Meinheld with Gunicorn. Using Python 3.7' - NAME='python3.6-alpine3.8' BUILD_PATH='python3.6-alpine3.8' TEST_STR1='Hello World from a default Python 3.6 app in a Docker container, with Meinheld and Gunicorn on Alpine (default)' TEST_STR2='Test app. From Meinheld with Gunicorn. Using Python 3.6'