def test_yaml_directory_layout_parameters( tmpdir, config ): """This tests the various parameters that can be used to configure the install location """ spec = Spec('python') spec.concretize() # Ensure default layout matches expected spec format layout_default = YamlDirectoryLayout(str(tmpdir)) path_default = layout_default.relative_path_for_spec(spec) assert(path_default == spec.format( "${ARCHITECTURE}/" "${COMPILERNAME}-${COMPILERVER}/" "${PACKAGE}-${VERSION}-${HASH}")) # Test hash_length parameter works correctly layout_10 = YamlDirectoryLayout(str(tmpdir), hash_len=10) path_10 = layout_10.relative_path_for_spec(spec) layout_7 = YamlDirectoryLayout(str(tmpdir), hash_len=7) path_7 = layout_7.relative_path_for_spec(spec) assert(len(path_default) - len(path_10) == 22) assert(len(path_default) - len(path_7) == 25) # Test path_scheme arch, compiler, package7 = path_7.split('/') scheme_package7 = "${PACKAGE}-${VERSION}-${HASH:7}" layout_package7 = YamlDirectoryLayout(str(tmpdir), path_scheme=scheme_package7) path_package7 = layout_package7.relative_path_for_spec(spec) assert(package7 == path_package7) # Test separation of architecture arch_scheme_package = "${PLATFORM}/${TARGET}/${OS}/${PACKAGE}/${VERSION}/${HASH:7}" # NOQA: ignore=E501 layout_arch_package = YamlDirectoryLayout(str(tmpdir), path_scheme=arch_scheme_package) arch_path_package = layout_arch_package.relative_path_for_spec(spec) assert(arch_path_package == spec.format(arch_scheme_package)) # Ensure conflicting parameters caught with pytest.raises(InvalidDirectoryLayoutParametersError): YamlDirectoryLayout(str(tmpdir), hash_len=20, path_scheme=scheme_package7)
def test_yaml_directory_layout_parameters(tmpdir, config): """This tests the various parameters that can be used to configure the install location """ spec = Spec('python') spec.concretize() # Ensure default layout matches expected spec format layout_default = YamlDirectoryLayout(str(tmpdir)) path_default = layout_default.relative_path_for_spec(spec) assert(path_default == spec.format( "{architecture}/" "{compiler.name}-{compiler.version}/" "{name}-{version}-{hash}")) # Test hash_length parameter works correctly layout_10 = YamlDirectoryLayout(str(tmpdir), hash_length=10) path_10 = layout_10.relative_path_for_spec(spec) layout_7 = YamlDirectoryLayout(str(tmpdir), hash_length=7) path_7 = layout_7.relative_path_for_spec(spec) assert(len(path_default) - len(path_10) == 22) assert(len(path_default) - len(path_7) == 25) # Test path_scheme arch, compiler, package7 = path_7.split('/') projections_package7 = {'all': "{name}-{version}-{hash:7}"} layout_package7 = YamlDirectoryLayout(str(tmpdir), projections=projections_package7) path_package7 = layout_package7.relative_path_for_spec(spec) assert(package7 == path_package7) # Test separation of architecture or namespace spec2 = Spec('libelf').concretized() arch_scheme = "{architecture.platform}/{architecture.target}/{architecture.os}/{name}/{version}/{hash:7}" # NOQA: ignore=E501 ns_scheme = "${ARCHITECTURE}/${NAMESPACE}/${PACKAGE}-${VERSION}-${HASH:7}" # NOQA: ignore=E501 arch_ns_scheme_projections = {'all': arch_scheme, 'python': ns_scheme} layout_arch_ns = YamlDirectoryLayout( str(tmpdir), projections=arch_ns_scheme_projections) arch_path_spec2 = layout_arch_ns.relative_path_for_spec(spec2) assert(arch_path_spec2 == spec2.format(arch_scheme)) ns_path_spec = layout_arch_ns.relative_path_for_spec(spec) assert(ns_path_spec == spec.format(ns_scheme)) # Ensure conflicting parameters caught with pytest.raises(InvalidDirectoryLayoutParametersError): YamlDirectoryLayout(str(tmpdir), hash_length=20, projections=projections_package7)