new subcommand "schedule_verify" to generate events for apps to verify

This commit is contained in:
Hans-Christoph Steiner 2024-06-06 16:51:34 +02:00
parent 80dfbad85b
commit 2fbd6f1a19
3 changed files with 275 additions and 0 deletions

111
tests/test_schedule_verify.py Executable file
View file

@ -0,0 +1,111 @@
#!/usr/bin/env python3
import json
import os
import unittest
from pathlib import Path
from unittest import mock, skipUnless
from fdroidserver import common, schedule_verify
from .shared_test_code import mkdtemp
basedir = Path(__file__).parent
FULL_LIST = [
{'applicationId': 'org.maxsdkversion', 'versionCode': 4},
{'applicationId': 'info.zwanenburg.caffeinetile', 'versionCode': 4},
{'applicationId': 'no.min.target.sdk', 'versionCode': 987},
{'applicationId': 'souch.smsbypass', 'versionCode': 9},
{'applicationId': 'duplicate.permisssions', 'versionCode': 9999999},
{'applicationId': 'com.politedroid', 'versionCode': 6},
{'applicationId': 'com.politedroid', 'versionCode': 5},
{'applicationId': 'com.politedroid', 'versionCode': 4},
{'applicationId': 'com.politedroid', 'versionCode': 3},
{'applicationId': 'obb.mainpatch.current', 'versionCode': 1619},
{'applicationId': 'info.guardianproject.urzip', 'versionCode': 100},
{'applicationId': 'obb.main.twoversions', 'versionCode': 1101617},
{'applicationId': 'fake.ota.update', 'versionCode': 1234},
{'applicationId': 'obb.main.twoversions', 'versionCode': 1101615},
{'applicationId': 'obb.main.twoversions', 'versionCode': 1101613},
{'applicationId': 'obb.main.oldversion', 'versionCode': 1444412523},
]
def _mock(repo): # pylint: disable=unused-argument
indexf = basedir / 'repo' / 'index-v2.json'
return json.loads(indexf.read_text()), None
class Schedule_verifyTest(unittest.TestCase):
def setUp(self):
self._td = mkdtemp()
self.testdir = self._td.name
os.chdir(self.testdir)
os.mkdir('unsigned')
def tearDown(self):
self._td.cleanup()
common.config = None
@skipUnless(False, 'This involves downloading the full index')
class Schedule_verify_main(Schedule_verifyTest):
def test_main_smokecheck(self):
schedule_verify.main()
class Schedule_verify_get_versions(Schedule_verifyTest):
def setUp(self):
super().setUp()
common.config = {'sdk_path': os.getenv('ANDROID_HOME')}
common.config['jarsigner'] = common.find_sdk_tools_cmd('jarsigner')
@mock.patch('fdroidserver.index.download_repo_index_v2', _mock)
def test_get_versions_none_exist(self):
self.assertEqual(FULL_LIST, schedule_verify.get_versions())
@mock.patch('fdroidserver.index.download_repo_index_v2', _mock)
def test_get_versions_all_json_exist(self):
for d in FULL_LIST:
appid = d['applicationId']
if appid == 'fake.ota.update':
ext = 'zip'
else:
ext = 'apk'
Path(f"unsigned/{appid}_{d['versionCode']}.{ext}.json").write_text('{}')
self.assertEqual([], schedule_verify.get_versions())
@mock.patch('fdroidserver.index.download_repo_index_v2', _mock)
def test_get_versions_all_apks_exist(self):
for d in FULL_LIST:
appid = d['applicationId']
if appid != 'fake.ota.update':
Path(f"unsigned/{appid}_{d['versionCode']}.apk.json").write_text('{}')
self.assertEqual(
[{'applicationId': 'fake.ota.update', 'versionCode': 1234}],
schedule_verify.get_versions(),
)
class Schedule_verify_get_scheduled(Schedule_verifyTest):
def setUp(self):
super().setUp()
os.chdir(basedir)
common.config = {'sdk_path': os.getenv('ANDROID_HOME')}
common.config['jarsigner'] = common.find_sdk_tools_cmd('jarsigner')
@mock.patch('fdroidserver.index.download_repo_index_v2', _mock)
def test_get_scheduled_none_exist(self):
versions = schedule_verify.get_versions(basedir / 'repo')
self.assertEqual(
[
{'applicationId': 'souch.smsbypass', 'versionCode': 9},
{'applicationId': 'com.politedroid', 'versionCode': 6},
{'applicationId': 'com.politedroid', 'versionCode': 5},
{'applicationId': 'com.politedroid', 'versionCode': 4},
{'applicationId': 'com.politedroid', 'versionCode': 3},
],
schedule_verify.get_scheduled(versions),
)