From 61e18c823075ec6d9cc5ab8f6f7f0bd2a44bb3ee Mon Sep 17 00:00:00 2001 From: John Chilton Date: Mon, 14 May 2018 15:34:16 -0400 Subject: [PATCH] Tests for workflow testing script. --- .travis.yml | 38 +++++++++++------ Makefile | 3 ++ scripts/run_workflow_tests.sh | 78 ++++++++++++++++++++++++++++++++++ scripts/test_workflow_tests.sh | 21 +++++++++ tox.ini | 7 ++- 5 files changed, 132 insertions(+), 15 deletions(-) create mode 100644 scripts/run_workflow_tests.sh create mode 100644 scripts/test_workflow_tests.sh diff --git a/.travis.yml b/.travis.yml index d10dae8bd..9329c8ffa 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,18 +1,26 @@ language: python -sudo: false +sudo: true python: 2.7 env: - - TOX_ENV=py27-lint - - TOX_ENV=py34-lint - - TOX_ENV=py27-lint-readme - - TOX_ENV=py27-lint-docs - - TOX_ENV=py34-quick - - TOX_ENV=py27 - - TOX_ENV=py34 - - TOX_ENV=py34-gx-1801 - - TOX_ENV=py34-gx-dev - - TOX_ENV=py34-gx-1709 - - TOX_ENV=py27-lint-docstrings + global: + - PLANEMO_SKIP_REDUNDANT_TESTS=1 + - PLANEMO_ENABLE_POSTGRES_TESTS=1 + - PLANEMO_SKIP_GALAXY_CWL_TESTS=1 + - PLANEMO_TEST_WORKFLOW_RUN_PROFILE=travisworkflowtests + matrix: + - TOX_ENV=py27-lint + - TOX_ENV=py34-lint + - TOX_ENV=py27-lint-readme + - TOX_ENV=py27-lint-docs + - TOX_ENV=py34-quick + - TOX_ENV=py27 + - TOX_ENV=py34 + - TOX_ENV=py34-gx-1801 + - TOX_ENV=py34-gx-dev + - TOX_ENV=py34-gx-1709 + - TOX_ENV=py27-gxwf-test-test PLANEMO_TEST_STYLE=docker_test + - TOX_ENV=py27-gxwf-test-test PLANEMO_TEST_STYLE=serve_and_test + - TOX_ENV=py27-lint-docstrings install: # Setup git to allow git operations. @@ -23,11 +31,13 @@ install: matrix: allow_failures: - env: TOX_ENV=py27-lint-docstrings + - TOX_ENV=py27-gxwf-test-test PLANEMO_TEST_STYLE=docker_test -script: PLANEMO_SKIP_REDUNDANT_TESTS=1 PLANEMO_ENABLE_POSTGRES_TESTS=1 PLANEMO_SKIP_GALAXY_CWL_TESTS=1 PLANEMO_TEST_WORKFLOW_RUN_PROFILE=travisworkflowtests tox -e $TOX_ENV +script: tox -e $TOX_ENV after_success: - coveralls services: - - postgresql \ No newline at end of file + - postgresql + - docker diff --git a/Makefile b/Makefile index 8b53c5910..2282eb8bb 100644 --- a/Makefile +++ b/Makefile @@ -75,6 +75,9 @@ test: ## run tests with the default Python (faster than tox) quick-test: ## run quickest tests with the default Python $(IN_VENV) PLANEMO_SKIP_SLOW_TESTS=1 PLANEMO_SKIP_GALAXY_TESTS=1 nosetests $(NOSE_TESTS) +gxwf-test-test: ## run test of workflow testing script + bash $(BUILD_SCRIPTS_DIR)/test_workflow_tests.sh + tox: ## run tests with tox in the specified ENV, defaults to py27 $(IN_VENV) tox -e $(ENV) -- $(ARGS) diff --git a/scripts/run_workflow_tests.sh b/scripts/run_workflow_tests.sh new file mode 100644 index 000000000..a59716545 --- /dev/null +++ b/scripts/run_workflow_tests.sh @@ -0,0 +1,78 @@ +#!/bin/bash + +: ${PLANEMO_TARGET:="planemo==0.50.1"} +: ${PLANEMO_OPTIONS:="--verbose"} +: ${PLANEMO_PROFILE_NAME:="wxflowtest"} +: ${PLANEMO_SERVE_PORT:="9019"} +: ${PLANEMO_TEST_STYLE:="serve_and_test"} # profile_serve_and_test, serve_and_test, docker_serve_and_test, test, docker_test +: ${PLANEMO_SERVE_DATABASE_TYPE:="postgres"} # used if not using Docker with PLANEMO_TEST_STYLE +: ${PLANEMO_DOCKER_GALAXY_IMAGE:="quay.io/bgruening/galaxy:18.01"} # used if used Docker with PLANEMO_TEST_STYLE + +GALAXY_URL="http://localhost:$PLANEMO_SERVE_PORT" + +# Ensure Planemo is installed. +if [ ! -d .venv ]; then + virtualenv .venv + . .venv/bin/activate + pip install -U pip + # Intentionally expand wildcards in PLANEMO_TARGET. + shopt -s extglob + pip install ${PLANEMO_TARGET} +fi +. .venv/bin/activate + +# Run test. +# This example shows off a bunch of different ways one could test with Planemo, +# but for actual workflow testing projects - probably best just to take one of the last +# two very easy invocations to simplify things. +if [ "$PLANEMO_TEST_STYLE" = "profile_serve_and_test" ]; then + planemo $PLANEMO_OPTIONS profile_create \ + --database_type "$PLANEMO_SERVE_DATABASE_TYPE" \ + "$PLANEMO_PROFILE_NAME" + planemo $PLANEMO_OPTIONS serve \ + --daemon \ + --profile "$PLANEMO_PROFILE_NAME" \ + --port "$PLANEMO_SERVE_PORT" \ + "$1" + planemo $PLANEMO_OPTIONS test \ + --galaxy_url "$GALAXY_URL" \ + --engine external_galaxy \ + "$1" +elif [ "$PLANEMO_TEST_STYLE" = "serve_and_test" ]; then + planemo $PLANEMO_OPTIONS serve \ + --daemon \ + --database_type "$PLANEMO_SERVE_DATABASE_TYPE" \ + --port "$PLANEMO_SERVE_PORT" \ + "$1" + planemo $PLANEMO_OPTIONS test \ + --galaxy_url "$GALAXY_URL" \ + --engine external_galaxy \ + "$1" +elif [ "$PLANEMO_TEST_STYLE" = "docker_serve_and_test" ]; then + docker pull "${PLANEMO_DOCKER_GALAXY_IMAGE}" + planemo $PLANEMO_OPTIONS serve \ + --daemon \ + --engine docker_galaxy \ + --docker_galaxy_image "${PLANEMO_DOCKER_GALAXY_IMAGE}" \ + --docker_extra_volume . \ + --port "$PLANEMO_SERVE_PORT" \ + "$1" + planemo $PLANEMO_OPTIONS test \ + --galaxy_url "$GALAXY_URL" \ + --engine external_galaxy \ + "$1" +elif [ "$PLANEMO_TEST_STYLE" = "test" ]; then + planemo $PLANEMO_OPTIONS test \ + --database_type "$PLANEMO_SERVE_DATABASE_TYPE" \ + "$1" +elif [ "$PLANEMO_TEST_STYLE" = "docker_test" ]; then + docker pull "${PLANEMO_DOCKER_GALAXY_IMAGE}" + planemo $PLANEMO_OPTIONS test \ + --engine docker_galaxy \ + --docker_galaxy_image "${PLANEMO_DOCKER_GALAXY_IMAGE}" \ + --docker_extra_volume . \ + "$1" > /dev/null +else + echo "Unknown test style ${PLANEMO_TEST_STYLE}" + exit 1 +fi diff --git a/scripts/test_workflow_tests.sh b/scripts/test_workflow_tests.sh new file mode 100644 index 000000000..631e0ac91 --- /dev/null +++ b/scripts/test_workflow_tests.sh @@ -0,0 +1,21 @@ +#!/bin/bash + +# Ensure working directory is planemo project. +SCRIPTS_DIRECTORY="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" +PROJECT_DIRECTORY="${SCRIPTS_DIRECTORY}/.." + +TEMP_DIRECTORY=`mktemp -d 2>/dev/null || mktemp -d -t 'planemowftest'` +cp "$SCRIPTS_DIRECTORY/run_workflow_tests.sh" "$TEMP_DIRECTORY" +cp "$PROJECT_DIRECTORY/tests/data/"wf4* "$TEMP_DIRECTORY" +cp "$PROJECT_DIRECTORY/tests/data/1.bed" "$TEMP_DIRECTORY" + +cd $PROJECT_DIRECTORY + +# Build Planemo wheel. +make dist + +# Test against wheel. +export PLANEMO_TARGET="$PROJECT_DIRECTORY/dist/planemo*whl" + +cd $TEMP_DIRECTORY +bash run_workflow_tests.sh "wf4-distro-tools.gxwf.yml" diff --git a/tox.ini b/tox.ini index ca2c5ab2b..b86808b19 100644 --- a/tox.ini +++ b/tox.ini @@ -1,6 +1,6 @@ # TODO: implement doc linting [tox] -envlist = py{27,34}-lint, py{27,34,35}-quick, py27-lint-imports, py27-lint-docstrings, py27-lint-readme, py27-lint-docs, py{27,34,35}, py{27,34,35}-gx-{master,dev,1801,1709,1705} +envlist = py{27,34}-lint, py{27,34,35}-quick, py27-lint-imports, py27-lint-docstrings, py27-lint-readme, py27-lint-docs, py{27,34,35}, py{27,34,35}-gx-{master,dev,1801,1709,1705}, py27-gxwf-test-test source_dir = planemo test_dir = tests @@ -64,3 +64,8 @@ whitelist_externals = make deps = -rrequirements.txt -rdev-requirements.txt + +[testenv:py27-gxwf-test-test] +commands = make gxwf-test-test +skip_install = True +whitelist_externals = make