def test_getConnectionFor_cancels_waiter_when_it_times_out(self): service = RegionService(sentinel.ipcWorker) uuid = factory.make_UUID() d = service._getConnectionFor(uuid, 1) # A waiter is added for the connection we're interested in. self.assertEqual({uuid: {d}}, service.waiters) d = assert_fails_with(d, CancelledError) def check(_): # The waiter has been unregistered. self.assertEqual({uuid: set()}, service.waiters) return d.addCallback(check)
def test_getConnectionFor_returns_existing_connection(self): service = RegionService(sentinel.ipcWorker) uuid = factory.make_UUID() conn = DummyConnection() service._addConnectionFor(uuid, conn) d = service._getConnectionFor(uuid, 1) # No waiter is added because a connection is available. self.assertEqual({uuid: set()}, service.waiters) def check(conn_returned): self.assertEquals(conn, conn_returned) return d.addCallback(check)
def test_getConnectionFor_waits_for_connection(self): service = RegionService(sentinel.ipcWorker) uuid = factory.make_UUID() conn = DummyConnection() # Add the connection later (we're in the reactor thread right # now so this won't happen until after we return). reactor.callLater(0, service._addConnectionFor, uuid, conn) d = service._getConnectionFor(uuid, 1) # A waiter is added for the connection we're interested in. self.assertEqual({uuid: {d}}, service.waiters) def check(conn_returned): self.assertEqual(conn, conn_returned) # The waiter has been unregistered. self.assertEqual({uuid: set()}, service.waiters) return d.addCallback(check)
def test_getConnectionFor_with_concurrent_waiters(self): service = RegionService(sentinel.ipcWorker) uuid = factory.make_UUID() conn = DummyConnection() # Add the connection later (we're in the reactor thread right # now so this won't happen until after we return). reactor.callLater(0, service._addConnectionFor, uuid, conn) d1 = service._getConnectionFor(uuid, 1) d2 = service._getConnectionFor(uuid, 1) # A waiter is added for each call to _getConnectionFor(). self.assertEqual({uuid: {d1, d2}}, service.waiters) d = DeferredList((d1, d2)) def check(results): self.assertEqual([(True, conn), (True, conn)], results) # The waiters have both been unregistered. self.assertEqual({uuid: set()}, service.waiters) return d.addCallback(check)