Mark tests requiring to start and interact with docker containers
Most tests currently present in this project run containers and interact
with them to test their functionality.
Change-Id: Ib122091f711874d9b9dcdd66f1d1d9d0e7e42a1c
diff --git a/README.md b/README.md
index 656824f..de7adff 100644
--- a/README.md
+++ b/README.md
@@ -172,6 +172,9 @@
pipenv run pytest --skip-slow
```
+There are also other marks, allowing to select tests (refer to
+[this section](#test-marks)).
+
To run specific tests, execute one of the following:
```sh
@@ -184,7 +187,27 @@
# Run a specific test
pipenv run \
pytest tests/container-images/base/test_container_build_base.py::test_build_base
+
+# Run tests with a specific marker
+pipenv run pytest -m "docker"
```
For a more detailed description of how to use `pytest`, refer to the
[official documentation](https://docs.pytest.org/en/latest/contents.html).
+
+## Test marks
+
+### docker
+
+Marks tests which start up docker containers. These tests will interact with
+the containers by either using `docker exec` or sending HTTP-requests. Make
+sure that your system supports this kind of interaction.
+
+### incremental
+
+Marks test classes in which the contained test functions have to run
+incrementally.
+
+### slow
+
+Marks tests that need an above average time to run.
diff --git a/setup.cfg b/setup.cfg
index 1f82615..1b1ff54 100644
--- a/setup.cfg
+++ b/setup.cfg
@@ -1,2 +1,5 @@
[tool:pytest]
-norecursedirs=tests/helpers
+norecursedirs = tests/helpers
+
+markers =
+ docker: Tests that require to run and interact with a docker container
diff --git a/tests/container-images/apache-git-http-backend/test_container_disable_protocol_apache_git_http_backend.py b/tests/container-images/apache-git-http-backend/test_container_disable_protocol_apache_git_http_backend.py
index ad6b4e6..57d6a0d 100755
--- a/tests/container-images/apache-git-http-backend/test_container_disable_protocol_apache_git_http_backend.py
+++ b/tests/container-images/apache-git-http-backend/test_container_disable_protocol_apache_git_http_backend.py
@@ -37,6 +37,7 @@
return container_run, request.param
+@pytest.mark.docker
@pytest.mark.slow
def test_apache_git_http_backend_disable_protocol(
container_run_with_disabled_protocol,
diff --git a/tests/container-images/apache-git-http-backend/test_container_integration_apache_git_http_backend.py b/tests/container-images/apache-git-http-backend/test_container_integration_apache_git_http_backend.py
index 6bc4416..f8350d1 100755
--- a/tests/container-images/apache-git-http-backend/test_container_integration_apache_git_http_backend.py
+++ b/tests/container-images/apache-git-http-backend/test_container_integration_apache_git_http_backend.py
@@ -44,6 +44,7 @@
return repo
+@pytest.mark.docker
def test_apache_git_http_backend_apache_running(
container_run, base_url, apache_credentials_dir
):
@@ -53,6 +54,7 @@
assert request.status_code == 200
+@pytest.mark.docker
def test_apache_git_http_backend_repo_creation(
container_run, apache_credentials_dir, basic_auth_creds, repo_creation_url
):
@@ -66,6 +68,7 @@
assert request.status_code == 201
+@pytest.mark.docker
def test_apache_git_http_backend_repo_creation_fails_without_credentials(
container_run, apache_credentials_dir, repo_creation_url
):
@@ -75,6 +78,7 @@
assert request.status_code == 401
+@pytest.mark.docker
def test_apache_git_http_backend_repo_creation_fails_wrong_fs_permissions(
container_run, apache_credentials_dir, basic_auth_creds, repo_creation_url
):
@@ -90,6 +94,7 @@
assert request.status_code == 500
+@pytest.mark.docker
def test_apache_git_http_backend_repo_creation_push_repo(
container_run,
base_url,
diff --git a/tests/container-images/apache-git-http-backend/test_container_structure_apache_git_http_backend.py b/tests/container-images/apache-git-http-backend/test_container_structure_apache_git_http_backend.py
index 241e42d..6c530d0 100755
--- a/tests/container-images/apache-git-http-backend/test_container_structure_apache_git_http_backend.py
+++ b/tests/container-images/apache-git-http-backend/test_container_structure_apache_git_http_backend.py
@@ -12,6 +12,8 @@
# See the License for the specific language governing permissions and
# limitations under the License.
+import pytest
+
def test_apache_git_http_backend_inherits_from_base(apache_git_http_backend_image):
contains_tag = False
@@ -22,11 +24,13 @@
assert contains_tag
+@pytest.mark.docker
def test_apache_git_http_backend_contains_apache2(container_run):
exit_code, _ = container_run.exec_run("which httpd")
assert exit_code == 0
+@pytest.mark.docker
def test_apache_git_http_backend_http_site_configured(container_run):
exit_code, _ = container_run.exec_run(
"test -f /etc/apache2/conf.d/git-http-backend.conf"
@@ -34,6 +38,7 @@
assert exit_code == 0
+@pytest.mark.docker
def test_apache_git_http_backend_https_site_configured(container_run):
exit_code, _ = container_run.exec_run(
"test -f /etc/apache2/conf.d/git-https-backend.conf"
@@ -41,11 +46,13 @@
assert exit_code == 0
+@pytest.mark.docker
def test_apache_git_http_backend_contains_start_script(container_run):
exit_code, _ = container_run.exec_run("test -f /var/tools/start")
assert exit_code == 0
+@pytest.mark.docker
def test_apache_git_http_backend_contains_repo_creation_cgi_script(container_run):
exit_code, _ = container_run.exec_run("test -f /var/cgi/create_repo.sh")
assert exit_code == 0
diff --git a/tests/container-images/base/test_container_structure_base.py b/tests/container-images/base/test_container_structure_base.py
index 0af742b..a53bcef 100755
--- a/tests/container-images/base/test_container_structure_base.py
+++ b/tests/container-images/base/test_container_structure_base.py
@@ -22,11 +22,13 @@
container_run.stop(timeout=1)
+@pytest.mark.docker
def test_base_contains_git(container_run):
exit_code, _ = container_run.exec_run("which git")
assert exit_code == 0
+@pytest.mark.docker
def test_base_has_non_root_user_gerrit(container_run):
exit_code, output = container_run.exec_run("id -u gerrit")
assert exit_code == 0
@@ -34,6 +36,7 @@
assert uid != 0
+@pytest.mark.docker
def test_base_gerrit_no_root_permissions(container_run):
exit_code, _ = container_run.exec_run("su -c 'rm -rf /bin' gerrit")
assert exit_code > 0
diff --git a/tests/container-images/gerrit-base/test_container_structure_gerrit_base.py b/tests/container-images/gerrit-base/test_container_structure_gerrit_base.py
index 08a311c..a42083c 100755
--- a/tests/container-images/gerrit-base/test_container_structure_gerrit_base.py
+++ b/tests/container-images/gerrit-base/test_container_structure_gerrit_base.py
@@ -33,12 +33,14 @@
assert contains_tag
+@pytest.mark.docker
def test_gerrit_base_contains_java8(container_run):
_, output = container_run.exec_run("java -version")
output = output.strip().decode("utf-8")
assert re.search(re.compile('openjdk version "1.8.[0-9]_[0-9]+"'), output)
+@pytest.mark.docker
def test_gerrit_base_java_path(container_run):
exit_code, output = container_run.exec_run(
'/bin/ash -c "readlink -f $(which java)"'
@@ -48,6 +50,7 @@
assert output == "/usr/lib/jvm/java-1.8-openjdk/jre/bin/java"
+@pytest.mark.docker
def test_gerrit_base_contains_gerrit_war(container_run):
exit_code, _ = container_run.exec_run("test -f /var/war/gerrit.war")
assert exit_code == 0
@@ -56,6 +59,7 @@
assert exit_code == 0
+@pytest.mark.docker
def test_gerrit_base_war_contains_gerrit(container_run):
exit_code, output = container_run.exec_run("java -jar /var/war/gerrit.war version")
assert exit_code == 0
@@ -70,11 +74,13 @@
assert re.search(re.compile("gerrit version.*"), output)
+@pytest.mark.docker
def test_gerrit_base_site_permissions(container_run):
exit_code, _ = container_run.exec_run("test -O /var/gerrit")
assert exit_code == 0
+@pytest.mark.docker
def test_gerrit_base_war_dir_permissions(container_run):
exit_code, _ = container_run.exec_run("test -O /var/war")
assert exit_code == 0
diff --git a/tests/container-images/gerrit-init/test_container_integration_gerrit_init.py b/tests/container-images/gerrit-init/test_container_integration_gerrit_init.py
index 6118c23..3ea7d5e 100644
--- a/tests/container-images/gerrit-init/test_container_integration_gerrit_init.py
+++ b/tests/container-images/gerrit-init/test_container_integration_gerrit_init.py
@@ -60,6 +60,7 @@
container_run.stop(timeout=1)
+@pytest.mark.docker
@pytest.mark.incremental
class TestGerritInitEmptySite:
@pytest.mark.timeout(60)
@@ -86,6 +87,7 @@
assert container_run_default.attrs["State"]["ExitCode"] == 0
+@pytest.mark.docker
@pytest.mark.incremental
class TestGerritInitPluginInstallation:
def test_gerrit_init_plugins_are_installed(self, container_run_endless):
diff --git a/tests/container-images/gerrit-init/test_container_structure_gerrit_init.py b/tests/container-images/gerrit-init/test_container_structure_gerrit_init.py
index 0b6c3bf..8411c30 100755
--- a/tests/container-images/gerrit-init/test_container_structure_gerrit_init.py
+++ b/tests/container-images/gerrit-init/test_container_structure_gerrit_init.py
@@ -46,11 +46,13 @@
assert contains_tag
+@pytest.mark.docker
def test_gerrit_init_contains_expected_scripts(container_run, expected_script):
exit_code, _ = container_run.exec_run("test -f %s" % expected_script)
assert exit_code == 0
+@pytest.mark.docker
def test_gerrit_init_contains_expected_tools(container_run, expected_tool):
exit_code, _ = container_run.exec_run("which %s" % expected_tool)
assert exit_code == 0
diff --git a/tests/container-images/gerrit-master/test_container_integration_gerrit_master.py b/tests/container-images/gerrit-master/test_container_integration_gerrit_master.py
index 025d18a..17337b2 100644
--- a/tests/container-images/gerrit-master/test_container_integration_gerrit_master.py
+++ b/tests/container-images/gerrit-master/test_container_integration_gerrit_master.py
@@ -69,8 +69,9 @@
return request.param
-@pytest.mark.slow
+@pytest.mark.docker
@pytest.mark.incremental
+@pytest.mark.slow
class TestGerritMasterStartScript:
@pytest.mark.timeout(60)
def test_gerrit_master_gerrit_starts_up(self, container_run):
diff --git a/tests/container-images/gerrit-master/test_container_structure_gerrit_master.py b/tests/container-images/gerrit-master/test_container_structure_gerrit_master.py
index a45e7b1..d35c8e9 100755
--- a/tests/container-images/gerrit-master/test_container_structure_gerrit_master.py
+++ b/tests/container-images/gerrit-master/test_container_structure_gerrit_master.py
@@ -33,6 +33,7 @@
assert contains_tag
+@pytest.mark.docker
def test_gerrit_master_contains_start_script(container_run):
exit_code, _ = container_run.exec_run("test -f /var/tools/start")
assert exit_code == 0
diff --git a/tests/container-images/gerrit-slave/test_container_integration_gerrit_slave.py b/tests/container-images/gerrit-slave/test_container_integration_gerrit_slave.py
index ff6ac92..363110e 100644
--- a/tests/container-images/gerrit-slave/test_container_integration_gerrit_slave.py
+++ b/tests/container-images/gerrit-slave/test_container_integration_gerrit_slave.py
@@ -69,8 +69,9 @@
return test_setup.gerrit_container
-@pytest.mark.slow
+@pytest.mark.docker
@pytest.mark.incremental
+@pytest.mark.slow
class TestGerritSlave:
@pytest.fixture(params=CONFIG_FILES)
def config_file_to_test(self, request):
diff --git a/tests/container-images/gerrit-slave/test_container_structure_gerrit_slave.py b/tests/container-images/gerrit-slave/test_container_structure_gerrit_slave.py
index 25b5ea2..179a93e 100755
--- a/tests/container-images/gerrit-slave/test_container_structure_gerrit_slave.py
+++ b/tests/container-images/gerrit-slave/test_container_structure_gerrit_slave.py
@@ -38,16 +38,19 @@
assert contains_tag
+@pytest.mark.docker
def test_gerrit_slave_contains_expected_scripts(container_run, expected_script):
exit_code, _ = container_run.exec_run("test -f %s" % expected_script)
assert exit_code == 0
+@pytest.mark.docker
def test_gerrit_slave_contains_initialized_gerrit_site(container_run):
exit_code, _ = container_run.exec_run("/var/gerrit/bin/gerrit.sh check")
assert exit_code == 3
+@pytest.mark.docker
def test_gerrit_slave_gerrit_is_configured_slave(container_run):
exit_code, output = container_run.exec_run(
"git config -f /var/gerrit/etc/gerrit.config --get container.slave"
diff --git a/tests/container-images/git-gc/test_container_structure_gitgc.py b/tests/container-images/git-gc/test_container_structure_gitgc.py
index 9abbd20..4918115 100644
--- a/tests/container-images/git-gc/test_container_structure_gitgc.py
+++ b/tests/container-images/git-gc/test_container_structure_gitgc.py
@@ -31,11 +31,13 @@
assert contains_tag
+@pytest.mark.docker
def test_gitgc_log_dir_writable_by_gerrit(container_run):
exit_code, _ = container_run.exec_run("touch /var/log/git/test.log")
assert exit_code == 0
+@pytest.mark.docker
def test_gitgc_contains_gc_script(container_run):
exit_code, _ = container_run.exec_run("test -f /var/tools/gc-all.sh")
assert exit_code == 0