Statistics
| Branch: | Tag: | Revision:

root / kamaki / clients / test / cyclades.py @ 8f5d38df

History | View | Annotate | Download (20.6 kB)

1 c1004a00 Stavros Sachtouris
# Copyright 2012-2013 GRNET S.A. All rights reserved.
2 c1004a00 Stavros Sachtouris
#
3 c1004a00 Stavros Sachtouris
# Redistribution and use in source and binary forms, with or
4 c1004a00 Stavros Sachtouris
# without modification, are permitted provided that the following
5 c1004a00 Stavros Sachtouris
# conditions are met:
6 c1004a00 Stavros Sachtouris
#
7 c1004a00 Stavros Sachtouris
#   1. Redistributions of source code must retain the above
8 c1004a00 Stavros Sachtouris
#      copyright notice, this list of conditions and the following
9 c1004a00 Stavros Sachtouris
#      disclaimer.
10 c1004a00 Stavros Sachtouris
#
11 c1004a00 Stavros Sachtouris
#   2. Redistributions in binary form must reproduce the above
12 c1004a00 Stavros Sachtouris
#      copyright notice, this list of conditions and the following
13 c1004a00 Stavros Sachtouris
#      disclaimer in the documentation and/or other materials
14 c1004a00 Stavros Sachtouris
#      provided with the distribution.
15 c1004a00 Stavros Sachtouris
#
16 c1004a00 Stavros Sachtouris
# THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS
17 c1004a00 Stavros Sachtouris
# OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 c1004a00 Stavros Sachtouris
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
19 c1004a00 Stavros Sachtouris
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR
20 c1004a00 Stavros Sachtouris
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
21 c1004a00 Stavros Sachtouris
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
22 c1004a00 Stavros Sachtouris
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
23 c1004a00 Stavros Sachtouris
# USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
24 c1004a00 Stavros Sachtouris
# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25 c1004a00 Stavros Sachtouris
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
26 c1004a00 Stavros Sachtouris
# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
27 c1004a00 Stavros Sachtouris
# POSSIBILITY OF SUCH DAMAGE.
28 c1004a00 Stavros Sachtouris
#
29 c1004a00 Stavros Sachtouris
# The views and conclusions contained in the software and
30 c1004a00 Stavros Sachtouris
# documentation are those of the authors and should not be
31 c1004a00 Stavros Sachtouris
# interpreted as representing official policies, either expressed
32 c1004a00 Stavros Sachtouris
# or implied, of GRNET S.A.
33 03493855 Stavros Sachtouris
from mock import patch, Mock
34 03493855 Stavros Sachtouris
from unittest import TestCase
35 03493855 Stavros Sachtouris
from json import loads
36 03493855 Stavros Sachtouris
37 03493855 Stavros Sachtouris
from kamaki.clients import Client, ClientError
38 5ad6a119 Stavros Sachtouris
from kamaki.clients.cyclades_rest_api import CycladesClientApi
39 03493855 Stavros Sachtouris
40 03493855 Stavros Sachtouris
img_ref = "1m4g3-r3f3r3nc3"
41 03493855 Stavros Sachtouris
vm_name = "my new VM"
42 03493855 Stavros Sachtouris
fid = 42
43 03493855 Stavros Sachtouris
vm_send = dict(server=dict(
44 03493855 Stavros Sachtouris
    flavorRef=fid,
45 03493855 Stavros Sachtouris
    name=vm_name,
46 03493855 Stavros Sachtouris
    imageRef=img_ref,
47 03493855 Stavros Sachtouris
    metadata=dict(os="debian", users="root")))
48 03493855 Stavros Sachtouris
vm_recv = dict(server=dict(
49 03493855 Stavros Sachtouris
    status="BUILD",
50 03493855 Stavros Sachtouris
    updated="2013-03-01T10:04:00.637152+00:00",
51 03493855 Stavros Sachtouris
    hostId="",
52 5e194c99 Stavros Sachtouris
    name=vm_name,
53 5e194c99 Stavros Sachtouris
    imageRef=img_ref,
54 03493855 Stavros Sachtouris
    created="2013-03-01T10:04:00.087324+00:00",
55 03493855 Stavros Sachtouris
    flavorRef=fid,
56 03493855 Stavros Sachtouris
    adminPass="n0n3sh@11p@55",
57 03493855 Stavros Sachtouris
    suspended=False,
58 03493855 Stavros Sachtouris
    progress=0,
59 03493855 Stavros Sachtouris
    id=31173,
60 03493855 Stavros Sachtouris
    metadata=dict(values=dict(os="debian", users="root"))))
61 03493855 Stavros Sachtouris
img_recv = dict(image=dict(
62 03493855 Stavros Sachtouris
    status="ACTIVE",
63 03493855 Stavros Sachtouris
    updated="2013-02-26T11:10:14+00:00",
64 03493855 Stavros Sachtouris
    name="Debian Base",
65 03493855 Stavros Sachtouris
    created="2013-02-26T11:03:29+00:00",
66 03493855 Stavros Sachtouris
    progress=100,
67 03493855 Stavros Sachtouris
    id=img_ref,
68 03493855 Stavros Sachtouris
    metadata=dict(values=dict(
69 03493855 Stavros Sachtouris
        partition_table="msdos",
70 03493855 Stavros Sachtouris
        kernel="2.6.32",
71 03493855 Stavros Sachtouris
        osfamily="linux",
72 03493855 Stavros Sachtouris
        users="root",
73 03493855 Stavros Sachtouris
        gui="No GUI",
74 03493855 Stavros Sachtouris
        sortorder="1",
75 03493855 Stavros Sachtouris
        os="debian",
76 03493855 Stavros Sachtouris
        root_partition="1",
77 03493855 Stavros Sachtouris
        description="Debian 6.0.7 (Squeeze) Base System"))))
78 257b931a Stavros Sachtouris
vm_list = dict(servers=dict(values=[
79 257b931a Stavros Sachtouris
    dict(name='n1', id=1),
80 257b931a Stavros Sachtouris
    dict(name='n2', id=2)]))
81 8f5d38df Stavros Sachtouris
flavor_list = dict(flavors=dict(values=[
82 8f5d38df Stavros Sachtouris
        dict(id=1, name="C1R1024D20"),
83 8f5d38df Stavros Sachtouris
        dict(id=2, name="C1R1024D40"),
84 8f5d38df Stavros Sachtouris
        dict(id=3, name="C1R1028D20")
85 8f5d38df Stavros Sachtouris
    ]))
86 03493855 Stavros Sachtouris
87 03493855 Stavros Sachtouris
88 03493855 Stavros Sachtouris
class Cyclades(TestCase):
89 03493855 Stavros Sachtouris
90 257b931a Stavros Sachtouris
    def assert_dicts_are_equal(self, d1, d2):
91 03493855 Stavros Sachtouris
        for k, v in d1.items():
92 03493855 Stavros Sachtouris
            self.assertTrue(k in d2)
93 03493855 Stavros Sachtouris
            if isinstance(v, dict):
94 257b931a Stavros Sachtouris
                self.assert_dicts_are_equal(v, d2[k])
95 03493855 Stavros Sachtouris
            else:
96 03493855 Stavros Sachtouris
                self.assertEqual(unicode(v), unicode(d2[k]))
97 03493855 Stavros Sachtouris
98 03493855 Stavros Sachtouris
    class FR(object):
99 03493855 Stavros Sachtouris
        """FR stands for Fake Response"""
100 03493855 Stavros Sachtouris
        json = vm_recv
101 03493855 Stavros Sachtouris
        headers = {}
102 03493855 Stavros Sachtouris
        content = json
103 03493855 Stavros Sachtouris
        status = None
104 03493855 Stavros Sachtouris
        status_code = 200
105 03493855 Stavros Sachtouris
106 03493855 Stavros Sachtouris
        def release(self):
107 03493855 Stavros Sachtouris
            pass
108 c1004a00 Stavros Sachtouris
109 c1004a00 Stavros Sachtouris
    """Set up a Cyclades thorough test"""
110 c1004a00 Stavros Sachtouris
    def setUp(self):
111 03493855 Stavros Sachtouris
        self.url = 'http://cyclades.example.com'
112 03493855 Stavros Sachtouris
        self.token = 'cyc14d3s70k3n'
113 03493855 Stavros Sachtouris
        from kamaki.clients.cyclades import CycladesClient
114 03493855 Stavros Sachtouris
        self.client = CycladesClient(self.url, self.token)
115 03493855 Stavros Sachtouris
        from kamaki.clients.connection.kamakicon import KamakiHTTPConnection
116 03493855 Stavros Sachtouris
        self.C = KamakiHTTPConnection
117 c1004a00 Stavros Sachtouris
118 c1004a00 Stavros Sachtouris
    def tearDown(self):
119 257b931a Stavros Sachtouris
        self.FR.status_code = 200
120 e5613073 Stavros Sachtouris
        self.FR.json = vm_recv
121 c1004a00 Stavros Sachtouris
122 c1004a00 Stavros Sachtouris
    def test_create_server(self):
123 03493855 Stavros Sachtouris
        self.client.get_image_details = Mock(return_value=img_recv['image'])
124 03493855 Stavros Sachtouris
        with patch.object(Client, 'request', side_effect=ClientError(
125 03493855 Stavros Sachtouris
                'REQUEST ENTITY TOO LARGE',
126 03493855 Stavros Sachtouris
                status=403)):
127 03493855 Stavros Sachtouris
            self.assertRaises(
128 03493855 Stavros Sachtouris
                ClientError,
129 03493855 Stavros Sachtouris
                self.client.create_server,
130 03493855 Stavros Sachtouris
                vm_name, fid, img_ref)
131 03493855 Stavros Sachtouris
132 03493855 Stavros Sachtouris
        with patch.object(
133 03493855 Stavros Sachtouris
                self.C,
134 03493855 Stavros Sachtouris
                'perform_request',
135 03493855 Stavros Sachtouris
                return_value=self.FR()) as perform_req:
136 03493855 Stavros Sachtouris
            self.assertRaises(
137 03493855 Stavros Sachtouris
                ClientError,
138 03493855 Stavros Sachtouris
                self.client.create_server,
139 03493855 Stavros Sachtouris
                vm_name, fid, img_ref)
140 03493855 Stavros Sachtouris
            self.FR.status_code = 202
141 03493855 Stavros Sachtouris
            r = self.client.create_server(vm_name, fid, img_ref)
142 03493855 Stavros Sachtouris
            self.assertEqual(self.client.http_client.url, self.url)
143 03493855 Stavros Sachtouris
            self.assertEqual(self.client.http_client.path, '/servers')
144 03493855 Stavros Sachtouris
            (method, data, a_headers, a_params) = perform_req.call_args[0]
145 257b931a Stavros Sachtouris
            self.assert_dicts_are_equal(loads(data), vm_send)
146 257b931a Stavros Sachtouris
            self.assert_dicts_are_equal(r, vm_recv['server'])
147 03493855 Stavros Sachtouris
            prsn = 'Personality string (does not work with real servers)'
148 03493855 Stavros Sachtouris
            self.client.create_server(vm_name, fid, img_ref, prsn)
149 03493855 Stavros Sachtouris
            (method, data, a_headers, a_params) = perform_req.call_args[0]
150 03493855 Stavros Sachtouris
            data = loads(data)
151 03493855 Stavros Sachtouris
            self.assertTrue('personality' in data['server'])
152 03493855 Stavros Sachtouris
            self.assertEqual(prsn, data['server']['personality'])
153 c1004a00 Stavros Sachtouris
154 c1004a00 Stavros Sachtouris
    def test_list_servers(self):
155 257b931a Stavros Sachtouris
        self.FR.json = vm_list
156 257b931a Stavros Sachtouris
        with patch.object(
157 257b931a Stavros Sachtouris
                self.C,
158 257b931a Stavros Sachtouris
                'perform_request',
159 257b931a Stavros Sachtouris
                return_value=self.FR()) as perform_req:
160 257b931a Stavros Sachtouris
            r = self.client.list_servers()
161 257b931a Stavros Sachtouris
            self.assertEqual(self.client.http_client.url, self.url)
162 257b931a Stavros Sachtouris
            self.assertEqual(self.client.http_client.path, '/servers')
163 257b931a Stavros Sachtouris
            (method, data, a_headers, a_params) = perform_req.call_args[0]
164 257b931a Stavros Sachtouris
            self.assert_dicts_are_equal(dict(values=r), vm_list['servers'])
165 257b931a Stavros Sachtouris
            r = self.client.list_servers(detail=True)
166 257b931a Stavros Sachtouris
            self.assertEqual(self.client.http_client.url, self.url)
167 257b931a Stavros Sachtouris
            self.assertEqual(self.client.http_client.path, '/servers/detail')
168 257b931a Stavros Sachtouris
        with patch.object(
169 257b931a Stavros Sachtouris
                CycladesClientApi,
170 257b931a Stavros Sachtouris
                'servers_get',
171 257b931a Stavros Sachtouris
                return_value=self.FR()) as servers_get:
172 257b931a Stavros Sachtouris
            self.client.list_servers(changes_since=True)
173 257b931a Stavros Sachtouris
            self.assertTrue(servers_get.call_args[1]['changes_since'])
174 c1004a00 Stavros Sachtouris
175 e5613073 Stavros Sachtouris
    def test_get_server_details(self):
176 e5613073 Stavros Sachtouris
        vm_id = vm_recv['server']['id']
177 e5613073 Stavros Sachtouris
        with patch.object(self.C, 'perform_request', return_value=self.FR()):
178 e5613073 Stavros Sachtouris
            r = self.client.get_server_details(vm_id)
179 e5613073 Stavros Sachtouris
            self.assertEqual(self.client.http_client.url, self.url)
180 e5613073 Stavros Sachtouris
            self.assertEqual(
181 e5613073 Stavros Sachtouris
                self.client.http_client.path,
182 e5613073 Stavros Sachtouris
                '/servers/%s' % vm_id)
183 e5613073 Stavros Sachtouris
            self.assert_dicts_are_equal(r, vm_recv['server'])
184 c1004a00 Stavros Sachtouris
185 5e194c99 Stavros Sachtouris
    def test_update_server_name(self):
186 5e194c99 Stavros Sachtouris
        vm_id = vm_recv['server']['id']
187 5e194c99 Stavros Sachtouris
        new_name = vm_name + '_new'
188 5e194c99 Stavros Sachtouris
        self.FR.status_code = 204
189 5e194c99 Stavros Sachtouris
        with patch.object(
190 5e194c99 Stavros Sachtouris
                self.C,
191 5e194c99 Stavros Sachtouris
                'perform_request',
192 5e194c99 Stavros Sachtouris
                return_value=self.FR()) as perform_req:
193 5e194c99 Stavros Sachtouris
            self.client.update_server_name(vm_id, new_name)
194 5e194c99 Stavros Sachtouris
            self.assertEqual(self.client.http_client.url, self.url)
195 5e194c99 Stavros Sachtouris
            self.assertEqual(
196 5e194c99 Stavros Sachtouris
                self.client.http_client.path,
197 5e194c99 Stavros Sachtouris
                '/servers/%s' % vm_id)
198 5e194c99 Stavros Sachtouris
            (method, data, a_headers, a_params) = perform_req.call_args[0]
199 5e194c99 Stavros Sachtouris
            self.assert_dicts_are_equal(
200 5e194c99 Stavros Sachtouris
                dict(server=dict(name=new_name)),
201 5e194c99 Stavros Sachtouris
                loads(data))
202 c1004a00 Stavros Sachtouris
203 c1004a00 Stavros Sachtouris
    def test_reboot_server(self):
204 e711efe2 Stavros Sachtouris
        vm_id = vm_recv['server']['id']
205 e711efe2 Stavros Sachtouris
        self.FR.status_code = 202
206 e711efe2 Stavros Sachtouris
        with patch.object(
207 e711efe2 Stavros Sachtouris
                self.C,
208 e711efe2 Stavros Sachtouris
                'perform_request',
209 e711efe2 Stavros Sachtouris
                return_value=self.FR()) as perform_req:
210 e711efe2 Stavros Sachtouris
            self.client.reboot_server(vm_id)
211 e711efe2 Stavros Sachtouris
            self.assertEqual(self.client.http_client.url, self.url)
212 e711efe2 Stavros Sachtouris
            self.assertEqual(
213 e711efe2 Stavros Sachtouris
                self.client.http_client.path,
214 e711efe2 Stavros Sachtouris
                '/servers/%s/action' % vm_id)
215 e711efe2 Stavros Sachtouris
            (method, data, a_headers, a_params) = perform_req.call_args[0]
216 e711efe2 Stavros Sachtouris
            self.assert_dicts_are_equal(
217 e711efe2 Stavros Sachtouris
                dict(reboot=dict(type='SOFT')),
218 e711efe2 Stavros Sachtouris
                loads(data))
219 c1004a00 Stavros Sachtouris
220 c1004a00 Stavros Sachtouris
    def test_create_server_metadata(self):
221 f1cab3a1 Stavros Sachtouris
        vm_id = vm_recv['server']['id']
222 f1cab3a1 Stavros Sachtouris
        metadata = dict(m1='v1', m2='v2', m3='v3')
223 f1cab3a1 Stavros Sachtouris
        self.FR.json = dict(meta=vm_recv['server'])
224 774cc124 Stavros Sachtouris
        with patch.object(
225 774cc124 Stavros Sachtouris
                self.C,
226 774cc124 Stavros Sachtouris
                'perform_request',
227 774cc124 Stavros Sachtouris
                return_value=self.FR()) as perform_req:
228 f1cab3a1 Stavros Sachtouris
            self.assertRaises(
229 f1cab3a1 Stavros Sachtouris
                ClientError,
230 f1cab3a1 Stavros Sachtouris
                self.client.create_server_metadata,
231 f1cab3a1 Stavros Sachtouris
                vm_id, 'key', 'value')
232 774cc124 Stavros Sachtouris
            self.FR.status_code = 201
233 f1cab3a1 Stavros Sachtouris
            for k, v in metadata.items():
234 f1cab3a1 Stavros Sachtouris
                r = self.client.create_server_metadata(vm_id, k, v)
235 f1cab3a1 Stavros Sachtouris
                self.assertEqual(self.client.http_client.url, self.url)
236 f1cab3a1 Stavros Sachtouris
                self.assertEqual(
237 f1cab3a1 Stavros Sachtouris
                    self.client.http_client.path,
238 f1cab3a1 Stavros Sachtouris
                    '/servers/%s/meta/%s' % (vm_id, k))
239 774cc124 Stavros Sachtouris
                (method, data, a_headers, a_params) = perform_req.call_args[0]
240 774cc124 Stavros Sachtouris
                self.assertEqual(dict(meta={k: v}), loads(data))
241 f1cab3a1 Stavros Sachtouris
                self.assert_dicts_are_equal(r, vm_recv['server'])
242 c1004a00 Stavros Sachtouris
243 c1004a00 Stavros Sachtouris
    def test_get_server_metadata(self):
244 774cc124 Stavros Sachtouris
        vm_id = vm_recv['server']['id']
245 774cc124 Stavros Sachtouris
        metadata = dict(m1='v1', m2='v2', m3='v3')
246 774cc124 Stavros Sachtouris
        with patch.object(self.C, 'perform_request', return_value=self.FR()):
247 774cc124 Stavros Sachtouris
            self.FR.json = dict(metadata=dict(values=metadata))
248 774cc124 Stavros Sachtouris
            r = self.client.get_server_metadata(vm_id)
249 774cc124 Stavros Sachtouris
            self.assertEqual(self.client.http_client.url, self.url)
250 774cc124 Stavros Sachtouris
            self.assertEqual(
251 774cc124 Stavros Sachtouris
                self.client.http_client.path,
252 774cc124 Stavros Sachtouris
                '/servers/%s/meta' % vm_id)
253 774cc124 Stavros Sachtouris
            self.assert_dicts_are_equal(r, metadata)
254 774cc124 Stavros Sachtouris
255 774cc124 Stavros Sachtouris
            for k, v in metadata.items():
256 774cc124 Stavros Sachtouris
                self.FR.json = dict(meta={k: v})
257 774cc124 Stavros Sachtouris
                r = self.client.get_server_metadata(vm_id, k)
258 774cc124 Stavros Sachtouris
                self.assertEqual(self.client.http_client.url, self.url)
259 774cc124 Stavros Sachtouris
                self.assertEqual(
260 774cc124 Stavros Sachtouris
                    self.client.http_client.path,
261 774cc124 Stavros Sachtouris
                    '/servers/%s/meta/%s' % (vm_id, k))
262 774cc124 Stavros Sachtouris
                self.assert_dicts_are_equal(r, {k: v})
263 c1004a00 Stavros Sachtouris
264 c1004a00 Stavros Sachtouris
    def test_update_server_metadata(self):
265 7bbaf88b Stavros Sachtouris
        vm_id = vm_recv['server']['id']
266 7bbaf88b Stavros Sachtouris
        metadata = dict(m1='v1', m2='v2', m3='v3')
267 7bbaf88b Stavros Sachtouris
        self.FR.json = dict(metadata=metadata)
268 7bbaf88b Stavros Sachtouris
        with patch.object(
269 7bbaf88b Stavros Sachtouris
                CycladesClientApi,
270 7bbaf88b Stavros Sachtouris
                'servers_post',
271 7bbaf88b Stavros Sachtouris
                return_value=self.FR()) as servers_post:
272 7bbaf88b Stavros Sachtouris
            r = self.client.update_server_metadata(vm_id, **metadata)
273 7bbaf88b Stavros Sachtouris
            self.assert_dicts_are_equal(r, metadata)
274 7bbaf88b Stavros Sachtouris
            (called_id, cmd) = servers_post.call_args[0]
275 7bbaf88b Stavros Sachtouris
            self.assertEqual(called_id, vm_id)
276 7bbaf88b Stavros Sachtouris
            self.assertEqual(cmd, 'meta')
277 7bbaf88b Stavros Sachtouris
            data = servers_post.call_args[1]['json_data']
278 7bbaf88b Stavros Sachtouris
            self.assert_dicts_are_equal(data, dict(metadata=metadata))
279 c1004a00 Stavros Sachtouris
280 c1004a00 Stavros Sachtouris
    def test_delete_server_metadata(self):
281 5ad6a119 Stavros Sachtouris
        vm_id = vm_recv['server']['id']
282 5ad6a119 Stavros Sachtouris
        key = 'metakey'
283 5ad6a119 Stavros Sachtouris
        with patch.object(
284 5ad6a119 Stavros Sachtouris
                CycladesClientApi,
285 5ad6a119 Stavros Sachtouris
                'servers_delete',
286 5ad6a119 Stavros Sachtouris
                return_value=self.FR()) as servers_delete:
287 5ad6a119 Stavros Sachtouris
            self.client.delete_server_metadata(vm_id, key)
288 5ad6a119 Stavros Sachtouris
            self.assertEqual(
289 5ad6a119 Stavros Sachtouris
                (vm_id, 'meta/' + key),
290 5ad6a119 Stavros Sachtouris
                servers_delete.call_args[0])
291 c1004a00 Stavros Sachtouris
292 c1004a00 Stavros Sachtouris
    def test_list_flavors(self):
293 8f5d38df Stavros Sachtouris
        self.FR.json = vm_list
294 8f5d38df Stavros Sachtouris
        self.FR.json = flavor_list
295 8f5d38df Stavros Sachtouris
        with patch.object(
296 8f5d38df Stavros Sachtouris
                self.C,
297 8f5d38df Stavros Sachtouris
                'perform_request',
298 8f5d38df Stavros Sachtouris
                return_value=self.FR()) as perform_req:
299 8f5d38df Stavros Sachtouris
            r = self.client.list_flavors()
300 8f5d38df Stavros Sachtouris
            self.assertEqual(self.client.http_client.url, self.url)
301 8f5d38df Stavros Sachtouris
            self.assertEqual(self.client.http_client.path, '/flavors')
302 8f5d38df Stavros Sachtouris
            (method, data, a_headers, a_params) = perform_req.call_args[0]
303 8f5d38df Stavros Sachtouris
            self.assert_dicts_are_equal(dict(values=r), flavor_list['flavors'])
304 8f5d38df Stavros Sachtouris
            r = self.client.list_flavors(detail=True)
305 8f5d38df Stavros Sachtouris
            self.assertEqual(self.client.http_client.url, self.url)
306 8f5d38df Stavros Sachtouris
            self.assertEqual(self.client.http_client.path, '/flavors/detail')
307 c1004a00 Stavros Sachtouris
308 8f5d38df Stavros Sachtouris
    """
309 c1004a00 Stavros Sachtouris
    def test_get_flavor_details(self):
310 c1004a00 Stavros Sachtouris
        r = self.client.get_flavor_details(self.flavorid)
311 257b931a Stavros Sachtouris
        self.assert_dicts_are_equal(self._flavor_details, r)
312 c1004a00 Stavros Sachtouris

313 c1004a00 Stavros Sachtouris
    def test_list_images(self):
314 c1004a00 Stavros Sachtouris
        r = self.client.list_images()
315 c1004a00 Stavros Sachtouris
        self.assertTrue(len(r) > 1)
316 c1004a00 Stavros Sachtouris
        r = self.client.list_images(detail=True)
317 c1004a00 Stavros Sachtouris
        for detailed_img in r:
318 c1004a00 Stavros Sachtouris
            if detailed_img['id'] == self.img:
319 c1004a00 Stavros Sachtouris
                break
320 257b931a Stavros Sachtouris
        self.assert_dicts_are_equal(detailed_img, self.img_details)
321 c1004a00 Stavros Sachtouris

322 c1004a00 Stavros Sachtouris
    def test_get_image_details(self):
323 c1004a00 Stavros Sachtouris
        r = self.client.get_image_details(self.img)
324 257b931a Stavros Sachtouris
        self.assert_dicts_are_equal(r, self.img_details)
325 c1004a00 Stavros Sachtouris

326 c1004a00 Stavros Sachtouris
    def test_get_image_metadata(self):
327 c1004a00 Stavros Sachtouris
        r = self.client.get_image_metadata(self.img)
328 257b931a Stavros Sachtouris
        self.assert_dicts_are_equal(
329 c1004a00 Stavros Sachtouris
            self.img_details['metadata']['values'], r)
330 c1004a00 Stavros Sachtouris
        for key, val in self.img_details['metadata']['values'].items():
331 c1004a00 Stavros Sachtouris
            r = self.client.get_image_metadata(self.img, key)
332 c1004a00 Stavros Sachtouris
            self.assertEqual(r[key], val)
333 c1004a00 Stavros Sachtouris

334 c1004a00 Stavros Sachtouris
    def test_shutdown_server(self):
335 c1004a00 Stavros Sachtouris
        self.client.shutdown_server(self.server1['id'])
336 c1004a00 Stavros Sachtouris
        self._wait_for_status(self.server1['id'], 'ACTIVE')
337 c1004a00 Stavros Sachtouris
        r = self.client.get_server_details(self.server1['id'])
338 c1004a00 Stavros Sachtouris
        self.assertEqual(r['status'], 'STOPPED')
339 c1004a00 Stavros Sachtouris

340 c1004a00 Stavros Sachtouris
    def test_start_server(self):
341 c1004a00 Stavros Sachtouris
        self.client.start_server(self.server1['id'])
342 c1004a00 Stavros Sachtouris
        self._wait_for_status(self.server1['id'], 'STOPPED')
343 c1004a00 Stavros Sachtouris
        r = self.client.get_server_details(self.server1['id'])
344 c1004a00 Stavros Sachtouris
        self.assertEqual(r['status'], 'ACTIVE')
345 c1004a00 Stavros Sachtouris

346 c1004a00 Stavros Sachtouris
    def test_get_server_console(self):
347 c1004a00 Stavros Sachtouris
        r = self.client.get_server_console(self.server2['id'])
348 c1004a00 Stavros Sachtouris
        self.assertTrue('host' in r)
349 c1004a00 Stavros Sachtouris
        self.assertTrue('password' in r)
350 c1004a00 Stavros Sachtouris
        self.assertTrue('port' in r)
351 c1004a00 Stavros Sachtouris
        self.assertTrue('type' in r)
352 c1004a00 Stavros Sachtouris

353 c1004a00 Stavros Sachtouris
    def test_get_firewall_profile(self):
354 c1004a00 Stavros Sachtouris
        self._wait_for_status(self.server1['id'], 'BUILD')
355 c1004a00 Stavros Sachtouris
        fprofile = self.client.get_firewall_profile(self.server1['id'])
356 c1004a00 Stavros Sachtouris
        self.assertTrue(fprofile in self.PROFILES)
357 c1004a00 Stavros Sachtouris

358 c1004a00 Stavros Sachtouris
    def test_set_firewall_profile(self):
359 c1004a00 Stavros Sachtouris
        self._wait_for_status(self.server1['id'], 'BUILD')
360 c1004a00 Stavros Sachtouris
        PROFILES = ['DISABLED', 'ENABLED', 'DISABLED', 'PROTECTED']
361 c1004a00 Stavros Sachtouris
        fprofile = self.client.get_firewall_profile(self.server1['id'])
362 c1004a00 Stavros Sachtouris
        print('')
363 c1004a00 Stavros Sachtouris
        count_success = 0
364 c1004a00 Stavros Sachtouris
        for counter, fprofile in enumerate(PROFILES):
365 c1004a00 Stavros Sachtouris
            npos = counter + 1
366 c1004a00 Stavros Sachtouris
            try:
367 c1004a00 Stavros Sachtouris
                nprofile = PROFILES[npos]
368 c1004a00 Stavros Sachtouris
            except IndexError:
369 c1004a00 Stavros Sachtouris
                nprofile = PROFILES[0]
370 c1004a00 Stavros Sachtouris
            print('\tprofile swap %s: %s -> %s' % (npos, fprofile, nprofile))
371 c1004a00 Stavros Sachtouris
            self.client.set_firewall_profile(self.server1['id'], nprofile)
372 c1004a00 Stavros Sachtouris
            time.sleep(0.5)
373 c1004a00 Stavros Sachtouris
            self.client.reboot_server(self.server1['id'], hard=True)
374 c1004a00 Stavros Sachtouris
            time.sleep(1)
375 c1004a00 Stavros Sachtouris
            self._wait_for_status(self.server1['id'], 'REBOOT')
376 c1004a00 Stavros Sachtouris
            time.sleep(0.5)
377 c1004a00 Stavros Sachtouris
            changed = self.client.get_firewall_profile(self.server1['id'])
378 c1004a00 Stavros Sachtouris
            try:
379 c1004a00 Stavros Sachtouris
                self.assertEqual(changed, nprofile)
380 c1004a00 Stavros Sachtouris
            except AssertionError as err:
381 c1004a00 Stavros Sachtouris
                if count_success:
382 c1004a00 Stavros Sachtouris
                    print('\tFAIL in swap #%s' % npos)
383 c1004a00 Stavros Sachtouris
                    break
384 c1004a00 Stavros Sachtouris
                else:
385 c1004a00 Stavros Sachtouris
                    raise err
386 c1004a00 Stavros Sachtouris
            count_success += 1
387 c1004a00 Stavros Sachtouris

388 c1004a00 Stavros Sachtouris
    def test_get_server_stats(self):
389 c1004a00 Stavros Sachtouris
        r = self.client.get_server_stats(self.server1['id'])
390 c1004a00 Stavros Sachtouris
        it = ('cpuBar', 'cpuTimeSeries', 'netBar', 'netTimeSeries', 'refresh')
391 c1004a00 Stavros Sachtouris
        for term in it:
392 c1004a00 Stavros Sachtouris
            self.assertTrue(term in r)
393 c1004a00 Stavros Sachtouris

394 c1004a00 Stavros Sachtouris
    def test_create_network(self):
395 c1004a00 Stavros Sachtouris
        print('\twith no params')
396 c1004a00 Stavros Sachtouris
        self.network1 = self._create_network(self.netname1)
397 c1004a00 Stavros Sachtouris
        self._wait_for_network(self.network1['id'], 'ACTIVE')
398 c1004a00 Stavros Sachtouris
        n1id = self.network1['id']
399 c1004a00 Stavros Sachtouris
        self.network1 = self.client.get_network_details(n1id)
400 c1004a00 Stavros Sachtouris
        nets = self.client.list_networks(self.network1['id'])
401 c1004a00 Stavros Sachtouris
        chosen = [net for net in nets if net['id'] == n1id][0]
402 c1004a00 Stavros Sachtouris
        chosen.pop('updated')
403 c1004a00 Stavros Sachtouris
        net1 = dict(self.network1)
404 c1004a00 Stavros Sachtouris
        net1.pop('updated')
405 257b931a Stavros Sachtouris
        self.assert_dicts_are_equal(chosen, net1)
406 c1004a00 Stavros Sachtouris
        for param, val in dict(
407 c1004a00 Stavros Sachtouris
                cidr='192.168.0.0/24',
408 c1004a00 Stavros Sachtouris
                gateway='192.168.0.1',
409 c1004a00 Stavros Sachtouris
                type='MAC_FILTERED',
410 c1004a00 Stavros Sachtouris
                dhcp=True).items():
411 c1004a00 Stavros Sachtouris
            print('\tdelete %s to avoid max net limit' % n1id)
412 c1004a00 Stavros Sachtouris
            self._delete_network(n1id)
413 c1004a00 Stavros Sachtouris
            kwargs = {param: val}
414 c1004a00 Stavros Sachtouris
            print('\twith %s=%s' % (param, val))
415 c1004a00 Stavros Sachtouris
            self.network1 = self._create_network(self.netname1, **kwargs)
416 c1004a00 Stavros Sachtouris
            n1id = self.network1['id']
417 c1004a00 Stavros Sachtouris
            self._wait_for_network(n1id, 'ACTIVE')
418 c1004a00 Stavros Sachtouris
            self.network1 = self.client.get_network_details(n1id)
419 c1004a00 Stavros Sachtouris
            self.assertEqual(self.network1[param], val)
420 c1004a00 Stavros Sachtouris

421 c1004a00 Stavros Sachtouris
    def test_connect_server(self):
422 c1004a00 Stavros Sachtouris
        self.client.connect_server(self.server1['id'], self.network1['id'])
423 c1004a00 Stavros Sachtouris
        self.assertTrue(self._wait_for_nic(
424 c1004a00 Stavros Sachtouris
            self.network1['id'],
425 c1004a00 Stavros Sachtouris
            self.server1['id']))
426 c1004a00 Stavros Sachtouris

427 c1004a00 Stavros Sachtouris
    def test_disconnect_server(self):
428 c1004a00 Stavros Sachtouris
        self.client.disconnect_server(self.server1['id'], self.network1['id'])
429 c1004a00 Stavros Sachtouris
        self.assertTrue(self._wait_for_nic(
430 c1004a00 Stavros Sachtouris
            self.network1['id'],
431 c1004a00 Stavros Sachtouris
            self.server1['id'],
432 c1004a00 Stavros Sachtouris
            in_creation=False))
433 c1004a00 Stavros Sachtouris

434 c1004a00 Stavros Sachtouris
    def _test_0260_wait_for_second_network(self):
435 c1004a00 Stavros Sachtouris
        self.server1 = self._create_server(
436 c1004a00 Stavros Sachtouris
            self.servname1,
437 c1004a00 Stavros Sachtouris
            self.flavorid,
438 c1004a00 Stavros Sachtouris
            self.img)
439 c1004a00 Stavros Sachtouris
        self.network2 = self._create_network(self.netname2)
440 c1004a00 Stavros Sachtouris
        self._wait_for_status(self.server1['id'], 'BUILD')
441 c1004a00 Stavros Sachtouris
        self._wait_for_network(self.network2['id'], 'ACTIVE')
442 c1004a00 Stavros Sachtouris
        self._test_0280_list_server_nics()
443 c1004a00 Stavros Sachtouris

444 c1004a00 Stavros Sachtouris
    def _test_0280_list_server_nics(self):
445 c1004a00 Stavros Sachtouris
        r = self.client.list_server_nics(self.server1['id'])
446 c1004a00 Stavros Sachtouris
        len0 = len(r)
447 c1004a00 Stavros Sachtouris
        self.client.connect_server(self.server1['id'], self.network2['id'])
448 c1004a00 Stavros Sachtouris
        self.assertTrue(self._wait_for_nic(
449 c1004a00 Stavros Sachtouris
            self.network2['id'],
450 c1004a00 Stavros Sachtouris
            self.server1['id']))
451 c1004a00 Stavros Sachtouris
        r = self.client.list_server_nics(self.server1['id'])
452 c1004a00 Stavros Sachtouris
        self.assertTrue(len(r) > len0)
453 c1004a00 Stavros Sachtouris

454 c1004a00 Stavros Sachtouris
    def test_list_networks(self):
455 c1004a00 Stavros Sachtouris
        r = self.client.list_networks()
456 c1004a00 Stavros Sachtouris
        self.assertTrue(len(r) > 1)
457 c1004a00 Stavros Sachtouris
        ids = [net['id'] for net in r]
458 c1004a00 Stavros Sachtouris
        names = [net['name'] for net in r]
459 c1004a00 Stavros Sachtouris
        self.assertTrue('1' in ids)
460 c1004a00 Stavros Sachtouris
        #self.assertTrue('public' in names)
461 c1004a00 Stavros Sachtouris
        self.assertTrue(self.network1['id'] in ids)
462 c1004a00 Stavros Sachtouris
        self.assertTrue(self.network1['name'] in names)
463 c1004a00 Stavros Sachtouris

464 c1004a00 Stavros Sachtouris
        r = self.client.list_networks(detail=True)
465 c1004a00 Stavros Sachtouris
        ids = [net['id'] for net in r]
466 c1004a00 Stavros Sachtouris
        names = [net['name'] for net in r]
467 c1004a00 Stavros Sachtouris
        for net in r:
468 c1004a00 Stavros Sachtouris
            self.assertTrue(net['id'] in ids)
469 c1004a00 Stavros Sachtouris
            self.assertTrue(net['name'] in names)
470 c1004a00 Stavros Sachtouris
            for term in ('status', 'updated', 'created'):
471 c1004a00 Stavros Sachtouris
                self.assertTrue(term in net.keys())
472 c1004a00 Stavros Sachtouris

473 c1004a00 Stavros Sachtouris
    def test_get_network_details(self):
474 c1004a00 Stavros Sachtouris
        r = self.client.get_network_details(self.network1['id'])
475 c1004a00 Stavros Sachtouris
        net1 = dict(self.network1)
476 c1004a00 Stavros Sachtouris
        net1.pop('status')
477 c1004a00 Stavros Sachtouris
        net1.pop('updated', None)
478 c1004a00 Stavros Sachtouris
        net1.pop('attachments')
479 c1004a00 Stavros Sachtouris
        r.pop('status')
480 c1004a00 Stavros Sachtouris
        r.pop('updated', None)
481 c1004a00 Stavros Sachtouris
        r.pop('attachments')
482 257b931a Stavros Sachtouris
        self.assert_dicts_are_equal(net1, r)
483 c1004a00 Stavros Sachtouris

484 c1004a00 Stavros Sachtouris
    def test_update_network_name(self):
485 c1004a00 Stavros Sachtouris
        updated_name = self.netname2 + '_upd'
486 c1004a00 Stavros Sachtouris
        self.client.update_network_name(self.network2['id'], updated_name)
487 c1004a00 Stavros Sachtouris

488 c1004a00 Stavros Sachtouris
        def netwait(wait):
489 c1004a00 Stavros Sachtouris
            r = self.client.get_network_details(self.network2['id'])
490 c1004a00 Stavros Sachtouris
            if r['name'] == updated_name:
491 c1004a00 Stavros Sachtouris
                return
492 c1004a00 Stavros Sachtouris
            time.sleep(wait)
493 c1004a00 Stavros Sachtouris
        self.do_with_progress_bar(
494 c1004a00 Stavros Sachtouris
            netwait,
495 c1004a00 Stavros Sachtouris
            'Network %s name is changing:' % self.network2['id'],
496 c1004a00 Stavros Sachtouris
            self._waits[:5])
497 c1004a00 Stavros Sachtouris

498 c1004a00 Stavros Sachtouris
        r = self.client.get_network_details(self.network2['id'])
499 c1004a00 Stavros Sachtouris
        self.assertEqual(r['name'], updated_name)
500 c1004a00 Stavros Sachtouris

501 c1004a00 Stavros Sachtouris
    def test_delete_image(self):
502 c1004a00 Stavros Sachtouris
        images = self.client.list_images()
503 c1004a00 Stavros Sachtouris
        self.client.delete_image(images[2]['id'])
504 c1004a00 Stavros Sachtouris
        try:
505 c1004a00 Stavros Sachtouris
            r = self.client.get_image_details(images[2]['id'], success=(400))
506 c1004a00 Stavros Sachtouris
        except ClientError as err:
507 c1004a00 Stavros Sachtouris
            self.assertEqual(err.status, 404)
508 c1004a00 Stavros Sachtouris

509 c1004a00 Stavros Sachtouris
    def test_create_image_metadata(self):
510 c1004a00 Stavros Sachtouris
        r = self.client.create_image_metadata(self.img, 'mykey', 'myval')
511 c1004a00 Stavros Sachtouris
        self.assertEqual(r['mykey'], 'myval')
512 c1004a00 Stavros Sachtouris

513 c1004a00 Stavros Sachtouris
    def test_update_image_metadata(self):
514 c1004a00 Stavros Sachtouris
        r = self.client.create_image_metadata(self.img, 'mykey0', 'myval')
515 c1004a00 Stavros Sachtouris
        r = self.client.update_image_metadata(self.img, 'mykey0', 'myval0')
516 c1004a00 Stavros Sachtouris
        self.assertEqual(r['mykey0'], 'myval0')
517 c1004a00 Stavros Sachtouris

518 c1004a00 Stavros Sachtouris
    def test_delete_image_metadata(self):
519 c1004a00 Stavros Sachtouris
        self.client.create_image_metadata(self.img, 'mykey1', 'myval1')
520 c1004a00 Stavros Sachtouris
        self.client.delete_image_metadata(self.img, 'mykey1')
521 c1004a00 Stavros Sachtouris
        r = self.client.get_image_metadata(self.img)
522 c1004a00 Stavros Sachtouris
        self.assertNotEqual('mykey1' in r)
523 c1004a00 Stavros Sachtouris
    """