nova/nova/tests/unit/api/openstack/compute/contrib/test_admin_actions.py

101 lines
3.9 KiB
Python

# Copyright 2011 OpenStack Foundation
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
from nova.api.openstack.compute import admin_actions as admin_actions_v21
from nova.api.openstack.compute.legacy_v2.contrib import admin_actions \
as admin_actions_v2
from nova import exception
from nova import test
from nova.tests.unit.api.openstack.compute import admin_only_action_common
from nova.tests.unit.api.openstack import fakes
class AdminActionsTestV21(admin_only_action_common.CommonTests):
admin_actions = admin_actions_v21
_api_version = '2.1'
def setUp(self):
super(AdminActionsTestV21, self).setUp()
self.controller = self.admin_actions.AdminActionsController()
self.compute_api = self.controller.compute_api
def _fake_controller(*args, **kwargs):
return self.controller
self.stubs.Set(self.admin_actions, 'AdminActionsController',
_fake_controller)
self.mox.StubOutWithMock(self.compute_api, 'get')
def test_actions(self):
actions = ['_reset_network', '_inject_network_info']
method_translations = {'_reset_network': 'reset_network',
'_inject_network_info': 'inject_network_info'}
self._test_actions(actions, method_translations)
def test_actions_with_non_existed_instance(self):
actions = ['_reset_network', '_inject_network_info']
self._test_actions_with_non_existed_instance(actions)
def test_actions_with_locked_instance(self):
actions = ['_reset_network', '_inject_network_info']
method_translations = {'_reset_network': 'reset_network',
'_inject_network_info': 'inject_network_info'}
self._test_actions_with_locked_instance(actions,
method_translations=method_translations)
class AdminActionsTestV2(AdminActionsTestV21):
admin_actions = admin_actions_v2
_api_version = '2'
class AdminActionsPolicyEnforcementV21(test.NoDBTestCase):
def setUp(self):
super(AdminActionsPolicyEnforcementV21, self).setUp()
self.controller = admin_actions_v21.AdminActionsController()
self.req = fakes.HTTPRequest.blank('')
self.fake_id = 'aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa'
def common_policy_check(self, rule, fun_name, *arg, **kwarg):
self.policy.set_rules(rule)
func = getattr(self.controller, fun_name)
exc = self.assertRaises(
exception.PolicyNotAuthorized, func, *arg, **kwarg)
self.assertEqual(
"Policy doesn't allow %s to be performed." %
rule.popitem()[0], exc.format_message())
def test_reset_network_policy_failed(self):
rule = {"os_compute_api:os-admin-actions:reset_network":
"project:non_fake"}
self.common_policy_check(
rule, "_reset_network", self.req, self.fake_id, body={})
def test_inject_network_info_policy_failed(self):
rule = {"os_compute_api:os-admin-actions:inject_network_info":
"project:non_fake"}
self.common_policy_check(
rule, "_inject_network_info", self.req, self.fake_id, body={})
def test_reset_state_policy_failed(self):
rule = {"os_compute_api:os-admin-actions:reset_state":
"project:non_fake"}
self.common_policy_check(
rule, "_reset_state", self.req,
self.fake_id, body={"os-resetState": {"state": "active"}})