summaryrefslogtreecommitdiff
path: root/tests/unit/core/test_services.py
blob: bb00dce97e7031af8f22ba15df353f9b9ae6ff6d (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
from twisted.internet import defer
from twisted.trial import unittest

from leap.bitmask.core.mail_services import KeymanagerService


class KeymanagerServiceTestCase(unittest.TestCase):

    @defer.inlineCallbacks
    def test_keymanager_service_list_call(self):
        kms = keymanagerServiceFactory()
        yield kms.do_list_keys({'user': 'user'})
        assert kms._keymanager.loopback == ['get_all_keys']

    @defer.inlineCallbacks
    def test_keymanager_service_export_call(self):
        kms = keymanagerServiceFactory()
        yield kms.do_export({'user': 'user'}, 'foo@bar')
        assert kms._keymanager.loopback == ['get_key']

    @defer.inlineCallbacks
    def test_keymanager_service_insert_call(self):
        kms = keymanagerServiceFactory()
        yield kms.do_insert({'user': 'user'}, 'foo@bar', 'aaaa')
        assert kms._keymanager.loopback == ['put_raw_key', 'get_key']

    @defer.inlineCallbacks
    def test_keymanager_service_delete_call(self):
        kms = keymanagerServiceFactory()
        yield kms.do_delete({'user': 'user'}, 'foo@bar')
        assert kms._keymanager.loopback == ['get_key', 'delete_key']


class _container(object):

    class _keymanager(object):
        """
        This implements the basic public contract of the Keymanager object,
        just to mock the calls made from the KemanagerService.
        """
        def __init__(self):
            self.loopback = []

        def get_all_keys(self, private=False):
            self.loopback.append('get_all_keys')
            return defer.succeed([])

        def get_key(self, address, private=False, fetch_remote=False):
            self.loopback.append('get_key')

            class _key(dict):
                fingerprint = 'deadbeef'
            return defer.succeed(_key())

        def put_raw_key(self, rawkey, address, validation=""):
            self.loopback.append('put_raw_key')
            return defer.succeed('')

        def delete_key(self, key):
            self.loopback.append('delete_key')
            return defer.succeed('')

    def __init__(self):
        self._instances = {'user': self._keymanager()}

    def get_instance(self, userid):
        return self._instances.get(userid)


def keymanagerServiceFactory():
    kms = KeymanagerService()
    kms._container = _container()
    kms._keymanager = kms._container.get_instance('user')
    return kms