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:
		@@ -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:
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -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):
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user