summaryrefslogtreecommitdiff
path: root/wrappers/python/test_discovery.py
blob: 369fdcb9cbb038592ac9e35a2c55d9b420f66f29 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
#!/usr/bin/env python3

import unittest
import discovery

test_data_dir = "../../test_data"


def read_bytes(path: str) -> bytes:
    with open(path, "rb") as f:
        return f.read()


class VerifyTests(unittest.TestCase):
    @classmethod
    def setUpClass(cls) -> None:
        with open(f"{test_data_dir}/dummy/public.key") as f:
            discovery._insecure_testing_set_extra_key(f.readlines()[-1][:-1])

    def testValid(self):
        discovery.verify(
            read_bytes(f"{test_data_dir}/dummy/server_list.json.minisig"),
            read_bytes(f"{test_data_dir}/dummy/server_list.json"),
            "server_list.json",
            0
        )

    def testValidMemoryView(self):
        discovery.verify(
            memoryview(b"abc" + read_bytes(f"{test_data_dir}/dummy/server_list.json.minisig") + b"abc")[3:-3],
            read_bytes(f"{test_data_dir}/dummy/server_list.json"),
            "server_list.json",
            0
        )

    def testInvalidSignature(self):
        with self.assertRaises(discovery.VerifyError) as ctx:
            discovery.verify(
                read_bytes(f"{test_data_dir}/dummy/random.txt"),
                read_bytes(f"{test_data_dir}/dummy/server_list.json"),
                "server_list.json",
                0
            )
        self.assertEqual(ctx.exception.code, discovery.VerifyErrorCode.ErrInvalidSignature)

    def testWrongKey(self):
        with self.assertRaises(discovery.VerifyError) as ctx:
            discovery.verify(
                read_bytes(f"{test_data_dir}/dummy/server_list.json.wrong_key.minisig"),
                read_bytes(f"{test_data_dir}/dummy/server_list.json"),
                "server_list.json",
                0
            )
        self.assertEqual(ctx.exception.code, discovery.VerifyErrorCode.ErrInvalidSignatureUnknownKey)

    def testOldSignature(self):
        with self.assertRaises(discovery.VerifyError) as ctx:
            discovery.verify(
                read_bytes(f"{test_data_dir}/dummy/server_list.json.minisig"),
                read_bytes(f"{test_data_dir}/dummy/server_list.json"),
                "server_list.json",
                1 << 31
            )
        self.assertEqual(ctx.exception.code, discovery.VerifyErrorCode.ErrTooOld)

    def TestUnknownExpectedFile(self):
        with self.assertRaises(discovery.VerifyError) as ctx:
            discovery.verify(
                read_bytes(f"{test_data_dir}/dummy/other_list.json.minisig"),
                read_bytes(f"{test_data_dir}/dummy/other_list.json"),
                "other_list.json",
                0
            )
        self.assertEqual(ctx.exception.code, discovery.VerifyErrorCode.ErrUnknownExpectedFileName)


if __name__ == "__main__":
    unittest.main()