From 1c4d377793e9ae3a130ca6fdea05261a3074e019 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michael=20P=C3=B6hn?= Date: Tue, 23 Jul 2019 15:55:28 +0200 Subject: [PATCH 1/6] use logging.warning in checkupdates --- fdroidserver/checkupdates.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/fdroidserver/checkupdates.py b/fdroidserver/checkupdates.py index 988ad31a..c34d2fa2 100644 --- a/fdroidserver/checkupdates.py +++ b/fdroidserver/checkupdates.py @@ -454,7 +454,7 @@ def checkupdates_app(app): if noverok: logging.info(logmsg) else: - logging.warn(logmsg) + logging.warning(logmsg) elif vercode == app.CurrentVersionCode: logging.info("...up to date") else: @@ -475,7 +475,7 @@ def checkupdates_app(app): if options.auto: mode = app.AutoUpdateMode if not app.CurrentVersionCode: - logging.warn("Can't auto-update app with no current version code: " + app.id) + logging.warning("Can't auto-update app with no current version code: " + app.id) elif mode in ('None', 'Static'): pass elif mode.startswith('Version '): @@ -512,7 +512,7 @@ def checkupdates_app(app): ver = common.getcvname(app) commitmsg = "Update %s to %s" % (name, ver) else: - logging.warn('Invalid auto update mode "' + mode + '" on ' + app.id) + logging.warning('Invalid auto update mode "' + mode + '" on ' + app.id) if commitmsg: metadata.write_metadata(app.metadatapath, app) From 1c7af1dc2cf6fa9d5fbb0586a22919040a6e98d5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michael=20P=C3=B6hn?= Date: Tue, 23 Jul 2019 17:28:19 +0200 Subject: [PATCH 2/6] add test for checkupdates_app() --- tests/checkupdates.TestCase | 67 +++++++++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100755 tests/checkupdates.TestCase diff --git a/tests/checkupdates.TestCase b/tests/checkupdates.TestCase new file mode 100755 index 00000000..d6231f62 --- /dev/null +++ b/tests/checkupdates.TestCase @@ -0,0 +1,67 @@ +#!/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 unittest import mock + + +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.checkupdates +import fdroidserver.metadata + + +class CommonTest(unittest.TestCase): + '''fdroidserver/common.py''' + + def setUp(self): + logging.basicConfig(level=logging.DEBUG) + self.basedir = os.path.join(localmodule, 'tests') + self.tmpdir = os.path.abspath(os.path.join(self.basedir, '..', '.testfiles')) + if not os.path.exists(self.tmpdir): + os.makedirs(self.tmpdir) + os.chdir(self.basedir) + + def test_checkupdates_app_http(self): + fdroidserver.checkupdates.options = mock.Mock() + fdroidserver.checkupdates.options.auto = 'bleh' + fdroidserver.checkupdates.config = {} + + app = fdroidserver.metadata.App() + app.id = 'loop.starts.shooting' + app.metadatapath = 'metadata/' + app.id + '.yml' + app.CurrentVersionCode = 10108 + app.UpdateCheckMode = 'HTTP' + app.UpdateCheckData = 'mock' + + with mock.patch('fdroidserver.checkupdates.check_http', lambda app: (None, 'bla')): + fdroidserver.checkupdates.checkupdates_app(app) + + with mock.patch('fdroidserver.checkupdates.check_http', lambda app: ('1.1.9', 10109)): + with mock.patch('fdroidserver.metadata.write_metadata', mock.Mock()) as wrmock: + with mock.patch('subprocess.call', lambda cmd: 0): + fdroidserver.checkupdates.checkupdates_app(app) + wrmock.assert_called_with(app.metadatapath, app) + + +if __name__ == "__main__": + os.chdir(os.path.dirname(__file__)) + + 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(CommonTest)) + unittest.main(failfast=False) From 23280b6029055a028059eda76863ab6cd4af2787 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michael=20P=C3=B6hn?= Date: Tue, 23 Jul 2019 20:45:04 +0200 Subject: [PATCH 3/6] checkupdates add check_http test --- tests/checkupdates.TestCase | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/tests/checkupdates.TestCase b/tests/checkupdates.TestCase index d6231f62..e310fc8f 100755 --- a/tests/checkupdates.TestCase +++ b/tests/checkupdates.TestCase @@ -53,6 +53,23 @@ class CommonTest(unittest.TestCase): fdroidserver.checkupdates.checkupdates_app(app) wrmock.assert_called_with(app.metadatapath, app) + def test_check_http(self): + fdroidserver.checkupdates.options = mock.Mock() + + app = fdroidserver.metadata.App() + app.id = 'loop.starts.shooting' + app.metadatapath = 'metadata/' + app.id + '.yml' + app.CurrentVersionCode = 10108 + app.UpdateCheckMode = 'HTTP' + app.UpdateCheckData = 'https://a.net/b.txt|c(.*)|https://d.net/e.txt|v(.*)' + + respmock = mock.Mock() + respmock.read = lambda: 'v1.1.9\nc10109'.encode('utf-8') + with mock.patch('urllib.request.urlopen', lambda a, b, c: respmock): + vername, vercode = fdroidserver.checkupdates.check_http(app) + self.assertEqual(vername, '1.1.9') + self.assertEqual(vercode, '10109') + if __name__ == "__main__": os.chdir(os.path.dirname(__file__)) From be3d498391b721c7e79f3895b5895f8691a189ed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michael=20P=C3=B6hn?= Date: Tue, 23 Jul 2019 18:07:22 +0200 Subject: [PATCH 4/6] checkupdates: check_http fix ignore check --- fdroidserver/checkupdates.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/fdroidserver/checkupdates.py b/fdroidserver/checkupdates.py index c34d2fa2..b166ca39 100644 --- a/fdroidserver/checkupdates.py +++ b/fdroidserver/checkupdates.py @@ -85,9 +85,13 @@ def check_http(app): raise FDroidException("No RE match for version") version = m.group(1) - if version and ignoresearch and not ignoresearch(version): + if ignoresearch and version: + if not ignoresearch(version): + return (version, vercode) + else: + return (None, ("Version {version} is ignored").format(version=version)) + else: return (version, vercode) - return (None, ("Version {version} is ignored").format(version=version)) except FDroidException: msg = "Could not complete http check for app {0} due to unknown error: {1}".format(app.id, traceback.format_exc()) return (None, msg) From bad888856a87b7edfeabad23f5229d92cc29874a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michael=20P=C3=B6hn?= Date: Tue, 23 Jul 2019 20:51:51 +0200 Subject: [PATCH 5/6] checkupdates: add check_http ignore test --- tests/checkupdates.TestCase | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/tests/checkupdates.TestCase b/tests/checkupdates.TestCase index e310fc8f..503f6b76 100755 --- a/tests/checkupdates.TestCase +++ b/tests/checkupdates.TestCase @@ -62,6 +62,7 @@ class CommonTest(unittest.TestCase): app.CurrentVersionCode = 10108 app.UpdateCheckMode = 'HTTP' app.UpdateCheckData = 'https://a.net/b.txt|c(.*)|https://d.net/e.txt|v(.*)' + app.UpdateCheckIgnore = 'beta' respmock = mock.Mock() respmock.read = lambda: 'v1.1.9\nc10109'.encode('utf-8') @@ -70,6 +71,24 @@ class CommonTest(unittest.TestCase): self.assertEqual(vername, '1.1.9') self.assertEqual(vercode, '10109') + def test_check_http_ignore(self): + fdroidserver.checkupdates.options = mock.Mock() + + app = fdroidserver.metadata.App() + app.id = 'loop.starts.shooting' + app.metadatapath = 'metadata/' + app.id + '.yml' + app.CurrentVersionCode = 10108 + app.UpdateCheckMode = 'HTTP' + app.UpdateCheckData = 'https://a.net/b.txt|c(.*)|https://d.net/e.txt|v(.*)' + app.UpdateCheckIgnore = 'beta' + + respmock = mock.Mock() + respmock.read = lambda: 'v1.1.9-beta\nc10109'.encode('utf-8') + with mock.patch('urllib.request.urlopen', lambda a, b, c: respmock): + vername, vercode = fdroidserver.checkupdates.check_http(app) + self.assertEqual(vername, None) + self.assertEqual(vercode, 'Version 1.1.9-beta is ignored') + if __name__ == "__main__": os.chdir(os.path.dirname(__file__)) From d0368d0ad8b4debc2206e7fe54cd1c1d3049b684 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michael=20P=C3=B6hn?= Date: Tue, 23 Jul 2019 22:44:45 +0200 Subject: [PATCH 6/6] common add parse_androidmanifests_ignore test --- tests/common.TestCase | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/tests/common.TestCase b/tests/common.TestCase index 52e48d89..f99150ea 100755 --- a/tests/common.TestCase +++ b/tests/common.TestCase @@ -806,6 +806,19 @@ class CommonTest(unittest.TestCase): self.assertEqual(('0.94-test', '940', 'org.fdroid.fdroid'), fdroidserver.common.parse_androidmanifests(paths, app)) + def test_parse_androidmanifests_ignore(self): + app = fdroidserver.metadata.App() + app.id = 'org.fdroid.fdroid' + app.UpdateCheckIgnore = '-test' + paths = [ + os.path.join('source-files', 'fdroid', 'fdroidclient', 'AndroidManifest.xml'), + os.path.join('source-files', 'fdroid', 'fdroidclient', 'build.gradle'), + ] + for path in paths: + self.assertTrue(os.path.isfile(path)) + self.assertEqual(('Ignore', None, 'org.fdroid.fdroid'), + fdroidserver.common.parse_androidmanifests(paths, app)) + def test_parse_androidmanifests_with_flavor(self): app = fdroidserver.metadata.App() build = fdroidserver.metadata.Build()