Statistics
| Branch: | Tag: | Revision:

root / kamaki / clients / livetest / cyclades.py @ f5f2dc53

History | View | Annotate | Download (27.4 kB)

1 b482315a Stavros Sachtouris
# Copyright 2012-2013 GRNET S.A. All rights reserved.
2 b482315a Stavros Sachtouris
#
3 b482315a Stavros Sachtouris
# Redistribution and use in source and binary forms, with or
4 b482315a Stavros Sachtouris
# without modification, are permitted provided that the following
5 b482315a Stavros Sachtouris
# conditions are met:
6 b482315a Stavros Sachtouris
#
7 b482315a Stavros Sachtouris
#   1. Redistributions of source code must retain the above
8 b482315a Stavros Sachtouris
#      copyright notice, this list of conditions and the following
9 b482315a Stavros Sachtouris
#      disclaimer.
10 b482315a Stavros Sachtouris
#
11 b482315a Stavros Sachtouris
#   2. Redistributions in binary form must reproduce the above
12 b482315a Stavros Sachtouris
#      copyright notice, this list of conditions and the following
13 b482315a Stavros Sachtouris
#      disclaimer in the documentation and/or other materials
14 b482315a Stavros Sachtouris
#      provided with the distribution.
15 b482315a Stavros Sachtouris
#
16 b482315a Stavros Sachtouris
# THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS
17 b482315a Stavros Sachtouris
# OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 b482315a Stavros Sachtouris
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
19 b482315a Stavros Sachtouris
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR
20 b482315a Stavros Sachtouris
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
21 b482315a Stavros Sachtouris
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
22 b482315a Stavros Sachtouris
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
23 b482315a Stavros Sachtouris
# USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
24 b482315a Stavros Sachtouris
# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25 b482315a Stavros Sachtouris
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
26 b482315a Stavros Sachtouris
# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
27 b482315a Stavros Sachtouris
# POSSIBILITY OF SUCH DAMAGE.
28 b482315a Stavros Sachtouris
#
29 b482315a Stavros Sachtouris
# The views and conclusions contained in the software and
30 b482315a Stavros Sachtouris
# documentation are those of the authors and should not be
31 b482315a Stavros Sachtouris
# interpreted as representing official policies, either expressed
32 b482315a Stavros Sachtouris
# or implied, of GRNET S.A.
33 b482315a Stavros Sachtouris
34 b482315a Stavros Sachtouris
import time
35 b482315a Stavros Sachtouris
36 f5f2dc53 Stavros Sachtouris
from kamaki.clients import livetest, ClientError
37 b482315a Stavros Sachtouris
from kamaki.clients.cyclades import CycladesClient
38 b482315a Stavros Sachtouris
39 b482315a Stavros Sachtouris
40 f5f2dc53 Stavros Sachtouris
class Cyclades(livetest.Generic):
41 b482315a Stavros Sachtouris
    """Set up a Cyclades thorough test"""
42 b482315a Stavros Sachtouris
    def setUp(self):
43 db77d79e Stavros Sachtouris
        print
44 db77d79e Stavros Sachtouris
        with open(self['image', 'details']) as f:
45 db77d79e Stavros Sachtouris
            self.img_details = eval(f.read())
46 db77d79e Stavros Sachtouris
        self.img = self.img_details['id']
47 db77d79e Stavros Sachtouris
        with open(self['flavor', 'details']) as f:
48 db77d79e Stavros Sachtouris
            self._flavor_details = eval(f.read())
49 b482315a Stavros Sachtouris
        self.PROFILES = ('ENABLED', 'DISABLED', 'PROTECTED')
50 b482315a Stavros Sachtouris
51 b482315a Stavros Sachtouris
        self.servers = {}
52 b482315a Stavros Sachtouris
        self.now = time.mktime(time.gmtime())
53 b482315a Stavros Sachtouris
        self.servname1 = 'serv' + unicode(self.now)
54 b482315a Stavros Sachtouris
        self.servname2 = self.servname1 + '_v2'
55 b482315a Stavros Sachtouris
        self.servname1 += '_v1'
56 b482315a Stavros Sachtouris
        self.flavorid = 1
57 b482315a Stavros Sachtouris
        #servers have to be created at the begining...
58 b482315a Stavros Sachtouris
        self.networks = {}
59 b482315a Stavros Sachtouris
        self.netname1 = 'net' + unicode(self.now)
60 b482315a Stavros Sachtouris
        self.netname2 = 'net' + unicode(self.now) + '_v2'
61 b482315a Stavros Sachtouris
62 b482315a Stavros Sachtouris
        self.client = CycladesClient(self['compute', 'url'], self['token'])
63 b482315a Stavros Sachtouris
64 b482315a Stavros Sachtouris
    def tearDown(self):
65 b482315a Stavros Sachtouris
        """Destoy servers used in testing"""
66 d1f78278 Stavros Sachtouris
        for net in self.networks.keys():
67 d1f78278 Stavros Sachtouris
            self._delete_network(net)
68 db77d79e Stavros Sachtouris
        for server in self.servers.values():
69 db77d79e Stavros Sachtouris
            self._delete_server(server['id'])
70 db77d79e Stavros Sachtouris
            print('DEL VM %s (%s)' % (server['id'], server['name']))
71 db77d79e Stavros Sachtouris
72 db77d79e Stavros Sachtouris
    def test_000(self):
73 db77d79e Stavros Sachtouris
        "Prepare a full Cyclades test scenario"
74 24ff0a35 Stavros Sachtouris
        self.server1 = self._create_server(
75 24ff0a35 Stavros Sachtouris
            self.servname1,
76 db77d79e Stavros Sachtouris
            self.flavorid,
77 db77d79e Stavros Sachtouris
            self.img)
78 24ff0a35 Stavros Sachtouris
        self.server2 = self._create_server(
79 24ff0a35 Stavros Sachtouris
            self.servname2,
80 db77d79e Stavros Sachtouris
            self.flavorid + 2,
81 db77d79e Stavros Sachtouris
            self.img)
82 db77d79e Stavros Sachtouris
        super(self.__class__, self).test_000()
83 b482315a Stavros Sachtouris
84 b482315a Stavros Sachtouris
    def _create_server(self, servername, flavorid, imageid, personality=None):
85 24ff0a35 Stavros Sachtouris
        server = self.client.create_server(
86 24ff0a35 Stavros Sachtouris
            servername,
87 b482315a Stavros Sachtouris
            flavorid,
88 b482315a Stavros Sachtouris
            imageid,
89 b482315a Stavros Sachtouris
            personality)
90 db77d79e Stavros Sachtouris
        print('CREATE VM %s (%s)' % (server['id'], server['name']))
91 b482315a Stavros Sachtouris
        self.servers[servername] = server
92 b482315a Stavros Sachtouris
        return server
93 b482315a Stavros Sachtouris
94 b482315a Stavros Sachtouris
    def _delete_server(self, servid):
95 b482315a Stavros Sachtouris
        try:
96 b482315a Stavros Sachtouris
            current_state = self.client.get_server_details(servid)
97 b482315a Stavros Sachtouris
            current_state = current_state['status']
98 b482315a Stavros Sachtouris
            if current_state == 'DELETED':
99 b482315a Stavros Sachtouris
                return
100 db77d79e Stavros Sachtouris
            self.client.delete_server(servid)
101 db77d79e Stavros Sachtouris
            self._wait_for_status(servid, current_state)
102 db77d79e Stavros Sachtouris
            self.client.delete_server(servid)
103 b482315a Stavros Sachtouris
        except:
104 b482315a Stavros Sachtouris
            return
105 b482315a Stavros Sachtouris
106 b482315a Stavros Sachtouris
    def _create_network(self, netname, **kwargs):
107 b482315a Stavros Sachtouris
        net = self.client.create_network(netname, **kwargs)
108 b482315a Stavros Sachtouris
        self.networks[net['id']] = net
109 b482315a Stavros Sachtouris
        return net
110 b482315a Stavros Sachtouris
111 b482315a Stavros Sachtouris
    def _delete_network(self, netid):
112 c501d3df Stavros Sachtouris
        if not netid in self.networks:
113 c501d3df Stavros Sachtouris
            return None
114 02846a75 Stavros Sachtouris
        print('Disconnect nics of network %s' % netid)
115 b482315a Stavros Sachtouris
        self.client.disconnect_network_nics(netid)
116 02846a75 Stavros Sachtouris
117 d1f78278 Stavros Sachtouris
        def netwait(wait):
118 b482315a Stavros Sachtouris
            try:
119 b482315a Stavros Sachtouris
                self.client.delete_network(netid)
120 02846a75 Stavros Sachtouris
            except ClientError:
121 b482315a Stavros Sachtouris
                time.sleep(wait)
122 02846a75 Stavros Sachtouris
        self.do_with_progress_bar(
123 02846a75 Stavros Sachtouris
            netwait,
124 02846a75 Stavros Sachtouris
            'Delete network %s' % netid,
125 d1f78278 Stavros Sachtouris
            self._waits[:7])
126 c501d3df Stavros Sachtouris
        return self.networks.pop(netid)
127 02846a75 Stavros Sachtouris
128 02846a75 Stavros Sachtouris
    def _wait_for_network(self, netid, status):
129 02846a75 Stavros Sachtouris
130 d1f78278 Stavros Sachtouris
        def netwait(wait):
131 02846a75 Stavros Sachtouris
            r = self.client.get_network_details(netid)
132 02846a75 Stavros Sachtouris
            if r['status'] == status:
133 02846a75 Stavros Sachtouris
                return
134 02846a75 Stavros Sachtouris
            time.sleep(wait)
135 02846a75 Stavros Sachtouris
        self.do_with_progress_bar(
136 02846a75 Stavros Sachtouris
            netwait,
137 02846a75 Stavros Sachtouris
            'Wait network %s to reach status %s' % (netid, status),
138 02846a75 Stavros Sachtouris
            self._waits[:5])
139 02846a75 Stavros Sachtouris
140 02846a75 Stavros Sachtouris
    def _wait_for_nic(self, netid, servid, in_creation=True):
141 02846a75 Stavros Sachtouris
        self._wait_for_network(netid, 'ACTIVE')
142 02846a75 Stavros Sachtouris
143 d1f78278 Stavros Sachtouris
        def nicwait(wait):
144 02846a75 Stavros Sachtouris
            nics = self.client.list_server_nics(servid)
145 02846a75 Stavros Sachtouris
            for net in nics:
146 02846a75 Stavros Sachtouris
                found_nic = net['network_id'] == netid
147 24ff0a35 Stavros Sachtouris
                if (in_creation and found_nic) or not (
148 2005b18e Stavros Sachtouris
                        in_creation or found_nic):
149 2005b18e Stavros Sachtouris
                    return
150 02846a75 Stavros Sachtouris
            time.sleep(wait)
151 02846a75 Stavros Sachtouris
        self.do_with_progress_bar(
152 02846a75 Stavros Sachtouris
            nicwait,
153 02846a75 Stavros Sachtouris
            'Wait nic-%s-%s to %sconnect' % (
154 02846a75 Stavros Sachtouris
                netid,
155 02846a75 Stavros Sachtouris
                servid,
156 02846a75 Stavros Sachtouris
                '' if in_creation else 'dis'),
157 02846a75 Stavros Sachtouris
            self._waits[:5])
158 2005b18e Stavros Sachtouris
        for net in self.client.list_server_nics(servid):
159 2005b18e Stavros Sachtouris
            if netid == net['network_id']:
160 2005b18e Stavros Sachtouris
                return True
161 2005b18e Stavros Sachtouris
        return False
162 02846a75 Stavros Sachtouris
163 02846a75 Stavros Sachtouris
    def _has_status(self, servid, status):
164 02846a75 Stavros Sachtouris
        r = self.client.get_server_details(servid)
165 02846a75 Stavros Sachtouris
        return r['status'] == status
166 02846a75 Stavros Sachtouris
167 02846a75 Stavros Sachtouris
    def _wait_for_status(self, servid, status):
168 02846a75 Stavros Sachtouris
        (wait_bar, wait_cb) = self._safe_progress_bar(
169 02846a75 Stavros Sachtouris
            'Server %s in %s' % (servid, status))
170 02846a75 Stavros Sachtouris
        self.client.wait_server(servid, status, wait_cb=wait_cb)
171 02846a75 Stavros Sachtouris
        self._safe_progress_bar_finish(wait_bar)
172 02846a75 Stavros Sachtouris
173 db77d79e Stavros Sachtouris
    def test_parallel_creation(self):
174 db77d79e Stavros Sachtouris
        """test create with multiple threads
175 f5f2dc53 Stavros Sachtouris
        Do not use this in regular livetest
176 db77d79e Stavros Sachtouris
        """
177 db77d79e Stavros Sachtouris
        from kamaki.clients import SilentEvent
178 24ff0a35 Stavros Sachtouris
        c1 = SilentEvent(
179 24ff0a35 Stavros Sachtouris
            self._create_server,
180 db77d79e Stavros Sachtouris
            self.servname1,
181 db77d79e Stavros Sachtouris
            self.flavorid,
182 db77d79e Stavros Sachtouris
            self.img)
183 24ff0a35 Stavros Sachtouris
        c2 = SilentEvent(
184 24ff0a35 Stavros Sachtouris
            self._create_server,
185 db77d79e Stavros Sachtouris
            self.servname2,
186 db77d79e Stavros Sachtouris
            self.flavorid + 2,
187 db77d79e Stavros Sachtouris
            self.img)
188 24ff0a35 Stavros Sachtouris
        c3 = SilentEvent(
189 24ff0a35 Stavros Sachtouris
            self._create_server,
190 db77d79e Stavros Sachtouris
            self.servname1,
191 db77d79e Stavros Sachtouris
            self.flavorid,
192 db77d79e Stavros Sachtouris
            self.img)
193 24ff0a35 Stavros Sachtouris
        c4 = SilentEvent(
194 24ff0a35 Stavros Sachtouris
            self._create_server,
195 db77d79e Stavros Sachtouris
            self.servname2,
196 db77d79e Stavros Sachtouris
            self.flavorid + 2,
197 db77d79e Stavros Sachtouris
            self.img)
198 24ff0a35 Stavros Sachtouris
        c5 = SilentEvent(
199 24ff0a35 Stavros Sachtouris
            self._create_server,
200 db77d79e Stavros Sachtouris
            self.servname1,
201 db77d79e Stavros Sachtouris
            self.flavorid,
202 db77d79e Stavros Sachtouris
            self.img)
203 24ff0a35 Stavros Sachtouris
        c6 = SilentEvent(
204 24ff0a35 Stavros Sachtouris
            self._create_server,
205 db77d79e Stavros Sachtouris
            self.servname2,
206 db77d79e Stavros Sachtouris
            self.flavorid + 2,
207 db77d79e Stavros Sachtouris
            self.img)
208 24ff0a35 Stavros Sachtouris
        c7 = SilentEvent(
209 24ff0a35 Stavros Sachtouris
            self._create_server,
210 db77d79e Stavros Sachtouris
            self.servname1,
211 db77d79e Stavros Sachtouris
            self.flavorid,
212 db77d79e Stavros Sachtouris
            self.img)
213 24ff0a35 Stavros Sachtouris
        c8 = SilentEvent(
214 24ff0a35 Stavros Sachtouris
            self._create_server,
215 db77d79e Stavros Sachtouris
            self.servname2,
216 db77d79e Stavros Sachtouris
            self.flavorid + 2,
217 db77d79e Stavros Sachtouris
            self.img)
218 db77d79e Stavros Sachtouris
        c1.start()
219 db77d79e Stavros Sachtouris
        c2.start()
220 db77d79e Stavros Sachtouris
        c3.start()
221 db77d79e Stavros Sachtouris
        c4.start()
222 db77d79e Stavros Sachtouris
        c5.start()
223 db77d79e Stavros Sachtouris
        c6.start()
224 db77d79e Stavros Sachtouris
        c7.start()
225 db77d79e Stavros Sachtouris
        c8.start()
226 db77d79e Stavros Sachtouris
227 db77d79e Stavros Sachtouris
    def test_create_server(self):
228 db77d79e Stavros Sachtouris
        """Test create_server"""
229 24ff0a35 Stavros Sachtouris
        self.server1 = self._create_server(
230 24ff0a35 Stavros Sachtouris
            self.servname1,
231 db77d79e Stavros Sachtouris
            self.flavorid,
232 db77d79e Stavros Sachtouris
            self.img)
233 db77d79e Stavros Sachtouris
        self._wait_for_status(self.server1['id'], 'BUILD')
234 db77d79e Stavros Sachtouris
        self._test_0010_create_server()
235 db77d79e Stavros Sachtouris
236 db77d79e Stavros Sachtouris
    def _test_0010_create_server(self):
237 db77d79e Stavros Sachtouris
        self.assertEqual(self.server1["name"], self.servname1)
238 db77d79e Stavros Sachtouris
        self.assertEqual(self.server1["flavorRef"], self.flavorid)
239 db77d79e Stavros Sachtouris
        self.assertEqual(self.server1["imageRef"], self.img)
240 db77d79e Stavros Sachtouris
        self.assertEqual(self.server1["status"], "BUILD")
241 db77d79e Stavros Sachtouris
242 02846a75 Stavros Sachtouris
    def test_list_servers(self):
243 02846a75 Stavros Sachtouris
        """Test list servers"""
244 02846a75 Stavros Sachtouris
        self.server1 = self._create_server(
245 02846a75 Stavros Sachtouris
            self.servname1,
246 02846a75 Stavros Sachtouris
            self.flavorid,
247 02846a75 Stavros Sachtouris
            self.img)
248 02846a75 Stavros Sachtouris
        self.server2 = self._create_server(
249 02846a75 Stavros Sachtouris
            self.servname2,
250 02846a75 Stavros Sachtouris
            self.flavorid + 2,
251 02846a75 Stavros Sachtouris
            self.img)
252 db77d79e Stavros Sachtouris
        self._test_0020_list_servers()
253 02846a75 Stavros Sachtouris
254 db77d79e Stavros Sachtouris
    def _test_0020_list_servers(self):
255 02846a75 Stavros Sachtouris
        servers = self.client.list_servers()
256 02846a75 Stavros Sachtouris
        dservers = self.client.list_servers(detail=True)
257 02846a75 Stavros Sachtouris
258 02846a75 Stavros Sachtouris
        """detailed and simple are same size"""
259 02846a75 Stavros Sachtouris
        self.assertEqual(len(dservers), len(servers))
260 02846a75 Stavros Sachtouris
        for i in range(len(servers)):
261 db77d79e Stavros Sachtouris
            for field in (
262 2005b18e Stavros Sachtouris
                    'created',
263 2005b18e Stavros Sachtouris
                    'flavorRef',
264 2005b18e Stavros Sachtouris
                    'hostId',
265 2005b18e Stavros Sachtouris
                    'imageRef',
266 2005b18e Stavros Sachtouris
                    'progress',
267 2005b18e Stavros Sachtouris
                    'status',
268 2005b18e Stavros Sachtouris
                    'updated'):
269 02846a75 Stavros Sachtouris
                self.assertFalse(field in servers[i])
270 02846a75 Stavros Sachtouris
                self.assertTrue(field in dservers[i])
271 02846a75 Stavros Sachtouris
272 02846a75 Stavros Sachtouris
        """detailed and simple contain same names"""
273 02846a75 Stavros Sachtouris
        names = sorted(map(lambda x: x["name"], servers))
274 02846a75 Stavros Sachtouris
        dnames = sorted(map(lambda x: x["name"], dservers))
275 02846a75 Stavros Sachtouris
        self.assertEqual(names, dnames)
276 db77d79e Stavros Sachtouris
277 db77d79e Stavros Sachtouris
    def _test_0030_wait_test_servers_to_build(self):
278 db77d79e Stavros Sachtouris
        """Pseudo-test to wait for VMs to load"""
279 d1f78278 Stavros Sachtouris
        print('')
280 db77d79e Stavros Sachtouris
        self._wait_for_status(self.server1['id'], 'BUILD')
281 db77d79e Stavros Sachtouris
        self._wait_for_status(self.server2['id'], 'BUILD')
282 db77d79e Stavros Sachtouris
283 db77d79e Stavros Sachtouris
    def test_get_server_details(self):
284 db77d79e Stavros Sachtouris
        """Test get_server_details"""
285 24ff0a35 Stavros Sachtouris
        self.server1 = self._create_server(
286 24ff0a35 Stavros Sachtouris
            self.servname1,
287 db77d79e Stavros Sachtouris
            self.flavorid,
288 db77d79e Stavros Sachtouris
            self.img)
289 db77d79e Stavros Sachtouris
        self._wait_for_status(self.server1['id'], 'BUILD')
290 db77d79e Stavros Sachtouris
        self._test_0040_get_server_details()
291 db77d79e Stavros Sachtouris
292 db77d79e Stavros Sachtouris
    def _test_0040_get_server_details(self):
293 db77d79e Stavros Sachtouris
        r = self.client.get_server_details(self.server1['id'])
294 db77d79e Stavros Sachtouris
        self.assertEqual(r["name"], self.servname1)
295 db77d79e Stavros Sachtouris
        self.assertEqual(r["flavorRef"], self.flavorid)
296 db77d79e Stavros Sachtouris
        self.assertEqual(r["imageRef"], self.img)
297 db77d79e Stavros Sachtouris
        self.assertEqual(r["status"], "ACTIVE")
298 db77d79e Stavros Sachtouris
299 db77d79e Stavros Sachtouris
    def test_update_server_name(self):
300 db77d79e Stavros Sachtouris
        """Test update_server_name"""
301 24ff0a35 Stavros Sachtouris
        self.server1 = self._create_server(
302 24ff0a35 Stavros Sachtouris
            self.servname1,
303 db77d79e Stavros Sachtouris
            self.flavorid,
304 db77d79e Stavros Sachtouris
            self.img)
305 db77d79e Stavros Sachtouris
        self._test_0050_update_server_name()
306 db77d79e Stavros Sachtouris
307 db77d79e Stavros Sachtouris
    def _test_0050_update_server_name(self):
308 db77d79e Stavros Sachtouris
        new_name = self.servname1 + '_new_name'
309 db77d79e Stavros Sachtouris
        self.client.update_server_name(self.server1['id'], new_name)
310 2005b18e Stavros Sachtouris
        r = self.client.get_server_details(
311 2005b18e Stavros Sachtouris
            self.server1['id'],
312 2005b18e Stavros Sachtouris
            success=(200, 400))
313 db77d79e Stavros Sachtouris
        self.assertEqual(r['name'], new_name)
314 db77d79e Stavros Sachtouris
        changed = self.servers.pop(self.servname1)
315 db77d79e Stavros Sachtouris
        changed['name'] = new_name
316 db77d79e Stavros Sachtouris
        self.servers[new_name] = changed
317 db77d79e Stavros Sachtouris
318 db77d79e Stavros Sachtouris
    def test_reboot_server(self):
319 db77d79e Stavros Sachtouris
        """Test reboot server"""
320 24ff0a35 Stavros Sachtouris
        self.server1 = self._create_server(
321 24ff0a35 Stavros Sachtouris
            self.servname1,
322 db77d79e Stavros Sachtouris
            self.flavorid,
323 db77d79e Stavros Sachtouris
            self.img)
324 db77d79e Stavros Sachtouris
        self._wait_for_status(self.server1['id'], 'BUILD')
325 24ff0a35 Stavros Sachtouris
        self.server2 = self._create_server(
326 24ff0a35 Stavros Sachtouris
            self.servname2,
327 db77d79e Stavros Sachtouris
            self.flavorid + 1,
328 db77d79e Stavros Sachtouris
            self.img)
329 db77d79e Stavros Sachtouris
        self._wait_for_status(self.server2['id'], 'BUILD')
330 db77d79e Stavros Sachtouris
        self._test_0060_reboot_server()
331 db77d79e Stavros Sachtouris
        self._wait_for_status(self.server1['id'], 'REBOOT')
332 db77d79e Stavros Sachtouris
        self._wait_for_status(self.server2['id'], 'REBOOT')
333 db77d79e Stavros Sachtouris
334 db77d79e Stavros Sachtouris
    def _test_0060_reboot_server(self):
335 db77d79e Stavros Sachtouris
        self.client.reboot_server(self.server1['id'])
336 db77d79e Stavros Sachtouris
        self.assertTrue(self._has_status(self.server1['id'], 'REBOOT'))
337 db77d79e Stavros Sachtouris
        self.client.reboot_server(self.server2['id'], hard=True)
338 db77d79e Stavros Sachtouris
        self.assertTrue(self._has_status(self.server2['id'], 'REBOOT'))
339 db77d79e Stavros Sachtouris
340 db77d79e Stavros Sachtouris
    def _test_0070_wait_test_servers_to_reboot(self):
341 db77d79e Stavros Sachtouris
        """Pseudo-test to wait for VMs to load"""
342 d1f78278 Stavros Sachtouris
        print('')
343 db77d79e Stavros Sachtouris
        self._wait_for_status(self.server1['id'], 'REBOOT')
344 db77d79e Stavros Sachtouris
        self._wait_for_status(self.server2['id'], 'REBOOT')
345 db77d79e Stavros Sachtouris
346 db77d79e Stavros Sachtouris
    def test_create_server_metadata(self):
347 db77d79e Stavros Sachtouris
        """Test create_server_metadata"""
348 2005b18e Stavros Sachtouris
        self.server1 = self._create_server(
349 2005b18e Stavros Sachtouris
            self.servname1,
350 db77d79e Stavros Sachtouris
            self.flavorid,
351 db77d79e Stavros Sachtouris
            self.img)
352 db77d79e Stavros Sachtouris
        self._test_0080_create_server_metadata()
353 db77d79e Stavros Sachtouris
354 db77d79e Stavros Sachtouris
    def _test_0080_create_server_metadata(self):
355 24ff0a35 Stavros Sachtouris
        r1 = self.client.create_server_metadata(
356 24ff0a35 Stavros Sachtouris
            self.server1['id'],
357 db77d79e Stavros Sachtouris
            'mymeta',
358 db77d79e Stavros Sachtouris
            'mymeta val')
359 db77d79e Stavros Sachtouris
        self.assertTrue('mymeta' in r1)
360 db77d79e Stavros Sachtouris
        r2 = self.client.get_server_metadata(self.server1['id'], 'mymeta')
361 db77d79e Stavros Sachtouris
        self.assert_dicts_are_deeply_equal(r1, r2)
362 db77d79e Stavros Sachtouris
363 db77d79e Stavros Sachtouris
    def test_get_server_metadata(self):
364 db77d79e Stavros Sachtouris
        """Test get server_metadata"""
365 24ff0a35 Stavros Sachtouris
        self.server1 = self._create_server(
366 24ff0a35 Stavros Sachtouris
            self.servname1,
367 db77d79e Stavros Sachtouris
            self.flavorid,
368 db77d79e Stavros Sachtouris
            self.img)
369 db77d79e Stavros Sachtouris
        self._test_0090_get_server_metadata()
370 db77d79e Stavros Sachtouris
371 db77d79e Stavros Sachtouris
    def _test_0090_get_server_metadata(self):
372 24ff0a35 Stavros Sachtouris
        self.client.create_server_metadata(
373 24ff0a35 Stavros Sachtouris
            self.server1['id'],
374 db77d79e Stavros Sachtouris
            'mymeta_0',
375 db77d79e Stavros Sachtouris
            'val_0')
376 db77d79e Stavros Sachtouris
        r = self.client.get_server_metadata(self.server1['id'], 'mymeta_0')
377 db77d79e Stavros Sachtouris
        self.assertEqual(r['mymeta_0'], 'val_0')
378 db77d79e Stavros Sachtouris
379 db77d79e Stavros Sachtouris
    def test_update_server_metadata(self):
380 db77d79e Stavros Sachtouris
        """Test update_server_metadata"""
381 24ff0a35 Stavros Sachtouris
        self.server1 = self._create_server(
382 24ff0a35 Stavros Sachtouris
            self.servname1,
383 db77d79e Stavros Sachtouris
            self.flavorid,
384 db77d79e Stavros Sachtouris
            self.img)
385 db77d79e Stavros Sachtouris
        self._test_0100_update_server_metadata()
386 db77d79e Stavros Sachtouris
387 db77d79e Stavros Sachtouris
    def _test_0100_update_server_metadata(self):
388 24ff0a35 Stavros Sachtouris
        r1 = self.client.create_server_metadata(
389 24ff0a35 Stavros Sachtouris
            self.server1['id'],
390 db77d79e Stavros Sachtouris
            'mymeta3',
391 db77d79e Stavros Sachtouris
            'val2')
392 db77d79e Stavros Sachtouris
        self.assertTrue('mymeta3'in r1)
393 24ff0a35 Stavros Sachtouris
        r2 = self.client.update_server_metadata(
394 24ff0a35 Stavros Sachtouris
            self.server1['id'],
395 db77d79e Stavros Sachtouris
            mymeta3='val3')
396 db77d79e Stavros Sachtouris
        self.assertTrue(r2['mymeta3'], 'val3')
397 db77d79e Stavros Sachtouris
398 db77d79e Stavros Sachtouris
    def test_delete_server_metadata(self):
399 db77d79e Stavros Sachtouris
        """Test delete_server_metadata"""
400 24ff0a35 Stavros Sachtouris
        self.server1 = self._create_server(
401 24ff0a35 Stavros Sachtouris
            self.servname1,
402 db77d79e Stavros Sachtouris
            self.flavorid,
403 db77d79e Stavros Sachtouris
            self.img)
404 db77d79e Stavros Sachtouris
        self._test_0110_delete_server_metadata()
405 db77d79e Stavros Sachtouris
406 db77d79e Stavros Sachtouris
    def _test_0110_delete_server_metadata(self):
407 24ff0a35 Stavros Sachtouris
        r1 = self.client.create_server_metadata(
408 24ff0a35 Stavros Sachtouris
            self.server1['id'],
409 db77d79e Stavros Sachtouris
            'mymeta',
410 db77d79e Stavros Sachtouris
            'val')
411 db77d79e Stavros Sachtouris
        self.assertTrue('mymeta' in r1)
412 db77d79e Stavros Sachtouris
        self.client.delete_server_metadata(self.server1['id'], 'mymeta')
413 db77d79e Stavros Sachtouris
        try:
414 db77d79e Stavros Sachtouris
            self.client.get_server_metadata(self.server1['id'], 'mymeta')
415 db77d79e Stavros Sachtouris
            raise ClientError('Wrong Error', status=100)
416 db77d79e Stavros Sachtouris
        except ClientError as err:
417 db77d79e Stavros Sachtouris
            self.assertEqual(err.status, 404)
418 db77d79e Stavros Sachtouris
419 db77d79e Stavros Sachtouris
    def test_list_flavors(self):
420 db77d79e Stavros Sachtouris
        """Test flavors_get"""
421 db77d79e Stavros Sachtouris
        self._test_0120_list_flavors()
422 db77d79e Stavros Sachtouris
423 db77d79e Stavros Sachtouris
    def _test_0120_list_flavors(self):
424 db77d79e Stavros Sachtouris
        r = self.client.list_flavors()
425 db77d79e Stavros Sachtouris
        self.assertTrue(len(r) > 1)
426 db77d79e Stavros Sachtouris
        r = self.client.list_flavors(detail=True)
427 db77d79e Stavros Sachtouris
        self.assertTrue('SNF:disk_template' in r[0])
428 db77d79e Stavros Sachtouris
429 db77d79e Stavros Sachtouris
    def test_get_flavor_details(self):
430 db77d79e Stavros Sachtouris
        """Test test_get_flavor_details"""
431 db77d79e Stavros Sachtouris
        self._test_0130_get_flavor_details()
432 db77d79e Stavros Sachtouris
433 db77d79e Stavros Sachtouris
    def _test_0130_get_flavor_details(self):
434 db77d79e Stavros Sachtouris
        r = self.client.get_flavor_details(self.flavorid)
435 db77d79e Stavros Sachtouris
        self.assert_dicts_are_deeply_equal(self._flavor_details, r)
436 db77d79e Stavros Sachtouris
437 db77d79e Stavros Sachtouris
    def test_list_images(self):
438 db77d79e Stavros Sachtouris
        """Test list_images"""
439 db77d79e Stavros Sachtouris
        self._test_0140_list_images()
440 db77d79e Stavros Sachtouris
441 db77d79e Stavros Sachtouris
    def _test_0140_list_images(self):
442 db77d79e Stavros Sachtouris
        r = self.client.list_images()
443 db77d79e Stavros Sachtouris
        self.assertTrue(len(r) > 1)
444 db77d79e Stavros Sachtouris
        r = self.client.list_images(detail=True)
445 db77d79e Stavros Sachtouris
        for detailed_img in r:
446 db77d79e Stavros Sachtouris
            if detailed_img['id'] == self.img:
447 db77d79e Stavros Sachtouris
                break
448 db77d79e Stavros Sachtouris
        self.assert_dicts_are_deeply_equal(detailed_img, self.img_details)
449 db77d79e Stavros Sachtouris
450 db77d79e Stavros Sachtouris
    def test_get_image_details(self):
451 db77d79e Stavros Sachtouris
        """Test image_details"""
452 db77d79e Stavros Sachtouris
        self._test_0150_get_image_details()
453 db77d79e Stavros Sachtouris
454 db77d79e Stavros Sachtouris
    def _test_0150_get_image_details(self):
455 db77d79e Stavros Sachtouris
        r = self.client.get_image_details(self.img)
456 db77d79e Stavros Sachtouris
        self.assert_dicts_are_deeply_equal(r, self.img_details)
457 db77d79e Stavros Sachtouris
458 db77d79e Stavros Sachtouris
    def test_get_image_metadata(self):
459 db77d79e Stavros Sachtouris
        """Test get_image_metadata"""
460 db77d79e Stavros Sachtouris
        self._test_0160_get_image_metadata()
461 db77d79e Stavros Sachtouris
462 db77d79e Stavros Sachtouris
    def _test_0160_get_image_metadata(self):
463 db77d79e Stavros Sachtouris
        r = self.client.get_image_metadata(self.img)
464 db77d79e Stavros Sachtouris
        self.assert_dicts_are_deeply_equal(
465 db77d79e Stavros Sachtouris
            self.img_details['metadata']['values'], r)
466 db77d79e Stavros Sachtouris
        for key, val in self.img_details['metadata']['values'].items():
467 db77d79e Stavros Sachtouris
            r = self.client.get_image_metadata(self.img, key)
468 db77d79e Stavros Sachtouris
            self.assertEqual(r[key], val)
469 db77d79e Stavros Sachtouris
470 db77d79e Stavros Sachtouris
    def test_shutdown_server(self):
471 db77d79e Stavros Sachtouris
        """Test shutdown_server"""
472 24ff0a35 Stavros Sachtouris
        self.server1 = self._create_server(
473 24ff0a35 Stavros Sachtouris
            self.servname1,
474 db77d79e Stavros Sachtouris
            self.flavorid,
475 db77d79e Stavros Sachtouris
            self.img)
476 db77d79e Stavros Sachtouris
        self._wait_for_status(self.server1['id'], 'BUILD')
477 db77d79e Stavros Sachtouris
        self._test_0170_shutdown_server()
478 db77d79e Stavros Sachtouris
479 db77d79e Stavros Sachtouris
    def _test_0170_shutdown_server(self):
480 db77d79e Stavros Sachtouris
        self.client.shutdown_server(self.server1['id'])
481 db77d79e Stavros Sachtouris
        self._wait_for_status(self.server1['id'], 'ACTIVE')
482 db77d79e Stavros Sachtouris
        r = self.client.get_server_details(self.server1['id'])
483 db77d79e Stavros Sachtouris
        self.assertEqual(r['status'], 'STOPPED')
484 db77d79e Stavros Sachtouris
485 db77d79e Stavros Sachtouris
    def test_start_server(self):
486 db77d79e Stavros Sachtouris
        """Test start_server"""
487 24ff0a35 Stavros Sachtouris
        self.server1 = self._create_server(
488 24ff0a35 Stavros Sachtouris
            self.servname1,
489 db77d79e Stavros Sachtouris
            self.flavorid,
490 db77d79e Stavros Sachtouris
            self.img)
491 db77d79e Stavros Sachtouris
        self._wait_for_status(self.server1['id'], 'BUILD')
492 db77d79e Stavros Sachtouris
        self.client.shutdown_server(self.server1['id'])
493 db77d79e Stavros Sachtouris
        self._wait_for_status(self.server1['id'], 'ACTIVE')
494 db77d79e Stavros Sachtouris
        self._test_0180_start_server()
495 db77d79e Stavros Sachtouris
496 db77d79e Stavros Sachtouris
    def _test_0180_start_server(self):
497 db77d79e Stavros Sachtouris
        self.client.start_server(self.server1['id'])
498 db77d79e Stavros Sachtouris
        self._wait_for_status(self.server1['id'], 'STOPPED')
499 db77d79e Stavros Sachtouris
        r = self.client.get_server_details(self.server1['id'])
500 db77d79e Stavros Sachtouris
        self.assertEqual(r['status'], 'ACTIVE')
501 d1f78278 Stavros Sachtouris
502 d1f78278 Stavros Sachtouris
    def test_get_server_console(self):
503 d1f78278 Stavros Sachtouris
        """Test get_server_console"""
504 24ff0a35 Stavros Sachtouris
        self.server2 = self._create_server(
505 24ff0a35 Stavros Sachtouris
            self.servname2,
506 d1f78278 Stavros Sachtouris
            self.flavorid + 2,
507 d1f78278 Stavros Sachtouris
            self.img)
508 d1f78278 Stavros Sachtouris
        self._wait_for_status(self.server2['id'], 'BUILD')
509 d1f78278 Stavros Sachtouris
        self._test_0190_get_server_console()
510 d1f78278 Stavros Sachtouris
511 d1f78278 Stavros Sachtouris
    def _test_0190_get_server_console(self):
512 d1f78278 Stavros Sachtouris
        r = self.client.get_server_console(self.server2['id'])
513 d1f78278 Stavros Sachtouris
        self.assertTrue('host' in r)
514 d1f78278 Stavros Sachtouris
        self.assertTrue('password' in r)
515 d1f78278 Stavros Sachtouris
        self.assertTrue('port' in r)
516 d1f78278 Stavros Sachtouris
        self.assertTrue('type' in r)
517 d1f78278 Stavros Sachtouris
518 d1f78278 Stavros Sachtouris
    def test_get_firewall_profile(self):
519 d1f78278 Stavros Sachtouris
        """Test get_firewall_profile"""
520 24ff0a35 Stavros Sachtouris
        self.server1 = self._create_server(
521 24ff0a35 Stavros Sachtouris
            self.servname1,
522 d1f78278 Stavros Sachtouris
            self.flavorid,
523 d1f78278 Stavros Sachtouris
            self.img)
524 d1f78278 Stavros Sachtouris
        self._test_0200_get_firewall_profile()
525 d1f78278 Stavros Sachtouris
526 d1f78278 Stavros Sachtouris
    def _test_0200_get_firewall_profile(self):
527 d1f78278 Stavros Sachtouris
        self._wait_for_status(self.server1['id'], 'BUILD')
528 d1f78278 Stavros Sachtouris
        fprofile = self.client.get_firewall_profile(self.server1['id'])
529 d1f78278 Stavros Sachtouris
        self.assertTrue(fprofile in self.PROFILES)
530 d1f78278 Stavros Sachtouris
531 d1f78278 Stavros Sachtouris
    def test_set_firewall_profile(self):
532 d1f78278 Stavros Sachtouris
        """Test set_firewall_profile"""
533 24ff0a35 Stavros Sachtouris
        self.server1 = self._create_server(
534 24ff0a35 Stavros Sachtouris
            self.servname1,
535 d1f78278 Stavros Sachtouris
            self.flavorid,
536 d1f78278 Stavros Sachtouris
            self.img)
537 d1f78278 Stavros Sachtouris
        self._test_0210_set_firewall_profile()
538 d1f78278 Stavros Sachtouris
539 d1f78278 Stavros Sachtouris
    def _test_0210_set_firewall_profile(self):
540 d1f78278 Stavros Sachtouris
541 d1f78278 Stavros Sachtouris
        self._wait_for_status(self.server1['id'], 'BUILD')
542 d1f78278 Stavros Sachtouris
        PROFILES = ['DISABLED', 'ENABLED', 'DISABLED', 'PROTECTED']
543 d1f78278 Stavros Sachtouris
        fprofile = self.client.get_firewall_profile(self.server1['id'])
544 d1f78278 Stavros Sachtouris
        print('')
545 d1f78278 Stavros Sachtouris
        count_success = 0
546 d1f78278 Stavros Sachtouris
        for counter, fprofile in enumerate(PROFILES):
547 d1f78278 Stavros Sachtouris
            npos = counter + 1
548 d1f78278 Stavros Sachtouris
            try:
549 d1f78278 Stavros Sachtouris
                nprofile = PROFILES[npos]
550 d1f78278 Stavros Sachtouris
            except IndexError:
551 d1f78278 Stavros Sachtouris
                nprofile = PROFILES[0]
552 d1f78278 Stavros Sachtouris
            print('\tprofile swap %s: %s -> %s' % (npos, fprofile, nprofile))
553 d1f78278 Stavros Sachtouris
            self.client.set_firewall_profile(self.server1['id'], nprofile)
554 d1f78278 Stavros Sachtouris
            time.sleep(0.5)
555 d1f78278 Stavros Sachtouris
            self.client.reboot_server(self.server1['id'], hard=True)
556 d1f78278 Stavros Sachtouris
            time.sleep(1)
557 d1f78278 Stavros Sachtouris
            self._wait_for_status(self.server1['id'], 'REBOOT')
558 d1f78278 Stavros Sachtouris
            time.sleep(0.5)
559 d1f78278 Stavros Sachtouris
            changed = self.client.get_firewall_profile(self.server1['id'])
560 d1f78278 Stavros Sachtouris
            try:
561 d1f78278 Stavros Sachtouris
                self.assertEqual(changed, nprofile)
562 d1f78278 Stavros Sachtouris
            except AssertionError as err:
563 d1f78278 Stavros Sachtouris
                if count_success:
564 d1f78278 Stavros Sachtouris
                    print('\tFAIL in swap #%s' % npos)
565 d1f78278 Stavros Sachtouris
                    break
566 d1f78278 Stavros Sachtouris
                else:
567 d1f78278 Stavros Sachtouris
                    raise err
568 d1f78278 Stavros Sachtouris
            count_success += 1
569 d1f78278 Stavros Sachtouris
570 d1f78278 Stavros Sachtouris
    def test_get_server_stats(self):
571 24ff0a35 Stavros Sachtouris
        self.server1 = self._create_server(
572 24ff0a35 Stavros Sachtouris
            self.servname1,
573 d1f78278 Stavros Sachtouris
            self.flavorid,
574 d1f78278 Stavros Sachtouris
            self.img)
575 d1f78278 Stavros Sachtouris
        self._test_0220_get_server_stats()
576 d1f78278 Stavros Sachtouris
577 d1f78278 Stavros Sachtouris
    def _test_0220_get_server_stats(self):
578 d1f78278 Stavros Sachtouris
        r = self.client.get_server_stats(self.server1['id'])
579 24ff0a35 Stavros Sachtouris
        it = ('cpuBar', 'cpuTimeSeries', 'netBar', 'netTimeSeries', 'refresh')
580 24ff0a35 Stavros Sachtouris
        for term in it:
581 d1f78278 Stavros Sachtouris
            self.assertTrue(term in r)
582 d1f78278 Stavros Sachtouris
583 d1f78278 Stavros Sachtouris
    def test_create_network(self):
584 d1f78278 Stavros Sachtouris
        """Test create_network"""
585 d1f78278 Stavros Sachtouris
        self._test_0230_create_network()
586 d1f78278 Stavros Sachtouris
587 d1f78278 Stavros Sachtouris
    def _test_0230_create_network(self):
588 c501d3df Stavros Sachtouris
        print('\twith no params')
589 d1f78278 Stavros Sachtouris
        self.network1 = self._create_network(self.netname1)
590 d1f78278 Stavros Sachtouris
        self._wait_for_network(self.network1['id'], 'ACTIVE')
591 c501d3df Stavros Sachtouris
        n1id = self.network1['id']
592 c501d3df Stavros Sachtouris
        self.network1 = self.client.get_network_details(n1id)
593 d1f78278 Stavros Sachtouris
        nets = self.client.list_networks(self.network1['id'])
594 c501d3df Stavros Sachtouris
        chosen = [net for net in nets if net['id'] == n1id][0]
595 d1f78278 Stavros Sachtouris
        chosen.pop('updated')
596 d1f78278 Stavros Sachtouris
        net1 = dict(self.network1)
597 d1f78278 Stavros Sachtouris
        net1.pop('updated')
598 d1f78278 Stavros Sachtouris
        self.assert_dicts_are_deeply_equal(chosen, net1)
599 c501d3df Stavros Sachtouris
        for param, val in dict(
600 c501d3df Stavros Sachtouris
                cidr='192.168.0.0/24',
601 c501d3df Stavros Sachtouris
                gateway='192.168.0.1',
602 c501d3df Stavros Sachtouris
                type='MAC_FILTERED',
603 c501d3df Stavros Sachtouris
                dhcp=True).items():
604 c501d3df Stavros Sachtouris
            print('\tdelete %s to avoid max net limit' % n1id)
605 c501d3df Stavros Sachtouris
            self._delete_network(n1id)
606 c501d3df Stavros Sachtouris
            kwargs = {param: val}
607 c501d3df Stavros Sachtouris
            print('\twith %s=%s' % (param, val))
608 c501d3df Stavros Sachtouris
            self.network1 = self._create_network(self.netname1, **kwargs)
609 c501d3df Stavros Sachtouris
            n1id = self.network1['id']
610 c501d3df Stavros Sachtouris
            self._wait_for_network(n1id, 'ACTIVE')
611 c501d3df Stavros Sachtouris
            self.network1 = self.client.get_network_details(n1id)
612 c501d3df Stavros Sachtouris
            self.assertEqual(self.network1[param], val)
613 d1f78278 Stavros Sachtouris
614 d1f78278 Stavros Sachtouris
    def test_connect_server(self):
615 d1f78278 Stavros Sachtouris
        """Test connect_server"""
616 24ff0a35 Stavros Sachtouris
        self.server1 = self._create_server(
617 24ff0a35 Stavros Sachtouris
            self.servname1,
618 d1f78278 Stavros Sachtouris
            self.flavorid,
619 d1f78278 Stavros Sachtouris
            self.img)
620 d1f78278 Stavros Sachtouris
        self.network1 = self._create_network(self.netname1)
621 d1f78278 Stavros Sachtouris
        self._wait_for_status(self.server1['id'], 'BUILD')
622 d1f78278 Stavros Sachtouris
        self._wait_for_network(self.network1['id'], 'ACTIVE')
623 d1f78278 Stavros Sachtouris
        self._test_0240_connect_server()
624 d1f78278 Stavros Sachtouris
625 d1f78278 Stavros Sachtouris
    def _test_0250_connect_server(self):
626 d1f78278 Stavros Sachtouris
        self.client.connect_server(self.server1['id'], self.network1['id'])
627 d1f78278 Stavros Sachtouris
        self.assertTrue(self._wait_for_nic(
628 d1f78278 Stavros Sachtouris
            self.network1['id'],
629 d1f78278 Stavros Sachtouris
            self.server1['id']))
630 d1f78278 Stavros Sachtouris
631 d1f78278 Stavros Sachtouris
    def test_disconnect_server(self):
632 d1f78278 Stavros Sachtouris
        """Test disconnect_server"""
633 d1f78278 Stavros Sachtouris
        self.test_connect_server()
634 d1f78278 Stavros Sachtouris
        self._test_0250_disconnect_server()
635 d1f78278 Stavros Sachtouris
636 d1f78278 Stavros Sachtouris
    def _test_0250_disconnect_server(self):
637 d1f78278 Stavros Sachtouris
        self.client.disconnect_server(self.server1['id'], self.network1['id'])
638 24ff0a35 Stavros Sachtouris
        self.assertTrue(self._wait_for_nic(
639 24ff0a35 Stavros Sachtouris
            self.network1['id'],
640 d1f78278 Stavros Sachtouris
            self.server1['id'],
641 d1f78278 Stavros Sachtouris
            in_creation=False))
642 d1f78278 Stavros Sachtouris
643 d1f78278 Stavros Sachtouris
    def _test_0260_wait_for_second_network(self):
644 d1f78278 Stavros Sachtouris
        self.network2 = self._create_network(self.netname2)
645 d1f78278 Stavros Sachtouris
        self._wait_for_network(self.network2['id'], 'ACTIVE')
646 d1f78278 Stavros Sachtouris
647 d1f78278 Stavros Sachtouris
    def test_list_server_nics(self):
648 d1f78278 Stavros Sachtouris
        """Test list_server_nics"""
649 24ff0a35 Stavros Sachtouris
        self.server1 = self._create_server(
650 24ff0a35 Stavros Sachtouris
            self.servname1,
651 d1f78278 Stavros Sachtouris
            self.flavorid,
652 d1f78278 Stavros Sachtouris
            self.img)
653 d1f78278 Stavros Sachtouris
        self.network2 = self._create_network(self.netname2)
654 d1f78278 Stavros Sachtouris
        self._wait_for_status(self.server1['id'], 'BUILD')
655 d1f78278 Stavros Sachtouris
        self._wait_for_network(self.network2['id'], 'ACTIVE')
656 d1f78278 Stavros Sachtouris
        self._test_0280_list_server_nics()
657 d1f78278 Stavros Sachtouris
658 d1f78278 Stavros Sachtouris
    def _test_0280_list_server_nics(self):
659 d1f78278 Stavros Sachtouris
        r = self.client.list_server_nics(self.server1['id'])
660 d1f78278 Stavros Sachtouris
        len0 = len(r)
661 d1f78278 Stavros Sachtouris
        self.client.connect_server(self.server1['id'], self.network2['id'])
662 d1f78278 Stavros Sachtouris
        self.assertTrue(self._wait_for_nic(
663 d1f78278 Stavros Sachtouris
            self.network2['id'],
664 d1f78278 Stavros Sachtouris
            self.server1['id']))
665 d1f78278 Stavros Sachtouris
        r = self.client.list_server_nics(self.server1['id'])
666 d1f78278 Stavros Sachtouris
        self.assertTrue(len(r) > len0)
667 d1f78278 Stavros Sachtouris
668 d1f78278 Stavros Sachtouris
    def test_list_networks(self):
669 d1f78278 Stavros Sachtouris
        """Test list_network"""
670 d1f78278 Stavros Sachtouris
        self.network1 = self._create_network(self.netname1)
671 d1f78278 Stavros Sachtouris
        self._wait_for_network(self.network1['id'], 'ACTIVE')
672 d1f78278 Stavros Sachtouris
        self._test_0290_list_networks()
673 d1f78278 Stavros Sachtouris
674 d1f78278 Stavros Sachtouris
    def _test_0290_list_networks(self):
675 d1f78278 Stavros Sachtouris
        r = self.client.list_networks()
676 d1f78278 Stavros Sachtouris
        self.assertTrue(len(r) > 1)
677 d1f78278 Stavros Sachtouris
        ids = [net['id'] for net in r]
678 d1f78278 Stavros Sachtouris
        names = [net['name'] for net in r]
679 d1f78278 Stavros Sachtouris
        self.assertTrue('1' in ids)
680 d1f78278 Stavros Sachtouris
        #self.assertTrue('public' in names)
681 d1f78278 Stavros Sachtouris
        self.assertTrue(self.network1['id'] in ids)
682 d1f78278 Stavros Sachtouris
        self.assertTrue(self.network1['name'] in names)
683 d1f78278 Stavros Sachtouris
684 d1f78278 Stavros Sachtouris
        r = self.client.list_networks(detail=True)
685 d1f78278 Stavros Sachtouris
        ids = [net['id'] for net in r]
686 d1f78278 Stavros Sachtouris
        names = [net['name'] for net in r]
687 d1f78278 Stavros Sachtouris
        for net in r:
688 d1f78278 Stavros Sachtouris
            self.assertTrue(net['id'] in ids)
689 d1f78278 Stavros Sachtouris
            self.assertTrue(net['name'] in names)
690 d1f78278 Stavros Sachtouris
            for term in ('status', 'updated', 'created'):
691 d1f78278 Stavros Sachtouris
                self.assertTrue(term in net.keys())
692 d1f78278 Stavros Sachtouris
693 d1f78278 Stavros Sachtouris
    def test_get_network_details(self):
694 d1f78278 Stavros Sachtouris
        """Test get_network_details"""
695 d1f78278 Stavros Sachtouris
        self.network1 = self._create_network(self.netname1)
696 d1f78278 Stavros Sachtouris
        self._test_0300_get_network_details()
697 d1f78278 Stavros Sachtouris
698 d1f78278 Stavros Sachtouris
    def _test_0300_get_network_details(self):
699 d1f78278 Stavros Sachtouris
        r = self.client.get_network_details(self.network1['id'])
700 d1f78278 Stavros Sachtouris
        net1 = dict(self.network1)
701 d1f78278 Stavros Sachtouris
        net1.pop('status')
702 d1f78278 Stavros Sachtouris
        net1.pop('updated', None)
703 d1f78278 Stavros Sachtouris
        net1.pop('attachments')
704 d1f78278 Stavros Sachtouris
        r.pop('status')
705 d1f78278 Stavros Sachtouris
        r.pop('updated', None)
706 d1f78278 Stavros Sachtouris
        r.pop('attachments')
707 d1f78278 Stavros Sachtouris
        self.assert_dicts_are_deeply_equal(net1, r)
708 d1f78278 Stavros Sachtouris
709 d1f78278 Stavros Sachtouris
    def test_update_network_name(self):
710 d1f78278 Stavros Sachtouris
        self.network2 = self._create_network(self.netname2)
711 d1f78278 Stavros Sachtouris
        self._test_0310_update_network_name()
712 d1f78278 Stavros Sachtouris
713 d1f78278 Stavros Sachtouris
    def _test_0310_update_network_name(self):
714 d1f78278 Stavros Sachtouris
        updated_name = self.netname2 + '_upd'
715 d1f78278 Stavros Sachtouris
        self.client.update_network_name(self.network2['id'], updated_name)
716 d1f78278 Stavros Sachtouris
717 d1f78278 Stavros Sachtouris
        def netwait(wait):
718 d1f78278 Stavros Sachtouris
            r = self.client.get_network_details(self.network2['id'])
719 d1f78278 Stavros Sachtouris
            if r['name'] == updated_name:
720 d1f78278 Stavros Sachtouris
                return
721 d1f78278 Stavros Sachtouris
            time.sleep(wait)
722 d1f78278 Stavros Sachtouris
        self.do_with_progress_bar(
723 d1f78278 Stavros Sachtouris
            netwait,
724 d1f78278 Stavros Sachtouris
            'Network %s name is changing:' % self.network2['id'],
725 d1f78278 Stavros Sachtouris
            self._waits[:5])
726 d1f78278 Stavros Sachtouris
727 d1f78278 Stavros Sachtouris
        r = self.client.get_network_details(self.network2['id'])
728 d1f78278 Stavros Sachtouris
        self.assertEqual(r['name'], updated_name)
729 d1f78278 Stavros Sachtouris
730 d1f78278 Stavros Sachtouris
    """ Don't have auth to test this
731 d1f78278 Stavros Sachtouris
    def test_delete_image(self):
732 d1f78278 Stavros Sachtouris
        ""Test delete_image""
733 d1f78278 Stavros Sachtouris
        self._test_0330_delete_image()
734 d1f78278 Stavros Sachtouris
    def _test_0330_delete_image(self):
735 d1f78278 Stavros Sachtouris
        images = self.client.list_images()
736 d1f78278 Stavros Sachtouris
        self.client.delete_image(images[2]['id'])
737 d1f78278 Stavros Sachtouris
        try:
738 d1f78278 Stavros Sachtouris
            r = self.client.get_image_details(images[2]['id'], success=(400))
739 d1f78278 Stavros Sachtouris
        except ClientError as err:
740 d1f78278 Stavros Sachtouris
            self.assertEqual(err.status, 404)
741 d1f78278 Stavros Sachtouris

742 d1f78278 Stavros Sachtouris
    def test_create_image_metadata(self):
743 d1f78278 Stavros Sachtouris
        ""Test create_image_metadata""
744 d1f78278 Stavros Sachtouris
        self._test_0340_create_image_metadata()
745 d1f78278 Stavros Sachtouris
    def _test_0340_create_image_metadata(self):
746 d1f78278 Stavros Sachtouris
        r = self.client.create_image_metadata(self.img, 'mykey', 'myval')
747 d1f78278 Stavros Sachtouris
        self.assertEqual(r['mykey'], 'myval')
748 d1f78278 Stavros Sachtouris

749 d1f78278 Stavros Sachtouris
    def test_update_image_metadata(self):
750 d1f78278 Stavros Sachtouris
        ""Test update_image_metadata""
751 d1f78278 Stavros Sachtouris
        self._test_0350_update_image_metadata()
752 d1f78278 Stavros Sachtouris
    def _test_0350_update_image_metadata(self):
753 d1f78278 Stavros Sachtouris
        r = self.client.create_image_metadata(self.img, 'mykey0', 'myval')
754 d1f78278 Stavros Sachtouris
        r = self.client.update_image_metadata(self.img, 'mykey0', 'myval0')
755 d1f78278 Stavros Sachtouris
        self.assertEqual(r['mykey0'], 'myval0')
756 d1f78278 Stavros Sachtouris

757 d1f78278 Stavros Sachtouris
    def test_delete_image_metadata(self):
758 d1f78278 Stavros Sachtouris
        ""Test delete_image_metadata""
759 d1f78278 Stavros Sachtouris
        self._test_0360_delete_image_metadata()
760 d1f78278 Stavros Sachtouris
    def _test_0360_delete_image_metadata(self):
761 d1f78278 Stavros Sachtouris
        self.client.create_image_metadata(self.img, 'mykey1', 'myval1')
762 d1f78278 Stavros Sachtouris
        self.client.delete_image_metadata(self.img, 'mykey1')
763 d1f78278 Stavros Sachtouris
        r = self.client.get_image_metadata(self.img)
764 d1f78278 Stavros Sachtouris
        self.assertNotEqual('mykey1' in r)
765 d1f78278 Stavros Sachtouris
    """