Create compute.api.BaseAPI for compute APIs to use

Fixes bug 960226 where compute.api.HostAPI called non-existent methods

Regression was introduced here:
https://review.openstack.org/#change,5252

Added tests for HostAPI

Change-Id: Id17927bc608ff638ea9b0b5509f0f0bb14503f85
This commit is contained in:
Chris Behrens
2012-04-09 19:23:03 +00:00
committed by Vishvananda Ishaya
parent 3b14c74691
commit d0b32e693e
2 changed files with 67 additions and 17 deletions

View File

@@ -106,17 +106,10 @@ def check_policy(context, action, target):
nova.policy.enforce(context, _action, target)
class API(base.Base):
"""API for interacting with the compute manager."""
def __init__(self, image_service=None, network_api=None, volume_api=None,
**kwargs):
self.image_service = (image_service or
nova.image.get_default_image_service())
self.network_api = network_api or network.API()
self.volume_api = volume_api or volume.API()
super(API, self).__init__(**kwargs)
class BaseAPI(base.Base):
"""Base API class."""
def __init__(self, **kwargs):
super(BaseAPI, self).__init__(**kwargs)
def _cast_or_call_compute_message(self, rpc_method, compute_method,
context, instance=None, host=None, params=None):
@@ -157,10 +150,24 @@ class API(base.Base):
"""Generic handler for RPC calls to compute."""
return self._cast_or_call_compute_message(rpc.call, *args, **kwargs)
def _cast_scheduler_message(self, context, args):
@staticmethod
def _cast_scheduler_message(context, args):
"""Generic handler for RPC calls to the scheduler."""
rpc.cast(context, FLAGS.scheduler_topic, args)
class API(BaseAPI):
"""API for interacting with the compute manager."""
def __init__(self, image_service=None, network_api=None, volume_api=None,
**kwargs):
self.image_service = (image_service or
nova.image.get_default_image_service())
self.network_api = network_api or network.API()
self.volume_api = volume_api or volume.API()
super(API, self).__init__(**kwargs)
def _check_injected_file_quota(self, context, injected_files):
"""Enforce quota limits on injected files.
@@ -1677,11 +1684,8 @@ class API(base.Base):
return self.db.instance_fault_get_by_instance_uuids(context, uuids)
class HostAPI(base.Base):
class HostAPI(BaseAPI):
"""Sub-set of the Compute Manager API for managing host operations."""
def __init__(self, **kwargs):
super(HostAPI, self).__init__(**kwargs)
def set_host_enabled(self, context, host, enabled):
"""Sets the specified host's ability to accept new instances."""
# NOTE(comstud): No instance_uuid argument to this compute manager

View File

@@ -24,7 +24,6 @@ import sys
import time
import mox
import webob.exc
import nova
import nova.common.policy
@@ -3643,3 +3642,50 @@ class ComputePolicyTestCase(BaseTestCase):
self.assertRaises(exception.PolicyNotAuthorized,
self.compute_api.get_instance_faults,
self.context, instances)
class ComputeHostAPITestCase(BaseTestCase):
def setUp(self):
super(ComputeHostAPITestCase, self).setUp()
self.host_api = compute_api.HostAPI()
def _rpc_call_stub(self, call_info):
def fake_rpc_call(context, topic, msg):
call_info['context'] = context
call_info['topic'] = topic
call_info['msg'] = msg
self.stubs.Set(rpc, 'call', fake_rpc_call)
def test_set_host_enabled(self):
ctxt = context.RequestContext('fake', 'fake')
call_info = {}
self._rpc_call_stub(call_info)
self.host_api.set_host_enabled(ctxt, 'fake_host', 'fake_enabled')
self.assertEqual(call_info['context'], ctxt)
self.assertEqual(call_info['topic'], 'compute.fake_host')
self.assertEqual(call_info['msg'],
{'method': 'set_host_enabled',
'args': {'enabled': 'fake_enabled'}})
def test_host_power_action(self):
ctxt = context.RequestContext('fake', 'fake')
call_info = {}
self._rpc_call_stub(call_info)
self.host_api.host_power_action(ctxt, 'fake_host', 'fake_action')
self.assertEqual(call_info['context'], ctxt)
self.assertEqual(call_info['topic'], 'compute.fake_host')
self.assertEqual(call_info['msg'],
{'method': 'host_power_action',
'args': {'action': 'fake_action'}})
def test_set_host_maintenance(self):
ctxt = context.RequestContext('fake', 'fake')
call_info = {}
self._rpc_call_stub(call_info)
self.host_api.set_host_maintenance(ctxt, 'fake_host', 'fake_mode')
self.assertEqual(call_info['context'], ctxt)
self.assertEqual(call_info['topic'], 'compute.fake_host')
self.assertEqual(call_info['msg'],
{'method': 'host_maintenance_mode',
'args': {'host': 'fake_host', 'mode': 'fake_mode'}})