示例#1
0
    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'])
示例#2
0
    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
示例#3
0
    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
示例#4
0
    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'])
示例#5
0
    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'])
示例#6
0
    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))
示例#7
0
    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))