def test_recreate_fails(self, mock_service_create): service_obj = service.Service(context=self.context) service_obj.host = 'fake-host' service_obj.create() self.assertRaises(exception.ObjectActionError, service_obj.create) mock_service_create(self.context, {'host': 'fake-host', 'version': fake_service['version']})
def _test_destroy(self): self.mox.StubOutWithMock(db, 'service_destroy') db.service_destroy(self.context, 123) self.mox.ReplayAll() service_obj = service.Service() service_obj.id = 123 service_obj.destroy(self.context)
def _test_destroy(self): ctxt = context.get_admin_context() self.mox.StubOutWithMock(db, 'service_destroy') db.service_destroy(ctxt, 123) self.mox.ReplayAll() service_obj = service.Service() service_obj.id = 123 service_obj.destroy(ctxt)
def test_create(self): self.mox.StubOutWithMock(db, 'service_create') db.service_create(self.context, {'host': 'fake-host'}).AndReturn( fake_service) self.mox.ReplayAll() service_obj = service.Service() service_obj.host = 'fake-host' service_obj.create(self.context) self.assertEqual(fake_service['id'], service_obj.id)
def test_save(self): self.mox.StubOutWithMock(db, 'service_update') db.service_update(self.context, 123, {'host': 'fake-host'}).AndReturn( fake_service) self.mox.ReplayAll() service_obj = service.Service() service_obj.id = 123 service_obj.host = 'fake-host' service_obj.save(self.context)
def test_get_by_service(self, cn_get_by_svc_id): cn_get_by_svc_id.return_value = [fake_compute_node] fake_service = service.Service(id=123) computes = compute_node.ComputeNodeList.get_by_service(self.context, fake_service) self.assertEqual(1, len(computes)) self.compare_obj(computes[0], fake_compute_node, subs=self.subs(), comparators=self.comparators())
def test_get_by_service(self, service_get): service_get.return_value = {'compute_node': [fake_compute_node]} fake_service = service.Service(id=123) computes = compute_node.ComputeNodeList.get_by_service( self.context, fake_service) self.assertEqual(1, len(computes)) self.compare_obj(computes[0], fake_compute_node, comparators={'stats': self.json_comparator})
def test_save(self, mock_service_update, mock_notify): service_obj = service.Service(context=self.context) service_obj.id = 123 service_obj.host = 'fake-host' service_obj.save() self.assertEqual(service.SERVICE_VERSION, service_obj.version) mock_service_update.assert_called_once_with( self.context, 123, {'host': 'fake-host', 'version': fake_service['version']})
def test_recreate_fails(self): self.mox.StubOutWithMock(db, 'service_create') db.service_create(self.context, {'host': 'fake-host'}).AndReturn( fake_service) self.mox.ReplayAll() service_obj = service.Service(context=self.context) service_obj.host = 'fake-host' service_obj.create() self.assertRaises(exception.ObjectActionError, service_obj.create)
def service_get_by_compute_host(self, context, host_name): db_service = self.cells_rpcapi.service_get_by_compute_host(context, host_name) # NOTE(danms): Currently cells does not support objects as # return values, so just convert the db-formatted service objects # to new-world objects here if db_service: return service_obj.Service._from_db_object(context, service_obj.Service(), db_service)
def test_service_delete(self): with contextlib.nested( mock.patch.object(service_obj.Service, 'get_by_id', return_value=service_obj.Service()), mock.patch.object(service_obj.Service, 'destroy')) as (get_by_id, destroy): self.host_api.service_delete(self.ctxt, 1) get_by_id.assert_called_once_with(self.ctxt, 1) destroy.assert_called_once_with()
def test_create(self, mock_service_create): service_obj = service.Service(context=self.context) service_obj.host = 'fake-host' service_obj.uuid = uuidsentinel.service2 service_obj.create() self.assertEqual(fake_service['id'], service_obj.id) self.assertEqual(service.SERVICE_VERSION, service_obj.version) mock_service_create.assert_called_once_with( self.context, {'host': 'fake-host', 'uuid': uuidsentinel.service2, 'version': fake_service['version']})
def test_compute_node(self): self.mox.StubOutWithMock(db, 'compute_node_get_by_service_id') db.compute_node_get_by_service_id(self.context, 123).AndReturn( test_compute_node.fake_compute_node) self.mox.ReplayAll() service_obj = service.Service() service_obj._context = self.context service_obj.id = 123 compare(service_obj.compute_node, test_compute_node.fake_compute_node) # Make sure it doesn't re-fetch this service_obj.compute_node
def test_create(self): self.mox.StubOutWithMock(db, 'service_create') db.service_create(self.context, {'host': 'fake-host', 'version': fake_service['version']} ).AndReturn(fake_service) self.mox.ReplayAll() service_obj = service.Service(context=self.context) service_obj.host = 'fake-host' service_obj.create() self.assertEqual(fake_service['id'], service_obj.id) self.assertEqual(service.SERVICE_VERSION, service_obj.version)
def test_from_db_object_without_uuid_generates_one(self, generate_uuid): values = _fake_service(uuid=None, id=None) db_service = db.api.service_create(self.context, values) s = service.Service() service.Service._from_db_object(self.context, s, db_service) self.assertEqual(uuidsentinel.service4, s.uuid) # Check the DB too db_service2 = db.api.service_get(self.context, s.id) self.assertEqual(s.uuid, db_service2['uuid'])
def test_save(self): self.mox.StubOutWithMock(db, 'service_update') db.service_update(self.context, 123, { 'host': 'fake-host', 'version': 1 }).AndReturn(fake_service) self.mox.ReplayAll() service_obj = service.Service(context=self.context) service_obj.id = 123 service_obj.host = 'fake-host' service_obj.save() self.assertEqual(service.SERVICE_VERSION, service_obj.version)
def test_compute_node(self, mock_get): fake_compute_node = objects.ComputeNode._from_db_object( self.context, objects.ComputeNode(), test_compute_node.fake_compute_node) mock_get.return_value = [fake_compute_node] service_obj = service.Service(id=123, host="fake-host", binary="nova-compute") service_obj._context = self.context self.assertEqual(service_obj.compute_node, fake_compute_node) # Make sure it doesn't re-fetch this service_obj.compute_node mock_get.assert_called_once_with(self.context, 'fake-host')
def test_compute_node(self): self.mox.StubOutWithMock(db, 'compute_node_get_by_service_id') db.compute_node_get_by_service_id(self.context, 123).AndReturn( test_compute_node.fake_compute_node) self.mox.ReplayAll() service_obj = service.Service() service_obj._context = self.context service_obj.id = 123 self.compare_obj(service_obj.compute_node, test_compute_node.fake_compute_node, allow_missing=OPTIONAL, comparators={'stats': self.json_comparator}) # Make sure it doesn't re-fetch this service_obj.compute_node
def test_get_by_id_with_host_field_not_in_db(self, mock_cn_get, mock_obj_svc_get): fake_compute_node_with_no_host = fake_compute_node.copy() host = fake_compute_node_with_no_host.pop('host') fake_service = service.Service(id=123) fake_service.host = host mock_cn_get.return_value = fake_compute_node_with_no_host mock_obj_svc_get.return_value = fake_service compute = compute_node.ComputeNode.get_by_id(self.context, 123) self.compare_obj(compute, fake_compute_node, subs=self.subs(), comparators=self.comparators())
def test_obj_make_compatible_with_icehouse_computes(self): service_obj = service.Service(context=self.context, **fake_service) compute_node_obj = compute_node.ComputeNode(host=fake_service['host']) service_obj.compute_node = compute_node_obj service_primitive = service_obj.obj_to_primitive() # Icehouse versions : # Service : 1.2 # ComputeNode : 1.3 service_obj.obj_make_compatible(service_primitive['nova_object.data'], '1.2') self.assertEqual( '1.3', service_primitive['nova_object.data']['compute_node'] ['nova_object.version'])
def test_compute_node(self): fake_compute_node = objects.ComputeNode._from_db_object( self.context, objects.ComputeNode(), test_compute_node.fake_compute_node) self.mox.StubOutWithMock(objects.ComputeNodeList, 'get_all_by_host') objects.ComputeNodeList.get_all_by_host( self.context, 'fake-host').AndReturn([fake_compute_node]) self.mox.ReplayAll() service_obj = service.Service(id=123, host="fake-host", binary="nova-compute") service_obj._context = self.context self.assertEqual(service_obj.compute_node, fake_compute_node) # Make sure it doesn't re-fetch this service_obj.compute_node
def test_get_by_host_and_nodename_not_found(self, cn_get_by_h_and_n, svc_get_by_ch, cn_get_by_svc_id, svc_get_by_id): cn_get_by_h_and_n.side_effect = exception.ComputeHostNotFound( host='fake') fake_service = service.Service(id=123) fake_service.host = 'fake' another_node = fake_old_compute_node.copy() another_node['hypervisor_hostname'] = 'elsewhere' svc_get_by_ch.return_value = fake_service cn_get_by_svc_id.return_value = [another_node] svc_get_by_id.return_value = fake_service self.assertRaises(exception.ComputeHostNotFound, compute_node.ComputeNode.get_by_host_and_nodename, self.context, 'fake', 'vm.danplanet.com')
def test_get_by_host_and_nodename_with_old_compute(self, cn_get_by_h_and_n, svc_get_by_ch, cn_get_by_svc_id, svc_get_by_id): cn_get_by_h_and_n.side_effect = exception.ComputeHostNotFound( host='fake') fake_service = service.Service(id=123) fake_service.host = 'fake' svc_get_by_ch.return_value = fake_service cn_get_by_svc_id.return_value = [fake_old_compute_node] svc_get_by_id.return_value = fake_service compute = compute_node.ComputeNode.get_by_host_and_nodename( self.context, 'fake', 'vm.danplanet.com') # NOTE(sbauza): Result is still converted to new style Compute self.compare_obj(compute, fake_compute_node, subs=self.subs(), comparators=self.comparators())
def service_update(self, context, host_name, binary, params_to_update): """Used to enable/disable a service. For compute services, setting to disabled stops new builds arriving on that host. :param host_name: the name of the host machine that the service is running :param binary: The name of the executable that the service runs as :param params_to_update: eg. {'disabled': True} """ db_service = self.cells_rpcapi.service_update( context, host_name, binary, params_to_update) # NOTE(danms): Currently cells does not support objects as # return values, so just convert the db-formatted service objects # to new-world objects here if db_service: return service_obj.Service._from_db_object(context, service_obj.Service(), db_service)
def test_get_all_by_host_with_old_compute(self, cn_get_all_by_host, svc_get_by_ch, cn_get_by_svc_id, svc_get_by_id): cn_get_all_by_host.side_effect = exception.ComputeHostNotFound( host='fake') fake_service = service.Service(id=123) fake_service.host = 'fake' svc_get_by_ch.return_value = fake_service cn_get_by_svc_id.return_value = [fake_old_compute_node] svc_get_by_id.return_value = fake_service computes = compute_node.ComputeNodeList.get_all_by_host( self.context, 'fake') self.assertEqual(1, len(computes)) # NOTE(sbauza): Result is still converted to new style Compute self.compare_obj(computes[0], fake_compute_node, subs=self.subs(), comparators=self.comparators())
def test_load_when_orphaned(self): service_obj = service.Service() service_obj.id = 123 self.assertRaises(exception.OrphanedObjectError, getattr, service_obj, 'compute_node')
def test_set_id_failure(self, db_mock): service_obj = service.Service() service_obj.create(self.context) self.assertRaises(exception.ReadOnlyFieldError, setattr, service_obj, 'id', 124)
def test_set_id_failure(self, db_mock): service_obj = service.Service(context=self.context, binary='nova-compute') service_obj.create() self.assertRaises(ovo_exc.ReadOnlyFieldError, setattr, service_obj, 'id', 124)
def _test_destroy(self, mock_service_destroy): service_obj = service.Service(context=self.context) service_obj.id = 123 service_obj.destroy() mock_service_destroy.assert_called_once_with(self.context, 123)
def test_obj_make_compatible_from_manifest_strips_uuid(self): s = service.Service() primitive = {'uuid': uuidsentinel.service} s.obj_make_compatible_from_manifest(primitive, '1.20', mock.Mock()) self.assertNotIn('uuid', primitive)