Exemple #1
0
 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)
Exemple #2
0
    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