diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..e81dead --- /dev/null +++ b/.dockerignore @@ -0,0 +1,106 @@ +# Created by .ignore support plugin (hsz.mobi) +### Python template +# Byte-compiled / optimized / DLL files +__pycache__/ +*.py[cod] +*$py.class + +# C extensions +*.so + +# Distribution / packaging +.Python +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +wheels/ +*.egg-info/ +.installed.cfg +*.egg +MANIFEST + +# PyInstaller +# Usually these files are written by a python script from a template +# before PyInstaller builds the exe, so as to inject date/other infos into it. +*.manifest +*.spec + +# Installer logs +pip-log.txt +pip-delete-this-directory.txt + +# Unit test / coverage reports +htmlcov/ +.tox/ +.coverage +.coverage.* +.cache +nosetests.xml +coverage.xml +*.cover +.hypothesis/ + +# Translations +*.mo +*.pot + +# Django stuff: +*.log +.static_storage/ +.media/ +local_settings.py + +# Flask stuff: +instance/ +.webassets-cache + +# Scrapy stuff: +.scrapy + +# Sphinx documentation +docs/_build/ + +# PyBuilder +target/ + +# Jupyter Notebook +.ipynb_checkpoints + +# pyenv +.python-version + +# celery beat schedule file +celerybeat-schedule + +# SageMath parsed files +*.sage.py + +# Environments +.env +.venv +env/ +venv/ +ENV/ +env.bak/ +venv.bak/ + +# Spyder project settings +.spyderproject +.spyproject + +# Rope project settings +.ropeproject + +# mkdocs documentation +/site + +# mypy +.mypy_cache/ diff --git a/.travis.yml b/.travis.yml index aa59a5a..6887cdc 100644 --- a/.travis.yml +++ b/.travis.yml @@ -6,7 +6,7 @@ services: - docker install: - - docker build -t test-runner -f Dockerfile.test . + - script: - - docker run --rm -t -v $PWD:/ansible-conda test-runner + - ./run-tests-in-docker.sh diff --git a/Dockerfile.test b/Dockerfile.test deleted file mode 100644 index 42eec75..0000000 --- a/Dockerfile.test +++ /dev/null @@ -1,27 +0,0 @@ -FROM ubuntu - -ENV DATA_DIRECTORY=/ansible-conda - -RUN apt-get update \ - && apt-get install -y --no-install-recommends \ - python \ - python-pip \ - python-apt \ - python-dev \ - build-essential \ - git \ - && rm -rf /var/lib/apt/lists/* - -RUN pip install setuptools wheel -RUN pip install ansible==2.3.2.0 - -ADD tests/integration/requirements.yml /tmp/requirements.yml -RUN ansible-galaxy install -r /tmp/requirements.yml - -ADD tests/integration/requirements.txt /tmp/requirements.txt -RUN pip install -r /tmp/requirements.txt - -VOLUME "${DATA_DIRECTORY}" -WORKDIR "${DATA_DIRECTORY}" - -CMD "${DATA_DIRECTORY}/run-tests.sh" diff --git a/run-tests-in-docker.sh b/run-tests-in-docker.sh new file mode 100755 index 0000000..6bde192 --- /dev/null +++ b/run-tests-in-docker.sh @@ -0,0 +1,8 @@ +#!/usr/bin/env bash +set -euf -o pipefail + +docker-compose -f tests/unit/docker/docker-compose.test.yml up \ + --build --force-recreate --remove-orphans + +docker-compose -f tests/integration/docker/docker-compose.test.yml up \ + --build --abort-on-container-exit --exit-code-from ansible-conda-integration-test-runner --force-recreate --remove-orphans diff --git a/run-tests.sh b/run-tests.sh deleted file mode 100755 index 1f68fe5..0000000 --- a/run-tests.sh +++ /dev/null @@ -1,13 +0,0 @@ -#!/usr/bin/env bash - -set -euf -o pipefail - -# Setup -ansible-galaxy install -r "${DATA_DIRECTORY}/tests/integration/requirements.yml" -pip install -r "${DATA_DIRECTORY}/tests/integration/requirements.txt" - -# Run unit tests -PYTHONPATH=. python -m unittest discover -v -s tests/unit - -# Run integration tests -ansible-playbook -vvv -e ansible_python_interpreter=$(which python) -c local "${DATA_DIRECTORY}/tests/integration/site.yml" diff --git a/tests/integration/defaults/main.yml b/tests/integration/defaults/main.yml deleted file mode 100644 index 31cbed1..0000000 --- a/tests/integration/defaults/main.yml +++ /dev/null @@ -1,6 +0,0 @@ ---- - -conda_tests_python_version: 2 -conda_tests_anaconda_version: 4.4.0 -conda_tests_anaconda_installation_location: /tmp/install/anaconda -conda_tests_conda_executable: "{{ conda_tests_anaconda_installation_location }}/bin/conda" diff --git a/tests/integration/docker/Dockerfile.test.integration b/tests/integration/docker/Dockerfile.test.integration new file mode 100644 index 0000000..3a39824 --- /dev/null +++ b/tests/integration/docker/Dockerfile.test.integration @@ -0,0 +1,23 @@ +ARG DOCKER_REPOSITORY=continuumio/miniconda3 +ARG CONDA_VERSION=4.4.10 + +FROM ${DOCKER_REPOSITORY}:${CONDA_VERSION} + +RUN apt-get update \ + && apt-get install -y --no-install-recommends \ + openssh-server \ + python \ + python-pip \ + && rm -rf /var/lib/apt/lists/* + +RUN sed -ri "s/^PermitRootLogin\s+.*/PermitRootLogin yes/" /etc/ssh/sshd_config \ + && sed -ri "s/UsePAM yes/#UsePAM yes/g" /etc/ssh/sshd_config + +RUN mkdir /var/run/sshd + +ARG root_password=root +RUN echo "root:${root_password}" | chpasswd + +EXPOSE 22 + +CMD ["/usr/sbin/sshd", "-D"] diff --git a/tests/integration/docker/Dockerfile.test.runner b/tests/integration/docker/Dockerfile.test.runner new file mode 100644 index 0000000..da16413 --- /dev/null +++ b/tests/integration/docker/Dockerfile.test.runner @@ -0,0 +1,15 @@ +FROM python:3 + +ENV ANSIBLE_HOST_KEY_CHECKING=False + +RUN apt-get update \ + && apt-get install -y --no-install-recommends \ + sshpass \ + && rm -rf /var/lib/apt/lists/* + +WORKDIR /ansible-conda +ADD . . +RUN pip --disable-pip-version-check install -r tests/integration/runner-requirements.txt + +WORKDIR /ansible-conda/tests/integration +CMD ["ansible-playbook", "-i", "inventory.ini", "test.yml"] diff --git a/tests/integration/docker/docker-compose.test.yml b/tests/integration/docker/docker-compose.test.yml new file mode 100644 index 0000000..26dc3b2 --- /dev/null +++ b/tests/integration/docker/docker-compose.test.yml @@ -0,0 +1,31 @@ +--- + +version: "3" + +services: + ansible-conda-integration-test-runner: + container_name: ansible-conda-integration-test-runner + build: + context: ../../../ + dockerfile: tests/integration/docker/Dockerfile.test.runner + depends_on: + - ansible-conda-integration-conda-py3-4-4-10-test-instance + - ansible-conda-integration-conda-py2-4-4-10-test-instance + + ansible-conda-integration-conda-py3-4-4-10-test-instance: + container_name: ansible-conda-integration-conda-py3-4-4-10-test-instance + build: + context: ../../../ + dockerfile: tests/integration/docker/Dockerfile.test.integration + args: + DOCKER_REPOSITORY: continuumio/miniconda3 + CONDA_VERSION: 4.4.10 + + ansible-conda-integration-conda-py2-4-4-10-test-instance: + container_name: ansible-conda-integration-conda-py2-4-4-10-test-instance + build: + context: ../../../ + dockerfile: tests/integration/docker/Dockerfile.test.integration + args: + DOCKER_REPOSITORY: continuumio/miniconda + CONDA_VERSION: 4.4.10 diff --git a/tests/integration/group_vars/conda-testers/vars.yml b/tests/integration/group_vars/conda-testers/vars.yml new file mode 100644 index 0000000..f82922d --- /dev/null +++ b/tests/integration/group_vars/conda-testers/vars.yml @@ -0,0 +1,14 @@ +--- + +supergiant_admin_user_username: admin +# Note: Outside of testing, put this in a vault! +supergiant_admin_user_password: password123 + +supergiant_configure_systemctl: false +supergiant_docker_build_temp_directory: /shared + +supergiant_server_install_location: /usr/bin/supergiant +supergiant_server_config_location: /etc/supergiant/config.json + +supergiant_host: localhost +supergiant_port: 8080 diff --git a/tests/integration/inventory.ini b/tests/integration/inventory.ini new file mode 100644 index 0000000..89b502a --- /dev/null +++ b/tests/integration/inventory.ini @@ -0,0 +1,3 @@ +[conda-testers] +ansible-conda-integration-conda-py3-4-4-10-test-instance ansible_user=root ansible_ssh_pass=root +ansible-conda-integration-conda-py2-4-4-10-test-instance ansible_user=root ansible_ssh_pass=root diff --git a/tests/integration/meta/main.yml b/tests/integration/meta/main.yml deleted file mode 100644 index 73a1cb2..0000000 --- a/tests/integration/meta/main.yml +++ /dev/null @@ -1,10 +0,0 @@ ---- - -dependencies: - - role: anaconda - vars: - anaconda_python_ver: "{{ conda_tests_python_version }}" - anaconda_ver: "{{ conda_tests_anaconda_version }}" - anaconda_pkg_update: no - anaconda_parent_dir: "{{ conda_tests_anaconda_installation_location | dirname }}" - anaconda_link_subdir: "{{ conda_tests_anaconda_installation_location | basename }}" diff --git a/tests/integration/requirements.txt b/tests/integration/requirements.txt deleted file mode 100644 index c23b05b..0000000 --- a/tests/integration/requirements.txt +++ /dev/null @@ -1 +0,0 @@ -jmespath \ No newline at end of file diff --git a/tests/integration/requirements.yml b/tests/integration/requirements.yml deleted file mode 100644 index e827817..0000000 --- a/tests/integration/requirements.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- - -- name: anaconda - src: https://github.com/wtsi-hgi/ansible-anaconda.git - version: 60ac57016facaf8658437ca4700f4037b60be42e diff --git a/tests/integration/roles/conda-test/defaults/main.yml b/tests/integration/roles/conda-test/defaults/main.yml new file mode 100644 index 0000000..c5530c4 --- /dev/null +++ b/tests/integration/roles/conda-test/defaults/main.yml @@ -0,0 +1,3 @@ +--- + +conda_tests_conda_executable: "/opt/conda/bin/conda" diff --git a/tests/integration/tasks/main.yml b/tests/integration/roles/conda-test/tasks/main.yml similarity index 96% rename from tests/integration/tasks/main.yml rename to tests/integration/roles/conda-test/tasks/main.yml index a448baf..1d9cac3 100644 --- a/tests/integration/tasks/main.yml +++ b/tests/integration/roles/conda-test/tasks/main.yml @@ -1,6 +1,5 @@ --- -- include: install.yml - include: tear-down.yml - block: diff --git a/tests/integration/tasks/set-install-facts.yml b/tests/integration/roles/conda-test/tasks/set-install-facts.yml similarity index 100% rename from tests/integration/tasks/set-install-facts.yml rename to tests/integration/roles/conda-test/tasks/set-install-facts.yml diff --git a/tests/integration/tasks/tear-down.yml b/tests/integration/roles/conda-test/tasks/tear-down.yml similarity index 100% rename from tests/integration/tasks/tear-down.yml rename to tests/integration/roles/conda-test/tasks/tear-down.yml diff --git a/tests/integration/tasks/test-downgrade.yml b/tests/integration/roles/conda-test/tasks/test-downgrade.yml similarity index 100% rename from tests/integration/tasks/test-downgrade.yml rename to tests/integration/roles/conda-test/tasks/test-downgrade.yml diff --git a/tests/integration/tasks/test-failures.yml b/tests/integration/roles/conda-test/tasks/test-failures.yml similarity index 100% rename from tests/integration/tasks/test-failures.yml rename to tests/integration/roles/conda-test/tasks/test-failures.yml diff --git a/tests/integration/tasks/test-install-fixed-version.yml b/tests/integration/roles/conda-test/tasks/test-install-fixed-version.yml similarity index 100% rename from tests/integration/tasks/test-install-fixed-version.yml rename to tests/integration/roles/conda-test/tasks/test-install-fixed-version.yml diff --git a/tests/integration/tasks/test-install-latest.yml b/tests/integration/roles/conda-test/tasks/test-install-latest.yml similarity index 100% rename from tests/integration/tasks/test-install-latest.yml rename to tests/integration/roles/conda-test/tasks/test-install-latest.yml diff --git a/tests/integration/tasks/test-install-loosely-fixed-version.yml b/tests/integration/roles/conda-test/tasks/test-install-loosely-fixed-version.yml similarity index 99% rename from tests/integration/tasks/test-install-loosely-fixed-version.yml rename to tests/integration/roles/conda-test/tasks/test-install-loosely-fixed-version.yml index 207eff7..64c7180 100644 --- a/tests/integration/tasks/test-install-loosely-fixed-version.yml +++ b/tests/integration/roles/conda-test/tasks/test-install-loosely-fixed-version.yml @@ -55,5 +55,3 @@ that: upgrade_install.changed that: example_package.installed that: example_package.version | version_compare(conda_tests_minimum_latest_version, '>=') - - diff --git a/tests/integration/tasks/test-invalid-setups.yml b/tests/integration/roles/conda-test/tasks/test-invalid-setups.yml similarity index 100% rename from tests/integration/tasks/test-invalid-setups.yml rename to tests/integration/roles/conda-test/tasks/test-invalid-setups.yml diff --git a/tests/integration/tasks/test-uninstall.yml b/tests/integration/roles/conda-test/tasks/test-uninstall.yml similarity index 100% rename from tests/integration/tasks/test-uninstall.yml rename to tests/integration/roles/conda-test/tasks/test-uninstall.yml diff --git a/tests/integration/tasks/test-upgrade.yml b/tests/integration/roles/conda-test/tasks/test-upgrade.yml similarity index 100% rename from tests/integration/tasks/test-upgrade.yml rename to tests/integration/roles/conda-test/tasks/test-upgrade.yml diff --git a/tests/integration/vars/main.yml b/tests/integration/roles/conda-test/vars/main.yml similarity index 100% rename from tests/integration/vars/main.yml rename to tests/integration/roles/conda-test/vars/main.yml diff --git a/tests/integration/runner-requirements.txt b/tests/integration/runner-requirements.txt new file mode 100644 index 0000000..160a873 --- /dev/null +++ b/tests/integration/runner-requirements.txt @@ -0,0 +1,2 @@ +jmespath +ansible diff --git a/tests/integration/site.yml b/tests/integration/site.yml deleted file mode 100644 index 3f31b86..0000000 --- a/tests/integration/site.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- - -- hosts: localhost - roles: - - ../ diff --git a/tests/integration/tasks/install.yml b/tests/integration/tasks/install.yml deleted file mode 100644 index a09eaf9..0000000 --- a/tests/integration/tasks/install.yml +++ /dev/null @@ -1,9 +0,0 @@ ---- - -- name: install apt prerequisites - apt: - name: python-pip - -- name: install Python prerequisites - pip: - name: jmespath diff --git a/tests/integration/test.yml b/tests/integration/test.yml new file mode 100644 index 0000000..7efc757 --- /dev/null +++ b/tests/integration/test.yml @@ -0,0 +1,5 @@ +--- + +- hosts: conda-testers + roles: + - name: conda-test diff --git a/tests/unit/docker/Dockerfile.test.unit b/tests/unit/docker/Dockerfile.test.unit new file mode 100644 index 0000000..dd3cd84 --- /dev/null +++ b/tests/unit/docker/Dockerfile.test.unit @@ -0,0 +1,14 @@ +ARG PYTHON_VERSION=2 + +FROM python:${PYTHON_VERSION} + +RUN pip --disable-pip-version-check install \ + ansible + +ENV INSTALL_DIRECTORY=/ansible-conda + +WORKDIR "${INSTALL_DIRECTORY}" +ADD . . + +ENV PYTHONPATH="${INSTALL_DIRECTORY}" +CMD ["python", "-m", "unittest", "discover", "-v", "-s", "tests/unit"] diff --git a/tests/unit/docker/docker-compose.test.yml b/tests/unit/docker/docker-compose.test.yml new file mode 100644 index 0000000..18f837e --- /dev/null +++ b/tests/unit/docker/docker-compose.test.yml @@ -0,0 +1,20 @@ +--- + +version: "3" + +services: + ansible-conda-unit-conda-py3-4-4-10-test-instance: + container_name: ansible-conda-unit-conda-py2-4-4-10-test-instance + build: + context: ../../../ + dockerfile: tests/unit/docker/Dockerfile.test.unit + args: + PYTHON_VERSION: 2 + + ansible-conda-unit-conda-py2-4-4-10-test-instance: + container_name: ansible-conda-unit-conda-py3-4-4-10-test-instance + build: + context: ../../../ + dockerfile: tests/unit/docker/Dockerfile.test.unit + args: + PYTHON_VERSION: 3