Revision d08962f0

b/kamaki/clients/compute/rest_api.py
376 376
        :returns: request response
377 377
        """
378 378
        path = path4url('images', image_id, 'metadata', key)
379
        return self.put(path, success=success, **kwargs)
379
        return self.delete(path, success=success, **kwargs)
380 380

  
381 381
    def flavors_get(
382 382
            self,
......
420 420
        return self.get(path, success=success, **kwargs)
421 421

  
422 422
    def floating_ip_pools_get(self, tenant_id, success=200, **kwargs):
423
        path = path4url(tenant_id, 'os-floating-ip-pools')
423
        path = path4url('os-floating-ip-pools')
424 424
        return self.get(path, success=success, **kwargs)
425 425

  
426 426
    def floating_ips_get(self, tenant_id, ip='', success=200, **kwargs):
427
        path = path4url(tenant_id, 'os-floating-ips', ip or '')
427
        path = path4url('os-floating-ips', ip or '')
428 428
        return self.get(path, success=success, **kwargs)
429 429

  
430 430
    def floating_ips_post(
431 431
            self, tenant_id, json_data, ip='', success=201, **kwargs):
432
        path = path4url(tenant_id, 'os-floating-ips', ip or '')
432
        path = path4url('os-floating-ips', ip or '')
433 433
        if json_data is not None:
434 434
            json_data = json.dumps(json_data)
435 435
            self.set_header('Content-Type', 'application/json')
......
437 437
        return self.post(path, data=json_data, success=success, **kwargs)
438 438

  
439 439
    def floating_ips_delete(self, tenant_id, ip='', success=204, **kwargs):
440
        path = path4url(tenant_id, 'os-floating-ips', ip or '')
440
        path = path4url('os-floating-ips', ip or '')
441 441
        return self.delete(path, success=success, **kwargs)
b/kamaki/clients/compute/test.py
127 127
    @patch('%s.set_param' % rest_pkg)
128 128
    @patch('%s.get' % rest_pkg, return_value=FR())
129 129
    def _test_get(self, service, params, get, set_param):
130
        method = getattr(self.client, '%s_get' % service)
130 131
        param_args = [({}, {k: k}, {k: v[1]}) for k, v in params.items()]
131
        num_of_its = ''
132
        num_of_its, i = '', 0
132 133
        stdout.write('# of iterations: ')
133
        i = 0
134 134
        for i, args in enumerate(product(
135 135
                ('', '%s_id' % service),
136 136
                (None, False, True),
......
143 143
            for param in args[4:]:
144 144
                srv_kwargs.update(param)
145 145
            srv_kwargs.update(kwargs)
146
            method = getattr(self.client, '%s_get' % service)
147 146
            method(*args[:2], **srv_kwargs)
148 147
            srv_str = '/detail' if detail else (
149 148
                '/%s' % srv_id) if srv_id else ''
......
164 163
                stdout.flush()
165 164
        print ('\b' * len(num_of_its)) + ('%s' % i)
166 165

  
166
    @patch('%s.set_param' % rest_pkg)
167
    @patch('%s.get' % rest_pkg, return_value=FR())
168
    def _test_srv_cmd_get(self, srv, cmd, params, get, set_param):
169
        method = getattr(self.client, '%s_%s_get' % (srv, cmd))
170
        param_args = [({}, {k: k}, {k: v[1]}) for k, v in params.items()]
171
        num_of_its, i = '', 0
172
        stdout.write('# of iterations: ')
173
        for i, args in enumerate(product(
174
                ('some_server_id', 'other_server_id'),
175
                (None, 'xtra_id'),
176
                ((304, 200), (1000)),
177
                ({}, {'k': 'v'}),
178
                *param_args)):
179
            srv_id, xtra_id, success, kwargs = args[:4]
180
            kwargs['success'] = success
181
            srv_kwargs = dict()
182
            for param in args[4:]:
183
                srv_kwargs.update(param)
184
            srv_kwargs.update(kwargs)
185
            method(*args[:2], **srv_kwargs)
186
            srv_str = '/%s/%s/%s' % (srv, srv_id, cmd)
187
            srv_str += ('/%s' % xtra_id) if xtra_id else ''
188
            self.assertEqual(get.mock_calls[-1], call(srv_str, **kwargs))
189
            param_calls = []
190
            for k, v in params.items():
191
                real_v = srv_kwargs.get(k, v[1])
192
                param_calls.append(call(v[0], real_v, iff=real_v))
193
            actual = set_param.mock_calls[- len(param_calls):]
194
            self.assertEqual(sorted(actual), sorted(param_calls))
195

  
196
            if not i % 1000:
197
                stdout.write('\b' * len(num_of_its))
198
                num_of_its = '%s' % i
199
                stdout.write(num_of_its)
200
                stdout.flush()
201
        print ('\b' * len(num_of_its)) + ('%s' % i)
202

  
167 203
    def test_servers_get(self):
168 204
        params = dict(
169 205
            changes_since=('changes-since', None),
......
176 212
            host=('host', None))
177 213
        self._test_get('servers', params)
178 214

  
215
    def test_servers_metadata_get(self):
216
        self._test_srv_cmd_get('servers', 'metadata', {})
217

  
218
    def test_servers_ips_get(self):
219
        params = dict(changes_since=('changes-since', None))
220
        self._test_srv_cmd_get('servers', 'ips', params)
221

  
179 222
    def test_flavors_get(self):
180 223
        params = dict(
181 224
            changes_since=('changes-since', None),
......
196 239
            type=('type', None))
197 240
        self._test_get('images', param)
198 241

  
242
    def test_images_metadata_get(self):
243
        self._test_srv_cmd_get('images', 'metadata', {})
244

  
199 245
    @patch('%s.delete' % rest_pkg, return_value=FR())
200
    def _test_delete(self, service, delete):
246
    def _test_delete(self, srv, cmd, delete):
247
        method = getattr(
248
            self.client, '%s_%sdelete' % (srv, ('%s_' % cmd) if cmd else ''))
249
        cmd_params = ('some_cmd_value', 'some_other_value') if cmd else ()
201 250
        for args in product(
202
                ('', '%s_id' % service),
203
                ('', 'cmd'),
251
                ('%s_id' % srv, 'some_value'),
204 252
                (204, 208),
205
                ({}, {'k': 'v'})):
206
            (srv_id, command, success, kwargs) = args
207
            method = getattr(self.client, '%s_delete' % service)
208
            method(*args[:3], **kwargs)
209
            vm_str = '/%s' % srv_id if srv_id else ''
210
            cmd_str = '/%s' % command if command else ''
211
            self.assertEqual(delete.mock_calls[-1], call(
212
                '/%s%s%s' % (service, vm_str, cmd_str),
213
                success=success,
214
                **kwargs))
253
                ({}, {'k': 'v'}),
254
                *cmd_params):
255
            (srv_id, success, kwargs) = args[:3]
256
            kwargs['success'] = success
257
            cmd_value = args[-1] if cmd else ''
258
            method_args = (srv_id, cmd_value) if cmd else (srv_id)
259
            method(*method_args, **kwargs)
260
            srv_str = '/%s/%s' % (srv, srv_id)
261
            cmd_str = ('/%s/%s' % (cmd, cmd_value)) if cmd else ''
262
            self.assertEqual(
263
                delete.mock_calls[-1],
264
                call('%s%s' % (srv_str, cmd_str), **kwargs))
215 265

  
216 266
    def test_servers_delete(self):
217
        self._test_delete('servers')
267
        self._test_delete('servers', None)
268

  
269
    def test_servers_metadata_delete(self):
270
        self._test_delete('servers', 'metadata')
218 271

  
219 272
    def test_images_delete(self):
220
        self._test_delete('images')
273
        self._test_delete('images', None)
274

  
275
    def test_images_metadata_delete(self):
276
        self._test_delete('images', 'metadata')
221 277

  
222 278
    @patch('%s.set_header' % rest_pkg)
223 279
    @patch('%s.post' % rest_pkg, return_value=FR())
b/kamaki/clients/cyclades/rest_api.py
145 145

  
146 146
        path = path4url('networks', network_id, command)
147 147
        return self.put(path, data=data, success=success, **kwargs)
148

  
149
    def floating_ip_pools_get(self, success=200, **kwargs):
150
        path = path4url('os-floating-ip-pools')
151
        return self.get(path, success=success, **kwargs)
152

  
153
    def floating_ips_get(self, fip_id='', success=200, **kwargs):
154
        path = path4url('os-floating-ips', fip_id)
155
        return self.get(path, success=success, **kwargs)
156

  
157
    def floating_ips_post(self, json_data, fip_id='', success=201, **kwargs):
158
        path = path4url('os-floating-ips', fip_id)
159
        if json_data is not None:
160
            json_data = json.dumps(json_data)
161
            self.set_header('Content-Type', 'application/json')
162
            self.set_header('Content-Length', len(json_data))
163
        return self.post(path, data=json_data, success=success, **kwargs)
164

  
165
    def floating_ips_delete(self, fip_id, success=200, **kwargs):
166
        path = path4url('os-floating-ips', fip_id)
167
        return self.delete(path, success=success, **kwargs)

Also available in: Unified diff