예제 #1
0
 def test_get_all_types_search(self):
     share_type = self.fake_type_w_extra
     search_filter = {"extra_specs": {"gold": "True"}, "is_public": True}
     self.mock_object(db, "share_type_get_all", mock.Mock(return_value=share_type))
     returned_type = share_types.get_all_types(self.context, search_opts=search_filter)
     db.share_type_get_all.assert_called_once_with(mock.ANY, 0, filters={"is_public": True})
     self.assertItemsEqual(share_type, returned_type)
     search_filter = {"extra_specs": {"gold": "False"}}
     returned_type = share_types.get_all_types(self.context, search_opts=search_filter)
     self.assertEqual({}, returned_type)
예제 #2
0
 def test_get_all_types_search(self):
     share_type = self.fake_type_w_extra
     search_filter = {"extra_specs": {"gold": "True"}, 'is_public': True}
     self.mock_object(db, 'share_type_get_all',
                      mock.Mock(return_value=share_type))
     returned_type = share_types.get_all_types(self.context,
                                               search_opts=search_filter)
     db.share_type_get_all.assert_called_once_with(
         mock.ANY, 0, filters={'is_public': True})
     self.assertItemsEqual(share_type, returned_type)
     search_filter = {"extra_specs": {"gold": "False"}}
     returned_type = share_types.get_all_types(self.context,
                                               search_opts=search_filter)
     self.assertEqual({}, returned_type)
예제 #3
0
    def _get_share_types(self, req):
        """Helper function that returns a list of type dicts."""
        filters = {}
        context = req.environ['manila.context']
        if context.is_admin:
            # Only admin has query access to all share types
            filters['is_public'] = self._parse_is_public(
                req.params.get('is_public'))
        else:
            filters['is_public'] = True

        extra_specs = req.params.get('extra_specs', {})
        extra_specs_disallowed = (req.api_version_request <
                                  api_version.APIVersionRequest("2.43"))

        if extra_specs and extra_specs_disallowed:
            msg = _("Filter by 'extra_specs' is not supported by this "
                    "microversion. Use 2.43 or greater microversion to "
                    "be able to use filter search by 'extra_specs.")
            raise webob.exc.HTTPBadRequest(explanation=msg)
        elif extra_specs:
            extra_specs = ast.literal_eval(extra_specs)
            filters['extra_specs'] = share_types.sanitize_extra_specs(
                extra_specs)

        limited_types = share_types.get_all_types(
            context, search_opts=filters).values()
        return list(limited_types)
예제 #4
0
    def _get_share_types(self, req):
        """Helper function that returns a list of type dicts."""
        filters = {}
        context = req.environ['manila.context']
        if context.is_admin:
            # Only admin has query access to all share types
            filters['is_public'] = self._parse_is_public(
                req.params.get('is_public'))
        else:
            filters['is_public'] = True

        if (req.api_version_request < api_version.APIVersionRequest("2.43")):
            extra_specs = req.params.get('extra_specs')
            if extra_specs:
                msg = _("Filter by 'extra_specs' is not supported by this "
                        "microversion. Use 2.43 or greater microversion to "
                        "be able to use filter search by 'extra_specs.")
                raise webob.exc.HTTPBadRequest(explanation=msg)
        else:
            extra_specs = req.params.get('extra_specs')
            if extra_specs:
                filters['extra_specs'] = ast.literal_eval(extra_specs)

        limited_types = share_types.get_all_types(
            context, search_opts=filters).values()
        return list(limited_types)
예제 #5
0
 def _get_share_types(self, req):
     """Helper function that returns a list of type dicts."""
     filters = {}
     context = req.environ['manila.context']
     if context.is_admin:
         # Only admin has query access to all share types
         filters['is_public'] = self._parse_is_public(
             req.params.get('is_public'))
     else:
         filters['is_public'] = True
     limited_types = share_types.get_all_types(
         context, search_opts=filters).values()
     return list(limited_types)
예제 #6
0
 def _get_share_types(self, req):
     """Helper function that returns a list of type dicts."""
     filters = {}
     context = req.environ['manila.context']
     if context.is_admin:
         # Only admin has query access to all share types
         filters['is_public'] = self._parse_is_public(
             req.params.get('is_public'))
     else:
         filters['is_public'] = True
     limited_types = share_types.get_all_types(
         context, search_opts=filters).values()
     return list(limited_types)
예제 #7
0
    def test_get_all_types_search(self):
        share_type = self.fake_type_w_extra
        search_filter = {'extra_specs': {'gold': 'True'}, 'is_public': True}
        self.mock_object(db, 'share_type_get_all',
                         mock.Mock(return_value=share_type))
        returned_type = share_types.get_all_types(self.context,
                                                  search_opts=search_filter)
        db.share_type_get_all.assert_called_once_with(
            mock.ANY, 0, filters={'is_public': True})

        self.assertItemsEqual(share_type, returned_type)
        search_filter = {'extra_specs': {'gold': 'False'}}
        expected_types = {}
        returned_types = share_types.get_all_types(self.context,
                                                   search_opts=search_filter)
        self.assertEqual(expected_types, returned_types)

        share_type = self.fake_r_type_extra
        search_filter = {'extra_specs': {'gold': 'True'}}
        returned_type = share_types.get_all_types(self.context,
                                                  search_opts=search_filter)
        self.assertItemsEqual(share_type, returned_type)
예제 #8
0
    def test_get_all_types_search_by_availability_zone(self, search_azs):
        all_share_types = {
            'gold': {
                'extra_specs': {
                    'somepoolcap': 'somevalue',
                    'availability_zones': 'nova,supernova,hypernova',
                },
                'required_extra_specs': {
                    'driver_handles_share_servers': True,
                },
                'id': '1e8f93a8-9669-4467-88a0-7b8229a9a609',
                'name': u'gold-share-type',
                'is_public': True,
            },
            'silver': {
                'extra_specs': {
                    'somepoolcap': 'somevalue',
                    'availability_zones': 'nova,supernova',
                },
                'required_extra_specs': {
                    'driver_handles_share_servers': False,
                },
                'id': '39a7b9a8-8c76-4b49-aed3-60b718d54325',
                'name': u'silver-share-type',
                'is_public': True,
            },
            'bronze': {
                'extra_specs': {
                    'somepoolcap': 'somevalue',
                    'availability_zones': 'milkyway,andromeda',
                },
                'required_extra_specs': {
                    'driver_handles_share_servers': True,
                },
                'id': '5a55a54d-6688-49b4-9344-bfc2d9634f70',
                'name': u'bronze-share-type',
                'is_public': True,
            },
            'default': {
                'extra_specs': {
                    'somepoolcap': 'somevalue',
                },
                'required_extra_specs': {
                    'driver_handles_share_servers': True,
                },
                'id': '5a55a54d-6688-49b4-9344-bfc2d9634f70',
                'name': u'bronze-share-type',
                'is_public': True,
            }
        }
        self.mock_object(
            db, 'share_type_get_all', mock.Mock(return_value=all_share_types))
        self.mock_object(share_types, 'get_valid_required_extra_specs')

        search_opts = {
            'extra_specs': {
                'somepoolcap': 'somevalue',
                'availability_zones': search_azs
            },
            'is_public': True,
        }
        returned_types = share_types.get_all_types(
            self.context, search_opts=search_opts)

        db.share_type_get_all.assert_called_once_with(
            mock.ANY, 0, filters={'is_public': True})

        expected_return_types = (['gold', 'silver', 'default']
                                 if len(search_azs.split(',')) < 3
                                 else ['gold', 'default'])
        self.assertEqual(sorted(expected_return_types),
                         sorted(returned_types))
예제 #9
0
 def test_get_all_types(self, share_type):
     self.mock_object(db,
                      'share_type_get_all',
                      mock.Mock(return_value=copy.deepcopy(share_type)))
     returned_type = share_types.get_all_types(self.context)
     self.assertEqual(sorted(share_type), sorted(returned_type))
예제 #10
0
 def test_get_all_types(self, share_type):
     self.mock_object(db,
                      'share_type_get_all',
                      mock.Mock(return_value=copy.deepcopy(share_type)))
     returned_type = share_types.get_all_types(self.context)
     self.assertItemsEqual(share_type, returned_type)