diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index f3e20af89fa16b5219f14a2033e42bf192cf82b2..4f15b9ab2407e9d56f56ed2acb0abceab1dddf9e 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -31,7 +31,7 @@ testing-pytest: - chmod +x dedal/utils/bootstrap.sh - ./dedal/utils/bootstrap.sh - pip install . - - pytest ./dedal/tests/ -s --junitxml=test-results.xml --ignore=./dedal/tests/spack_create_cache.py + - pytest ./dedal/tests/ -s --junitxml=test-results.xml artifacts: when: always reports: diff --git a/dedal/spack_factory/SpackOperationCreator.py b/dedal/spack_factory/SpackOperationCreator.py index 6ad30827c0dfac14016a880766f459ddd65e34a3..fdc929d34866dcb254a775e9e8f8a24ee893029d 100644 --- a/dedal/spack_factory/SpackOperationCreator.py +++ b/dedal/spack_factory/SpackOperationCreator.py @@ -6,12 +6,14 @@ from dedal.spack_factory.SpackOperationUseCache import SpackOperationUseCache class SpackOperationCreator: @staticmethod - def get_spack_operator(spack_config: SpackConfig = None): + def get_spack_operator(spack_config: SpackConfig = None, use_cache: bool = False) -> SpackOperation: if spack_config is None: - return SpackOperation(SpackConfig()) + return SpackOperation() elif spack_config.concretization_dir is None and spack_config.buildcache_dir is None: return SpackOperation(spack_config) - elif spack_config.concretization_dir and spack_config.buildcache_dir: + elif (spack_config.concretization_dir and spack_config.buildcache_dir) and not use_cache: return SpackOperationCreateCache(spack_config) - else: + elif (spack_config.concretization_dir and spack_config.buildcache_dir) and use_cache: return SpackOperationUseCache(spack_config) + else: + return SpackOperation(SpackConfig()) diff --git a/dedal/tests/integration_tests/spack_create_cache.py b/dedal/tests/integration_tests/spack_create_cache_test.py similarity index 88% rename from dedal/tests/integration_tests/spack_create_cache.py rename to dedal/tests/integration_tests/spack_create_cache_test.py index 92684e67afbfaf32e9300844afeaeb2689270be7..fcef47a89af9f0ae7bdb53828c5e6682dd3f094e 100644 --- a/dedal/tests/integration_tests/spack_create_cache.py +++ b/dedal/tests/integration_tests/spack_create_cache_test.py @@ -1,5 +1,7 @@ from pathlib import Path +import pytest + from dedal.configuration.GpgConfig import GpgConfig from dedal.configuration.SpackConfig import SpackConfig @@ -14,6 +16,8 @@ Ebrains Harbour does not support deletion via API, so the clean up must be done """ +@pytest.mark.skip( + reason="Skipping until an OCI registry which supports via API deletion; Clean up for OCI registry repo must be added before this test.") def test_spack_create_cache_concretization(tmp_path): install_dir = tmp_path concretization_dir = install_dir / 'concretization' @@ -32,6 +36,8 @@ def test_spack_create_cache_concretization(tmp_path): assert len(spack_operation.cache_dependency.list_tags()) > 0 +@pytest.mark.skip( + reason="Skipping until an OCI registry which supports via API deletion; Clean up for OCI registry repo must be added before this test.") def test_spack_create_cache_installation(tmp_path): install_dir = tmp_path concretization_dir = install_dir / 'concretization' diff --git a/dedal/tests/integration_tests/spack_from_cache_test.py b/dedal/tests/integration_tests/spack_from_cache_test.py index d54ced7a5d05d436e3991d6e93a36cae00adbad4..33f4483314b04e894c0bca3c75f259d58031d4f4 100644 --- a/dedal/tests/integration_tests/spack_from_cache_test.py +++ b/dedal/tests/integration_tests/spack_from_cache_test.py @@ -1,3 +1,4 @@ +import pytest from dedal.configuration.SpackConfig import SpackConfig from dedal.model.SpackDescriptor import SpackDescriptor from dedal.spack_factory.SpackOperationCreator import SpackOperationCreator @@ -10,9 +11,10 @@ def test_spack_from_cache_concretize(tmp_path): install_dir = tmp_path env = SpackDescriptor('test-spack-env', install_dir, test_spack_env_git) repo = SpackDescriptor('ebrains-spack-builds', install_dir, ebrains_spack_builds_git) - spack_config = SpackConfig(env, install_dir=install_dir, concretization_dir=install_dir) + spack_config = SpackConfig(env, install_dir=install_dir, concretization_dir=install_dir / 'concretize', + buildcache_dir=install_dir / 'buildcache') spack_config.add_repo(repo) - spack_operation = SpackOperationCreator.get_spack_operator(spack_config) + spack_operation = SpackOperationCreator.get_spack_operator(spack_config, use_cache=True) assert isinstance(spack_operation, SpackOperationUseCache) spack_operation.install_spack() spack_operation.setup_spack_env() @@ -21,13 +23,15 @@ def test_spack_from_cache_concretize(tmp_path): assert file_exists_and_not_empty(concretization_file_path) == True +@pytest.mark.skip(reason="Skipping test::test_spack_from_cache_install until all the functionalities in SpackOperationUseCache") def test_spack_from_cache_install(tmp_path): install_dir = tmp_path env = SpackDescriptor('test-spack-env', install_dir, test_spack_env_git) repo = SpackDescriptor('ebrains-spack-builds', install_dir, ebrains_spack_builds_git) - spack_config = SpackConfig(env, install_dir=install_dir, concretization_dir=install_dir) + spack_config = SpackConfig(env, install_dir=install_dir, concretization_dir=install_dir / 'concretize', + buildcache_dir=install_dir / 'buildcache') spack_config.add_repo(repo) - spack_operation = SpackOperationCreator.get_spack_operator(spack_config) + spack_operation = SpackOperationCreator.get_spack_operator(spack_config, use_cache=True) assert isinstance(spack_operation, SpackOperationUseCache) spack_operation.install_spack() spack_operation.setup_spack_env() diff --git a/dedal/tests/integration_tests/spack_operation_creator_test.py b/dedal/tests/integration_tests/spack_operation_creator_test.py new file mode 100644 index 0000000000000000000000000000000000000000..226184b00a5c7136c97f5ef12761ac44c71286a1 --- /dev/null +++ b/dedal/tests/integration_tests/spack_operation_creator_test.py @@ -0,0 +1,50 @@ +from dedal.spack_factory.SpackOperationCreateCache import SpackOperationCreateCache + +from dedal.configuration.SpackConfig import SpackConfig +from dedal.model.SpackDescriptor import SpackDescriptor +from dedal.spack_factory.SpackOperation import SpackOperation +from dedal.spack_factory.SpackOperationCreator import SpackOperationCreator +from dedal.spack_factory.SpackOperationUseCache import SpackOperationUseCache +from dedal.tests.testing_variables import ebrains_spack_builds_git, test_spack_env_git + + +def test_spack_creator_scratch_1(tmp_path): + install_dir = tmp_path + env = SpackDescriptor('test-spack-env', install_dir, test_spack_env_git) + repo = SpackDescriptor('ebrains-spack-builds', install_dir, ebrains_spack_builds_git) + spack_config = SpackConfig(env, install_dir=install_dir) + spack_config.add_repo(repo) + spack_operation = SpackOperationCreator.get_spack_operator(spack_config) + assert isinstance(spack_operation, SpackOperation) + + +def test_spack_creator_scratch_2(tmp_path): + spack_config = None + spack_operation = SpackOperationCreator.get_spack_operator(spack_config) + assert isinstance(spack_operation, SpackOperation) + + +def test_spack_creator_scratch_3(): + spack_config = SpackConfig() + spack_operation = SpackOperationCreator.get_spack_operator(spack_config) + assert isinstance(spack_operation, SpackOperation) + + +def test_spack_creator_create_cache(tmp_path): + install_dir = tmp_path + env = SpackDescriptor('test-spack-env', install_dir, test_spack_env_git) + repo = SpackDescriptor('ebrains-spack-builds', install_dir, ebrains_spack_builds_git) + spack_config = SpackConfig(env, install_dir=install_dir, concretization_dir=install_dir, buildcache_dir=install_dir) + spack_config.add_repo(repo) + spack_operation = SpackOperationCreator.get_spack_operator(spack_config) + assert isinstance(spack_operation, SpackOperationCreateCache) + + +def test_spack_creator_use_cache(tmp_path): + install_dir = tmp_path + env = SpackDescriptor('test-spack-env', install_dir, test_spack_env_git) + repo = SpackDescriptor('ebrains-spack-builds', install_dir, ebrains_spack_builds_git) + spack_config = SpackConfig(env, install_dir=install_dir, concretization_dir=install_dir, buildcache_dir=install_dir) + spack_config.add_repo(repo) + spack_operation = SpackOperationCreator.get_spack_operator(spack_config, use_cache=True) + assert isinstance(spack_operation, SpackOperationUseCache)