aboutsummaryrefslogtreecommitdiff
path: root/python/tests/group_session_test.py
blob: b45fbb62eb19069cc3336927eb02b23f6ca91fa5 (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
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
# -*- coding: utf-8 -*-

from builtins import bytes

import pytest

from olm import InboundGroupSession, OlmGroupSessionError, OutboundGroupSession


class TestClass(object):
    def test_session_create(self):
        OutboundGroupSession()

    def test_session_id(self):
        session = OutboundGroupSession()
        assert isinstance(session.id, str)

    def test_session_index(self):
        session = OutboundGroupSession()
        assert isinstance(session.message_index, int)
        assert session.message_index == 0

    def test_outbound_pickle(self):
        session = OutboundGroupSession()
        pickle = session.pickle()

        assert (session.id == OutboundGroupSession.from_pickle(
            pickle).id)

    def test_invalid_unpickle(self):
        with pytest.raises(ValueError):
            OutboundGroupSession.from_pickle(b"")

        with pytest.raises(ValueError):
            InboundGroupSession.from_pickle(b"")

    def test_inbound_create(self):
        outbound = OutboundGroupSession()
        InboundGroupSession(outbound.session_key)

    def test_invalid_decrypt(self):
        outbound = OutboundGroupSession()
        inbound = InboundGroupSession(outbound.session_key)

        with pytest.raises(ValueError):
            inbound.decrypt("")

    def test_inbound_pickle(self):
        outbound = OutboundGroupSession()
        inbound = InboundGroupSession(outbound.session_key)
        pickle = inbound.pickle()
        InboundGroupSession.from_pickle(pickle)

    def test_inbound_export(self):
        outbound = OutboundGroupSession()
        inbound = InboundGroupSession(outbound.session_key)
        imported = InboundGroupSession.import_session(
            inbound.export_session(inbound.first_known_index)
        )
        assert "Test", 0 == imported.decrypt(outbound.encrypt("Test"))

    def test_first_index(self):
        outbound = OutboundGroupSession()
        inbound = InboundGroupSession(outbound.session_key)
        index = inbound.first_known_index
        assert isinstance(index, int)

    def test_encrypt(self, benchmark):
        benchmark.weave(OutboundGroupSession.encrypt, lazy=True)
        outbound = OutboundGroupSession()
        inbound = InboundGroupSession(outbound.session_key)
        assert "Test", 0 == inbound.decrypt(outbound.encrypt("Test"))

    def test_decrypt(self, benchmark):
        benchmark.weave(InboundGroupSession.decrypt, lazy=True)
        outbound = OutboundGroupSession()
        inbound = InboundGroupSession(outbound.session_key)
        assert "Test", 0 == inbound.decrypt(outbound.encrypt("Test"))

    def test_decrypt_twice(self):
        outbound = OutboundGroupSession()
        inbound = InboundGroupSession(outbound.session_key)
        outbound.encrypt("Test 1")
        message, index = inbound.decrypt(outbound.encrypt("Test 2"))
        assert isinstance(index, int)
        assert ("Test 2", 1) == (message, index)

    def test_decrypt_failure(self):
        outbound = OutboundGroupSession()
        inbound = InboundGroupSession(outbound.session_key)
        eve_outbound = OutboundGroupSession()
        with pytest.raises(OlmGroupSessionError):
            inbound.decrypt(eve_outbound.encrypt("Test"))

    def test_id(self):
        outbound = OutboundGroupSession()
        inbound = InboundGroupSession(outbound.session_key)
        assert outbound.id == inbound.id

    def test_inbound_fail(self):
        with pytest.raises(TypeError):
            InboundGroupSession()

    def test_oubtound_pickle_fail(self):
        outbound = OutboundGroupSession()
        pickle = outbound.pickle("Test")

        with pytest.raises(OlmGroupSessionError):
            OutboundGroupSession.from_pickle(pickle)

    def test_outbound_clear(self):
        session = OutboundGroupSession()
        del session

    def test_inbound_clear(self):
        outbound = OutboundGroupSession()
        inbound = InboundGroupSession(outbound.session_key)
        del inbound

    def test_invalid_unicode_decrypt(self):
        outbound = OutboundGroupSession()
        inbound = InboundGroupSession(outbound.session_key)

        text = outbound.encrypt(bytes([0xed]))
        plaintext, _ = inbound.decrypt(text)

        print(plaintext)
        assert plaintext == u"�"

        plaintext, _ = inbound.decrypt(text, "ignore")
        assert plaintext == ""