~openstack-charm-sync/charms/trusty/cinder-ceph/next

« back to all changes in this revision

Viewing changes to tests/basic_deployment.py

  • Committer: Edward Hope-Morley
  • Date: 2015-09-16 01:07:56 UTC
  • mfrom: (40.1.7 trunk)
  • Revision ID: edward.hope-morley@canonical.com-20150916010756-6hqtjf3ogftq55p8
[gnuoy,r=hopem]

Update cinder-ceph broker code to scale-out bug.

Closes-Bug: #1453940

Show diffs side-by-side

added added

removed removed

Lines of Context:
4
4
Basic cinder-ceph functional test.
5
5
"""
6
6
import amulet
 
7
import json
7
8
import time
8
9
 
9
10
from charmhelpers.contrib.openstack.amulet.deployment import (
279
280
            amulet.raise_status(amulet.FAIL,
280
281
                                msg='cinder endpoint: {}'.format(ret))
281
282
 
 
283
    def validate_broker_req(self, unit, relation, expected):
 
284
        rel_data = json.loads(unit.relation(
 
285
            relation[0],
 
286
            relation[1])['broker_req'])
 
287
        if rel_data['api-version'] != expected['api-version']:
 
288
            return "Broker request api mismatch"
 
289
        for index in range(0, len(rel_data['ops'])):
 
290
            actual_op = rel_data['ops'][index]
 
291
            expected_op = expected['ops'][index]
 
292
            for key in ['op', 'name', 'replicas']:
 
293
                if actual_op[key] == expected_op[key]:
 
294
                    u.log.debug("OK op {} key {}".format(index, key))
 
295
                else:
 
296
                    return "Mismatch, op: {} key: {}".format(index, key)
 
297
        return None
 
298
 
 
299
    def get_broker_request(self):
 
300
        client_unit = self.cinder_ceph_sentry
 
301
        broker_req = json.loads(client_unit.relation(
 
302
            'ceph',
 
303
            'ceph:client')['broker_req'])
 
304
        return broker_req
 
305
 
 
306
    def get_broker_response(self):
 
307
        broker_request = self.get_broker_request()
 
308
        response_key = "broker-rsp-cinder-ceph-0"
 
309
        ceph_sentrys = [self.ceph0_sentry, self.ceph1_sentry, self.ceph2_sentry]
 
310
        for sentry in ceph_sentrys:
 
311
            relation_data = sentry.relation('client', 'cinder-ceph:ceph')
 
312
            if relation_data.get(response_key):
 
313
                broker_response = json.loads(relation_data[response_key])
 
314
                if broker_request['request-id'] == broker_response['request-id']:
 
315
                    return broker_response
 
316
 
282
317
    def test_200_cinderceph_ceph_ceph_relation(self):
283
318
        u.log.debug('Checking cinder-ceph:ceph to ceph:client '
284
319
                    'relation data...')
285
320
        unit = self.cinder_ceph_sentry
286
321
        relation = ['ceph', 'ceph:client']
287
322
 
288
 
        req = ('{"api-version": 1, "ops": [{"replicas": 3, "name": '
289
 
               '"cinder-ceph", "op": "create-pool"}]}')
290
 
 
 
323
        req = {
 
324
           "api-version": 1,
 
325
           "ops": [{"replicas": 3, "name": "cinder-ceph", "op": "create-pool"}]
 
326
        }
291
327
        expected = {
292
328
            'private-address': u.valid_ip,
293
 
            'broker_req': req
 
329
            'broker_req': u.not_null,
294
330
        }
295
331
        ret = u.validate_relation_data(unit, relation, expected)
296
332
        if ret:
297
333
            msg = u.relation_error('cinder-ceph ceph', ret)
298
334
            amulet.raise_status(amulet.FAIL, msg=msg)
 
335
        ret = self.validate_broker_req(unit, relation, req)
 
336
        if ret:
 
337
            msg = u.relation_error('cinder-ceph ceph', ret)
 
338
            amulet.raise_status(amulet.FAIL, msg=msg)
299
339
 
300
340
    def test_201_ceph_cinderceph_ceph_relation(self):
301
341
        u.log.debug('Checking ceph:client to cinder-ceph:ceph '
302
342
                    'relation data...')
303
 
        unit = self.ceph0_sentry
 
343
        response_key = "broker-rsp-cinder-ceph-0"
 
344
        ceph_unit = self.ceph0_sentry
304
345
        relation = ['client', 'cinder-ceph:ceph']
305
346
        expected = {
306
347
            'key': u.not_null,
307
348
            'private-address': u.valid_ip,
308
 
            'broker_rsp': '{"exit-code": 0}',
309
349
            'ceph-public-address': u.valid_ip,
310
 
            'auth': 'none'
 
350
            'auth': 'none',
311
351
        }
312
 
        ret = u.validate_relation_data(unit, relation, expected)
 
352
        ret = u.validate_relation_data(ceph_unit, relation, expected)
313
353
        if ret:
314
354
            msg = u.relation_error('cinder cinder-ceph storage-backend', ret)
315
355
            amulet.raise_status(amulet.FAIL, msg=msg)
 
356
        broker_response = self.get_broker_response()
 
357
        if not broker_response or broker_response['exit-code'] != 0:
 
358
            msg='Broker request invalid or failed: {}'.format(broker_response)
 
359
            amulet.raise_status(amulet.FAIL, msg=msg)
316
360
 
317
361
    def test_202_cinderceph_cinder_backend_relation(self):
318
362
        u.log.debug('Checking cinder-ceph:storage-backend to '