def test_init(self): for filename in self.certs: self.assertTrue(self.certs[filename] is not None) self.assertTrue(type(self.certs[filename]) is CERT) # Test the class raise when a non-existing file is given: with self.assertRaises(ParsingError): CERT(join('test', 'data', 'aaa_this_is_a_non_existent_file_xxx')) # Test the class raise when a non-CERT.RSA file is given: with self.assertRaises(CERTParsingError): CERT(join('test', 'data', 'Example.apk')) CERT(join('test', 'data', 'AndroidManifest.xml')) CERT(join('test', 'data', 'classes.dex'))
def _extract_and_set_entries(self, string_processing): exists_invalid_entry = False apk_filepath = self.get_file_path() with ZipFile(apk_filepath) as apk: tmpdir = tempfile.mkdtemp(APK._TEMPORARY_DIR) for filename in apk.namelist(): entry_filepath = apk.extract(filename, tmpdir) try: if AndroidManifest.looks_like_a_manifest(filename): self._manifest = AndroidManifest(entry_filepath, True, apk_filepath) elif CERT.looks_like_a_cert(filename): self._cert = CERT(entry_filepath, filename) elif Dex.looks_like_a_dex(filename): self._dex = Dex(entry_filepath, string_processing) else: if not os.path.isdir(entry_filepath): self._files.append(File(entry_filepath, filename)) except (ParsingError, AndroidManifestParsingError, CERTParsingError): exists_invalid_entry = True try: shutil.rmtree(tmpdir) except OSError: pass if exists_invalid_entry: raise APKParsingError
def setUpClass(cls): cls.certs = {} for filename in listdir(join('test', 'data')): if filename in cls.cert_properties: cls.certs[filename] = CERT(join('test', 'data', filename), filename)