def setUp(self): """ Create a L{Store} with an L{AMPAvatar} installed on it. """ self.clock = Clock() self.store = Store() self.factory = StubBoxReceiverFactory(store=self.store, protocol=u"bar") self.store.powerUp(self.factory, IBoxReceiverFactory) self.router = Router() self.sender = CollectingSender() self.connector = _RouteConnector(self.clock, self.store, self.router) self.router.startReceivingBoxes(self.sender) self.router.bindRoute(self.connector, None).connectTo(None)
def test_connectRoute(self): """ L{connectRoute} takes an L{AMP}, a L{Router}, an L{IBoxReceiver} and a protocol name and issues a L{Connect} command for that protocol and for a newly created route associated with the given receiver over the L{AMP}. """ commands = [] results = [] class FakeAMP: def callRemote(self, cmd, **kw): commands.append((cmd, kw)) results.append(Deferred()) return results[-1] amp = FakeAMP() sender = CollectingSender() router = Router() router.startReceivingBoxes(sender) receiver = SomeReceiver() protocol = u"proto name" d = connectRoute(amp, router, receiver, protocol) self.assertEqual(commands, [(Connect, { 'origin': u'0', 'protocol': u'proto name' })]) results[0].callback({'route': u'remote route'}) def cbConnected(receiverAgain): self.assertIdentical(receiver, receiverAgain) self.assertTrue(receiver.started) receiver.sender.sendBox({'foo': 'bar'}) self.assertEqual(sender.boxes, [{ _ROUTE: 'remote route', 'foo': 'bar' }]) router.ampBoxReceived({_ROUTE: '0', 'baz': 'quux'}) self.assertEqual(receiver.boxes, [{'baz': 'quux'}]) d.addCallback(cbConnected) return d