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()
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))
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" ])), )
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)
def setUp(self): super().setUp() self.arch = ("ELFCLASS64", "ELFDATA2LSB", "EM_X86_64") self.soname_cache = elf.SonameCache()
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(), )