From fe015bf35bd0cd3089cf06016bd9635472801bda Mon Sep 17 00:00:00 2001 From: Ivan Fernandez Calvo Date: Mon, 17 Feb 2020 11:35:32 +0100 Subject: [PATCH 1/3] feat: grab Docker containers logs --- Jenkinsfile | 4 ++++ tests/scripts/docker/docker-get-logs.sh | 20 ++++++++++++++++++++ tests/scripts/docker/docker-summary.sh | 19 +++++++++++++++++++ tests/scripts/docker/run_tests.sh | 4 ++++ 4 files changed, 47 insertions(+) create mode 100755 tests/scripts/docker/docker-get-logs.sh create mode 100755 tests/scripts/docker/docker-summary.sh diff --git a/Jenkinsfile b/Jenkinsfile index 5a0bf43d3..acfc9dbe5 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -346,6 +346,10 @@ class PythonParallelTaskGenerator extends DefaultParallelTaskGenerator { basedir: "${steps.env.BASE_DIR}", flags: "-e PYTHON_VERSION,WEBFRAMEWORK", secret: "${steps.env.CODECOV_SECRET}") + steps.archiveArtifacts( + allowEmptyArchive: true, + artifacts: '**/docker-info/**', + defaultExcludes: false) } } } diff --git a/tests/scripts/docker/docker-get-logs.sh b/tests/scripts/docker/docker-get-logs.sh new file mode 100755 index 000000000..6c56f138b --- /dev/null +++ b/tests/scripts/docker/docker-get-logs.sh @@ -0,0 +1,20 @@ +#!/usr/bin/env bash +set -euo pipefail + +STEP=${1:-""} + +DOCKER_INFO_DIR="docker-info/${STEP}" +mkdir -p ${DOCKER_INFO_DIR} +cp docker-compose.yml ${DOCKER_INFO_DIR} +cd ${DOCKER_INFO_DIR} + +docker ps -a &> docker-containers.txt + +DOCKER_IDS=$(docker ps -aq) + +for id in ${DOCKER_IDS} +do + docker ps -af id=${id} --no-trunc &> ${id}-cmd.txt + docker logs ${id} &> ${id}.log || echo "It is not possible to grab the logs of ${id}" + docker inspect ${id} &> ${id}-inspect.json || echo "It is not possible to grab the inspect of ${id}" +done diff --git a/tests/scripts/docker/docker-summary.sh b/tests/scripts/docker/docker-summary.sh new file mode 100755 index 000000000..09ded27ce --- /dev/null +++ b/tests/scripts/docker/docker-summary.sh @@ -0,0 +1,19 @@ +#!/usr/bin/env bash +set -euo pipefail + +DOCKER_IDS=$(docker ps -aq) + +for id in ${DOCKER_IDS} +do + echo "***********************************************************" + echo "***************Docker Container ${id}***************" + echo "***********************************************************" + docker ps -af id=${id} --no-trunc + echo "----" + docker logs ${id} | tail -n 10 || echo "It is not possible to grab the logs of ${id}" +done + +echo "*******************************************************" +echo "***************Docker Containers Summary***************" +echo "*******************************************************" +docker ps -a diff --git a/tests/scripts/docker/run_tests.sh b/tests/scripts/docker/run_tests.sh index ea387a4d7..5f0bcc4fa 100755 --- a/tests/scripts/docker/run_tests.sh +++ b/tests/scripts/docker/run_tests.sh @@ -2,6 +2,10 @@ set -ex function cleanup { + if [ -n "${BUILD_NUMBER}" ]; then # only on CI + ./scripts/docker/docker-summary.sh + STEP="${1}-${2}" ./scripts/docker/docker-get-logs.sh + fi PYTHON_VERSION=${1} docker-compose down -v if [[ $CODECOV_TOKEN ]]; then From a9d211e8524879613fc3b41449ed2b827430688e Mon Sep 17 00:00:00 2001 From: Ivan Fernandez Calvo Date: Mon, 17 Feb 2020 12:20:30 +0100 Subject: [PATCH 2/3] fix: define the mandatory POSTGRES_PASSWORD environment variable --- tests/docker-compose.yml | 1 + tests/instrumentation/asyncio/aiopg_tests.py | 1 + tests/instrumentation/psycopg2_tests.py | 1 + tests/instrumentation/pyodbc_tests.py | 3 ++- tests/scripts/envs/aiopg.sh | 1 + tests/scripts/envs/psycopg2.sh | 1 + tests/scripts/envs/pyodbc.sh | 1 + 7 files changed, 8 insertions(+), 1 deletion(-) diff --git a/tests/docker-compose.yml b/tests/docker-compose.yml index 60a566ffb..da5ae9fb4 100644 --- a/tests/docker-compose.yml +++ b/tests/docker-compose.yml @@ -9,6 +9,7 @@ services: environment: POSTGRES_USER: 'postgres' POSTGRES_DB: 'elasticapm_test' + POSTGRES_PASSWORD: 'postgres' volumes: - pypgdata:/var/lib/postgresql/data healthcheck: diff --git a/tests/instrumentation/asyncio/aiopg_tests.py b/tests/instrumentation/asyncio/aiopg_tests.py index d06a71e8f..5be1ca0ea 100644 --- a/tests/instrumentation/asyncio/aiopg_tests.py +++ b/tests/instrumentation/asyncio/aiopg_tests.py @@ -55,6 +55,7 @@ def dsn(): **{ "database": os.environ.get("POSTGRES_DB", "elasticapm_test"), "user": os.environ.get("POSTGRES_USER", "postgres"), + "password": os.environ.get("POSTGRES_PASSWORD", "postgres"), "host": os.environ.get("POSTGRES_HOST", "localhost"), "port": os.environ.get("POSTGRES_PORT", "5432"), } diff --git a/tests/instrumentation/psycopg2_tests.py b/tests/instrumentation/psycopg2_tests.py index ecade3574..4045968b7 100644 --- a/tests/instrumentation/psycopg2_tests.py +++ b/tests/instrumentation/psycopg2_tests.py @@ -63,6 +63,7 @@ def connect_kwargs(): return { "database": os.environ.get("POSTGRES_DB", "elasticapm_test"), "user": os.environ.get("POSTGRES_USER", "postgres"), + "password": os.environ.get("POSTGRES_PASSWORD", "postgres"), "host": os.environ.get("POSTGRES_HOST", None), "port": os.environ.get("POSTGRES_PORT", None), } diff --git a/tests/instrumentation/pyodbc_tests.py b/tests/instrumentation/pyodbc_tests.py index 1f8769ab6..a9d36fd80 100644 --- a/tests/instrumentation/pyodbc_tests.py +++ b/tests/instrumentation/pyodbc_tests.py @@ -45,9 +45,10 @@ @pytest.yield_fixture(scope="function") def pyodbc_postgres_connection(request): - conn_str = ("DRIVER={PostgreSQL Unicode};" "DATABASE=%s;" "UID=%s;" "SERVER=%s;" "PORT=%s;") % ( + conn_str = ("DRIVER={PostgreSQL Unicode};" "DATABASE=%s;" "UID=%s;" "PASSWORD=%s;" "SERVER=%s;" "PORT=%s;") % ( os.environ.get("POSTGRES_DB", "elasticapm_test"), os.environ.get("POSTGRES_USER", "postgres"), + os.environ.get("POSTGRES_PASSWORD", "postgres"), os.environ.get("POSTGRES_HOST", None), os.environ.get("POSTGRES_PORT", None), ) diff --git a/tests/scripts/envs/aiopg.sh b/tests/scripts/envs/aiopg.sh index 076da0e4b..cc503262c 100644 --- a/tests/scripts/envs/aiopg.sh +++ b/tests/scripts/envs/aiopg.sh @@ -2,6 +2,7 @@ export PYTEST_MARKER="-m aiopg" export DOCKER_DEPS="postgres" export POSTGRES_HOST="postgres" export POSTGRES_USER="postgres" +export POSTGRES_PASSWORD="postgres" export POSTGRES_DB="elasticapm_test" export POSTGRES_HOST="postgres" export POSTGRES_PORT="5432" diff --git a/tests/scripts/envs/psycopg2.sh b/tests/scripts/envs/psycopg2.sh index 50f440409..b20b30086 100644 --- a/tests/scripts/envs/psycopg2.sh +++ b/tests/scripts/envs/psycopg2.sh @@ -2,6 +2,7 @@ export PYTEST_MARKER="-m psycopg2" export DOCKER_DEPS="postgres" export POSTGRES_HOST="postgres" export POSTGRES_USER="postgres" +export POSTGRES_PASSWORD="postgres" export POSTGRES_DB="elasticapm_test" export POSTGRES_HOST="postgres" export POSTGRES_PORT="5432" diff --git a/tests/scripts/envs/pyodbc.sh b/tests/scripts/envs/pyodbc.sh index 76948c8fc..73096382b 100644 --- a/tests/scripts/envs/pyodbc.sh +++ b/tests/scripts/envs/pyodbc.sh @@ -2,6 +2,7 @@ export PYTEST_MARKER="-m pyodbc" export DOCKER_DEPS="postgres" export POSTGRES_HOST="postgres" export POSTGRES_USER="postgres" +export POSTGRES_PASSWORD="postgres" export POSTGRES_DB="elasticapm_test" export POSTGRES_HOST="postgres" export POSTGRES_PORT="5432" From d657aba7623aadff99e922c16ce71466c8224478 Mon Sep 17 00:00:00 2001 From: Ivan Fernandez Calvo Date: Mon, 17 Feb 2020 14:07:00 +0100 Subject: [PATCH 3/3] fix: add missing parameter --- tests/instrumentation/asyncio/aiopg_tests.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/instrumentation/asyncio/aiopg_tests.py b/tests/instrumentation/asyncio/aiopg_tests.py index 5be1ca0ea..64796f92d 100644 --- a/tests/instrumentation/asyncio/aiopg_tests.py +++ b/tests/instrumentation/asyncio/aiopg_tests.py @@ -51,7 +51,7 @@ def dsn(): - return "dbname={database} user={user} host={host} port={port}".format( + return "dbname={database} user={user} password={password} host={host} port={port}".format( **{ "database": os.environ.get("POSTGRES_DB", "elasticapm_test"), "user": os.environ.get("POSTGRES_USER", "postgres"),