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:
commit
9557d1b253
9 changed files with 165 additions and 14 deletions
3
.flake8
3
.flake8
|
|
@ -15,7 +15,8 @@ exclude =
|
|||
__pycache__,
|
||||
tests,
|
||||
docs,
|
||||
./koji-*/*
|
||||
./koji-*/*,
|
||||
.tox
|
||||
|
||||
filename =
|
||||
*.py,
|
||||
|
|
|
|||
1
.gitignore
vendored
1
.gitignore
vendored
|
|
@ -29,3 +29,4 @@ docs/build/
|
|||
.vagrant
|
||||
.gitreview
|
||||
devtools/*.conf
|
||||
.tox
|
||||
|
|
|
|||
15
Makefile
15
Makefile
|
|
@ -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)
|
||||
|
|
|
|||
23
devtools/containers/README.md
Normal file
23
devtools/containers/README.md
Normal 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"
|
||||
28
devtools/containers/centos/Dockerfile
Normal file
28
devtools/containers/centos/Dockerfile
Normal 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
|
||||
22
devtools/containers/fedora/Dockerfile
Normal file
22
devtools/containers/fedora/Dockerfile
Normal 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
7
requirements.txt
Normal 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
|
||||
|
|
@ -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
75
tox.ini
Normal 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}
|
||||
Loading…
Add table
Add a link
Reference in a new issue