mirror of
https://gitlab.com/fdroid/fdroidserver.git
synced 2024-11-16 20:00:11 +01:00
18f3acc32e
There is no longer any reason for these to be intertwined. This deliberately avoids touching some files as much as possible because they are super tangled and due to be replaced. Those files are: * fdroidserver/build.py * fdroidserver/update.py # Conflicts: # tests/testcommon.py # Conflicts: # fdroidserver/btlog.py # fdroidserver/import_subcommand.py
281 lines
8.6 KiB
Python
Executable File
281 lines
8.6 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
|
|
import logging
|
|
import os
|
|
import sys
|
|
import unittest
|
|
import tempfile
|
|
import textwrap
|
|
from pathlib import Path
|
|
|
|
localmodule = Path(__file__).resolve().parent.parent
|
|
print('localmodule: ' + str(localmodule))
|
|
if localmodule not in sys.path:
|
|
sys.path.insert(0, str(localmodule))
|
|
|
|
from fdroidserver import common, metadata, rewritemeta
|
|
from testcommon import TmpCwd, mkdtemp
|
|
|
|
|
|
class RewriteMetaTest(unittest.TestCase):
|
|
'''fdroidserver/publish.py'''
|
|
|
|
def setUp(self):
|
|
logging.basicConfig(level=logging.DEBUG)
|
|
self.basedir = localmodule / 'tests'
|
|
os.chdir(self.basedir)
|
|
metadata.warnings_action = 'error'
|
|
self._td = mkdtemp()
|
|
self.testdir = self._td.name
|
|
|
|
def tearDown(self):
|
|
self._td.cleanup()
|
|
|
|
def test_remove_blank_flags_from_builds_com_politedroid_3(self):
|
|
"""Unset fields in Builds: entries should be removed."""
|
|
appid = 'com.politedroid'
|
|
app = metadata.read_metadata({appid: -1})[appid]
|
|
builds = rewritemeta.remove_blank_flags_from_builds(app.get('Builds'))
|
|
self.assertEqual(
|
|
builds[0],
|
|
{
|
|
'versionName': '1.2',
|
|
'versionCode': 3,
|
|
'commit': '6a548e4b19',
|
|
'target': 'android-10',
|
|
'antifeatures': {
|
|
'KnownVuln': {},
|
|
'UpstreamNonFree': {},
|
|
'NonFreeAssets': {},
|
|
},
|
|
},
|
|
)
|
|
|
|
def test_remove_blank_flags_from_builds_com_politedroid_4(self):
|
|
"""Unset fields in Builds: entries should be removed."""
|
|
appid = 'com.politedroid'
|
|
app = metadata.read_metadata({appid: -1})[appid]
|
|
builds = rewritemeta.remove_blank_flags_from_builds(app.get('Builds'))
|
|
self.assertEqual(
|
|
builds[1],
|
|
{
|
|
'versionName': '1.3',
|
|
'versionCode': 4,
|
|
'commit': 'ad865b57bf3ac59580f38485608a9b1dda4fa7dc',
|
|
'target': 'android-15',
|
|
},
|
|
)
|
|
|
|
def test_remove_blank_flags_from_builds_org_adaway_52(self):
|
|
"""Unset fields in Builds: entries should be removed."""
|
|
appid = 'org.adaway'
|
|
app = metadata.read_metadata({appid: -1})[appid]
|
|
builds = rewritemeta.remove_blank_flags_from_builds(app.get('Builds'))
|
|
self.assertEqual(
|
|
builds[-1],
|
|
{
|
|
'buildjni': ['yes'],
|
|
'commit': 'v3.0',
|
|
'gradle': ['yes'],
|
|
'preassemble': ['renameExecutables'],
|
|
'subdir': 'AdAway',
|
|
'versionCode': 52,
|
|
'versionName': '3.0',
|
|
},
|
|
)
|
|
|
|
def test_remove_blank_flags_from_builds_no_builds(self):
|
|
"""Unset fields in Builds: entries should be removed."""
|
|
self.assertEqual(
|
|
rewritemeta.remove_blank_flags_from_builds(None),
|
|
list(),
|
|
)
|
|
self.assertEqual(
|
|
rewritemeta.remove_blank_flags_from_builds(dict()),
|
|
list(),
|
|
)
|
|
self.assertEqual(
|
|
rewritemeta.remove_blank_flags_from_builds(list()),
|
|
list(),
|
|
)
|
|
self.assertEqual(
|
|
rewritemeta.remove_blank_flags_from_builds(set()),
|
|
list(),
|
|
)
|
|
self.assertEqual(
|
|
rewritemeta.remove_blank_flags_from_builds(tuple()),
|
|
list(),
|
|
)
|
|
|
|
def test_remove_blank_flags_from_builds_0_is_a_value(self):
|
|
self.assertEqual(
|
|
rewritemeta.remove_blank_flags_from_builds([{'versionCode': 0}]),
|
|
[{'versionCode': 0}],
|
|
)
|
|
|
|
def test_remove_blank_flags_from_builds_values_to_purge(self):
|
|
self.assertEqual(
|
|
rewritemeta.remove_blank_flags_from_builds(
|
|
[
|
|
{
|
|
'antifeatures': dict(),
|
|
'forceversion': False,
|
|
'init': None,
|
|
'rm': '',
|
|
'scandelete': list(),
|
|
'versionCode': 0,
|
|
},
|
|
{'antifeatures': list(), 'versionCode': 1},
|
|
{'antifeatures': '', 'versionCode': 2},
|
|
]
|
|
),
|
|
[{'versionCode': 0}, {'versionCode': 1}, {'versionCode': 2}],
|
|
)
|
|
|
|
def test_rewrite_no_builds(self):
|
|
os.chdir(self.testdir)
|
|
Path('metadata').mkdir()
|
|
with Path('metadata/a.yml').open('w') as f:
|
|
f.write('AutoName: a')
|
|
rewritemeta.main()
|
|
self.assertEqual(
|
|
Path('metadata/a.yml').read_text(encoding='utf-8'),
|
|
textwrap.dedent(
|
|
'''\
|
|
License: Unknown
|
|
|
|
AutoName: a
|
|
|
|
AutoUpdateMode: None
|
|
UpdateCheckMode: None
|
|
'''
|
|
),
|
|
)
|
|
|
|
def test_rewrite_empty_build_field(self):
|
|
os.chdir(self.testdir)
|
|
Path('metadata').mkdir()
|
|
with Path('metadata/a.yml').open('w') as fp:
|
|
fp.write(
|
|
textwrap.dedent(
|
|
"""
|
|
License: Apache-2.0
|
|
Builds:
|
|
- versionCode: 4
|
|
versionName: a
|
|
rm:
|
|
"""
|
|
)
|
|
)
|
|
rewritemeta.main()
|
|
self.assertEqual(
|
|
Path('metadata/a.yml').read_text(encoding='utf-8'),
|
|
textwrap.dedent(
|
|
'''\
|
|
License: Apache-2.0
|
|
|
|
Builds:
|
|
- versionName: a
|
|
versionCode: 4
|
|
|
|
AutoUpdateMode: None
|
|
UpdateCheckMode: None
|
|
'''
|
|
),
|
|
)
|
|
|
|
def test_remove_blank_flags_from_builds_app_with_special_build_params(self):
|
|
appid = 'app.with.special.build.params'
|
|
app = metadata.read_metadata({appid: -1})[appid]
|
|
builds = rewritemeta.remove_blank_flags_from_builds(app.get('Builds'))
|
|
self.assertEqual(
|
|
builds[-1],
|
|
{
|
|
'versionName': '2.1.2',
|
|
'versionCode': 51,
|
|
'disable': 'Labelled as pre-release, so skipped',
|
|
},
|
|
)
|
|
|
|
def test_remove_blank_flags_from_builds_app_with_special_build_params_af(self):
|
|
"""Unset fields in Builds: entries should be removed."""
|
|
appid = 'app.with.special.build.params'
|
|
app = metadata.read_metadata({appid: -1})[appid]
|
|
builds = rewritemeta.remove_blank_flags_from_builds(app.get('Builds'))
|
|
self.assertEqual(
|
|
builds[-2],
|
|
{
|
|
'antifeatures': {
|
|
'Ads': {'en-US': 'includes ad lib\n', 'zh-CN': '包括广告图书馆\n'},
|
|
'Tracking': {'en-US': 'standard suspects\n'},
|
|
},
|
|
'commit': '2.1.1',
|
|
'maven': '2',
|
|
'patch': [
|
|
'manifest-ads.patch',
|
|
'mobilecore.patch',
|
|
],
|
|
'srclibs': ['FacebookSDK@sdk-version-3.0.2'],
|
|
'versionCode': 50,
|
|
'versionName': '2.1.1-c',
|
|
},
|
|
)
|
|
|
|
def test_rewrite_scenario_trivial(self):
|
|
sys.argv = ['rewritemeta', 'a', 'b']
|
|
|
|
with tempfile.TemporaryDirectory() as tmpdir, TmpCwd(tmpdir):
|
|
Path('metadata').mkdir()
|
|
with Path('metadata/a.yml').open('w') as f:
|
|
f.write('AutoName: a')
|
|
with Path('metadata/b.yml').open('w') as f:
|
|
f.write('AutoName: b')
|
|
|
|
rewritemeta.main()
|
|
|
|
self.assertEqual(
|
|
Path('metadata/a.yml').read_text(encoding='utf-8'),
|
|
textwrap.dedent(
|
|
'''\
|
|
License: Unknown
|
|
|
|
AutoName: a
|
|
|
|
AutoUpdateMode: None
|
|
UpdateCheckMode: None
|
|
'''
|
|
),
|
|
)
|
|
|
|
self.assertEqual(
|
|
Path('metadata/b.yml').read_text(encoding='utf-8'),
|
|
textwrap.dedent(
|
|
'''\
|
|
License: Unknown
|
|
|
|
AutoName: b
|
|
|
|
AutoUpdateMode: None
|
|
UpdateCheckMode: None
|
|
'''
|
|
),
|
|
)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
import argparse
|
|
|
|
parser = argparse.ArgumentParser()
|
|
parser.add_argument(
|
|
"-v",
|
|
"--verbose",
|
|
action="store_true",
|
|
default=False,
|
|
help="Spew out even more information than normal",
|
|
)
|
|
common.options = common.parse_args(parser)
|
|
|
|
newSuite = unittest.TestSuite()
|
|
newSuite.addTest(unittest.makeSuite(RewriteMetaTest))
|
|
unittest.main(failfast=False)
|