#!/usr/bin/env python3 import inspect import logging import optparse import os import sys import unittest localmodule = os.path.realpath( os.path.join(os.path.dirname(inspect.getfile(inspect.currentframe())), '..')) print('localmodule: ' + localmodule) if localmodule not in sys.path: sys.path.insert(0, localmodule) import fdroidserver.common import fdroidserver.metadata import fdroidserver.update class UpdateTest(unittest.TestCase): '''fdroid androguard manual tests''' def testScanMetadataAndroguardAAPT(self): def _create_apkmetadata_object(apkName): '''Create an empty apk metadata object''' apk = {} apk['apkName'] = apkName apk['uses-permission'] = [] apk['uses-permission-sdk-23'] = [] apk['features'] = [] apk['icons_src'] = {} return apk config = dict() fdroidserver.common.fill_config_defaults(config) fdroidserver.update.config = config os.chdir(os.path.dirname(__file__)) if os.path.basename(os.getcwd()) != 'tests': raise Exception('This test must be run in the "tests/" subdir') config['ndk_paths'] = dict() fdroidserver.common.config = config fdroidserver.update.config = config fdroidserver.update.options = type('', (), {})() fdroidserver.update.options.clean = True fdroidserver.update.options.delete_unknown = True self.assertTrue(fdroidserver.common.SdkToolsPopen(['aapt'])) try: from androguard.core.bytecodes.apk import APK dir(APK) except ImportError: raise Exception("androguard not installed!") apkList = [ ( '../org.dyndns.fules.ck_20.apk', { 'apkName': '../org.dyndns.fules.ck_20.apk', 'uses-permission': [ fdroidserver.update.UsesPermission( name='android.permission.BIND_INPUT_METHOD', maxSdkVersion=None, ), fdroidserver.update.UsesPermission( name='android.permission.READ_EXTERNAL_STORAGE', maxSdkVersion=None, ), fdroidserver.update.UsesPermission( name='android.permission.VIBRATE', maxSdkVersion=None ), ], 'uses-permission-sdk-23': [], 'features': [], 'icons_src': { '240': 'res/drawable-hdpi-v4/icon_launcher.png', '120': 'res/drawable-ldpi-v4/icon_launcher.png', '160': 'res/drawable-mdpi-v4/icon_launcher.png', '-1': 'res/drawable-mdpi-v4/icon_launcher.png', }, 'packageName': 'org.dyndns.fules.ck', 'versionCode': 20, 'versionName': 'v1.6pre2', 'minSdkVersion': 7, 'targetSdkVersion': 8, 'nativecode': [ 'arm64-v8a', 'armeabi', 'armeabi-v7a', 'mips', 'mips64', 'x86', 'x86_64', ], }, ) ] for apkName, apkaapt in apkList: logging.debug("Processing " + apkName) apkfile = os.path.join('repo', apkName) apkandroguard = _create_apkmetadata_object(apkName) logging.debug("Using androguard for metadata") fdroidserver.update.scan_apk_androguard(apkandroguard, apkfile) # avoid AAPT application name bug del apkandroguard['name'] self.maxDiff = None self.assertEqual(apkaapt, apkandroguard) if __name__ == "__main__": parser = optparse.OptionParser() parser.add_option("-v", "--verbose", action="store_true", default=False, help="Spew out even more information than normal") (fdroidserver.common.options, args) = parser.parse_args(['--verbose']) newSuite = unittest.TestSuite() newSuite.addTest(unittest.makeSuite(UpdateTest)) unittest.main()