Statistics
| Branch: | Tag: | Revision:

root / kamaki / clients / test / cyclades.py @ 03493855

History | View | Annotate | Download (17.2 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 03493855 Stavros Sachtouris
39 03493855 Stavros Sachtouris
img_ref = "1m4g3-r3f3r3nc3"
40 03493855 Stavros Sachtouris
vm_name = "my new VM"
41 03493855 Stavros Sachtouris
fid = 42
42 03493855 Stavros Sachtouris
vm_send = dict(server=dict(
43 03493855 Stavros Sachtouris
    flavorRef=fid,
44 03493855 Stavros Sachtouris
    name=vm_name,
45 03493855 Stavros Sachtouris
    imageRef=img_ref,
46 03493855 Stavros Sachtouris
    metadata=dict(os="debian", users="root")))
47 03493855 Stavros Sachtouris
vm_recv = dict(server=dict(
48 03493855 Stavros Sachtouris
    status="BUILD",
49 03493855 Stavros Sachtouris
    updated="2013-03-01T10:04:00.637152+00:00",
50 03493855 Stavros Sachtouris
    hostId="",
51 03493855 Stavros Sachtouris
    name=vm_name, imageRef=img_ref,
52 03493855 Stavros Sachtouris
    created="2013-03-01T10:04:00.087324+00:00",
53 03493855 Stavros Sachtouris
    flavorRef=fid,
54 03493855 Stavros Sachtouris
    adminPass="n0n3sh@11p@55",
55 03493855 Stavros Sachtouris
    suspended=False,
56 03493855 Stavros Sachtouris
    progress=0,
57 03493855 Stavros Sachtouris
    id=31173,
58 03493855 Stavros Sachtouris
    metadata=dict(values=dict(os="debian", users="root"))))
59 03493855 Stavros Sachtouris
img_recv = dict(image=dict(
60 03493855 Stavros Sachtouris
    status="ACTIVE",
61 03493855 Stavros Sachtouris
    updated="2013-02-26T11:10:14+00:00",
62 03493855 Stavros Sachtouris
    name="Debian Base",
63 03493855 Stavros Sachtouris
    created="2013-02-26T11:03:29+00:00",
64 03493855 Stavros Sachtouris
    progress=100,
65 03493855 Stavros Sachtouris
    id=img_ref,
66 03493855 Stavros Sachtouris
    metadata=dict(values=dict(
67 03493855 Stavros Sachtouris
        partition_table="msdos",
68 03493855 Stavros Sachtouris
        kernel="2.6.32",
69 03493855 Stavros Sachtouris
        osfamily="linux",
70 03493855 Stavros Sachtouris
        users="root",
71 03493855 Stavros Sachtouris
        gui="No GUI",
72 03493855 Stavros Sachtouris
        sortorder="1",
73 03493855 Stavros Sachtouris
        os="debian",
74 03493855 Stavros Sachtouris
        root_partition="1",
75 03493855 Stavros Sachtouris
        description="Debian 6.0.7 (Squeeze) Base System"))))
76 03493855 Stavros Sachtouris
77 03493855 Stavros Sachtouris
78 03493855 Stavros Sachtouris
class Cyclades(TestCase):
79 03493855 Stavros Sachtouris
80 03493855 Stavros Sachtouris
    def assert_dicts_are_deeply_equal(self, d1, d2):
81 03493855 Stavros Sachtouris
        for k, v in d1.items():
82 03493855 Stavros Sachtouris
            self.assertTrue(k in d2)
83 03493855 Stavros Sachtouris
            if isinstance(v, dict):
84 03493855 Stavros Sachtouris
                self.assert_dicts_are_deeply_equal(v, d2[k])
85 03493855 Stavros Sachtouris
            else:
86 03493855 Stavros Sachtouris
                self.assertEqual(unicode(v), unicode(d2[k]))
87 03493855 Stavros Sachtouris
88 03493855 Stavros Sachtouris
    class FR(object):
89 03493855 Stavros Sachtouris
        """FR stands for Fake Response"""
90 03493855 Stavros Sachtouris
        json = vm_recv
91 03493855 Stavros Sachtouris
        headers = {}
92 03493855 Stavros Sachtouris
        content = json
93 03493855 Stavros Sachtouris
        status = None
94 03493855 Stavros Sachtouris
        status_code = 200
95 03493855 Stavros Sachtouris
96 03493855 Stavros Sachtouris
        def release(self):
97 03493855 Stavros Sachtouris
            pass
98 c1004a00 Stavros Sachtouris
99 c1004a00 Stavros Sachtouris
    """Set up a Cyclades thorough test"""
100 c1004a00 Stavros Sachtouris
    def setUp(self):
101 03493855 Stavros Sachtouris
        self.url = 'http://cyclades.example.com'
102 03493855 Stavros Sachtouris
        self.token = 'cyc14d3s70k3n'
103 03493855 Stavros Sachtouris
        from kamaki.clients.cyclades import CycladesClient
104 03493855 Stavros Sachtouris
        self.client = CycladesClient(self.url, self.token)
105 03493855 Stavros Sachtouris
        from kamaki.clients.connection.kamakicon import KamakiHTTPConnection
106 03493855 Stavros Sachtouris
        self.C = KamakiHTTPConnection
107 c1004a00 Stavros Sachtouris
108 c1004a00 Stavros Sachtouris
    def tearDown(self):
109 03493855 Stavros Sachtouris
        pass
110 c1004a00 Stavros Sachtouris
111 c1004a00 Stavros Sachtouris
    def test_create_server(self):
112 03493855 Stavros Sachtouris
        self.client.get_image_details = Mock(return_value=img_recv['image'])
113 03493855 Stavros Sachtouris
        with patch.object(Client, 'request', side_effect=ClientError(
114 03493855 Stavros Sachtouris
                'REQUEST ENTITY TOO LARGE',
115 03493855 Stavros Sachtouris
                status=403)):
116 03493855 Stavros Sachtouris
            self.assertRaises(
117 03493855 Stavros Sachtouris
                ClientError,
118 03493855 Stavros Sachtouris
                self.client.create_server,
119 03493855 Stavros Sachtouris
                vm_name, fid, img_ref)
120 03493855 Stavros Sachtouris
121 03493855 Stavros Sachtouris
        with patch.object(
122 03493855 Stavros Sachtouris
                self.C,
123 03493855 Stavros Sachtouris
                'perform_request',
124 03493855 Stavros Sachtouris
                return_value=self.FR()) as perform_req:
125 03493855 Stavros Sachtouris
            self.assertRaises(
126 03493855 Stavros Sachtouris
                ClientError,
127 03493855 Stavros Sachtouris
                self.client.create_server,
128 03493855 Stavros Sachtouris
                vm_name, fid, img_ref)
129 03493855 Stavros Sachtouris
            self.FR.status_code = 202
130 03493855 Stavros Sachtouris
            r = self.client.create_server(vm_name, fid, img_ref)
131 03493855 Stavros Sachtouris
            self.assertEqual(self.client.http_client.url, self.url)
132 03493855 Stavros Sachtouris
            self.assertEqual(self.client.http_client.path, '/servers')
133 03493855 Stavros Sachtouris
            (method, data, a_headers, a_params) = perform_req.call_args[0]
134 03493855 Stavros Sachtouris
            self.assert_dicts_are_deeply_equal(loads(data), vm_send)
135 03493855 Stavros Sachtouris
            self.assert_dicts_are_deeply_equal(r, vm_recv['server'])
136 03493855 Stavros Sachtouris
            prsn = 'Personality string (does not work with real servers)'
137 03493855 Stavros Sachtouris
            self.client.create_server(vm_name, fid, img_ref, prsn)
138 03493855 Stavros Sachtouris
            (method, data, a_headers, a_params) = perform_req.call_args[0]
139 03493855 Stavros Sachtouris
            data = loads(data)
140 03493855 Stavros Sachtouris
            self.assertTrue('personality' in data['server'])
141 03493855 Stavros Sachtouris
            self.assertEqual(prsn, data['server']['personality'])
142 c1004a00 Stavros Sachtouris
143 03493855 Stavros Sachtouris
    """
144 c1004a00 Stavros Sachtouris
    def test_list_servers(self):
145 c1004a00 Stavros Sachtouris

146 c1004a00 Stavros Sachtouris
        servers = self.client.list_servers()
147 c1004a00 Stavros Sachtouris
        dservers = self.client.list_servers(detail=True)
148 c1004a00 Stavros Sachtouris

149 03493855 Stavros Sachtouris
        ""detailed and simple are same size""
150 c1004a00 Stavros Sachtouris
        self.assertEqual(len(dservers), len(servers))
151 c1004a00 Stavros Sachtouris
        for i in range(len(servers)):
152 c1004a00 Stavros Sachtouris
            for field in (
153 c1004a00 Stavros Sachtouris
                    'created',
154 c1004a00 Stavros Sachtouris
                    'flavorRef',
155 c1004a00 Stavros Sachtouris
                    'hostId',
156 c1004a00 Stavros Sachtouris
                    'imageRef',
157 c1004a00 Stavros Sachtouris
                    'progress',
158 c1004a00 Stavros Sachtouris
                    'status',
159 c1004a00 Stavros Sachtouris
                    'updated'):
160 c1004a00 Stavros Sachtouris
                self.assertFalse(field in servers[i])
161 c1004a00 Stavros Sachtouris
                self.assertTrue(field in dservers[i])
162 c1004a00 Stavros Sachtouris

163 03493855 Stavros Sachtouris
        ""detailed and simple contain same names""
164 c1004a00 Stavros Sachtouris
        names = sorted(map(lambda x: x["name"], servers))
165 c1004a00 Stavros Sachtouris
        dnames = sorted(map(lambda x: x["name"], dservers))
166 c1004a00 Stavros Sachtouris
        self.assertEqual(names, dnames)
167 c1004a00 Stavros Sachtouris

168 c1004a00 Stavros Sachtouris
    def _test_0030_wait_test_servers_to_build(self):
169 c1004a00 Stavros Sachtouris
        self.server1 = self._create_server(
170 c1004a00 Stavros Sachtouris
            self.servname1,
171 c1004a00 Stavros Sachtouris
            self.flavorid,
172 c1004a00 Stavros Sachtouris
            self.img)
173 c1004a00 Stavros Sachtouris
        self._wait_for_status(self.server1['id'], 'BUILD')
174 c1004a00 Stavros Sachtouris
        self._test_0040_get_server_details()
175 c1004a00 Stavros Sachtouris

176 c1004a00 Stavros Sachtouris
    def _test_0040_get_server_details(self):
177 c1004a00 Stavros Sachtouris
        self.server1 = self._create_server(
178 c1004a00 Stavros Sachtouris
            self.servname1,
179 c1004a00 Stavros Sachtouris
            self.flavorid,
180 c1004a00 Stavros Sachtouris
            self.img)
181 c1004a00 Stavros Sachtouris
        self._test_0050_update_server_name()
182 c1004a00 Stavros Sachtouris

183 c1004a00 Stavros Sachtouris
    def _test_0050_update_server_name(self):
184 c1004a00 Stavros Sachtouris
        new_name = self.servname1 + '_new_name'
185 c1004a00 Stavros Sachtouris
        self.client.update_server_name(self.server1['id'], new_name)
186 c1004a00 Stavros Sachtouris
        r = self.client.get_server_details(
187 c1004a00 Stavros Sachtouris
            self.server1['id'],
188 c1004a00 Stavros Sachtouris
            success=(200, 400))
189 c1004a00 Stavros Sachtouris
        self.assertEqual(r['name'], new_name)
190 c1004a00 Stavros Sachtouris
        changed = self.servers.pop(self.servname1)
191 c1004a00 Stavros Sachtouris
        changed['name'] = new_name
192 c1004a00 Stavros Sachtouris
        self.servers[new_name] = changed
193 c1004a00 Stavros Sachtouris

194 c1004a00 Stavros Sachtouris
    def test_reboot_server(self):
195 c1004a00 Stavros Sachtouris
        print('')
196 c1004a00 Stavros Sachtouris
        self._wait_for_status(self.server1['id'], 'REBOOT')
197 c1004a00 Stavros Sachtouris
        self._wait_for_status(self.server2['id'], 'REBOOT')
198 c1004a00 Stavros Sachtouris

199 c1004a00 Stavros Sachtouris
    def test_create_server_metadata(self):
200 c1004a00 Stavros Sachtouris
        r1 = self.client.create_server_metadata(
201 c1004a00 Stavros Sachtouris
            self.server1['id'],
202 c1004a00 Stavros Sachtouris
            'mymeta',
203 c1004a00 Stavros Sachtouris
            'mymeta val')
204 c1004a00 Stavros Sachtouris
        self.assertTrue('mymeta' in r1)
205 c1004a00 Stavros Sachtouris
        r2 = self.client.get_server_metadata(self.server1['id'], 'mymeta')
206 c1004a00 Stavros Sachtouris
        self.assert_dicts_are_deeply_equal(r1, r2)
207 c1004a00 Stavros Sachtouris

208 c1004a00 Stavros Sachtouris
    def test_get_server_metadata(self):
209 c1004a00 Stavros Sachtouris
        self.client.create_server_metadata(
210 c1004a00 Stavros Sachtouris
            self.server1['id'],
211 c1004a00 Stavros Sachtouris
            'mymeta_0',
212 c1004a00 Stavros Sachtouris
            'val_0')
213 c1004a00 Stavros Sachtouris
        r = self.client.get_server_metadata(self.server1['id'], 'mymeta_0')
214 c1004a00 Stavros Sachtouris
        self.assertEqual(r['mymeta_0'], 'val_0')
215 c1004a00 Stavros Sachtouris

216 c1004a00 Stavros Sachtouris
    def test_update_server_metadata(self):
217 c1004a00 Stavros Sachtouris
        r1 = self.client.create_server_metadata(
218 c1004a00 Stavros Sachtouris
            self.server1['id'],
219 c1004a00 Stavros Sachtouris
            'mymeta3',
220 c1004a00 Stavros Sachtouris
            'val2')
221 c1004a00 Stavros Sachtouris
        self.assertTrue('mymeta3'in r1)
222 c1004a00 Stavros Sachtouris
        r2 = self.client.update_server_metadata(
223 c1004a00 Stavros Sachtouris
            self.server1['id'],
224 c1004a00 Stavros Sachtouris
            mymeta3='val3')
225 c1004a00 Stavros Sachtouris
        self.assertTrue(r2['mymeta3'], 'val3')
226 c1004a00 Stavros Sachtouris

227 c1004a00 Stavros Sachtouris
    def test_delete_server_metadata(self):
228 c1004a00 Stavros Sachtouris
        r1 = self.client.create_server_metadata(
229 c1004a00 Stavros Sachtouris
            self.server1['id'],
230 c1004a00 Stavros Sachtouris
            'mymeta',
231 c1004a00 Stavros Sachtouris
            'val')
232 c1004a00 Stavros Sachtouris
        self.assertTrue('mymeta' in r1)
233 c1004a00 Stavros Sachtouris
        self.client.delete_server_metadata(self.server1['id'], 'mymeta')
234 c1004a00 Stavros Sachtouris
        try:
235 c1004a00 Stavros Sachtouris
            self.client.get_server_metadata(self.server1['id'], 'mymeta')
236 c1004a00 Stavros Sachtouris
            raise ClientError('Wrong Error', status=100)
237 c1004a00 Stavros Sachtouris
        except ClientError as err:
238 c1004a00 Stavros Sachtouris
            self.assertEqual(err.status, 404)
239 c1004a00 Stavros Sachtouris

240 c1004a00 Stavros Sachtouris
    def test_list_flavors(self):
241 c1004a00 Stavros Sachtouris
        r = self.client.list_flavors()
242 c1004a00 Stavros Sachtouris
        self.assertTrue(len(r) > 1)
243 c1004a00 Stavros Sachtouris
        r = self.client.list_flavors(detail=True)
244 c1004a00 Stavros Sachtouris
        self.assertTrue('SNF:disk_template' in r[0])
245 c1004a00 Stavros Sachtouris

246 c1004a00 Stavros Sachtouris
    def test_get_flavor_details(self):
247 c1004a00 Stavros Sachtouris
        r = self.client.get_flavor_details(self.flavorid)
248 c1004a00 Stavros Sachtouris
        self.assert_dicts_are_deeply_equal(self._flavor_details, r)
249 c1004a00 Stavros Sachtouris

250 c1004a00 Stavros Sachtouris
    def test_list_images(self):
251 c1004a00 Stavros Sachtouris
        r = self.client.list_images()
252 c1004a00 Stavros Sachtouris
        self.assertTrue(len(r) > 1)
253 c1004a00 Stavros Sachtouris
        r = self.client.list_images(detail=True)
254 c1004a00 Stavros Sachtouris
        for detailed_img in r:
255 c1004a00 Stavros Sachtouris
            if detailed_img['id'] == self.img:
256 c1004a00 Stavros Sachtouris
                break
257 c1004a00 Stavros Sachtouris
        self.assert_dicts_are_deeply_equal(detailed_img, self.img_details)
258 c1004a00 Stavros Sachtouris

259 c1004a00 Stavros Sachtouris
    def test_get_image_details(self):
260 c1004a00 Stavros Sachtouris
        r = self.client.get_image_details(self.img)
261 c1004a00 Stavros Sachtouris
        self.assert_dicts_are_deeply_equal(r, self.img_details)
262 c1004a00 Stavros Sachtouris

263 c1004a00 Stavros Sachtouris
    def test_get_image_metadata(self):
264 c1004a00 Stavros Sachtouris
        r = self.client.get_image_metadata(self.img)
265 c1004a00 Stavros Sachtouris
        self.assert_dicts_are_deeply_equal(
266 c1004a00 Stavros Sachtouris
            self.img_details['metadata']['values'], r)
267 c1004a00 Stavros Sachtouris
        for key, val in self.img_details['metadata']['values'].items():
268 c1004a00 Stavros Sachtouris
            r = self.client.get_image_metadata(self.img, key)
269 c1004a00 Stavros Sachtouris
            self.assertEqual(r[key], val)
270 c1004a00 Stavros Sachtouris

271 c1004a00 Stavros Sachtouris
    def test_shutdown_server(self):
272 c1004a00 Stavros Sachtouris
        self.client.shutdown_server(self.server1['id'])
273 c1004a00 Stavros Sachtouris
        self._wait_for_status(self.server1['id'], 'ACTIVE')
274 c1004a00 Stavros Sachtouris
        r = self.client.get_server_details(self.server1['id'])
275 c1004a00 Stavros Sachtouris
        self.assertEqual(r['status'], 'STOPPED')
276 c1004a00 Stavros Sachtouris

277 c1004a00 Stavros Sachtouris
    def test_start_server(self):
278 c1004a00 Stavros Sachtouris
        self.client.start_server(self.server1['id'])
279 c1004a00 Stavros Sachtouris
        self._wait_for_status(self.server1['id'], 'STOPPED')
280 c1004a00 Stavros Sachtouris
        r = self.client.get_server_details(self.server1['id'])
281 c1004a00 Stavros Sachtouris
        self.assertEqual(r['status'], 'ACTIVE')
282 c1004a00 Stavros Sachtouris

283 c1004a00 Stavros Sachtouris
    def test_get_server_console(self):
284 c1004a00 Stavros Sachtouris
        r = self.client.get_server_console(self.server2['id'])
285 c1004a00 Stavros Sachtouris
        self.assertTrue('host' in r)
286 c1004a00 Stavros Sachtouris
        self.assertTrue('password' in r)
287 c1004a00 Stavros Sachtouris
        self.assertTrue('port' in r)
288 c1004a00 Stavros Sachtouris
        self.assertTrue('type' in r)
289 c1004a00 Stavros Sachtouris

290 c1004a00 Stavros Sachtouris
    def test_get_firewall_profile(self):
291 c1004a00 Stavros Sachtouris
        self._wait_for_status(self.server1['id'], 'BUILD')
292 c1004a00 Stavros Sachtouris
        fprofile = self.client.get_firewall_profile(self.server1['id'])
293 c1004a00 Stavros Sachtouris
        self.assertTrue(fprofile in self.PROFILES)
294 c1004a00 Stavros Sachtouris

295 c1004a00 Stavros Sachtouris
    def test_set_firewall_profile(self):
296 c1004a00 Stavros Sachtouris
        self._wait_for_status(self.server1['id'], 'BUILD')
297 c1004a00 Stavros Sachtouris
        PROFILES = ['DISABLED', 'ENABLED', 'DISABLED', 'PROTECTED']
298 c1004a00 Stavros Sachtouris
        fprofile = self.client.get_firewall_profile(self.server1['id'])
299 c1004a00 Stavros Sachtouris
        print('')
300 c1004a00 Stavros Sachtouris
        count_success = 0
301 c1004a00 Stavros Sachtouris
        for counter, fprofile in enumerate(PROFILES):
302 c1004a00 Stavros Sachtouris
            npos = counter + 1
303 c1004a00 Stavros Sachtouris
            try:
304 c1004a00 Stavros Sachtouris
                nprofile = PROFILES[npos]
305 c1004a00 Stavros Sachtouris
            except IndexError:
306 c1004a00 Stavros Sachtouris
                nprofile = PROFILES[0]
307 c1004a00 Stavros Sachtouris
            print('\tprofile swap %s: %s -> %s' % (npos, fprofile, nprofile))
308 c1004a00 Stavros Sachtouris
            self.client.set_firewall_profile(self.server1['id'], nprofile)
309 c1004a00 Stavros Sachtouris
            time.sleep(0.5)
310 c1004a00 Stavros Sachtouris
            self.client.reboot_server(self.server1['id'], hard=True)
311 c1004a00 Stavros Sachtouris
            time.sleep(1)
312 c1004a00 Stavros Sachtouris
            self._wait_for_status(self.server1['id'], 'REBOOT')
313 c1004a00 Stavros Sachtouris
            time.sleep(0.5)
314 c1004a00 Stavros Sachtouris
            changed = self.client.get_firewall_profile(self.server1['id'])
315 c1004a00 Stavros Sachtouris
            try:
316 c1004a00 Stavros Sachtouris
                self.assertEqual(changed, nprofile)
317 c1004a00 Stavros Sachtouris
            except AssertionError as err:
318 c1004a00 Stavros Sachtouris
                if count_success:
319 c1004a00 Stavros Sachtouris
                    print('\tFAIL in swap #%s' % npos)
320 c1004a00 Stavros Sachtouris
                    break
321 c1004a00 Stavros Sachtouris
                else:
322 c1004a00 Stavros Sachtouris
                    raise err
323 c1004a00 Stavros Sachtouris
            count_success += 1
324 c1004a00 Stavros Sachtouris

325 c1004a00 Stavros Sachtouris
    def test_get_server_stats(self):
326 c1004a00 Stavros Sachtouris
        r = self.client.get_server_stats(self.server1['id'])
327 c1004a00 Stavros Sachtouris
        it = ('cpuBar', 'cpuTimeSeries', 'netBar', 'netTimeSeries', 'refresh')
328 c1004a00 Stavros Sachtouris
        for term in it:
329 c1004a00 Stavros Sachtouris
            self.assertTrue(term in r)
330 c1004a00 Stavros Sachtouris

331 c1004a00 Stavros Sachtouris
    def test_create_network(self):
332 c1004a00 Stavros Sachtouris
        print('\twith no params')
333 c1004a00 Stavros Sachtouris
        self.network1 = self._create_network(self.netname1)
334 c1004a00 Stavros Sachtouris
        self._wait_for_network(self.network1['id'], 'ACTIVE')
335 c1004a00 Stavros Sachtouris
        n1id = self.network1['id']
336 c1004a00 Stavros Sachtouris
        self.network1 = self.client.get_network_details(n1id)
337 c1004a00 Stavros Sachtouris
        nets = self.client.list_networks(self.network1['id'])
338 c1004a00 Stavros Sachtouris
        chosen = [net for net in nets if net['id'] == n1id][0]
339 c1004a00 Stavros Sachtouris
        chosen.pop('updated')
340 c1004a00 Stavros Sachtouris
        net1 = dict(self.network1)
341 c1004a00 Stavros Sachtouris
        net1.pop('updated')
342 c1004a00 Stavros Sachtouris
        self.assert_dicts_are_deeply_equal(chosen, net1)
343 c1004a00 Stavros Sachtouris
        for param, val in dict(
344 c1004a00 Stavros Sachtouris
                cidr='192.168.0.0/24',
345 c1004a00 Stavros Sachtouris
                gateway='192.168.0.1',
346 c1004a00 Stavros Sachtouris
                type='MAC_FILTERED',
347 c1004a00 Stavros Sachtouris
                dhcp=True).items():
348 c1004a00 Stavros Sachtouris
            print('\tdelete %s to avoid max net limit' % n1id)
349 c1004a00 Stavros Sachtouris
            self._delete_network(n1id)
350 c1004a00 Stavros Sachtouris
            kwargs = {param: val}
351 c1004a00 Stavros Sachtouris
            print('\twith %s=%s' % (param, val))
352 c1004a00 Stavros Sachtouris
            self.network1 = self._create_network(self.netname1, **kwargs)
353 c1004a00 Stavros Sachtouris
            n1id = self.network1['id']
354 c1004a00 Stavros Sachtouris
            self._wait_for_network(n1id, 'ACTIVE')
355 c1004a00 Stavros Sachtouris
            self.network1 = self.client.get_network_details(n1id)
356 c1004a00 Stavros Sachtouris
            self.assertEqual(self.network1[param], val)
357 c1004a00 Stavros Sachtouris

358 c1004a00 Stavros Sachtouris
    def test_connect_server(self):
359 c1004a00 Stavros Sachtouris
        self.client.connect_server(self.server1['id'], self.network1['id'])
360 c1004a00 Stavros Sachtouris
        self.assertTrue(self._wait_for_nic(
361 c1004a00 Stavros Sachtouris
            self.network1['id'],
362 c1004a00 Stavros Sachtouris
            self.server1['id']))
363 c1004a00 Stavros Sachtouris

364 c1004a00 Stavros Sachtouris
    def test_disconnect_server(self):
365 c1004a00 Stavros Sachtouris
        self.client.disconnect_server(self.server1['id'], self.network1['id'])
366 c1004a00 Stavros Sachtouris
        self.assertTrue(self._wait_for_nic(
367 c1004a00 Stavros Sachtouris
            self.network1['id'],
368 c1004a00 Stavros Sachtouris
            self.server1['id'],
369 c1004a00 Stavros Sachtouris
            in_creation=False))
370 c1004a00 Stavros Sachtouris

371 c1004a00 Stavros Sachtouris
    def _test_0260_wait_for_second_network(self):
372 c1004a00 Stavros Sachtouris
        self.server1 = self._create_server(
373 c1004a00 Stavros Sachtouris
            self.servname1,
374 c1004a00 Stavros Sachtouris
            self.flavorid,
375 c1004a00 Stavros Sachtouris
            self.img)
376 c1004a00 Stavros Sachtouris
        self.network2 = self._create_network(self.netname2)
377 c1004a00 Stavros Sachtouris
        self._wait_for_status(self.server1['id'], 'BUILD')
378 c1004a00 Stavros Sachtouris
        self._wait_for_network(self.network2['id'], 'ACTIVE')
379 c1004a00 Stavros Sachtouris
        self._test_0280_list_server_nics()
380 c1004a00 Stavros Sachtouris

381 c1004a00 Stavros Sachtouris
    def _test_0280_list_server_nics(self):
382 c1004a00 Stavros Sachtouris
        r = self.client.list_server_nics(self.server1['id'])
383 c1004a00 Stavros Sachtouris
        len0 = len(r)
384 c1004a00 Stavros Sachtouris
        self.client.connect_server(self.server1['id'], self.network2['id'])
385 c1004a00 Stavros Sachtouris
        self.assertTrue(self._wait_for_nic(
386 c1004a00 Stavros Sachtouris
            self.network2['id'],
387 c1004a00 Stavros Sachtouris
            self.server1['id']))
388 c1004a00 Stavros Sachtouris
        r = self.client.list_server_nics(self.server1['id'])
389 c1004a00 Stavros Sachtouris
        self.assertTrue(len(r) > len0)
390 c1004a00 Stavros Sachtouris

391 c1004a00 Stavros Sachtouris
    def test_list_networks(self):
392 c1004a00 Stavros Sachtouris
        r = self.client.list_networks()
393 c1004a00 Stavros Sachtouris
        self.assertTrue(len(r) > 1)
394 c1004a00 Stavros Sachtouris
        ids = [net['id'] for net in r]
395 c1004a00 Stavros Sachtouris
        names = [net['name'] for net in r]
396 c1004a00 Stavros Sachtouris
        self.assertTrue('1' in ids)
397 c1004a00 Stavros Sachtouris
        #self.assertTrue('public' in names)
398 c1004a00 Stavros Sachtouris
        self.assertTrue(self.network1['id'] in ids)
399 c1004a00 Stavros Sachtouris
        self.assertTrue(self.network1['name'] in names)
400 c1004a00 Stavros Sachtouris

401 c1004a00 Stavros Sachtouris
        r = self.client.list_networks(detail=True)
402 c1004a00 Stavros Sachtouris
        ids = [net['id'] for net in r]
403 c1004a00 Stavros Sachtouris
        names = [net['name'] for net in r]
404 c1004a00 Stavros Sachtouris
        for net in r:
405 c1004a00 Stavros Sachtouris
            self.assertTrue(net['id'] in ids)
406 c1004a00 Stavros Sachtouris
            self.assertTrue(net['name'] in names)
407 c1004a00 Stavros Sachtouris
            for term in ('status', 'updated', 'created'):
408 c1004a00 Stavros Sachtouris
                self.assertTrue(term in net.keys())
409 c1004a00 Stavros Sachtouris

410 c1004a00 Stavros Sachtouris
    def test_get_network_details(self):
411 c1004a00 Stavros Sachtouris
        r = self.client.get_network_details(self.network1['id'])
412 c1004a00 Stavros Sachtouris
        net1 = dict(self.network1)
413 c1004a00 Stavros Sachtouris
        net1.pop('status')
414 c1004a00 Stavros Sachtouris
        net1.pop('updated', None)
415 c1004a00 Stavros Sachtouris
        net1.pop('attachments')
416 c1004a00 Stavros Sachtouris
        r.pop('status')
417 c1004a00 Stavros Sachtouris
        r.pop('updated', None)
418 c1004a00 Stavros Sachtouris
        r.pop('attachments')
419 c1004a00 Stavros Sachtouris
        self.assert_dicts_are_deeply_equal(net1, r)
420 c1004a00 Stavros Sachtouris

421 c1004a00 Stavros Sachtouris
    def test_update_network_name(self):
422 c1004a00 Stavros Sachtouris
        updated_name = self.netname2 + '_upd'
423 c1004a00 Stavros Sachtouris
        self.client.update_network_name(self.network2['id'], updated_name)
424 c1004a00 Stavros Sachtouris

425 c1004a00 Stavros Sachtouris
        def netwait(wait):
426 c1004a00 Stavros Sachtouris
            r = self.client.get_network_details(self.network2['id'])
427 c1004a00 Stavros Sachtouris
            if r['name'] == updated_name:
428 c1004a00 Stavros Sachtouris
                return
429 c1004a00 Stavros Sachtouris
            time.sleep(wait)
430 c1004a00 Stavros Sachtouris
        self.do_with_progress_bar(
431 c1004a00 Stavros Sachtouris
            netwait,
432 c1004a00 Stavros Sachtouris
            'Network %s name is changing:' % self.network2['id'],
433 c1004a00 Stavros Sachtouris
            self._waits[:5])
434 c1004a00 Stavros Sachtouris

435 c1004a00 Stavros Sachtouris
        r = self.client.get_network_details(self.network2['id'])
436 c1004a00 Stavros Sachtouris
        self.assertEqual(r['name'], updated_name)
437 c1004a00 Stavros Sachtouris

438 c1004a00 Stavros Sachtouris
    def test_delete_image(self):
439 c1004a00 Stavros Sachtouris
        images = self.client.list_images()
440 c1004a00 Stavros Sachtouris
        self.client.delete_image(images[2]['id'])
441 c1004a00 Stavros Sachtouris
        try:
442 c1004a00 Stavros Sachtouris
            r = self.client.get_image_details(images[2]['id'], success=(400))
443 c1004a00 Stavros Sachtouris
        except ClientError as err:
444 c1004a00 Stavros Sachtouris
            self.assertEqual(err.status, 404)
445 c1004a00 Stavros Sachtouris

446 c1004a00 Stavros Sachtouris
    def test_create_image_metadata(self):
447 c1004a00 Stavros Sachtouris
        r = self.client.create_image_metadata(self.img, 'mykey', 'myval')
448 c1004a00 Stavros Sachtouris
        self.assertEqual(r['mykey'], 'myval')
449 c1004a00 Stavros Sachtouris

450 c1004a00 Stavros Sachtouris
    def test_update_image_metadata(self):
451 c1004a00 Stavros Sachtouris
        r = self.client.create_image_metadata(self.img, 'mykey0', 'myval')
452 c1004a00 Stavros Sachtouris
        r = self.client.update_image_metadata(self.img, 'mykey0', 'myval0')
453 c1004a00 Stavros Sachtouris
        self.assertEqual(r['mykey0'], 'myval0')
454 c1004a00 Stavros Sachtouris

455 c1004a00 Stavros Sachtouris
    def test_delete_image_metadata(self):
456 c1004a00 Stavros Sachtouris
        self.client.create_image_metadata(self.img, 'mykey1', 'myval1')
457 c1004a00 Stavros Sachtouris
        self.client.delete_image_metadata(self.img, 'mykey1')
458 c1004a00 Stavros Sachtouris
        r = self.client.get_image_metadata(self.img)
459 c1004a00 Stavros Sachtouris
        self.assertNotEqual('mykey1' in r)
460 c1004a00 Stavros Sachtouris
    """