diff --git a/fdroidserver/publish.py b/fdroidserver/publish.py index 41d70300..5e4ccbee 100644 --- a/fdroidserver/publish.py +++ b/fdroidserver/publish.py @@ -146,6 +146,9 @@ def status_update_json(generatedKeys, signedApks): logging.debug(_('Outputting JSON')) output = common.setup_status_output(start_timestamp) + output['apksigner'] = shutil.which(config.get('apksigner', '')) + output['jarsigner'] = shutil.which(config.get('jarsigner', '')) + output['keytool'] = shutil.which(config.get('keytool', '')) if generatedKeys: output['generatedKeys'] = generatedKeys if signedApks: diff --git a/fdroidserver/update.py b/fdroidserver/update.py index f34e8b0f..1cd94e47 100644 --- a/fdroidserver/update.py +++ b/fdroidserver/update.py @@ -144,6 +144,9 @@ def status_update_json(apps, apks): output['noPackages'] = [] output['needsUpdate'] = [] output['noUpdateCheck'] = [] + output['apksigner'] = shutil.which(config.get('apksigner', '')) + output['jarsigner'] = shutil.which(config.get('jarsigner', '')) + output['keytool'] = shutil.which(config.get('keytool', '')) for appid in apps: app = apps[appid] diff --git a/tests/publish.TestCase b/tests/publish.TestCase index d0d08376..f57dc955 100755 --- a/tests/publish.TestCase +++ b/tests/publish.TestCase @@ -11,6 +11,7 @@ # import inspect +import json import logging import optparse import os @@ -221,6 +222,34 @@ class PublishTest(unittest.TestCase): self.assertTrue(pk.is_decrypted()) self.assertEqual(jks.util.RSA_ENCRYPTION_OID, pk.algorithm_oid) + def test_status_update_json(self): + common.config = {} + publish.config = {} + with tempfile.TemporaryDirectory() as tmpdir: + os.chdir(tmpdir) + with mock.patch('sys.argv', ['fdroid publish', '']): + publish.status_update_json([], []) + with open('repo/status/publish.json') as fp: + data = json.load(fp) + self.assertTrue('apksigner' in data) + + publish.config = { + 'apksigner': 'apksigner', + } + publish.status_update_json([], []) + with open('repo/status/publish.json') as fp: + data = json.load(fp) + self.assertEqual(shutil.which(publish.config['apksigner']), data['apksigner']) + + publish.config = {} + common.fill_config_defaults(publish.config) + publish.status_update_json([], []) + with open('repo/status/publish.json') as fp: + data = json.load(fp) + self.assertEqual(publish.config.get('apksigner'), data['apksigner']) + self.assertEqual(publish.config['jarsigner'], data['jarsigner']) + self.assertEqual(publish.config['keytool'], data['keytool']) + if __name__ == "__main__": os.chdir(os.path.dirname(__file__)) diff --git a/tests/update.TestCase b/tests/update.TestCase index e84609bf..fbdccc5e 100755 --- a/tests/update.TestCase +++ b/tests/update.TestCase @@ -6,6 +6,7 @@ import copy import git import glob import inspect +import json import logging import optparse import os @@ -23,6 +24,7 @@ from binascii import unhexlify from datetime import datetime from distutils.version import LooseVersion from testcommon import TmpCwd +from unittest import mock try: from yaml import CSafeLoader as SafeLoader @@ -63,6 +65,7 @@ DONATION_FIELDS = ( class Options: allow_disabled_algorithms = False clean = False + pretty = True rename_apks = False @@ -1374,6 +1377,35 @@ class UpdateTest(unittest.TestCase): fdroidserver.update._set_author_entry(app, key, f) self.assertIsNone(app.get(key)) + def test_status_update_json(self): + fdroidserver.common.config = {} + fdroidserver.update.config = {} + fdroidserver.update.options = Options + with tempfile.TemporaryDirectory() as tmpdir: + os.chdir(tmpdir) + with mock.patch('sys.argv', ['fdroid update', '']): + fdroidserver.update.status_update_json([], []) + with open('repo/status/update.json') as fp: + data = json.load(fp) + self.assertTrue('apksigner' in data) + + fdroidserver.update.config = { + 'apksigner': 'apksigner', + } + fdroidserver.update.status_update_json([], []) + with open('repo/status/update.json') as fp: + data = json.load(fp) + self.assertEqual(shutil.which(fdroidserver.update.config['apksigner']), data['apksigner']) + + fdroidserver.update.config = {} + fdroidserver.common.fill_config_defaults(fdroidserver.update.config) + fdroidserver.update.status_update_json([], []) + with open('repo/status/update.json') as fp: + data = json.load(fp) + self.assertEqual(fdroidserver.update.config.get('apksigner'), data['apksigner']) + self.assertEqual(fdroidserver.update.config['jarsigner'], data['jarsigner']) + self.assertEqual(fdroidserver.update.config['keytool'], data['keytool']) + if __name__ == "__main__": os.chdir(os.path.dirname(__file__))