Statistics
| Branch: | Tag: | Revision:

root / kamaki / clients / livetest / cyclades.py @ 864767eb

History | View | Annotate | Download (28 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 9b745324 Stavros Sachtouris
from kamaki.clients.astakos import AstakosClient
39 b482315a Stavros Sachtouris
40 03493855 Stavros Sachtouris
41 03493855 Stavros Sachtouris
class Cyclades(livetest.Generic):
42 03493855 Stavros Sachtouris
    """Set up a Cyclades test"""
43 b482315a Stavros Sachtouris
    def setUp(self):
44 03493855 Stavros Sachtouris
        print
45 df0045d8 Stavros Sachtouris
        with open(self['cmpimage', 'details']) as f:
46 03493855 Stavros Sachtouris
            self.img_details = eval(f.read())
47 03493855 Stavros Sachtouris
        self.img = self.img_details['id']
48 03493855 Stavros Sachtouris
        with open(self['flavor', 'details']) as f:
49 03493855 Stavros Sachtouris
            self._flavor_details = eval(f.read())
50 03493855 Stavros Sachtouris
        self.PROFILES = ('ENABLED', 'DISABLED', 'PROTECTED')
51 03493855 Stavros Sachtouris
52 03493855 Stavros Sachtouris
        self.servers = {}
53 03493855 Stavros Sachtouris
        self.now = time.mktime(time.gmtime())
54 03493855 Stavros Sachtouris
        self.servname1 = 'serv' + unicode(self.now)
55 03493855 Stavros Sachtouris
        self.servname2 = self.servname1 + '_v2'
56 03493855 Stavros Sachtouris
        self.servname1 += '_v1'
57 2feb9477 Stavros Sachtouris
        self.flavorid = self._flavor_details['id']
58 03493855 Stavros Sachtouris
        #servers have to be created at the begining...
59 03493855 Stavros Sachtouris
        self.networks = {}
60 03493855 Stavros Sachtouris
        self.netname1 = 'net' + unicode(self.now)
61 03493855 Stavros Sachtouris
        self.netname2 = 'net' + unicode(self.now) + '_v2'
62 03493855 Stavros Sachtouris
63 2feb9477 Stavros Sachtouris
        self.cloud = 'cloud.%s' % self['testcloud']
64 2feb9477 Stavros Sachtouris
        aurl, self.token = self[self.cloud, 'url'], self[self.cloud, 'token']
65 9b745324 Stavros Sachtouris
        self.auth_base = AstakosClient(aurl, self.token)
66 9b745324 Stavros Sachtouris
        curl = self.auth_base.get_service_endpoints('compute')['publicURL']
67 9b745324 Stavros Sachtouris
        self.client = CycladesClient(curl, self.token)
68 b482315a Stavros Sachtouris
69 b482315a Stavros Sachtouris
    def tearDown(self):
70 03493855 Stavros Sachtouris
        """Destoy servers used in testing"""
71 03493855 Stavros Sachtouris
        for net in self.networks.keys():
72 03493855 Stavros Sachtouris
            self._delete_network(net)
73 03493855 Stavros Sachtouris
        for server in self.servers.values():
74 03493855 Stavros Sachtouris
            self._delete_server(server['id'])
75 03493855 Stavros Sachtouris
            print('DEL VM %s (%s)' % (server['id'], server['name']))
76 03493855 Stavros Sachtouris
77 03493855 Stavros Sachtouris
    def test_000(self):
78 03493855 Stavros Sachtouris
        "Prepare a full Cyclades test scenario"
79 03493855 Stavros Sachtouris
        self.server1 = self._create_server(
80 8a8faf8c Stavros Sachtouris
            self.servname1, self.flavorid, self.img)
81 03493855 Stavros Sachtouris
        self.server2 = self._create_server(
82 8a8faf8c Stavros Sachtouris
            self.servname2, self.flavorid, self.img)
83 03493855 Stavros Sachtouris
        super(self.__class__, self).test_000()
84 03493855 Stavros Sachtouris
85 03493855 Stavros Sachtouris
    def _create_server(self, servername, flavorid, imageid, personality=None):
86 03493855 Stavros Sachtouris
        server = self.client.create_server(
87 07fdc00c Stavros Sachtouris
            servername, flavorid, imageid, personality=personality)
88 03493855 Stavros Sachtouris
        print('CREATE VM %s (%s)' % (server['id'], server['name']))
89 03493855 Stavros Sachtouris
        self.servers[servername] = server
90 03493855 Stavros Sachtouris
        return server
91 03493855 Stavros Sachtouris
92 03493855 Stavros Sachtouris
    def _delete_server(self, servid):
93 03493855 Stavros Sachtouris
        try:
94 03493855 Stavros Sachtouris
            current_state = self.client.get_server_details(servid)
95 03493855 Stavros Sachtouris
            current_state = current_state['status']
96 03493855 Stavros Sachtouris
            if current_state == 'DELETED':
97 03493855 Stavros Sachtouris
                return
98 03493855 Stavros Sachtouris
            self.client.delete_server(servid)
99 03493855 Stavros Sachtouris
            self._wait_for_status(servid, current_state)
100 03493855 Stavros Sachtouris
            self.client.delete_server(servid)
101 03493855 Stavros Sachtouris
        except:
102 03493855 Stavros Sachtouris
            return
103 03493855 Stavros Sachtouris
104 03493855 Stavros Sachtouris
    def _create_network(self, netname, **kwargs):
105 03493855 Stavros Sachtouris
        net = self.client.create_network(netname, **kwargs)
106 03493855 Stavros Sachtouris
        self.networks[net['id']] = net
107 03493855 Stavros Sachtouris
        return net
108 03493855 Stavros Sachtouris
109 03493855 Stavros Sachtouris
    def _delete_network(self, netid):
110 03493855 Stavros Sachtouris
        if not netid in self.networks:
111 03493855 Stavros Sachtouris
            return None
112 03493855 Stavros Sachtouris
        print('Disconnect nics of network %s' % netid)
113 03493855 Stavros Sachtouris
        self.client.disconnect_network_nics(netid)
114 03493855 Stavros Sachtouris
115 03493855 Stavros Sachtouris
        def netwait(wait):
116 03493855 Stavros Sachtouris
            try:
117 03493855 Stavros Sachtouris
                self.client.delete_network(netid)
118 03493855 Stavros Sachtouris
            except ClientError:
119 03493855 Stavros Sachtouris
                time.sleep(wait)
120 03493855 Stavros Sachtouris
        self.do_with_progress_bar(
121 03493855 Stavros Sachtouris
            netwait,
122 03493855 Stavros Sachtouris
            'Delete network %s' % netid,
123 03493855 Stavros Sachtouris
            self._waits[:7])
124 03493855 Stavros Sachtouris
        return self.networks.pop(netid)
125 03493855 Stavros Sachtouris
126 03493855 Stavros Sachtouris
    def _wait_for_network(self, netid, status):
127 03493855 Stavros Sachtouris
128 03493855 Stavros Sachtouris
        def netwait(wait):
129 03493855 Stavros Sachtouris
            r = self.client.get_network_details(netid)
130 03493855 Stavros Sachtouris
            if r['status'] == status:
131 03493855 Stavros Sachtouris
                return
132 03493855 Stavros Sachtouris
            time.sleep(wait)
133 03493855 Stavros Sachtouris
        self.do_with_progress_bar(
134 03493855 Stavros Sachtouris
            netwait,
135 03493855 Stavros Sachtouris
            'Wait network %s to reach status %s' % (netid, status),
136 03493855 Stavros Sachtouris
            self._waits[:5])
137 03493855 Stavros Sachtouris
138 03493855 Stavros Sachtouris
    def _wait_for_nic(self, netid, servid, in_creation=True):
139 03493855 Stavros Sachtouris
        self._wait_for_network(netid, 'ACTIVE')
140 03493855 Stavros Sachtouris
141 03493855 Stavros Sachtouris
        def nicwait(wait):
142 03493855 Stavros Sachtouris
            nics = self.client.list_server_nics(servid)
143 03493855 Stavros Sachtouris
            for net in nics:
144 03493855 Stavros Sachtouris
                found_nic = net['network_id'] == netid
145 03493855 Stavros Sachtouris
                if (in_creation and found_nic) or not (
146 03493855 Stavros Sachtouris
                        in_creation or found_nic):
147 03493855 Stavros Sachtouris
                    return
148 03493855 Stavros Sachtouris
            time.sleep(wait)
149 03493855 Stavros Sachtouris
        self.do_with_progress_bar(
150 03493855 Stavros Sachtouris
            nicwait,
151 03493855 Stavros Sachtouris
            'Wait nic-%s-%s to %sconnect' % (
152 03493855 Stavros Sachtouris
                netid,
153 03493855 Stavros Sachtouris
                servid,
154 03493855 Stavros Sachtouris
                '' if in_creation else 'dis'),
155 03493855 Stavros Sachtouris
            self._waits[:5])
156 03493855 Stavros Sachtouris
        for net in self.client.list_server_nics(servid):
157 03493855 Stavros Sachtouris
            if netid == net['network_id']:
158 03493855 Stavros Sachtouris
                return True
159 03493855 Stavros Sachtouris
        return False
160 03493855 Stavros Sachtouris
161 03493855 Stavros Sachtouris
    def _has_status(self, servid, status):
162 03493855 Stavros Sachtouris
        r = self.client.get_server_details(servid)
163 b773795c Stavros Sachtouris
        #print 'MY ', servid, ' STATUS IS ', r['status']
164 03493855 Stavros Sachtouris
        return r['status'] == status
165 03493855 Stavros Sachtouris
166 03493855 Stavros Sachtouris
    def _wait_for_status(self, servid, status):
167 03493855 Stavros Sachtouris
        (wait_bar, wait_cb) = self._safe_progress_bar(
168 03493855 Stavros Sachtouris
            'Server %s in %s' % (servid, status))
169 3d6a513a Stavros Sachtouris
        self.client.wait_server(
170 3d6a513a Stavros Sachtouris
            servid, status, wait_cb=wait_cb, delay=2, max_wait=198)
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 b773795c Stavros Sachtouris
        c = []
179 b773795c Stavros Sachtouris
        for i in range(8):
180 b773795c Stavros Sachtouris
            sname = '%s_%s' % (self.servname1, i)
181 b773795c Stavros Sachtouris
            c.append(SilentEvent(
182 b773795c Stavros Sachtouris
                self._create_server, sname, self.flavorid, self.img))
183 b773795c Stavros Sachtouris
        for i in range(8):
184 b773795c Stavros Sachtouris
            c[i].start()
185 db77d79e Stavros Sachtouris
186 db77d79e Stavros Sachtouris
    def test_create_server(self):
187 03493855 Stavros Sachtouris
        """Test create_server"""
188 24ff0a35 Stavros Sachtouris
        self.server1 = self._create_server(
189 b773795c Stavros Sachtouris
            self.servname1, self.flavorid, self.img)
190 db77d79e Stavros Sachtouris
        self._wait_for_status(self.server1['id'], 'BUILD')
191 db77d79e Stavros Sachtouris
        self._test_0010_create_server()
192 db77d79e Stavros Sachtouris
193 db77d79e Stavros Sachtouris
    def _test_0010_create_server(self):
194 db77d79e Stavros Sachtouris
        self.assertEqual(self.server1["name"], self.servname1)
195 c088076b Stavros Sachtouris
        self.assertEqual(self.server1["flavor"]["id"], self.flavorid)
196 c088076b Stavros Sachtouris
        self.assertEqual(self.server1["image"]["id"], self.img)
197 db77d79e Stavros Sachtouris
        self.assertEqual(self.server1["status"], "BUILD")
198 db77d79e Stavros Sachtouris
199 02846a75 Stavros Sachtouris
    def test_list_servers(self):
200 03493855 Stavros Sachtouris
        """Test list servers"""
201 02846a75 Stavros Sachtouris
        self.server1 = self._create_server(
202 b773795c Stavros Sachtouris
            self.servname1, self.flavorid, self.img)
203 02846a75 Stavros Sachtouris
        self.server2 = self._create_server(
204 b773795c Stavros Sachtouris
            self.servname2, self.flavorid, self.img)
205 db77d79e Stavros Sachtouris
        self._test_0020_list_servers()
206 02846a75 Stavros Sachtouris
207 db77d79e Stavros Sachtouris
    def _test_0020_list_servers(self):
208 02846a75 Stavros Sachtouris
        servers = self.client.list_servers()
209 02846a75 Stavros Sachtouris
        dservers = self.client.list_servers(detail=True)
210 02846a75 Stavros Sachtouris
211 03493855 Stavros Sachtouris
        """detailed and simple are same size"""
212 02846a75 Stavros Sachtouris
        self.assertEqual(len(dservers), len(servers))
213 b773795c Stavros Sachtouris
        fields = set([
214 b773795c Stavros Sachtouris
            'created', 'flavor', 'hostId', 'image', 'progress', 'status',
215 b773795c Stavros Sachtouris
            'updated'])
216 b773795c Stavros Sachtouris
        for i, srv in enumerate(servers):
217 b773795c Stavros Sachtouris
            self.assertTrue(fields.isdisjoint(srv))
218 b773795c Stavros Sachtouris
            self.assertTrue(fields.issubset(dservers[i]))
219 02846a75 Stavros Sachtouris
220 03493855 Stavros Sachtouris
        """detailed and simple contain same names"""
221 02846a75 Stavros Sachtouris
        names = sorted(map(lambda x: x["name"], servers))
222 02846a75 Stavros Sachtouris
        dnames = sorted(map(lambda x: x["name"], dservers))
223 02846a75 Stavros Sachtouris
        self.assertEqual(names, dnames)
224 db77d79e Stavros Sachtouris
225 db77d79e Stavros Sachtouris
    def _test_0030_wait_test_servers_to_build(self):
226 03493855 Stavros Sachtouris
        """Pseudo-test to wait for VMs to load"""
227 d1f78278 Stavros Sachtouris
        print('')
228 db77d79e Stavros Sachtouris
        self._wait_for_status(self.server1['id'], 'BUILD')
229 db77d79e Stavros Sachtouris
        self._wait_for_status(self.server2['id'], 'BUILD')
230 db77d79e Stavros Sachtouris
231 db77d79e Stavros Sachtouris
    def test_get_server_details(self):
232 03493855 Stavros Sachtouris
        """Test get_server_details"""
233 24ff0a35 Stavros Sachtouris
        self.server1 = self._create_server(
234 b773795c Stavros Sachtouris
            self.servname1, self.flavorid, self.img)
235 db77d79e Stavros Sachtouris
        self._wait_for_status(self.server1['id'], 'BUILD')
236 db77d79e Stavros Sachtouris
        self._test_0040_get_server_details()
237 db77d79e Stavros Sachtouris
238 db77d79e Stavros Sachtouris
    def _test_0040_get_server_details(self):
239 db77d79e Stavros Sachtouris
        r = self.client.get_server_details(self.server1['id'])
240 db77d79e Stavros Sachtouris
        self.assertEqual(r["name"], self.servname1)
241 c088076b Stavros Sachtouris
        self.assertEqual(r["flavor"]["id"], self.flavorid)
242 c088076b Stavros Sachtouris
        self.assertEqual(r["image"]["id"], self.img)
243 db77d79e Stavros Sachtouris
        self.assertEqual(r["status"], "ACTIVE")
244 db77d79e Stavros Sachtouris
245 db77d79e Stavros Sachtouris
    def test_update_server_name(self):
246 03493855 Stavros Sachtouris
        """Test update_server_name"""
247 24ff0a35 Stavros Sachtouris
        self.server1 = self._create_server(
248 b773795c Stavros Sachtouris
            self.servname1, self.flavorid, self.img)
249 db77d79e Stavros Sachtouris
        self._test_0050_update_server_name()
250 db77d79e Stavros Sachtouris
251 db77d79e Stavros Sachtouris
    def _test_0050_update_server_name(self):
252 db77d79e Stavros Sachtouris
        new_name = self.servname1 + '_new_name'
253 db77d79e Stavros Sachtouris
        self.client.update_server_name(self.server1['id'], new_name)
254 2005b18e Stavros Sachtouris
        r = self.client.get_server_details(
255 b773795c Stavros Sachtouris
            self.server1['id'], success=(200, 400))
256 db77d79e Stavros Sachtouris
        self.assertEqual(r['name'], new_name)
257 db77d79e Stavros Sachtouris
        changed = self.servers.pop(self.servname1)
258 db77d79e Stavros Sachtouris
        changed['name'] = new_name
259 db77d79e Stavros Sachtouris
        self.servers[new_name] = changed
260 db77d79e Stavros Sachtouris
261 db77d79e Stavros Sachtouris
    def test_reboot_server(self):
262 03493855 Stavros Sachtouris
        """Test reboot server"""
263 24ff0a35 Stavros Sachtouris
        self.server1 = self._create_server(
264 b773795c Stavros Sachtouris
            self.servname1, self.flavorid, self.img)
265 db77d79e Stavros Sachtouris
        self._wait_for_status(self.server1['id'], 'BUILD')
266 24ff0a35 Stavros Sachtouris
        self.server2 = self._create_server(
267 b773795c Stavros Sachtouris
            self.servname2, self.flavorid + 2, self.img)
268 db77d79e Stavros Sachtouris
        self._wait_for_status(self.server2['id'], 'BUILD')
269 db77d79e Stavros Sachtouris
        self._test_0060_reboot_server()
270 db77d79e Stavros Sachtouris
        self._wait_for_status(self.server1['id'], 'REBOOT')
271 db77d79e Stavros Sachtouris
        self._wait_for_status(self.server2['id'], 'REBOOT')
272 db77d79e Stavros Sachtouris
273 db77d79e Stavros Sachtouris
    def _test_0060_reboot_server(self):
274 db77d79e Stavros Sachtouris
        self.client.reboot_server(self.server1['id'])
275 db77d79e Stavros Sachtouris
        self.assertTrue(self._has_status(self.server1['id'], 'REBOOT'))
276 db77d79e Stavros Sachtouris
        self.client.reboot_server(self.server2['id'], hard=True)
277 db77d79e Stavros Sachtouris
        self.assertTrue(self._has_status(self.server2['id'], 'REBOOT'))
278 db77d79e Stavros Sachtouris
279 8a8faf8c Stavros Sachtouris
    def test_resize_server(self):
280 8a8faf8c Stavros Sachtouris
        """Modify the flavor of a server"""
281 8a8faf8c Stavros Sachtouris
        self.server1 = self._create_server(
282 8a8faf8c Stavros Sachtouris
            self.servname1, self.flavorid, self.img)
283 8a8faf8c Stavros Sachtouris
        self._test_0065_resize_server()
284 8a8faf8c Stavros Sachtouris
        self.delete_server(self.server1['id'])
285 8a8faf8c Stavros Sachtouris
        self.server1 = self._create_server(
286 8a8faf8c Stavros Sachtouris
            self.servname1, self.flavorid, self.img)
287 8a8faf8c Stavros Sachtouris
288 b773795c Stavros Sachtouris
    def _test_0065_resize_server(self):
289 b773795c Stavros Sachtouris
        self.client.resize_server(self.servname1, self.flavorid + 2)
290 8a8faf8c Stavros Sachtouris
        srv = self.client.get_flavor_details(self.server1['id'])
291 b773795c Stavros Sachtouris
        self.assertEqual(srv['flavor']['id'], self.flavorid + 2)
292 8a8faf8c Stavros Sachtouris
293 db77d79e Stavros Sachtouris
    def _test_0070_wait_test_servers_to_reboot(self):
294 03493855 Stavros Sachtouris
        """Pseudo-test to wait for VMs to load"""
295 d1f78278 Stavros Sachtouris
        print('')
296 db77d79e Stavros Sachtouris
        self._wait_for_status(self.server1['id'], 'REBOOT')
297 db77d79e Stavros Sachtouris
        self._wait_for_status(self.server2['id'], 'REBOOT')
298 db77d79e Stavros Sachtouris
299 db77d79e Stavros Sachtouris
    def test_create_server_metadata(self):
300 03493855 Stavros Sachtouris
        """Test create_server_metadata"""
301 2005b18e Stavros Sachtouris
        self.server1 = self._create_server(
302 b773795c Stavros Sachtouris
            self.servname1, self.flavorid, self.img)
303 db77d79e Stavros Sachtouris
        self._test_0080_create_server_metadata()
304 db77d79e Stavros Sachtouris
305 db77d79e Stavros Sachtouris
    def _test_0080_create_server_metadata(self):
306 24ff0a35 Stavros Sachtouris
        r1 = self.client.create_server_metadata(
307 b773795c Stavros Sachtouris
            self.server1['id'], 'mymeta', 'mymeta val')
308 db77d79e Stavros Sachtouris
        self.assertTrue('mymeta' in r1)
309 db77d79e Stavros Sachtouris
        r2 = self.client.get_server_metadata(self.server1['id'], 'mymeta')
310 c088076b Stavros Sachtouris
        self.assert_dicts_are_equal(r1, r2)
311 db77d79e Stavros Sachtouris
312 db77d79e Stavros Sachtouris
    def test_get_server_metadata(self):
313 03493855 Stavros Sachtouris
        """Test get server_metadata"""
314 24ff0a35 Stavros Sachtouris
        self.server1 = self._create_server(
315 b773795c Stavros Sachtouris
            self.servname1, self.flavorid, self.img)
316 db77d79e Stavros Sachtouris
        self._test_0090_get_server_metadata()
317 db77d79e Stavros Sachtouris
318 db77d79e Stavros Sachtouris
    def _test_0090_get_server_metadata(self):
319 df0045d8 Stavros Sachtouris
        self.client.update_server_metadata(
320 df0045d8 Stavros Sachtouris
            self.server1['id'], mymeta_0='val_0')
321 db77d79e Stavros Sachtouris
        r = self.client.get_server_metadata(self.server1['id'], 'mymeta_0')
322 db77d79e Stavros Sachtouris
        self.assertEqual(r['mymeta_0'], 'val_0')
323 db77d79e Stavros Sachtouris
324 db77d79e Stavros Sachtouris
    def test_update_server_metadata(self):
325 03493855 Stavros Sachtouris
        """Test update_server_metadata"""
326 24ff0a35 Stavros Sachtouris
        self.server1 = self._create_server(
327 b773795c Stavros Sachtouris
            self.servname1, self.flavorid, self.img)
328 db77d79e Stavros Sachtouris
        self._test_0100_update_server_metadata()
329 db77d79e Stavros Sachtouris
330 db77d79e Stavros Sachtouris
    def _test_0100_update_server_metadata(self):
331 df0045d8 Stavros Sachtouris
        r1 = self.client.update_server_metadata(
332 df0045d8 Stavros Sachtouris
            self.server1['id'], mymeta3='val2')
333 db77d79e Stavros Sachtouris
        self.assertTrue('mymeta3'in r1)
334 24ff0a35 Stavros Sachtouris
        r2 = self.client.update_server_metadata(
335 df0045d8 Stavros Sachtouris
            self.server1['id'], mymeta3='val3')
336 db77d79e Stavros Sachtouris
        self.assertTrue(r2['mymeta3'], 'val3')
337 db77d79e Stavros Sachtouris
338 db77d79e Stavros Sachtouris
    def test_delete_server_metadata(self):
339 03493855 Stavros Sachtouris
        """Test delete_server_metadata"""
340 24ff0a35 Stavros Sachtouris
        self.server1 = self._create_server(
341 df0045d8 Stavros Sachtouris
            self.servname1, self.flavorid, self.img)
342 db77d79e Stavros Sachtouris
        self._test_0110_delete_server_metadata()
343 db77d79e Stavros Sachtouris
344 db77d79e Stavros Sachtouris
    def _test_0110_delete_server_metadata(self):
345 df0045d8 Stavros Sachtouris
        r1 = self.client.update_server_metadata(
346 df0045d8 Stavros Sachtouris
            self.server1['id'], mymeta='val')
347 db77d79e Stavros Sachtouris
        self.assertTrue('mymeta' in r1)
348 db77d79e Stavros Sachtouris
        self.client.delete_server_metadata(self.server1['id'], 'mymeta')
349 db77d79e Stavros Sachtouris
        try:
350 db77d79e Stavros Sachtouris
            self.client.get_server_metadata(self.server1['id'], 'mymeta')
351 db77d79e Stavros Sachtouris
            raise ClientError('Wrong Error', status=100)
352 db77d79e Stavros Sachtouris
        except ClientError as err:
353 db77d79e Stavros Sachtouris
            self.assertEqual(err.status, 404)
354 db77d79e Stavros Sachtouris
355 db77d79e Stavros Sachtouris
    def test_list_flavors(self):
356 03493855 Stavros Sachtouris
        """Test flavors_get"""
357 db77d79e Stavros Sachtouris
        self._test_0120_list_flavors()
358 db77d79e Stavros Sachtouris
359 db77d79e Stavros Sachtouris
    def _test_0120_list_flavors(self):
360 db77d79e Stavros Sachtouris
        r = self.client.list_flavors()
361 db77d79e Stavros Sachtouris
        self.assertTrue(len(r) > 1)
362 db77d79e Stavros Sachtouris
        r = self.client.list_flavors(detail=True)
363 db77d79e Stavros Sachtouris
        self.assertTrue('SNF:disk_template' in r[0])
364 db77d79e Stavros Sachtouris
365 db77d79e Stavros Sachtouris
    def test_get_flavor_details(self):
366 03493855 Stavros Sachtouris
        """Test test_get_flavor_details"""
367 db77d79e Stavros Sachtouris
        self._test_0130_get_flavor_details()
368 db77d79e Stavros Sachtouris
369 db77d79e Stavros Sachtouris
    def _test_0130_get_flavor_details(self):
370 db77d79e Stavros Sachtouris
        r = self.client.get_flavor_details(self.flavorid)
371 c088076b Stavros Sachtouris
        self.assert_dicts_are_equal(self._flavor_details, r)
372 db77d79e Stavros Sachtouris
373 a0608786 Stavros Sachtouris
    def test_list_images(self):
374 a0608786 Stavros Sachtouris
        """Test list_images"""
375 a0608786 Stavros Sachtouris
        self._test_0140_list_images()
376 a0608786 Stavros Sachtouris
377 a0608786 Stavros Sachtouris
    def _test_0140_list_images(self):
378 a0608786 Stavros Sachtouris
        r = self.client.list_images()
379 a0608786 Stavros Sachtouris
        self.assertTrue(len(r) > 1)
380 a0608786 Stavros Sachtouris
        r = self.client.list_images(detail=True)
381 a0608786 Stavros Sachtouris
        for detailed_img in r:
382 a0608786 Stavros Sachtouris
            if detailed_img['id'] == self.img:
383 a0608786 Stavros Sachtouris
                break
384 a0608786 Stavros Sachtouris
        self.assert_dicts_are_equal(detailed_img, self.img_details)
385 db77d79e Stavros Sachtouris
386 db77d79e Stavros Sachtouris
    def test_get_image_details(self):
387 03493855 Stavros Sachtouris
        """Test image_details"""
388 db77d79e Stavros Sachtouris
        self._test_0150_get_image_details()
389 db77d79e Stavros Sachtouris
390 db77d79e Stavros Sachtouris
    def _test_0150_get_image_details(self):
391 db77d79e Stavros Sachtouris
        r = self.client.get_image_details(self.img)
392 c088076b Stavros Sachtouris
        self.assert_dicts_are_equal(r, self.img_details)
393 db77d79e Stavros Sachtouris
394 db77d79e Stavros Sachtouris
    def test_get_image_metadata(self):
395 03493855 Stavros Sachtouris
        """Test get_image_metadata"""
396 db77d79e Stavros Sachtouris
        self._test_0160_get_image_metadata()
397 db77d79e Stavros Sachtouris
398 db77d79e Stavros Sachtouris
    def _test_0160_get_image_metadata(self):
399 db77d79e Stavros Sachtouris
        r = self.client.get_image_metadata(self.img)
400 c088076b Stavros Sachtouris
        self.assert_dicts_are_equal(
401 864767eb Stavros Sachtouris
            self.img_details['properties'], r)
402 864767eb Stavros Sachtouris
        for key, val in self.img_details['properties'].items():
403 db77d79e Stavros Sachtouris
            r = self.client.get_image_metadata(self.img, key)
404 db77d79e Stavros Sachtouris
            self.assertEqual(r[key], val)
405 db77d79e Stavros Sachtouris
406 db77d79e Stavros Sachtouris
    def test_shutdown_server(self):
407 03493855 Stavros Sachtouris
        """Test shutdown_server"""
408 24ff0a35 Stavros Sachtouris
        self.server1 = self._create_server(
409 b773795c Stavros Sachtouris
            self.servname1, self.flavorid, self.img)
410 db77d79e Stavros Sachtouris
        self._wait_for_status(self.server1['id'], 'BUILD')
411 db77d79e Stavros Sachtouris
        self._test_0170_shutdown_server()
412 db77d79e Stavros Sachtouris
413 db77d79e Stavros Sachtouris
    def _test_0170_shutdown_server(self):
414 db77d79e Stavros Sachtouris
        self.client.shutdown_server(self.server1['id'])
415 db77d79e Stavros Sachtouris
        self._wait_for_status(self.server1['id'], 'ACTIVE')
416 db77d79e Stavros Sachtouris
        r = self.client.get_server_details(self.server1['id'])
417 db77d79e Stavros Sachtouris
        self.assertEqual(r['status'], 'STOPPED')
418 db77d79e Stavros Sachtouris
419 db77d79e Stavros Sachtouris
    def test_start_server(self):
420 03493855 Stavros Sachtouris
        """Test start_server"""
421 24ff0a35 Stavros Sachtouris
        self.server1 = self._create_server(
422 b773795c Stavros Sachtouris
            self.servname1, self.flavorid, self.img)
423 db77d79e Stavros Sachtouris
        self._wait_for_status(self.server1['id'], 'BUILD')
424 db77d79e Stavros Sachtouris
        self.client.shutdown_server(self.server1['id'])
425 db77d79e Stavros Sachtouris
        self._wait_for_status(self.server1['id'], 'ACTIVE')
426 db77d79e Stavros Sachtouris
        self._test_0180_start_server()
427 db77d79e Stavros Sachtouris
428 db77d79e Stavros Sachtouris
    def _test_0180_start_server(self):
429 db77d79e Stavros Sachtouris
        self.client.start_server(self.server1['id'])
430 db77d79e Stavros Sachtouris
        self._wait_for_status(self.server1['id'], 'STOPPED')
431 db77d79e Stavros Sachtouris
        r = self.client.get_server_details(self.server1['id'])
432 db77d79e Stavros Sachtouris
        self.assertEqual(r['status'], 'ACTIVE')
433 d1f78278 Stavros Sachtouris
434 d1f78278 Stavros Sachtouris
    def test_get_server_console(self):
435 03493855 Stavros Sachtouris
        """Test get_server_console"""
436 24ff0a35 Stavros Sachtouris
        self.server2 = self._create_server(
437 b773795c Stavros Sachtouris
            self.servname2, self.flavorid, self.img)
438 d1f78278 Stavros Sachtouris
        self._wait_for_status(self.server2['id'], 'BUILD')
439 d1f78278 Stavros Sachtouris
        self._test_0190_get_server_console()
440 d1f78278 Stavros Sachtouris
441 d1f78278 Stavros Sachtouris
    def _test_0190_get_server_console(self):
442 d1f78278 Stavros Sachtouris
        r = self.client.get_server_console(self.server2['id'])
443 d1f78278 Stavros Sachtouris
        self.assertTrue('host' in r)
444 d1f78278 Stavros Sachtouris
        self.assertTrue('password' in r)
445 d1f78278 Stavros Sachtouris
        self.assertTrue('port' in r)
446 d1f78278 Stavros Sachtouris
        self.assertTrue('type' in r)
447 d1f78278 Stavros Sachtouris
448 d1f78278 Stavros Sachtouris
    def test_get_firewall_profile(self):
449 03493855 Stavros Sachtouris
        """Test get_firewall_profile"""
450 24ff0a35 Stavros Sachtouris
        self.server1 = self._create_server(
451 b773795c Stavros Sachtouris
            self.servname1, self.flavorid, self.img)
452 d1f78278 Stavros Sachtouris
        self._test_0200_get_firewall_profile()
453 d1f78278 Stavros Sachtouris
454 d1f78278 Stavros Sachtouris
    def _test_0200_get_firewall_profile(self):
455 d1f78278 Stavros Sachtouris
        self._wait_for_status(self.server1['id'], 'BUILD')
456 d1f78278 Stavros Sachtouris
        fprofile = self.client.get_firewall_profile(self.server1['id'])
457 d1f78278 Stavros Sachtouris
        self.assertTrue(fprofile in self.PROFILES)
458 d1f78278 Stavros Sachtouris
459 d1f78278 Stavros Sachtouris
    def test_set_firewall_profile(self):
460 03493855 Stavros Sachtouris
        """Test set_firewall_profile"""
461 24ff0a35 Stavros Sachtouris
        self.server1 = self._create_server(
462 b773795c Stavros Sachtouris
            self.servname1, self.flavorid, self.img)
463 d1f78278 Stavros Sachtouris
        self._test_0210_set_firewall_profile()
464 d1f78278 Stavros Sachtouris
465 d1f78278 Stavros Sachtouris
    def _test_0210_set_firewall_profile(self):
466 d1f78278 Stavros Sachtouris
467 d1f78278 Stavros Sachtouris
        self._wait_for_status(self.server1['id'], 'BUILD')
468 d1f78278 Stavros Sachtouris
        PROFILES = ['DISABLED', 'ENABLED', 'DISABLED', 'PROTECTED']
469 d1f78278 Stavros Sachtouris
        fprofile = self.client.get_firewall_profile(self.server1['id'])
470 d1f78278 Stavros Sachtouris
        print('')
471 d1f78278 Stavros Sachtouris
        count_success = 0
472 d1f78278 Stavros Sachtouris
        for counter, fprofile in enumerate(PROFILES):
473 d1f78278 Stavros Sachtouris
            npos = counter + 1
474 d1f78278 Stavros Sachtouris
            try:
475 d1f78278 Stavros Sachtouris
                nprofile = PROFILES[npos]
476 d1f78278 Stavros Sachtouris
            except IndexError:
477 d1f78278 Stavros Sachtouris
                nprofile = PROFILES[0]
478 d1f78278 Stavros Sachtouris
            print('\tprofile swap %s: %s -> %s' % (npos, fprofile, nprofile))
479 d1f78278 Stavros Sachtouris
            self.client.set_firewall_profile(self.server1['id'], nprofile)
480 d1f78278 Stavros Sachtouris
            time.sleep(0.5)
481 d1f78278 Stavros Sachtouris
            self.client.reboot_server(self.server1['id'], hard=True)
482 d1f78278 Stavros Sachtouris
            time.sleep(1)
483 d1f78278 Stavros Sachtouris
            self._wait_for_status(self.server1['id'], 'REBOOT')
484 d1f78278 Stavros Sachtouris
            time.sleep(0.5)
485 d1f78278 Stavros Sachtouris
            changed = self.client.get_firewall_profile(self.server1['id'])
486 d1f78278 Stavros Sachtouris
            try:
487 d1f78278 Stavros Sachtouris
                self.assertEqual(changed, nprofile)
488 d1f78278 Stavros Sachtouris
            except AssertionError as err:
489 d1f78278 Stavros Sachtouris
                if count_success:
490 d1f78278 Stavros Sachtouris
                    print('\tFAIL in swap #%s' % npos)
491 d1f78278 Stavros Sachtouris
                    break
492 d1f78278 Stavros Sachtouris
                else:
493 d1f78278 Stavros Sachtouris
                    raise err
494 d1f78278 Stavros Sachtouris
            count_success += 1
495 d1f78278 Stavros Sachtouris
496 d1f78278 Stavros Sachtouris
    def test_get_server_stats(self):
497 24ff0a35 Stavros Sachtouris
        self.server1 = self._create_server(
498 b773795c Stavros Sachtouris
            self.servname1, self.flavorid, self.img)
499 d1f78278 Stavros Sachtouris
        self._test_0220_get_server_stats()
500 d1f78278 Stavros Sachtouris
501 d1f78278 Stavros Sachtouris
    def _test_0220_get_server_stats(self):
502 d1f78278 Stavros Sachtouris
        r = self.client.get_server_stats(self.server1['id'])
503 24ff0a35 Stavros Sachtouris
        it = ('cpuBar', 'cpuTimeSeries', 'netBar', 'netTimeSeries', 'refresh')
504 24ff0a35 Stavros Sachtouris
        for term in it:
505 d1f78278 Stavros Sachtouris
            self.assertTrue(term in r)
506 d1f78278 Stavros Sachtouris
507 d1f78278 Stavros Sachtouris
    def test_create_network(self):
508 03493855 Stavros Sachtouris
        """Test create_network"""
509 d1f78278 Stavros Sachtouris
        self._test_0230_create_network()
510 d1f78278 Stavros Sachtouris
511 d1f78278 Stavros Sachtouris
    def _test_0230_create_network(self):
512 c501d3df Stavros Sachtouris
        print('\twith no params')
513 d1f78278 Stavros Sachtouris
        self.network1 = self._create_network(self.netname1)
514 d1f78278 Stavros Sachtouris
        self._wait_for_network(self.network1['id'], 'ACTIVE')
515 c501d3df Stavros Sachtouris
        n1id = self.network1['id']
516 c501d3df Stavros Sachtouris
        self.network1 = self.client.get_network_details(n1id)
517 d1f78278 Stavros Sachtouris
        nets = self.client.list_networks(self.network1['id'])
518 c501d3df Stavros Sachtouris
        chosen = [net for net in nets if net['id'] == n1id][0]
519 d1f78278 Stavros Sachtouris
        chosen.pop('updated')
520 d1f78278 Stavros Sachtouris
        net1 = dict(self.network1)
521 d1f78278 Stavros Sachtouris
        net1.pop('updated')
522 c088076b Stavros Sachtouris
        self.assert_dicts_are_equal(chosen, net1)
523 0775d2bd Stavros Sachtouris
        full_args = dict(
524 0775d2bd Stavros Sachtouris
                cidr='192.168.1.0/24',
525 0775d2bd Stavros Sachtouris
                gateway='192.168.1.1',
526 c501d3df Stavros Sachtouris
                type='MAC_FILTERED',
527 0775d2bd Stavros Sachtouris
                dhcp=True)
528 0775d2bd Stavros Sachtouris
        try_args = dict(all=True)
529 0775d2bd Stavros Sachtouris
        try_args.update(full_args)
530 0775d2bd Stavros Sachtouris
        for param, val in try_args.items():
531 c501d3df Stavros Sachtouris
            print('\tdelete %s to avoid max net limit' % n1id)
532 c501d3df Stavros Sachtouris
            self._delete_network(n1id)
533 0775d2bd Stavros Sachtouris
            kwargs = full_args if param == 'all' else {param: val}
534 c501d3df Stavros Sachtouris
            print('\twith %s=%s' % (param, val))
535 c501d3df Stavros Sachtouris
            self.network1 = self._create_network(self.netname1, **kwargs)
536 c501d3df Stavros Sachtouris
            n1id = self.network1['id']
537 c501d3df Stavros Sachtouris
            self._wait_for_network(n1id, 'ACTIVE')
538 c501d3df Stavros Sachtouris
            self.network1 = self.client.get_network_details(n1id)
539 0775d2bd Stavros Sachtouris
            if param == 'all':
540 0775d2bd Stavros Sachtouris
                for p, v in full_args.items():
541 0775d2bd Stavros Sachtouris
                    self.assertEqual(self.network1[p], v)
542 0775d2bd Stavros Sachtouris
            else:
543 0775d2bd Stavros Sachtouris
                self.assertEqual(self.network1[param], val)
544 d1f78278 Stavros Sachtouris
545 d1f78278 Stavros Sachtouris
    def test_connect_server(self):
546 03493855 Stavros Sachtouris
        """Test connect_server"""
547 24ff0a35 Stavros Sachtouris
        self.server1 = self._create_server(
548 b773795c Stavros Sachtouris
            self.servname1, self.flavorid, self.img)
549 d1f78278 Stavros Sachtouris
        self.network1 = self._create_network(self.netname1)
550 d1f78278 Stavros Sachtouris
        self._wait_for_status(self.server1['id'], 'BUILD')
551 d1f78278 Stavros Sachtouris
        self._wait_for_network(self.network1['id'], 'ACTIVE')
552 d1f78278 Stavros Sachtouris
        self._test_0240_connect_server()
553 d1f78278 Stavros Sachtouris
554 d1f78278 Stavros Sachtouris
    def _test_0250_connect_server(self):
555 d1f78278 Stavros Sachtouris
        self.client.connect_server(self.server1['id'], self.network1['id'])
556 b773795c Stavros Sachtouris
        self.assertTrue(
557 b773795c Stavros Sachtouris
            self._wait_for_nic(self.network1['id'], self.server1['id']))
558 d1f78278 Stavros Sachtouris
559 d1f78278 Stavros Sachtouris
    def test_disconnect_server(self):
560 03493855 Stavros Sachtouris
        """Test disconnect_server"""
561 d1f78278 Stavros Sachtouris
        self.test_connect_server()
562 d1f78278 Stavros Sachtouris
        self._test_0250_disconnect_server()
563 d1f78278 Stavros Sachtouris
564 d1f78278 Stavros Sachtouris
    def _test_0250_disconnect_server(self):
565 d1f78278 Stavros Sachtouris
        self.client.disconnect_server(self.server1['id'], self.network1['id'])
566 24ff0a35 Stavros Sachtouris
        self.assertTrue(self._wait_for_nic(
567 b773795c Stavros Sachtouris
            self.network1['id'], self.server1['id'], in_creation=False))
568 d1f78278 Stavros Sachtouris
569 d1f78278 Stavros Sachtouris
    def _test_0260_wait_for_second_network(self):
570 d1f78278 Stavros Sachtouris
        self.network2 = self._create_network(self.netname2)
571 d1f78278 Stavros Sachtouris
        self._wait_for_network(self.network2['id'], 'ACTIVE')
572 d1f78278 Stavros Sachtouris
573 d1f78278 Stavros Sachtouris
    def test_list_server_nics(self):
574 03493855 Stavros Sachtouris
        """Test list_server_nics"""
575 24ff0a35 Stavros Sachtouris
        self.server1 = self._create_server(
576 b773795c Stavros Sachtouris
            self.servname1, self.flavorid, self.img)
577 d1f78278 Stavros Sachtouris
        self.network2 = self._create_network(self.netname2)
578 d1f78278 Stavros Sachtouris
        self._wait_for_status(self.server1['id'], 'BUILD')
579 d1f78278 Stavros Sachtouris
        self._wait_for_network(self.network2['id'], 'ACTIVE')
580 d1f78278 Stavros Sachtouris
        self._test_0280_list_server_nics()
581 d1f78278 Stavros Sachtouris
582 d1f78278 Stavros Sachtouris
    def _test_0280_list_server_nics(self):
583 d1f78278 Stavros Sachtouris
        r = self.client.list_server_nics(self.server1['id'])
584 d1f78278 Stavros Sachtouris
        len0 = len(r)
585 d1f78278 Stavros Sachtouris
        self.client.connect_server(self.server1['id'], self.network2['id'])
586 b773795c Stavros Sachtouris
        self.assertTrue(
587 b773795c Stavros Sachtouris
            self._wait_for_nic(self.network2['id'], self.server1['id']))
588 d1f78278 Stavros Sachtouris
        r = self.client.list_server_nics(self.server1['id'])
589 d1f78278 Stavros Sachtouris
        self.assertTrue(len(r) > len0)
590 d1f78278 Stavros Sachtouris
591 d1f78278 Stavros Sachtouris
    def test_list_networks(self):
592 03493855 Stavros Sachtouris
        """Test list_network"""
593 d1f78278 Stavros Sachtouris
        self.network1 = self._create_network(self.netname1)
594 d1f78278 Stavros Sachtouris
        self._wait_for_network(self.network1['id'], 'ACTIVE')
595 d1f78278 Stavros Sachtouris
        self._test_0290_list_networks()
596 d1f78278 Stavros Sachtouris
597 d1f78278 Stavros Sachtouris
    def _test_0290_list_networks(self):
598 d1f78278 Stavros Sachtouris
        r = self.client.list_networks()
599 d1f78278 Stavros Sachtouris
        self.assertTrue(len(r) > 1)
600 d1f78278 Stavros Sachtouris
        ids = [net['id'] for net in r]
601 d1f78278 Stavros Sachtouris
        names = [net['name'] for net in r]
602 d1f78278 Stavros Sachtouris
        self.assertTrue('1' in ids)
603 d1f78278 Stavros Sachtouris
        #self.assertTrue('public' in names)
604 d1f78278 Stavros Sachtouris
        self.assertTrue(self.network1['id'] in ids)
605 d1f78278 Stavros Sachtouris
        self.assertTrue(self.network1['name'] in names)
606 d1f78278 Stavros Sachtouris
607 d1f78278 Stavros Sachtouris
        r = self.client.list_networks(detail=True)
608 d1f78278 Stavros Sachtouris
        ids = [net['id'] for net in r]
609 d1f78278 Stavros Sachtouris
        names = [net['name'] for net in r]
610 d1f78278 Stavros Sachtouris
        for net in r:
611 d1f78278 Stavros Sachtouris
            self.assertTrue(net['id'] in ids)
612 d1f78278 Stavros Sachtouris
            self.assertTrue(net['name'] in names)
613 d1f78278 Stavros Sachtouris
            for term in ('status', 'updated', 'created'):
614 d1f78278 Stavros Sachtouris
                self.assertTrue(term in net.keys())
615 d1f78278 Stavros Sachtouris
616 21d7e374 Stavros Sachtouris
    def test_list_network_nics(self):
617 21d7e374 Stavros Sachtouris
        """Test list_server_nics"""
618 21d7e374 Stavros Sachtouris
        self.server1 = self._create_server(
619 b773795c Stavros Sachtouris
            self.servname1, self.flavorid, self.img)
620 21d7e374 Stavros Sachtouris
        self.network1 = self._create_network(self.netname1)
621 21d7e374 Stavros Sachtouris
        self.network2 = self._create_network(self.netname2)
622 21d7e374 Stavros Sachtouris
        self._wait_for_status(self.server1['id'], 'BUILD')
623 21d7e374 Stavros Sachtouris
        self._wait_for_network(self.network1['id'], 'ACTIVE')
624 21d7e374 Stavros Sachtouris
        self._wait_for_network(self.network2['id'], 'ACTIVE')
625 0775d2bd Stavros Sachtouris
        self.client.connect_server(self.server1['id'], self.network1['id'])
626 21d7e374 Stavros Sachtouris
        self.client.connect_server(self.server1['id'], self.network2['id'])
627 0775d2bd Stavros Sachtouris
        self._wait_for_nic(self.network1['id'], self.server1['id'])
628 21d7e374 Stavros Sachtouris
        self._wait_for_nic(self.network2['id'], self.server1['id'])
629 21d7e374 Stavros Sachtouris
        self._test_0293_list_network_nics()
630 21d7e374 Stavros Sachtouris
631 21d7e374 Stavros Sachtouris
    def _test_0293_list_network_nics(self):
632 b773795c Stavros Sachtouris
        netid1, netid2 = self.network1['id'], self.network2['id']
633 21d7e374 Stavros Sachtouris
        r = self.client.list_network_nics(netid1)
634 0775d2bd Stavros Sachtouris
        expected = ['nic-%s-1' % self.server1['id']]
635 21d7e374 Stavros Sachtouris
        self.assertEqual(r, expected)
636 21d7e374 Stavros Sachtouris
        r = self.client.list_network_nics(netid2)
637 0775d2bd Stavros Sachtouris
        expected = ['nic-%s-2' % self.server1['id']]
638 21d7e374 Stavros Sachtouris
        self.assertEqual(r, expected)
639 21d7e374 Stavros Sachtouris
640 d1f78278 Stavros Sachtouris
    def test_get_network_details(self):
641 03493855 Stavros Sachtouris
        """Test get_network_details"""
642 d1f78278 Stavros Sachtouris
        self.network1 = self._create_network(self.netname1)
643 d1f78278 Stavros Sachtouris
        self._test_0300_get_network_details()
644 d1f78278 Stavros Sachtouris
645 d1f78278 Stavros Sachtouris
    def _test_0300_get_network_details(self):
646 d1f78278 Stavros Sachtouris
        r = self.client.get_network_details(self.network1['id'])
647 d1f78278 Stavros Sachtouris
        net1 = dict(self.network1)
648 d1f78278 Stavros Sachtouris
        net1.pop('status')
649 d1f78278 Stavros Sachtouris
        net1.pop('updated', None)
650 d1f78278 Stavros Sachtouris
        net1.pop('attachments')
651 d1f78278 Stavros Sachtouris
        r.pop('status')
652 d1f78278 Stavros Sachtouris
        r.pop('updated', None)
653 d1f78278 Stavros Sachtouris
        r.pop('attachments')
654 c088076b Stavros Sachtouris
        self.assert_dicts_are_equal(net1, r)
655 d1f78278 Stavros Sachtouris
656 d1f78278 Stavros Sachtouris
    def test_update_network_name(self):
657 d1f78278 Stavros Sachtouris
        self.network2 = self._create_network(self.netname2)
658 d1f78278 Stavros Sachtouris
        self._test_0310_update_network_name()
659 d1f78278 Stavros Sachtouris
660 d1f78278 Stavros Sachtouris
    def _test_0310_update_network_name(self):
661 d1f78278 Stavros Sachtouris
        updated_name = self.netname2 + '_upd'
662 d1f78278 Stavros Sachtouris
        self.client.update_network_name(self.network2['id'], updated_name)
663 d1f78278 Stavros Sachtouris
664 d1f78278 Stavros Sachtouris
        def netwait(wait):
665 d1f78278 Stavros Sachtouris
            r = self.client.get_network_details(self.network2['id'])
666 d1f78278 Stavros Sachtouris
            if r['name'] == updated_name:
667 d1f78278 Stavros Sachtouris
                return
668 d1f78278 Stavros Sachtouris
            time.sleep(wait)
669 d1f78278 Stavros Sachtouris
        self.do_with_progress_bar(
670 d1f78278 Stavros Sachtouris
            netwait,
671 d1f78278 Stavros Sachtouris
            'Network %s name is changing:' % self.network2['id'],
672 d1f78278 Stavros Sachtouris
            self._waits[:5])
673 d1f78278 Stavros Sachtouris
674 d1f78278 Stavros Sachtouris
        r = self.client.get_network_details(self.network2['id'])
675 d1f78278 Stavros Sachtouris
        self.assertEqual(r['name'], updated_name)
676 d1f78278 Stavros Sachtouris
677 03493855 Stavros Sachtouris
    """ Don't have auth to test this
678 d1f78278 Stavros Sachtouris
    def test_delete_image(self):
679 d1f78278 Stavros Sachtouris
        ""Test delete_image""
680 d1f78278 Stavros Sachtouris
        self._test_0330_delete_image()
681 d1f78278 Stavros Sachtouris
    def _test_0330_delete_image(self):
682 d1f78278 Stavros Sachtouris
        images = self.client.list_images()
683 d1f78278 Stavros Sachtouris
        self.client.delete_image(images[2]['id'])
684 d1f78278 Stavros Sachtouris
        try:
685 d1f78278 Stavros Sachtouris
            r = self.client.get_image_details(images[2]['id'], success=(400))
686 d1f78278 Stavros Sachtouris
        except ClientError as err:
687 d1f78278 Stavros Sachtouris
            self.assertEqual(err.status, 404)
688 d1f78278 Stavros Sachtouris

689 d1f78278 Stavros Sachtouris
    def test_create_image_metadata(self):
690 d1f78278 Stavros Sachtouris
        ""Test create_image_metadata""
691 d1f78278 Stavros Sachtouris
        self._test_0340_create_image_metadata()
692 d1f78278 Stavros Sachtouris
    def _test_0340_create_image_metadata(self):
693 d1f78278 Stavros Sachtouris
        r = self.client.create_image_metadata(self.img, 'mykey', 'myval')
694 d1f78278 Stavros Sachtouris
        self.assertEqual(r['mykey'], 'myval')
695 d1f78278 Stavros Sachtouris

696 d1f78278 Stavros Sachtouris
    def test_update_image_metadata(self):
697 d1f78278 Stavros Sachtouris
        ""Test update_image_metadata""
698 d1f78278 Stavros Sachtouris
        self._test_0350_update_image_metadata()
699 d1f78278 Stavros Sachtouris
    def _test_0350_update_image_metadata(self):
700 d1f78278 Stavros Sachtouris
        r = self.client.create_image_metadata(self.img, 'mykey0', 'myval')
701 d1f78278 Stavros Sachtouris
        r = self.client.update_image_metadata(self.img, 'mykey0', 'myval0')
702 d1f78278 Stavros Sachtouris
        self.assertEqual(r['mykey0'], 'myval0')
703 d1f78278 Stavros Sachtouris

704 d1f78278 Stavros Sachtouris
    def test_delete_image_metadata(self):
705 d1f78278 Stavros Sachtouris
        ""Test delete_image_metadata""
706 d1f78278 Stavros Sachtouris
        self._test_0360_delete_image_metadata()
707 d1f78278 Stavros Sachtouris
    def _test_0360_delete_image_metadata(self):
708 d1f78278 Stavros Sachtouris
        self.client.create_image_metadata(self.img, 'mykey1', 'myval1')
709 d1f78278 Stavros Sachtouris
        self.client.delete_image_metadata(self.img, 'mykey1')
710 d1f78278 Stavros Sachtouris
        r = self.client.get_image_metadata(self.img)
711 d1f78278 Stavros Sachtouris
        self.assertNotEqual('mykey1' in r)
712 d1f78278 Stavros Sachtouris
    """