Statistics
| Branch: | Tag: | Revision:

root / kamaki / clients / network / test.py @ 447365fe

History | View | Annotate | Download (22.1 kB)

1 963bd664 Stavros Sachtouris
# Copyright 2013 GRNET S.A. All rights reserved.
2 963bd664 Stavros Sachtouris
#
3 963bd664 Stavros Sachtouris
# Redistribution and use in source and binary forms, with or
4 963bd664 Stavros Sachtouris
# without modification, are permitted provided that the following
5 963bd664 Stavros Sachtouris
# conditions are met:
6 963bd664 Stavros Sachtouris
#
7 963bd664 Stavros Sachtouris
#   1. Redistributions of source code must retain the above
8 963bd664 Stavros Sachtouris
#      copyright notice, this list of conditions and the following
9 963bd664 Stavros Sachtouris
#      disclaimer.
10 963bd664 Stavros Sachtouris
#
11 963bd664 Stavros Sachtouris
#   2. Redistributions in binary form must reproduce the above
12 963bd664 Stavros Sachtouris
#      copyright notice, this list of conditions and the following
13 963bd664 Stavros Sachtouris
#      disclaimer in the documentation and/or other materials
14 963bd664 Stavros Sachtouris
#      provided with the distribution.
15 963bd664 Stavros Sachtouris
#
16 963bd664 Stavros Sachtouris
# THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS
17 963bd664 Stavros Sachtouris
# OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 963bd664 Stavros Sachtouris
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
19 963bd664 Stavros Sachtouris
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR
20 963bd664 Stavros Sachtouris
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
21 963bd664 Stavros Sachtouris
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
22 963bd664 Stavros Sachtouris
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
23 963bd664 Stavros Sachtouris
# USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
24 963bd664 Stavros Sachtouris
# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25 963bd664 Stavros Sachtouris
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
26 963bd664 Stavros Sachtouris
# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
27 963bd664 Stavros Sachtouris
# POSSIBILITY OF SUCH DAMAGE.
28 963bd664 Stavros Sachtouris
#
29 963bd664 Stavros Sachtouris
# The views and conclusions contained in the software and
30 963bd664 Stavros Sachtouris
# documentation are those of the authors and should not be
31 963bd664 Stavros Sachtouris
# interpreted as representing official policies, either expressed
32 963bd664 Stavros Sachtouris
# or implied, of GRNET S.A.
33 963bd664 Stavros Sachtouris
34 963bd664 Stavros Sachtouris
from mock import patch, call
35 963bd664 Stavros Sachtouris
from unittest import TestCase
36 963bd664 Stavros Sachtouris
from itertools import product
37 963bd664 Stavros Sachtouris
from json import dumps
38 963bd664 Stavros Sachtouris
39 5c433331 Stavros Sachtouris
from kamaki.clients import network
40 963bd664 Stavros Sachtouris
41 963bd664 Stavros Sachtouris
42 5c433331 Stavros Sachtouris
class NetworkRestClient(TestCase):
43 963bd664 Stavros Sachtouris
44 963bd664 Stavros Sachtouris
    """Set up a ComputesRest thorough test"""
45 963bd664 Stavros Sachtouris
    def setUp(self):
46 5c433331 Stavros Sachtouris
        self.url = 'http://network.example.com'
47 963bd664 Stavros Sachtouris
        self.token = 'n2tw0rk70k3n'
48 5c433331 Stavros Sachtouris
        self.client = network.NetworkRestClient(self.url, self.token)
49 963bd664 Stavros Sachtouris
50 963bd664 Stavros Sachtouris
    def tearDown(self):
51 058ee9a8 Stavros Sachtouris
        del self.client
52 963bd664 Stavros Sachtouris
53 963bd664 Stavros Sachtouris
    def _assert(self, method_call, path, set_param=None, params=(), **kwargs):
54 963bd664 Stavros Sachtouris
        """Assert the REST method call is called as expected"""
55 963bd664 Stavros Sachtouris
        x0 = - len(params)
56 963bd664 Stavros Sachtouris
        for i, (k, v, c) in enumerate(params):
57 963bd664 Stavros Sachtouris
            self.assertEqual(set_param.mock_calls[x0 + i], call(k, v, iff=c))
58 963bd664 Stavros Sachtouris
59 963bd664 Stavros Sachtouris
        self.assertEqual(method_call.mock_calls[-1], call(path, **kwargs))
60 963bd664 Stavros Sachtouris
61 963bd664 Stavros Sachtouris
    @patch('kamaki.clients.Client.get', return_value='ret val')
62 963bd664 Stavros Sachtouris
    def test_networks_get(self, get):
63 ba1ab65d Stavros Sachtouris
        netid = 'netid'
64 963bd664 Stavros Sachtouris
        for kwargs in (dict(), dict(k1='v1'), dict(k2='v2', k3='v3')):
65 963bd664 Stavros Sachtouris
            self.assertEqual(self.client.networks_get(**kwargs), 'ret val')
66 963bd664 Stavros Sachtouris
            self._assert(get, '/networks', **kwargs)
67 963bd664 Stavros Sachtouris
            self.assertEqual(
68 963bd664 Stavros Sachtouris
                self.client.networks_get(network_id=netid, **kwargs),
69 963bd664 Stavros Sachtouris
                'ret val')
70 963bd664 Stavros Sachtouris
            self._assert(get, '/networks/%s' % netid, **kwargs)
71 963bd664 Stavros Sachtouris
72 963bd664 Stavros Sachtouris
    @patch('kamaki.clients.Client.post', return_value='ret val')
73 ba1ab65d Stavros Sachtouris
    def test_networks_post(self, post):
74 ba1ab65d Stavros Sachtouris
        for kwargs in (
75 ba1ab65d Stavros Sachtouris
                dict(json_data=dict(k1='v1')),
76 ba1ab65d Stavros Sachtouris
                dict(json_data=dict(k2='v2'), k3='v3')):
77 ba1ab65d Stavros Sachtouris
            self.assertEqual(self.client.networks_post(**kwargs), 'ret val')
78 ba1ab65d Stavros Sachtouris
            json_data = kwargs.pop('json_data')
79 56f5c6fc Stavros Sachtouris
            self._assert(post, '/networks', json=json_data, **kwargs)
80 963bd664 Stavros Sachtouris
81 963bd664 Stavros Sachtouris
    @patch('kamaki.clients.Client.put', return_value='ret val')
82 ba1ab65d Stavros Sachtouris
    def test_networks_put(self, put):
83 963bd664 Stavros Sachtouris
        netid = 'netid'
84 ba1ab65d Stavros Sachtouris
        for kwargs in (
85 ba1ab65d Stavros Sachtouris
                dict(json_data=dict(k1='v1')),
86 ba1ab65d Stavros Sachtouris
                dict(json_data=dict(k2='v2'), k3='v3')):
87 963bd664 Stavros Sachtouris
            self.assertEqual(
88 ba1ab65d Stavros Sachtouris
                self.client.networks_put(netid, **kwargs), 'ret val')
89 ba1ab65d Stavros Sachtouris
            json_data = kwargs.pop('json_data')
90 963bd664 Stavros Sachtouris
            self._assert(
91 56f5c6fc Stavros Sachtouris
                put, '/networks/%s' % netid, json=json_data, **kwargs)
92 963bd664 Stavros Sachtouris
93 963bd664 Stavros Sachtouris
    @patch('kamaki.clients.Client.delete', return_value='ret val')
94 963bd664 Stavros Sachtouris
    def test_networks_delete(self, delete):
95 963bd664 Stavros Sachtouris
        netid = 'netid'
96 963bd664 Stavros Sachtouris
        for kwargs in (dict(), dict(k1='v1'), dict(k2='v2', k3='v3')):
97 963bd664 Stavros Sachtouris
            self.assertEqual(
98 963bd664 Stavros Sachtouris
                self.client.networks_delete(netid, **kwargs), 'ret val')
99 963bd664 Stavros Sachtouris
            self._assert(delete, '/networks/%s' % netid, **kwargs)
100 963bd664 Stavros Sachtouris
101 963bd664 Stavros Sachtouris
    @patch('kamaki.clients.Client.get', return_value='ret val')
102 963bd664 Stavros Sachtouris
    def test_subnets_get(self, get):
103 963bd664 Stavros Sachtouris
        for kwargs in (dict(), dict(k1='v1'), dict(k2='v2', k3='v3')):
104 963bd664 Stavros Sachtouris
            self.assertEqual(self.client.subnets_get(**kwargs), 'ret val')
105 963bd664 Stavros Sachtouris
            self._assert(get, '/subnets', **kwargs)
106 963bd664 Stavros Sachtouris
107 963bd664 Stavros Sachtouris
            subnet_id = 'subnet id'
108 963bd664 Stavros Sachtouris
            self.assertEqual(
109 963bd664 Stavros Sachtouris
                self.client.subnets_get(subnet_id=subnet_id, **kwargs),
110 963bd664 Stavros Sachtouris
                'ret val')
111 963bd664 Stavros Sachtouris
            self._assert(get, '/subnets/%s' % subnet_id, **kwargs)
112 963bd664 Stavros Sachtouris
113 963bd664 Stavros Sachtouris
    @patch('kamaki.clients.Client.post', return_value='ret val')
114 963bd664 Stavros Sachtouris
    def test_subnets_post(self, post):
115 963bd664 Stavros Sachtouris
        for kwargs in (dict(), dict(k1='v1'), dict(k2='v2', k3='v3')):
116 ba1ab65d Stavros Sachtouris
            json_data = dict(subnets='some data')
117 ba1ab65d Stavros Sachtouris
            self.assertEqual(self.client.subnets_post(
118 ba1ab65d Stavros Sachtouris
                json_data=json_data, **kwargs), 'ret val')
119 56f5c6fc Stavros Sachtouris
            self._assert(post, '/subnets', json=json_data, **kwargs)
120 963bd664 Stavros Sachtouris
121 963bd664 Stavros Sachtouris
    @patch('kamaki.clients.Client.put', return_value='ret val')
122 963bd664 Stavros Sachtouris
    def test_subnets_put(self, put):
123 963bd664 Stavros Sachtouris
        subnet_id = 'subid'
124 963bd664 Stavros Sachtouris
        for kwargs in (dict(), dict(k1='v1'), dict(k2='v2', k3='v3')):
125 963bd664 Stavros Sachtouris
            self.assertEqual(
126 963bd664 Stavros Sachtouris
                self.client.subnets_put(subnet_id, **kwargs), 'ret val')
127 963bd664 Stavros Sachtouris
            self._assert(put, '/subnets/%s' % subnet_id, **kwargs)
128 963bd664 Stavros Sachtouris
129 963bd664 Stavros Sachtouris
    @patch('kamaki.clients.Client.delete', return_value='ret val')
130 963bd664 Stavros Sachtouris
    def test_subnets_delete(self, delete):
131 963bd664 Stavros Sachtouris
        netid = 'netid'
132 963bd664 Stavros Sachtouris
        for kwargs in (dict(), dict(k1='v1'), dict(k2='v2', k3='v3')):
133 963bd664 Stavros Sachtouris
            self.assertEqual(
134 963bd664 Stavros Sachtouris
                self.client.subnets_delete(netid, **kwargs), 'ret val')
135 963bd664 Stavros Sachtouris
            self._assert(delete, '/subnets/%s' % netid, **kwargs)
136 963bd664 Stavros Sachtouris
137 963bd664 Stavros Sachtouris
    @patch('kamaki.clients.Client.get', return_value='ret val')
138 963bd664 Stavros Sachtouris
    def test_ports_get(self, get):
139 963bd664 Stavros Sachtouris
        for kwargs in (dict(), dict(k1='v1'), dict(k2='v2', k3='v3')):
140 963bd664 Stavros Sachtouris
            self.assertEqual(self.client.ports_get(**kwargs), 'ret val')
141 963bd664 Stavros Sachtouris
            self._assert(get, '/ports', **kwargs)
142 963bd664 Stavros Sachtouris
143 963bd664 Stavros Sachtouris
            port_id = 'port id'
144 963bd664 Stavros Sachtouris
            self.assertEqual(
145 963bd664 Stavros Sachtouris
                self.client.ports_get(port_id=port_id, **kwargs),
146 963bd664 Stavros Sachtouris
                'ret val')
147 963bd664 Stavros Sachtouris
            self._assert(get, '/ports/%s' % port_id, **kwargs)
148 963bd664 Stavros Sachtouris
149 963bd664 Stavros Sachtouris
    @patch('kamaki.clients.Client.post', return_value='ret val')
150 447365fe Stavros Sachtouris
    def test_ports_post(self, post):
151 447365fe Stavros Sachtouris
        for kwargs in (dict(), dict(k1='v1'), dict(k2='v2', k3='v3')):
152 447365fe Stavros Sachtouris
            self.assertEqual(self.client.ports_post(**kwargs), 'ret val')
153 447365fe Stavros Sachtouris
            self._assert(post, '/ports', json=None, **kwargs)
154 963bd664 Stavros Sachtouris
155 963bd664 Stavros Sachtouris
            json_data = dict(id='some id', other_param='other val')
156 447365fe Stavros Sachtouris
            self.assertEqual(
157 447365fe Stavros Sachtouris
                self.client.ports_post(json_data=json_data, **kwargs),
158 447365fe Stavros Sachtouris
                'ret val')
159 447365fe Stavros Sachtouris
            self._assert(post, '/ports', json=json_data, **kwargs)
160 963bd664 Stavros Sachtouris
161 963bd664 Stavros Sachtouris
    @patch('kamaki.clients.Client.put', return_value='ret val')
162 447365fe Stavros Sachtouris
    def test_ports_put(self, put):
163 963bd664 Stavros Sachtouris
        port_id = 'portid'
164 447365fe Stavros Sachtouris
        for kwargs in (dict(), dict(k1='v1'), dict(k2='v2', k3='v3')):
165 963bd664 Stavros Sachtouris
            self.assertEqual(
166 447365fe Stavros Sachtouris
                self.client.ports_put(port_id, **kwargs), 'ret val')
167 447365fe Stavros Sachtouris
            self._assert(put, '/ports/%s' % port_id, json=None, **kwargs)
168 963bd664 Stavros Sachtouris
169 963bd664 Stavros Sachtouris
            json_data = dict(id='some id', other_param='other val')
170 963bd664 Stavros Sachtouris
            self.assertEqual(
171 447365fe Stavros Sachtouris
                self.client.ports_put(port_id, json_data=json_data, **kwargs),
172 447365fe Stavros Sachtouris
                'ret val')
173 447365fe Stavros Sachtouris
            self._assert(put, '/ports/%s' % port_id, json=json_data, **kwargs)
174 963bd664 Stavros Sachtouris
175 963bd664 Stavros Sachtouris
176 058ee9a8 Stavros Sachtouris
class FakeObject(object):
177 058ee9a8 Stavros Sachtouris
178 058ee9a8 Stavros Sachtouris
    json = None
179 afba96a7 Stavros Sachtouris
    headers = None
180 058ee9a8 Stavros Sachtouris
181 058ee9a8 Stavros Sachtouris
182 5c433331 Stavros Sachtouris
class NetworkClient(TestCase):
183 058ee9a8 Stavros Sachtouris
184 058ee9a8 Stavros Sachtouris
    """Set up a ComputesRest thorough test"""
185 058ee9a8 Stavros Sachtouris
    def setUp(self):
186 058ee9a8 Stavros Sachtouris
        self.url = 'http://network.example.com'
187 058ee9a8 Stavros Sachtouris
        self.token = 'n2tw0rk70k3n'
188 5c433331 Stavros Sachtouris
        self.client = network.NetworkClient(self.url, self.token)
189 058ee9a8 Stavros Sachtouris
190 058ee9a8 Stavros Sachtouris
    def tearDown(self):
191 ba1ab65d Stavros Sachtouris
        FakeObject.json, FakeObject.headers = None, None
192 058ee9a8 Stavros Sachtouris
        del self.client
193 058ee9a8 Stavros Sachtouris
194 058ee9a8 Stavros Sachtouris
    @patch(
195 5c433331 Stavros Sachtouris
        'kamaki.clients.network.NetworkClient.networks_get',
196 058ee9a8 Stavros Sachtouris
        return_value=FakeObject())
197 058ee9a8 Stavros Sachtouris
    def test_list_networks(self, networks_get):
198 058ee9a8 Stavros Sachtouris
        FakeObject.json = dict(networks='ret val')
199 058ee9a8 Stavros Sachtouris
        self.assertEqual(self.client.list_networks(), 'ret val')
200 058ee9a8 Stavros Sachtouris
        networks_get.assert_called_once_with(success=200)
201 058ee9a8 Stavros Sachtouris
202 058ee9a8 Stavros Sachtouris
    @patch(
203 5c433331 Stavros Sachtouris
        'kamaki.clients.network.NetworkClient.networks_post',
204 058ee9a8 Stavros Sachtouris
        return_value=FakeObject())
205 058ee9a8 Stavros Sachtouris
    def test_create_network(self, networks_post):
206 ba1ab65d Stavros Sachtouris
        for admin_state_up, shared in product((None, True), (None, True)):
207 afba96a7 Stavros Sachtouris
            FakeObject.json = dict(network='ret val')
208 ba1ab65d Stavros Sachtouris
            name = 'net name'
209 ba1ab65d Stavros Sachtouris
            self.assertEqual(
210 ba1ab65d Stavros Sachtouris
                self.client.create_network(
211 ba1ab65d Stavros Sachtouris
                    name, admin_state_up=admin_state_up, shared=shared),
212 ba1ab65d Stavros Sachtouris
                'ret val')
213 ba1ab65d Stavros Sachtouris
            req = dict(name=name, admin_state_up=bool(admin_state_up))
214 ba1ab65d Stavros Sachtouris
            if shared:
215 ba1ab65d Stavros Sachtouris
                req['shared'] = shared
216 ba1ab65d Stavros Sachtouris
            expargs = dict(json_data=dict(network=req), success=201)
217 ba1ab65d Stavros Sachtouris
            self.assertEqual(networks_post.mock_calls[-1], call(**expargs))
218 058ee9a8 Stavros Sachtouris
219 afba96a7 Stavros Sachtouris
    @patch(
220 5c433331 Stavros Sachtouris
        'kamaki.clients.network.NetworkClient.networks_post',
221 afba96a7 Stavros Sachtouris
        return_value=FakeObject())
222 afba96a7 Stavros Sachtouris
    def test_create_networks(self, networks_post):
223 ba1ab65d Stavros Sachtouris
        for networks in (
224 ba1ab65d Stavros Sachtouris
                None, dict(name='name'), 'nets', [1, 2, 3], [{'k': 'v'}, ],
225 ba1ab65d Stavros Sachtouris
                [dict(admin_state_up=True, shared=True)],
226 ba1ab65d Stavros Sachtouris
                [dict(name='n1', invalid='mistake'), ],
227 ba1ab65d Stavros Sachtouris
                [dict(name='valid', shared=True), {'err': 'nop'}]):
228 afba96a7 Stavros Sachtouris
            self.assertRaises(
229 ba1ab65d Stavros Sachtouris
                ValueError, self.client.create_networks, networks)
230 afba96a7 Stavros Sachtouris
231 afba96a7 Stavros Sachtouris
        FakeObject.json = dict(networks='ret val')
232 ba1ab65d Stavros Sachtouris
        for networks in (
233 ba1ab65d Stavros Sachtouris
                [
234 ba1ab65d Stavros Sachtouris
                    dict(name='net1'),
235 ba1ab65d Stavros Sachtouris
                    dict(name='net 2', admin_state_up=False, shared=True)],
236 ba1ab65d Stavros Sachtouris
                [
237 ba1ab65d Stavros Sachtouris
                    dict(name='net1', admin_state_up=True),
238 ba1ab65d Stavros Sachtouris
                    dict(name='net 2', shared=False),
239 ba1ab65d Stavros Sachtouris
                    dict(name='net-3')],
240 ba1ab65d Stavros Sachtouris
                (dict(name='n.e.t'), dict(name='net 2'))):
241 ba1ab65d Stavros Sachtouris
            self.assertEqual(self.client.create_networks(networks), 'ret val')
242 afba96a7 Stavros Sachtouris
243 afba96a7 Stavros Sachtouris
            networks = list(networks)
244 afba96a7 Stavros Sachtouris
            expargs = dict(json_data=dict(networks=networks), success=201)
245 afba96a7 Stavros Sachtouris
            self.assertEqual(networks_post.mock_calls[-1], call(**expargs))
246 afba96a7 Stavros Sachtouris
247 afba96a7 Stavros Sachtouris
    @patch(
248 5c433331 Stavros Sachtouris
        'kamaki.clients.network.NetworkClient.networks_get',
249 afba96a7 Stavros Sachtouris
        return_value=FakeObject())
250 afba96a7 Stavros Sachtouris
    def test_get_network_details(self, networks_get):
251 afba96a7 Stavros Sachtouris
        netid, FakeObject.json = 'netid', dict(network='ret val')
252 afba96a7 Stavros Sachtouris
        self.assertEqual(self.client.get_network_details(netid), 'ret val')
253 afba96a7 Stavros Sachtouris
        networks_get.assert_called_once_with(netid, success=200)
254 afba96a7 Stavros Sachtouris
255 afba96a7 Stavros Sachtouris
    @patch(
256 5c433331 Stavros Sachtouris
        'kamaki.clients.network.NetworkClient.networks_put',
257 afba96a7 Stavros Sachtouris
        return_value=FakeObject())
258 afba96a7 Stavros Sachtouris
    def test_update_network(self, networks_put):
259 afba96a7 Stavros Sachtouris
        netid, FakeObject.json = 'netid', dict(network='ret val')
260 afba96a7 Stavros Sachtouris
        for name, admin_state_up, shared in product(
261 afba96a7 Stavros Sachtouris
                ('net name', None), (True, None), (True, None)):
262 afba96a7 Stavros Sachtouris
            kwargs = dict(
263 afba96a7 Stavros Sachtouris
                name=name, admin_state_up=admin_state_up, shared=shared)
264 afba96a7 Stavros Sachtouris
            self.assertEqual(
265 afba96a7 Stavros Sachtouris
                self.client.update_network(netid, **kwargs), 'ret val')
266 ba1ab65d Stavros Sachtouris
            if name in (None, ):
267 ba1ab65d Stavros Sachtouris
                kwargs.pop('name')
268 ba1ab65d Stavros Sachtouris
            if admin_state_up in (None, ):
269 ba1ab65d Stavros Sachtouris
                kwargs.pop('admin_state_up')
270 ba1ab65d Stavros Sachtouris
            if shared in (None, ):
271 ba1ab65d Stavros Sachtouris
                kwargs.pop('shared')
272 ba1ab65d Stavros Sachtouris
            kwargs = dict(json_data=dict(network=kwargs), success=200)
273 afba96a7 Stavros Sachtouris
            self.assertEqual(
274 afba96a7 Stavros Sachtouris
                networks_put.mock_calls[-1], call(netid, **kwargs))
275 afba96a7 Stavros Sachtouris
276 afba96a7 Stavros Sachtouris
    @patch(
277 5c433331 Stavros Sachtouris
        'kamaki.clients.network.NetworkClient.networks_delete',
278 afba96a7 Stavros Sachtouris
        return_value=FakeObject())
279 afba96a7 Stavros Sachtouris
    def test_delete_network(self, networks_delete):
280 afba96a7 Stavros Sachtouris
        netid, FakeObject.headers = 'netid', 'ret headers'
281 afba96a7 Stavros Sachtouris
        self.assertEqual(self.client.delete_network(netid), 'ret headers')
282 afba96a7 Stavros Sachtouris
        networks_delete.assert_called_once_with(netid, success=204)
283 afba96a7 Stavros Sachtouris
284 ba1ab65d Stavros Sachtouris
    @patch(
285 5c433331 Stavros Sachtouris
        'kamaki.clients.network.NetworkClient.subnets_get',
286 ba1ab65d Stavros Sachtouris
        return_value=FakeObject())
287 ba1ab65d Stavros Sachtouris
    def test_list_subnets(self, subnets_get):
288 ba1ab65d Stavros Sachtouris
        FakeObject.json = dict(subnets='ret val')
289 ba1ab65d Stavros Sachtouris
        self.assertEqual(self.client.list_subnets(), 'ret val')
290 ba1ab65d Stavros Sachtouris
        subnets_get.assert_called_once_with(success=200)
291 ba1ab65d Stavros Sachtouris
292 25d2ff8e Stavros Sachtouris
    @patch(
293 5c433331 Stavros Sachtouris
        'kamaki.clients.network.NetworkClient.subnets_post',
294 25d2ff8e Stavros Sachtouris
        return_value=FakeObject())
295 25d2ff8e Stavros Sachtouris
    def test_create_subnet(self, subnets_post):
296 25d2ff8e Stavros Sachtouris
        for (
297 25d2ff8e Stavros Sachtouris
                name, allocation_pools, gateway_ip,
298 25d2ff8e Stavros Sachtouris
                subnet_id, ipv6, enable_dhcp) in product(
299 25d2ff8e Stavros Sachtouris
                    ('name', None), ('all pools', None), ('gip', None),
300 25d2ff8e Stavros Sachtouris
                    ('sid', None), (True, None), (True, None)):
301 25d2ff8e Stavros Sachtouris
            kwargs = dict(
302 25d2ff8e Stavros Sachtouris
                name=name, allocation_pools=allocation_pools,
303 25d2ff8e Stavros Sachtouris
                gateway_ip=gateway_ip, subnet_id=subnet_id,
304 25d2ff8e Stavros Sachtouris
                ipv6=ipv6, enable_dhcp=enable_dhcp)
305 25d2ff8e Stavros Sachtouris
            FakeObject.json, network_id, cidr = dict(subnet='rv'), 'name', 'cd'
306 25d2ff8e Stavros Sachtouris
            self.assertEqual(
307 25d2ff8e Stavros Sachtouris
                self.client.create_subnet(network_id, cidr, **kwargs), 'rv')
308 25d2ff8e Stavros Sachtouris
            req = dict(
309 25d2ff8e Stavros Sachtouris
                network_id=network_id, cidr=cidr,
310 25d2ff8e Stavros Sachtouris
                ip_version=6 if kwargs.pop('ipv6', None) else 4)
311 25d2ff8e Stavros Sachtouris
            for k, v in kwargs.items():
312 25d2ff8e Stavros Sachtouris
                if v:
313 25d2ff8e Stavros Sachtouris
                    req['id' if k == 'subnet_id' else k] = v
314 25d2ff8e Stavros Sachtouris
            expargs = dict(json_data=dict(subnet=req), success=201)
315 25d2ff8e Stavros Sachtouris
            self.assertEqual(subnets_post.mock_calls[-1], call(**expargs))
316 25d2ff8e Stavros Sachtouris
317 25d2ff8e Stavros Sachtouris
    @patch(
318 5c433331 Stavros Sachtouris
        'kamaki.clients.network.NetworkClient.subnets_post',
319 25d2ff8e Stavros Sachtouris
        return_value=FakeObject())
320 25d2ff8e Stavros Sachtouris
    def test_create_subnets(self, subnets_post):
321 25d2ff8e Stavros Sachtouris
        for subnets in (
322 25d2ff8e Stavros Sachtouris
                None, dict(network_id='name'), 'nets', [1, 2, 3], [{'k': 'v'}],
323 25d2ff8e Stavros Sachtouris
                [dict(ipv6=True, enable_dhcp=True)],
324 25d2ff8e Stavros Sachtouris
                [dict(network_id='n1', cidr='dr', invalid='mistake'), ],
325 25d2ff8e Stavros Sachtouris
                [dict(network_id='valid', cidr='valid'), {'err': 'nop'}]):
326 25d2ff8e Stavros Sachtouris
            self.assertRaises(
327 25d2ff8e Stavros Sachtouris
                ValueError, self.client.create_subnets, subnets)
328 25d2ff8e Stavros Sachtouris
329 25d2ff8e Stavros Sachtouris
        FakeObject.json = dict(subnets='ret val')
330 25d2ff8e Stavros Sachtouris
        for subnets in (
331 25d2ff8e Stavros Sachtouris
                [
332 25d2ff8e Stavros Sachtouris
                    dict(network_id='n1', cidr='c1'),
333 25d2ff8e Stavros Sachtouris
                    dict(network_id='n 2', cidr='c 2', name='name')],
334 25d2ff8e Stavros Sachtouris
                [
335 25d2ff8e Stavros Sachtouris
                    dict(network_id='n1', cidr='c 6', allocation_pools='a p'),
336 25d2ff8e Stavros Sachtouris
                    dict(network_id='n 2', cidr='c_4', gateway_ip='g ip'),
337 25d2ff8e Stavros Sachtouris
                    dict(network_id='n 2', cidr='c_4', subnet_id='s id'),
338 25d2ff8e Stavros Sachtouris
                    dict(network_id='n-4', cidr='c3', ipv6=True, name='w. 6'),
339 25d2ff8e Stavros Sachtouris
                    dict(network_id='n_5', cidr='c2', enable_dhcp=True)],
340 25d2ff8e Stavros Sachtouris
                (
341 25d2ff8e Stavros Sachtouris
                    dict(network_id='n.e.t', cidr='c-5'),
342 25d2ff8e Stavros Sachtouris
                    dict(network_id='net 2', cidr='c 2'))):
343 25d2ff8e Stavros Sachtouris
            self.assertEqual(self.client.create_subnets(subnets), 'ret val')
344 25d2ff8e Stavros Sachtouris
345 25d2ff8e Stavros Sachtouris
            for subnet in subnets:
346 25d2ff8e Stavros Sachtouris
                subnet['ip_version'] = 6 if subnet.pop('ipv6', None) else 4
347 25d2ff8e Stavros Sachtouris
                if 'subnet_id' in subnet:
348 25d2ff8e Stavros Sachtouris
                    subnet['id'] = subnet.pop('subnet_id')
349 25d2ff8e Stavros Sachtouris
            subnets = list(subnets)
350 25d2ff8e Stavros Sachtouris
            expargs = dict(json_data=dict(subnets=subnets), success=201)
351 25d2ff8e Stavros Sachtouris
            self.assertEqual(subnets_post.mock_calls[-1], call(**expargs))
352 25d2ff8e Stavros Sachtouris
353 25d2ff8e Stavros Sachtouris
    @patch(
354 5c433331 Stavros Sachtouris
        'kamaki.clients.network.NetworkClient.subnets_get',
355 25d2ff8e Stavros Sachtouris
        return_value=FakeObject())
356 25d2ff8e Stavros Sachtouris
    def test_get_subnet_details(self, subnets_get):
357 25d2ff8e Stavros Sachtouris
        subid, FakeObject.json = 'subid', 'ret val'
358 25d2ff8e Stavros Sachtouris
        self.assertEqual(self.client.get_subnet_details(subid), 'ret val')
359 25d2ff8e Stavros Sachtouris
        subnets_get.assert_called_once_with(subid, success=201)
360 25d2ff8e Stavros Sachtouris
361 25d2ff8e Stavros Sachtouris
    @patch(
362 5c433331 Stavros Sachtouris
        'kamaki.clients.network.NetworkClient.subnets_put',
363 25d2ff8e Stavros Sachtouris
        return_value=FakeObject())
364 25d2ff8e Stavros Sachtouris
    def test_update_subnet(self, subnets_put):
365 25d2ff8e Stavros Sachtouris
        for (
366 25d2ff8e Stavros Sachtouris
                name, allocation_pools, gateway_ip,
367 25d2ff8e Stavros Sachtouris
                subnet_id, ipv6, enable_dhcp) in product(
368 25d2ff8e Stavros Sachtouris
                    ('name', None), ('all pools', None), ('gip', None),
369 25d2ff8e Stavros Sachtouris
                    ('sid', None), (True, False, None), (True, False, None)):
370 25d2ff8e Stavros Sachtouris
            kwargs = dict(
371 25d2ff8e Stavros Sachtouris
                name=name, allocation_pools=allocation_pools,
372 25d2ff8e Stavros Sachtouris
                gateway_ip=gateway_ip, subnet_id=subnet_id,
373 25d2ff8e Stavros Sachtouris
                ipv6=ipv6, enable_dhcp=enable_dhcp)
374 25d2ff8e Stavros Sachtouris
            FakeObject.json, network_id, cidr = dict(subnet='rv'), 'name', 'cd'
375 25d2ff8e Stavros Sachtouris
            self.assertEqual(
376 25d2ff8e Stavros Sachtouris
                self.client.update_subnet(network_id, cidr, **kwargs), 'rv')
377 25d2ff8e Stavros Sachtouris
            req = dict(network_id=network_id, cidr=cidr)
378 25d2ff8e Stavros Sachtouris
            if kwargs.get('ipv6', None) not in (None, ):
379 25d2ff8e Stavros Sachtouris
                req['ip_version'] = 6 if kwargs.pop('ipv6') else 4
380 25d2ff8e Stavros Sachtouris
            for k, v in kwargs.items():
381 25d2ff8e Stavros Sachtouris
                if v not in (None, ):
382 25d2ff8e Stavros Sachtouris
                    req['id' if k == 'subnet_id' else k] = v
383 25d2ff8e Stavros Sachtouris
            expargs = dict(json_data=dict(subnet=req), success=201)
384 25d2ff8e Stavros Sachtouris
            self.assertEqual(subnets_put.mock_calls[-1], call(**expargs))
385 25d2ff8e Stavros Sachtouris
386 25d2ff8e Stavros Sachtouris
    @patch(
387 5c433331 Stavros Sachtouris
        'kamaki.clients.network.NetworkClient.subnets_delete',
388 25d2ff8e Stavros Sachtouris
        return_value=FakeObject())
389 25d2ff8e Stavros Sachtouris
    def test_delete_subnet(self, subnets_delete):
390 25d2ff8e Stavros Sachtouris
        netid, FakeObject.headers = 'netid', 'ret headers'
391 25d2ff8e Stavros Sachtouris
        self.assertEqual(self.client.delete_subnet(netid), 'ret headers')
392 25d2ff8e Stavros Sachtouris
        subnets_delete.assert_called_once_with(netid, success=204)
393 25d2ff8e Stavros Sachtouris
394 bac9c8ac Stavros Sachtouris
    @patch(
395 5c433331 Stavros Sachtouris
        'kamaki.clients.network.NetworkClient.ports_get',
396 bac9c8ac Stavros Sachtouris
        return_value=FakeObject())
397 bac9c8ac Stavros Sachtouris
    def test_list_ports(self, ports_get):
398 bac9c8ac Stavros Sachtouris
        FakeObject.json = dict(ports='ret val')
399 bac9c8ac Stavros Sachtouris
        self.assertEqual(self.client.list_ports(), 'ret val')
400 bac9c8ac Stavros Sachtouris
        ports_get.assert_called_once_with(success=200)
401 bac9c8ac Stavros Sachtouris
402 bac9c8ac Stavros Sachtouris
    @patch(
403 5c433331 Stavros Sachtouris
        'kamaki.clients.network.NetworkClient.ports_post',
404 bac9c8ac Stavros Sachtouris
        return_value=FakeObject())
405 bac9c8ac Stavros Sachtouris
    def test_create_port(self, ports_post):
406 bac9c8ac Stavros Sachtouris
        for (
407 bac9c8ac Stavros Sachtouris
                name, status, admin_state_up,
408 bac9c8ac Stavros Sachtouris
                mac_address, fixed_ips, security_groups
409 bac9c8ac Stavros Sachtouris
                ) in product(
410 bac9c8ac Stavros Sachtouris
                    ('name', None), ('status', None), (True, False, None),
411 bac9c8ac Stavros Sachtouris
                    ('maddr', None), ('some ips', None), ([1, 2, 3], None)):
412 bac9c8ac Stavros Sachtouris
            kwargs = dict(
413 bac9c8ac Stavros Sachtouris
                name=name, status=status, admin_state_up=admin_state_up,
414 bac9c8ac Stavros Sachtouris
                mac_address=mac_address, fixed_ips=fixed_ips,
415 bac9c8ac Stavros Sachtouris
                security_groups=security_groups)
416 bac9c8ac Stavros Sachtouris
            FakeObject.json, network_id = dict(port='ret val'), 'name'
417 bac9c8ac Stavros Sachtouris
            self.assertEqual(
418 bac9c8ac Stavros Sachtouris
                self.client.create_port(network_id, **kwargs), 'ret val')
419 bac9c8ac Stavros Sachtouris
            req = dict(network_id=network_id)
420 bac9c8ac Stavros Sachtouris
            for k, v in kwargs.items():
421 bac9c8ac Stavros Sachtouris
                if v not in (None, ):
422 bac9c8ac Stavros Sachtouris
                    req[k] = v
423 bac9c8ac Stavros Sachtouris
            expargs = dict(json_data=dict(port=req), success=201)
424 bac9c8ac Stavros Sachtouris
            self.assertEqual(ports_post.mock_calls[-1], call(**expargs))
425 bac9c8ac Stavros Sachtouris
426 bac9c8ac Stavros Sachtouris
    @patch(
427 5c433331 Stavros Sachtouris
        'kamaki.clients.network.NetworkClient.ports_post',
428 bac9c8ac Stavros Sachtouris
        return_value=FakeObject())
429 bac9c8ac Stavros Sachtouris
    def test_create_ports(self, ports_post):
430 bac9c8ac Stavros Sachtouris
        for ports in (
431 bac9c8ac Stavros Sachtouris
                None, dict(network_id='name'), 'nets', [1, 2, 3], [{'k': 'v'}],
432 bac9c8ac Stavros Sachtouris
                [dict(name=True, mac_address='mac')],
433 bac9c8ac Stavros Sachtouris
                [dict(network_id='n1', invalid='mistake'), ],
434 bac9c8ac Stavros Sachtouris
                [dict(network_id='valid', name='valid'), {'err': 'nop'}]):
435 bac9c8ac Stavros Sachtouris
            self.assertRaises(
436 bac9c8ac Stavros Sachtouris
                ValueError, self.client.create_ports, ports)
437 bac9c8ac Stavros Sachtouris
438 bac9c8ac Stavros Sachtouris
        FakeObject.json = dict(ports='ret val')
439 bac9c8ac Stavros Sachtouris
        for ports in (
440 bac9c8ac Stavros Sachtouris
                [dict(network_id='n1'), dict(network_id='n 2', name='name')],
441 bac9c8ac Stavros Sachtouris
                [
442 bac9c8ac Stavros Sachtouris
                    dict(network_id='n1', name='n 6', status='status'),
443 bac9c8ac Stavros Sachtouris
                    dict(network_id='n 2', admin_state_up=True, fixed_ips='f'),
444 bac9c8ac Stavros Sachtouris
                    dict(network_id='n 2', mac_address='mc', name='n.a.m.e.'),
445 bac9c8ac Stavros Sachtouris
                    dict(network_id='n-4', security_groups='s~G', name='w. 6'),
446 bac9c8ac Stavros Sachtouris
                    dict(network_id='n_5', admin_state_up=False, name='f a')],
447 bac9c8ac Stavros Sachtouris
                (
448 bac9c8ac Stavros Sachtouris
                    dict(network_id='n.e.t', name='c-5'),
449 bac9c8ac Stavros Sachtouris
                    dict(network_id='net 2', status='YEAH'))):
450 bac9c8ac Stavros Sachtouris
            self.assertEqual(self.client.create_ports(ports), 'ret val')
451 bac9c8ac Stavros Sachtouris
            expargs = dict(json_data=dict(ports=list(ports)), success=201)
452 bac9c8ac Stavros Sachtouris
            self.assertEqual(ports_post.mock_calls[-1], call(**expargs))
453 bac9c8ac Stavros Sachtouris
454 bac9c8ac Stavros Sachtouris
    @patch(
455 5c433331 Stavros Sachtouris
        'kamaki.clients.network.NetworkClient.ports_get',
456 bac9c8ac Stavros Sachtouris
        return_value=FakeObject())
457 bac9c8ac Stavros Sachtouris
    def test_get_port_details(self, ports_get):
458 bac9c8ac Stavros Sachtouris
        portid, FakeObject.json = 'portid', dict(ports='ret val')
459 bac9c8ac Stavros Sachtouris
        self.assertEqual(self.client.get_port_details(portid), 'ret val')
460 bac9c8ac Stavros Sachtouris
        ports_get.assert_called_once_with(portid, success=201)
461 bac9c8ac Stavros Sachtouris
462 bac9c8ac Stavros Sachtouris
    @patch(
463 5c433331 Stavros Sachtouris
        'kamaki.clients.network.NetworkClient.ports_delete',
464 bac9c8ac Stavros Sachtouris
        return_value=FakeObject())
465 bac9c8ac Stavros Sachtouris
    def test_delete_port(self, ports_delete):
466 bac9c8ac Stavros Sachtouris
        portid, FakeObject.headers = 'portid', 'ret headers'
467 bac9c8ac Stavros Sachtouris
        self.assertEqual(self.client.delete_port(portid), 'ret headers')
468 bac9c8ac Stavros Sachtouris
        ports_delete.assert_called_once_with(portid, success=204)
469 bac9c8ac Stavros Sachtouris
470 447365fe Stavros Sachtouris
    @patch(
471 447365fe Stavros Sachtouris
        'kamaki.clients.network.NetworkClient.ports_put',
472 447365fe Stavros Sachtouris
        return_value=FakeObject())
473 447365fe Stavros Sachtouris
    def test_update_port(self, ports_put):
474 447365fe Stavros Sachtouris
        for (
475 447365fe Stavros Sachtouris
                name, status, admin_state_up, mac_address, fixed_ips,
476 447365fe Stavros Sachtouris
                security_groups) in product(
477 447365fe Stavros Sachtouris
                    ('name', None), ('st', None), (True, None), ('mc', None),
478 447365fe Stavros Sachtouris
                    ('fps', None), ('sg', None)):
479 447365fe Stavros Sachtouris
            FakeObject.json = dict(port='rv')
480 447365fe Stavros Sachtouris
            port_id, network_id = 'pid', 'nid'
481 447365fe Stavros Sachtouris
            kwargs = dict(
482 447365fe Stavros Sachtouris
                network_id=network_id, name=name, status=status,
483 447365fe Stavros Sachtouris
                admin_state_up=admin_state_up, mac_address=mac_address,
484 447365fe Stavros Sachtouris
                fixed_ips=fixed_ips, security_groups=security_groups)
485 447365fe Stavros Sachtouris
            self.assertEqual(
486 447365fe Stavros Sachtouris
                self.client.update_port(port_id, **kwargs), 'rv')
487 447365fe Stavros Sachtouris
            req = dict()
488 447365fe Stavros Sachtouris
            for k, v in kwargs.items():
489 447365fe Stavros Sachtouris
                if v:
490 447365fe Stavros Sachtouris
                    req[k] = v
491 447365fe Stavros Sachtouris
            expargs = dict(json_data=dict(port=req), success=201)
492 447365fe Stavros Sachtouris
            self.assertEqual(
493 447365fe Stavros Sachtouris
                ports_put.mock_calls[-1], call(port_id, **expargs))
494 447365fe Stavros Sachtouris
495 058ee9a8 Stavros Sachtouris
496 963bd664 Stavros Sachtouris
if __name__ == '__main__':
497 963bd664 Stavros Sachtouris
    from sys import argv
498 963bd664 Stavros Sachtouris
    from kamaki.clients.test import runTestCase
499 963bd664 Stavros Sachtouris
    not_found = True
500 5c433331 Stavros Sachtouris
    if not argv[1:] or argv[1] == 'NetworkClient':
501 058ee9a8 Stavros Sachtouris
        not_found = False
502 5c433331 Stavros Sachtouris
        runTestCase(NetworkClient, 'Network Client', argv[2:])
503 5c433331 Stavros Sachtouris
    if not argv[1:] or argv[1] == 'NetworkRestClient':
504 963bd664 Stavros Sachtouris
        not_found = False
505 5c433331 Stavros Sachtouris
        runTestCase(NetworkRestClient, 'NetworkRest Client', argv[2:])
506 963bd664 Stavros Sachtouris
    if not_found:
507 963bd664 Stavros Sachtouris
        print('TestCase %s not found' % argv[1])