scanner: add refresh_config config item for buildserver

Includes some cosmetic changes from black.
This commit is contained in:
Hans-Christoph Steiner 2024-01-25 15:37:46 +01:00
parent 907dfd1c3c
commit 031a130395
3 changed files with 41 additions and 4 deletions

View File

@ -373,3 +373,9 @@
# - suss
# - exodus
# - https://example.com/signatures.json
# The scanner can use signature sources from the internet. These are
# cached locally. To force them to be refreshed from the network on
# every run, set this to true:
#
# refresh_scanner: true

View File

@ -325,15 +325,15 @@ class SUSSDataController(SignatureDataController):
self.set_data(json.loads(SUSS_DEFAULT))
class ScannerTool():
class ScannerTool:
def __init__(self):
# we could add support for loading additional signature source
# definitions from config.yml here
self.scanner_data_lookup()
if options and options.refresh_scanner:
config = common.get_config()
if (options and options.refresh_scanner) or config.get('refresh_scanner'):
self.refresh()
self.load()

View File

@ -704,6 +704,20 @@ class Test_SignatureDataController(unittest.TestCase):
class Test_ScannerTool(unittest.TestCase):
def setUp(self):
fdroidserver.common.options = None
fdroidserver.common.config = None
self.basedir = os.path.join(localmodule, 'tests')
os.chdir(self.basedir)
self._td = mkdtemp()
self.testdir = self._td.name
def tearDown(self):
fdroidserver.common.options = None
fdroidserver.common.config = None
os.chdir(self.basedir)
self._td.cleanup()
def test_load(self):
st = mock.Mock()
st.sdcs = [mock.Mock(), mock.Mock()]
@ -711,7 +725,8 @@ class Test_ScannerTool(unittest.TestCase):
st.sdcs[0].load.assert_called_once_with()
st.sdcs[1].load.assert_called_once_with()
def test_refresh_default(self):
def test_refresh_no_options_or_config(self):
"""This simulates what happens when running something like scan_source()"""
with mock.patch('fdroidserver.scanner.ScannerTool.refresh') as refresh:
fdroidserver.scanner.ScannerTool()
refresh.assert_not_called()
@ -730,6 +745,22 @@ class Test_ScannerTool(unittest.TestCase):
fdroidserver.scanner.ScannerTool()
refresh.assert_not_called()
def test_refresh_from_config(self):
os.chdir(self.testdir)
pathlib.Path('config.yml').write_text('refresh_scanner: true')
with mock.patch('fdroidserver.scanner.ScannerTool.refresh') as refresh:
fdroidserver.scanner.ScannerTool()
refresh.assert_called_once()
def test_refresh_options_overrides_config(self):
fdroidserver.scanner.options = mock.Mock()
fdroidserver.scanner.options.refresh_scanner = True
os.chdir(self.testdir)
pathlib.Path('config.yml').write_text('refresh_scanner: false')
with mock.patch('fdroidserver.scanner.ScannerTool.refresh') as refresh:
fdroidserver.scanner.ScannerTool()
refresh.assert_called_once()
class Test_main(unittest.TestCase):
def setUp(self):