summaryrefslogtreecommitdiff
path: root/troveclient/tests/test_users.py
blob: 0fc32f683da11c2934722ebdff6541cc65a7b43c (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
from testtools import TestCase
from mock import Mock

from troveclient import users
from troveclient import base

"""
Unit tests for users.py
"""


class UserTest(TestCase):

    def setUp(self):
        super(UserTest, self).setUp()
        self.orig__init = users.User.__init__
        users.User.__init__ = Mock(return_value=None)
        self.user = users.User()

    def tearDown(self):
        super(UserTest, self).tearDown()
        users.User.__init__ = self.orig__init

    def test___repr__(self):
        self.user.name = "user-1"
        self.assertEqual('<User: user-1>', self.user.__repr__())


class UsersTest(TestCase):

    def setUp(self):
        super(UsersTest, self).setUp()
        self.orig__init = users.Users.__init__
        users.Users.__init__ = Mock(return_value=None)
        self.users = users.Users()
        self.users.api = Mock()
        self.users.api.client = Mock()

        self.orig_base_getid = base.getid
        base.getid = Mock(return_value="instance1")

    def tearDown(self):
        super(UsersTest, self).tearDown()
        users.Users.__init__ = self.orig__init
        base.getid = self.orig_base_getid

    def _get_mock_method(self):
        self._resp = Mock()
        self._body = None
        self._url = None

        def side_effect_func(url, body=None):
            self._body = body
            self._url = url
            return (self._resp, body)

        return Mock(side_effect=side_effect_func)

    def _build_fake_user(self, name, hostname=None, password=None,
                         databases=None):
        return {'name': name,
                'password': password if password else 'password',
                'host': hostname,
                'databases': databases if databases else [],
               }

    def test_create(self):
        self.users.api.client.post = self._get_mock_method()
        self._resp.status = 200
        user = self._build_fake_user('user1')

        self.users.create(23, [user])
        self.assertEqual('/instances/23/users', self._url)
        self.assertEqual({"users": [user]}, self._body)

        # Even if host isn't supplied originally,
        # the default is supplied.
        del user['host']
        self.users.create(23, [user])
        self.assertEqual('/instances/23/users', self._url)
        user['host'] = '%'
        self.assertEqual({"users": [user]}, self._body)

        # If host is supplied, of course it's put into the body.
        user['host'] = '127.0.0.1'
        self.users.create(23, [user])
        self.assertEqual({"users": [user]}, self._body)

        # Make sure that response of 400 is recognized as an error.
        user['host'] = '%'
        self._resp.status = 400
        self.assertRaises(Exception, self.users.create, 12, [user])

    def test_delete(self):
        self.users.api.client.delete = self._get_mock_method()
        self._resp.status = 200
        self.users.delete(27, 'user1')
        self.assertEqual('/instances/27/users/user1', self._url)
        self._resp.status = 400
        self.assertRaises(Exception, self.users.delete, 34, 'user1')

    def test__list(self):
        def side_effect_func(self, val):
            return val

        key = 'key'
        body = Mock()
        body.get = Mock(return_value=[{'href': 'http://test.net/test_file',
                                       'rel': 'next'}])
        body.__getitem__ = Mock(return_value=["test-value"])

        resp = Mock()
        resp.status = 200
        self.users.resource_class = Mock(side_effect=side_effect_func)
        self.users.api.client.get = Mock(return_value=(resp, body))
        self.assertEqual(["test-value"], self.users._list('url', key).items)

        self.users.api.client.get = Mock(return_value=(resp, None))
        self.assertRaises(Exception, self.users._list, 'url', None)

    def test_list(self):
        def side_effect_func(path, user, limit, marker):
            return path

        self.users._list = Mock(side_effect=side_effect_func)
        self.assertEqual('/instances/instance1/users', self.users.list(1))