chiark / gitweb /
Merge branch 'master' into 'master'
[fdroidserver.git] / tests / androguard_test.py
1 #!/usr/bin/env python3
2
3 import inspect
4 import logging
5 import optparse
6 import os
7 import sys
8 import unittest
9
10 localmodule = os.path.realpath(
11     os.path.join(os.path.dirname(inspect.getfile(inspect.currentframe())), '..'))
12 print('localmodule: ' + localmodule)
13 if localmodule not in sys.path:
14     sys.path.insert(0, localmodule)
15
16 import fdroidserver.common
17 import fdroidserver.metadata
18 import fdroidserver.update
19
20
21 class UpdateTest(unittest.TestCase):
22     '''fdroid androguard manual tests'''
23
24     def testScanMetadataAndroguardAAPT(self):
25
26         def _create_apkmetadata_object(apkName):
27             '''Create an empty apk metadata object'''
28             apk = {}
29             apk['apkName'] = apkName
30             apk['uses-permission'] = []
31             apk['uses-permission-sdk-23'] = []
32             apk['features'] = []
33             apk['icons_src'] = {}
34             return apk
35         
36         config = dict()
37         fdroidserver.common.fill_config_defaults(config)
38         fdroidserver.update.config = config
39         os.chdir(os.path.dirname(__file__))
40         if os.path.basename(os.getcwd()) != 'tests':
41             raise Exception('This test must be run in the "tests/" subdir')
42
43         config['ndk_paths'] = dict()
44         config['accepted_formats'] = ['json', 'txt', 'yml']
45         fdroidserver.common.config = config
46         fdroidserver.update.config = config
47
48         fdroidserver.update.options = type('', (), {})()
49         fdroidserver.update.options.clean = True
50         fdroidserver.update.options.delete_unknown = True
51
52         self.assertTrue(fdroidserver.common.SdkToolsPopen('aapt'))
53         try:
54             from androguard.core.bytecodes.apk import APK
55             dir(APK)
56         except ImportError:
57             raise Exception("androguard not installed!")
58
59         apkList = ['../info.guardianproject.urzip.apk', '../org.dyndns.fules.ck_20.apk']
60
61         for apkName in apkList:
62             logging.debug("Processing " + apkName)
63             apkfile = os.path.join('repo', apkName)
64
65             apkaapt = _create_apkmetadata_object(apkName)
66             logging.debug("Using AAPT for metadata")
67             fdroidserver.update.scan_apk_aapt(apkaapt, apkfile)
68             # avoid AAPT application name bug
69             del apkaapt['name']
70
71             apkandroguard = _create_apkmetadata_object(apkName)
72             logging.debug("Using androguard for metadata")
73             fdroidserver.update.scan_apk_androguard(apkandroguard, apkfile)
74             # avoid AAPT application name bug
75             del apkandroguard['name']
76
77             self.maxDiff = None
78             self.assertEqual(apkaapt, apkandroguard)
79
80
81 if __name__ == "__main__":
82     parser = optparse.OptionParser()
83     parser.add_option("-v", "--verbose", action="store_true", default=False,
84                       help="Spew out even more information than normal")
85     (fdroidserver.common.options, args) = parser.parse_args(['--verbose'])
86
87     newSuite = unittest.TestSuite()
88     newSuite.addTest(unittest.makeSuite(UpdateTest))
89     unittest.main()