def test_show_group(self, mock_vol_get_all_by_group, mock_vol_type_get_all_by_group): volume_objs = [ objects.Volume(context=self.ctxt, id=i) for i in [fake.VOLUME_ID] ] volumes = objects.VolumeList(context=self.ctxt, objects=volume_objs) mock_vol_get_all_by_group.return_value = volumes vol_type_objs = [ objects.VolumeType(context=self.ctxt, id=i) for i in [fake.VOLUME_TYPE_ID] ] vol_types = objects.VolumeTypeList(context=self.ctxt, objects=vol_type_objs) mock_vol_type_get_all_by_group.return_value = vol_types req = fakes.HTTPRequest.blank('/v3/%s/groups/%s' % (fake.PROJECT_ID, self.group1.id), version=GROUP_MICRO_VERSION) res_dict = self.controller.show(req, self.group1.id) self.assertEqual(1, len(res_dict)) self.assertEqual('az1', res_dict['group']['availability_zone']) self.assertEqual('this is a test group', res_dict['group']['description']) self.assertEqual('test_group', res_dict['group']['name']) self.assertEqual('creating', res_dict['group']['status']) self.assertEqual([fake.VOLUME_TYPE_ID], res_dict['group']['volume_types'])
def test_list_groups_detail_json(self, mock_vol_type_get_all_by_group): volume_type_ids = [fake.VOLUME_TYPE_ID, fake.VOLUME_TYPE2_ID] vol_type_objs = [objects.VolumeType(context=self.ctxt, id=i) for i in volume_type_ids] vol_types = objects.VolumeTypeList(context=self.ctxt, objects=vol_type_objs) mock_vol_type_get_all_by_group.return_value = vol_types # TODO(geguileo): One `volume_type_ids` gets sorted out make proper # changes here # self.group1.volume_type_ids = volume_type_ids # self.group1.save() # self.group2.volume_type_ids = volume_type_ids # self.group2.save() # self.group3.volume_type_ids = volume_type_ids # self.group3.save() req = fakes.HTTPRequest.blank('/v3/%s/groups/detail' % fake.PROJECT_ID, version=GROUP_MICRO_VERSION) res_dict = self.controller.detail(req) self.assertEqual(1, len(res_dict)) index = 0 for group in [self.group3, self.group2, self.group1]: self.assertEqual(group.id, res_dict['groups'][index]['id']) self.assertEqual([fake.VOLUME_TYPE_ID, fake.VOLUME_TYPE2_ID], res_dict['groups'][index]['volume_types']) self.assertEqual('test_group', res_dict['groups'][index]['name']) self.assertTrue({'availability_zone', 'description', 'status'}.issubset( set(res_dict['groups'][index].keys()))) index += 1
def _from_db_object(context, group, db_group, expected_attrs=None): if expected_attrs is None: expected_attrs = [] for name, field in group.fields.items(): if name in Group.OPTIONAL_FIELDS: continue value = db_group.get(name) setattr(group, name, value) if 'volumes' in expected_attrs: volumes = base.obj_make_list(context, objects.VolumeList(context), objects.Volume, db_group['volumes']) group.volumes = volumes if 'volume_types' in expected_attrs: volume_types = base.obj_make_list(context, objects.VolumeTypeList(context), objects.VolumeType, db_group['volume_types']) group.volume_types = volume_types if 'group_snapshots' in expected_attrs: group_snapshots = base.obj_make_list( context, objects.GroupSnapshotList(context), objects.GroupSnapshot, db_group['group_snapshots']) group.group_snapshots = group_snapshots group._context = context group.obj_reset_changes() return group
def test_destroy_with_vol_types(self, fake_get_vol_types, qos_fake_disassociate, qos_fake_delete): qos_object = objects.QualityOfServiceSpecs._from_db_object( self.context, objects.QualityOfServiceSpecs(), fake_qos) fake_get_vol_types.return_value = objects.VolumeTypeList( objects=[objects.VolumeType(id=fake.VOLUME_TYPE_ID)]) self.assertRaises(exception.QoSSpecsInUse, qos_object.destroy) qos_object.destroy(force=True) qos_fake_delete.assert_called_once_with(mock.ANY, fake_qos['id']) qos_fake_disassociate.assert_called_once_with(self.context, fake_qos['id'])
def test_list_groups_detail_json(self, mock_vol_type_get_all_by_group): volume_type_ids = [fake.VOLUME_TYPE_ID, fake.VOLUME_TYPE2_ID] vol_type_objs = [ objects.VolumeType(context=self.ctxt, id=i) for i in volume_type_ids ] vol_types = objects.VolumeTypeList(context=self.ctxt, objects=vol_type_objs) mock_vol_type_get_all_by_group.return_value = vol_types self.group1.volume_type_ids = volume_type_ids self.group1.save() self.group2.volume_type_ids = volume_type_ids self.group2.save() self.group3.volume_type_ids = volume_type_ids self.group3.save() req = fakes.HTTPRequest.blank('/v3/%s/groups/detail' % fake.PROJECT_ID, version=GROUP_MICRO_VERSION) res_dict = self.controller.detail(req) self.assertEqual(1, len(res_dict)) self.assertEqual('az1', res_dict['groups'][0]['availability_zone']) self.assertEqual('this is a test group', res_dict['groups'][0]['description']) self.assertEqual('test_group', res_dict['groups'][0]['name']) self.assertEqual(self.group3.id, res_dict['groups'][0]['id']) self.assertEqual('creating', res_dict['groups'][0]['status']) self.assertEqual([fake.VOLUME_TYPE_ID, fake.VOLUME_TYPE2_ID], res_dict['groups'][0]['volume_types']) self.assertEqual('az1', res_dict['groups'][1]['availability_zone']) self.assertEqual('this is a test group', res_dict['groups'][1]['description']) self.assertEqual('test_group', res_dict['groups'][1]['name']) self.assertEqual(self.group2.id, res_dict['groups'][1]['id']) self.assertEqual('creating', res_dict['groups'][1]['status']) self.assertEqual([fake.VOLUME_TYPE_ID, fake.VOLUME_TYPE2_ID], res_dict['groups'][1]['volume_types']) self.assertEqual('az1', res_dict['groups'][2]['availability_zone']) self.assertEqual('this is a test group', res_dict['groups'][2]['description']) self.assertEqual('test_group', res_dict['groups'][2]['name']) self.assertEqual(self.group1.id, res_dict['groups'][2]['id']) self.assertEqual('creating', res_dict['groups'][2]['status']) self.assertEqual([fake.VOLUME_TYPE_ID, fake.VOLUME_TYPE2_ID], res_dict['groups'][2]['volume_types'])
def test_show_group_with_list_volume(self, mock_vol_get_all_by_group, mock_vol_type_get_all_by_group): volume_objs = [ objects.Volume(context=self.ctxt, id=i) for i in [fake.VOLUME_ID] ] volumes = objects.VolumeList(context=self.ctxt, objects=volume_objs) mock_vol_get_all_by_group.return_value = volumes vol_type_objs = [ objects.VolumeType(context=self.ctxt, id=i) for i in [fake.VOLUME_TYPE_ID] ] vol_types = objects.VolumeTypeList(context=self.ctxt, objects=vol_type_objs) mock_vol_type_get_all_by_group.return_value = vol_types # If the microversion >= 3.25 and "list_volume=True", "volumes" should # be contained in the response body. req = fakes.HTTPRequest.blank('/v3/%s/groups/%s?list_volume=True' % (fake.PROJECT_ID, self.group1.id), version='3.25') res_dict = self.controller.show(req, self.group1.id) self.assertEqual(1, len(res_dict)) self.assertEqual([fake.VOLUME_ID], res_dict['group']['volumes']) # If the microversion >= 3.25 but "list_volume" is missing, "volumes" # should not be contained in the response body. req = fakes.HTTPRequest.blank('/v3/%s/groups/%s' % (fake.PROJECT_ID, self.group1.id), version='3.25') res_dict = self.controller.show(req, self.group1.id) self.assertEqual(1, len(res_dict)) self.assertIsNone(res_dict['group'].get('volumes', None)) # If the microversion < 3.25, "volumes" should not be contained in the # response body. req = fakes.HTTPRequest.blank('/v3/%s/groups/%s?list_volume=True' % (fake.PROJECT_ID, self.group1.id), version='3.24') res_dict = self.controller.show(req, self.group1.id) self.assertEqual(1, len(res_dict)) self.assertIsNone(res_dict['group'].get('volumes', None))
def test_list_group_with_list_volume(self, version, has_list_volume, mock_vol_get_all_by_group, mock_vol_type_get_all_by_group): volume_objs = [ objects.Volume(context=self.ctxt, id=i) for i in [fake.VOLUME_ID] ] volumes = objects.VolumeList(context=self.ctxt, objects=volume_objs) mock_vol_get_all_by_group.return_value = volumes vol_type_objs = [ objects.VolumeType(context=self.ctxt, id=i) for i in [fake.VOLUME_TYPE_ID] ] vol_types = objects.VolumeTypeList(context=self.ctxt, objects=vol_type_objs) mock_vol_type_get_all_by_group.return_value = vol_types if has_list_volume: req = fakes.HTTPRequest.blank( '/v3/%s/groups/detail?list_volume=True' % fake.PROJECT_ID, version=version) else: req = fakes.HTTPRequest.blank('/v3/%s/groups/detail' % fake.PROJECT_ID, version=version) res_dict = self.controller.detail(req) # If the microversion >= 3.25 and "list_volume=True", "volumes" should # be contained in the response body. Else,"volumes" should not be # contained in the response body. self.assertEqual(3, len(res_dict['groups'])) if (version, has_list_volume) == ('3.25', True): self.assertEqual([fake.VOLUME_ID], res_dict['groups'][0]['volumes']) else: self.assertIsNone(res_dict['groups'][0].get('volumes', None)) # "volumes" should not be contained in the response body when list # groups without detail. res_dict = self.controller.index(req) self.assertIsNone(res_dict['groups'][0].get('volumes', None))