def test_addConnectionFor_fires_connected_event(self): service = RegionService(sentinel.ipcWorker) uuid = factory.make_UUID() c1 = DummyConnection() mock_fire = self.patch(service.events.connected, "fire") service._addConnectionFor(uuid, c1) self.assertThat(mock_fire, MockCalledOnceWith(uuid))
def test_addConnectionFor_adds_connection(self): service = RegionService(sentinel.ipcWorker) uuid = factory.make_UUID() c1 = DummyConnection() c2 = DummyConnection() service._addConnectionFor(uuid, c1) service._addConnectionFor(uuid, c2) self.assertEqual({uuid: {c1, c2}}, service.connections)
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_addConnectionFor_notifies_waiters(self): service = RegionService(sentinel.ipcWorker) uuid = factory.make_UUID() c1 = DummyConnection() c2 = DummyConnection() waiter1 = Mock() waiter2 = Mock() service.waiters[uuid].add(waiter1) service.waiters[uuid].add(waiter2) service._addConnectionFor(uuid, c1) service._addConnectionFor(uuid, c2) self.assertEqual({uuid: {c1, c2}}, service.connections) # Both mock waiters are called twice. A real waiter would only be # called once because it immediately unregisters itself once called. self.assertThat(waiter1.callback, MockCallsMatch(call(c1), call(c2))) self.assertThat(waiter2.callback, MockCallsMatch(call(c1), call(c2)))