3 # http://www.drdobbs.com/testing/unit-testing-with-python/240165163
16 localmodule = os.path.realpath(
17 os.path.join(os.path.dirname(inspect.getfile(inspect.currentframe())), '..'))
18 print('localmodule: ' + localmodule)
19 if localmodule not in sys.path:
20 sys.path.insert(0, localmodule)
22 import fdroidserver.common
23 import fdroidserver.metadata
26 class MetadataTest(unittest.TestCase):
27 '''fdroidserver/metadata.py'''
29 def test_read_metadata(self):
31 def _build_yaml_representer(dumper, data):
32 '''Creates a YAML representation of a Build instance'''
33 return dumper.represent_dict(data)
35 testsdir = os.path.dirname(__file__)
40 # these need to be set to prevent code running on None, only
41 # 'accepted_formats' is actually used in metadata.py
43 config['sdk_path'] = '/opt/android-sdk'
44 config['ndk_paths'] = dict()
45 config['accepted_formats'] = ['json', 'txt', 'yml']
46 fdroidserver.common.config = config
48 apps = fdroidserver.metadata.read_metadata(xref=True)
49 for appid in ('org.smssecure.smssecure', 'org.adaway',
50 'org.videolan.vlc', 'com.politedroid'):
51 savepath = os.path.join('metadata', 'dump', appid + '.yaml')
52 frommeta = dict(apps[appid])
53 self.assertTrue(appid in apps)
54 with open(savepath, 'r') as f:
55 frompickle = yaml.load(f)
56 self.assertEqual(frommeta, frompickle)
57 # comment above assert and uncomment below to update test
58 # files when new metadata fields are added
59 # with open(savepath, 'w') as f:
60 # yaml.add_representer(fdroidserver.metadata.Build, _build_yaml_representer)
61 # yaml.dump(frommeta, f, default_flow_style=False)
63 def test_rewrite_yaml_fakeotaupdate(self):
65 # setup/reset test dir if necessary and setup params
66 tmpdir = os.path.join(os.path.dirname(__file__), '..', '.testfiles')
67 if not os.path.exists(tmpdir):
69 testdir = tempfile.mkdtemp(prefix='test_rewrite_metadata_', dir=tmpdir)
70 fdroidserver.common.config = {'accepted_formats': ['txt', 'yml']}
73 allapps = fdroidserver.metadata.read_metadata(xref=True)
74 for appid, app in allapps.items():
75 if appid == 'fake.ota.update':
76 fdroidserver.metadata.write_metadata(os.path.join(testdir, appid + '.yml'), app)
78 # assert rewrite result
79 with open(os.path.join(testdir, 'fake.ota.update.yml'), 'r', encoding='utf-8') as result:
80 with open('metadata-rewrite-yml/fake.ota.update.yml', 'r', encoding='utf-8') as orig:
82 self.assertEqual(result.read(), orig.read())
84 def test_rewrite_yaml_fdroidclient(self):
86 # setup/reset test dir if necessary and setup params
87 tmpdir = os.path.join(os.path.dirname(__file__), '..', '.testfiles')
88 if not os.path.exists(tmpdir):
90 testdir = tempfile.mkdtemp(prefix='test_rewrite_metadata_', dir=tmpdir)
91 fdroidserver.common.config = {'accepted_formats': ['txt', 'yml']}
94 allapps = fdroidserver.metadata.read_metadata(xref=True)
95 for appid, app in allapps.items():
96 if appid == 'org.fdroid.fdroid':
97 fdroidserver.metadata.write_metadata(os.path.join(testdir, appid + '.yml'), app)
99 # assert rewrite result
100 with open(os.path.join(testdir, 'org.fdroid.fdroid.yml'), 'r', encoding='utf-8') as result:
101 with open('metadata-rewrite-yml/org.fdroid.fdroid.yml', 'r', encoding='utf-8') as orig:
103 self.assertEqual(result.read(), orig.read())
105 def test_rewrite_yaml_special_build_params(self):
107 # setup/reset test dir if necessary and setup params
108 tmpdir = os.path.join(os.path.dirname(__file__), '..', '.testfiles')
109 if not os.path.exists(tmpdir):
111 testdir = tempfile.mkdtemp(prefix='test_rewrite_metadata_', dir=tmpdir)
112 fdroidserver.common.config = {'accepted_formats': ['txt', 'yml']}
115 allapps = fdroidserver.metadata.read_metadata(xref=True)
116 for appid, app in allapps.items():
117 if appid == 'app.with.special.build.params':
118 fdroidserver.metadata.write_metadata(os.path.join(testdir, appid + '.yml'), app)
120 # assert rewrite result
121 with open(os.path.join(testdir, 'app.with.special.build.params.yml'), 'r', encoding='utf-8') as result:
122 with open('metadata-rewrite-yml/app.with.special.build.params.yml', 'r', encoding='utf-8') as orig:
124 self.assertEqual(result.read(), orig.read())
126 def test_read_metadata_sort_by_time(self):
127 # setup/reset test dir if necessary and setup params
128 testbasedir = os.path.dirname(__file__)
129 tmpdir = os.path.join(testbasedir, '..', '.testfiles')
130 if not os.path.exists(tmpdir):
132 testdir = tempfile.mkdtemp(prefix='test_read_metadata_sort_by_time_', dir=tmpdir)
133 metadatadir = os.path.join(testdir, 'metadata')
134 os.makedirs(metadatadir)
135 fdroidserver.common.config = {'accepted_formats': ['txt']}
138 randomapps = glob.glob(os.path.join(testbasedir, 'metadata', '*.txt'))
139 random.shuffle(randomapps)
142 shutil.copy(f, metadatadir)
143 new = os.path.join(metadatadir, os.path.basename(f))
145 os.utime(new, (stat.st_ctime, stat.st_mtime + i))
146 # prepend new item so newest is always first
147 randomlist = [os.path.basename(f)[:-4]] + randomlist
150 allapps = fdroidserver.metadata.read_metadata(xref=True, sort_by_time=True)
152 for appid, app in allapps.items():
153 allappids.append(appid)
154 self.assertEqual(randomlist, allappids)
157 if __name__ == "__main__":
158 parser = optparse.OptionParser()
159 parser.add_option("-v", "--verbose", action="store_true", default=False,
160 help="Spew out even more information than normal")
161 (fdroidserver.common.options, args) = parser.parse_args(['--verbose'])
163 newSuite = unittest.TestSuite()
164 newSuite.addTest(unittest.makeSuite(MetadataTest))
165 unittest.main(failfast=False)