示例#1
0
    def __init__(self, *, parts, project, validator):
        self._soname_cache = elf.SonameCache()
        self._parts_data = parts.get("parts", {})
        self._snap_type = parts.get("type", "app")
        self._project = project
        self._validator = validator

        self.all_parts = []
        self._part_names = []
        self.after_requests = {}

        self._process_parts()
示例#2
0
    def test_is_valid_elf_ignores_corrupt_files(self):
        soname = "libssl.so.1.0.0"
        soname_path = os.path.join(self.path, soname)
        library = elf.Library(
            soname=soname,
            soname_path=soname_path,
            search_paths=[self.path],
            core_base_path="/snap/core/current",
            arch=("ELFCLASS64", "ELFDATA2LSB", "EM_X86_64"),
            soname_cache=elf.SonameCache(),
        )

        self.assertThat(library._is_valid_elf(soname_path), Equals(True))

        self.useFixture(
            fixtures.MockPatch(
                "snapcraft_legacy.internal.elf.ElfFile",
                side_effect=errors.CorruptedElfFileError(path=soname_path,
                                                         error=RuntimeError()),
            ))

        self.assertThat(library._is_valid_elf(soname_path), Equals(False))
示例#3
0
    def test_get_libraries_with_soname_cache(self):
        elf_file = self.fake_elf["fake_elf-2.23"]

        arch = ("ELFCLASS64", "ELFDATA2LSB", "EM_X86_64")
        soname_cache = elf.SonameCache()
        soname_cache[arch, "bar.so.2"] = "/lib/bar.so.2"

        libs = elf_file.load_dependencies(
            root_path=self.fake_elf.root_path,
            core_base_path=self.fake_elf.core_base_path,
            arch_triplet=self.arch_triplet,
            content_dirs=self.content_dirs,
            soname_cache=soname_cache,
        )

        # With no cache this would have returned '/usr/lib/bar.so.2'
        self.assertThat(
            libs,
            Equals(
                set([
                    self.fake_elf.root_libraries["foo.so.1"], "/lib/bar.so.2"
                ])),
        )
示例#4
0
 def test_error(self, key, partial_message):
     soname_cache = elf.SonameCache()
     with pytest.raises(EnvironmentError) as error:
         soname_cache.__setitem__(key, "/soname.so")
         assert str(error).startswith(partial_message)
示例#5
0
 def setUp(self):
     super().setUp()
     self.arch = ("ELFCLASS64", "ELFDATA2LSB", "EM_X86_64")
     self.soname_cache = elf.SonameCache()
示例#6
0
def load_part(
    part_name,
    plugin_name=None,
    part_properties=None,
    project=None,
    stage_packages_repo=None,
    snap_name="test-snap",
    base="core18",
    build_base=None,
    confinement="strict",
    snap_type="app",
):
    if not plugin_name:
        plugin_name = "nil"
    properties = {"plugin": plugin_name}
    if part_properties:
        properties.update(part_properties)
    if "build-environment" not in properties:
        properties["build-environment"] = list()
    if not project:
        project = Project()

    project._snap_meta.name = snap_name
    project._snap_meta.version = "1.0"
    project._snap_meta.grade = "devel"
    project._snap_meta.type = snap_type
    project._snap_meta.confinement = confinement
    project._snap_meta.base = base
    if build_base is not None:
        project._snap_meta.build_base = build_base

    validator = _schema.Validator()
    schema = validator.part_schema
    definitions_schema = validator.definitions_schema
    plugin = pluginhandler.load_plugin(
        part_name=part_name,
        plugin_name=plugin_name,
        properties=properties,
        project=project,
        part_schema=schema,
        definitions_schema=definitions_schema,
    )

    if not stage_packages_repo:
        stage_packages_repo = mock.Mock()
    grammar_processor = grammar_processing.PartGrammarProcessor(
        plugin=plugin,
        properties=properties,
        arch=project.deb_arch,
        target_arch=project.target_arch,
        repo=stage_packages_repo,
    )

    return pluginhandler.PluginHandler(
        plugin=plugin,
        part_properties=properties,
        project=project,
        part_schema=schema,
        definitions_schema=definitions_schema,
        grammar_processor=grammar_processor,
        stage_packages_repo=stage_packages_repo,
        snap_base_path="/snap/fake-name/current",
        soname_cache=elf.SonameCache(),
    )