diff options
author | Tristan Van Berkom <tristan.vanberkom@codethink.co.uk> | 2019-03-20 15:25:07 +0900 |
---|---|---|
committer | Tristan Van Berkom <tristan.vanberkom@codethink.co.uk> | 2019-03-20 15:25:07 +0900 |
commit | f1edb51d83611bb24ddb4934160a558cf926aa0b (patch) | |
tree | 81350141dba5455b580d4fb971a54f06bf7503a5 /tests/conftest.py | |
parent | 964261032b8ad1864680a9a38da9c27d8e1bf3c7 (diff) | |
download | buildstream-f1edb51d83611bb24ddb4934160a558cf926aa0b.tar.gz |
tests: Move conftest.py into tests/ subdirectory
Pytest implicitly loads this file from the CWD where it runs,
which is usually the project toplevel directory, but also supports
loading it from the `tests/` subdirectory where tests are run from.
Placing it into the `tests/` subdirectory is not perfectly explicit,
but is at least a hint to the unsuspecting developer that this file
is related to tests.
Diffstat (limited to 'tests/conftest.py')
-rwxr-xr-x | tests/conftest.py | 109 |
1 files changed, 109 insertions, 0 deletions
diff --git a/tests/conftest.py b/tests/conftest.py new file mode 100755 index 000000000..7f8da3633 --- /dev/null +++ b/tests/conftest.py @@ -0,0 +1,109 @@ +#!/usr/bin/env python3 +# +# Copyright (C) 2018 Codethink Limited +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library. If not, see <http://www.gnu.org/licenses/>. +# +# Authors: +# Tristan Maat <tristan.maat@codethink.co.uk> +# +import os +import shutil +import tempfile +import pytest +from buildstream._platform.platform import Platform + +# +# This file is loaded by pytest, we use it to add a custom +# `--integration` option to our test suite, and to install +# a session scope fixture. +# + + +################################################# +# Implement pytest option # +################################################# +def pytest_addoption(parser): + parser.addoption('--integration', action='store_true', default=False, + help='Run integration tests') + + +def pytest_runtest_setup(item): + if item.get_closest_marker('integration') and not item.config.getvalue('integration'): + pytest.skip('skipping integration test') + + +################################################# +# integration_cache fixture # +################################################# +# +# This is yielded by the `integration_cache` fixture +# +class IntegrationCache(): + + def __init__(self, cache): + self.root = os.path.abspath(cache) + os.makedirs(cache, exist_ok=True) + + # Use the same sources every time + self.sources = os.path.join(self.root, 'sources') + + # Create a temp directory for the duration of the test for + # the artifacts directory + try: + self.cachedir = tempfile.mkdtemp(dir=self.root, prefix='cache-') + except OSError as e: + raise AssertionError("Unable to create test directory !") from e + + +@pytest.fixture(scope='session') +def integration_cache(request): + + # Set the cache dir to the INTEGRATION_CACHE variable, or the + # default if that is not set. + if 'INTEGRATION_CACHE' in os.environ: + cache_dir = os.environ['INTEGRATION_CACHE'] + else: + cache_dir = os.path.abspath('./integration-cache') + + cache = IntegrationCache(cache_dir) + + yield cache + + # Clean up the artifacts after each test run - we only want to + # cache sources between runs + try: + shutil.rmtree(cache.cachedir) + except FileNotFoundError: + pass + try: + shutil.rmtree(os.path.join(cache.root, 'cas')) + except FileNotFoundError: + pass + + +################################################# +# Automatically reset the platform # +################################################# +# +# This might need some refactor, maybe buildstream +# needs to cleanup more gracefully and we could remove this. +# +def clean_platform_cache(): + Platform._instance = None + + +@pytest.fixture(autouse=True) +def ensure_platform_cache_is_clean(): + clean_platform_cache() |