Statistics
| Branch: | Tag: | Revision:

root / kamaki / clients / tests.py @ 2b74ab4a

History | View | Annotate | Download (84 kB)

1 15618e89 Stavros Sachtouris
# Copyright 2011 GRNET S.A. All rights reserved.
2 15618e89 Stavros Sachtouris
#
3 15618e89 Stavros Sachtouris
# Redistribution and use in source and binary forms, with or
4 15618e89 Stavros Sachtouris
# without modification, are permitted provided that the following
5 15618e89 Stavros Sachtouris
# conditions are met:
6 15618e89 Stavros Sachtouris
#
7 15618e89 Stavros Sachtouris
#   1. Redistributions of source code must retain the above
8 3dabe5d2 Stavros Sachtouris
#      copyright notice, this list of conditions and the following
9 3dabe5d2 Stavros Sachtouris
#      disclaimer.
10 15618e89 Stavros Sachtouris
#
11 15618e89 Stavros Sachtouris
#   2. Redistributions in binary form must reproduce the above
12 3dabe5d2 Stavros Sachtouris
#      copyright notice, this list of conditions and the following
13 3dabe5d2 Stavros Sachtouris
#      disclaimer in the documentation and/or other materials
14 3dabe5d2 Stavros Sachtouris
#      provided with the distribution.
15 15618e89 Stavros Sachtouris
#
16 15618e89 Stavros Sachtouris
# THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS
17 15618e89 Stavros Sachtouris
# OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 15618e89 Stavros Sachtouris
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
19 15618e89 Stavros Sachtouris
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR
20 15618e89 Stavros Sachtouris
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
21 15618e89 Stavros Sachtouris
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
22 15618e89 Stavros Sachtouris
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
23 15618e89 Stavros Sachtouris
# USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
24 15618e89 Stavros Sachtouris
# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25 15618e89 Stavros Sachtouris
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
26 15618e89 Stavros Sachtouris
# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
27 15618e89 Stavros Sachtouris
# POSSIBILITY OF SUCH DAMAGE.
28 15618e89 Stavros Sachtouris
#
29 15618e89 Stavros Sachtouris
# The views and conclusions contained in the software and
30 15618e89 Stavros Sachtouris
# documentation are those of the authors and should not be
31 15618e89 Stavros Sachtouris
# interpreted as representing official policies, either expressed
32 15618e89 Stavros Sachtouris
# or implied, of GRNET S.A.
33 15618e89 Stavros Sachtouris
34 1bb4d14d Stavros Sachtouris
from argparse import ArgumentParser
35 15618e89 Stavros Sachtouris
import unittest
36 3dabe5d2 Stavros Sachtouris
import time
37 3dabe5d2 Stavros Sachtouris
import datetime
38 3dabe5d2 Stavros Sachtouris
import os
39 3dabe5d2 Stavros Sachtouris
import sys
40 15618e89 Stavros Sachtouris
41 435008b6 Stavros Sachtouris
from kamaki.clients import ClientError
42 435008b6 Stavros Sachtouris
from kamaki.clients.pithos import PithosClient as pithos
43 1bb4d14d Stavros Sachtouris
from kamaki.clients.cyclades import CycladesClient as cyclades
44 b9d07587 Stavros Sachtouris
from kamaki.clients.image import ImageClient as image
45 b9d07587 Stavros Sachtouris
from kamaki.clients.astakos import AstakosClient as astakos
46 7d91734c Stavros Sachtouris
from kamaki.cli.config import Config
47 1bb4d14d Stavros Sachtouris
48 1a85b14f Stavros Sachtouris
TEST_ALL = False
49 1a85b14f Stavros Sachtouris
50 7d91734c Stavros Sachtouris
cnf = Config('/home/saxtouri/.kamakirc')
51 7d91734c Stavros Sachtouris
global_username = cnf.get('global', 'account')
52 7d91734c Stavros Sachtouris
token = cnf.get('global', 'token')
53 3dabe5d2 Stavros Sachtouris
54 1037b811 Stavros Sachtouris
55 b9d07587 Stavros Sachtouris
class testAstakos(unittest.TestCase):
56 3dabe5d2 Stavros Sachtouris
    def setUp(self):
57 7d91734c Stavros Sachtouris
        global cnf
58 7d91734c Stavros Sachtouris
        url = cnf.get('astakos', 'url')
59 3dabe5d2 Stavros Sachtouris
        global token
60 3dabe5d2 Stavros Sachtouris
        self.client = astakos(url, token)
61 3dabe5d2 Stavros Sachtouris
62 3dabe5d2 Stavros Sachtouris
    def tearDown(self):
63 3dabe5d2 Stavros Sachtouris
        pass
64 3dabe5d2 Stavros Sachtouris
65 3dabe5d2 Stavros Sachtouris
    def test_authenticate(self):
66 3dabe5d2 Stavros Sachtouris
        r = self.client.authenticate()
67 3dabe5d2 Stavros Sachtouris
        for term in ('username',
68 3dabe5d2 Stavros Sachtouris
            'auth_token_expires',
69 3dabe5d2 Stavros Sachtouris
            'auth_token',
70 3dabe5d2 Stavros Sachtouris
            'auth_token_created',
71 3dabe5d2 Stavros Sachtouris
            'groups',
72 3dabe5d2 Stavros Sachtouris
            'uniq',
73 3dabe5d2 Stavros Sachtouris
            'has_credits',
74 3dabe5d2 Stavros Sachtouris
            'has_signed_terms'):
75 3dabe5d2 Stavros Sachtouris
            self.assertTrue(term in r)
76 3dabe5d2 Stavros Sachtouris
77 b9d07587 Stavros Sachtouris
78 b9d07587 Stavros Sachtouris
class testImage(unittest.TestCase):
79 3dabe5d2 Stavros Sachtouris
    def setUp(self):
80 7d91734c Stavros Sachtouris
        global cnf
81 7d91734c Stavros Sachtouris
        cyclades_url = cnf.get('compute', 'url')
82 7d91734c Stavros Sachtouris
        url = cnf.get('image', 'url')
83 3dabe5d2 Stavros Sachtouris
        global token
84 3dabe5d2 Stavros Sachtouris
        self.token = token
85 3dabe5d2 Stavros Sachtouris
        self.imgid = 'b2dffe52-64a4-48c3-8a4c-8214cc3165cf'
86 3dabe5d2 Stavros Sachtouris
        self.now = time.mktime(time.gmtime())
87 3dabe5d2 Stavros Sachtouris
        self.imgname = 'img_%s' % self.now
88 3dabe5d2 Stavros Sachtouris
        global global_username
89 7d91734c Stavros Sachtouris
        self.imglocation = 'pithos://%s/pithos/my.img'\
90 3dabe5d2 Stavros Sachtouris
        % global_username
91 3dabe5d2 Stavros Sachtouris
        self.client = image(url, self.token)
92 3dabe5d2 Stavros Sachtouris
        self.cyclades = cyclades(cyclades_url, self.token)
93 3dabe5d2 Stavros Sachtouris
        self._imglist = {}
94 3dabe5d2 Stavros Sachtouris
95 3dabe5d2 Stavros Sachtouris
    def _prepare_img(self):
96 7d91734c Stavros Sachtouris
        global cnf
97 3dabe5d2 Stavros Sachtouris
        global global_username
98 7d91734c Stavros Sachtouris
        username = global_username.split('@')[0]
99 7d91734c Stavros Sachtouris
        imglocalpath =\
100 7d91734c Stavros Sachtouris
        '/home/%s/src/kamaki-settings/files/centos.diskdump' % username
101 3dabe5d2 Stavros Sachtouris
        f = open(imglocalpath, 'rb')
102 7d91734c Stavros Sachtouris
        pithcli = pithos(cnf.get('store', 'url'),
103 3dabe5d2 Stavros Sachtouris
            self.token,
104 7d91734c Stavros Sachtouris
            global_username,
105 3dabe5d2 Stavros Sachtouris
            'pithos')
106 7d91734c Stavros Sachtouris
        print('\t- Upload an image at %s...' % imglocalpath)
107 3dabe5d2 Stavros Sachtouris
        pithcli.upload_object('my.img', f)
108 7d91734c Stavros Sachtouris
        print('\t- ok')
109 3dabe5d2 Stavros Sachtouris
        f.close()
110 3dabe5d2 Stavros Sachtouris
111 3dabe5d2 Stavros Sachtouris
        self.client.register(self.imgname,
112 3dabe5d2 Stavros Sachtouris
            self.imglocation,
113 3dabe5d2 Stavros Sachtouris
            params=dict(is_public=True))
114 3dabe5d2 Stavros Sachtouris
        img = self._get_img_by_name(self.imgname)
115 3dabe5d2 Stavros Sachtouris
        self._imglist[self.imgname] = img
116 3dabe5d2 Stavros Sachtouris
117 3dabe5d2 Stavros Sachtouris
    def tearDown(self):
118 3dabe5d2 Stavros Sachtouris
        for img in self._imglist.values():
119 3dabe5d2 Stavros Sachtouris
            self.cyclades.delete_image(img['id'])
120 3dabe5d2 Stavros Sachtouris
121 3dabe5d2 Stavros Sachtouris
    def _get_img_by_name(self, name):
122 3dabe5d2 Stavros Sachtouris
        r = self.cyclades.list_images()
123 3dabe5d2 Stavros Sachtouris
        for img in r:
124 3dabe5d2 Stavros Sachtouris
            if img['name'] == name:
125 3dabe5d2 Stavros Sachtouris
                return img
126 3dabe5d2 Stavros Sachtouris
        return None
127 3dabe5d2 Stavros Sachtouris
128 3dabe5d2 Stavros Sachtouris
    def assert_dicts_are_deeply_equal(self, d1, d2):
129 3dabe5d2 Stavros Sachtouris
        for k, v in d1.items():
130 3dabe5d2 Stavros Sachtouris
            self.assertTrue(k in d2)
131 3dabe5d2 Stavros Sachtouris
            if isinstance(v, dict):
132 3dabe5d2 Stavros Sachtouris
                self.assert_dicts_are_deeply_equal(v, d2[k])
133 3dabe5d2 Stavros Sachtouris
            else:
134 3dabe5d2 Stavros Sachtouris
                self.assertEqual(unicode(v), unicode(d2[k]))
135 3dabe5d2 Stavros Sachtouris
136 3dabe5d2 Stavros Sachtouris
    def test_list_public(self):
137 3dabe5d2 Stavros Sachtouris
        """Test list_public"""
138 3dabe5d2 Stavros Sachtouris
        r = self.client.list_public()
139 3dabe5d2 Stavros Sachtouris
        r0 = self.client.list_public(order='-')
140 3dabe5d2 Stavros Sachtouris
        self.assertTrue(len(r) > 0)
141 3dabe5d2 Stavros Sachtouris
        for img in r:
142 3dabe5d2 Stavros Sachtouris
            for term in ('status',
143 3dabe5d2 Stavros Sachtouris
                'name',
144 3dabe5d2 Stavros Sachtouris
                'container_format',
145 3dabe5d2 Stavros Sachtouris
                'disk_format',
146 3dabe5d2 Stavros Sachtouris
                'id',
147 3dabe5d2 Stavros Sachtouris
                'size'):
148 3dabe5d2 Stavros Sachtouris
                self.assertTrue(term in img)
149 3dabe5d2 Stavros Sachtouris
        self.assertTrue(len(r), len(r0))
150 3dabe5d2 Stavros Sachtouris
        r0.reverse()
151 3dabe5d2 Stavros Sachtouris
        for i, img in enumerate(r):
152 3dabe5d2 Stavros Sachtouris
            self.assert_dicts_are_deeply_equal(img, r0[i])
153 3dabe5d2 Stavros Sachtouris
        r1 = self.client.list_public(detail=True)
154 3dabe5d2 Stavros Sachtouris
        for img in r1:
155 3dabe5d2 Stavros Sachtouris
            for term in ('status',
156 3dabe5d2 Stavros Sachtouris
                'name',
157 3dabe5d2 Stavros Sachtouris
                'checksum',
158 3dabe5d2 Stavros Sachtouris
                'created_at',
159 3dabe5d2 Stavros Sachtouris
                'disk_format',
160 3dabe5d2 Stavros Sachtouris
                'updated_at',
161 3dabe5d2 Stavros Sachtouris
                'id',
162 3dabe5d2 Stavros Sachtouris
                'location',
163 3dabe5d2 Stavros Sachtouris
                'container_format',
164 3dabe5d2 Stavros Sachtouris
                'owner',
165 3dabe5d2 Stavros Sachtouris
                'is_public',
166 3dabe5d2 Stavros Sachtouris
                'deleted_at',
167 3dabe5d2 Stavros Sachtouris
                'properties',
168 3dabe5d2 Stavros Sachtouris
                'size'):
169 3dabe5d2 Stavros Sachtouris
                self.assertTrue(term in img)
170 7d91734c Stavros Sachtouris
                for interm in (
171 3dabe5d2 Stavros Sachtouris
                    'osfamily',
172 3dabe5d2 Stavros Sachtouris
                    'users',
173 3dabe5d2 Stavros Sachtouris
                    'os',
174 3dabe5d2 Stavros Sachtouris
                    'root_partition',
175 3dabe5d2 Stavros Sachtouris
                    'description'):
176 3dabe5d2 Stavros Sachtouris
                    self.assertTrue(interm in img['properties'])
177 3dabe5d2 Stavros Sachtouris
        size_max = 1000000000
178 3dabe5d2 Stavros Sachtouris
        r2 = self.client.list_public(filters=dict(size_max=size_max))
179 3dabe5d2 Stavros Sachtouris
        self.assertTrue(len(r2) <= len(r))
180 3dabe5d2 Stavros Sachtouris
        for img in r2:
181 3dabe5d2 Stavros Sachtouris
            self.assertTrue(int(img['size']) <= size_max)
182 3dabe5d2 Stavros Sachtouris
183 3dabe5d2 Stavros Sachtouris
    def test_get_meta(self):
184 3dabe5d2 Stavros Sachtouris
        """Test get_meta"""
185 3dabe5d2 Stavros Sachtouris
        r = self.client.get_meta(self.imgid)
186 3dabe5d2 Stavros Sachtouris
        self.assertEqual(r['id'], self.imgid)
187 3dabe5d2 Stavros Sachtouris
        for term in ('status',
188 3dabe5d2 Stavros Sachtouris
            'name',
189 3dabe5d2 Stavros Sachtouris
            'checksum',
190 3dabe5d2 Stavros Sachtouris
            'updated-at',
191 3dabe5d2 Stavros Sachtouris
            'created-at',
192 3dabe5d2 Stavros Sachtouris
            'deleted-at',
193 3dabe5d2 Stavros Sachtouris
            'location',
194 3dabe5d2 Stavros Sachtouris
            'is-public',
195 3dabe5d2 Stavros Sachtouris
            'owner',
196 3dabe5d2 Stavros Sachtouris
            'disk-format',
197 3dabe5d2 Stavros Sachtouris
            'size',
198 3dabe5d2 Stavros Sachtouris
            'container-format'):
199 3dabe5d2 Stavros Sachtouris
            self.assertTrue(term in r)
200 3dabe5d2 Stavros Sachtouris
            for interm in ('kernel',
201 3dabe5d2 Stavros Sachtouris
                'osfamily',
202 3dabe5d2 Stavros Sachtouris
                'users',
203 3dabe5d2 Stavros Sachtouris
                'partition-table',
204 3dabe5d2 Stavros Sachtouris
                'gui', 'sortorder',
205 3dabe5d2 Stavros Sachtouris
                'root-partition',
206 3dabe5d2 Stavros Sachtouris
                'os',
207 3dabe5d2 Stavros Sachtouris
                'description'):
208 3dabe5d2 Stavros Sachtouris
                self.assertTrue(interm in r['properties'])
209 3dabe5d2 Stavros Sachtouris
210 3dabe5d2 Stavros Sachtouris
    def test_register(self):
211 3dabe5d2 Stavros Sachtouris
        """Test register"""
212 3dabe5d2 Stavros Sachtouris
        self._prepare_img()
213 3dabe5d2 Stavros Sachtouris
        self.assertTrue(len(self._imglist) > 0)
214 3dabe5d2 Stavros Sachtouris
        for img in self._imglist.values():
215 3dabe5d2 Stavros Sachtouris
            self.assertTrue(img != None)
216 3dabe5d2 Stavros Sachtouris
217 3dabe5d2 Stavros Sachtouris
    def test_set_members(self):
218 3dabe5d2 Stavros Sachtouris
        """Test set_members"""
219 3dabe5d2 Stavros Sachtouris
        self._prepare_img()
220 3dabe5d2 Stavros Sachtouris
        members = ['%s@fake.net' % self.now]
221 3dabe5d2 Stavros Sachtouris
        for img in self._imglist.values():
222 3dabe5d2 Stavros Sachtouris
            self.client.set_members(img['id'], members)
223 3dabe5d2 Stavros Sachtouris
            r = self.client.list_members(img['id'])
224 3dabe5d2 Stavros Sachtouris
            self.assertEqual(r[0]['member_id'], members[0])
225 3dabe5d2 Stavros Sachtouris
226 3dabe5d2 Stavros Sachtouris
    def test_list_members(self):
227 3dabe5d2 Stavros Sachtouris
        """Test list_members"""
228 3dabe5d2 Stavros Sachtouris
        self.test_set_members()
229 3dabe5d2 Stavros Sachtouris
230 3dabe5d2 Stavros Sachtouris
    def test_remove_members(self):
231 3dabe5d2 Stavros Sachtouris
        """Test remove_members - NO CHECK"""
232 3dabe5d2 Stavros Sachtouris
        return
233 3dabe5d2 Stavros Sachtouris
        self._prepare_img()
234 3dabe5d2 Stavros Sachtouris
        members = ['%s@fake.net' % self.now, '%s_v2@fake.net' % self.now]
235 3dabe5d2 Stavros Sachtouris
        for img in self._imglist.values():
236 3dabe5d2 Stavros Sachtouris
            self.client.set_members(img['id'], members)
237 3dabe5d2 Stavros Sachtouris
            r = self.client.list_members(img['id'])
238 3dabe5d2 Stavros Sachtouris
            self.assertTrue(len(r) > 1)
239 3dabe5d2 Stavros Sachtouris
            self.client.remove_member(img['id'], members[0])
240 3dabe5d2 Stavros Sachtouris
            r0 = self.client.list_members(img['id'])
241 3dabe5d2 Stavros Sachtouris
            self.assertEqual(len(r), 1 + len(r0))
242 3dabe5d2 Stavros Sachtouris
            self.assertEqual(r0[0]['member_id'], members[1])
243 3dabe5d2 Stavros Sachtouris
244 3dabe5d2 Stavros Sachtouris
    def test_list_shared(self):
245 3dabe5d2 Stavros Sachtouris
        """Test list_shared - NOT CHECKED"""
246 3dabe5d2 Stavros Sachtouris
        #No way to test this, if I dont have member images
247 3dabe5d2 Stavros Sachtouris
        pass
248 3dabe5d2 Stavros Sachtouris
249 adb1dde9 Stavros Sachtouris
250 1bb4d14d Stavros Sachtouris
class testCyclades(unittest.TestCase):
251 3dabe5d2 Stavros Sachtouris
    """Set up a Cyclades thorough test"""
252 3dabe5d2 Stavros Sachtouris
    def setUp(self):
253 3dabe5d2 Stavros Sachtouris
        """okeanos"""
254 3dabe5d2 Stavros Sachtouris
        url = 'https://cyclades.okeanos.grnet.gr/api/v1.1'
255 3dabe5d2 Stavros Sachtouris
        global token
256 3dabe5d2 Stavros Sachtouris
        global global_username
257 3dabe5d2 Stavros Sachtouris
        self.img = 'b2dffe52-64a4-48c3-8a4c-8214cc3165cf'
258 3dabe5d2 Stavros Sachtouris
        self.img_details = {
259 3dabe5d2 Stavros Sachtouris
            u'status': u'ACTIVE',
260 3dabe5d2 Stavros Sachtouris
            u'updated': u'2012-10-16T09:04:17+00:00',
261 3dabe5d2 Stavros Sachtouris
            u'name': u'Debian Base',
262 3dabe5d2 Stavros Sachtouris
            u'created': u'2012-10-16T09:03:12+00:00',
263 3dabe5d2 Stavros Sachtouris
            u'progress': 100,
264 3dabe5d2 Stavros Sachtouris
            u'id': 'b2dffe52-64a4-48c3-8a4c-8214cc3165cf',
265 3dabe5d2 Stavros Sachtouris
            u'metadata': {
266 3dabe5d2 Stavros Sachtouris
                u'values': {
267 3dabe5d2 Stavros Sachtouris
                    u'kernel': u'2.6.32',
268 3dabe5d2 Stavros Sachtouris
                    u'osfamily': u'linux',
269 3dabe5d2 Stavros Sachtouris
                    u'users': u'root',
270 3dabe5d2 Stavros Sachtouris
                    u'gui': u'No GUI',
271 3dabe5d2 Stavros Sachtouris
                    u'sortorder': u'1',
272 3dabe5d2 Stavros Sachtouris
                    u'os': u'debian',
273 3dabe5d2 Stavros Sachtouris
                    u'root_partition': u'1',
274 3dabe5d2 Stavros Sachtouris
                    u'description': u'Debian 6.0.6 (Squeeze) Base System',
275 3dabe5d2 Stavros Sachtouris
                    u'partition_table': u'msdos'}
276 3dabe5d2 Stavros Sachtouris
                }
277 3dabe5d2 Stavros Sachtouris
            }
278 3dabe5d2 Stavros Sachtouris
        self.flavor_details = {u'name': u'C1R1024D20',
279 3dabe5d2 Stavros Sachtouris
            u'ram': 1024,
280 3dabe5d2 Stavros Sachtouris
            u'id': 1,
281 3dabe5d2 Stavros Sachtouris
            u'SNF:disk_template': u'drbd',
282 3dabe5d2 Stavros Sachtouris
            u'disk': 20,
283 3dabe5d2 Stavros Sachtouris
            u'cpu': 1}
284 3dabe5d2 Stavros Sachtouris
        self.PROFILES = ('ENABLED', 'DISABLED', 'PROTECTED')
285 3dabe5d2 Stavros Sachtouris
286 3dabe5d2 Stavros Sachtouris
        """okeanos.io"""
287 3dabe5d2 Stavros Sachtouris
        #url = 'https://cyclades.okeanos.io/api/v1.1'
288 3dabe5d2 Stavros Sachtouris
        #global token
289 3dabe5d2 Stavros Sachtouris
        #self.img = '43cc8497-61c3-4c46-ae8d-3e33861f8527'
290 3dabe5d2 Stavros Sachtouris
        #self.img_details= {
291 3dabe5d2 Stavros Sachtouris
        #    u'status': u'ACTIVE',
292 3dabe5d2 Stavros Sachtouris
        #    u'updated': u'2012-08-21T12:57:39+00:00',
293 3dabe5d2 Stavros Sachtouris
        #    u'name': u'Debian Base',
294 3dabe5d2 Stavros Sachtouris
        #    u'created': u'2012-08-21T12:56:53+00:00',
295 3dabe5d2 Stavros Sachtouris
        #    u'progress': 100,
296 3dabe5d2 Stavros Sachtouris
        #    u'id': u'43cc8497-61c3-4c46-ae8d-3e33861f8527',
297 3dabe5d2 Stavros Sachtouris
        #    u'metadata': {
298 3dabe5d2 Stavros Sachtouris
        #        u'values': {
299 3dabe5d2 Stavros Sachtouris
        #            u'kernel': u'2.6.32',
300 3dabe5d2 Stavros Sachtouris
        #            u'osfamily': u'linux',
301 3dabe5d2 Stavros Sachtouris
        #            u'users': u'root',
302 3dabe5d2 Stavros Sachtouris
        #            u'gui': u'No GUI',
303 3dabe5d2 Stavros Sachtouris
        #            u'sortorder': u'1',
304 3dabe5d2 Stavros Sachtouris
        #            u'os': u'debian',
305 3dabe5d2 Stavros Sachtouris
        #            u'root_partition':
306 3dabe5d2 Stavros Sachtouris
        #            u'1', u'description':
307 3dabe5d2 Stavros Sachtouris
        #            u'Debian Squeeze Base System'}
308 3dabe5d2 Stavros Sachtouris
        #        }
309 3dabe5d2 Stavros Sachtouris
        #    }
310 3dabe5d2 Stavros Sachtouris
        #flavorid = 1
311 3dabe5d2 Stavros Sachtouris
312 3dabe5d2 Stavros Sachtouris
        self.servers = {}
313 3dabe5d2 Stavros Sachtouris
        self.now = time.mktime(time.gmtime())
314 3dabe5d2 Stavros Sachtouris
        self.servname1 = 'serv' + unicode(self.now)
315 3dabe5d2 Stavros Sachtouris
        self.servname2 = self.servname1 + '_v2'
316 3dabe5d2 Stavros Sachtouris
        self.flavorid = 1
317 3dabe5d2 Stavros Sachtouris
        #servers have to be created at the begining...
318 3dabe5d2 Stavros Sachtouris
        self.networks = {}
319 3dabe5d2 Stavros Sachtouris
        self.netname1 = 'net' + unicode(self.now)
320 3dabe5d2 Stavros Sachtouris
        self.netname2 = 'net' + unicode(self.now) + '_v2'
321 3dabe5d2 Stavros Sachtouris
322 3dabe5d2 Stavros Sachtouris
        self.client = cyclades(url, token)
323 3dabe5d2 Stavros Sachtouris
        pass
324 3dabe5d2 Stavros Sachtouris
325 2b74ab4a Stavros Sachtouris
    @if_not_all
326 2b74ab4a Stavros Sachtouris
    def test_parallel_creation(self):
327 2b74ab4a Stavros Sachtouris
        """test create with multiple threads"""
328 2b74ab4a Stavros Sachtouris
        from kamaki.clients import SilentEvent
329 2b74ab4a Stavros Sachtouris
        c1 = SilentEvent(self._create_server,
330 2b74ab4a Stavros Sachtouris
            self.servname1,
331 2b74ab4a Stavros Sachtouris
            self.flavorid,
332 2b74ab4a Stavros Sachtouris
            self.img)
333 2b74ab4a Stavros Sachtouris
        c2 = SilentEvent(self._create_server,
334 2b74ab4a Stavros Sachtouris
            self.servname2,
335 2b74ab4a Stavros Sachtouris
            self.flavorid + 2,
336 2b74ab4a Stavros Sachtouris
            self.img)
337 2b74ab4a Stavros Sachtouris
        c3 = SilentEvent(self._create_server,
338 2b74ab4a Stavros Sachtouris
            self.servname1,
339 2b74ab4a Stavros Sachtouris
            self.flavorid,
340 2b74ab4a Stavros Sachtouris
            self.img)
341 2b74ab4a Stavros Sachtouris
        c4 = SilentEvent(self._create_server,
342 2b74ab4a Stavros Sachtouris
            self.servname2,
343 2b74ab4a Stavros Sachtouris
            self.flavorid + 2,
344 2b74ab4a Stavros Sachtouris
            self.img)
345 2b74ab4a Stavros Sachtouris
        c5 = SilentEvent(self._create_server,
346 2b74ab4a Stavros Sachtouris
            self.servname1,
347 2b74ab4a Stavros Sachtouris
            self.flavorid,
348 2b74ab4a Stavros Sachtouris
            self.img)
349 2b74ab4a Stavros Sachtouris
        c6 = SilentEvent(self._create_server,
350 2b74ab4a Stavros Sachtouris
            self.servname2,
351 2b74ab4a Stavros Sachtouris
            self.flavorid + 2,
352 2b74ab4a Stavros Sachtouris
            self.img)
353 2b74ab4a Stavros Sachtouris
        c7 = SilentEvent(self._create_server,
354 2b74ab4a Stavros Sachtouris
            self.servname1,
355 2b74ab4a Stavros Sachtouris
            self.flavorid,
356 2b74ab4a Stavros Sachtouris
            self.img)
357 2b74ab4a Stavros Sachtouris
        c8 = SilentEvent(self._create_server,
358 2b74ab4a Stavros Sachtouris
            self.servname2,
359 2b74ab4a Stavros Sachtouris
            self.flavorid + 2,
360 2b74ab4a Stavros Sachtouris
            self.img)
361 2b74ab4a Stavros Sachtouris
        print('START THREADS')
362 2b74ab4a Stavros Sachtouris
        c1.start()
363 2b74ab4a Stavros Sachtouris
        c2.start()
364 2b74ab4a Stavros Sachtouris
        c3.start()
365 2b74ab4a Stavros Sachtouris
        c4.start()
366 2b74ab4a Stavros Sachtouris
        c5.start()
367 2b74ab4a Stavros Sachtouris
        c6.start()
368 2b74ab4a Stavros Sachtouris
        c7.start()
369 2b74ab4a Stavros Sachtouris
        c8.start()
370 2b74ab4a Stavros Sachtouris
        print('KEWL')
371 2b74ab4a Stavros Sachtouris
372 3dabe5d2 Stavros Sachtouris
    def tearDown(self):
373 3dabe5d2 Stavros Sachtouris
        """Destoy servers used in testing"""
374 3dabe5d2 Stavros Sachtouris
        print
375 3dabe5d2 Stavros Sachtouris
        for netid in self.networks.keys():
376 3dabe5d2 Stavros Sachtouris
            self._delete_network(netid)
377 3dabe5d2 Stavros Sachtouris
        if 0 >= len(self.servers):
378 3dabe5d2 Stavros Sachtouris
            return
379 3dabe5d2 Stavros Sachtouris
        there_are_servers_running = True
380 3dabe5d2 Stavros Sachtouris
        deleted_servers = {}
381 3dabe5d2 Stavros Sachtouris
        waitime = 0
382 3dabe5d2 Stavros Sachtouris
        print('-> Found %s servers to delete' % len(self.servers))
383 3dabe5d2 Stavros Sachtouris
        while there_are_servers_running:
384 3dabe5d2 Stavros Sachtouris
            there_are_servers_running = False
385 3dabe5d2 Stavros Sachtouris
            if waitime > 0:
386 3dabe5d2 Stavros Sachtouris
                c = ['|', '/', '-', '\\']
387 3dabe5d2 Stavros Sachtouris
                suffix = ''
388 3dabe5d2 Stavros Sachtouris
                sys.stdout.write('\t. . . wait %s seconds: ' % waitime)
389 3dabe5d2 Stavros Sachtouris
                for i in range(4 * waitime):
390 3dabe5d2 Stavros Sachtouris
                    oldlen = len(suffix)
391 3dabe5d2 Stavros Sachtouris
                    suffix = '%ss %s' % (i / 4, c[i % 4])
392 3dabe5d2 Stavros Sachtouris
                    sys.stdout.write(oldlen * '\b' + suffix)
393 3dabe5d2 Stavros Sachtouris
                    sys.stdout.flush()
394 3dabe5d2 Stavros Sachtouris
                    time.sleep(0.25)
395 3dabe5d2 Stavros Sachtouris
                oldlen = len(': ' + suffix)
396 3dabe5d2 Stavros Sachtouris
                print(oldlen * '\b' + oldlen * ' ')
397 3dabe5d2 Stavros Sachtouris
                sys.stdout.flush()
398 3dabe5d2 Stavros Sachtouris
            waitime += 3
399 3dabe5d2 Stavros Sachtouris
            dservers = self.client.list_servers(detail=True)
400 3dabe5d2 Stavros Sachtouris
            for server in dservers:
401 3dabe5d2 Stavros Sachtouris
                if server['name'] in self.servers.keys():
402 3dabe5d2 Stavros Sachtouris
                    there_are_servers_running = True
403 3dabe5d2 Stavros Sachtouris
                    sys.stdout.write('\t%s status:%s '\
404 3dabe5d2 Stavros Sachtouris
                        % (server['name'], server['status']))
405 3dabe5d2 Stavros Sachtouris
                    if server['status'] == 'BUILD':
406 3dabe5d2 Stavros Sachtouris
                        print('\twait...')
407 3dabe5d2 Stavros Sachtouris
                    else:
408 3dabe5d2 Stavros Sachtouris
                        print('\tDELETE %s' % server['name'])
409 3dabe5d2 Stavros Sachtouris
                        self._delete_server(server['id'])
410 3dabe5d2 Stavros Sachtouris
                        self.servers.pop(server['name'])
411 3dabe5d2 Stavros Sachtouris
                        deleted_servers[server['name']] = 0
412 3dabe5d2 Stavros Sachtouris
                        waitime = 0
413 3dabe5d2 Stavros Sachtouris
                elif server['name'] in deleted_servers.keys():
414 3dabe5d2 Stavros Sachtouris
                    there_are_servers_running = True
415 3dabe5d2 Stavros Sachtouris
                    sys.stdout.write('\t%s status:%s '\
416 3dabe5d2 Stavros Sachtouris
                        % (server['name'], server['status']))
417 3dabe5d2 Stavros Sachtouris
                    retries = deleted_servers[server['name']]
418 3dabe5d2 Stavros Sachtouris
                    if retries > 10:
419 3dabe5d2 Stavros Sachtouris
                        print('\tretry DELETE %s'\
420 3dabe5d2 Stavros Sachtouris
                            % server['name'])
421 3dabe5d2 Stavros Sachtouris
                        self._delete_server(server['id'])
422 3dabe5d2 Stavros Sachtouris
                        retries = 0
423 3dabe5d2 Stavros Sachtouris
                        waitime = 0
424 3dabe5d2 Stavros Sachtouris
                    else:
425 3dabe5d2 Stavros Sachtouris
                        print('\tnot deleted yet ...')
426 3dabe5d2 Stavros Sachtouris
                    deleted_servers[server['name']] = retries + 1
427 3dabe5d2 Stavros Sachtouris
428 3dabe5d2 Stavros Sachtouris
    def _create_server(self, servername, flavorid, imageid, personality=None):
429 3dabe5d2 Stavros Sachtouris
        server = self.client.create_server(servername,
430 3dabe5d2 Stavros Sachtouris
            flavorid,
431 3dabe5d2 Stavros Sachtouris
            imageid,
432 3dabe5d2 Stavros Sachtouris
            personality)
433 3dabe5d2 Stavros Sachtouris
        self.servers[servername] = server
434 3dabe5d2 Stavros Sachtouris
        return server
435 3dabe5d2 Stavros Sachtouris
436 3dabe5d2 Stavros Sachtouris
    def _delete_server(self, servid):
437 3dabe5d2 Stavros Sachtouris
        self.client.delete_server(servid)
438 3dabe5d2 Stavros Sachtouris
439 3dabe5d2 Stavros Sachtouris
    def _create_network(self, netname, **kwargs):
440 3dabe5d2 Stavros Sachtouris
        net = self.client.create_network(netname, **kwargs)
441 3dabe5d2 Stavros Sachtouris
        self.networks[net['id']] = net
442 3dabe5d2 Stavros Sachtouris
        return net
443 3dabe5d2 Stavros Sachtouris
444 3dabe5d2 Stavros Sachtouris
    def _delete_network(self, netid):
445 3dabe5d2 Stavros Sachtouris
        sys.stdout.write('\tDelete network %s ' % netid)
446 3dabe5d2 Stavros Sachtouris
        self.client.disconnect_network_nics(netid)
447 3dabe5d2 Stavros Sachtouris
        wait = 3
448 3dabe5d2 Stavros Sachtouris
        while True:
449 3dabe5d2 Stavros Sachtouris
            try:
450 3dabe5d2 Stavros Sachtouris
                self.client.delete_network(netid)
451 3dabe5d2 Stavros Sachtouris
                print('\n\tSUCCESFULL COMMIT delete network %s' % netid)
452 3dabe5d2 Stavros Sachtouris
                break
453 3dabe5d2 Stavros Sachtouris
            except ClientError as err:
454 3dabe5d2 Stavros Sachtouris
                self.assertEqual(err.status, 421)
455 3dabe5d2 Stavros Sachtouris
                time.sleep(wait)
456 3dabe5d2 Stavros Sachtouris
                wait += 3
457 3dabe5d2 Stavros Sachtouris
                sys.stdout.write('.')
458 3dabe5d2 Stavros Sachtouris
459 3dabe5d2 Stavros Sachtouris
    def if_not_all(foo):
460 3dabe5d2 Stavros Sachtouris
        global TEST_ALL
461 3dabe5d2 Stavros Sachtouris
        if TEST_ALL:
462 3dabe5d2 Stavros Sachtouris
            return None
463 3dabe5d2 Stavros Sachtouris
        return foo
464 3dabe5d2 Stavros Sachtouris
465 3dabe5d2 Stavros Sachtouris
    def assert_dicts_are_deeply_equal(self, d1, d2):
466 3dabe5d2 Stavros Sachtouris
        for k, v in d1.items():
467 3dabe5d2 Stavros Sachtouris
            self.assertTrue(k in d2)
468 3dabe5d2 Stavros Sachtouris
            if isinstance(v, dict):
469 3dabe5d2 Stavros Sachtouris
                self.assert_dicts_are_deeply_equal(v, d2[k])
470 3dabe5d2 Stavros Sachtouris
            else:
471 3dabe5d2 Stavros Sachtouris
                self.assertEqual(unicode(v), unicode(d2[k]))
472 3dabe5d2 Stavros Sachtouris
473 3dabe5d2 Stavros Sachtouris
    def test_000(self):
474 3dabe5d2 Stavros Sachtouris
        "Prepare a full Cyclades test scenario"
475 3dabe5d2 Stavros Sachtouris
        global TEST_ALL
476 3dabe5d2 Stavros Sachtouris
        TEST_ALL = True
477 3dabe5d2 Stavros Sachtouris
478 3dabe5d2 Stavros Sachtouris
        self.server1 = self._create_server(self.servname1,
479 3dabe5d2 Stavros Sachtouris
            self.flavorid,
480 3dabe5d2 Stavros Sachtouris
            self.img)
481 3dabe5d2 Stavros Sachtouris
        self.server2 = self._create_server(self.servname2,
482 3dabe5d2 Stavros Sachtouris
            self.flavorid + 2,
483 3dabe5d2 Stavros Sachtouris
            self.img)
484 3dabe5d2 Stavros Sachtouris
485 3dabe5d2 Stavros Sachtouris
        print('testing')
486 3dabe5d2 Stavros Sachtouris
        sys.stdout.write(' test create server')
487 3dabe5d2 Stavros Sachtouris
        self._test_create_server()
488 3dabe5d2 Stavros Sachtouris
        print('...ok')
489 3dabe5d2 Stavros Sachtouris
490 3dabe5d2 Stavros Sachtouris
        sys.stdout.write(' test list servers')
491 3dabe5d2 Stavros Sachtouris
        self._test_list_servers()
492 3dabe5d2 Stavros Sachtouris
        print('...ok')
493 3dabe5d2 Stavros Sachtouris
494 3dabe5d2 Stavros Sachtouris
        print('- wait for test servers to build')
495 3dabe5d2 Stavros Sachtouris
        self._wait_for_status(self.server1['id'], 'BUILD')
496 3dabe5d2 Stavros Sachtouris
        self._wait_for_status(self.server2['id'], 'BUILD')
497 3dabe5d2 Stavros Sachtouris
        print('- ok')
498 3dabe5d2 Stavros Sachtouris
499 3dabe5d2 Stavros Sachtouris
        sys.stdout.write(' test get server details')
500 3dabe5d2 Stavros Sachtouris
        self._test_get_server_details()
501 3dabe5d2 Stavros Sachtouris
        print('...ok')
502 3dabe5d2 Stavros Sachtouris
503 3dabe5d2 Stavros Sachtouris
        sys.stdout.write(' test get image details')
504 3dabe5d2 Stavros Sachtouris
        self._test_get_image_details()
505 3dabe5d2 Stavros Sachtouris
        print('...ok')
506 3dabe5d2 Stavros Sachtouris
507 3dabe5d2 Stavros Sachtouris
        sys.stdout.write(' test update_server_name')
508 3dabe5d2 Stavros Sachtouris
        self._test_update_server_name()
509 3dabe5d2 Stavros Sachtouris
        print('...ok')
510 3dabe5d2 Stavros Sachtouris
511 3dabe5d2 Stavros Sachtouris
        sys.stdout.write(' test reboot_server')
512 3dabe5d2 Stavros Sachtouris
        self._test_reboot_server()
513 3dabe5d2 Stavros Sachtouris
        print('...ok')
514 3dabe5d2 Stavros Sachtouris
515 3dabe5d2 Stavros Sachtouris
        print('- wait for test servers to boot')
516 3dabe5d2 Stavros Sachtouris
        self._wait_for_status(self.server1['id'], 'REBOOT')
517 3dabe5d2 Stavros Sachtouris
        self._wait_for_status(self.server2['id'], 'REBOOT')
518 3dabe5d2 Stavros Sachtouris
        print('- ok')
519 3dabe5d2 Stavros Sachtouris
520 3dabe5d2 Stavros Sachtouris
        sys.stdout.write(' test create_server_metadata')
521 3dabe5d2 Stavros Sachtouris
        self._test_create_server_metadata()
522 3dabe5d2 Stavros Sachtouris
        print('...ok')
523 3dabe5d2 Stavros Sachtouris
524 3dabe5d2 Stavros Sachtouris
        sys.stdout.write(' test get_server_metadata')
525 3dabe5d2 Stavros Sachtouris
        self._test_get_server_metadata()
526 3dabe5d2 Stavros Sachtouris
        print('...ok')
527 3dabe5d2 Stavros Sachtouris
528 3dabe5d2 Stavros Sachtouris
        sys.stdout.write(' test update_server_metadata')
529 3dabe5d2 Stavros Sachtouris
        self._test_update_server_metadata()
530 3dabe5d2 Stavros Sachtouris
        print('...ok')
531 3dabe5d2 Stavros Sachtouris
532 3dabe5d2 Stavros Sachtouris
        sys.stdout.write(' test delete_server_metadata')
533 3dabe5d2 Stavros Sachtouris
        self._test_delete_server_metadata()
534 3dabe5d2 Stavros Sachtouris
        print('...ok')
535 3dabe5d2 Stavros Sachtouris
536 3dabe5d2 Stavros Sachtouris
        sys.stdout.write(' test list_flavors')
537 3dabe5d2 Stavros Sachtouris
        self._test_list_flavors()
538 3dabe5d2 Stavros Sachtouris
        print('...ok')
539 3dabe5d2 Stavros Sachtouris
540 3dabe5d2 Stavros Sachtouris
        sys.stdout.write(' test get_flavor_details')
541 3dabe5d2 Stavros Sachtouris
        self._test_get_flavor_details()
542 3dabe5d2 Stavros Sachtouris
        print('...ok')
543 3dabe5d2 Stavros Sachtouris
544 3dabe5d2 Stavros Sachtouris
        sys.stdout.write(' test list_images')
545 3dabe5d2 Stavros Sachtouris
        self._test_list_images()
546 3dabe5d2 Stavros Sachtouris
        print('...ok')
547 3dabe5d2 Stavros Sachtouris
548 3dabe5d2 Stavros Sachtouris
        sys.stdout.write(' test get_image_details')
549 3dabe5d2 Stavros Sachtouris
        self._test_get_image_details()
550 3dabe5d2 Stavros Sachtouris
        print('...ok')
551 3dabe5d2 Stavros Sachtouris
552 3dabe5d2 Stavros Sachtouris
        sys.stdout.write(' test get_image_metadata')
553 3dabe5d2 Stavros Sachtouris
        self._test_get_image_metadata()
554 3dabe5d2 Stavros Sachtouris
        print('...ok')
555 3dabe5d2 Stavros Sachtouris
556 3dabe5d2 Stavros Sachtouris
        sys.stdout.write(' test shutdown_server')
557 3dabe5d2 Stavros Sachtouris
        self._test_shutdown_server()
558 3dabe5d2 Stavros Sachtouris
        print('...ok')
559 3dabe5d2 Stavros Sachtouris
560 3dabe5d2 Stavros Sachtouris
        sys.stdout.write(' test start_server')
561 3dabe5d2 Stavros Sachtouris
        self._test_start_server()
562 3dabe5d2 Stavros Sachtouris
        print('...ok')
563 3dabe5d2 Stavros Sachtouris
564 3dabe5d2 Stavros Sachtouris
        sys.stdout.write(' test get_server_console')
565 3dabe5d2 Stavros Sachtouris
        self._test_get_server_console()
566 3dabe5d2 Stavros Sachtouris
        print('...ok')
567 3dabe5d2 Stavros Sachtouris
568 3dabe5d2 Stavros Sachtouris
        sys.stdout.write(' test get_firewall_profile')
569 3dabe5d2 Stavros Sachtouris
        self._test_get_firewall_profile()
570 3dabe5d2 Stavros Sachtouris
        print('...ok')
571 3dabe5d2 Stavros Sachtouris
572 3dabe5d2 Stavros Sachtouris
        sys.stdout.write(' test set_firewall_profile')
573 3dabe5d2 Stavros Sachtouris
        self._test_set_firewall_profile()
574 3dabe5d2 Stavros Sachtouris
        print('...ok')
575 3dabe5d2 Stavros Sachtouris
576 3dabe5d2 Stavros Sachtouris
        sys.stdout.write(' test get_server_stats')
577 3dabe5d2 Stavros Sachtouris
        self._test_get_server_stats()
578 3dabe5d2 Stavros Sachtouris
        print('...ok')
579 3dabe5d2 Stavros Sachtouris
580 3dabe5d2 Stavros Sachtouris
        self.network1 = self._create_network(self.netname1)
581 3dabe5d2 Stavros Sachtouris
582 3dabe5d2 Stavros Sachtouris
        sys.stdout.write(' test create_network')
583 3dabe5d2 Stavros Sachtouris
        self._test_create_network()
584 3dabe5d2 Stavros Sachtouris
        print('...ok')
585 3dabe5d2 Stavros Sachtouris
586 7d91734c Stavros Sachtouris
        print('- wait for network to be activated')
587 3dabe5d2 Stavros Sachtouris
        self._wait_for_network(self.network1['id'], 'ACTIVE')
588 3dabe5d2 Stavros Sachtouris
        print('- ok')
589 3dabe5d2 Stavros Sachtouris
590 3dabe5d2 Stavros Sachtouris
        sys.stdout.write(' test connect_server')
591 3dabe5d2 Stavros Sachtouris
        self._test_connect_server()
592 3dabe5d2 Stavros Sachtouris
        print('...ok')
593 3dabe5d2 Stavros Sachtouris
594 3dabe5d2 Stavros Sachtouris
        sys.stdout.write(' test disconnect_server')
595 3dabe5d2 Stavros Sachtouris
        self._test_disconnect_server()
596 3dabe5d2 Stavros Sachtouris
        print('...ok')
597 3dabe5d2 Stavros Sachtouris
598 3dabe5d2 Stavros Sachtouris
        self.network2 = self._create_network(self.netname2)
599 7d91734c Stavros Sachtouris
        print('- wait for network to be activated')
600 3dabe5d2 Stavros Sachtouris
        self._wait_for_network(self.network2['id'], 'ACTIVE')
601 3dabe5d2 Stavros Sachtouris
        print('- ok')
602 3dabe5d2 Stavros Sachtouris
603 3dabe5d2 Stavros Sachtouris
        sys.stdout.write(' test list_server_nics')
604 3dabe5d2 Stavros Sachtouris
        self._test_list_server_nics()
605 3dabe5d2 Stavros Sachtouris
        print('...ok')
606 3dabe5d2 Stavros Sachtouris
607 3dabe5d2 Stavros Sachtouris
        sys.stdout.write(' test list_networks')
608 3dabe5d2 Stavros Sachtouris
        self._test_list_networks()
609 3dabe5d2 Stavros Sachtouris
        print('...ok')
610 3dabe5d2 Stavros Sachtouris
611 3dabe5d2 Stavros Sachtouris
        sys.stdout.write(' test get_network_details')
612 3dabe5d2 Stavros Sachtouris
        self._test_get_network_details()
613 3dabe5d2 Stavros Sachtouris
        print('...ok')
614 3dabe5d2 Stavros Sachtouris
615 3dabe5d2 Stavros Sachtouris
        sys.stdout.write(' test update_network_name')
616 3dabe5d2 Stavros Sachtouris
        self._test_update_network_name()
617 3dabe5d2 Stavros Sachtouris
        print('...ok')
618 3dabe5d2 Stavros Sachtouris
619 3dabe5d2 Stavros Sachtouris
        """Don't have auth for these:
620 3dabe5d2 Stavros Sachtouris
        sys.stdout.write(' test delete_image')
621 3dabe5d2 Stavros Sachtouris
        self._test_delete_image()
622 3dabe5d2 Stavros Sachtouris
        print('...ok')
623 3dabe5d2 Stavros Sachtouris
        sys.stdout.write(' test create_image_metadata')
624 3dabe5d2 Stavros Sachtouris
        self._test_create_image_metadata()
625 3dabe5d2 Stavros Sachtouris
        print('...ok')
626 3dabe5d2 Stavros Sachtouris
        sys.stdout.write(' test update_image_metadata')
627 3dabe5d2 Stavros Sachtouris
        self._test_update_image_metadata()
628 3dabe5d2 Stavros Sachtouris
        print('...ok')
629 3dabe5d2 Stavros Sachtouris
        sys.stdout.write(' test delete_image_metadata')
630 3dabe5d2 Stavros Sachtouris
        self._test_delete_image_metadata()
631 3dabe5d2 Stavros Sachtouris
        print('...ok')
632 3dabe5d2 Stavros Sachtouris
        """
633 3dabe5d2 Stavros Sachtouris
634 3dabe5d2 Stavros Sachtouris
    def _wait_for_network(self, netid, status):
635 3dabe5d2 Stavros Sachtouris
        wait = 3
636 3dabe5d2 Stavros Sachtouris
        limit = 50
637 3dabe5d2 Stavros Sachtouris
        c = ['|', '/', '-', '\\']
638 3dabe5d2 Stavros Sachtouris
        sys.stdout.write('\t- make net %s %s  ' % (netid, status))
639 3dabe5d2 Stavros Sachtouris
        while wait < limit:
640 3dabe5d2 Stavros Sachtouris
            r = self.client.get_network_details(netid)
641 3dabe5d2 Stavros Sachtouris
            if r['status'] == status:
642 3dabe5d2 Stavros Sachtouris
                print('\tOK')
643 3dabe5d2 Stavros Sachtouris
                return True
644 3dabe5d2 Stavros Sachtouris
            sys.stdout.write('\tit is now %s, wait %ss  '\
645 3dabe5d2 Stavros Sachtouris
                % (r['status'], wait))
646 3dabe5d2 Stavros Sachtouris
            for i in range(wait * 4):
647 3dabe5d2 Stavros Sachtouris
                sys.stdout.write('\b%s' % c[i % 4])
648 3dabe5d2 Stavros Sachtouris
                sys.stdout.flush()
649 3dabe5d2 Stavros Sachtouris
                time.sleep(0.25)
650 3dabe5d2 Stavros Sachtouris
            print('\b ')
651 3dabe5d2 Stavros Sachtouris
            wait += 3
652 3dabe5d2 Stavros Sachtouris
        return False
653 3dabe5d2 Stavros Sachtouris
654 3dabe5d2 Stavros Sachtouris
    def _wait_for_nic(self, netid, servid, in_creation=True):
655 3dabe5d2 Stavros Sachtouris
        self._wait_for_network(netid, 'ACTIVE')
656 3dabe5d2 Stavros Sachtouris
        c = ['|', '/', '-', '\\']
657 3dabe5d2 Stavros Sachtouris
        limit = 50
658 3dabe5d2 Stavros Sachtouris
        wait = 3
659 3dabe5d2 Stavros Sachtouris
        largetry = 0
660 3dabe5d2 Stavros Sachtouris
        while wait < limit:
661 3dabe5d2 Stavros Sachtouris
            nics = self.client.list_server_nics(servid)
662 3dabe5d2 Stavros Sachtouris
            for net in nics:
663 3dabe5d2 Stavros Sachtouris
                found_nic = net['network_id'] == netid
664 3dabe5d2 Stavros Sachtouris
                if (in_creation and found_nic)\
665 3dabe5d2 Stavros Sachtouris
                or not (in_creation or found_nic):
666 3dabe5d2 Stavros Sachtouris
                    return True
667 3dabe5d2 Stavros Sachtouris
            dis = '' if in_creation else 'dis'
668 3dabe5d2 Stavros Sachtouris
            sys.stdout.write('\twait nic %s to %sconnect to %s: %ss  '\
669 3dabe5d2 Stavros Sachtouris
                % (netid, dis, servid, wait))
670 3dabe5d2 Stavros Sachtouris
            for i in range(wait * 4):
671 3dabe5d2 Stavros Sachtouris
                sys.stdout.write('\b%s' % c[i % 4])
672 3dabe5d2 Stavros Sachtouris
                sys.stdout.flush()
673 3dabe5d2 Stavros Sachtouris
                time.sleep(0.25)
674 3dabe5d2 Stavros Sachtouris
            print('\b ')
675 3dabe5d2 Stavros Sachtouris
            wait += 3
676 3dabe5d2 Stavros Sachtouris
            if wait >= limit and largetry < 3:
677 3dabe5d2 Stavros Sachtouris
                wait = 3
678 3dabe5d2 Stavros Sachtouris
                largetry += 1
679 3dabe5d2 Stavros Sachtouris
        return False
680 3dabe5d2 Stavros Sachtouris
681 3dabe5d2 Stavros Sachtouris
    def _has_status(self, servid, status):
682 3dabe5d2 Stavros Sachtouris
        r = self.client.get_server_details(servid)
683 3dabe5d2 Stavros Sachtouris
        return r['status'] == status
684 3dabe5d2 Stavros Sachtouris
685 3dabe5d2 Stavros Sachtouris
    def _wait_for_status(self, servid, status):
686 3dabe5d2 Stavros Sachtouris
        wait = 0
687 3dabe5d2 Stavros Sachtouris
        c = ['|', '/', '-', '\\']
688 3dabe5d2 Stavros Sachtouris
        while self._has_status(servid, status):
689 3dabe5d2 Stavros Sachtouris
            if wait:
690 3dabe5d2 Stavros Sachtouris
                sys.stdout.write('\tServer %s in %s. Wait %ss  '\
691 3dabe5d2 Stavros Sachtouris
                    % (servid, status, wait))
692 3dabe5d2 Stavros Sachtouris
                for i in range(4 * wait):
693 3dabe5d2 Stavros Sachtouris
                    sys.stdout.write('\b%s' % c[i % 4])
694 3dabe5d2 Stavros Sachtouris
                    sys.stdout.flush()
695 3dabe5d2 Stavros Sachtouris
                    time.sleep(0.25)
696 3dabe5d2 Stavros Sachtouris
                print('\b ')
697 3dabe5d2 Stavros Sachtouris
            wait = (wait + 3) if wait < 60 else 0
698 3dabe5d2 Stavros Sachtouris
699 3dabe5d2 Stavros Sachtouris
    @if_not_all
700 3dabe5d2 Stavros Sachtouris
    def test_list_servers(self):
701 3dabe5d2 Stavros Sachtouris
        """Test list servers"""
702 3dabe5d2 Stavros Sachtouris
        self.server1 = self._create_server(self.servname1,
703 3dabe5d2 Stavros Sachtouris
            self.flavorid,
704 3dabe5d2 Stavros Sachtouris
            self.img)
705 3dabe5d2 Stavros Sachtouris
        self.server2 = self._create_server(self.servname2,
706 3dabe5d2 Stavros Sachtouris
            self.flavorid + 1,
707 3dabe5d2 Stavros Sachtouris
            self.img)
708 3dabe5d2 Stavros Sachtouris
        self._test_list_servers()
709 3dabe5d2 Stavros Sachtouris
710 3dabe5d2 Stavros Sachtouris
    def _test_list_servers(self):
711 3dabe5d2 Stavros Sachtouris
        servers = self.client.list_servers()
712 3dabe5d2 Stavros Sachtouris
        dservers = self.client.list_servers(detail=True)
713 3dabe5d2 Stavros Sachtouris
714 3dabe5d2 Stavros Sachtouris
        """detailed and simple are same size"""
715 3dabe5d2 Stavros Sachtouris
        self.assertEqual(len(dservers), len(servers))
716 3dabe5d2 Stavros Sachtouris
        for i in range(len(servers)):
717 3dabe5d2 Stavros Sachtouris
            for field in ('created',
718 3dabe5d2 Stavros Sachtouris
            'flavorRef',
719 3dabe5d2 Stavros Sachtouris
            'hostId',
720 3dabe5d2 Stavros Sachtouris
            'imageRef',
721 3dabe5d2 Stavros Sachtouris
            'progress',
722 3dabe5d2 Stavros Sachtouris
            'status',
723 3dabe5d2 Stavros Sachtouris
            'updated'):
724 3dabe5d2 Stavros Sachtouris
                self.assertFalse(field in servers[i])
725 3dabe5d2 Stavros Sachtouris
                self.assertTrue(field in dservers[i])
726 3dabe5d2 Stavros Sachtouris
727 3dabe5d2 Stavros Sachtouris
        """detailed and simple contain same names"""
728 3dabe5d2 Stavros Sachtouris
        names = sorted(map(lambda x: x["name"], servers))
729 3dabe5d2 Stavros Sachtouris
        dnames = sorted(map(lambda x: x["name"], dservers))
730 3dabe5d2 Stavros Sachtouris
        self.assertEqual(names, dnames)
731 3dabe5d2 Stavros Sachtouris
732 3dabe5d2 Stavros Sachtouris
    @if_not_all
733 3dabe5d2 Stavros Sachtouris
    def test_create_server(self):
734 3dabe5d2 Stavros Sachtouris
        """Test create_server"""
735 3dabe5d2 Stavros Sachtouris
        self.server1 = self._create_server(self.servname1,
736 3dabe5d2 Stavros Sachtouris
            self.flavorid,
737 3dabe5d2 Stavros Sachtouris
            self.img)
738 3dabe5d2 Stavros Sachtouris
        self._wait_for_status(self.server1['id'], 'BUILD')
739 3dabe5d2 Stavros Sachtouris
        self._test_create_server()
740 3dabe5d2 Stavros Sachtouris
741 3dabe5d2 Stavros Sachtouris
    def _test_create_server(self):
742 3dabe5d2 Stavros Sachtouris
        self.assertEqual(self.server1["name"], self.servname1)
743 3dabe5d2 Stavros Sachtouris
        self.assertEqual(self.server1["flavorRef"], self.flavorid)
744 3dabe5d2 Stavros Sachtouris
        self.assertEqual(self.server1["imageRef"], self.img)
745 3dabe5d2 Stavros Sachtouris
        self.assertEqual(self.server1["status"], "BUILD")
746 3dabe5d2 Stavros Sachtouris
747 3dabe5d2 Stavros Sachtouris
    @if_not_all
748 3dabe5d2 Stavros Sachtouris
    def test_get_server_details(self):
749 3dabe5d2 Stavros Sachtouris
        """Test get_server_details"""
750 3dabe5d2 Stavros Sachtouris
        self.server1 = self._create_server(self.servname1,
751 3dabe5d2 Stavros Sachtouris
            self.flavorid,
752 3dabe5d2 Stavros Sachtouris
            self.img)
753 3dabe5d2 Stavros Sachtouris
        self._wait_for_status(self.server1['id'], 'BUILD')
754 3dabe5d2 Stavros Sachtouris
        self._test_get_server_details()
755 3dabe5d2 Stavros Sachtouris
756 3dabe5d2 Stavros Sachtouris
    def _test_get_server_details(self):
757 3dabe5d2 Stavros Sachtouris
        r = self.client.get_server_details(self.server1['id'])
758 3dabe5d2 Stavros Sachtouris
        self.assertEqual(r["name"], self.servname1)
759 3dabe5d2 Stavros Sachtouris
        self.assertEqual(r["flavorRef"], self.flavorid)
760 3dabe5d2 Stavros Sachtouris
        self.assertEqual(r["imageRef"], self.img)
761 3dabe5d2 Stavros Sachtouris
        self.assertEqual(r["status"], "ACTIVE")
762 3dabe5d2 Stavros Sachtouris
763 3dabe5d2 Stavros Sachtouris
    @if_not_all
764 3dabe5d2 Stavros Sachtouris
    def test_update_server_name(self):
765 3dabe5d2 Stavros Sachtouris
        """Test update_server_name"""
766 3dabe5d2 Stavros Sachtouris
        self.server1 = self._create_server(self.servname1,
767 3dabe5d2 Stavros Sachtouris
            self.flavorid,
768 3dabe5d2 Stavros Sachtouris
            self.img)
769 3dabe5d2 Stavros Sachtouris
        self._test_update_server_name()
770 3dabe5d2 Stavros Sachtouris
771 3dabe5d2 Stavros Sachtouris
    def _test_update_server_name(self):
772 3dabe5d2 Stavros Sachtouris
        new_name = self.servname1 + '_new_name'
773 3dabe5d2 Stavros Sachtouris
        self.client.update_server_name(self.server1['id'], new_name)
774 3dabe5d2 Stavros Sachtouris
        r = self.client.get_server_details(self.server1['id'],
775 3dabe5d2 Stavros Sachtouris
         success=(200, 400))
776 3dabe5d2 Stavros Sachtouris
        self.assertEqual(r['name'], new_name)
777 3dabe5d2 Stavros Sachtouris
        changed = self.servers.pop(self.servname1)
778 3dabe5d2 Stavros Sachtouris
        changed['name'] = new_name
779 3dabe5d2 Stavros Sachtouris
        self.servers[new_name] = changed
780 3dabe5d2 Stavros Sachtouris
781 3dabe5d2 Stavros Sachtouris
    @if_not_all
782 3dabe5d2 Stavros Sachtouris
    def test_reboot_server(self):
783 3dabe5d2 Stavros Sachtouris
        """Test reboot server"""
784 3dabe5d2 Stavros Sachtouris
        self.server1 = self._create_server(self.servname1,
785 3dabe5d2 Stavros Sachtouris
            self.flavorid,
786 3dabe5d2 Stavros Sachtouris
            self.img)
787 3dabe5d2 Stavros Sachtouris
        self._wait_for_status(self.server1['id'], 'BUILD')
788 3dabe5d2 Stavros Sachtouris
        self.server2 = self._create_server(self.servname2,
789 3dabe5d2 Stavros Sachtouris
            self.flavorid + 1,
790 3dabe5d2 Stavros Sachtouris
            self.img)
791 3dabe5d2 Stavros Sachtouris
        self._wait_for_status(self.server2['id'], 'BUILD')
792 3dabe5d2 Stavros Sachtouris
        self._test_reboot_server()
793 3dabe5d2 Stavros Sachtouris
        self._wait_for_status(self.server1['id'], 'REBOOT')
794 3dabe5d2 Stavros Sachtouris
        self._wait_for_status(self.server2['id'], 'REBOOT')
795 3dabe5d2 Stavros Sachtouris
796 3dabe5d2 Stavros Sachtouris
    def _test_reboot_server(self):
797 3dabe5d2 Stavros Sachtouris
        self.client.reboot_server(self.server1['id'])
798 3dabe5d2 Stavros Sachtouris
        self.assertTrue(self._has_status(self.server1['id'], 'REBOOT'))
799 3dabe5d2 Stavros Sachtouris
        self.client.reboot_server(self.server2['id'], hard=True)
800 3dabe5d2 Stavros Sachtouris
        self.assertTrue(self._has_status(self.server2['id'], 'REBOOT'))
801 3dabe5d2 Stavros Sachtouris
802 3dabe5d2 Stavros Sachtouris
    @if_not_all
803 3dabe5d2 Stavros Sachtouris
    def test_get_server_metadata(self):
804 3dabe5d2 Stavros Sachtouris
        """Test get server_metadata"""
805 3dabe5d2 Stavros Sachtouris
        self.server1 = self._create_server(self.servname1,
806 3dabe5d2 Stavros Sachtouris
            self.flavorid,
807 3dabe5d2 Stavros Sachtouris
            self.img)
808 3dabe5d2 Stavros Sachtouris
        self._test_get_server_metadata()
809 3dabe5d2 Stavros Sachtouris
810 3dabe5d2 Stavros Sachtouris
    def _test_get_server_metadata(self):
811 3dabe5d2 Stavros Sachtouris
        self.client.create_server_metadata(self.server1['id'],
812 3dabe5d2 Stavros Sachtouris
            'mymeta_0',
813 3dabe5d2 Stavros Sachtouris
            'val_0')
814 3dabe5d2 Stavros Sachtouris
        r = self.client.get_server_metadata(self.server1['id'], 'mymeta_0')
815 3dabe5d2 Stavros Sachtouris
        self.assertEqual(r['mymeta_0'], 'val_0')
816 3dabe5d2 Stavros Sachtouris
817 3dabe5d2 Stavros Sachtouris
    @if_not_all
818 3dabe5d2 Stavros Sachtouris
    def test_create_server_metadata(self):
819 3dabe5d2 Stavros Sachtouris
        """Test create_server_metadata"""
820 3dabe5d2 Stavros Sachtouris
        self.server1 = self._create_server(self.servname1,
821 3dabe5d2 Stavros Sachtouris
            self.flavorid,
822 3dabe5d2 Stavros Sachtouris
            self.img)
823 3dabe5d2 Stavros Sachtouris
        self._test_create_server_metadata()
824 3dabe5d2 Stavros Sachtouris
825 3dabe5d2 Stavros Sachtouris
    def _test_create_server_metadata(self):
826 3dabe5d2 Stavros Sachtouris
        r1 = self.client.create_server_metadata(self.server1['id'],
827 3dabe5d2 Stavros Sachtouris
            'mymeta',
828 3dabe5d2 Stavros Sachtouris
            'mymeta val')
829 3dabe5d2 Stavros Sachtouris
        self.assertTrue('mymeta' in r1)
830 3dabe5d2 Stavros Sachtouris
        r2 = self.client.get_server_metadata(self.server1['id'], 'mymeta')
831 3dabe5d2 Stavros Sachtouris
        self.assert_dicts_are_deeply_equal(r1, r2)
832 3dabe5d2 Stavros Sachtouris
833 3dabe5d2 Stavros Sachtouris
    @if_not_all
834 3dabe5d2 Stavros Sachtouris
    def test_update_server_metadata(self):
835 3dabe5d2 Stavros Sachtouris
        """Test update_server_metadata"""
836 3dabe5d2 Stavros Sachtouris
        self.server1 = self._create_server(self.servname1,
837 3dabe5d2 Stavros Sachtouris
            self.flavorid,
838 3dabe5d2 Stavros Sachtouris
            self.img)
839 3dabe5d2 Stavros Sachtouris
        self._test_update_server_metadata()
840 3dabe5d2 Stavros Sachtouris
841 3dabe5d2 Stavros Sachtouris
    def _test_update_server_metadata(self):
842 3dabe5d2 Stavros Sachtouris
        r1 = self.client.create_server_metadata(self.server1['id'],
843 3dabe5d2 Stavros Sachtouris
            'mymeta3',
844 3dabe5d2 Stavros Sachtouris
            'val2')
845 3dabe5d2 Stavros Sachtouris
        self.assertTrue('mymeta3'in r1)
846 3dabe5d2 Stavros Sachtouris
        r2 = self.client.update_server_metadata(self.server1['id'],
847 3dabe5d2 Stavros Sachtouris
            mymeta3='val3')
848 3dabe5d2 Stavros Sachtouris
        self.assertTrue(r2['mymeta3'], 'val3')
849 3dabe5d2 Stavros Sachtouris
850 3dabe5d2 Stavros Sachtouris
    @if_not_all
851 3dabe5d2 Stavros Sachtouris
    def test_delete_server_metadata(self):
852 3dabe5d2 Stavros Sachtouris
        """Test delete_server_metadata"""
853 3dabe5d2 Stavros Sachtouris
        self.server1 = self._create_server(self.servname1,
854 3dabe5d2 Stavros Sachtouris
            self.flavorid,
855 3dabe5d2 Stavros Sachtouris
            self.img)
856 3dabe5d2 Stavros Sachtouris
        self._test_delete_server_metadata()
857 3dabe5d2 Stavros Sachtouris
858 3dabe5d2 Stavros Sachtouris
    def _test_delete_server_metadata(self):
859 3dabe5d2 Stavros Sachtouris
        r1 = self.client.create_server_metadata(self.server1['id'],
860 3dabe5d2 Stavros Sachtouris
            'mymeta',
861 3dabe5d2 Stavros Sachtouris
            'val')
862 3dabe5d2 Stavros Sachtouris
        self.assertTrue('mymeta' in r1)
863 3dabe5d2 Stavros Sachtouris
        self.client.delete_server_metadata(self.server1['id'], 'mymeta')
864 3dabe5d2 Stavros Sachtouris
        try:
865 3dabe5d2 Stavros Sachtouris
            self.client.get_server_metadata(self.server1['id'], 'mymeta')
866 3dabe5d2 Stavros Sachtouris
            raise ClientError('Wrong Error', status=100)
867 3dabe5d2 Stavros Sachtouris
        except ClientError as err:
868 3dabe5d2 Stavros Sachtouris
            self.assertEqual(err.status, 404)
869 3dabe5d2 Stavros Sachtouris
870 3dabe5d2 Stavros Sachtouris
    @if_not_all
871 3dabe5d2 Stavros Sachtouris
    def test_list_flavors(self):
872 3dabe5d2 Stavros Sachtouris
        """Test flavors_get"""
873 3dabe5d2 Stavros Sachtouris
        self._test_list_flavors()
874 3dabe5d2 Stavros Sachtouris
875 3dabe5d2 Stavros Sachtouris
    def _test_list_flavors(self):
876 3dabe5d2 Stavros Sachtouris
        r = self.client.list_flavors()
877 3dabe5d2 Stavros Sachtouris
        self.assertTrue(len(r) > 1)
878 3dabe5d2 Stavros Sachtouris
        r = self.client.list_flavors(detail=True)
879 3dabe5d2 Stavros Sachtouris
        self.assertTrue('SNF:disk_template' in r[0])
880 3dabe5d2 Stavros Sachtouris
881 3dabe5d2 Stavros Sachtouris
    @if_not_all
882 3dabe5d2 Stavros Sachtouris
    def test_get_flavor_details(self):
883 3dabe5d2 Stavros Sachtouris
        """Test test_get_flavor_details"""
884 3dabe5d2 Stavros Sachtouris
        self._test_get_flavor_details()
885 3dabe5d2 Stavros Sachtouris
886 3dabe5d2 Stavros Sachtouris
    def _test_get_flavor_details(self):
887 3dabe5d2 Stavros Sachtouris
        r = self.client.get_flavor_details(self.flavorid)
888 3dabe5d2 Stavros Sachtouris
        self.assert_dicts_are_deeply_equal(self.flavor_details, r)
889 3dabe5d2 Stavros Sachtouris
890 3dabe5d2 Stavros Sachtouris
    @if_not_all
891 3dabe5d2 Stavros Sachtouris
    def test_list_images(self):
892 3dabe5d2 Stavros Sachtouris
        """Test list_images"""
893 3dabe5d2 Stavros Sachtouris
        self._test_list_images()
894 3dabe5d2 Stavros Sachtouris
895 3dabe5d2 Stavros Sachtouris
    def _test_list_images(self):
896 3dabe5d2 Stavros Sachtouris
        r = self.client.list_images()
897 3dabe5d2 Stavros Sachtouris
        self.assertTrue(len(r) > 1)
898 3dabe5d2 Stavros Sachtouris
        r = self.client.list_images(detail=True)
899 3dabe5d2 Stavros Sachtouris
        for detailed_img in r:
900 3dabe5d2 Stavros Sachtouris
            if detailed_img['id'] == self.img:
901 3dabe5d2 Stavros Sachtouris
                break
902 3dabe5d2 Stavros Sachtouris
        self.assert_dicts_are_deeply_equal(r[1], self.img_details)
903 3dabe5d2 Stavros Sachtouris
904 3dabe5d2 Stavros Sachtouris
    @if_not_all
905 3dabe5d2 Stavros Sachtouris
    def test_image_details(self):
906 3dabe5d2 Stavros Sachtouris
        """Test image_details"""
907 3dabe5d2 Stavros Sachtouris
        self._test_get_image_details
908 3dabe5d2 Stavros Sachtouris
909 3dabe5d2 Stavros Sachtouris
    def _test_get_image_details(self):
910 3dabe5d2 Stavros Sachtouris
        r = self.client.get_image_details(self.img)
911 3dabe5d2 Stavros Sachtouris
        self.assert_dicts_are_deeply_equal(r, self.img_details)
912 3dabe5d2 Stavros Sachtouris
913 3dabe5d2 Stavros Sachtouris
    @if_not_all
914 3dabe5d2 Stavros Sachtouris
    def test_get_image_metadata(self):
915 3dabe5d2 Stavros Sachtouris
        """Test get_image_metadata"""
916 3dabe5d2 Stavros Sachtouris
        self._test_get_image_metadata()
917 3dabe5d2 Stavros Sachtouris
918 3dabe5d2 Stavros Sachtouris
    def _test_get_image_metadata(self):
919 3dabe5d2 Stavros Sachtouris
        r = self.client.get_image_metadata(self.img)
920 3dabe5d2 Stavros Sachtouris
        self.assert_dicts_are_deeply_equal(
921 3dabe5d2 Stavros Sachtouris
            self.img_details['metadata']['values'], r)
922 3dabe5d2 Stavros Sachtouris
        for key, val in self.img_details['metadata']['values'].items():
923 3dabe5d2 Stavros Sachtouris
            r = self.client.get_image_metadata(self.img, key)
924 3dabe5d2 Stavros Sachtouris
            self.assertEqual(r[key], val)
925 3dabe5d2 Stavros Sachtouris
926 3dabe5d2 Stavros Sachtouris
    @if_not_all
927 3dabe5d2 Stavros Sachtouris
    def test_start_server(self):
928 3dabe5d2 Stavros Sachtouris
        """Test start_server"""
929 3dabe5d2 Stavros Sachtouris
        self.server1 = self._create_server(self.servname1,
930 3dabe5d2 Stavros Sachtouris
            self.flavorid,
931 3dabe5d2 Stavros Sachtouris
            self.img)
932 3dabe5d2 Stavros Sachtouris
        self._wait_for_status(self.server1['id'], 'BUILD')
933 3dabe5d2 Stavros Sachtouris
        self.client.shutdown_server(self.server1['id'])
934 3dabe5d2 Stavros Sachtouris
        self._wait_for_status(self.server1['id'], 'ACTIVE')
935 3dabe5d2 Stavros Sachtouris
        self._test_start_server()
936 3dabe5d2 Stavros Sachtouris
937 3dabe5d2 Stavros Sachtouris
    def _test_start_server(self):
938 3dabe5d2 Stavros Sachtouris
        self.client.start_server(self.server1['id'])
939 3dabe5d2 Stavros Sachtouris
        self._wait_for_status(self.server1['id'], 'STOPPED')
940 3dabe5d2 Stavros Sachtouris
        r = self.client.get_server_details(self.server1['id'])
941 3dabe5d2 Stavros Sachtouris
        self.assertEqual(r['status'], 'ACTIVE')
942 3dabe5d2 Stavros Sachtouris
943 3dabe5d2 Stavros Sachtouris
    @if_not_all
944 3dabe5d2 Stavros Sachtouris
    def test_shutdown_server(self):
945 3dabe5d2 Stavros Sachtouris
        """Test shutdown_server"""
946 3dabe5d2 Stavros Sachtouris
        self.server1 = self._create_server(self.servname1,
947 3dabe5d2 Stavros Sachtouris
            self.flavorid,
948 3dabe5d2 Stavros Sachtouris
            self.img)
949 3dabe5d2 Stavros Sachtouris
        self._wait_for_status(self.server1['id'], 'BUILD')
950 3dabe5d2 Stavros Sachtouris
        self._test_shutdown_server()
951 3dabe5d2 Stavros Sachtouris
952 3dabe5d2 Stavros Sachtouris
    def _test_shutdown_server(self):
953 3dabe5d2 Stavros Sachtouris
        self.client.shutdown_server(self.server1['id'])
954 3dabe5d2 Stavros Sachtouris
        self._wait_for_status(self.server1['id'], 'ACTIVE')
955 3dabe5d2 Stavros Sachtouris
        r = self.client.get_server_details(self.server1['id'])
956 3dabe5d2 Stavros Sachtouris
        self.assertEqual(r['status'], 'STOPPED')
957 3dabe5d2 Stavros Sachtouris
958 3dabe5d2 Stavros Sachtouris
    @if_not_all
959 3dabe5d2 Stavros Sachtouris
    def test_get_server_console(self):
960 3dabe5d2 Stavros Sachtouris
        """Test get_server_console"""
961 3dabe5d2 Stavros Sachtouris
        self.server2 = self._create_server(self.servname2,
962 75c3fc42 Stavros Sachtouris
            self.flavorid + 2,
963 3dabe5d2 Stavros Sachtouris
            self.img)
964 75c3fc42 Stavros Sachtouris
        self._wait_for_status(self.server2['id'], 'BUILD')
965 3dabe5d2 Stavros Sachtouris
        self._test_get_server_console()
966 3dabe5d2 Stavros Sachtouris
967 3dabe5d2 Stavros Sachtouris
    def _test_get_server_console(self):
968 3dabe5d2 Stavros Sachtouris
        r = self.client.get_server_console(self.server2['id'])
969 3dabe5d2 Stavros Sachtouris
        self.assertTrue('host' in r)
970 3dabe5d2 Stavros Sachtouris
        self.assertTrue('password' in r)
971 3dabe5d2 Stavros Sachtouris
        self.assertTrue('port' in r)
972 3dabe5d2 Stavros Sachtouris
        self.assertTrue('type' in r)
973 3dabe5d2 Stavros Sachtouris
974 3dabe5d2 Stavros Sachtouris
    @if_not_all
975 3dabe5d2 Stavros Sachtouris
    def test_get_firewall_profile(self):
976 3dabe5d2 Stavros Sachtouris
        """Test get_firewall_profile"""
977 3dabe5d2 Stavros Sachtouris
        self.server1 = self._create_server(self.servname1,
978 3dabe5d2 Stavros Sachtouris
            self.flavorid,
979 3dabe5d2 Stavros Sachtouris
            self.img)
980 3dabe5d2 Stavros Sachtouris
        self._test_get_firewall_profile()
981 3dabe5d2 Stavros Sachtouris
982 3dabe5d2 Stavros Sachtouris
    def _test_get_firewall_profile(self):
983 3dabe5d2 Stavros Sachtouris
        self._wait_for_status(self.server1['id'], 'BUILD')
984 3dabe5d2 Stavros Sachtouris
        fprofile = self.client.get_firewall_profile(self.server1['id'])
985 3dabe5d2 Stavros Sachtouris
        self.assertTrue(fprofile in self.PROFILES)
986 3dabe5d2 Stavros Sachtouris
987 3dabe5d2 Stavros Sachtouris
    @if_not_all
988 3dabe5d2 Stavros Sachtouris
    def test_set_firewall_profile(self):
989 3dabe5d2 Stavros Sachtouris
        """Test set_firewall_profile"""
990 3dabe5d2 Stavros Sachtouris
        self.server1 = self._create_server(self.servname1,
991 3dabe5d2 Stavros Sachtouris
            self.flavorid,
992 3dabe5d2 Stavros Sachtouris
            self.img)
993 3dabe5d2 Stavros Sachtouris
        self._test_set_firewall_profile()
994 3dabe5d2 Stavros Sachtouris
995 3dabe5d2 Stavros Sachtouris
    def _test_set_firewall_profile(self):
996 3dabe5d2 Stavros Sachtouris
997 3dabe5d2 Stavros Sachtouris
        self._wait_for_status(self.server1['id'], 'BUILD')
998 3dabe5d2 Stavros Sachtouris
        PROFILES = ['DISABLED', 'ENABLED', 'DISABLED', 'PROTECTED']
999 3dabe5d2 Stavros Sachtouris
        fprofile = self.client.get_firewall_profile(self.server1['id'])
1000 3dabe5d2 Stavros Sachtouris
        print('')
1001 3dabe5d2 Stavros Sachtouris
        for counter, fprofile in enumerate(PROFILES):
1002 3dabe5d2 Stavros Sachtouris
            start = fprofile
1003 3dabe5d2 Stavros Sachtouris
            npos = counter + 1
1004 3dabe5d2 Stavros Sachtouris
            nprofile = PROFILES[npos] if npos < len(PROFILES) else PROFILES[0]
1005 3dabe5d2 Stavros Sachtouris
            print('\tprofile swap %s: %s -> %s' % (npos, fprofile, nprofile))
1006 3dabe5d2 Stavros Sachtouris
            self.client.set_firewall_profile(self.server1['id'], nprofile)
1007 3dabe5d2 Stavros Sachtouris
            wait = 3
1008 3dabe5d2 Stavros Sachtouris
            c = ['|', '/', '-', '\\']
1009 3dabe5d2 Stavros Sachtouris
            while fprofile != nprofile:
1010 3dabe5d2 Stavros Sachtouris
                if wait % 10 == 0:
1011 3dabe5d2 Stavros Sachtouris
                    self.client.set_firewall_profile(self.server1['id'],
1012 3dabe5d2 Stavros Sachtouris
                        nprofile)
1013 3dabe5d2 Stavros Sachtouris
                self.assertEqual(fprofile, start)
1014 3dabe5d2 Stavros Sachtouris
                sys.stdout.write('\t   profile is %s, wait %ss  '\
1015 3dabe5d2 Stavros Sachtouris
                    % (fprofile, wait))
1016 3dabe5d2 Stavros Sachtouris
                for i in range(4 * wait):
1017 3dabe5d2 Stavros Sachtouris
                    sys.stdout.write('\b%s' % c[i % 4])
1018 3dabe5d2 Stavros Sachtouris
                    sys.stdout.flush()
1019 3dabe5d2 Stavros Sachtouris
                    time.sleep(0.25)
1020 3dabe5d2 Stavros Sachtouris
                wait += 3
1021 3dabe5d2 Stavros Sachtouris
                print('\b ')
1022 3dabe5d2 Stavros Sachtouris
                fprofile = self.client.get_firewall_profile(self.server1['id'])
1023 3dabe5d2 Stavros Sachtouris
1024 3dabe5d2 Stavros Sachtouris
    @if_not_all
1025 3dabe5d2 Stavros Sachtouris
    def test_get_server_stats(self):
1026 3dabe5d2 Stavros Sachtouris
        self.server1 = self._create_server(self.servname1,
1027 3dabe5d2 Stavros Sachtouris
            self.flavorid,
1028 3dabe5d2 Stavros Sachtouris
            self.img)
1029 3dabe5d2 Stavros Sachtouris
        self._test_get_server_stats()
1030 3dabe5d2 Stavros Sachtouris
1031 3dabe5d2 Stavros Sachtouris
    def _test_get_server_stats(self):
1032 3dabe5d2 Stavros Sachtouris
        r = self.client.get_server_stats(self.server1['id'])
1033 3dabe5d2 Stavros Sachtouris
        for term in ('cpuBar',
1034 3dabe5d2 Stavros Sachtouris
        'cpuTimeSeries',
1035 3dabe5d2 Stavros Sachtouris
        'netBar',
1036 3dabe5d2 Stavros Sachtouris
        'netTimeSeries',
1037 3dabe5d2 Stavros Sachtouris
        'refresh'):
1038 3dabe5d2 Stavros Sachtouris
            self.assertTrue(term in r)
1039 3dabe5d2 Stavros Sachtouris
1040 3dabe5d2 Stavros Sachtouris
    @if_not_all
1041 3dabe5d2 Stavros Sachtouris
    def test_list_networks(self):
1042 3dabe5d2 Stavros Sachtouris
        """Test list_network"""
1043 3dabe5d2 Stavros Sachtouris
        self.network1 = self._create_network(self.netname1)
1044 3dabe5d2 Stavros Sachtouris
        self._wait_for_network(self.network1['id'], 'ACTIVE')
1045 3dabe5d2 Stavros Sachtouris
        self._test_list_networks()
1046 3dabe5d2 Stavros Sachtouris
1047 3dabe5d2 Stavros Sachtouris
    def _test_list_networks(self):
1048 3dabe5d2 Stavros Sachtouris
        r = self.client.list_networks()
1049 3dabe5d2 Stavros Sachtouris
        self.assertTrue(len(r) > 1)
1050 3dabe5d2 Stavros Sachtouris
        ids = [net['id'] for net in r]
1051 3dabe5d2 Stavros Sachtouris
        names = [net['name'] for net in r]
1052 3dabe5d2 Stavros Sachtouris
        self.assertTrue('1' in ids)
1053 3dabe5d2 Stavros Sachtouris
        self.assertTrue('public' in names)
1054 3dabe5d2 Stavros Sachtouris
        self.assertTrue(self.network1['id'] in ids)
1055 3dabe5d2 Stavros Sachtouris
        self.assertTrue(self.network1['name'] in names)
1056 3dabe5d2 Stavros Sachtouris
1057 3dabe5d2 Stavros Sachtouris
        r = self.client.list_networks(detail=True)
1058 3dabe5d2 Stavros Sachtouris
        ids = [net['id'] for net in r]
1059 3dabe5d2 Stavros Sachtouris
        names = [net['name'] for net in r]
1060 3dabe5d2 Stavros Sachtouris
        for net in r:
1061 3dabe5d2 Stavros Sachtouris
            self.assertTrue(net['id'] in ids)
1062 3dabe5d2 Stavros Sachtouris
            self.assertTrue(net['name'] in names)
1063 3dabe5d2 Stavros Sachtouris
            for term in ('status', 'updated', 'created'):
1064 3dabe5d2 Stavros Sachtouris
                self.assertTrue(term in net.keys())
1065 3dabe5d2 Stavros Sachtouris
1066 3dabe5d2 Stavros Sachtouris
    @if_not_all
1067 3dabe5d2 Stavros Sachtouris
    def test_create_network(self):
1068 3dabe5d2 Stavros Sachtouris
        """Test create_network"""
1069 3dabe5d2 Stavros Sachtouris
        self.network1 = self._create_network(self.netname1)
1070 3dabe5d2 Stavros Sachtouris
        self._test_create_network()
1071 3dabe5d2 Stavros Sachtouris
1072 3dabe5d2 Stavros Sachtouris
    def _test_create_network(self):
1073 3dabe5d2 Stavros Sachtouris
        nets = self.client.list_networks(self.network1['id'])
1074 3dabe5d2 Stavros Sachtouris
        chosen = [net for net in nets if net['id'] == self.network1['id']][0]
1075 3dabe5d2 Stavros Sachtouris
        chosen.pop('updated')
1076 3dabe5d2 Stavros Sachtouris
        net1 = dict(self.network1)
1077 3dabe5d2 Stavros Sachtouris
        net1.pop('updated')
1078 3dabe5d2 Stavros Sachtouris
        self.assert_dicts_are_deeply_equal(chosen, net1)
1079 3dabe5d2 Stavros Sachtouris
1080 3dabe5d2 Stavros Sachtouris
    @if_not_all
1081 3dabe5d2 Stavros Sachtouris
    def test_connect_server(self):
1082 3dabe5d2 Stavros Sachtouris
        """Test connect_server"""
1083 3dabe5d2 Stavros Sachtouris
        self.server1 = self._create_server(self.servname1,
1084 3dabe5d2 Stavros Sachtouris
            self.flavorid,
1085 3dabe5d2 Stavros Sachtouris
            self.img)
1086 3dabe5d2 Stavros Sachtouris
        self.network1 = self._create_network(self.netname1)
1087 3dabe5d2 Stavros Sachtouris
        self._wait_for_status(self.server1['id'], 'BUILD')
1088 3dabe5d2 Stavros Sachtouris
        self._wait_for_network(self.network1['id'], 'ACTIVE')
1089 3dabe5d2 Stavros Sachtouris
        self._test_connect_server()
1090 3dabe5d2 Stavros Sachtouris
1091 3dabe5d2 Stavros Sachtouris
    def _test_connect_server(self):
1092 3dabe5d2 Stavros Sachtouris
        self.client.connect_server(self.server1['id'], self.network1['id'])
1093 3dabe5d2 Stavros Sachtouris
        self.assertTrue(self._wait_for_nic(self.network1['id'],
1094 3dabe5d2 Stavros Sachtouris
            self.server1['id']))
1095 3dabe5d2 Stavros Sachtouris
1096 3dabe5d2 Stavros Sachtouris
    @if_not_all
1097 3dabe5d2 Stavros Sachtouris
    def test_disconnect_server(self):
1098 3dabe5d2 Stavros Sachtouris
        """Test disconnect_server"""
1099 3dabe5d2 Stavros Sachtouris
        self.test_connect_server()
1100 3dabe5d2 Stavros Sachtouris
        self._test_disconnect_server()
1101 3dabe5d2 Stavros Sachtouris
1102 3dabe5d2 Stavros Sachtouris
    def _test_disconnect_server(self):
1103 3dabe5d2 Stavros Sachtouris
        self.client.disconnect_server(self.server1['id'], self.network1['id'])
1104 3dabe5d2 Stavros Sachtouris
        self.assertTrue(self._wait_for_nic(self.network1['id'],
1105 3dabe5d2 Stavros Sachtouris
            self.server1['id'],
1106 3dabe5d2 Stavros Sachtouris
            in_creation=False))
1107 3dabe5d2 Stavros Sachtouris
1108 3dabe5d2 Stavros Sachtouris
    @if_not_all
1109 3dabe5d2 Stavros Sachtouris
    def test_list_server_nics(self):
1110 3dabe5d2 Stavros Sachtouris
        """Test list_server_nics"""
1111 3dabe5d2 Stavros Sachtouris
        self.server1 = self._create_server(self.servname1,
1112 3dabe5d2 Stavros Sachtouris
            self.flavorid,
1113 3dabe5d2 Stavros Sachtouris
            self.img)
1114 3dabe5d2 Stavros Sachtouris
        self.network2 = self._create_network(self.netname2)
1115 3dabe5d2 Stavros Sachtouris
        self._wait_for_status(self.server1['id'], 'BUILD')
1116 3dabe5d2 Stavros Sachtouris
        self._wait_for_network(self.network2['id'], 'ACTIVE')
1117 3dabe5d2 Stavros Sachtouris
        self._test_list_server_nics()
1118 3dabe5d2 Stavros Sachtouris
1119 3dabe5d2 Stavros Sachtouris
    def _test_list_server_nics(self):
1120 3dabe5d2 Stavros Sachtouris
        r = self.client.list_server_nics(self.server1['id'])
1121 3dabe5d2 Stavros Sachtouris
        len0 = len(r)
1122 3dabe5d2 Stavros Sachtouris
        self.assertTrue(len0 > 0)
1123 3dabe5d2 Stavros Sachtouris
        self.assertTrue('1' in [net['network_id'] for net in r])
1124 3dabe5d2 Stavros Sachtouris
1125 3dabe5d2 Stavros Sachtouris
        self.client.connect_server(self.server1['id'], self.network2['id'])
1126 3dabe5d2 Stavros Sachtouris
        self.assertTrue(self._wait_for_nic(self.network2['id'],
1127 3dabe5d2 Stavros Sachtouris
            self.server1['id']))
1128 3dabe5d2 Stavros Sachtouris
        r = self.client.list_server_nics(self.server1['id'])
1129 3dabe5d2 Stavros Sachtouris
        self.assertTrue(len(r) > len0)
1130 3dabe5d2 Stavros Sachtouris
1131 3dabe5d2 Stavros Sachtouris
    @if_not_all
1132 3dabe5d2 Stavros Sachtouris
    def test_get_network_details(self):
1133 3dabe5d2 Stavros Sachtouris
        """Test get_network_details"""
1134 3dabe5d2 Stavros Sachtouris
        self.network1 = self._create_network(self.netname1)
1135 3dabe5d2 Stavros Sachtouris
        self._test_get_network_details()
1136 3dabe5d2 Stavros Sachtouris
1137 3dabe5d2 Stavros Sachtouris
    def _test_get_network_details(self):
1138 3dabe5d2 Stavros Sachtouris
        r = self.client.get_network_details(self.network1['id'])
1139 3dabe5d2 Stavros Sachtouris
        net1 = dict(self.network1)
1140 3dabe5d2 Stavros Sachtouris
        net1.pop('status')
1141 3dabe5d2 Stavros Sachtouris
        net1.pop('updated', None)
1142 3dabe5d2 Stavros Sachtouris
        net1.pop('attachments')
1143 3dabe5d2 Stavros Sachtouris
        r.pop('status')
1144 3dabe5d2 Stavros Sachtouris
        r.pop('updated', None)
1145 3dabe5d2 Stavros Sachtouris
        r.pop('attachments')
1146 3dabe5d2 Stavros Sachtouris
        self.assert_dicts_are_deeply_equal(net1, r)
1147 3dabe5d2 Stavros Sachtouris
1148 3dabe5d2 Stavros Sachtouris
    @if_not_all
1149 3dabe5d2 Stavros Sachtouris
    def test_update_network_name(self):
1150 3dabe5d2 Stavros Sachtouris
        self.network2 = self._create_network(self.netname2)
1151 3dabe5d2 Stavros Sachtouris
        self._test_update_network_name()
1152 3dabe5d2 Stavros Sachtouris
1153 3dabe5d2 Stavros Sachtouris
    def _test_update_network_name(self):
1154 3dabe5d2 Stavros Sachtouris
        updated_name = self.netname2 + '_upd'
1155 3dabe5d2 Stavros Sachtouris
        self.client.update_network_name(self.network2['id'], updated_name)
1156 3dabe5d2 Stavros Sachtouris
        wait = 3
1157 3dabe5d2 Stavros Sachtouris
        c = ['|', '/', '-', '\\']
1158 3dabe5d2 Stavros Sachtouris
        r = self.client.get_network_details(self.network2['id'])
1159 3dabe5d2 Stavros Sachtouris
        while wait < 50:
1160 3dabe5d2 Stavros Sachtouris
            if r['name'] == updated_name:
1161 3dabe5d2 Stavros Sachtouris
                break
1162 3dabe5d2 Stavros Sachtouris
            sys.stdout.write(
1163 3dabe5d2 Stavros Sachtouris
                '\twait for %s renaming (%s->%s) %ss  ' % (self.network2['id'],
1164 3dabe5d2 Stavros Sachtouris
                self.network2['name'],
1165 3dabe5d2 Stavros Sachtouris
                updated_name, wait))
1166 3dabe5d2 Stavros Sachtouris
            for i in range(4 * wait):
1167 3dabe5d2 Stavros Sachtouris
                sys.stdout.write('\b%s' % c[i % 4])
1168 3dabe5d2 Stavros Sachtouris
                sys.stdout.flush()
1169 3dabe5d2 Stavros Sachtouris
                time.sleep(0.25)
1170 3dabe5d2 Stavros Sachtouris
            print('')
1171 3dabe5d2 Stavros Sachtouris
            wait += 3
1172 3dabe5d2 Stavros Sachtouris
            r = self.client.get_network_details(self.network2['id'])
1173 3dabe5d2 Stavros Sachtouris
        self.assertEqual(r['name'], updated_name)
1174 3dabe5d2 Stavros Sachtouris
1175 3dabe5d2 Stavros Sachtouris
    """ Don't have auth to test this
1176 3dabe5d2 Stavros Sachtouris
    @if_not_all
1177 3dabe5d2 Stavros Sachtouris
    def test_delete_image(self):
1178 3dabe5d2 Stavros Sachtouris
        ""Test delete_image""
1179 3dabe5d2 Stavros Sachtouris
        self._test_delete_image()
1180 3dabe5d2 Stavros Sachtouris
    def _test_delete_image(self):
1181 3dabe5d2 Stavros Sachtouris
        images = self.client.list_images()
1182 3dabe5d2 Stavros Sachtouris
        self.client.delete_image(images[2]['id'])
1183 3dabe5d2 Stavros Sachtouris
        try:
1184 3dabe5d2 Stavros Sachtouris
            r = self.client.get_image_details(images[2]['id'], success=(400))
1185 3dabe5d2 Stavros Sachtouris
        except ClientError as err:
1186 3dabe5d2 Stavros Sachtouris
            self.assertEqual(err.status, 404)
1187 3dabe5d2 Stavros Sachtouris

1188 3dabe5d2 Stavros Sachtouris
    @if_not_all
1189 3dabe5d2 Stavros Sachtouris
    def test_create_image_metadata(self):
1190 3dabe5d2 Stavros Sachtouris
        ""Test create_image_metadata""
1191 3dabe5d2 Stavros Sachtouris
        self._test_create_image_metadata()
1192 3dabe5d2 Stavros Sachtouris
    def _test_create_image_metadata(self):
1193 3dabe5d2 Stavros Sachtouris
        r = self.client.create_image_metadata(self.img, 'mykey', 'myval')
1194 3dabe5d2 Stavros Sachtouris
        self.assertEqual(r['mykey'], 'myval')
1195 3dabe5d2 Stavros Sachtouris

1196 3dabe5d2 Stavros Sachtouris
    @if_not_all
1197 3dabe5d2 Stavros Sachtouris
    def test_update_image_metadata(self):
1198 3dabe5d2 Stavros Sachtouris
        ""Test update_image_metadata""
1199 3dabe5d2 Stavros Sachtouris
        self._test_update_image_metadata()
1200 3dabe5d2 Stavros Sachtouris
    def _test_update_image_metadata(self):
1201 3dabe5d2 Stavros Sachtouris
        r = self.client.create_image_metadata(self.img, 'mykey0', 'myval')
1202 3dabe5d2 Stavros Sachtouris
        r = self.client.update_image_metadata(self.img, 'mykey0', 'myval0')
1203 3dabe5d2 Stavros Sachtouris
        self.assertEqual(r['mykey0'], 'myval0')
1204 3dabe5d2 Stavros Sachtouris

1205 3dabe5d2 Stavros Sachtouris
    @if_not_all
1206 3dabe5d2 Stavros Sachtouris
    def test_delete_image_metadata(self):
1207 3dabe5d2 Stavros Sachtouris
        ""Test delete_image_metadata""
1208 3dabe5d2 Stavros Sachtouris
        self._test_delete_image_metadata()
1209 3dabe5d2 Stavros Sachtouris
    def _test_delete_image_metadata(self):
1210 3dabe5d2 Stavros Sachtouris
        self.client.create_image_metadata(self.img, 'mykey1', 'myval1')
1211 3dabe5d2 Stavros Sachtouris
        self.client.delete_image_metadata(self.img, 'mykey1')
1212 3dabe5d2 Stavros Sachtouris
        r = self.client.get_image_metadata(self.img)
1213 3dabe5d2 Stavros Sachtouris
        self.assertNotEqual('mykey1' in r)
1214 3dabe5d2 Stavros Sachtouris
    """
1215 3dabe5d2 Stavros Sachtouris
1216 71286858 Stavros Sachtouris
1217 edbee9c8 Stavros Sachtouris
class testPithos(unittest.TestCase):
1218 3dabe5d2 Stavros Sachtouris
    """Set up a Pithos+ thorough test"""
1219 3dabe5d2 Stavros Sachtouris
    def setUp(self):
1220 3dabe5d2 Stavros Sachtouris
        """
1221 3dabe5d2 Stavros Sachtouris
        url = 'http://127.0.0.1:8000/v1'
1222 3dabe5d2 Stavros Sachtouris
        global token
1223 3dabe5d2 Stavros Sachtouris
        account = 'admin@adminland.com'
1224 3dabe5d2 Stavros Sachtouris
        """
1225 3dabe5d2 Stavros Sachtouris
1226 7d91734c Stavros Sachtouris
        global cnf
1227 7d91734c Stavros Sachtouris
        url = cnf.get('store', 'url')
1228 3dabe5d2 Stavros Sachtouris
1229 3dabe5d2 Stavros Sachtouris
        global token
1230 3dabe5d2 Stavros Sachtouris
        global global_username
1231 7d91734c Stavros Sachtouris
        account = global_username
1232 3dabe5d2 Stavros Sachtouris
1233 3dabe5d2 Stavros Sachtouris
        """
1234 3dabe5d2 Stavros Sachtouris
        url='https://pithos.okeanos.io/v1'
1235 3dabe5d2 Stavros Sachtouris
        """
1236 3dabe5d2 Stavros Sachtouris
1237 3dabe5d2 Stavros Sachtouris
        """
1238 3dabe5d2 Stavros Sachtouris
        def add_handler(name, level, prefix=''):
1239 3dabe5d2 Stavros Sachtouris
            h = logging.StreamHandler()
1240 3dabe5d2 Stavros Sachtouris
            fmt = logging.Formatter(prefix + '%(message)s')
1241 3dabe5d2 Stavros Sachtouris
            h.setFormatter(fmt)
1242 3dabe5d2 Stavros Sachtouris
            logger = logging.getLogger(name)
1243 3dabe5d2 Stavros Sachtouris
            logger.addHandler(h)
1244 3dabe5d2 Stavros Sachtouris
            logger.setLevel(level)
1245 3dabe5d2 Stavros Sachtouris
        import logging
1246 3dabe5d2 Stavros Sachtouris
        sendlog = logging.getLogger('clients.send')
1247 3dabe5d2 Stavros Sachtouris
        recvlog = logging.getLogger('clients.recv')
1248 3dabe5d2 Stavros Sachtouris
        add_handler('requests', logging.INFO, prefix='* ')
1249 3dabe5d2 Stavros Sachtouris
        add_handler('clients.send', logging.INFO, prefix='> ')
1250 3dabe5d2 Stavros Sachtouris
        add_handler('clients.recv', logging.INFO, prefix='< ')
1251 3dabe5d2 Stavros Sachtouris
        """
1252 3dabe5d2 Stavros Sachtouris
1253 3dabe5d2 Stavros Sachtouris
        self.fname = None
1254 3dabe5d2 Stavros Sachtouris
        container = None
1255 3dabe5d2 Stavros Sachtouris
        self.client = pithos(url, token, account, container)
1256 3dabe5d2 Stavros Sachtouris
        self.now = time.mktime(time.gmtime())
1257 3dabe5d2 Stavros Sachtouris
        self.c1 = 'c1_' + unicode(self.now)
1258 3dabe5d2 Stavros Sachtouris
        self.c2 = 'c2_' + unicode(self.now)
1259 3dabe5d2 Stavros Sachtouris
        self.c3 = 'c3_' + unicode(self.now)
1260 3dabe5d2 Stavros Sachtouris
1261 3dabe5d2 Stavros Sachtouris
        self.client.create_container(self.c1)
1262 3dabe5d2 Stavros Sachtouris
        self.client.create_container(self.c2)
1263 3dabe5d2 Stavros Sachtouris
        self.client.create_container(self.c3)
1264 3dabe5d2 Stavros Sachtouris
        self.makeNewObject(self.c1, 'test')
1265 3dabe5d2 Stavros Sachtouris
        self.makeNewObject(self.c2, 'test')
1266 3dabe5d2 Stavros Sachtouris
        self.now_unformated = datetime.datetime.utcnow()
1267 3dabe5d2 Stavros Sachtouris
        self.makeNewObject(self.c1, 'test1')
1268 3dabe5d2 Stavros Sachtouris
        self.makeNewObject(self.c2, 'test1')
1269 3dabe5d2 Stavros Sachtouris
        """Prepare an object to be shared - also its container"""
1270 3dabe5d2 Stavros Sachtouris
        self.client.container = self.c1
1271 3dabe5d2 Stavros Sachtouris
        self.client.object_post('test',
1272 3dabe5d2 Stavros Sachtouris
            update=True,
1273 3dabe5d2 Stavros Sachtouris
            permissions={'read': 'someUser'})
1274 3dabe5d2 Stavros Sachtouris
1275 3dabe5d2 Stavros Sachtouris
        self.makeNewObject(self.c1, 'another.test')
1276 3dabe5d2 Stavros Sachtouris
1277 3dabe5d2 Stavros Sachtouris
    def makeNewObject(self, container, obj):
1278 3dabe5d2 Stavros Sachtouris
        self.client.container = container
1279 3dabe5d2 Stavros Sachtouris
        self.client.object_put(obj,
1280 3dabe5d2 Stavros Sachtouris
            content_type='application/octet-stream',
1281 3dabe5d2 Stavros Sachtouris
            data='file %s that lives in %s' % (obj, container),
1282 3dabe5d2 Stavros Sachtouris
            metadata={'incontainer': container})
1283 3dabe5d2 Stavros Sachtouris
1284 3dabe5d2 Stavros Sachtouris
    def forceDeleteContainer(self, container):
1285 3dabe5d2 Stavros Sachtouris
        self.client.container = container
1286 3dabe5d2 Stavros Sachtouris
        try:
1287 3dabe5d2 Stavros Sachtouris
            r = self.client.list_objects()
1288 3dabe5d2 Stavros Sachtouris
        except ClientError:
1289 3dabe5d2 Stavros Sachtouris
            return
1290 3dabe5d2 Stavros Sachtouris
        for obj in r:
1291 3dabe5d2 Stavros Sachtouris
            name = obj['name']
1292 3dabe5d2 Stavros Sachtouris
            self.client.del_object(name)
1293 3dabe5d2 Stavros Sachtouris
        r = self.client.container_delete()
1294 3dabe5d2 Stavros Sachtouris
        self.container = ''
1295 3dabe5d2 Stavros Sachtouris
1296 3dabe5d2 Stavros Sachtouris
    def tearDown(self):
1297 3dabe5d2 Stavros Sachtouris
        """Destroy test cases"""
1298 3dabe5d2 Stavros Sachtouris
        if self.fname is not None:
1299 3dabe5d2 Stavros Sachtouris
            try:
1300 3dabe5d2 Stavros Sachtouris
                os.remove(self.fname)
1301 3dabe5d2 Stavros Sachtouris
            except OSError:
1302 3dabe5d2 Stavros Sachtouris
                pass
1303 3dabe5d2 Stavros Sachtouris
            self.fname = None
1304 3dabe5d2 Stavros Sachtouris
        self.forceDeleteContainer(self.c1)
1305 3dabe5d2 Stavros Sachtouris
        self.forceDeleteContainer(self.c2)
1306 3dabe5d2 Stavros Sachtouris
        try:
1307 3dabe5d2 Stavros Sachtouris
            self.forceDeleteContainer(self.c3)
1308 3dabe5d2 Stavros Sachtouris
        except ClientError:
1309 3dabe5d2 Stavros Sachtouris
            pass
1310 3dabe5d2 Stavros Sachtouris
        self.client.container = ''
1311 3dabe5d2 Stavros Sachtouris
1312 3dabe5d2 Stavros Sachtouris
    def test_000(self):
1313 3dabe5d2 Stavros Sachtouris
        """Perform a full Pithos+ kamaki support test"""
1314 3dabe5d2 Stavros Sachtouris
1315 3dabe5d2 Stavros Sachtouris
    def test_account_head(self):
1316 3dabe5d2 Stavros Sachtouris
        """Test account_HEAD"""
1317 3dabe5d2 Stavros Sachtouris
        r = self.client.account_head()
1318 3dabe5d2 Stavros Sachtouris
        self.assertEqual(r.status_code, 204)
1319 3dabe5d2 Stavros Sachtouris
1320 3dabe5d2 Stavros Sachtouris
        r = self.client.account_head(until='1000000000')
1321 3dabe5d2 Stavros Sachtouris
        self.assertEqual(r.status_code, 204)
1322 3dabe5d2 Stavros Sachtouris
1323 3dabe5d2 Stavros Sachtouris
        r = self.client.get_account_info(until='1000000000')
1324 3dabe5d2 Stavros Sachtouris
        datestring = unicode(r['x-account-until-timestamp'])
1325 3dabe5d2 Stavros Sachtouris
        self.assertEqual(u'Sun, 09 Sep 2001 01:46:40 GMT', datestring)
1326 3dabe5d2 Stavros Sachtouris
1327 3dabe5d2 Stavros Sachtouris
        r = self.client.get_account_quota()
1328 3dabe5d2 Stavros Sachtouris
        self.assertTrue('x-account-policy-quota' in r)
1329 3dabe5d2 Stavros Sachtouris
1330 3dabe5d2 Stavros Sachtouris
        r = self.client.get_account_versioning()
1331 3dabe5d2 Stavros Sachtouris
        self.assertTrue('x-account-policy-versioning' in r)
1332 3dabe5d2 Stavros Sachtouris
1333 3dabe5d2 Stavros Sachtouris
        """Check if(un)modified_since"""
1334 3dabe5d2 Stavros Sachtouris
        for format in self.client.DATE_FORMATS:
1335 3dabe5d2 Stavros Sachtouris
            now_formated = self.now_unformated.strftime(format)
1336 3dabe5d2 Stavros Sachtouris
            r1 = self.client.account_head(if_modified_since=now_formated,
1337 3dabe5d2 Stavros Sachtouris
                success=(204, 304, 412))
1338 3dabe5d2 Stavros Sachtouris
            sc1 = r1.status_code
1339 3dabe5d2 Stavros Sachtouris
            r1.release()
1340 3dabe5d2 Stavros Sachtouris
            r2 = self.client.account_head(if_unmodified_since=now_formated,
1341 3dabe5d2 Stavros Sachtouris
                success=(204, 304, 412))
1342 3dabe5d2 Stavros Sachtouris
            sc2 = r2.status_code
1343 3dabe5d2 Stavros Sachtouris
            r2.release()
1344 3dabe5d2 Stavros Sachtouris
            self.assertNotEqual(sc1, sc2)
1345 3dabe5d2 Stavros Sachtouris
1346 3dabe5d2 Stavros Sachtouris
    def test_account_get(self):
1347 3dabe5d2 Stavros Sachtouris
        """Test account_GET"""
1348 3dabe5d2 Stavros Sachtouris
        #r = self.client.account_get()
1349 3dabe5d2 Stavros Sachtouris
        #self.assertEqual(r.status_code, 200)
1350 3dabe5d2 Stavros Sachtouris
        r = self.client.list_containers()
1351 3dabe5d2 Stavros Sachtouris
        fullLen = len(r)
1352 3dabe5d2 Stavros Sachtouris
        self.assertTrue(fullLen > 2)
1353 3dabe5d2 Stavros Sachtouris
1354 3dabe5d2 Stavros Sachtouris
        r = self.client.account_get(limit=1)
1355 3dabe5d2 Stavros Sachtouris
        self.assertEqual(len(r.json), 1)
1356 3dabe5d2 Stavros Sachtouris
1357 3dabe5d2 Stavros Sachtouris
        r = self.client.account_get(marker='c2_')
1358 3dabe5d2 Stavros Sachtouris
        temp_c0 = r.json[0]['name']
1359 3dabe5d2 Stavros Sachtouris
        temp_c2 = r.json[2]['name']
1360 3dabe5d2 Stavros Sachtouris
1361 3dabe5d2 Stavros Sachtouris
        r = self.client.account_get(limit=2, marker='c2_')
1362 3dabe5d2 Stavros Sachtouris
        conames = [container['name'] for container in r.json \
1363 3dabe5d2 Stavros Sachtouris
            if container['name'].lower().startswith('c2_')]
1364 3dabe5d2 Stavros Sachtouris
        self.assertTrue(temp_c0 in conames)
1365 3dabe5d2 Stavros Sachtouris
        self.assertFalse(temp_c2 in conames)
1366 3dabe5d2 Stavros Sachtouris
1367 3dabe5d2 Stavros Sachtouris
        r = self.client.account_get(show_only_shared=True)
1368 3dabe5d2 Stavros Sachtouris
        self.assertTrue(self.c1 in [c['name'] for c in r.json])
1369 3dabe5d2 Stavros Sachtouris
1370 3dabe5d2 Stavros Sachtouris
        r = self.client.account_get(until=1342609206)
1371 3dabe5d2 Stavros Sachtouris
        self.assertTrue(len(r.json) <= fullLen)
1372 3dabe5d2 Stavros Sachtouris
1373 3dabe5d2 Stavros Sachtouris
        """Check if(un)modified_since"""
1374 3dabe5d2 Stavros Sachtouris
        for format in self.client.DATE_FORMATS:
1375 3dabe5d2 Stavros Sachtouris
            now_formated = self.now_unformated.strftime(format)
1376 3dabe5d2 Stavros Sachtouris
            r1 = self.client.account_get(if_modified_since=now_formated,
1377 3dabe5d2 Stavros Sachtouris
                success=(200, 304, 412))
1378 3dabe5d2 Stavros Sachtouris
            sc1 = r1.status_code
1379 3dabe5d2 Stavros Sachtouris
            r1.release()
1380 3dabe5d2 Stavros Sachtouris
            r2 = self.client.account_get(if_unmodified_since=now_formated,
1381 3dabe5d2 Stavros Sachtouris
                success=(200, 304, 412))
1382 3dabe5d2 Stavros Sachtouris
            sc2 = r2.status_code
1383 3dabe5d2 Stavros Sachtouris
            r2.release()
1384 3dabe5d2 Stavros Sachtouris
            self.assertNotEqual(sc1, sc2)
1385 3dabe5d2 Stavros Sachtouris
1386 3dabe5d2 Stavros Sachtouris
        """Check sharing_accounts"""
1387 3dabe5d2 Stavros Sachtouris
        r = self.client.get_sharing_accounts()
1388 3dabe5d2 Stavros Sachtouris
        self.assertTrue(len(r) > 0)
1389 3dabe5d2 Stavros Sachtouris
1390 3dabe5d2 Stavros Sachtouris
    def test_account_post(self):
1391 3dabe5d2 Stavros Sachtouris
        """Test account_POST"""
1392 3dabe5d2 Stavros Sachtouris
        r = self.client.account_post()
1393 3dabe5d2 Stavros Sachtouris
        self.assertEqual(r.status_code, 202)
1394 3dabe5d2 Stavros Sachtouris
        grpName = 'grp' + unicode(self.now)
1395 3dabe5d2 Stavros Sachtouris
1396 3dabe5d2 Stavros Sachtouris
        """Method set/del_account_meta and set_account_groupcall use
1397 3dabe5d2 Stavros Sachtouris
            account_post internally
1398 3dabe5d2 Stavros Sachtouris
        """
1399 3dabe5d2 Stavros Sachtouris
        self.client.set_account_group(grpName, ['u1', 'u2'])
1400 3dabe5d2 Stavros Sachtouris
        r = self.client.get_account_group()
1401 3dabe5d2 Stavros Sachtouris
        self.assertEqual(r['x-account-group-' + grpName], 'u1,u2')
1402 3dabe5d2 Stavros Sachtouris
        self.client.del_account_group(grpName)
1403 3dabe5d2 Stavros Sachtouris
        r = self.client.get_account_group()
1404 3dabe5d2 Stavros Sachtouris
        self.assertTrue('x-account-group-' + grpName not in r)
1405 3dabe5d2 Stavros Sachtouris
1406 3dabe5d2 Stavros Sachtouris
        mprefix = 'meta' + unicode(self.now)
1407 3dabe5d2 Stavros Sachtouris
        self.client.set_account_meta({mprefix + '1': 'v1',
1408 3dabe5d2 Stavros Sachtouris
            mprefix + '2': 'v2'})
1409 3dabe5d2 Stavros Sachtouris
        r = self.client.get_account_meta()
1410 3dabe5d2 Stavros Sachtouris
        self.assertEqual(r['x-account-meta-' + mprefix + '1'], 'v1')
1411 3dabe5d2 Stavros Sachtouris
        self.assertEqual(r['x-account-meta-' + mprefix + '2'], 'v2')
1412 3dabe5d2 Stavros Sachtouris
1413 3dabe5d2 Stavros Sachtouris
        self.client.del_account_meta(mprefix + '1')
1414 3dabe5d2 Stavros Sachtouris
        r = self.client.get_account_meta()
1415 3dabe5d2 Stavros Sachtouris
        self.assertTrue('x-account-meta-' + mprefix + '1' not in r)
1416 3dabe5d2 Stavros Sachtouris
1417 3dabe5d2 Stavros Sachtouris
        self.client.del_account_meta(mprefix + '2')
1418 3dabe5d2 Stavros Sachtouris
        r = self.client.get_account_meta()
1419 3dabe5d2 Stavros Sachtouris
        self.assertTrue('x-account-meta-' + mprefix + '2' not in r)
1420 3dabe5d2 Stavros Sachtouris
1421 3dabe5d2 Stavros Sachtouris
        """Missing testing for quota, versioning, because normally
1422 7d91734c Stavros Sachtouris
        you don't have permissions to modify those at account level
1423 3dabe5d2 Stavros Sachtouris
        """
1424 3dabe5d2 Stavros Sachtouris
1425 3dabe5d2 Stavros Sachtouris
        newquota = 1000000
1426 3dabe5d2 Stavros Sachtouris
        self.client.set_account_quota(newquota)
1427 3dabe5d2 Stavros Sachtouris
        #r = self.client.get_account_info()
1428 3dabe5d2 Stavros Sachtouris
        #print(unicode(r))
1429 3dabe5d2 Stavros Sachtouris
        #r = self.client.get_account_quota()
1430 3dabe5d2 Stavros Sachtouris
        #self.assertEqual(r['x-account-policy-quota'], newquota)
1431 3dabe5d2 Stavros Sachtouris
        self.client.set_account_versioning('auto')
1432 3dabe5d2 Stavros Sachtouris
1433 3dabe5d2 Stavros Sachtouris
    def test_container_head(self):
1434 3dabe5d2 Stavros Sachtouris
        """Test container_HEAD"""
1435 3dabe5d2 Stavros Sachtouris
        self.client.container = self.c1
1436 3dabe5d2 Stavros Sachtouris
1437 3dabe5d2 Stavros Sachtouris
        r = self.client.container_head()
1438 3dabe5d2 Stavros Sachtouris
        self.assertEqual(r.status_code, 204)
1439 3dabe5d2 Stavros Sachtouris
1440 3dabe5d2 Stavros Sachtouris
        """Check until"""
1441 3dabe5d2 Stavros Sachtouris
        r = self.client.container_head(until=1000000, success=(204, 404))
1442 3dabe5d2 Stavros Sachtouris
        self.assertEqual(r.status_code, 404)
1443 3dabe5d2 Stavros Sachtouris
1444 3dabe5d2 Stavros Sachtouris
        """Check and if(un)modified_since"""
1445 3dabe5d2 Stavros Sachtouris
        for format in self.client.DATE_FORMATS:
1446 3dabe5d2 Stavros Sachtouris
            now_formated = self.now_unformated.strftime(format)
1447 3dabe5d2 Stavros Sachtouris
            r1 = self.client.container_head(if_modified_since=now_formated,
1448 3dabe5d2 Stavros Sachtouris
                success=(204, 304, 412))
1449 3dabe5d2 Stavros Sachtouris
            sc1 = r1.status_code
1450 3dabe5d2 Stavros Sachtouris
            r1.release()
1451 3dabe5d2 Stavros Sachtouris
            r2 = self.client.container_head(if_unmodified_since=now_formated,
1452 3dabe5d2 Stavros Sachtouris
                success=(204, 304, 412))
1453 3dabe5d2 Stavros Sachtouris
            sc2 = r2.status_code
1454 3dabe5d2 Stavros Sachtouris
            r2.release()
1455 3dabe5d2 Stavros Sachtouris
            self.assertNotEqual(sc1, sc2)
1456 3dabe5d2 Stavros Sachtouris
1457 3dabe5d2 Stavros Sachtouris
        """Check container object meta"""
1458 3dabe5d2 Stavros Sachtouris
        r = self.client.get_container_object_meta()
1459 3dabe5d2 Stavros Sachtouris
        self.assertEqual(r['x-container-object-meta'], 'Incontainer')
1460 3dabe5d2 Stavros Sachtouris
1461 3dabe5d2 Stavros Sachtouris
    def test_container_get(self):
1462 3dabe5d2 Stavros Sachtouris
        """Test container_GET"""
1463 3dabe5d2 Stavros Sachtouris
        self.client.container = self.c1
1464 3dabe5d2 Stavros Sachtouris
1465 3dabe5d2 Stavros Sachtouris
        r = self.client.container_get()
1466 3dabe5d2 Stavros Sachtouris
        self.assertEqual(r.status_code, 200)
1467 3dabe5d2 Stavros Sachtouris
        fullLen = len(r.json)
1468 3dabe5d2 Stavros Sachtouris
1469 3dabe5d2 Stavros Sachtouris
        r = self.client.container_get(prefix='test')
1470 3dabe5d2 Stavros Sachtouris
        lalobjects = [obj for obj in r.json if obj['name'].startswith('test')]
1471 3dabe5d2 Stavros Sachtouris
        self.assertTrue(len(r.json) > 1)
1472 3dabe5d2 Stavros Sachtouris
        self.assertEqual(len(r.json), len(lalobjects))
1473 3dabe5d2 Stavros Sachtouris
1474 3dabe5d2 Stavros Sachtouris
        r = self.client.container_get(limit=1)
1475 3dabe5d2 Stavros Sachtouris
        self.assertEqual(len(r.json), 1)
1476 3dabe5d2 Stavros Sachtouris
1477 3dabe5d2 Stavros Sachtouris
        r = self.client.container_get(marker='another')
1478 3dabe5d2 Stavros Sachtouris
        self.assertTrue(len(r.json) > 1)
1479 3dabe5d2 Stavros Sachtouris
        neobjects = [obj for obj in r.json if obj['name'] > 'another']
1480 3dabe5d2 Stavros Sachtouris
        self.assertEqual(len(r.json), len(neobjects))
1481 3dabe5d2 Stavros Sachtouris
1482 3dabe5d2 Stavros Sachtouris
        r = self.client.container_get(prefix='another.test', delimiter='.')
1483 3dabe5d2 Stavros Sachtouris
        self.assertTrue(fullLen > len(r.json))
1484 3dabe5d2 Stavros Sachtouris
1485 3dabe5d2 Stavros Sachtouris
        r = self.client.container_get(path='/')
1486 3dabe5d2 Stavros Sachtouris
        self.assertEqual(fullLen, len(r.json))
1487 3dabe5d2 Stavros Sachtouris
1488 3dabe5d2 Stavros Sachtouris
        r = self.client.container_get(format='xml')
1489 3dabe5d2 Stavros Sachtouris
        self.assertEqual(r.text.split()[4], 'name="' + self.c1 + '">')
1490 3dabe5d2 Stavros Sachtouris
1491 3dabe5d2 Stavros Sachtouris
        r = self.client.container_get(meta=['incontainer'])
1492 3dabe5d2 Stavros Sachtouris
        self.assertTrue(len(r.json) > 0)
1493 3dabe5d2 Stavros Sachtouris
1494 3dabe5d2 Stavros Sachtouris
        r = self.client.container_get(show_only_shared=True)
1495 3dabe5d2 Stavros Sachtouris
        self.assertTrue(len(r.json) < fullLen)
1496 3dabe5d2 Stavros Sachtouris
1497 3dabe5d2 Stavros Sachtouris
        try:
1498 3dabe5d2 Stavros Sachtouris
            r = self.client.container_get(until=1000000000)
1499 3dabe5d2 Stavros Sachtouris
            datestring = unicode(r.headers['x-account-until-timestamp'])
1500 3dabe5d2 Stavros Sachtouris
            self.assertEqual(u'Sun, 09 Sep 2001 01:46:40 GMT', datestring)
1501 3dabe5d2 Stavros Sachtouris
1502 3dabe5d2 Stavros Sachtouris
        except ClientError:
1503 3dabe5d2 Stavros Sachtouris
1504 3dabe5d2 Stavros Sachtouris
            pass
1505 3dabe5d2 Stavros Sachtouris
1506 3dabe5d2 Stavros Sachtouris
        """Check and if un/modified_since"""
1507 3dabe5d2 Stavros Sachtouris
        for format in self.client.DATE_FORMATS:
1508 3dabe5d2 Stavros Sachtouris
            now_formated = self.now_unformated.strftime(format)
1509 3dabe5d2 Stavros Sachtouris
            r1 = self.client.container_get(if_modified_since=now_formated,
1510 3dabe5d2 Stavros Sachtouris
                success=(200, 304, 412))
1511 3dabe5d2 Stavros Sachtouris
            sc1 = r1.status_code
1512 3dabe5d2 Stavros Sachtouris
            r1.release()
1513 3dabe5d2 Stavros Sachtouris
            r2 = self.client.container_get(if_unmodified_since=now_formated,
1514 3dabe5d2 Stavros Sachtouris
                success=(200, 304, 412))
1515 3dabe5d2 Stavros Sachtouris
            sc2 = r2.status_code
1516 3dabe5d2 Stavros Sachtouris
            r2.release()
1517 3dabe5d2 Stavros Sachtouris
            self.assertNotEqual(sc1, sc2)
1518 3dabe5d2 Stavros Sachtouris
1519 3dabe5d2 Stavros Sachtouris
    def test_container_put(self):
1520 3dabe5d2 Stavros Sachtouris
        """Test container_PUT"""
1521 3dabe5d2 Stavros Sachtouris
        self.client.container = self.c2
1522 3dabe5d2 Stavros Sachtouris
1523 3dabe5d2 Stavros Sachtouris
        r = self.client.container_put()
1524 3dabe5d2 Stavros Sachtouris
        self.assertEqual(r.status_code, 202)
1525 3dabe5d2 Stavros Sachtouris
1526 3dabe5d2 Stavros Sachtouris
        r = self.client.get_container_quota(self.client.container)
1527 3dabe5d2 Stavros Sachtouris
        cquota = r.values()[0]
1528 3dabe5d2 Stavros Sachtouris
        newquota = 2 * int(cquota)
1529 3dabe5d2 Stavros Sachtouris
1530 3dabe5d2 Stavros Sachtouris
        r = self.client.container_put(quota=newquota)
1531 3dabe5d2 Stavros Sachtouris
        self.assertEqual(r.status_code, 202)
1532 3dabe5d2 Stavros Sachtouris
1533 3dabe5d2 Stavros Sachtouris
        r = self.client.get_container_quota(self.client.container)
1534 3dabe5d2 Stavros Sachtouris
        xquota = int(r.values()[0])
1535 3dabe5d2 Stavros Sachtouris
        self.assertEqual(newquota, xquota)
1536 3dabe5d2 Stavros Sachtouris
1537 3dabe5d2 Stavros Sachtouris
        r = self.client.container_put(versioning='auto')
1538 3dabe5d2 Stavros Sachtouris
        self.assertEqual(r.status_code, 202)
1539 3dabe5d2 Stavros Sachtouris
1540 3dabe5d2 Stavros Sachtouris
        r = self.client.get_container_versioning(self.client.container)
1541 3dabe5d2 Stavros Sachtouris
        nvers = r.values()[0]
1542 3dabe5d2 Stavros Sachtouris
        self.assertEqual('auto', nvers)
1543 3dabe5d2 Stavros Sachtouris
1544 3dabe5d2 Stavros Sachtouris
        r = self.client.container_put(versioning='none')
1545 3dabe5d2 Stavros Sachtouris
        self.assertEqual(r.status_code, 202)
1546 3dabe5d2 Stavros Sachtouris
1547 3dabe5d2 Stavros Sachtouris
        r = self.client.get_container_versioning(self.client.container)
1548 3dabe5d2 Stavros Sachtouris
        nvers = r.values()[0]
1549 3dabe5d2 Stavros Sachtouris
        self.assertEqual('none', nvers)
1550 3dabe5d2 Stavros Sachtouris
1551 3dabe5d2 Stavros Sachtouris
        r = self.client.container_put(metadata={'m1': 'v1', 'm2': 'v2'})
1552 3dabe5d2 Stavros Sachtouris
        self.assertEqual(r.status_code, 202)
1553 3dabe5d2 Stavros Sachtouris
1554 3dabe5d2 Stavros Sachtouris
        r = self.client.get_container_meta(self.client.container)
1555 3dabe5d2 Stavros Sachtouris
        self.assertTrue('x-container-meta-m1' in r)
1556 3dabe5d2 Stavros Sachtouris
        self.assertEqual(r['x-container-meta-m1'], 'v1')
1557 3dabe5d2 Stavros Sachtouris
        self.assertTrue('x-container-meta-m2' in r)
1558 3dabe5d2 Stavros Sachtouris
        self.assertEqual(r['x-container-meta-m2'], 'v2')
1559 3dabe5d2 Stavros Sachtouris
1560 3dabe5d2 Stavros Sachtouris
        r = self.client.container_put(metadata={'m1': '', 'm2': 'v2a'})
1561 3dabe5d2 Stavros Sachtouris
        self.assertEqual(r.status_code, 202)
1562 3dabe5d2 Stavros Sachtouris
1563 3dabe5d2 Stavros Sachtouris
        r = self.client.get_container_meta(self.client.container)
1564 3dabe5d2 Stavros Sachtouris
        self.assertTrue('x-container-meta-m1' not in r)
1565 3dabe5d2 Stavros Sachtouris
        self.assertTrue('x-container-meta-m2' in r)
1566 3dabe5d2 Stavros Sachtouris
        self.assertEqual(r['x-container-meta-m2'], 'v2a')
1567 3dabe5d2 Stavros Sachtouris
1568 3dabe5d2 Stavros Sachtouris
        self.client.del_container_meta(self.client.container)
1569 3dabe5d2 Stavros Sachtouris
1570 3dabe5d2 Stavros Sachtouris
    def test_container_post(self):
1571 3dabe5d2 Stavros Sachtouris
        """Test container_POST"""
1572 3dabe5d2 Stavros Sachtouris
        self.client.container = self.c2
1573 3dabe5d2 Stavros Sachtouris
1574 3dabe5d2 Stavros Sachtouris
        """Simple post"""
1575 3dabe5d2 Stavros Sachtouris
        r = self.client.container_post()
1576 3dabe5d2 Stavros Sachtouris
        self.assertEqual(r.status_code, 202)
1577 3dabe5d2 Stavros Sachtouris
1578 3dabe5d2 Stavros Sachtouris
        """post meta"""
1579 3dabe5d2 Stavros Sachtouris
        self.client.set_container_meta({'m1': 'v1', 'm2': 'v2'})
1580 3dabe5d2 Stavros Sachtouris
        r = self.client.get_container_meta(self.client.container)
1581 3dabe5d2 Stavros Sachtouris
        self.assertTrue('x-container-meta-m1' in r)
1582 3dabe5d2 Stavros Sachtouris
        self.assertEqual(r['x-container-meta-m1'], 'v1')
1583 3dabe5d2 Stavros Sachtouris
        self.assertTrue('x-container-meta-m2' in r)
1584 3dabe5d2 Stavros Sachtouris
        self.assertEqual(r['x-container-meta-m2'], 'v2')
1585 3dabe5d2 Stavros Sachtouris
1586 3dabe5d2 Stavros Sachtouris
        """post/2del meta"""
1587 3dabe5d2 Stavros Sachtouris
        r = self.client.del_container_meta('m1')
1588 3dabe5d2 Stavros Sachtouris
        r = self.client.set_container_meta({'m2': 'v2a'})
1589 3dabe5d2 Stavros Sachtouris
        r = self.client.get_container_meta(self.client.container)
1590 3dabe5d2 Stavros Sachtouris
        self.assertTrue('x-container-meta-m1' not in r)
1591 3dabe5d2 Stavros Sachtouris
        self.assertTrue('x-container-meta-m2' in r)
1592 3dabe5d2 Stavros Sachtouris
        self.assertEqual(r['x-container-meta-m2'], 'v2a')
1593 3dabe5d2 Stavros Sachtouris
1594 3dabe5d2 Stavros Sachtouris
        """check quota"""
1595 3dabe5d2 Stavros Sachtouris
        r = self.client.get_container_quota(self.client.container)
1596 3dabe5d2 Stavros Sachtouris
        cquota = r.values()[0]
1597 3dabe5d2 Stavros Sachtouris
        newquota = 2 * int(cquota)
1598 3dabe5d2 Stavros Sachtouris
        r = self.client.set_container_quota(newquota)
1599 3dabe5d2 Stavros Sachtouris
        r = self.client.get_container_quota(self.client.container)
1600 3dabe5d2 Stavros Sachtouris
        xquota = int(r.values()[0])
1601 3dabe5d2 Stavros Sachtouris
        self.assertEqual(newquota, xquota)
1602 3dabe5d2 Stavros Sachtouris
        r = self.client.set_container_quota(cquota)
1603 3dabe5d2 Stavros Sachtouris
        r = self.client.get_container_quota(self.client.container)
1604 3dabe5d2 Stavros Sachtouris
        xquota = r.values()[0]
1605 3dabe5d2 Stavros Sachtouris
        self.assertEqual(cquota, xquota)
1606 3dabe5d2 Stavros Sachtouris
1607 3dabe5d2 Stavros Sachtouris
        """Check versioning"""
1608 3dabe5d2 Stavros Sachtouris
        self.client.set_container_versioning('auto')
1609 3dabe5d2 Stavros Sachtouris
        r = self.client.get_container_versioning(self.client.container)
1610 3dabe5d2 Stavros Sachtouris
        nvers = r.values()[0]
1611 3dabe5d2 Stavros Sachtouris
        self.assertEqual('auto', nvers)
1612 3dabe5d2 Stavros Sachtouris
        self.client.set_container_versioning('none')
1613 3dabe5d2 Stavros Sachtouris
        r = self.client.get_container_versioning(self.client.container)
1614 3dabe5d2 Stavros Sachtouris
        nvers = r.values()[0]
1615 3dabe5d2 Stavros Sachtouris
        self.assertEqual('none', nvers)
1616 3dabe5d2 Stavros Sachtouris
1617 3dabe5d2 Stavros Sachtouris
        """put_block uses content_type and content_length to
1618 3dabe5d2 Stavros Sachtouris
        post blocks of data 2 container. All that in upload_object"""
1619 3dabe5d2 Stavros Sachtouris
        """Change a file at fs"""
1620 3dabe5d2 Stavros Sachtouris
        self.create_large_file(1024 * 1024 * 100, 'l100M.' + unicode(self.now))
1621 3dabe5d2 Stavros Sachtouris
        """Upload it at a directory in container"""
1622 3dabe5d2 Stavros Sachtouris
        self.client.create_directory('dir')
1623 3dabe5d2 Stavros Sachtouris
        newf = open(self.fname, 'r')
1624 3dabe5d2 Stavros Sachtouris
        self.client.upload_object('/dir/sample.file', newf)
1625 3dabe5d2 Stavros Sachtouris
        newf.close()
1626 3dabe5d2 Stavros Sachtouris
        """Check if file has been uploaded"""
1627 3dabe5d2 Stavros Sachtouris
        r = self.client.get_object_info('/dir/sample.file')
1628 3dabe5d2 Stavros Sachtouris
        self.assertTrue(int(r['content-length']) > 100000000)
1629 3dabe5d2 Stavros Sachtouris
1630 3dabe5d2 Stavros Sachtouris
        """WTF is tranfer_encoding? What should I check about th** s**t? """
1631 3dabe5d2 Stavros Sachtouris
        #TODO
1632 3dabe5d2 Stavros Sachtouris
1633 3dabe5d2 Stavros Sachtouris
        """Check update=False"""
1634 3dabe5d2 Stavros Sachtouris
        r = self.client.object_post('test',
1635 3dabe5d2 Stavros Sachtouris
            update=False,
1636 3dabe5d2 Stavros Sachtouris
            metadata={'newmeta': 'newval'})
1637 3dabe5d2 Stavros Sachtouris
1638 3dabe5d2 Stavros Sachtouris
        r = self.client.get_object_info('test')
1639 3dabe5d2 Stavros Sachtouris
        self.assertTrue('x-object-meta-newmeta' in r)
1640 3dabe5d2 Stavros Sachtouris
        self.assertFalse('x-object-meta-incontainer' in r)
1641 3dabe5d2 Stavros Sachtouris
1642 3dabe5d2 Stavros Sachtouris
        r = self.client.del_container_meta('m2')
1643 3dabe5d2 Stavros Sachtouris
1644 3dabe5d2 Stavros Sachtouris
    def test_container_delete(self):
1645 3dabe5d2 Stavros Sachtouris
        """Test container_DELETE"""
1646 3dabe5d2 Stavros Sachtouris
1647 3dabe5d2 Stavros Sachtouris
        """Fail to delete a non-empty container"""
1648 3dabe5d2 Stavros Sachtouris
        self.client.container = self.c2
1649 3dabe5d2 Stavros Sachtouris
        r = self.client.container_delete(success=409)
1650 3dabe5d2 Stavros Sachtouris
        self.assertEqual(r.status_code, 409)
1651 3dabe5d2 Stavros Sachtouris
1652 3dabe5d2 Stavros Sachtouris
        """Fail to delete c3 (empty) container"""
1653 3dabe5d2 Stavros Sachtouris
        self.client.container = self.c3
1654 3dabe5d2 Stavros Sachtouris
        r = self.client.container_delete(until='1000000000')
1655 3dabe5d2 Stavros Sachtouris
        self.assertEqual(r.status_code, 204)
1656 3dabe5d2 Stavros Sachtouris
1657 3dabe5d2 Stavros Sachtouris
        """Delete c3 (empty) container"""
1658 3dabe5d2 Stavros Sachtouris
        r = self.client.container_delete()
1659 3dabe5d2 Stavros Sachtouris
        self.assertEqual(r.status_code, 204)
1660 3dabe5d2 Stavros Sachtouris
1661 3dabe5d2 Stavros Sachtouris
        """Purge container(empty a container), check versionlist"""
1662 3dabe5d2 Stavros Sachtouris
        self.client.container = self.c1
1663 3dabe5d2 Stavros Sachtouris
        r = self.client.object_head('test', success=(200, 404))
1664 3dabe5d2 Stavros Sachtouris
        self.assertEqual(r.status_code, 200)
1665 3dabe5d2 Stavros Sachtouris
        self.client.del_container(delimiter='/')
1666 3dabe5d2 Stavros Sachtouris
        r = self.client.object_head('test', success=(200, 404))
1667 3dabe5d2 Stavros Sachtouris
        self.assertEqual(r.status_code, 404)
1668 3dabe5d2 Stavros Sachtouris
        r = self.client.get_object_versionlist('test')
1669 3dabe5d2 Stavros Sachtouris
        self.assertTrue(len(r) > 0)
1670 3dabe5d2 Stavros Sachtouris
        self.assertTrue(len(r[0]) > 1)
1671 3dabe5d2 Stavros Sachtouris
        self.client.purge_container()
1672 3dabe5d2 Stavros Sachtouris
        self.assertRaises(ClientError,
1673 3dabe5d2 Stavros Sachtouris
            self.client.get_object_versionlist,
1674 3dabe5d2 Stavros Sachtouris
            'test')
1675 3dabe5d2 Stavros Sachtouris
1676 3dabe5d2 Stavros Sachtouris
    def test_object_head(self):
1677 3dabe5d2 Stavros Sachtouris
        """Test object_HEAD"""
1678 3dabe5d2 Stavros Sachtouris
        self.client.container = self.c2
1679 3dabe5d2 Stavros Sachtouris
        obj = 'test'
1680 3dabe5d2 Stavros Sachtouris
1681 3dabe5d2 Stavros Sachtouris
        r = self.client.object_head(obj)
1682 3dabe5d2 Stavros Sachtouris
        self.assertEqual(r.status_code, 200)
1683 3dabe5d2 Stavros Sachtouris
        etag = r.headers['etag']
1684 3dabe5d2 Stavros Sachtouris
1685 3dabe5d2 Stavros Sachtouris
        r = self.client.object_head(obj, version=40)
1686 3dabe5d2 Stavros Sachtouris
        self.assertEqual(r.headers['x-object-version'], '40')
1687 3dabe5d2 Stavros Sachtouris
1688 3dabe5d2 Stavros Sachtouris
        r = self.client.object_head(obj, if_etag_match=etag)
1689 3dabe5d2 Stavros Sachtouris
        self.assertEqual(r.status_code, 200)
1690 3dabe5d2 Stavros Sachtouris
1691 3dabe5d2 Stavros Sachtouris
        r = self.client.object_head(obj,
1692 3dabe5d2 Stavros Sachtouris
            if_etag_not_match=etag,
1693 3dabe5d2 Stavros Sachtouris
            success=(200, 412, 304))
1694 3dabe5d2 Stavros Sachtouris
        self.assertNotEqual(r.status_code, 200)
1695 3dabe5d2 Stavros Sachtouris
1696 3dabe5d2 Stavros Sachtouris
        r = self.client.object_head(obj,
1697 3dabe5d2 Stavros Sachtouris
            version=40,
1698 3dabe5d2 Stavros Sachtouris
            if_etag_match=etag,
1699 3dabe5d2 Stavros Sachtouris
            success=412)
1700 3dabe5d2 Stavros Sachtouris
        self.assertEqual(r.status_code, 412)
1701 3dabe5d2 Stavros Sachtouris
1702 3dabe5d2 Stavros Sachtouris
        """Check and if(un)modified_since"""
1703 3dabe5d2 Stavros Sachtouris
        for format in self.client.DATE_FORMATS:
1704 3dabe5d2 Stavros Sachtouris
            now_formated = self.now_unformated.strftime(format)
1705 3dabe5d2 Stavros Sachtouris
            r1 = self.client.object_head(obj, if_modified_since=now_formated,
1706 3dabe5d2 Stavros Sachtouris
                success=(200, 304, 412))
1707 3dabe5d2 Stavros Sachtouris
            sc1 = r1.status_code
1708 3dabe5d2 Stavros Sachtouris
            r1.release()
1709 3dabe5d2 Stavros Sachtouris
            r2 = self.client.object_head(obj, if_unmodified_since=now_formated,
1710 3dabe5d2 Stavros Sachtouris
                success=(200, 304, 412))
1711 3dabe5d2 Stavros Sachtouris
            sc2 = r2.status_code
1712 3dabe5d2 Stavros Sachtouris
            r2.release()
1713 3dabe5d2 Stavros Sachtouris
            self.assertNotEqual(sc1, sc2)
1714 3dabe5d2 Stavros Sachtouris
1715 3dabe5d2 Stavros Sachtouris
    def test_object_get(self):
1716 3dabe5d2 Stavros Sachtouris
        """Test object_GET"""
1717 3dabe5d2 Stavros Sachtouris
        self.client.container = self.c1
1718 3dabe5d2 Stavros Sachtouris
        obj = 'test'
1719 3dabe5d2 Stavros Sachtouris
1720 3dabe5d2 Stavros Sachtouris
        r = self.client.object_get(obj)
1721 3dabe5d2 Stavros Sachtouris
        self.assertEqual(r.status_code, 200)
1722 3dabe5d2 Stavros Sachtouris
1723 3dabe5d2 Stavros Sachtouris
        osize = int(r.headers['content-length'])
1724 3dabe5d2 Stavros Sachtouris
        etag = r.headers['etag']
1725 3dabe5d2 Stavros Sachtouris
1726 3dabe5d2 Stavros Sachtouris
        r = self.client.object_get(obj, hashmap=True)
1727 3dabe5d2 Stavros Sachtouris
        self.assertTrue('hashes' in r.json\
1728 3dabe5d2 Stavros Sachtouris
            and 'block_hash' in r.json\
1729 3dabe5d2 Stavros Sachtouris
            and 'block_size' in r.json\
1730 3dabe5d2 Stavros Sachtouris
            and 'bytes' in r.json)
1731 3dabe5d2 Stavros Sachtouris
1732 3dabe5d2 Stavros Sachtouris
        r = self.client.object_get(obj, format='xml', hashmap=True)
1733 3dabe5d2 Stavros Sachtouris
        self.assertEqual(len(r.text.split('hash>')), 3)
1734 3dabe5d2 Stavros Sachtouris
1735 3dabe5d2 Stavros Sachtouris
        rangestr = 'bytes=%s-%s' % (osize / 3, osize / 2)
1736 3dabe5d2 Stavros Sachtouris
        r = self.client.object_get(obj,
1737 3dabe5d2 Stavros Sachtouris
            data_range=rangestr,
1738 3dabe5d2 Stavros Sachtouris
            success=(200, 206))
1739 3dabe5d2 Stavros Sachtouris
        partsize = int(r.headers['content-length'])
1740 3dabe5d2 Stavros Sachtouris
        self.assertTrue(0 < partsize and partsize <= 1 + osize / 3)
1741 3dabe5d2 Stavros Sachtouris
1742 3dabe5d2 Stavros Sachtouris
        rangestr = 'bytes=%s-%s' % (osize / 3, osize / 2)
1743 3dabe5d2 Stavros Sachtouris
        r = self.client.object_get(obj,
1744 3dabe5d2 Stavros Sachtouris
            data_range=rangestr,
1745 3dabe5d2 Stavros Sachtouris
            if_range=True,
1746 3dabe5d2 Stavros Sachtouris
            success=(200, 206))
1747 3dabe5d2 Stavros Sachtouris
        partsize = int(r.headers['content-length'])
1748 3dabe5d2 Stavros Sachtouris
        self.assertTrue(0 < partsize and partsize <= 1 + osize / 3)
1749 3dabe5d2 Stavros Sachtouris
1750 3dabe5d2 Stavros Sachtouris
        r = self.client.object_get(obj, if_etag_match=etag)
1751 3dabe5d2 Stavros Sachtouris
        self.assertEqual(r.status_code, 200)
1752 3dabe5d2 Stavros Sachtouris
1753 3dabe5d2 Stavros Sachtouris
        r = self.client.object_get(obj, if_etag_not_match=etag + 'LALALA')
1754 3dabe5d2 Stavros Sachtouris
        self.assertEqual(r.status_code, 200)
1755 3dabe5d2 Stavros Sachtouris
1756 3dabe5d2 Stavros Sachtouris
        """Check and if(un)modified_since"""
1757 3dabe5d2 Stavros Sachtouris
        for format in self.client.DATE_FORMATS:
1758 3dabe5d2 Stavros Sachtouris
            now_formated = self.now_unformated.strftime(format)
1759 3dabe5d2 Stavros Sachtouris
            r1 = self.client.object_get(obj, if_modified_since=now_formated,
1760 3dabe5d2 Stavros Sachtouris
                success=(200, 304, 412))
1761 3dabe5d2 Stavros Sachtouris
            sc1 = r1.status_code
1762 3dabe5d2 Stavros Sachtouris
            r1.release()
1763 3dabe5d2 Stavros Sachtouris
            r2 = self.client.object_get(obj,
1764 3dabe5d2 Stavros Sachtouris
                if_unmodified_since=now_formated,
1765 3dabe5d2 Stavros Sachtouris
                success=(200, 304, 412))
1766 3dabe5d2 Stavros Sachtouris
            sc2 = r2.status_code
1767 3dabe5d2 Stavros Sachtouris
            r2.release()
1768 3dabe5d2 Stavros Sachtouris
            self.assertNotEqual(sc1, sc2)
1769 3dabe5d2 Stavros Sachtouris
1770 22beceb3 Stavros Sachtouris
        """Upload an object to download"""
1771 22beceb3 Stavros Sachtouris
        src_fname = '/tmp/localfile1_%s' % self.now
1772 22beceb3 Stavros Sachtouris
        dnl_fname = '/tmp/localfile2_%s' % self.now
1773 22beceb3 Stavros Sachtouris
        trg_fname = 'remotefile_%s' % self.now
1774 22beceb3 Stavros Sachtouris
        f_size = 59247824
1775 22beceb3 Stavros Sachtouris
        self.create_large_file(f_size, src_fname)
1776 22beceb3 Stavros Sachtouris
        src_f = open(src_fname, 'rb+')
1777 22beceb3 Stavros Sachtouris
        print('\tUploading...')
1778 22beceb3 Stavros Sachtouris
        self.client.upload_object(trg_fname, src_f)
1779 22beceb3 Stavros Sachtouris
        src_f.close()
1780 22beceb3 Stavros Sachtouris
        print('\tDownloading...')
1781 22beceb3 Stavros Sachtouris
        dnl_f = open(dnl_fname, 'wb+')
1782 22beceb3 Stavros Sachtouris
        self.client.download_object(trg_fname, dnl_f)
1783 22beceb3 Stavros Sachtouris
        dnl_f.close()
1784 22beceb3 Stavros Sachtouris
1785 22beceb3 Stavros Sachtouris
        print('\tCheck if files match...')
1786 22beceb3 Stavros Sachtouris
        src_f = open(src_fname)
1787 22beceb3 Stavros Sachtouris
        dnl_f = open(dnl_fname)
1788 22beceb3 Stavros Sachtouris
        for pos in (0, f_size / 2, f_size - 20):
1789 22beceb3 Stavros Sachtouris
            src_f.seek(pos)
1790 22beceb3 Stavros Sachtouris
            dnl_f.seek(pos)
1791 22beceb3 Stavros Sachtouris
            self.assertEqual(src_f.read(10), dnl_f.read(10))
1792 22beceb3 Stavros Sachtouris
        src_f.close()
1793 22beceb3 Stavros Sachtouris
        dnl_f.close()
1794 22beceb3 Stavros Sachtouris
1795 22beceb3 Stavros Sachtouris
        os.remove(src_fname)
1796 22beceb3 Stavros Sachtouris
        os.remove(dnl_fname)
1797 22beceb3 Stavros Sachtouris
1798 3dabe5d2 Stavros Sachtouris
    def test_object_put(self):
1799 3dabe5d2 Stavros Sachtouris
        """Test object_PUT"""
1800 3dabe5d2 Stavros Sachtouris
1801 3dabe5d2 Stavros Sachtouris
        self.client.container = self.c2
1802 3dabe5d2 Stavros Sachtouris
        obj = 'another.test'
1803 3dabe5d2 Stavros Sachtouris
1804 3dabe5d2 Stavros Sachtouris
        """create the object"""
1805 3dabe5d2 Stavros Sachtouris
        r = self.client.object_put(obj,
1806 3dabe5d2 Stavros Sachtouris
            data='a',
1807 3dabe5d2 Stavros Sachtouris
            content_type='application/octer-stream',
1808 3dabe5d2 Stavros Sachtouris
            permissions={
1809 3dabe5d2 Stavros Sachtouris
                'read': ['accX:groupA', 'u1', 'u2'],
1810 3dabe5d2 Stavros Sachtouris
                'write': ['u2', 'u3']},
1811 3dabe5d2 Stavros Sachtouris
            metadata={'key1': 'val1', 'key2': 'val2'},
1812 3dabe5d2 Stavros Sachtouris
            content_encoding='UTF-8',
1813 3dabe5d2 Stavros Sachtouris
            content_disposition='attachment; filename="fname.ext"')
1814 3dabe5d2 Stavros Sachtouris
        self.assertEqual(r.status_code, 201)
1815 3dabe5d2 Stavros Sachtouris
        etag = r.headers['etag']
1816 3dabe5d2 Stavros Sachtouris
1817 3dabe5d2 Stavros Sachtouris
        """Check content-disposition"""
1818 3dabe5d2 Stavros Sachtouris
        r = self.client.get_object_info(obj)
1819 3dabe5d2 Stavros Sachtouris
        self.assertTrue('content-disposition' in r)
1820 3dabe5d2 Stavros Sachtouris
1821 7d91734c Stavros Sachtouris
        """Check permissions"""
1822 3dabe5d2 Stavros Sachtouris
        r = self.client.get_object_sharing(obj)
1823 3dabe5d2 Stavros Sachtouris
        self.assertTrue('accx:groupa' in r['read'])
1824 3dabe5d2 Stavros Sachtouris
        self.assertTrue('u1' in r['read'])
1825 3dabe5d2 Stavros Sachtouris
        self.assertTrue('u2' in r['write'])
1826 3dabe5d2 Stavros Sachtouris
        self.assertTrue('u3' in r['write'])
1827 3dabe5d2 Stavros Sachtouris
1828 3dabe5d2 Stavros Sachtouris
        """Check metadata"""
1829 3dabe5d2 Stavros Sachtouris
        r = self.client.get_object_meta(obj)
1830 3dabe5d2 Stavros Sachtouris
        self.assertEqual(r['x-object-meta-key1'], 'val1')
1831 3dabe5d2 Stavros Sachtouris
        self.assertEqual(r['x-object-meta-key2'], 'val2')
1832 3dabe5d2 Stavros Sachtouris
1833 3dabe5d2 Stavros Sachtouris
        """Check public and if_etag_match"""
1834 3dabe5d2 Stavros Sachtouris
        r = self.client.object_put(obj, if_etag_match=etag, data='b',
1835 3dabe5d2 Stavros Sachtouris
            content_type='application/octet-stream', public=True)
1836 3dabe5d2 Stavros Sachtouris
1837 3dabe5d2 Stavros Sachtouris
        r = self.client.object_get(obj)
1838 3dabe5d2 Stavros Sachtouris
        self.assertTrue('x-object-public' in r.headers)
1839 3dabe5d2 Stavros Sachtouris
        vers2 = int(r.headers['x-object-version'])
1840 3dabe5d2 Stavros Sachtouris
        etag = r.headers['etag']
1841 3dabe5d2 Stavros Sachtouris
        self.assertEqual(r.text, 'b')
1842 3dabe5d2 Stavros Sachtouris
1843 3dabe5d2 Stavros Sachtouris
        """Check if_etag_not_match"""
1844 3dabe5d2 Stavros Sachtouris
        r = self.client.object_put(obj, if_etag_not_match=etag, data='c',
1845 3dabe5d2 Stavros Sachtouris
            content_type='application/octet-stream', success=(201, 412))
1846 3dabe5d2 Stavros Sachtouris
        self.assertEqual(r.status_code, 412)
1847 3dabe5d2 Stavros Sachtouris
1848 3dabe5d2 Stavros Sachtouris
        """Check content_type and content_length"""
1849 3dabe5d2 Stavros Sachtouris
        tmpdir = 'dir' + unicode(self.now)
1850 3dabe5d2 Stavros Sachtouris
        r = self.client.object_put(tmpdir,
1851 3dabe5d2 Stavros Sachtouris
            content_type='application/directory',
1852 3dabe5d2 Stavros Sachtouris
            content_length=0)
1853 3dabe5d2 Stavros Sachtouris
1854 3dabe5d2 Stavros Sachtouris
        r = self.client.get_object_info(tmpdir)
1855 3dabe5d2 Stavros Sachtouris
        self.assertEqual(r['content-type'], 'application/directory')
1856 3dabe5d2 Stavros Sachtouris
1857 3dabe5d2 Stavros Sachtouris
        """Check copy_from, content_encoding"""
1858 3dabe5d2 Stavros Sachtouris
        r = self.client.object_put('%s/%s' % (tmpdir, obj),
1859 3dabe5d2 Stavros Sachtouris
            format=None,
1860 3dabe5d2 Stavros Sachtouris
            copy_from='/%s/%s' % (self.client.container, obj),
1861 3dabe5d2 Stavros Sachtouris
            content_encoding='application/octet-stream',
1862 3dabe5d2 Stavros Sachtouris
            source_account=self.client.account,
1863 3dabe5d2 Stavros Sachtouris
            content_length=0, success=201)
1864 3dabe5d2 Stavros Sachtouris
        self.assertEqual(r.status_code, 201)
1865 3dabe5d2 Stavros Sachtouris
1866 3dabe5d2 Stavros Sachtouris
        """Test copy_object for cross-conctainer copy"""
1867 3dabe5d2 Stavros Sachtouris
        self.client.copy_object(src_container=self.c2,
1868 3dabe5d2 Stavros Sachtouris
            src_object='%s/%s' % (tmpdir, obj),
1869 3dabe5d2 Stavros Sachtouris
            dst_container=self.c1,
1870 3dabe5d2 Stavros Sachtouris
            dst_object=obj)
1871 3dabe5d2 Stavros Sachtouris
        self.client.container = self.c1
1872 3dabe5d2 Stavros Sachtouris
        r1 = self.client.get_object_info(obj)
1873 3dabe5d2 Stavros Sachtouris
        self.client.container = self.c2
1874 3dabe5d2 Stavros Sachtouris
        r2 = self.client.get_object_info('%s/%s' % (tmpdir, obj))
1875 3dabe5d2 Stavros Sachtouris
        self.assertEqual(r1['x-object-hash'], r2['x-object-hash'])
1876 3dabe5d2 Stavros Sachtouris
1877 3dabe5d2 Stavros Sachtouris
        """Check cross-container copy_from, content_encoding"""
1878 3dabe5d2 Stavros Sachtouris
        self.client.container = self.c1
1879 3dabe5d2 Stavros Sachtouris
        fromstr = '/%s/%s/%s' % (self.c2, tmpdir, obj)
1880 3dabe5d2 Stavros Sachtouris
        r = self.client.object_put(obj,
1881 3dabe5d2 Stavros Sachtouris
            format=None,
1882 3dabe5d2 Stavros Sachtouris
            copy_from=fromstr,
1883 3dabe5d2 Stavros Sachtouris
            content_encoding='application/octet-stream',
1884 3dabe5d2 Stavros Sachtouris
            source_account=self.client.account,
1885 3dabe5d2 Stavros Sachtouris
            content_length=0, success=201)
1886 3dabe5d2 Stavros Sachtouris
1887 3dabe5d2 Stavros Sachtouris
        self.assertEqual(r.status_code, 201)
1888 3dabe5d2 Stavros Sachtouris
        r = self.client.get_object_info(obj)
1889 3dabe5d2 Stavros Sachtouris
        self.assertEqual(r['etag'], etag)
1890 3dabe5d2 Stavros Sachtouris
1891 3dabe5d2 Stavros Sachtouris
        """Check source_account"""
1892 3dabe5d2 Stavros Sachtouris
        self.client.container = self.c2
1893 3dabe5d2 Stavros Sachtouris
        fromstr = '/%s/%s' % (self.c1, obj)
1894 3dabe5d2 Stavros Sachtouris
        r = self.client.object_put(obj + 'v2',
1895 3dabe5d2 Stavros Sachtouris
            format=None,
1896 3dabe5d2 Stavros Sachtouris
            move_from=fromstr,
1897 3dabe5d2 Stavros Sachtouris
            content_encoding='application/octet-stream',
1898 3dabe5d2 Stavros Sachtouris
            source_account='nonExistendAddress@NeverLand.com',
1899 3dabe5d2 Stavros Sachtouris
            content_length=0,
1900 3dabe5d2 Stavros Sachtouris
            success=(201, 403))
1901 3dabe5d2 Stavros Sachtouris
        self.assertEqual(r.status_code, 403)
1902 3dabe5d2 Stavros Sachtouris
1903 3dabe5d2 Stavros Sachtouris
        """Check cross-container move_from"""
1904 3dabe5d2 Stavros Sachtouris
        self.client.container = self.c1
1905 3dabe5d2 Stavros Sachtouris
        r1 = self.client.get_object_info(obj)
1906 3dabe5d2 Stavros Sachtouris
        self.client.container = self.c2
1907 3dabe5d2 Stavros Sachtouris
        self.client.move_object(src_container=self.c1,
1908 3dabe5d2 Stavros Sachtouris
            src_object=obj,
1909 3dabe5d2 Stavros Sachtouris
            dst_container=self.c2,
1910 3dabe5d2 Stavros Sachtouris
            dst_object=obj + 'v0')
1911 3dabe5d2 Stavros Sachtouris
        r0 = self.client.get_object_info(obj + 'v0')
1912 3dabe5d2 Stavros Sachtouris
        self.assertEqual(r1['x-object-hash'], r0['x-object-hash'])
1913 3dabe5d2 Stavros Sachtouris
1914 3dabe5d2 Stavros Sachtouris
        """Check move_from"""
1915 3dabe5d2 Stavros Sachtouris
        r = self.client.object_put(obj + 'v1',
1916 3dabe5d2 Stavros Sachtouris
            format=None,
1917 3dabe5d2 Stavros Sachtouris
            move_from='/%s/%s' % (self.c2, obj),
1918 3dabe5d2 Stavros Sachtouris
            source_version=vers2,
1919 3dabe5d2 Stavros Sachtouris
            content_encoding='application/octet-stream',
1920 3dabe5d2 Stavros Sachtouris
            content_length=0, success=201)
1921 3dabe5d2 Stavros Sachtouris
1922 3dabe5d2 Stavros Sachtouris
        """Check manifest"""
1923 3dabe5d2 Stavros Sachtouris
        mobj = 'manifest.test'
1924 3dabe5d2 Stavros Sachtouris
        txt = ''
1925 3dabe5d2 Stavros Sachtouris
        for i in range(10):
1926 3dabe5d2 Stavros Sachtouris
            txt += '%s' % i
1927 3dabe5d2 Stavros Sachtouris
            r = self.client.object_put('%s/%s' % (mobj, i),
1928 3dabe5d2 Stavros Sachtouris
                data='%s' % i,
1929 3dabe5d2 Stavros Sachtouris
                content_length=1,
1930 3dabe5d2 Stavros Sachtouris
                success=201,
1931 3dabe5d2 Stavros Sachtouris
                content_type='application/octet-stream',
1932 3dabe5d2 Stavros Sachtouris
                content_encoding='application/octet-stream')
1933 3dabe5d2 Stavros Sachtouris
1934 3dabe5d2 Stavros Sachtouris
        r = self.client.object_put(mobj,
1935 3dabe5d2 Stavros Sachtouris
            content_length=0,
1936 3dabe5d2 Stavros Sachtouris
            content_type='application/octet-stream',
1937 3dabe5d2 Stavros Sachtouris
            manifest='%s/%s' % (self.client.container, mobj))
1938 3dabe5d2 Stavros Sachtouris
1939 3dabe5d2 Stavros Sachtouris
        r = self.client.object_get(mobj)
1940 3dabe5d2 Stavros Sachtouris
        self.assertEqual(r.text, txt)
1941 3dabe5d2 Stavros Sachtouris
1942 3dabe5d2 Stavros Sachtouris
        """Upload a local file with one request"""
1943 3dabe5d2 Stavros Sachtouris
        self.create_large_file(1024 * 10, 'l10K.' + unicode(self.now))
1944 3dabe5d2 Stavros Sachtouris
        newf = open(self.fname, 'r')
1945 3dabe5d2 Stavros Sachtouris
        self.client.upload_object('sample.file', newf)
1946 3dabe5d2 Stavros Sachtouris
        newf.close()
1947 3dabe5d2 Stavros Sachtouris
        """Check if file has been uploaded"""
1948 3dabe5d2 Stavros Sachtouris
        r = self.client.get_object_info('sample.file')
1949 3dabe5d2 Stavros Sachtouris
        self.assertEqual(int(r['content-length']), 10260)
1950 3dabe5d2 Stavros Sachtouris
1951 3dabe5d2 Stavros Sachtouris
        """Some problems with transfer-encoding?"""
1952 3dabe5d2 Stavros Sachtouris
1953 3dabe5d2 Stavros Sachtouris
    def test_object_copy(self):
1954 3dabe5d2 Stavros Sachtouris
        """Test object_COPY"""
1955 3dabe5d2 Stavros Sachtouris
        self.client.container = self.c2
1956 3dabe5d2 Stavros Sachtouris
        obj = 'test2'
1957 3dabe5d2 Stavros Sachtouris
1958 3dabe5d2 Stavros Sachtouris
        data = '{"key1":"val1", "key2":"val2"}'
1959 3dabe5d2 Stavros Sachtouris
        r = self.client.object_put(obj + 'orig',
1960 3dabe5d2 Stavros Sachtouris
            content_type='application/octet-stream',
1961 3dabe5d2 Stavros Sachtouris
            data=data,
1962 3dabe5d2 Stavros Sachtouris
            metadata={'mkey1': 'mval1', 'mkey2': 'mval2'},
1963 3dabe5d2 Stavros Sachtouris
            permissions={
1964 3dabe5d2 Stavros Sachtouris
                'read': ['accX:groupA', 'u1', 'u2'],
1965 3dabe5d2 Stavros Sachtouris
                'write': ['u2', 'u3']},
1966 3dabe5d2 Stavros Sachtouris
            content_disposition='attachment; filename="fname.ext"')
1967 3dabe5d2 Stavros Sachtouris
1968 3dabe5d2 Stavros Sachtouris
        r = self.client.object_copy(obj + 'orig',
1969 3dabe5d2 Stavros Sachtouris
            destination='/%s/%s' % (self.client.container, obj),
1970 3dabe5d2 Stavros Sachtouris
            ignore_content_type=False, content_type='application/json',
1971 3dabe5d2 Stavros Sachtouris
            metadata={'mkey2': 'mval2a', 'mkey3': 'mval3'},
1972 3dabe5d2 Stavros Sachtouris
            permissions={'write': ['u5', 'accX:groupB']})
1973 3dabe5d2 Stavros Sachtouris
        self.assertEqual(r.status_code, 201)
1974 3dabe5d2 Stavros Sachtouris
1975 3dabe5d2 Stavros Sachtouris
        """Check content-disposition"""
1976 3dabe5d2 Stavros Sachtouris
        r = self.client.get_object_info(obj)
1977 3dabe5d2 Stavros Sachtouris
        self.assertTrue('content-disposition' in r)
1978 3dabe5d2 Stavros Sachtouris
1979 3dabe5d2 Stavros Sachtouris
        """Check Metadata"""
1980 3dabe5d2 Stavros Sachtouris
        r = self.client.get_object_meta(obj)
1981 3dabe5d2 Stavros Sachtouris
        self.assertEqual(r['x-object-meta-mkey1'], 'mval1')
1982 3dabe5d2 Stavros Sachtouris
        self.assertEqual(r['x-object-meta-mkey2'], 'mval2a')
1983 3dabe5d2 Stavros Sachtouris
        self.assertEqual(r['x-object-meta-mkey3'], 'mval3')
1984 3dabe5d2 Stavros Sachtouris
1985 3dabe5d2 Stavros Sachtouris
        """Check permissions"""
1986 3dabe5d2 Stavros Sachtouris
        r = self.client.get_object_sharing(obj)
1987 3dabe5d2 Stavros Sachtouris
        self.assertFalse('read' in r or 'u2' in r['write'])
1988 3dabe5d2 Stavros Sachtouris
        self.assertTrue('accx:groupb' in r['write'])
1989 3dabe5d2 Stavros Sachtouris
1990 3dabe5d2 Stavros Sachtouris
        """Check destination account"""
1991 3dabe5d2 Stavros Sachtouris
        r = self.client.object_copy(obj,
1992 3dabe5d2 Stavros Sachtouris
            destination='/%s/%s' % (self.c1, obj),
1993 3dabe5d2 Stavros Sachtouris
            content_encoding='utf8',
1994 3dabe5d2 Stavros Sachtouris
            content_type='application/json',
1995 3dabe5d2 Stavros Sachtouris
            destination_account='nonExistendAddress@NeverLand.com',
1996 3dabe5d2 Stavros Sachtouris
            success=(201, 403))
1997 3dabe5d2 Stavros Sachtouris
        self.assertEqual(r.status_code, 403)
1998 3dabe5d2 Stavros Sachtouris
1999 3dabe5d2 Stavros Sachtouris
        """Check destination being another container
2000 3dabe5d2 Stavros Sachtouris
        and also content_type and content encoding"""
2001 3dabe5d2 Stavros Sachtouris
        r = self.client.object_copy(obj,
2002 3dabe5d2 Stavros Sachtouris
            destination='/%s/%s' % (self.c1, obj),
2003 3dabe5d2 Stavros Sachtouris
            content_encoding='utf8',
2004 3dabe5d2 Stavros Sachtouris
            content_type='application/json')
2005 3dabe5d2 Stavros Sachtouris
        self.assertEqual(r.status_code, 201)
2006 3dabe5d2 Stavros Sachtouris
        self.assertEqual(r.headers['content-type'],
2007 3dabe5d2 Stavros Sachtouris
            'application/json; charset=UTF-8')
2008 3dabe5d2 Stavros Sachtouris
2009 3dabe5d2 Stavros Sachtouris
        """Check ignore_content_type and content_type"""
2010 3dabe5d2 Stavros Sachtouris
        r = self.client.object_get(obj)
2011 3dabe5d2 Stavros Sachtouris
        etag = r.headers['etag']
2012 3dabe5d2 Stavros Sachtouris
        ctype = r.headers['content-type']
2013 3dabe5d2 Stavros Sachtouris
        self.assertEqual(ctype, 'application/json')
2014 3dabe5d2 Stavros Sachtouris
2015 3dabe5d2 Stavros Sachtouris
        r = self.client.object_copy(obj + 'orig',
2016 3dabe5d2 Stavros Sachtouris
            destination='/%s/%s0' % (self.client.container, obj),
2017 3dabe5d2 Stavros Sachtouris
            ignore_content_type=True,
2018 3dabe5d2 Stavros Sachtouris
            content_type='application/json')
2019 3dabe5d2 Stavros Sachtouris
        self.assertEqual(r.status_code, 201)
2020 3dabe5d2 Stavros Sachtouris
        self.assertNotEqual(r.headers['content-type'], 'application/json')
2021 3dabe5d2 Stavros Sachtouris
2022 3dabe5d2 Stavros Sachtouris
        """Check if_etag_(not_)match"""
2023 3dabe5d2 Stavros Sachtouris
        r = self.client.object_copy(obj,
2024 3dabe5d2 Stavros Sachtouris
            destination='/%s/%s1' % (self.client.container, obj),
2025 3dabe5d2 Stavros Sachtouris
            if_etag_match=etag)
2026 3dabe5d2 Stavros Sachtouris
        self.assertEqual(r.status_code, 201)
2027 3dabe5d2 Stavros Sachtouris
2028 3dabe5d2 Stavros Sachtouris
        r = self.client.object_copy(obj,
2029 3dabe5d2 Stavros Sachtouris
            destination='/%s/%s2' % (self.client.container, obj),
2030 3dabe5d2 Stavros Sachtouris
            if_etag_not_match='lalala')
2031 3dabe5d2 Stavros Sachtouris
        self.assertEqual(r.status_code, 201)
2032 3dabe5d2 Stavros Sachtouris
        vers2 = r.headers['x-object-version']
2033 3dabe5d2 Stavros Sachtouris
2034 3dabe5d2 Stavros Sachtouris
        """Check source_version, public and format """
2035 3dabe5d2 Stavros Sachtouris
        r = self.client.object_copy(obj + '2',
2036 3dabe5d2 Stavros Sachtouris
            destination='/%s/%s3' % (self.client.container, obj),
2037 3dabe5d2 Stavros Sachtouris
            source_version=vers2,
2038 3dabe5d2 Stavros Sachtouris
            format='xml',
2039 3dabe5d2 Stavros Sachtouris
            public=True)
2040 3dabe5d2 Stavros Sachtouris
        self.assertEqual(r.status_code, 201)
2041 3dabe5d2 Stavros Sachtouris
        self.assertTrue(r.headers['content-type'].index('xml') > 0)
2042 3dabe5d2 Stavros Sachtouris
2043 3dabe5d2 Stavros Sachtouris
        r = self.client.get_object_info(obj + '3')
2044 3dabe5d2 Stavros Sachtouris
        self.assertTrue('x-object-public' in r)
2045 3dabe5d2 Stavros Sachtouris
2046 3dabe5d2 Stavros Sachtouris
    def test_object_move(self):
2047 3dabe5d2 Stavros Sachtouris
        """Test object_MOVE"""
2048 3dabe5d2 Stavros Sachtouris
        self.client.container = self.c2
2049 3dabe5d2 Stavros Sachtouris
        obj = 'test2'
2050 3dabe5d2 Stavros Sachtouris
2051 3dabe5d2 Stavros Sachtouris
        data = '{"key1": "val1", "key2": "val2"}'
2052 3dabe5d2 Stavros Sachtouris
        r = self.client.object_put(obj + 'orig',
2053 3dabe5d2 Stavros Sachtouris
            content_type='application/octet-stream',
2054 3dabe5d2 Stavros Sachtouris
            data=data,
2055 3dabe5d2 Stavros Sachtouris
            metadata={'mkey1': 'mval1', 'mkey2': 'mval2'},
2056 3dabe5d2 Stavros Sachtouris
            permissions={'read': ['accX:groupA', 'u1', 'u2'],
2057 3dabe5d2 Stavros Sachtouris
                'write': ['u2', 'u3']})
2058 3dabe5d2 Stavros Sachtouris
2059 3dabe5d2 Stavros Sachtouris
        r = self.client.object_move(obj + 'orig',
2060 3dabe5d2 Stavros Sachtouris
            destination='/%s/%s' % (self.client.container, obj),
2061 3dabe5d2 Stavros Sachtouris
            ignore_content_type=False,
2062 3dabe5d2 Stavros Sachtouris
            content_type='application/json',
2063 3dabe5d2 Stavros Sachtouris
            metadata={'mkey2': 'mval2a', 'mkey3': 'mval3'},
2064 3dabe5d2 Stavros Sachtouris
            permissions={'write': ['u5', 'accX:groupB']})
2065 3dabe5d2 Stavros Sachtouris
        self.assertEqual(r.status_code, 201)
2066 3dabe5d2 Stavros Sachtouris
2067 3dabe5d2 Stavros Sachtouris
        """Check Metadata"""
2068 3dabe5d2 Stavros Sachtouris
        r = self.client.get_object_meta(obj)
2069 3dabe5d2 Stavros Sachtouris
        self.assertEqual(r['x-object-meta-mkey1'], 'mval1')
2070 3dabe5d2 Stavros Sachtouris
        self.assertEqual(r['x-object-meta-mkey2'], 'mval2a')
2071 3dabe5d2 Stavros Sachtouris
        self.assertEqual(r['x-object-meta-mkey3'], 'mval3')
2072 3dabe5d2 Stavros Sachtouris
2073 7d91734c Stavros Sachtouris
        """Check permissions"""
2074 3dabe5d2 Stavros Sachtouris
        r = self.client.get_object_sharing(obj)
2075 3dabe5d2 Stavros Sachtouris
        self.assertFalse('read' in r)
2076 3dabe5d2 Stavros Sachtouris
        self.assertTrue('u5' in r['write'])
2077 3dabe5d2 Stavros Sachtouris
        self.assertTrue('accx:groupb' in r['write'])
2078 3dabe5d2 Stavros Sachtouris
2079 3dabe5d2 Stavros Sachtouris
        """Check destination account"""
2080 3dabe5d2 Stavros Sachtouris
        r = self.client.object_move(obj,
2081 3dabe5d2 Stavros Sachtouris
            destination='/%s/%s' % (self.c1, obj),
2082 3dabe5d2 Stavros Sachtouris
            content_encoding='utf8',
2083 3dabe5d2 Stavros Sachtouris
            content_type='application/json',
2084 3dabe5d2 Stavros Sachtouris
            destination_account='nonExistendAddress@NeverLand.com',
2085 3dabe5d2 Stavros Sachtouris
            success=(201, 403))
2086 3dabe5d2 Stavros Sachtouris
        self.assertEqual(r.status_code, 403)
2087 3dabe5d2 Stavros Sachtouris
2088 3dabe5d2 Stavros Sachtouris
        """Check destination being another container and also
2089 3dabe5d2 Stavros Sachtouris
        content_type, content_disposition and content encoding"""
2090 3dabe5d2 Stavros Sachtouris
        r = self.client.object_move(obj,
2091 3dabe5d2 Stavros Sachtouris
            destination='/%s/%s' % (self.c1, obj),
2092 3dabe5d2 Stavros Sachtouris
            content_encoding='utf8',
2093 3dabe5d2 Stavros Sachtouris
            content_type='application/json',
2094 3dabe5d2 Stavros Sachtouris
            content_disposition='attachment; filename="fname.ext"')
2095 3dabe5d2 Stavros Sachtouris
        self.assertEqual(r.status_code, 201)
2096 3dabe5d2 Stavros Sachtouris
        self.assertEqual(r.headers['content-type'],
2097 3dabe5d2 Stavros Sachtouris
            'application/json; charset=UTF-8')
2098 3dabe5d2 Stavros Sachtouris
        self.client.container = self.c1
2099 3dabe5d2 Stavros Sachtouris
        r = self.client.get_object_info(obj)
2100 3dabe5d2 Stavros Sachtouris
        self.assertTrue('content-disposition' in r\
2101 3dabe5d2 Stavros Sachtouris
            and 'fname.ext' in r['content-disposition'])
2102 3dabe5d2 Stavros Sachtouris
        etag = r['etag']
2103 3dabe5d2 Stavros Sachtouris
        ctype = r['content-type']
2104 3dabe5d2 Stavros Sachtouris
        self.assertEqual(ctype, 'application/json')
2105 3dabe5d2 Stavros Sachtouris
2106 3dabe5d2 Stavros Sachtouris
        """Check ignore_content_type and content_type"""
2107 3dabe5d2 Stavros Sachtouris
        r = self.client.object_move(obj,
2108 3dabe5d2 Stavros Sachtouris
            destination='/%s/%s' % (self.c2, obj),
2109 3dabe5d2 Stavros Sachtouris
            ignore_content_type=True,
2110 3dabe5d2 Stavros Sachtouris
            content_type='application/json')
2111 3dabe5d2 Stavros Sachtouris
        self.assertEqual(r.status_code, 201)
2112 3dabe5d2 Stavros Sachtouris
        self.assertNotEqual(r.headers['content-type'], 'application/json')
2113 3dabe5d2 Stavros Sachtouris
2114 3dabe5d2 Stavros Sachtouris
        """Check if_etag_(not_)match"""
2115 3dabe5d2 Stavros Sachtouris
        self.client.container = self.c2
2116 3dabe5d2 Stavros Sachtouris
        r = self.client.object_move(obj,
2117 3dabe5d2 Stavros Sachtouris
            destination='/%s/%s0' % (self.client.container, obj),
2118 3dabe5d2 Stavros Sachtouris
            if_etag_match=etag)
2119 3dabe5d2 Stavros Sachtouris
        self.assertEqual(r.status_code, 201)
2120 3dabe5d2 Stavros Sachtouris
2121 3dabe5d2 Stavros Sachtouris
        r = self.client.object_move(obj + '0',
2122 3dabe5d2 Stavros Sachtouris
            destination='/%s/%s1' % (self.client.container, obj),
2123 3dabe5d2 Stavros Sachtouris
            if_etag_not_match='lalala')
2124 3dabe5d2 Stavros Sachtouris
        self.assertEqual(r.status_code, 201)
2125 3dabe5d2 Stavros Sachtouris
2126 3dabe5d2 Stavros Sachtouris
        """Check public and format """
2127 3dabe5d2 Stavros Sachtouris
        r = self.client.object_move(obj + '1',
2128 3dabe5d2 Stavros Sachtouris
            destination='/%s/%s2' % (self.client.container, obj),
2129 3dabe5d2 Stavros Sachtouris
            format='xml', public=True)
2130 3dabe5d2 Stavros Sachtouris
        self.assertEqual(r.status_code, 201)
2131 3dabe5d2 Stavros Sachtouris
        self.assertTrue(r.headers['content-type'].index('xml') > 0)
2132 3dabe5d2 Stavros Sachtouris
2133 3dabe5d2 Stavros Sachtouris
        r = self.client.get_object_info(obj + '2')
2134 3dabe5d2 Stavros Sachtouris
        self.assertTrue('x-object-public' in r)
2135 3dabe5d2 Stavros Sachtouris
2136 3dabe5d2 Stavros Sachtouris
    def test_object_post(self):
2137 3dabe5d2 Stavros Sachtouris
        """Test object_POST"""
2138 3dabe5d2 Stavros Sachtouris
        self.client.container = self.c2
2139 3dabe5d2 Stavros Sachtouris
        obj = 'test2'
2140 3dabe5d2 Stavros Sachtouris
        """create a filesystem file"""
2141 3dabe5d2 Stavros Sachtouris
        self.fname = obj
2142 3dabe5d2 Stavros Sachtouris
        newf = open(self.fname, 'w')
2143 3dabe5d2 Stavros Sachtouris
        newf.writelines(['ello!\n',
2144 3dabe5d2 Stavros Sachtouris
            'This is a test line\n',
2145 3dabe5d2 Stavros Sachtouris
            'inside a test file\n'])
2146 3dabe5d2 Stavros Sachtouris
        newf.close()
2147 3dabe5d2 Stavros Sachtouris
        """create a file on container"""
2148 3dabe5d2 Stavros Sachtouris
        r = self.client.object_put(obj,
2149 3dabe5d2 Stavros Sachtouris
            content_type='application/octet-stream',
2150 3dabe5d2 Stavros Sachtouris
            data='H',
2151 3dabe5d2 Stavros Sachtouris
            metadata={'mkey1': 'mval1', 'mkey2': 'mval2'},
2152 3dabe5d2 Stavros Sachtouris
            permissions={'read': ['accX:groupA', 'u1', 'u2'],
2153 3dabe5d2 Stavros Sachtouris
                'write': ['u2', 'u3']})
2154 3dabe5d2 Stavros Sachtouris
2155 3dabe5d2 Stavros Sachtouris
        """Append tests update, content_range, content_type, content_length"""
2156 3dabe5d2 Stavros Sachtouris
        newf = open(obj, 'r')
2157 3dabe5d2 Stavros Sachtouris
        self.client.append_object(obj, newf)
2158 3dabe5d2 Stavros Sachtouris
        r = self.client.object_get(obj)
2159 3dabe5d2 Stavros Sachtouris
        self.assertTrue(r.text.startswith('Hello!'))
2160 3dabe5d2 Stavros Sachtouris
2161 3dabe5d2 Stavros Sachtouris
        """Overwrite tests update,
2162 3dabe5d2 Stavros Sachtouris
            content_type, content_length, content_range
2163 3dabe5d2 Stavros Sachtouris
        """
2164 3dabe5d2 Stavros Sachtouris
        newf.seek(0)
2165 3dabe5d2 Stavros Sachtouris
        r = self.client.overwrite_object(obj, 0, 10, newf)
2166 3dabe5d2 Stavros Sachtouris
        r = self.client.object_get(obj)
2167 3dabe5d2 Stavros Sachtouris
        self.assertTrue(r.text.startswith('ello!'))
2168 3dabe5d2 Stavros Sachtouris
        newf.close()
2169 3dabe5d2 Stavros Sachtouris
2170 3dabe5d2 Stavros Sachtouris
        """Truncate tests update,
2171 3dabe5d2 Stavros Sachtouris
            content_range, content_type, object_bytes and source_object"""
2172 3dabe5d2 Stavros Sachtouris
        r = self.client.truncate_object(obj, 5)
2173 3dabe5d2 Stavros Sachtouris
        r = self.client.object_get(obj)
2174 3dabe5d2 Stavros Sachtouris
        self.assertEqual(r.text, 'ello!')
2175 3dabe5d2 Stavros Sachtouris
2176 3dabe5d2 Stavros Sachtouris
        """Check metadata"""
2177 3dabe5d2 Stavros Sachtouris
        self.client.set_object_meta(obj, {'mkey2': 'mval2a', 'mkey3': 'mval3'})
2178 3dabe5d2 Stavros Sachtouris
        r = self.client.get_object_meta(obj)
2179 3dabe5d2 Stavros Sachtouris
        self.assertEqual(r['x-object-meta-mkey1'], 'mval1')
2180 3dabe5d2 Stavros Sachtouris
        self.assertEqual(r['x-object-meta-mkey2'], 'mval2a')
2181 3dabe5d2 Stavros Sachtouris
        self.assertEqual(r['x-object-meta-mkey3'], 'mval3')
2182 3dabe5d2 Stavros Sachtouris
        self.client.del_object_meta('mkey1', obj)
2183 3dabe5d2 Stavros Sachtouris
        r = self.client.get_object_meta(obj)
2184 3dabe5d2 Stavros Sachtouris
        self.assertFalse('x-object-meta-mkey1' in r)
2185 3dabe5d2 Stavros Sachtouris
2186 7d91734c Stavros Sachtouris
        """Check permissions"""
2187 3dabe5d2 Stavros Sachtouris
        self.client.set_object_sharing(obj,
2188 3dabe5d2 Stavros Sachtouris
            read_permition=['u4', 'u5'], write_permition=['u4'])
2189 3dabe5d2 Stavros Sachtouris
        r = self.client.get_object_sharing(obj)
2190 3dabe5d2 Stavros Sachtouris
        self.assertTrue('read' in r)
2191 3dabe5d2 Stavros Sachtouris
        self.assertTrue('u5' in r['read'])
2192 3dabe5d2 Stavros Sachtouris
        self.assertTrue('write' in r)
2193 3dabe5d2 Stavros Sachtouris
        self.assertTrue('u4' in r['write'])
2194 3dabe5d2 Stavros Sachtouris
        self.client.del_object_sharing(obj)
2195 3dabe5d2 Stavros Sachtouris
        r = self.client.get_object_sharing(obj)
2196 3dabe5d2 Stavros Sachtouris
        self.assertTrue(len(r) == 0)
2197 3dabe5d2 Stavros Sachtouris
2198 3dabe5d2 Stavros Sachtouris
        """Check publish"""
2199 3dabe5d2 Stavros Sachtouris
        self.client.publish_object(obj)
2200 3dabe5d2 Stavros Sachtouris
        r = self.client.get_object_info(obj)
2201 3dabe5d2 Stavros Sachtouris
        self.assertTrue('x-object-public' in r)
2202 3dabe5d2 Stavros Sachtouris
        self.client.unpublish_object(obj)
2203 3dabe5d2 Stavros Sachtouris
        r = self.client.get_object_info(obj)
2204 3dabe5d2 Stavros Sachtouris
        self.assertFalse('x-object-public' in r)
2205 3dabe5d2 Stavros Sachtouris
2206 3dabe5d2 Stavros Sachtouris
        """Check if_etag_(not)match"""
2207 3dabe5d2 Stavros Sachtouris
        etag = r['etag']
2208 7d91734c Stavros Sachtouris
        """
2209 7d91734c Stavros Sachtouris
        r = self.client.object_post(obj,
2210 7d91734c Stavros Sachtouris
            update=True,
2211 7d91734c Stavros Sachtouris
            public=True,
2212 7d91734c Stavros Sachtouris
            if_etag_not_match=etag,
2213 7d91734c Stavros Sachtouris
            success=(412, 202, 204))
2214 7d91734c Stavros Sachtouris
        self.assertEqual(r.status_code, 412)
2215 7d91734c Stavros Sachtouris
        """
2216 3dabe5d2 Stavros Sachtouris
2217 3dabe5d2 Stavros Sachtouris
        r = self.client.object_post(obj, update=True, public=True,
2218 3dabe5d2 Stavros Sachtouris
            if_etag_match=etag, content_encoding='application/json')
2219 3dabe5d2 Stavros Sachtouris
2220 3dabe5d2 Stavros Sachtouris
        r = self.client.get_object_info(obj)
2221 3dabe5d2 Stavros Sachtouris
        helloVersion = r['x-object-version']
2222 3dabe5d2 Stavros Sachtouris
        self.assertTrue('x-object-public' in r)
2223 3dabe5d2 Stavros Sachtouris
        self.assertEqual(r['content-encoding'], 'application/json')
2224 3dabe5d2 Stavros Sachtouris
2225 3dabe5d2 Stavros Sachtouris
        """Check source_version and source_account and content_disposition"""
2226 3dabe5d2 Stavros Sachtouris
        r = self.client.object_post(obj,
2227 3dabe5d2 Stavros Sachtouris
            update=True,
2228 3dabe5d2 Stavros Sachtouris
            content_type='application/octet-srteam',
2229 3dabe5d2 Stavros Sachtouris
            content_length=5,
2230 3dabe5d2 Stavros Sachtouris
            content_range='bytes 1-5/*',
2231 3dabe5d2 Stavros Sachtouris
            source_object='/%s/%s' % (self.c2, obj),
2232 3dabe5d2 Stavros Sachtouris
            source_account='thisAccountWillNeverExist@adminland.com',
2233 3dabe5d2 Stavros Sachtouris
            source_version=helloVersion,
2234 3dabe5d2 Stavros Sachtouris
            data='12345',
2235 3dabe5d2 Stavros Sachtouris
            success=(403, 202, 204))
2236 3dabe5d2 Stavros Sachtouris
        self.assertEqual(r.status_code, 403)
2237 3dabe5d2 Stavros Sachtouris
2238 3dabe5d2 Stavros Sachtouris
        r = self.client.object_post(obj,
2239 3dabe5d2 Stavros Sachtouris
            update=True,
2240 3dabe5d2 Stavros Sachtouris
            content_type='application/octet-srteam',
2241 3dabe5d2 Stavros Sachtouris
            content_length=5,
2242 3dabe5d2 Stavros Sachtouris
            content_range='bytes 1-5/*',
2243 3dabe5d2 Stavros Sachtouris
            source_object='/%s/%s' % (self.c2, obj),
2244 3dabe5d2 Stavros Sachtouris
            source_account=self.client.account,
2245 3dabe5d2 Stavros Sachtouris
            source_version=helloVersion,
2246 3dabe5d2 Stavros Sachtouris
            data='12345',
2247 3dabe5d2 Stavros Sachtouris
            content_disposition='attachment; filename="fname.ext"')
2248 3dabe5d2 Stavros Sachtouris
2249 3dabe5d2 Stavros Sachtouris
        r = self.client.object_get(obj)
2250 3dabe5d2 Stavros Sachtouris
        self.assertEqual(r.text, 'eello!')
2251 3dabe5d2 Stavros Sachtouris
        self.assertTrue('content-disposition' in r.headers\
2252 3dabe5d2 Stavros Sachtouris
            and 'fname.ext' in r.headers['content-disposition'])
2253 3dabe5d2 Stavros Sachtouris
2254 3dabe5d2 Stavros Sachtouris
        """Check manifest"""
2255 3dabe5d2 Stavros Sachtouris
        mobj = 'manifest.test'
2256 3dabe5d2 Stavros Sachtouris
        txt = ''
2257 3dabe5d2 Stavros Sachtouris
        for i in range(10):
2258 3dabe5d2 Stavros Sachtouris
            txt += '%s' % i
2259 3dabe5d2 Stavros Sachtouris
            r = self.client.object_put('%s/%s' % (mobj, i),
2260 3dabe5d2 Stavros Sachtouris
            data='%s' % i,
2261 3dabe5d2 Stavros Sachtouris
            content_length=1,
2262 3dabe5d2 Stavros Sachtouris
            success=201,
2263 3dabe5d2 Stavros Sachtouris
            content_encoding='application/octet-stream',
2264 3dabe5d2 Stavros Sachtouris
            content_type='application/octet-stream')
2265 3dabe5d2 Stavros Sachtouris
2266 3dabe5d2 Stavros Sachtouris
        self.client.create_object_by_manifestation(mobj,
2267 3dabe5d2 Stavros Sachtouris
            content_type='application/octet-stream')
2268 3dabe5d2 Stavros Sachtouris
2269 3dabe5d2 Stavros Sachtouris
        r = self.client.object_post(mobj,
2270 3dabe5d2 Stavros Sachtouris
            manifest='%s/%s' % (self.client.container, mobj))
2271 3dabe5d2 Stavros Sachtouris
2272 3dabe5d2 Stavros Sachtouris
        r = self.client.object_get(mobj)
2273 3dabe5d2 Stavros Sachtouris
        self.assertEqual(r.text, txt)
2274 3dabe5d2 Stavros Sachtouris
2275 3dabe5d2 Stavros Sachtouris
        """We need to check transfer_encoding """
2276 3dabe5d2 Stavros Sachtouris
2277 3dabe5d2 Stavros Sachtouris
    def test_object_delete(self):
2278 3dabe5d2 Stavros Sachtouris
        """Test object_DELETE"""
2279 3dabe5d2 Stavros Sachtouris
        self.client.container = self.c2
2280 3dabe5d2 Stavros Sachtouris
        obj = 'test2'
2281 3dabe5d2 Stavros Sachtouris
        """create a file on container"""
2282 3dabe5d2 Stavros Sachtouris
        r = self.client.object_put(obj,
2283 3dabe5d2 Stavros Sachtouris
            content_type='application/octet-stream',
2284 3dabe5d2 Stavros Sachtouris
            data='H',
2285 3dabe5d2 Stavros Sachtouris
            metadata={'mkey1': 'mval1', 'mkey2': 'mval2'},
2286 3dabe5d2 Stavros Sachtouris
            permissions={'read': ['accX:groupA', 'u1', 'u2'],
2287 3dabe5d2 Stavros Sachtouris
                'write': ['u2', 'u3']})
2288 3dabe5d2 Stavros Sachtouris
2289 3dabe5d2 Stavros Sachtouris
        """Check with false until"""
2290 3dabe5d2 Stavros Sachtouris
        r = self.client.object_delete(obj, until=1000000)
2291 3dabe5d2 Stavros Sachtouris
2292 3dabe5d2 Stavros Sachtouris
        r = self.client.object_get(obj, success=(200, 404))
2293 3dabe5d2 Stavros Sachtouris
        self.assertEqual(r.status_code, 200)
2294 3dabe5d2 Stavros Sachtouris
2295 3dabe5d2 Stavros Sachtouris
        """Check normal case"""
2296 3dabe5d2 Stavros Sachtouris
        r = self.client.object_delete(obj)
2297 3dabe5d2 Stavros Sachtouris
        self.assertEqual(r.status_code, 204)
2298 3dabe5d2 Stavros Sachtouris
2299 3dabe5d2 Stavros Sachtouris
        r = self.client.object_get(obj, success=(200, 404))
2300 3dabe5d2 Stavros Sachtouris
        self.assertEqual(r.status_code, 404)
2301 3dabe5d2 Stavros Sachtouris
2302 3dabe5d2 Stavros Sachtouris
    def create_large_file(self, size, name):
2303 3dabe5d2 Stavros Sachtouris
        """Create a large file at fs"""
2304 3dabe5d2 Stavros Sachtouris
        self.fname = name
2305 3dabe5d2 Stavros Sachtouris
        import random
2306 3dabe5d2 Stavros Sachtouris
        random.seed(self.now)
2307 19699c46 Stavros Sachtouris
        rf = open('/dev/urandom', 'r')
2308 3dabe5d2 Stavros Sachtouris
        f = open(self.fname, 'w')
2309 7d91734c Stavros Sachtouris
        sys.stdout.write(
2310 7d91734c Stavros Sachtouris
            ' create random file %s of size %s      ' % (name, size))
2311 3dabe5d2 Stavros Sachtouris
        for hobyte_id in range(size / 8):
2312 19699c46 Stavros Sachtouris
            #sss = 'hobt%s' % random.randint(1000, 9999)
2313 19699c46 Stavros Sachtouris
            f.write(rf.read(8))
2314 3dabe5d2 Stavros Sachtouris
            if 0 == (hobyte_id * 800) % size:
2315 3dabe5d2 Stavros Sachtouris
                f.write('\n')
2316 19699c46 Stavros Sachtouris
                f.flush()
2317 3dabe5d2 Stavros Sachtouris
                prs = (hobyte_id * 800) // size
2318 e0aac6a6 Stavros Sachtouris
                sys.stdout.write('\b\b')
2319 3dabe5d2 Stavros Sachtouris
                if prs > 10:
2320 3dabe5d2 Stavros Sachtouris
                    sys.stdout.write('\b')
2321 e0aac6a6 Stavros Sachtouris
                sys.stdout.write('%s%%' % prs)
2322 3dabe5d2 Stavros Sachtouris
                sys.stdout.flush()
2323 e0aac6a6 Stavros Sachtouris
        print('\b\b\b100%')
2324 19699c46 Stavros Sachtouris
        f.flush()
2325 19699c46 Stavros Sachtouris
        rf.close()
2326 3dabe5d2 Stavros Sachtouris
        f.close()
2327 3dabe5d2 Stavros Sachtouris
        """"""
2328 3dabe5d2 Stavros Sachtouris
2329 b08af3e6 Stavros Sachtouris
2330 1bb4d14d Stavros Sachtouris
def init_parser():
2331 3dabe5d2 Stavros Sachtouris
    parser = ArgumentParser(add_help=False)
2332 3dabe5d2 Stavros Sachtouris
    parser.add_argument('-h', '--help',
2333 3dabe5d2 Stavros Sachtouris
        dest='help',
2334 3dabe5d2 Stavros Sachtouris
        action='store_true',
2335 3dabe5d2 Stavros Sachtouris
        default=False,
2336 3dabe5d2 Stavros Sachtouris
        help="Show this help message and exit")
2337 3dabe5d2 Stavros Sachtouris
    return parser
2338 15618e89 Stavros Sachtouris
2339 3dabe5d2 Stavros Sachtouris
2340 75c3fc42 Stavros Sachtouris
def main(argv):
2341 3dabe5d2 Stavros Sachtouris
2342 75c3fc42 Stavros Sachtouris
    suiteFew = unittest.TestSuite()
2343 3dabe5d2 Stavros Sachtouris
    if len(argv) == 0 or argv[0] == 'pithos':
2344 3dabe5d2 Stavros Sachtouris
        if len(argv) == 1:
2345 3dabe5d2 Stavros Sachtouris
            suiteFew.addTest(unittest.makeSuite(testPithos))
2346 3dabe5d2 Stavros Sachtouris
        else:
2347 3dabe5d2 Stavros Sachtouris
            suiteFew.addTest(testPithos('test_' + argv[1]))
2348 3dabe5d2 Stavros Sachtouris
    if len(argv) == 0 or argv[0] == 'cyclades':
2349 3dabe5d2 Stavros Sachtouris
        if len(argv) == 1:
2350 3dabe5d2 Stavros Sachtouris
            #suiteFew.addTest(unittest.makeSuite(testCyclades))
2351 3dabe5d2 Stavros Sachtouris
            suiteFew.addTest(testCyclades('test_000'))
2352 3dabe5d2 Stavros Sachtouris
        else:
2353 3dabe5d2 Stavros Sachtouris
            suiteFew.addTest(testCyclades('test_' + argv[1]))
2354 3dabe5d2 Stavros Sachtouris
    if len(argv) == 0 or argv[0] == 'image':
2355 3dabe5d2 Stavros Sachtouris
        if len(argv) == 1:
2356 3dabe5d2 Stavros Sachtouris
            suiteFew.addTest(unittest.makeSuite(testImage))
2357 3dabe5d2 Stavros Sachtouris
        else:
2358 3dabe5d2 Stavros Sachtouris
            suiteFew.addTest(testImage('test_' + argv[1]))
2359 3dabe5d2 Stavros Sachtouris
    if len(argv) == 0 or argv[0] == 'astakos':
2360 3dabe5d2 Stavros Sachtouris
        if len(argv) == 1:
2361 3dabe5d2 Stavros Sachtouris
            suiteFew.addTest(unittest.makeSuite(testAstakos))
2362 3dabe5d2 Stavros Sachtouris
        else:
2363 3dabe5d2 Stavros Sachtouris
            suiteFew.addTest(testAstakos('test_' + argv[1]))
2364 3dabe5d2 Stavros Sachtouris
2365 3dabe5d2 Stavros Sachtouris
    unittest.TextTestRunner(verbosity=2).run(suiteFew)
2366 75c3fc42 Stavros Sachtouris
2367 75c3fc42 Stavros Sachtouris
if __name__ == '__main__':
2368 75c3fc42 Stavros Sachtouris
    parser = init_parser()
2369 75c3fc42 Stavros Sachtouris
    args, argv = parser.parse_known_args()
2370 75c3fc42 Stavros Sachtouris
    if len(argv) > 2 or getattr(args, 'help') or len(argv) < 1:
2371 75c3fc42 Stavros Sachtouris
        raise Exception('\tusage: tests.py <group> [command]')
2372 75c3fc42 Stavros Sachtouris
    main(argv)