279
280
amulet.raise_status(amulet.FAIL,
280
281
msg='cinder endpoint: {}'.format(ret))
283
def validate_broker_req(self, unit, relation, expected):
284
rel_data = json.loads(unit.relation(
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))
296
return "Mismatch, op: {} key: {}".format(index, key)
299
def get_broker_request(self):
300
client_unit = self.cinder_ceph_sentry
301
broker_req = json.loads(client_unit.relation(
303
'ceph:client')['broker_req'])
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
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']
288
req = ('{"api-version": 1, "ops": [{"replicas": 3, "name": '
289
'"cinder-ceph", "op": "create-pool"}]}')
325
"ops": [{"replicas": 3, "name": "cinder-ceph", "op": "create-pool"}]
292
328
'private-address': u.valid_ip,
329
'broker_req': u.not_null,
295
331
ret = u.validate_relation_data(unit, relation, expected)
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)
337
msg = u.relation_error('cinder-ceph ceph', ret)
338
amulet.raise_status(amulet.FAIL, msg=msg)
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']
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,
312
ret = u.validate_relation_data(unit, relation, expected)
352
ret = u.validate_relation_data(ceph_unit, relation, expected)
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)
317
361
def test_202_cinderceph_cinder_backend_relation(self):
318
362
u.log.debug('Checking cinder-ceph:storage-backend to '