def test_service_check_create_race(self): self.manager_mock = self.mox.CreateMock(FakeManager) self.mox.StubOutWithMock(sys.modules[__name__], 'FakeManager', use_mock_anything=True) self.mox.StubOutWithMock(self.manager_mock, 'init_host') self.mox.StubOutWithMock(self.manager_mock, 'pre_start_hook') self.mox.StubOutWithMock(self.manager_mock, 'post_start_hook') FakeManager(host=self.host).AndReturn(self.manager_mock) # init_host is called before any service record is created self.manager_mock.init_host() db.service_get_by_args(mox.IgnoreArg(), self.host, self.binary).AndRaise(exception.NotFound) ex = exception.ServiceTopicExists(host='foo', topic='bar') db.service_create(mox.IgnoreArg(), mox.IgnoreArg()).AndRaise(ex) class TestException(Exception): pass db.service_get_by_args(mox.IgnoreArg(), self.host, self.binary).AndRaise(TestException) self.mox.ReplayAll() serv = service.Service(self.host, self.binary, self.topic, 'nova.tests.test_service.FakeManager') self.assertRaises(TestException, serv.start)
def service_create(context, values): print("creating a service with following properties: %s" % (values)) service_ref = models.Service() service_ref.update(values) if not CONF.enable_new_services: service_ref.disabled = True try: service_ref.save(context.session) except db_exc.DBDuplicateEntry as e: if 'binary' in e.columns: raise exception.ServiceBinaryExists(host=values.get('host'), binary=values.get('binary')) raise exception.ServiceTopicExists(host=values.get('host'), topic=values.get('topic')) return service_ref
def test_service_check_create_race_topic_exists(self): ex = exception.ServiceTopicExists(host='foo', topic='bar') self._test_service_check_create_race(ex)