mirror of
				https://github.com/f-droid/fdroidserver.git
				synced 2025-11-04 06:30:27 +03:00 
			
		
		
		
	
		
			
				
	
	
		
			111 lines
		
	
	
	
		
			4.1 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable file
		
	
	
	
	
			
		
		
	
	
			111 lines
		
	
	
	
		
			4.1 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable file
		
	
	
	
	
#!/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),
 | 
						|
        )
 |