From e82888837e71686ad9c1b4359dc9c7c718fa5316 Mon Sep 17 00:00:00 2001 From: Jochen Sprickerhof Date: Sun, 8 May 2022 12:21:49 +0200 Subject: [PATCH 1/2] Fix androguard_test - SdkToolsPopen expects a list. - info.guardianproject.urzip.apk is not in the repo. - scan_apk_aapt was removed in 08931f45 so define output. --- tests/androguard_test.py | 54 +++++++++++++++++++++++++++++++++------- 1 file changed, 45 insertions(+), 9 deletions(-) diff --git a/tests/androguard_test.py b/tests/androguard_test.py index 162dffb3..b2eb5f96 100644 --- a/tests/androguard_test.py +++ b/tests/androguard_test.py @@ -48,25 +48,61 @@ class UpdateTest(unittest.TestCase): fdroidserver.update.options.clean = True fdroidserver.update.options.delete_unknown = True - self.assertTrue(fdroidserver.common.SdkToolsPopen('aapt')) + self.assertTrue(fdroidserver.common.SdkToolsPopen(['aapt'])) try: from androguard.core.bytecodes.apk import APK dir(APK) except ImportError: raise Exception("androguard not installed!") - apkList = ['../info.guardianproject.urzip.apk', '../org.dyndns.fules.ck_20.apk'] + 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 in apkList: + for apkName, apkaapt in apkList: logging.debug("Processing " + apkName) apkfile = os.path.join('repo', apkName) - apkaapt = _create_apkmetadata_object(apkName) - logging.debug("Using AAPT for metadata") - fdroidserver.update.scan_apk_aapt(apkaapt, apkfile) - # avoid AAPT application name bug - del apkaapt['name'] - apkandroguard = _create_apkmetadata_object(apkName) logging.debug("Using androguard for metadata") fdroidserver.update.scan_apk_androguard(apkandroguard, apkfile) From 08e3e445fbbd0108eabf5b09873753e3e415f882 Mon Sep 17 00:00:00 2001 From: Jochen Sprickerhof Date: Sun, 8 May 2022 12:41:23 +0200 Subject: [PATCH 2/2] Merge androguard_test into update.TestCase --- tests/androguard_test.py | 124 --------------------------------------- tests/update.TestCase | 64 ++++++++++++++++++++ 2 files changed, 64 insertions(+), 124 deletions(-) delete mode 100644 tests/androguard_test.py diff --git a/tests/androguard_test.py b/tests/androguard_test.py deleted file mode 100644 index b2eb5f96..00000000 --- a/tests/androguard_test.py +++ /dev/null @@ -1,124 +0,0 @@ -#!/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() diff --git a/tests/update.TestCase b/tests/update.TestCase index cc56f455..4d425382 100755 --- a/tests/update.TestCase +++ b/tests/update.TestCase @@ -1652,6 +1652,70 @@ class UpdateTest(unittest.TestCase): self.assertEqual(fdroidserver.update.config['jarsigner'], data['jarsigner']) self.assertEqual(fdroidserver.update.config['keytool'], data['keytool']) + def test_scan_metadata_androguard(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 + + 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, + 'name': 'Compass Keyboard', + 'targetSdkVersion': 8, + 'nativecode': [ + 'arm64-v8a', + 'armeabi', + 'armeabi-v7a', + 'mips', + 'mips64', + 'x86', + 'x86_64', + ], + }, + ) + ] + + for apkfile, apkaapt in apkList: + apkandroguard = _create_apkmetadata_object(apkfile) + fdroidserver.update.scan_apk_androguard(apkandroguard, apkfile) + + self.maxDiff = None + self.assertEqual(apkaapt, apkandroguard) + if __name__ == "__main__": os.chdir(os.path.dirname(__file__))