mirror of
https://gitlab.com/fdroid/fdroidserver.git
synced 2024-11-09 08:50:11 +01:00
df99c85ca6
For cases like the OpenVPN vuln that was recently announced, it is useful for fdroiddata maintainers to be able to mark builds that have known vulnerabilities.
133 lines
5.4 KiB
Python
Executable File
133 lines
5.4 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
|
|
# http://www.drdobbs.com/testing/unit-testing-with-python/240165163
|
|
|
|
import inspect
|
|
import optparse
|
|
import os
|
|
import sys
|
|
import unittest
|
|
import yaml
|
|
import tempfile
|
|
|
|
localmodule = os.path.realpath(
|
|
os.path.join(os.path.dirname(inspect.getfile(inspect.currentframe())), '..'))
|
|
print('localmodule: ' + localmodule)
|
|
if localmodule not in sys.path:
|
|
sys.path.insert(0, localmodule)
|
|
|
|
import fdroidserver.common
|
|
import fdroidserver.metadata
|
|
|
|
|
|
class MetadataTest(unittest.TestCase):
|
|
'''fdroidserver/metadata.py'''
|
|
|
|
def test_read_metadata(self):
|
|
|
|
def _build_yaml_representer(dumper, data):
|
|
'''Creates a YAML representation of a Build instance'''
|
|
return dumper.represent_dict(data)
|
|
|
|
testsdir = os.path.dirname(__file__)
|
|
os.chdir(testsdir)
|
|
|
|
self.maxDiff = None
|
|
|
|
# these need to be set to prevent code running on None, only
|
|
# 'accepted_formats' is actually used in metadata.py
|
|
config = dict()
|
|
config['sdk_path'] = '/opt/android-sdk'
|
|
config['ndk_paths'] = dict()
|
|
config['accepted_formats'] = ['json', 'txt', 'yml']
|
|
fdroidserver.common.config = config
|
|
|
|
apps = fdroidserver.metadata.read_metadata(xref=True)
|
|
for appid in ('org.smssecure.smssecure', 'org.adaway',
|
|
'org.videolan.vlc', 'com.politedroid'):
|
|
savepath = os.path.join('metadata', 'dump', appid + '.yaml')
|
|
frommeta = dict(apps[appid])
|
|
self.assertTrue(appid in apps)
|
|
with open(savepath, 'r') as f:
|
|
frompickle = yaml.load(f)
|
|
self.assertEqual(frommeta, frompickle)
|
|
# comment above assert and uncomment below to update test
|
|
# files when new metadata fields are added
|
|
# with open(savepath, 'w') as f:
|
|
# yaml.add_representer(fdroidserver.metadata.Build, _build_yaml_representer)
|
|
# yaml.dump(frommeta, f, default_flow_style=False)
|
|
|
|
def test_rewrite_yaml_fakeotaupdate(self):
|
|
|
|
# setup/reset test dir if necessary and setup params
|
|
tmpdir = os.path.join(os.path.dirname(__file__), '..', '.testfiles')
|
|
if not os.path.exists(tmpdir):
|
|
os.makedirs(tmpdir)
|
|
testdir = tempfile.mkdtemp(prefix='test_rewrite_metadata_', dir=tmpdir)
|
|
fdroidserver.common.config = {'accepted_formats': ['txt', 'yml']}
|
|
|
|
# rewrite metadata
|
|
allapps = fdroidserver.metadata.read_metadata(xref=True)
|
|
for appid, app in allapps.items():
|
|
if appid == 'fake.ota.update':
|
|
fdroidserver.metadata.write_metadata(os.path.join(testdir, appid + '.yml'), app)
|
|
|
|
# assert rewrite result
|
|
with open(os.path.join(testdir, 'fake.ota.update.yml'), 'r', encoding='utf-8') as result:
|
|
with open('metadata-rewrite-yml/fake.ota.update.yml', 'r', encoding='utf-8') as orig:
|
|
self.maxDiff = None
|
|
self.assertEqual(result.read(), orig.read())
|
|
|
|
def test_rewrite_yaml_fdroidclient(self):
|
|
|
|
# setup/reset test dir if necessary and setup params
|
|
tmpdir = os.path.join(os.path.dirname(__file__), '..', '.testfiles')
|
|
if not os.path.exists(tmpdir):
|
|
os.makedirs(tmpdir)
|
|
testdir = tempfile.mkdtemp(prefix='test_rewrite_metadata_', dir=tmpdir)
|
|
fdroidserver.common.config = {'accepted_formats': ['txt', 'yml']}
|
|
|
|
# rewrite metadata
|
|
allapps = fdroidserver.metadata.read_metadata(xref=True)
|
|
for appid, app in allapps.items():
|
|
if appid == 'org.fdroid.fdroid':
|
|
fdroidserver.metadata.write_metadata(os.path.join(testdir, appid + '.yml'), app)
|
|
|
|
# assert rewrite result
|
|
with open(os.path.join(testdir, 'org.fdroid.fdroid.yml'), 'r', encoding='utf-8') as result:
|
|
with open('metadata-rewrite-yml/org.fdroid.fdroid.yml', 'r', encoding='utf-8') as orig:
|
|
self.maxDiff = None
|
|
self.assertEqual(result.read(), orig.read())
|
|
|
|
def test_rewrite_yaml_special_build_params(self):
|
|
|
|
# setup/reset test dir if necessary and setup params
|
|
tmpdir = os.path.join(os.path.dirname(__file__), '..', '.testfiles')
|
|
if not os.path.exists(tmpdir):
|
|
os.makedirs(tmpdir)
|
|
testdir = tempfile.mkdtemp(prefix='test_rewrite_metadata_', dir=tmpdir)
|
|
fdroidserver.common.config = {'accepted_formats': ['txt', 'yml']}
|
|
|
|
# rewrite metadata
|
|
allapps = fdroidserver.metadata.read_metadata(xref=True)
|
|
for appid, app in allapps.items():
|
|
if appid == 'app.with.special.build.params':
|
|
fdroidserver.metadata.write_metadata(os.path.join(testdir, appid + '.yml'), app)
|
|
|
|
# assert rewrite result
|
|
with open(os.path.join(testdir, 'app.with.special.build.params.yml'), 'r', encoding='utf-8') as result:
|
|
with open('metadata-rewrite-yml/app.with.special.build.params.yml', 'r', encoding='utf-8') as orig:
|
|
self.maxDiff = None
|
|
self.assertEqual(result.read(), orig.read())
|
|
|
|
|
|
if __name__ == "__main__":
|
|
parser = optparse.OptionParser()
|
|
parser.add_option("-v", "--verbose", action="store_true", default=False,
|
|
help="Spew out even more information than normal")
|
|
(fdroidserver.common.options, args) = parser.parse_args(['--verbose'])
|
|
|
|
newSuite = unittest.TestSuite()
|
|
newSuite.addTest(unittest.makeSuite(MetadataTest))
|
|
unittest.main()
|