PR#2386: Run tests in virtualenvs using tox

Merges #2386
https://pagure.io/koji/pull-request/2386

Fixes #2391
https://pagure.io/koji/issue/2391
This commit is contained in:
Tomas Kopecek 2020-09-08 16:20:29 +02:00
commit 9557d1b253
9 changed files with 165 additions and 14 deletions

View file

@ -15,7 +15,8 @@ exclude =
__pycache__,
tests,
docs,
./koji-*/*
./koji-*/*,
.tox
filename =
*.py,

1
.gitignore vendored
View file

@ -29,3 +29,4 @@ docs/build/
.vagrant
.gitreview
devtools/*.conf
.tox

View file

@ -79,20 +79,11 @@ test: test2 test3
@echo "All tests are finished for python 2&3"
test2:
coverage2 erase
PYTHONPATH=.:plugins/builder/.:plugins/cli/.:cli/.:www/lib coverage2 run \
--source . -m nose tests/test_builder tests/test_cli tests/test_lib \
tests/test_plugins/test*builder.py tests/test_plugins/test*cli.py
coverage2 report
coverage2 html
tox -e py2
@echo Full coverage report at file://${CURDIR}/htmlcov/py2/index.html
test3:
coverage3 erase --rcfile .coveragerc3
PYTHONPATH=hub/.:plugins/hub/.:plugins/builder/.:plugins/cli/.:cli/.:www/lib coverage3 run \
--rcfile .coveragerc3 --source . -m nose
coverage3 report --rcfile .coveragerc3
coverage3 html --rcfile .coveragerc3
tox -e py3
@echo Full coverage report at file://${CURDIR}/htmlcov/py3/index.html
test-tarball:
@ -136,7 +127,7 @@ pypi-upload:
twine upload dist/*
flake8:
flake8
tox -e flake8
tag::
git tag -a $(TAG)

View file

@ -0,0 +1,23 @@
Dockerfiles for development
===========================
To facilitate in development - specifically, running tests, two Dockerfiles are
provided:
* [`./centos/Dockerfile`](./centos/Dockerfile) CentOS 6, for testing with python2.6
* [`./fedora/Dockerfile`](./fedora/Dockerfile) Fedora 32, for testing with python3.8
To use them, taking fedora as an example:
docker build -t koji_test_fedora:latest --no-cache ./devtools/containers/fedora
docker run --rm -v $PWD:/koji --name koji_test koji_test_fedora:latest bash -c "cd /koji && tox -e flake8,py3"
Or CentOS as an example:
docker build -t koji_test_centos:latest --no-cache ./devtools/containers/centos
docker run --rm -v $PWD:/koji --name koji_test koji_test_centos:latest bash -c "cd /koji && tox -e py2"
When running with Podman and SELinux enabled, use the "--security-opt
label=disable" option:
podman run --rm -v $PWD:/koji --security-opt label=disable --name koji_test koji_test_fedora:latest bash -c "cd /koji && ls -l /koji && tox -e flake8,py3"

View file

@ -0,0 +1,28 @@
FROM centos:6
RUN \
yum install -y \
gcc \
git \
make \
krb5-devel \
libffi-devel \
openssl-devel \
pyOpenSSL \
python-cheetah \
python-devel \
python-requests \
redhat-rpm-config \
rpm-build \
rpm-python \
yum-utils && \
yum install -y epel-release && \
yum install -y \
python-flake8 \
python-multilib \
python-pip \
python-psycopg2 \
python-qpid-proton \
python-requests-kerberos \
yumdownloader && \
pip install -U 'pip==9.0.1' && \
pip install -U tox

View file

@ -0,0 +1,22 @@
FROM fedora:32
RUN \
dnf install -y \
'dnf-command(download)' \
gcc \
git \
glib2-devel \
glibc-langpack-en \
krb5-devel \
libffi-devel \
libxml2-devel \
make \
openssl-devel \
python3-devel \
python3-pip \
python3-rpm \
python3-tox \
redhat-rpm-config \
rpm-build \
rpm-devel \
sqlite-devel \
yum-utils

7
requirements.txt Normal file
View file

@ -0,0 +1,7 @@
-e .
Cheetah;python_version < '3.0'
Cheetah3;python_version >= '3.0'
psycopg2-binary;python_version >= '3.0'
python-multilib
python-qpid-proton
rpm-py-installer

View file

@ -1,6 +1,9 @@
-e .
flake8
flake8-import-order
mock<=2.0.0
requests-mock
requests-mock;python_version >= '2.7'
requests-mock<1.5.0;python_version < '2.7'
coverage
nose
unittest2;python_version < '3.0'

75
tox.ini Normal file
View file

@ -0,0 +1,75 @@
[tox]
envlist = flake8,py2,py3
[testenv:flake8]
deps =
flake8
# On EL6, pip would get us a flake8 that doesn't work with python2.6. The next
# two lines let us use an RPM-based version from EPEL if it is installed
sitepackages = true
whitelist_externals = flake8
# These two lines just speed things up by avoiding unnecessary setup
skip_install=true
usedevelop=true
commands =
flake8
[testenv]
deps =
-r{toxinidir}/requirements.txt
-r{toxinidir}/test-requirements.txt
# We need to access python-rpm, at least, and potentially more on EL6
sitepackages = true
# Tell the rpm-py-installer package to download binaries instead of building
# from source
setenv =
RPM_PY_INSTALL_BIN=true
# If rpm's python bindings are missing, don't continue
# Also, because coverage might be installed system-wide and it serves as our
# entry point, let's make sure it's installed in the virtualenv.
commands_pre =
{envbindir}/python -c "import rpm"
pip install -I coverage
[testenv:py3]
setenv =
{[testenv]setenv}
PYTHONPATH=hub/.:plugins/hub/.:plugins/builder/.:plugins/cli/.:cli/.:www/lib
commands_pre =
{[testenv]commands_pre}
{envbindir}/coverage3 erase --rcfile .coveragerc3
commands =
{envbindir}/coverage3 run --rcfile .coveragerc3 --source . -m nose
{envbindir}/coverage3 report --rcfile .coveragerc3
{envbindir}/coverage3 html -d {toxinidir}/htmlcov/py3 --rcfile .coveragerc3
[testenv:py2]
setenv =
{[testenv]setenv}
PYTHONPATH=.:plugins/builder/.:plugins/cli/.:cli/.:www/lib
PYTHONHASHSEED=0
commands_pre =
{[testenv]commands_pre}
{envbindir}/coverage2 erase
commands =
{envbindir}/coverage2 run --source . -m nose \
tests/test_builder tests/test_cli \
tests/test_plugins/test_runroot_builder.py \
tests/test_plugins/test_save_failed_tree_builder.py \
tests/test_plugins/test_runroot_cli.py \
tests/test_plugins/test_save_failed_tree_cli.py
{envbindir}/coverage2 report
{envbindir}/coverage2 html -d {toxinidir}/htmlcov/py2
# This is identical to the py2 testenv, but without attempting to install
# dependencies from requirements.txt. In practice this will mean RPM-based
# dependencies must be installed.
[testenv:py2-rpmdeps]
deps =
-r{toxinidir}/test-requirements.txt
setenv =
{[testenv:py2]setenv}
commands_pre =
{[testenv:py2]commands_pre}
commands =
{[testenv:py2]commands}