if localmodule not in sys.path:
sys.path.insert(0, localmodule)
+import fdroidserver.index
import fdroidserver.signindex
import fdroidserver.common
import fdroidserver.metadata
sdk_path = os.getenv('ANDROID_HOME')
if os.path.exists(sdk_path):
fdroidserver.common.config['sdk_path'] = sdk_path
- if os.path.exists('/usr/bin/aapt'):
- # this test only works when /usr/bin/aapt is installed
- self._find_all()
build_tools = os.path.join(sdk_path, 'build-tools')
- if self._set_build_tools():
+ if self._set_build_tools() or os.path.exists('/usr/bin/aapt'):
self._find_all()
else:
print('no build-tools found: ' + build_tools)
config['jarsigner'] = fdroidserver.common.find_sdk_tools_cmd('jarsigner')
fdroidserver.common.config = config
+ self.assertTrue(fdroidserver.common.verify_apk_signature('bad-unicode-πÇÇ现代通用字-български-عربي1.apk'))
+ self.assertFalse(fdroidserver.common.verify_apk_signature('org.bitbucket.tickytacky.mirrormirror_1.apk'))
+ self.assertFalse(fdroidserver.common.verify_apk_signature('org.bitbucket.tickytacky.mirrormirror_2.apk'))
+ self.assertFalse(fdroidserver.common.verify_apk_signature('org.bitbucket.tickytacky.mirrormirror_3.apk'))
+ self.assertFalse(fdroidserver.common.verify_apk_signature('org.bitbucket.tickytacky.mirrormirror_4.apk'))
+ self.assertTrue(fdroidserver.common.verify_apk_signature('org.dyndns.fules.ck_20.apk'))
self.assertTrue(fdroidserver.common.verify_apk_signature('urzip.apk'))
self.assertFalse(fdroidserver.common.verify_apk_signature('urzip-badcert.apk'))
self.assertFalse(fdroidserver.common.verify_apk_signature('urzip-badsig.apk'))
self.assertTrue(fdroidserver.common.verify_apk_signature('urzip-release.apk'))
self.assertFalse(fdroidserver.common.verify_apk_signature('urzip-release-unsigned.apk'))
+ def test_verify_old_apk_signature(self):
+ fdroidserver.common.config = None
+ config = fdroidserver.common.read_config(fdroidserver.common.options)
+ config['jarsigner'] = fdroidserver.common.find_sdk_tools_cmd('jarsigner')
+ fdroidserver.common.config = config
+
+ self.assertTrue(fdroidserver.common.verify_old_apk_signature('bad-unicode-πÇÇ现代通用字-български-عربي1.apk'))
+ self.assertTrue(fdroidserver.common.verify_old_apk_signature('org.bitbucket.tickytacky.mirrormirror_1.apk'))
+ self.assertTrue(fdroidserver.common.verify_old_apk_signature('org.bitbucket.tickytacky.mirrormirror_2.apk'))
+ self.assertTrue(fdroidserver.common.verify_old_apk_signature('org.bitbucket.tickytacky.mirrormirror_3.apk'))
+ self.assertTrue(fdroidserver.common.verify_old_apk_signature('org.bitbucket.tickytacky.mirrormirror_4.apk'))
+ self.assertTrue(fdroidserver.common.verify_old_apk_signature('org.dyndns.fules.ck_20.apk'))
+ self.assertTrue(fdroidserver.common.verify_old_apk_signature('urzip.apk'))
+ self.assertFalse(fdroidserver.common.verify_old_apk_signature('urzip-badcert.apk'))
+ self.assertFalse(fdroidserver.common.verify_old_apk_signature('urzip-badsig.apk'))
+ self.assertTrue(fdroidserver.common.verify_old_apk_signature('urzip-release.apk'))
+ self.assertFalse(fdroidserver.common.verify_old_apk_signature('urzip-release-unsigned.apk'))
+
+ def test_verify_jar_signature_succeeds(self):
+ fdroidserver.common.config = None
+ config = fdroidserver.common.read_config(fdroidserver.common.options)
+ config['jarsigner'] = fdroidserver.common.find_sdk_tools_cmd('jarsigner')
+ fdroidserver.common.config = config
+ source_dir = os.path.join(self.basedir, 'signindex')
+ for f in ('testy.jar', 'guardianproject.jar'):
+ testfile = os.path.join(source_dir, f)
+ fdroidserver.common.verify_jar_signature(testfile)
+
+ def test_verify_jar_signature_fails(self):
+ fdroidserver.common.config = None
+ config = fdroidserver.common.read_config(fdroidserver.common.options)
+ config['jarsigner'] = fdroidserver.common.find_sdk_tools_cmd('jarsigner')
+ fdroidserver.common.config = config
+ source_dir = os.path.join(self.basedir, 'signindex')
+ testfile = os.path.join(source_dir, 'unsigned.jar')
+ with self.assertRaises(fdroidserver.index.VerificationException):
+ fdroidserver.common.verify_jar_signature(testfile)
+
def test_verify_apks(self):
fdroidserver.common.config = None
config = fdroidserver.common.read_config(fdroidserver.common.options)
def test_parse_androidmanifests_with_flavor(self):
source_files_dir = os.path.join(os.path.dirname(__file__), 'source-files')
+
app = fdroidserver.metadata.App()
build = fdroidserver.metadata.Build()
build.gradle = ['devVersion']
self.assertEqual(('0.95-dev', '949', 'org.fdroid.fdroid.dev'),
fdroidserver.common.parse_androidmanifests(paths, app))
+ app = fdroidserver.metadata.App()
+ build = fdroidserver.metadata.Build()
+ build.gradle = ['free']
+ app.builds = [build]
+ app.id = 'eu.siacs.conversations'
+ paths = [
+ os.path.join(source_files_dir, 'eu.siacs.conversations', 'build.gradle'),
+ ]
+ for path in paths:
+ self.assertTrue(os.path.isfile(path))
+ self.assertEqual(('1.23.1', '245', 'eu.siacs.conversations'),
+ fdroidserver.common.parse_androidmanifests(paths, app))
+
if __name__ == "__main__":
parser = optparse.OptionParser()