diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 2f0e489..799e9c7 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -38,7 +38,7 @@ pytest: - chmod 777 . - usermod --unlock --expiredate="" nobody script: - - script -e -c 'su kupfer -s /bin/bash -c ". venv/bin/activate && INTEGRATION_TESTS_USE_GLOBAL_CONFIG=TRUE KUPFERBOOTSTRAP_WRAPPED=DOCKER ./pytest.sh --junit-xml=pytest-report.xml --cov-report=xml:coverage.xml integration_tests.py"' + - script -e -c 'su kupfer -s /bin/bash -c ". venv/bin/activate && INTEGRATION_TESTS_USE_GLOBAL_CONFIG=TRUE INTEGRATION_TESTS_ENABLE=1 KUPFERBOOTSTRAP_WRAPPED=DOCKER ./pytest.sh --junit-xml=pytest-report.xml --cov-report=xml:coverage.xml"' coverage: '/(?i)total.*? (100(?:\.0+)?\%|[1-9]?\d(?:\.\d+)?\%)$/' artifacts: reports: diff --git a/pyproject.toml b/pyproject.toml index 80dd9b1..4234443 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -24,6 +24,7 @@ dev = [ "yapf", "pytest", "pytest-cov", + "pytest-order", ] [project.scripts] @@ -39,3 +40,9 @@ build-backend = "setuptools.build_meta" [tool.setuptools-git-versioning] enabled = true + + +[tool.pytest.ini_options] +"markers" = [ + "integration: run integration tests", +] diff --git a/pytest.sh b/pytest.sh index 544b319..e0ee85d 100755 --- a/pytest.sh +++ b/pytest.sh @@ -1,4 +1,4 @@ #!/bin/bash sudo -v -python -m pytest -v --cov=. --cov-branch --cov-report=term "$@" src/kupferbootstrap +python -m pytest -v --cov=. --cov-branch --cov-report=term "$@" tests diff --git a/src/kupferbootstrap/config/test_config.py b/tests/config/test_config.py similarity index 100% rename from src/kupferbootstrap/config/test_config.py rename to tests/config/test_config.py diff --git a/src/kupferbootstrap/devices/test_device.py b/tests/devices/test_device.py similarity index 95% rename from src/kupferbootstrap/devices/test_device.py rename to tests/devices/test_device.py index d829ffb..5de3805 100644 --- a/src/kupferbootstrap/devices/test_device.py +++ b/tests/devices/test_device.py @@ -5,8 +5,8 @@ import os from copy import copy from kupferbootstrap.config.state import ConfigStateHolder, config +from kupferbootstrap.devices.device import Device, DEVICE_DEPRECATIONS, get_device, get_devices, parse_device_pkg, check_devicepkg_name from kupferbootstrap.packages.pkgbuild import init_pkgbuilds, discover_pkgbuilds, Pkgbuild, parse_pkgbuild -from .device import Device, DEVICE_DEPRECATIONS, get_device, get_devices, parse_device_pkg, check_devicepkg_name @pytest.fixture(scope='session') diff --git a/src/kupferbootstrap/devices/test_deviceinfo.py b/tests/devices/test_deviceinfo.py similarity index 95% rename from src/kupferbootstrap/devices/test_deviceinfo.py rename to tests/devices/test_deviceinfo.py index f4f332a..0c0298d 100644 --- a/src/kupferbootstrap/devices/test_deviceinfo.py +++ b/tests/devices/test_deviceinfo.py @@ -1,7 +1,7 @@ from kupferbootstrap.config.state import config -from .deviceinfo import DeviceInfo, parse_deviceinfo -from .device import get_device +from kupferbootstrap.devices.deviceinfo import DeviceInfo, parse_deviceinfo +from kupferbootstrap.devices.device import get_device deviceinfo_text = """ # Reference: diff --git a/src/kupferbootstrap/exec/test_cmd.py b/tests/exec/test_cmd.py similarity index 96% rename from src/kupferbootstrap/exec/test_cmd.py rename to tests/exec/test_cmd.py index a824d46..b4169b3 100644 --- a/src/kupferbootstrap/exec/test_cmd.py +++ b/tests/exec/test_cmd.py @@ -5,7 +5,7 @@ import subprocess from typing import Optional -from .cmd import run_cmd, run_root_cmd, generate_cmd_su +from kupferbootstrap.exec.cmd import run_cmd, run_root_cmd, generate_cmd_su def get_username(id: int): diff --git a/src/kupferbootstrap/exec/test_file.py b/tests/exec/test_file.py similarity index 97% rename from src/kupferbootstrap/exec/test_file.py rename to tests/exec/test_file.py index d9bd9bd..8b44507 100644 --- a/src/kupferbootstrap/exec/test_file.py +++ b/tests/exec/test_file.py @@ -6,8 +6,8 @@ import stat from typing import Union, Generator from dataclasses import dataclass -from .cmd import run_root_cmd -from .file import chmod, chown, get_temp_dir, write_file +from kupferbootstrap.exec.cmd import run_root_cmd +from kupferbootstrap.exec.file import chmod, chown, get_temp_dir, write_file from kupferbootstrap.utils import get_gid, get_uid TEMPDIR_MODE = 0o755 diff --git a/src/kupferbootstrap/flavours/test_flavour.py b/tests/flavours/test_flavour.py similarity index 87% rename from src/kupferbootstrap/flavours/test_flavour.py rename to tests/flavours/test_flavour.py index 9680aaf..3578588 100644 --- a/src/kupferbootstrap/flavours/test_flavour.py +++ b/tests/flavours/test_flavour.py @@ -1,6 +1,6 @@ import pytest -from .flavour import Flavour, get_flavour, get_flavours +from kupferbootstrap.flavours.flavour import Flavour, get_flavour, get_flavours FLAVOUR_NAME = 'phosh' diff --git a/integration_tests.py b/tests/test_integration.py similarity index 87% rename from integration_tests.py rename to tests/test_integration.py index dd17702..af72b09 100644 --- a/integration_tests.py +++ b/tests/test_integration.py @@ -20,6 +20,28 @@ setup_logging(True) PKG_TEST_PATH = 'device/device-sdm845-oneplus-enchilada' PKG_TEST_NAME = 'device-sdm845-xiaomi-beryllium-ebbg' +INTEGRATION_TESTS_ENABLE_ENV_VAR = "INTEGRATION_TESTS_ENABLE" + + +integration_enabled = False +try: + integration_enabled = bool(int(os.environ.get(INTEGRATION_TESTS_ENABLE_ENV_VAR, 0)) > 0) +except: + pass + + +pytestmark = [ + pytest.mark.skipif( + condition=not integration_enabled, + reason=( + "Integration tests disabled by default, " + f"set env var {INTEGRATION_TESTS_ENABLE_ENV_VAR}=1 to enable." + ), + ), + pytest.mark.integration(), + pytest.mark.order("first"), +] + @pytest.fixture() def ctx() -> click.Context: diff --git a/src/kupferbootstrap/version/test_kbs_version.py b/tests/version/test_kbs_version.py similarity index 89% rename from src/kupferbootstrap/version/test_kbs_version.py rename to tests/version/test_kbs_version.py index 7d464f3..d274984 100644 --- a/src/kupferbootstrap/version/test_kbs_version.py +++ b/tests/version/test_kbs_version.py @@ -1,8 +1,8 @@ from pytest import mark from typing import Optional -from .kbs import get_kbs_version, compare_kbs_version_generic -from .compare import VerComp +from kupferbootstrap.version.kbs import get_kbs_version, compare_kbs_version_generic +from kupferbootstrap.version.compare import VerComp def test_get_kbs_version():