summaryrefslogtreecommitdiff
path: root/src/leap/base/tests/test_providers.py
blob: 92bc1f2f8124193f440c83f2ea7b4d0dadfce46f (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
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
import copy
import json
try:
    import unittest2 as unittest
except ImportError:
    import unittest
import os

from leap.base.pluggableconfig import ValidationError
from leap.testing.basetest import BaseLeapTest
from leap.base import providers


EXPECTED_DEFAULT_CONFIG = {
    u"api_version": u"0.1.0",
    #u"description": "LEAPTranslatable<{u'en': u'Test provider'}>",
    u"description": {u'en': u'Test provider'},
    u"default_language": u"en",
    #u"display_name": {u'en': u"Test Provider"},
    u"domain": u"testprovider.example.org",
    #u'name': "LEAPTranslatable<{u'en': u'Test Provider'}>",
    u'name': {u'en': u'Test Provider'},
    u"enrollment_policy": u"open",
    #u"serial": 1,
    u"services": [
        u"eip"
    ],
    u"languages": [u"en"],
    u"version": u"0.1.0"
}


class TestLeapProviderDefinition(BaseLeapTest):
    def setUp(self):
        self.domain = "testprovider.example.org"
        self.definition = providers.LeapProviderDefinition(
            domain=self.domain)
        self.definition.save(force=True)
        self.definition.load()  # why have to load after save??
        self.config = self.definition.config

    def tearDown(self):
        if hasattr(self, 'testfile') and os.path.isfile(self.testfile):
            os.remove(self.testfile)

    # tests

    # XXX most of these tests can be made more abstract
    # and moved to test_baseconfig *triangulate!*

    def test_provider_slug_property(self):
        slug = self.definition.slug
        self.assertEquals(
            slug,
            os.path.join(
                self.home,
                '.config', 'leap', 'providers',
                '%s' % self.domain,
                'provider.json'))
        with self.assertRaises(AttributeError):
            self.definition.slug = 23

    def test_provider_dump(self):
        # check a good provider definition is dumped to disk
        self.testfile = self.get_tempfile('test.json')
        self.definition.save(to=self.testfile, force=True)
        deserialized = json.load(open(self.testfile, 'rb'))
        self.maxDiff = None
        #import ipdb;ipdb.set_trace()
        self.assertEqual(deserialized, EXPECTED_DEFAULT_CONFIG)

    def test_provider_dump_to_slug(self):
        # same as above, but we test the ability to save to a
        # file generated from the slug.
        # XXX THIS TEST SHOULD MOVE TO test_baseconfig
        self.definition.save()
        filename = self.definition.filename
        self.assertTrue(os.path.isfile(filename))
        deserialized = json.load(open(filename, 'rb'))
        self.assertEqual(deserialized, EXPECTED_DEFAULT_CONFIG)

    def test_provider_load(self):
        # check loading provider from disk file
        self.testfile = self.get_tempfile('test_load.json')
        with open(self.testfile, 'w') as wf:
            wf.write(json.dumps(EXPECTED_DEFAULT_CONFIG))
        self.definition.load(fromfile=self.testfile)
        #self.assertDictEqual(self.config,
                             #EXPECTED_DEFAULT_CONFIG)
        self.assertItemsEqual(self.config, EXPECTED_DEFAULT_CONFIG)

    def test_provider_validation(self):
        self.definition.validate(self.config)
        _config = copy.deepcopy(self.config)
        # bad type, raise validation error
        _config['domain'] = 111
        with self.assertRaises(ValidationError):
            self.definition.validate(_config)

    @unittest.skip
    def test_load_malformed_json_definition(self):
        raise NotImplementedError

    @unittest.skip
    def test_type_validation(self):
        # check various type validation
        # type cast
        raise NotImplementedError


class TestLeapProviderSet(BaseLeapTest):

    def setUp(self):
        self.providers = providers.LeapProviderSet()

    def tearDown(self):
        pass
    ###

    def test_get_zero_count(self):
        self.assertEqual(self.providers.count, 0)

    @unittest.skip
    def test_count_defined_providers(self):
        # check the method used for making
        # the list of providers
        raise NotImplementedError

    @unittest.skip
    def test_get_default_provider(self):
        raise NotImplementedError

    @unittest.skip
    def test_should_be_at_least_one_provider_after_init(self):
        # when we init an empty environment,
        # there should be at least one provider,
        # that will be a dump of the default provider definition
        # somehow a high level test
        raise NotImplementedError

    @unittest.skip
    def test_get_eip_remote_from_default_provider(self):
        # from: default provider
        # expect: remote eip domain
        raise NotImplementedError

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