Skip to content
Snippets Groups Projects
test_status.py 2.63 KiB
Newer Older
  • Learn to ignore specific revisions
  • from mpsd_software_manager.cmds import status
    
    
    def test_environment_status(
        tmp_path, simple_toolchain, create_fake_environment, install_test_release
    ):
        """Test that the environment status is correct.
    
        The status command has the following three usage:
    
        - 1) If no mpsd_release, list available releases
        - 2) If mpsd_release, list available toolchains
        - 3) If mpsd_release and toolchain, list available packages
    
        We need to test all the three cases.
        """
    
        # 1) If no mpsd_release, list available releases
        list_of_release_in_empty_dir = status.environment_status(None, tmp_path)
        assert list_of_release_in_empty_dir == []
        (tmp_path / "test_case1" / "dev-23a" / "spack-environments").mkdir(
            parents=True, exist_ok=True
        )
        (tmp_path / "test_case1" / "fake_release").mkdir(parents=True, exist_ok=True)
        list_of_release = status.environment_status(None, tmp_path / "test_case1")
        assert list_of_release == ["dev-23a"]
    
        # 2) If mpsd_release, list available toolchains
        toolchain_map = status.environment_status("fake-release", tmp_path)
        assert toolchain_map is None
        mpsd_release = "dev-23a"
        expected_toolchain_map = create_fake_environment(tmp_path, mpsd_release)
        # check that the environment status is is correct
        toolchain_map = status.environment_status(mpsd_release, tmp_path)
        # convert each list to a set to ensure that the order doesn't matter
    
        for microarch in expected_toolchain_map:
    
            assert set(toolchain_map[microarch]) == set(expected_toolchain_map[microarch])
    
        # 3) If mpsd_release and toolchain, list available packages
        install_test_release(tmp_path / "test_case3", simple_toolchain)
        package_list = status.environment_status(
            mpsd_release, tmp_path / "test_case3", "toolchain2"
        )
        assert len(package_list) == 2  # we installed zlib and zstd only
        check_for_valid_spec_syntax(
            package_list[0], "zlib"
        )  # the list is always in alphabetical order
        check_for_valid_spec_syntax(package_list[1], "zstd")
    
    
    def check_for_valid_spec_syntax(spec: str, package_name: str):
        """Check if the spec is valid.
    
        Assuming the format of the spec as:
        {name}{@versions}{%compiler.name}{@compiler.versions}{compiler_flags}{variants}{arch=architecture}
        we ensure that:
        - package name is correct
        - there are atleast 2 @ symbols (version for package and compiler)
        - there is atleast 1 % symbol  (compiler specification)
        - there is atleast 1 arch=
        """
        assert spec.count("@") >= 2
        assert spec.count("%") >= 1
        assert "build_system=" in spec
        assert "arch=" in spec
        assert spec.split("@")[0] == package_name