mirror of
https://gitlab.com/fdroid/fdroidserver.git
synced 2024-11-14 19:10:11 +01:00
3768d7a4d6
The start up sequence of processes that are based on the .fdroid.* metadata is a bit different, so this ensures that the environment variables get properly initialized in all cases. This also creates a single function where the environment is set. Before it was being set in multiple places across multiple files.
96 lines
3.6 KiB
Python
Executable File
96 lines
3.6 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
|
|
# http://www.drdobbs.com/testing/unit-testing-with-python/240165163
|
|
|
|
import inspect
|
|
import logging
|
|
import optparse
|
|
import os
|
|
import sys
|
|
import unittest
|
|
from binascii import unhexlify
|
|
|
|
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.update
|
|
from fdroidserver.common import FDroidPopen
|
|
|
|
|
|
class UpdateTest(unittest.TestCase):
|
|
'''fdroid update'''
|
|
|
|
def javagetsig(self, apkfile):
|
|
getsig_dir = os.path.join(os.path.dirname(__file__), 'getsig')
|
|
if not os.path.exists(getsig_dir + "/getsig.class"):
|
|
logging.critical("getsig.class not found. To fix: cd '%s' && ./make.sh" % getsig_dir)
|
|
sys.exit(1)
|
|
# FDroidPopen needs some config to work
|
|
config = dict()
|
|
fdroidserver.common.fill_config_defaults(config)
|
|
fdroidserver.common.config = config
|
|
p = FDroidPopen(['java', '-cp', os.path.join(os.path.dirname(__file__), 'getsig'),
|
|
'getsig', os.path.join(os.getcwd(), apkfile)])
|
|
sig = None
|
|
for line in p.output.splitlines():
|
|
if line.startswith('Result:'):
|
|
sig = line[7:].strip()
|
|
break
|
|
if p.returncode == 0:
|
|
return sig
|
|
else:
|
|
return None
|
|
|
|
def testGoodGetsig(self):
|
|
# config needed to use jarsigner and keytool
|
|
config = dict()
|
|
fdroidserver.common.fill_config_defaults(config)
|
|
fdroidserver.update.config = config
|
|
apkfile = os.path.join(os.path.dirname(__file__), 'urzip.apk')
|
|
sig = self.javagetsig(apkfile)
|
|
self.assertIsNotNone(sig, "sig is None")
|
|
pysig = fdroidserver.update.getsig(apkfile)
|
|
self.assertIsNotNone(pysig, "pysig is None")
|
|
self.assertEquals(sig, fdroidserver.update.getsig(apkfile),
|
|
"python sig not equal to java sig!")
|
|
self.assertEquals(len(sig), len(pysig),
|
|
"the length of the two sigs are different!")
|
|
try:
|
|
self.assertEquals(unhexlify(sig), unhexlify(pysig),
|
|
"the length of the two sigs are different!")
|
|
except TypeError as e:
|
|
print(e)
|
|
self.assertTrue(False, 'TypeError!')
|
|
|
|
def testBadGetsig(self):
|
|
# config needed to use jarsigner and keytool
|
|
config = dict()
|
|
fdroidserver.common.fill_config_defaults(config)
|
|
fdroidserver.update.config = config
|
|
apkfile = os.path.join(os.path.dirname(__file__), 'urzip-badsig.apk')
|
|
sig = self.javagetsig(apkfile)
|
|
self.assertIsNone(sig, "sig should be None: " + str(sig))
|
|
pysig = fdroidserver.update.getsig(apkfile)
|
|
self.assertIsNone(pysig, "python sig should be None: " + str(sig))
|
|
|
|
apkfile = os.path.join(os.path.dirname(__file__), 'urzip-badcert.apk')
|
|
sig = self.javagetsig(apkfile)
|
|
self.assertIsNone(sig, "sig should be None: " + str(sig))
|
|
pysig = fdroidserver.update.getsig(apkfile)
|
|
self.assertIsNone(pysig, "python sig should be None: " + str(sig))
|
|
|
|
|
|
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()
|