diff --git a/fdroidserver/scanner.py b/fdroidserver/scanner.py index 9aeb0f20..05b9c2b8 100644 --- a/fdroidserver/scanner.py +++ b/fdroidserver/scanner.py @@ -550,7 +550,7 @@ def main(): appids = [] for apk in options.appid: if os.path.isfile(apk): - count = scan_binary(apk, exodus) + count = scanner.scan_binary(apk, exodus) if count > 0: logging.warning( _('Scanner found {count} problems in {apk}:').format( @@ -565,6 +565,7 @@ def main(): return # Read all app and srclib metadata + allapps = metadata.read_metadata() apps = common.read_app_args(appids, allapps, True) diff --git a/tests/scanner.TestCase b/tests/scanner.TestCase index d074150f..2e5f6305 100755 --- a/tests/scanner.TestCase +++ b/tests/scanner.TestCase @@ -13,6 +13,8 @@ import textwrap import unittest import uuid import yaml +import collections +import pathlib from unittest import mock localmodule = os.path.realpath( @@ -26,6 +28,7 @@ import fdroidserver.build import fdroidserver.common import fdroidserver.metadata import fdroidserver.scanner +from testcommon import TmpCwd class ScannerTest(unittest.TestCase): @@ -431,6 +434,52 @@ class Test_load_exodus_trackers_signatures(unittest.TestCase): self.assertEqual(result_regex, "mocked return value") +class Test_main(unittest.TestCase): + + def setUp(self): + self.args = ["com.example.app", "local/additional.apk", "another.apk"] + self.exit_func = mock.Mock() + self.read_app_args_func = mock.Mock(return_value={}) + self.scan_binary_func = mock.Mock(return_value=0) + + def test_parsing_appid(self): + """ + This test verifies that app id get parsed correctly + (doesn't test how they get processed) + """ + self.args = ["com.example.app"] + with tempfile.TemporaryDirectory() as tmpdir, TmpCwd(tmpdir), mock.patch( + "sys.exit", self.exit_func + ), mock.patch("sys.argv", ["fdroid scanner", *self.args]), mock.patch( + "fdroidserver.common.read_app_args", self.read_app_args_func + ), mock.patch("fdroidserver.scanner.scan_binary", self.scan_binary_func): + fdroidserver.scanner.main() + + self.exit_func.assert_not_called() + self.read_app_args_func.assert_called_once_with( + ['com.example.app'], collections.OrderedDict(), True + ) + self.scan_binary_func.assert_not_called() + + def test_parsing_apkpath(self): + """ + This test verifies that apk paths get parsed correctly + (doesn't test how they get processed) + """ + self.args = ["local.application.apk"] + with tempfile.TemporaryDirectory() as tmpdir, TmpCwd(tmpdir), mock.patch( + "sys.exit", self.exit_func + ), mock.patch("sys.argv", ["fdroid scanner", *self.args]), mock.patch( + "fdroidserver.common.read_app_args", self.read_app_args_func + ), mock.patch("fdroidserver.scanner.scan_binary", self.scan_binary_func): + pathlib.Path(self.args[0]).touch() + fdroidserver.scanner.main() + + self.exit_func.assert_not_called() + self.read_app_args_func.assert_not_called() + self.scan_binary_func.assert_called_once_with('local.application.apk', []) + + if __name__ == "__main__": os.chdir(os.path.dirname(__file__)) @@ -450,5 +499,6 @@ if __name__ == "__main__": unittest.makeSuite(Test_scan_binary), unittest.makeSuite(Test__exodus_compile_signatures), unittest.makeSuite(Test_load_exodus_trackers_signatures), + unittest.makeSuite(Test_main), ]) unittest.main(failfast=False)