Statistics
| Branch: | Tag: | Revision:

root / kamaki / clients / tests.py @ bcebdfef

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

1183 3dabe5d2 Stavros Sachtouris
    @if_not_all
1184 3dabe5d2 Stavros Sachtouris
    def test_create_image_metadata(self):
1185 3dabe5d2 Stavros Sachtouris
        ""Test create_image_metadata""
1186 3dabe5d2 Stavros Sachtouris
        self._test_create_image_metadata()
1187 3dabe5d2 Stavros Sachtouris
    def _test_create_image_metadata(self):
1188 3dabe5d2 Stavros Sachtouris
        r = self.client.create_image_metadata(self.img, 'mykey', 'myval')
1189 3dabe5d2 Stavros Sachtouris
        self.assertEqual(r['mykey'], 'myval')
1190 3dabe5d2 Stavros Sachtouris

1191 3dabe5d2 Stavros Sachtouris
    @if_not_all
1192 3dabe5d2 Stavros Sachtouris
    def test_update_image_metadata(self):
1193 3dabe5d2 Stavros Sachtouris
        ""Test update_image_metadata""
1194 3dabe5d2 Stavros Sachtouris
        self._test_update_image_metadata()
1195 3dabe5d2 Stavros Sachtouris
    def _test_update_image_metadata(self):
1196 3dabe5d2 Stavros Sachtouris
        r = self.client.create_image_metadata(self.img, 'mykey0', 'myval')
1197 3dabe5d2 Stavros Sachtouris
        r = self.client.update_image_metadata(self.img, 'mykey0', 'myval0')
1198 3dabe5d2 Stavros Sachtouris
        self.assertEqual(r['mykey0'], 'myval0')
1199 3dabe5d2 Stavros Sachtouris

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