Use instance object instead of db record

make console manager use object of instance instead of db
record in the add_console method also, updated unit test
of related usage from db record to object.

Change-Id: I7ff21e35f584bde2ece6ccda71f1fa93ff2cfff7
This commit is contained in:
jichenjc
2015-10-07 11:41:18 +08:00
parent 05cab2666f
commit 29ec93d99d
2 changed files with 26 additions and 19 deletions

View File

@@ -24,6 +24,7 @@ import nova.conf
from nova import exception from nova import exception
from nova.i18n import _LI from nova.i18n import _LI
from nova import manager from nova import manager
from nova import objects
from nova import utils from nova import utils
@@ -58,20 +59,20 @@ class ConsoleProxyManager(manager.Manager):
self.driver.init_host() self.driver.init_host()
def add_console(self, context, instance_id): def add_console(self, context, instance_id):
instance = self.db.instance_get(context, instance_id) instance = objects.Instance.get_by_id(context, instance_id)
host = instance['host'] host = instance.host
name = instance['name'] name = instance.name
pool = self._get_pool_for_instance_host(context, host) pool = self._get_pool_for_instance_host(context, host)
try: try:
console = self.db.console_get_by_pool_instance(context, console = self.db.console_get_by_pool_instance(context,
pool['id'], pool['id'],
instance['uuid']) instance.uuid)
except exception.NotFound: except exception.NotFound:
LOG.debug('Adding console', instance=instance) LOG.debug('Adding console', instance=instance)
password = utils.generate_password(8) password = utils.generate_password(8)
port = self.driver.get_port(context) port = self.driver.get_port(context)
console_data = {'instance_name': name, console_data = {'instance_name': name,
'instance_uuid': instance['uuid'], 'instance_uuid': instance.uuid,
'password': password, 'password': password,
'pool_id': pool['id']} 'pool_id': pool['id']}
if port: if port:

View File

@@ -27,6 +27,7 @@ from nova import db
from nova import exception from nova import exception
from nova import objects from nova import objects
from nova import test from nova import test
from nova.tests.unit import fake_instance
CONF = nova.conf.CONF CONF = nova.conf.CONF
@@ -62,7 +63,7 @@ class ConsoleTestCase(test.TestCase):
inst['project_id'] = self.project_id inst['project_id'] = self.project_id
inst['instance_type_id'] = 1 inst['instance_type_id'] = 1
inst['ami_launch_index'] = 0 inst['ami_launch_index'] = 0
return db.instance_create(self.context, inst) return fake_instance.fake_instance_obj(self.context, **inst)
@mock.patch.object(compute_rpcapi.ComputeAPI, 'get_console_pool_info') @mock.patch.object(compute_rpcapi.ComputeAPI, 'get_console_pool_info')
def test_get_pool_for_instance_host(self, mock_get): def test_get_pool_for_instance_host(self, mock_get):
@@ -101,40 +102,45 @@ class ConsoleTestCase(test.TestCase):
self.assertEqual(pool['id'], new_pool['id']) self.assertEqual(pool['id'], new_pool['id'])
@mock.patch.object(compute_rpcapi.ComputeAPI, 'get_console_pool_info') @mock.patch.object(compute_rpcapi.ComputeAPI, 'get_console_pool_info')
def test_add_console(self, mock_get): @mock.patch('nova.objects.instance.Instance.get_by_id')
def test_add_console(self, mock_id, mock_get):
mock_get.return_value = self.pool_info mock_get.return_value = self.pool_info
instance = self._create_instance() instance = self._create_instance()
self.console.add_console(self.context, instance['id']) mock_id.return_value = instance
instance = db.instance_get(self.context, instance['id']) self.console.add_console(self.context, instance.id)
pool = db.console_pool_get_by_host_type(self.context, pool = db.console_pool_get_by_host_type(self.context,
instance['host'], self.console.host, instance.host, self.console.host,
self.console.driver.console_type) self.console.driver.console_type)
console_instances = [con['instance_uuid'] for con in pool['consoles']] console_instances = [con['instance_uuid'] for con in pool['consoles']]
self.assertIn(instance['uuid'], console_instances) self.assertIn(instance.uuid, console_instances)
db.instance_destroy(self.context, instance['uuid'])
@mock.patch.object(compute_rpcapi.ComputeAPI, 'get_console_pool_info') @mock.patch.object(compute_rpcapi.ComputeAPI, 'get_console_pool_info')
def test_add_console_does_not_duplicate(self, mock_get): @mock.patch('nova.objects.instance.Instance.get_by_id')
def test_add_console_does_not_duplicate(self, mock_id, mock_get):
mock_get.return_value = self.pool_info mock_get.return_value = self.pool_info
instance = self._create_instance() instance = self._create_instance()
cons1 = self.console.add_console(self.context, instance['id']) mock_id.return_value = instance
cons2 = self.console.add_console(self.context, instance['id']) cons1 = self.console.add_console(self.context, instance.id)
cons2 = self.console.add_console(self.context, instance.id)
self.assertEqual(cons1, cons2) self.assertEqual(cons1, cons2)
db.instance_destroy(self.context, instance['uuid'])
@mock.patch.object(compute_rpcapi.ComputeAPI, 'get_console_pool_info') @mock.patch.object(compute_rpcapi.ComputeAPI, 'get_console_pool_info')
def test_remove_console(self, mock_get): @mock.patch('nova.objects.instance.Instance.get_by_id')
def test_remove_console(self, mock_id, mock_get):
mock_get.return_value = self.pool_info mock_get.return_value = self.pool_info
instance = self._create_instance() instance = self._create_instance()
console_id = self.console.add_console(self.context, instance['id']) mock_id.return_value = instance
console_id = self.console.add_console(self.context, instance.id)
self.console.remove_console(self.context, console_id) self.console.remove_console(self.context, console_id)
self.assertRaises(exception.NotFound, self.assertRaises(exception.NotFound,
db.console_get, db.console_get,
self.context, self.context,
console_id) console_id)
db.instance_destroy(self.context, instance['uuid'])
class ConsoleAPITestCase(test.NoDBTestCase): class ConsoleAPITestCase(test.NoDBTestCase):