chiark / gitweb /
Merge branch 'index-parsing' into 'master'
[fdroidserver.git] / tests / index.TestCase
1 #!/usr/bin/env python3
2 import optparse
3 import os
4 import unittest
5 import zipfile
6
7 import fdroidserver.common
8 import fdroidserver.index
9 import fdroidserver.signindex
10
11
12 class IndexTest(unittest.TestCase):
13
14     def setUp(self):
15         fdroidserver.common.config = None
16         config = fdroidserver.common.read_config(fdroidserver.common.options)
17         config['jarsigner'] = fdroidserver.common.find_sdk_tools_cmd('jarsigner')
18         fdroidserver.common.config = config
19         fdroidserver.signindex.config = config
20
21     @staticmethod
22     def test_verify_jar_signature_succeeds():
23         basedir = os.path.dirname(__file__)
24         source_dir = os.path.join(basedir, 'signindex')
25         for f in ('testy.jar', 'guardianproject.jar'):
26             testfile = os.path.join(source_dir, f)
27             fdroidserver.index.verify_jar_signature(testfile)
28
29     def test_verify_jar_signature_fails(self):
30         basedir = os.path.dirname(__file__)
31         source_dir = os.path.join(basedir, 'signindex')
32         testfile = os.path.join(source_dir, 'unsigned.jar')
33         with self.assertRaises(fdroidserver.index.VerificationException):
34             fdroidserver.index.verify_jar_signature(testfile)
35
36     def test_get_public_key_from_jar_succeeds(self):
37         basedir = os.path.dirname(__file__)
38         source_dir = os.path.join(basedir, 'signindex')
39         for f in ('testy.jar', 'guardianproject.jar'):
40             testfile = os.path.join(source_dir, f)
41             jar = zipfile.ZipFile(testfile)
42             _, fingerprint = fdroidserver.index.get_public_key_from_jar(jar)
43             # comparing fingerprints should be sufficient
44             if f == 'testy.jar':
45                 self.assertTrue(fingerprint ==
46                                 '818E469465F96B704E27BE2FEE4C63AB' +
47                                 '9F83DDF30E7A34C7371A4728D83B0BC1')
48             if f == 'guardianproject.jar':
49                 self.assertTrue(fingerprint ==
50                                 'B7C2EEFD8DAC7806AF67DFCD92EB1812' +
51                                 '6BC08312A7F2D6F3862E46013C7A6135')
52
53     def test_get_public_key_from_jar_fails(self):
54         basedir = os.path.dirname(__file__)
55         source_dir = os.path.join(basedir, 'signindex')
56         testfile = os.path.join(source_dir, 'unsigned.jar')
57         jar = zipfile.ZipFile(testfile)
58         with self.assertRaises(fdroidserver.index.VerificationException):
59             fdroidserver.index.get_public_key_from_jar(jar)
60
61     def test_download_repo_index_no_fingerprint(self):
62         with self.assertRaises(fdroidserver.index.VerificationException):
63             fdroidserver.index.download_repo_index("http://example.org")
64
65     def test_download_repo_index_no_jar(self):
66         with self.assertRaises(zipfile.BadZipFile):
67             fdroidserver.index.download_repo_index("http://example.org?fingerprint=nope")
68
69     # TODO test_download_repo_index with an actual repository
70
71
72 if __name__ == "__main__":
73     parser = optparse.OptionParser()
74     parser.add_option("-v", "--verbose", action="store_true", default=False,
75                       help="Spew out even more information than normal")
76     (fdroidserver.common.options, args) = parser.parse_args(['--verbose'])
77
78     newSuite = unittest.TestSuite()
79     newSuite.addTest(unittest.makeSuite(IndexTest))
80     unittest.main()