示例#1
0
    def test_enforce_injected_files(self):
        reglimits = {
            local_limit.INJECTED_FILES: 5,
            local_limit.INJECTED_FILES_CONTENT: 10 * 1024,
            local_limit.INJECTED_FILES_PATH: 255
        }
        self.useFixture(limit_fixture.LimitFixture(reglimits, {}))

        local_limit.enforce_api_limit(local_limit.INJECTED_FILES, 5)
        local_limit.enforce_api_limit(local_limit.INJECTED_FILES_CONTENT,
                                      10 * 1024)
        local_limit.enforce_api_limit(local_limit.INJECTED_FILES_PATH, 255)

        e = self.assertRaises(exception.OnsetFileLimitExceeded,
                              local_limit.enforce_api_limit,
                              local_limit.INJECTED_FILES, 6)
        msg = ("Resource %s is over limit" % local_limit.INJECTED_FILES)
        self.assertIn(msg, str(e))
        e = self.assertRaises(exception.OnsetFileContentLimitExceeded,
                              local_limit.enforce_api_limit,
                              local_limit.INJECTED_FILES_CONTENT,
                              10 * 1024 + 1)
        msg = ("Resource %s is over limit" %
               local_limit.INJECTED_FILES_CONTENT)
        self.assertIn(msg, str(e))
        e = self.assertRaises(exception.OnsetFilePathLimitExceeded,
                              local_limit.enforce_api_limit,
                              local_limit.INJECTED_FILES_PATH, 256)
        msg = ("Resource %s is over limit" % local_limit.INJECTED_FILES_PATH)
        self.assertIn(msg, str(e))
示例#2
0
 def test_quota_recheck_disabled_unified_limits(self, mock_enforce):
     self.flags(driver="nova.quota.UnifiedLimitsDriver", group="quota")
     self.flags(recheck_quota=False, group="quota")
     self.useFixture(limit_fixture.LimitFixture({'server_key_pairs': 1},
                                                {}))
     self._check_success()
     self.assertEqual(1, mock_enforce.call_count)
示例#3
0
 def test_enforce_api_limit_no_registered_limit_found(self):
     self.useFixture(limit_fixture.LimitFixture({}, {}))
     e = self.assertRaises(exception.MetadataLimitExceeded,
                           local_limit.enforce_api_limit,
                           local_limit.SERVER_METADATA_ITEMS, 42)
     msg = ("Resource %s is over limit" % local_limit.SERVER_METADATA_ITEMS)
     self.assertIn(msg, str(e))
示例#4
0
    def test_create_only_one_group_when_limit_is_one(self):
        self.useFixture(limit_fixture.LimitFixture({'server_groups': 1}, {}))
        policies = ['anti-affinity']
        sgroup = {'name': 'test', 'policies': policies}
        res_dict = self.controller.create(self.req,
                                          body={'server_group': sgroup})
        self.assertEqual(res_dict['server_group']['name'], 'test')
        self.assertTrue(uuidutils.is_uuid_like(res_dict['server_group']['id']))
        self.assertEqual(res_dict['server_group']['policies'], policies)

        # prove we can't create two, as limited to one
        sgroup2 = {'name': 'test2', 'policies': policies}
        exc = self.assertRaises(webob.exc.HTTPForbidden,
                                self.controller.create,
                                self.req,
                                body={'server_group': sgroup2})
        msg = ("Resource %s is over limit" % local_limit.SERVER_GROUPS)
        self.assertIn(msg, str(exc))

        # delete first one
        self.controller.delete(self.req, res_dict['server_group']['id'])

        # prove we can now create the second one
        res_dict2 = self.controller.create(self.req,
                                           body={'server_group': sgroup2})
        self.assertEqual(res_dict2['server_group']['name'], 'test2')
        self.assertTrue(uuidutils.is_uuid_like(
            res_dict2['server_group']['id']))
        self.assertEqual(res_dict2['server_group']['policies'], policies)
示例#5
0
 def test_enforce_db_limit_no_registered_limit_found(self, mock_count):
     self.useFixture(limit_fixture.LimitFixture({}, {}))
     mock_count.return_value = 5
     e = self.assertRaises(exception.KeypairLimitExceeded,
                           local_limit.enforce_db_limit, self.context,
                           local_limit.KEY_PAIRS, uuids.user_id, 42)
     msg = ("Resource %s is over limit" % local_limit.KEY_PAIRS)
     self.assertIn(msg, str(e))
示例#6
0
 def test_get_legacy_default_limits(self):
     reglimits = copy.deepcopy(self.new)
     reglimits.pop('server_key_pairs')
     self.useFixture(limit_fixture.LimitFixture(reglimits, {}))
     limits = local_limit.get_legacy_default_limits()
     expected = copy.deepcopy(self.legacy)
     expected['key_pairs'] = 0
     self.assertEqual(expected, limits)
示例#7
0
 def test_create_group_fails_with_zero_quota(self):
     self.useFixture(limit_fixture.LimitFixture({'server_groups': 0}, {}))
     sgroup = {'name': 'test', 'policies': ['anti-affinity']}
     exc = self.assertRaises(webob.exc.HTTPForbidden,
                             self.controller.create,
                             self.req,
                             body={'server_group': sgroup})
     msg = ("Resource %s is over limit" % local_limit.SERVER_GROUPS)
     self.assertIn(msg, str(exc))
示例#8
0
 def setUp(self):
     super(UnifiedLimitsControllerTest, self).setUp()
     reglimits = {
         local_limit.SERVER_METADATA_ITEMS: 128,
         local_limit.INJECTED_FILES: 5,
         local_limit.INJECTED_FILES_CONTENT: 10 * 1024,
         local_limit.INJECTED_FILES_PATH: 255,
         local_limit.KEY_PAIRS: 100,
         local_limit.SERVER_GROUPS: 12,
         local_limit.SERVER_GROUP_MEMBERS: 10
     }
     self.useFixture(limit_fixture.LimitFixture(reglimits, {}))
示例#9
0
    def test_enforce_api_limit_metadata(self):
        # default max is 128
        self.useFixture(
            limit_fixture.LimitFixture(
                {local_limit.SERVER_METADATA_ITEMS: 128}, {}))
        local_limit.enforce_api_limit(local_limit.SERVER_METADATA_ITEMS, 128)

        e = self.assertRaises(exception.MetadataLimitExceeded,
                              local_limit.enforce_api_limit,
                              local_limit.SERVER_METADATA_ITEMS, 129)
        msg = ("Resource %s is over limit" % local_limit.SERVER_METADATA_ITEMS)
        self.assertIn(msg, str(e))
示例#10
0
    def test_enforce_db_limit_server_groups(self, mock_count):
        self.useFixture(
            limit_fixture.LimitFixture({local_limit.SERVER_GROUPS: 10}, {}))

        mock_count.return_value = {'project': {'server_groups': 9}}
        local_limit.enforce_db_limit(self.context, local_limit.SERVER_GROUPS,
                                     uuids.project_id, 1)
        mock_count.assert_called_once_with(self.context, uuids.project_id)

        self.assertRaises(exception.ServerGroupLimitExceeded,
                          local_limit.enforce_db_limit, self.context,
                          local_limit.SERVER_GROUPS, uuids.project_id, 2)
示例#11
0
 def setUp(self):
     super(UnifiedLimitsQuotaClassesTest, self).setUp()
     # Set server_groups so all config options get a different value
     # but we also test as much as possible with the default config
     self.flags(driver="nova.quota.UnifiedLimitsDriver", group='quota')
     reglimits = {local_limit.SERVER_METADATA_ITEMS: 128,
                  local_limit.INJECTED_FILES: 5,
                  local_limit.INJECTED_FILES_CONTENT: 10 * 1024,
                  local_limit.INJECTED_FILES_PATH: 255,
                  local_limit.KEY_PAIRS: 100,
                  local_limit.SERVER_GROUPS: 12,
                  local_limit.SERVER_GROUP_MEMBERS: 10}
     self.useFixture(limit_fixture.LimitFixture(reglimits, {}))
示例#12
0
 def test_quota_during_recheck_unified_limits(self, mock_enforce):
     """Simulate a race where this request initially has enough quota to
     progress partially through the create path but then fails the quota
     recheck because a parallel request filled up the quota first.
     """
     self.flags(driver="nova.quota.UnifiedLimitsDriver", group="quota")
     self.useFixture(
         limit_fixture.LimitFixture({'server_key_pairs': 100}, {}))
     # First quota check succeeds, second (recheck) fails.
     mock_enforce.side_effect = [
         None, exception.KeypairLimitExceeded('oslo.limit message')
     ]
     msg = 'oslo.limit message'
     self._test_quota_during_recheck(mock_enforce, msg)
示例#13
0
    def test_enforce_db_limit_server_group_members(self, mock_get):
        self.useFixture(
            limit_fixture.LimitFixture({local_limit.SERVER_GROUP_MEMBERS: 10},
                                       {}))

        mock_get.return_value = objects.InstanceGroup(members=[])
        local_limit.enforce_db_limit(self.context,
                                     local_limit.SERVER_GROUP_MEMBERS,
                                     uuids.server_group, 10)
        mock_get.assert_called_once_with(self.context, uuids.server_group)

        self.assertRaises(exception.GroupMemberLimitExceeded,
                          local_limit.enforce_db_limit, self.context,
                          local_limit.SERVER_GROUP_MEMBERS, uuids.server_group,
                          11)
示例#14
0
    def test_enforce_db_limit_keypairs(self, mock_count):
        self.useFixture(
            limit_fixture.LimitFixture({local_limit.KEY_PAIRS: 100}, {}))

        mock_count.return_value = 99
        local_limit.enforce_db_limit(self.context, local_limit.KEY_PAIRS,
                                     uuids.user_id, 1)
        mock_count.assert_called_once_with(self.context, uuids.user_id)

        self.assertRaises(exception.KeypairLimitExceeded,
                          local_limit.enforce_db_limit, self.context,
                          local_limit.KEY_PAIRS, uuids.user_id, 2)

        mock_count.return_value = 100
        local_limit.enforce_db_limit(self.context, local_limit.KEY_PAIRS,
                                     uuids.user_id, 0)
        mock_count.return_value = 101
        self.assertRaises(exception.KeypairLimitExceeded,
                          local_limit.enforce_db_limit, self.context,
                          local_limit.KEY_PAIRS, uuids.user_id, 0)
示例#15
0
    def setUp(self):
        super(UnifiedLimitsTest, self).setUp()
        # Use different project_ids for non-admin and admin.
        self.api.project_id = 'fake'
        self.admin_api.project_id = 'admin'

        self.flags(driver="nova.quota.UnifiedLimitsDriver", group="quota")
        reglimits = {local_limit.SERVER_METADATA_ITEMS: 128,
                     local_limit.INJECTED_FILES: 5,
                     local_limit.INJECTED_FILES_CONTENT: 10 * 1024,
                     local_limit.INJECTED_FILES_PATH: 255,
                     local_limit.KEY_PAIRS: 100,
                     local_limit.SERVER_GROUPS: 10,
                     local_limit.SERVER_GROUP_MEMBERS: 1,
                     'servers': 4,
                     'class:VCPU': 8,
                     'class:MEMORY_MB': 32768,
                     'class:DISK_GB': 250}
        projlimits = {self.api.project_id: {'servers': 2,
                                            'class:VCPU': 4,
                                            'class:MEMORY_MB': 16384,
                                            'class:DISK_GB': 100}}
        self.useFixture(limit_fixture.LimitFixture(reglimits, projlimits))
        self.ctx = nova_context.get_admin_context()
示例#16
0
 def test_quota_unified_limits(self):
     self.flags(driver="nova.quota.UnifiedLimitsDriver", group="quota")
     self.useFixture(limit_fixture.LimitFixture({'server_key_pairs': 0},
                                                {}))
     msg = ("Resource %s is over limit" % local_limit.KEY_PAIRS)
     self.assertKeypairRaises(exception.KeypairLimitExceeded, msg, 'foo')
示例#17
0
 def setUp(self):
     super(ServerGroupQuotasUnifiedLimitsTestV21, self).setUp()
     self.flags(driver='nova.quota.UnifiedLimitsDriver', group='quota')
     self.req = fakes.HTTPRequest.blank('')
     self.controller = sg_v21.ServerGroupController()
     self.useFixture(limit_fixture.LimitFixture({'server_groups': 10}, {}))
示例#18
0
 def test_get_legacy_project_limits(self):
     reglimits = {'servers': 5, 'class:MEMORY_MB': 7}
     projlimits = {uuids.project_id: {'servers': 1}}
     self.useFixture(limit_fixture.LimitFixture(reglimits, projlimits))
     limits = placement_limits.get_legacy_project_limits(uuids.project_id)
     self.assertEqual({'instances': 1, 'cores': 0, 'ram': 7}, limits)
示例#19
0
 def test_get_legacy_default_limits(self):
     reglimits = {'servers': 1, 'class:VCPU': 2}
     self.useFixture(limit_fixture.LimitFixture(reglimits, {}))
     limits = placement_limits.get_legacy_default_limits()
     self.assertEqual({'cores': 2, 'instances': 1, 'ram': 0}, limits)
示例#20
0
 def test_success_unified_limits(self):
     self.flags(driver="nova.quota.UnifiedLimitsDriver", group="quota")
     self.useFixture(limit_fixture.LimitFixture({'server_key_pairs': 1},
                                                {}))
     self._check_success()