def test_start_up_binds_first_of_real_endpoint_options(self): service = RegionService(sentinel.ipcWorker) # endpoint_1.listen(...) will bind to a random high-numbered port. endpoint_1 = TCP4ServerEndpoint(reactor, 0) # endpoint_2.listen(...), if attempted, will crash because only root # (or a user with explicit capabilities) can do stuff like that. It's # a reasonable assumption that the user running these tests is not # root, but we'll check the port number later too to be sure. endpoint_2 = TCP4ServerEndpoint(reactor, 1) service.endpoints = [[endpoint_1, endpoint_2]] yield service.startService() self.addCleanup(wait_for_reactor(service.stopService)) # A single port has been bound. self.assertThat( service.ports, MatchesAll(HasLength(1), AllMatch(IsInstance(tcp.Port))), ) # The port is not listening on port 1; i.e. a belt-n-braces check that # endpoint_2 was not used. [port] = service.ports self.assertThat(port.getHost().port, Not(Equals(1)))
def test_start_up_binds_first_successful_of_endpoint_options(self): service = RegionService(sentinel.ipcWorker) endpoint_broken = Mock() endpoint_broken.listen.return_value = fail(factory.make_exception()) endpoint_okay = Mock() endpoint_okay.listen.return_value = succeed(sentinel.port) service.endpoints = [[endpoint_broken, endpoint_okay]] yield service.startService() self.assertThat(service.ports, Equals([sentinel.port]))
def test_start_up_binds_first_of_endpoint_options(self): service = RegionService(sentinel.ipcWorker) endpoint_1 = Mock() endpoint_1.listen.return_value = succeed(sentinel.port1) endpoint_2 = Mock() endpoint_2.listen.return_value = succeed(sentinel.port2) service.endpoints = [[endpoint_1, endpoint_2]] yield service.startService() self.assertThat(service.ports, Equals([sentinel.port1]))
def test_start_up_logs_failure_if_all_endpoint_options_fail(self): service = RegionService(sentinel.ipcWorker) error_1 = factory.make_exception_type() error_2 = factory.make_exception_type() endpoint_1 = Mock() endpoint_1.listen.return_value = fail(error_1()) endpoint_2 = Mock() endpoint_2.listen.return_value = fail(error_2()) service.endpoints = [[endpoint_1, endpoint_2]] with TwistedLoggerFixture() as logger: yield service.startService() self.assertDocTestMatches( """\ RegionServer endpoint failed to listen. Traceback (most recent call last): ... %s: """ % fullyQualifiedName(error_2), logger.output)