Exemple #1
0
 def switch_profile(self, profile: Profile):
     # Check folder exist
     mkdirs(profile.folder)
     # Update symlink
     self.update_current_link(profile.name)
     self.logger.print_default(
         "Current profile is now {pf.name}".format(pf=profile))
    def test_index_same_artifact_different_hash(self):
        mkdirs(self.workspace_folder / "a")
        mkdirs(self.workspace_folder / "b")

        self.rm.generate_manifest(
            self.workspace_folder / "a" / LeafFiles.MANIFEST,
            info_map={
                JsonConstants.INFO_NAME: "foo",
                JsonConstants.INFO_VERSION: "1",
                JsonConstants.INFO_DESCRIPTION: "Some description"
            },
        )

        self.rm.generate_manifest(
            self.workspace_folder / "b" / LeafFiles.MANIFEST,
            info_map={
                JsonConstants.INFO_NAME: "foo",
                JsonConstants.INFO_VERSION: "1",
                JsonConstants.INFO_DESCRIPTION: "Different description"
            },
        )

        self.rm.create_package(self.workspace_folder / "a",
                               self.workspace_folder / "a.leaf")
        self.rm.create_package(self.workspace_folder / "b",
                               self.workspace_folder / "b.leaf")

        self.rm.generate_index(self.workspace_folder / "indexA.json", [
            self.workspace_folder / "a.leaf", self.workspace_folder / "a.leaf"
        ],
                               prettyprint=True)
        self.rm.generate_index(self.workspace_folder / "indexB.json", [
            self.workspace_folder / "b.leaf", self.workspace_folder / "b.leaf"
        ],
                               prettyprint=True)
        with self.assertRaises(LeafException):
            self.rm.generate_index(self.workspace_folder / "indexAB.json", [
                self.workspace_folder / "a.leaf",
                self.workspace_folder / "b.leaf"
            ],
                                   prettyprint=True)
Exemple #3
0
 def alt_workspace_folder(self):
     return mkdirs(self.volatile_folder / "alt-workspace")
Exemple #4
0
 def workspace_folder(self):
     return mkdirs(self.volatile_folder / "workspace")
Exemple #5
0
 def install_folder(self):
     return mkdirs(self.volatile_folder / "packages")
Exemple #6
0
 def cache_folder(self):
     return mkdirs(self.volatile_folder / "cache")
Exemple #7
0
 def config_folder(self):
     return mkdirs(self.volatile_folder / "config")
Exemple #8
0
 def volatile_folder(self):
     return mkdirs(self.test_folder / "volatile")
Exemple #9
0
 def cache_folder(self):
     return mkdirs(LeafSettings.CACHE_FOLDER.as_path())
Exemple #10
0
    return line


def check_content(tester: TestCase, template_file: Path, lines: list,
                  variables: dict):
    if template_file is None:
        # No check
        return

    if LEAF_UT_CREATE_TEMPLATE.as_boolean():
        # Generate template if envar is set
        if not template_file.parent.exists():
            template_file.parent.mkdir()
        with template_file.open("w") as fp:
            for line in lines:
                fp.write(replace_vars(line, variables, reverse=True) + "\n")

    # Check content with actual content
    template_lines = list(
        map(lambda l: replace_vars(l, variables, reverse=False),
            get_lines(template_file)))
    tester.assertEqual(lines, template_lines)


if __name__ == "__main__":
    output = Path("/tmp/leaf/repository")
    print("Generate repository in {output}".format(output=output))
    rmtree_force(output)
    mkdirs(output)
    generate_repository(TEST_REMOTE_PACKAGE_SOURCE, output)
Exemple #11
0
 def download_cache_folder(self):
     return mkdirs(self.__download_cache_folder)
Exemple #12
0
 def ws_data_folder(self):
     return mkdirs(self.__ws_root / LeafFiles.WS_DATA_FOLDERNAME)
Exemple #13
0
 def remote_cache_folder(self):
     return mkdirs(self.cache_folder / LeafFiles.CACHE_REMOTES_FOLDERNAME)
Exemple #14
0
 def install_folder(self):
     return mkdirs(LeafSettings.USER_PKG_FOLDER.as_path())
Exemple #15
0
 def repository_folder(self):
     return mkdirs(self.test_folder / "repository")
Exemple #16
0
 def test_folder(self):
     return mkdirs(LeafTestCase._TEST_FOLDER)
Exemple #17
0
def generate_repository(source_folder, output_folder):

    mkdirs(output_folder)

    artifacts_list1 = []
    artifacts_list2 = []

    rm = RelengManager()
    for package_folder in source_folder.iterdir():
        if package_folder.is_dir() and PackageIdentifier.is_valid_identifier(
                package_folder.name):
            manifest_file = package_folder / LeafFiles.MANIFEST
            if manifest_file.is_file():
                manifest = Manifest.parse(manifest_file)
                if str(manifest.identifier) != package_folder.name:
                    raise ValueError(
                        "Naming error: {mf.identifier} != {folder.name}".
                        format(mf=manifest, folder=package_folder))
                filename = str(manifest.identifier) + ".leaf"
                output_file = output_folder / filename
                tar_extraargs = TAR_EXTRA_ARGS.get(manifest.identifier)
                rm.create_package(package_folder,
                                  output_file,
                                  tar_extra_args=tar_extraargs)
                # Check that the generated archive is OK
                check_archive_format(
                    output_file,
                    tar_extraargs[0] if tar_extraargs is not None else None)
                # Create multi index.json
                if str(manifest.identifier) in ALT_INDEX_CONTENT:
                    artifacts_list2.append(output_file)
                    if ALT_INDEX_CONTENT[str(manifest.identifier)]:
                        artifacts_list1.append(output_file)
                else:
                    artifacts_list1.append(output_file)
                # Create a problem with failure-badhash package
                if manifest.name == "failure-badhash":
                    info_node = jloadfile(
                        rm.find_external_info_file(output_file))
                    # chosen by fair dice roll.
                    # garanteed to be random.
                    info_node[
                        JsonConstants.
                        REMOTE_PACKAGE_HASH] = "sha384:d1083143b5c4cf7f1ddaadc391b2d0102fc9fffeb0951ec51020b512ef9548d40cd1af079a1221133faa949fdc304c41"
                    jwritefile(rm.find_external_info_file(output_file),
                               info_node,
                               pp=True)

    if len(artifacts_list1) == 0 or len(artifacts_list2) == 0:
        raise ValueError("Empty index!")

    with (output_folder / "multitags_1.0.leaf.tags").open("w") as fp:
        fp.write("volatileTag1\n")
        fp.write("volatileTag2")
    rm.generate_index(output_folder / "index.json",
                      artifacts_list1,
                      name="First repository",
                      description="First repository description",
                      prettyprint=True)

    with (output_folder / "multitags_1.0.leaf.tags").open("w") as fp:
        fp.write("volatileTag3\n")
        fp.write("volatileTag4")
    rm.generate_index(output_folder / "index2.json",
                      artifacts_list2,
                      name="Second repository",
                      description="Second repository description",
                      prettyprint=True)

    # Alter some values for test purpose
    index1json = jloadfile(output_folder / "index.json")
    for pkgjson in index1json[JsonConstants.REMOTE_PACKAGES]:
        if pkgjson["info"]["name"] == "failure-large-ap":
            pkgjson["size"] = 999999999999
    jwritefile(output_folder / "index.json", index1json, pp=True)

    # Sign with GPG
    subprocess.check_call([
        "gpg", "--homedir",
        str(TEST_GPG_HOMEDIR), "--detach-sign", "--armor",
        str(output_folder / "index.json")
    ])
    subprocess.check_call([
        "gpg", "--homedir",
        str(TEST_GPG_HOMEDIR), "--detach-sign", "--armor",
        str(output_folder / "index2.json")
    ])
Exemple #18
0
 def configuration_folder(self):
     return mkdirs(LeafSettings.CONFIG_FOLDER.as_path())