mirror of
https://github.com/f-droid/fdroidserver.git
synced 2025-11-04 22:40:29 +03:00
Merge branch 'ingore-checks-test' into 'master'
Ingore checks test See merge request fdroid/fdroidserver!660
This commit is contained in:
commit
8cfeeab409
3 changed files with 125 additions and 5 deletions
|
|
@ -85,9 +85,13 @@ def check_http(app):
|
||||||
raise FDroidException("No RE match for version")
|
raise FDroidException("No RE match for version")
|
||||||
version = m.group(1)
|
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 (version, vercode)
|
||||||
return (None, ("Version {version} is ignored").format(version=version))
|
|
||||||
except FDroidException:
|
except FDroidException:
|
||||||
msg = "Could not complete http check for app {0} due to unknown error: {1}".format(app.id, traceback.format_exc())
|
msg = "Could not complete http check for app {0} due to unknown error: {1}".format(app.id, traceback.format_exc())
|
||||||
return (None, msg)
|
return (None, msg)
|
||||||
|
|
@ -454,7 +458,7 @@ def checkupdates_app(app):
|
||||||
if noverok:
|
if noverok:
|
||||||
logging.info(logmsg)
|
logging.info(logmsg)
|
||||||
else:
|
else:
|
||||||
logging.warn(logmsg)
|
logging.warning(logmsg)
|
||||||
elif vercode == app.CurrentVersionCode:
|
elif vercode == app.CurrentVersionCode:
|
||||||
logging.info("...up to date")
|
logging.info("...up to date")
|
||||||
else:
|
else:
|
||||||
|
|
@ -475,7 +479,7 @@ def checkupdates_app(app):
|
||||||
if options.auto:
|
if options.auto:
|
||||||
mode = app.AutoUpdateMode
|
mode = app.AutoUpdateMode
|
||||||
if not app.CurrentVersionCode:
|
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'):
|
elif mode in ('None', 'Static'):
|
||||||
pass
|
pass
|
||||||
elif mode.startswith('Version '):
|
elif mode.startswith('Version '):
|
||||||
|
|
@ -512,7 +516,7 @@ def checkupdates_app(app):
|
||||||
ver = common.getcvname(app)
|
ver = common.getcvname(app)
|
||||||
commitmsg = "Update %s to %s" % (name, ver)
|
commitmsg = "Update %s to %s" % (name, ver)
|
||||||
else:
|
else:
|
||||||
logging.warn('Invalid auto update mode "' + mode + '" on ' + app.id)
|
logging.warning('Invalid auto update mode "' + mode + '" on ' + app.id)
|
||||||
|
|
||||||
if commitmsg:
|
if commitmsg:
|
||||||
metadata.write_metadata(app.metadatapath, app)
|
metadata.write_metadata(app.metadatapath, app)
|
||||||
|
|
|
||||||
103
tests/checkupdates.TestCase
Executable file
103
tests/checkupdates.TestCase
Executable file
|
|
@ -0,0 +1,103 @@
|
||||||
|
#!/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)
|
||||||
|
|
||||||
|
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(.*)'
|
||||||
|
app.UpdateCheckIgnore = 'beta'
|
||||||
|
|
||||||
|
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')
|
||||||
|
|
||||||
|
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__))
|
||||||
|
|
||||||
|
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)
|
||||||
|
|
@ -806,6 +806,19 @@ class CommonTest(unittest.TestCase):
|
||||||
self.assertEqual(('0.94-test', '940', 'org.fdroid.fdroid'),
|
self.assertEqual(('0.94-test', '940', 'org.fdroid.fdroid'),
|
||||||
fdroidserver.common.parse_androidmanifests(paths, app))
|
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):
|
def test_parse_androidmanifests_with_flavor(self):
|
||||||
app = fdroidserver.metadata.App()
|
app = fdroidserver.metadata.App()
|
||||||
build = fdroidserver.metadata.Build()
|
build = fdroidserver.metadata.Build()
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue