Statistics
| Branch: | Tag: | Revision:

root / kamaki / clients / livetest / cyclades.py @ 17b255c7

History | View | Annotate | Download (28.9 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 03493855 Stavros Sachtouris
import time
35 b482315a Stavros Sachtouris
36 03493855 Stavros Sachtouris
from kamaki.clients import livetest, ClientError
37 03493855 Stavros Sachtouris
from kamaki.clients.cyclades import CycladesClient
38 b482315a Stavros Sachtouris
39 03493855 Stavros Sachtouris
40 03493855 Stavros Sachtouris
class Cyclades(livetest.Generic):
41 03493855 Stavros Sachtouris
    """Set up a Cyclades test"""
42 b482315a Stavros Sachtouris
    def setUp(self):
43 03493855 Stavros Sachtouris
        print
44 03493855 Stavros Sachtouris
        with open(self['image', 'details']) as f:
45 03493855 Stavros Sachtouris
            self.img_details = eval(f.read())
46 03493855 Stavros Sachtouris
        self.img = self.img_details['id']
47 03493855 Stavros Sachtouris
        with open(self['flavor', 'details']) as f:
48 03493855 Stavros Sachtouris
            self._flavor_details = eval(f.read())
49 03493855 Stavros Sachtouris
        self.PROFILES = ('ENABLED', 'DISABLED', 'PROTECTED')
50 03493855 Stavros Sachtouris
51 03493855 Stavros Sachtouris
        self.servers = {}
52 03493855 Stavros Sachtouris
        self.now = time.mktime(time.gmtime())
53 03493855 Stavros Sachtouris
        self.servname1 = 'serv' + unicode(self.now)
54 03493855 Stavros Sachtouris
        self.servname2 = self.servname1 + '_v2'
55 03493855 Stavros Sachtouris
        self.servname1 += '_v1'
56 03493855 Stavros Sachtouris
        self.flavorid = 1
57 03493855 Stavros Sachtouris
        #servers have to be created at the begining...
58 03493855 Stavros Sachtouris
        self.networks = {}
59 03493855 Stavros Sachtouris
        self.netname1 = 'net' + unicode(self.now)
60 03493855 Stavros Sachtouris
        self.netname2 = 'net' + unicode(self.now) + '_v2'
61 03493855 Stavros Sachtouris
62 03493855 Stavros Sachtouris
        self.client = CycladesClient(self['compute', 'url'], self['token'])
63 b482315a Stavros Sachtouris
64 b482315a Stavros Sachtouris
    def tearDown(self):
65 03493855 Stavros Sachtouris
        """Destoy servers used in testing"""
66 03493855 Stavros Sachtouris
        for net in self.networks.keys():
67 03493855 Stavros Sachtouris
            self._delete_network(net)
68 03493855 Stavros Sachtouris
        for server in self.servers.values():
69 03493855 Stavros Sachtouris
            self._delete_server(server['id'])
70 03493855 Stavros Sachtouris
            print('DEL VM %s (%s)' % (server['id'], server['name']))
71 03493855 Stavros Sachtouris
72 03493855 Stavros Sachtouris
    def test_000(self):
73 03493855 Stavros Sachtouris
        "Prepare a full Cyclades test scenario"
74 03493855 Stavros Sachtouris
        self.server1 = self._create_server(
75 03493855 Stavros Sachtouris
            self.servname1,
76 03493855 Stavros Sachtouris
            self.flavorid,
77 03493855 Stavros Sachtouris
            self.img)
78 03493855 Stavros Sachtouris
        self.server2 = self._create_server(
79 03493855 Stavros Sachtouris
            self.servname2,
80 03493855 Stavros Sachtouris
            self.flavorid + 2,
81 03493855 Stavros Sachtouris
            self.img)
82 03493855 Stavros Sachtouris
        super(self.__class__, self).test_000()
83 03493855 Stavros Sachtouris
84 03493855 Stavros Sachtouris
    def _create_server(self, servername, flavorid, imageid, personality=None):
85 03493855 Stavros Sachtouris
        server = self.client.create_server(
86 03493855 Stavros Sachtouris
            servername,
87 03493855 Stavros Sachtouris
            flavorid,
88 03493855 Stavros Sachtouris
            imageid,
89 03493855 Stavros Sachtouris
            personality)
90 03493855 Stavros Sachtouris
        print('CREATE VM %s (%s)' % (server['id'], server['name']))
91 03493855 Stavros Sachtouris
        self.servers[servername] = server
92 03493855 Stavros Sachtouris
        return server
93 03493855 Stavros Sachtouris
94 03493855 Stavros Sachtouris
    def _delete_server(self, servid):
95 03493855 Stavros Sachtouris
        try:
96 03493855 Stavros Sachtouris
            current_state = self.client.get_server_details(servid)
97 03493855 Stavros Sachtouris
            current_state = current_state['status']
98 03493855 Stavros Sachtouris
            if current_state == 'DELETED':
99 03493855 Stavros Sachtouris
                return
100 03493855 Stavros Sachtouris
            self.client.delete_server(servid)
101 03493855 Stavros Sachtouris
            self._wait_for_status(servid, current_state)
102 03493855 Stavros Sachtouris
            self.client.delete_server(servid)
103 03493855 Stavros Sachtouris
        except:
104 03493855 Stavros Sachtouris
            return
105 03493855 Stavros Sachtouris
106 03493855 Stavros Sachtouris
    def _create_network(self, netname, **kwargs):
107 03493855 Stavros Sachtouris
        net = self.client.create_network(netname, **kwargs)
108 03493855 Stavros Sachtouris
        self.networks[net['id']] = net
109 03493855 Stavros Sachtouris
        return net
110 03493855 Stavros Sachtouris
111 03493855 Stavros Sachtouris
    def _delete_network(self, netid):
112 03493855 Stavros Sachtouris
        if not netid in self.networks:
113 03493855 Stavros Sachtouris
            return None
114 03493855 Stavros Sachtouris
        print('Disconnect nics of network %s' % netid)
115 03493855 Stavros Sachtouris
        self.client.disconnect_network_nics(netid)
116 03493855 Stavros Sachtouris
117 03493855 Stavros Sachtouris
        def netwait(wait):
118 03493855 Stavros Sachtouris
            try:
119 03493855 Stavros Sachtouris
                self.client.delete_network(netid)
120 03493855 Stavros Sachtouris
            except ClientError:
121 03493855 Stavros Sachtouris
                time.sleep(wait)
122 03493855 Stavros Sachtouris
        self.do_with_progress_bar(
123 03493855 Stavros Sachtouris
            netwait,
124 03493855 Stavros Sachtouris
            'Delete network %s' % netid,
125 03493855 Stavros Sachtouris
            self._waits[:7])
126 03493855 Stavros Sachtouris
        return self.networks.pop(netid)
127 03493855 Stavros Sachtouris
128 03493855 Stavros Sachtouris
    def _wait_for_network(self, netid, status):
129 03493855 Stavros Sachtouris
130 03493855 Stavros Sachtouris
        def netwait(wait):
131 03493855 Stavros Sachtouris
            r = self.client.get_network_details(netid)
132 03493855 Stavros Sachtouris
            if r['status'] == status:
133 03493855 Stavros Sachtouris
                return
134 03493855 Stavros Sachtouris
            time.sleep(wait)
135 03493855 Stavros Sachtouris
        self.do_with_progress_bar(
136 03493855 Stavros Sachtouris
            netwait,
137 03493855 Stavros Sachtouris
            'Wait network %s to reach status %s' % (netid, status),
138 03493855 Stavros Sachtouris
            self._waits[:5])
139 03493855 Stavros Sachtouris
140 03493855 Stavros Sachtouris
    def _wait_for_nic(self, netid, servid, in_creation=True):
141 03493855 Stavros Sachtouris
        self._wait_for_network(netid, 'ACTIVE')
142 03493855 Stavros Sachtouris
143 03493855 Stavros Sachtouris
        def nicwait(wait):
144 03493855 Stavros Sachtouris
            nics = self.client.list_server_nics(servid)
145 03493855 Stavros Sachtouris
            for net in nics:
146 03493855 Stavros Sachtouris
                found_nic = net['network_id'] == netid
147 03493855 Stavros Sachtouris
                if (in_creation and found_nic) or not (
148 03493855 Stavros Sachtouris
                        in_creation or found_nic):
149 03493855 Stavros Sachtouris
                    return
150 03493855 Stavros Sachtouris
            time.sleep(wait)
151 03493855 Stavros Sachtouris
        self.do_with_progress_bar(
152 03493855 Stavros Sachtouris
            nicwait,
153 03493855 Stavros Sachtouris
            'Wait nic-%s-%s to %sconnect' % (
154 03493855 Stavros Sachtouris
                netid,
155 03493855 Stavros Sachtouris
                servid,
156 03493855 Stavros Sachtouris
                '' if in_creation else 'dis'),
157 03493855 Stavros Sachtouris
            self._waits[:5])
158 03493855 Stavros Sachtouris
        for net in self.client.list_server_nics(servid):
159 03493855 Stavros Sachtouris
            if netid == net['network_id']:
160 03493855 Stavros Sachtouris
                return True
161 03493855 Stavros Sachtouris
        return False
162 03493855 Stavros Sachtouris
163 03493855 Stavros Sachtouris
    def _has_status(self, servid, status):
164 03493855 Stavros Sachtouris
        r = self.client.get_server_details(servid)
165 03493855 Stavros Sachtouris
        return r['status'] == status
166 03493855 Stavros Sachtouris
167 03493855 Stavros Sachtouris
    def _wait_for_status(self, servid, status):
168 03493855 Stavros Sachtouris
        (wait_bar, wait_cb) = self._safe_progress_bar(
169 03493855 Stavros Sachtouris
            'Server %s in %s' % (servid, status))
170 03493855 Stavros Sachtouris
        self.client.wait_server(servid, status, wait_cb=wait_cb)
171 03493855 Stavros Sachtouris
        self._safe_progress_bar_finish(wait_bar)
172 02846a75 Stavros Sachtouris
173 db77d79e Stavros Sachtouris
    def test_parallel_creation(self):
174 03493855 Stavros Sachtouris
        """test create with multiple threads
175 f5f2dc53 Stavros Sachtouris
        Do not use this in regular livetest
176 03493855 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 03493855 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 03493855 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 03493855 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 03493855 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 03493855 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 03493855 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 03493855 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 03493855 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 03493855 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 03493855 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 03493855 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 03493855 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 03493855 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 03493855 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 03493855 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 03493855 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 03493855 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 03493855 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 03493855 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 03493855 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 03493855 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 03493855 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 03493855 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 03493855 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 0775d2bd Stavros Sachtouris
        full_args = dict(
600 0775d2bd Stavros Sachtouris
                cidr='192.168.1.0/24',
601 0775d2bd Stavros Sachtouris
                gateway='192.168.1.1',
602 c501d3df Stavros Sachtouris
                type='MAC_FILTERED',
603 0775d2bd Stavros Sachtouris
                dhcp=True)
604 0775d2bd Stavros Sachtouris
        try_args = dict(all=True)
605 0775d2bd Stavros Sachtouris
        try_args.update(full_args)
606 0775d2bd Stavros Sachtouris
        for param, val in try_args.items():
607 c501d3df Stavros Sachtouris
            print('\tdelete %s to avoid max net limit' % n1id)
608 c501d3df Stavros Sachtouris
            self._delete_network(n1id)
609 0775d2bd Stavros Sachtouris
            kwargs = full_args if param == 'all' else {param: val}
610 c501d3df Stavros Sachtouris
            print('\twith %s=%s' % (param, val))
611 c501d3df Stavros Sachtouris
            self.network1 = self._create_network(self.netname1, **kwargs)
612 c501d3df Stavros Sachtouris
            n1id = self.network1['id']
613 c501d3df Stavros Sachtouris
            self._wait_for_network(n1id, 'ACTIVE')
614 c501d3df Stavros Sachtouris
            self.network1 = self.client.get_network_details(n1id)
615 0775d2bd Stavros Sachtouris
            if param == 'all':
616 0775d2bd Stavros Sachtouris
                for p, v in full_args.items():
617 0775d2bd Stavros Sachtouris
                    self.assertEqual(self.network1[p], v)
618 0775d2bd Stavros Sachtouris
            else:
619 0775d2bd Stavros Sachtouris
                self.assertEqual(self.network1[param], val)
620 d1f78278 Stavros Sachtouris
621 d1f78278 Stavros Sachtouris
    def test_connect_server(self):
622 03493855 Stavros Sachtouris
        """Test connect_server"""
623 24ff0a35 Stavros Sachtouris
        self.server1 = self._create_server(
624 24ff0a35 Stavros Sachtouris
            self.servname1,
625 d1f78278 Stavros Sachtouris
            self.flavorid,
626 d1f78278 Stavros Sachtouris
            self.img)
627 d1f78278 Stavros Sachtouris
        self.network1 = self._create_network(self.netname1)
628 d1f78278 Stavros Sachtouris
        self._wait_for_status(self.server1['id'], 'BUILD')
629 d1f78278 Stavros Sachtouris
        self._wait_for_network(self.network1['id'], 'ACTIVE')
630 d1f78278 Stavros Sachtouris
        self._test_0240_connect_server()
631 d1f78278 Stavros Sachtouris
632 d1f78278 Stavros Sachtouris
    def _test_0250_connect_server(self):
633 d1f78278 Stavros Sachtouris
        self.client.connect_server(self.server1['id'], self.network1['id'])
634 d1f78278 Stavros Sachtouris
        self.assertTrue(self._wait_for_nic(
635 d1f78278 Stavros Sachtouris
            self.network1['id'],
636 d1f78278 Stavros Sachtouris
            self.server1['id']))
637 d1f78278 Stavros Sachtouris
638 d1f78278 Stavros Sachtouris
    def test_disconnect_server(self):
639 03493855 Stavros Sachtouris
        """Test disconnect_server"""
640 d1f78278 Stavros Sachtouris
        self.test_connect_server()
641 d1f78278 Stavros Sachtouris
        self._test_0250_disconnect_server()
642 d1f78278 Stavros Sachtouris
643 d1f78278 Stavros Sachtouris
    def _test_0250_disconnect_server(self):
644 d1f78278 Stavros Sachtouris
        self.client.disconnect_server(self.server1['id'], self.network1['id'])
645 24ff0a35 Stavros Sachtouris
        self.assertTrue(self._wait_for_nic(
646 24ff0a35 Stavros Sachtouris
            self.network1['id'],
647 d1f78278 Stavros Sachtouris
            self.server1['id'],
648 d1f78278 Stavros Sachtouris
            in_creation=False))
649 d1f78278 Stavros Sachtouris
650 d1f78278 Stavros Sachtouris
    def _test_0260_wait_for_second_network(self):
651 d1f78278 Stavros Sachtouris
        self.network2 = self._create_network(self.netname2)
652 d1f78278 Stavros Sachtouris
        self._wait_for_network(self.network2['id'], 'ACTIVE')
653 d1f78278 Stavros Sachtouris
654 d1f78278 Stavros Sachtouris
    def test_list_server_nics(self):
655 03493855 Stavros Sachtouris
        """Test list_server_nics"""
656 24ff0a35 Stavros Sachtouris
        self.server1 = self._create_server(
657 24ff0a35 Stavros Sachtouris
            self.servname1,
658 d1f78278 Stavros Sachtouris
            self.flavorid,
659 d1f78278 Stavros Sachtouris
            self.img)
660 d1f78278 Stavros Sachtouris
        self.network2 = self._create_network(self.netname2)
661 d1f78278 Stavros Sachtouris
        self._wait_for_status(self.server1['id'], 'BUILD')
662 d1f78278 Stavros Sachtouris
        self._wait_for_network(self.network2['id'], 'ACTIVE')
663 d1f78278 Stavros Sachtouris
        self._test_0280_list_server_nics()
664 d1f78278 Stavros Sachtouris
665 d1f78278 Stavros Sachtouris
    def _test_0280_list_server_nics(self):
666 d1f78278 Stavros Sachtouris
        r = self.client.list_server_nics(self.server1['id'])
667 d1f78278 Stavros Sachtouris
        len0 = len(r)
668 d1f78278 Stavros Sachtouris
        self.client.connect_server(self.server1['id'], self.network2['id'])
669 d1f78278 Stavros Sachtouris
        self.assertTrue(self._wait_for_nic(
670 d1f78278 Stavros Sachtouris
            self.network2['id'],
671 d1f78278 Stavros Sachtouris
            self.server1['id']))
672 d1f78278 Stavros Sachtouris
        r = self.client.list_server_nics(self.server1['id'])
673 d1f78278 Stavros Sachtouris
        self.assertTrue(len(r) > len0)
674 d1f78278 Stavros Sachtouris
675 d1f78278 Stavros Sachtouris
    def test_list_networks(self):
676 03493855 Stavros Sachtouris
        """Test list_network"""
677 d1f78278 Stavros Sachtouris
        self.network1 = self._create_network(self.netname1)
678 d1f78278 Stavros Sachtouris
        self._wait_for_network(self.network1['id'], 'ACTIVE')
679 d1f78278 Stavros Sachtouris
        self._test_0290_list_networks()
680 d1f78278 Stavros Sachtouris
681 d1f78278 Stavros Sachtouris
    def _test_0290_list_networks(self):
682 d1f78278 Stavros Sachtouris
        r = self.client.list_networks()
683 d1f78278 Stavros Sachtouris
        self.assertTrue(len(r) > 1)
684 d1f78278 Stavros Sachtouris
        ids = [net['id'] for net in r]
685 d1f78278 Stavros Sachtouris
        names = [net['name'] for net in r]
686 d1f78278 Stavros Sachtouris
        self.assertTrue('1' in ids)
687 d1f78278 Stavros Sachtouris
        #self.assertTrue('public' in names)
688 d1f78278 Stavros Sachtouris
        self.assertTrue(self.network1['id'] in ids)
689 d1f78278 Stavros Sachtouris
        self.assertTrue(self.network1['name'] in names)
690 d1f78278 Stavros Sachtouris
691 d1f78278 Stavros Sachtouris
        r = self.client.list_networks(detail=True)
692 d1f78278 Stavros Sachtouris
        ids = [net['id'] for net in r]
693 d1f78278 Stavros Sachtouris
        names = [net['name'] for net in r]
694 d1f78278 Stavros Sachtouris
        for net in r:
695 d1f78278 Stavros Sachtouris
            self.assertTrue(net['id'] in ids)
696 d1f78278 Stavros Sachtouris
            self.assertTrue(net['name'] in names)
697 d1f78278 Stavros Sachtouris
            for term in ('status', 'updated', 'created'):
698 d1f78278 Stavros Sachtouris
                self.assertTrue(term in net.keys())
699 d1f78278 Stavros Sachtouris
700 21d7e374 Stavros Sachtouris
    def test_list_network_nics(self):
701 21d7e374 Stavros Sachtouris
        """Test list_server_nics"""
702 21d7e374 Stavros Sachtouris
        self.server1 = self._create_server(
703 21d7e374 Stavros Sachtouris
            self.servname1,
704 21d7e374 Stavros Sachtouris
            self.flavorid,
705 21d7e374 Stavros Sachtouris
            self.img)
706 21d7e374 Stavros Sachtouris
        self.network1 = self._create_network(self.netname1)
707 21d7e374 Stavros Sachtouris
        self.network2 = self._create_network(self.netname2)
708 21d7e374 Stavros Sachtouris
        self._wait_for_status(self.server1['id'], 'BUILD')
709 21d7e374 Stavros Sachtouris
        self._wait_for_network(self.network1['id'], 'ACTIVE')
710 21d7e374 Stavros Sachtouris
        self._wait_for_network(self.network2['id'], 'ACTIVE')
711 0775d2bd Stavros Sachtouris
        self.client.connect_server(self.server1['id'], self.network1['id'])
712 21d7e374 Stavros Sachtouris
        self.client.connect_server(self.server1['id'], self.network2['id'])
713 0775d2bd Stavros Sachtouris
        self._wait_for_nic(self.network1['id'], self.server1['id'])
714 21d7e374 Stavros Sachtouris
        self._wait_for_nic(self.network2['id'], self.server1['id'])
715 21d7e374 Stavros Sachtouris
        self._test_0293_list_network_nics()
716 21d7e374 Stavros Sachtouris
717 21d7e374 Stavros Sachtouris
    def _test_0293_list_network_nics(self):
718 21d7e374 Stavros Sachtouris
        netid1 = self.network1['id']
719 21d7e374 Stavros Sachtouris
        netid2 = self.network2['id']
720 21d7e374 Stavros Sachtouris
        r = self.client.list_network_nics(netid1)
721 0775d2bd Stavros Sachtouris
        expected = ['nic-%s-1' % self.server1['id']]
722 21d7e374 Stavros Sachtouris
        self.assertEqual(r, expected)
723 21d7e374 Stavros Sachtouris
        r = self.client.list_network_nics(netid2)
724 0775d2bd Stavros Sachtouris
        expected = ['nic-%s-2' % self.server1['id']]
725 21d7e374 Stavros Sachtouris
        self.assertEqual(r, expected)
726 21d7e374 Stavros Sachtouris
727 d1f78278 Stavros Sachtouris
    def test_get_network_details(self):
728 03493855 Stavros Sachtouris
        """Test get_network_details"""
729 d1f78278 Stavros Sachtouris
        self.network1 = self._create_network(self.netname1)
730 d1f78278 Stavros Sachtouris
        self._test_0300_get_network_details()
731 d1f78278 Stavros Sachtouris
732 d1f78278 Stavros Sachtouris
    def _test_0300_get_network_details(self):
733 d1f78278 Stavros Sachtouris
        r = self.client.get_network_details(self.network1['id'])
734 d1f78278 Stavros Sachtouris
        net1 = dict(self.network1)
735 d1f78278 Stavros Sachtouris
        net1.pop('status')
736 d1f78278 Stavros Sachtouris
        net1.pop('updated', None)
737 d1f78278 Stavros Sachtouris
        net1.pop('attachments')
738 d1f78278 Stavros Sachtouris
        r.pop('status')
739 d1f78278 Stavros Sachtouris
        r.pop('updated', None)
740 d1f78278 Stavros Sachtouris
        r.pop('attachments')
741 d1f78278 Stavros Sachtouris
        self.assert_dicts_are_deeply_equal(net1, r)
742 d1f78278 Stavros Sachtouris
743 d1f78278 Stavros Sachtouris
    def test_update_network_name(self):
744 d1f78278 Stavros Sachtouris
        self.network2 = self._create_network(self.netname2)
745 d1f78278 Stavros Sachtouris
        self._test_0310_update_network_name()
746 d1f78278 Stavros Sachtouris
747 d1f78278 Stavros Sachtouris
    def _test_0310_update_network_name(self):
748 d1f78278 Stavros Sachtouris
        updated_name = self.netname2 + '_upd'
749 d1f78278 Stavros Sachtouris
        self.client.update_network_name(self.network2['id'], updated_name)
750 d1f78278 Stavros Sachtouris
751 d1f78278 Stavros Sachtouris
        def netwait(wait):
752 d1f78278 Stavros Sachtouris
            r = self.client.get_network_details(self.network2['id'])
753 d1f78278 Stavros Sachtouris
            if r['name'] == updated_name:
754 d1f78278 Stavros Sachtouris
                return
755 d1f78278 Stavros Sachtouris
            time.sleep(wait)
756 d1f78278 Stavros Sachtouris
        self.do_with_progress_bar(
757 d1f78278 Stavros Sachtouris
            netwait,
758 d1f78278 Stavros Sachtouris
            'Network %s name is changing:' % self.network2['id'],
759 d1f78278 Stavros Sachtouris
            self._waits[:5])
760 d1f78278 Stavros Sachtouris
761 d1f78278 Stavros Sachtouris
        r = self.client.get_network_details(self.network2['id'])
762 d1f78278 Stavros Sachtouris
        self.assertEqual(r['name'], updated_name)
763 d1f78278 Stavros Sachtouris
764 03493855 Stavros Sachtouris
    """ Don't have auth to test this
765 d1f78278 Stavros Sachtouris
    def test_delete_image(self):
766 d1f78278 Stavros Sachtouris
        ""Test delete_image""
767 d1f78278 Stavros Sachtouris
        self._test_0330_delete_image()
768 d1f78278 Stavros Sachtouris
    def _test_0330_delete_image(self):
769 d1f78278 Stavros Sachtouris
        images = self.client.list_images()
770 d1f78278 Stavros Sachtouris
        self.client.delete_image(images[2]['id'])
771 d1f78278 Stavros Sachtouris
        try:
772 d1f78278 Stavros Sachtouris
            r = self.client.get_image_details(images[2]['id'], success=(400))
773 d1f78278 Stavros Sachtouris
        except ClientError as err:
774 d1f78278 Stavros Sachtouris
            self.assertEqual(err.status, 404)
775 d1f78278 Stavros Sachtouris

776 d1f78278 Stavros Sachtouris
    def test_create_image_metadata(self):
777 d1f78278 Stavros Sachtouris
        ""Test create_image_metadata""
778 d1f78278 Stavros Sachtouris
        self._test_0340_create_image_metadata()
779 d1f78278 Stavros Sachtouris
    def _test_0340_create_image_metadata(self):
780 d1f78278 Stavros Sachtouris
        r = self.client.create_image_metadata(self.img, 'mykey', 'myval')
781 d1f78278 Stavros Sachtouris
        self.assertEqual(r['mykey'], 'myval')
782 d1f78278 Stavros Sachtouris

783 d1f78278 Stavros Sachtouris
    def test_update_image_metadata(self):
784 d1f78278 Stavros Sachtouris
        ""Test update_image_metadata""
785 d1f78278 Stavros Sachtouris
        self._test_0350_update_image_metadata()
786 d1f78278 Stavros Sachtouris
    def _test_0350_update_image_metadata(self):
787 d1f78278 Stavros Sachtouris
        r = self.client.create_image_metadata(self.img, 'mykey0', 'myval')
788 d1f78278 Stavros Sachtouris
        r = self.client.update_image_metadata(self.img, 'mykey0', 'myval0')
789 d1f78278 Stavros Sachtouris
        self.assertEqual(r['mykey0'], 'myval0')
790 d1f78278 Stavros Sachtouris

791 d1f78278 Stavros Sachtouris
    def test_delete_image_metadata(self):
792 d1f78278 Stavros Sachtouris
        ""Test delete_image_metadata""
793 d1f78278 Stavros Sachtouris
        self._test_0360_delete_image_metadata()
794 d1f78278 Stavros Sachtouris
    def _test_0360_delete_image_metadata(self):
795 d1f78278 Stavros Sachtouris
        self.client.create_image_metadata(self.img, 'mykey1', 'myval1')
796 d1f78278 Stavros Sachtouris
        self.client.delete_image_metadata(self.img, 'mykey1')
797 d1f78278 Stavros Sachtouris
        r = self.client.get_image_metadata(self.img)
798 d1f78278 Stavros Sachtouris
        self.assertNotEqual('mykey1' in r)
799 d1f78278 Stavros Sachtouris
    """