예제 #1
0
    def test_downed_hub_during_chunk_pub_to_client_terminates_correctly(self):
        global PORT
        hub = junction.Hub(("127.0.0.1", PORT), [])
        PORT += 2
        l = []
        ev = backend.Event()

        @hub.accept_publish('service', 0, 0, 'method')
        def handle(x):
            for item in x:
                l.append(item)
            ev.set()

        hub.start()

        client = junction.Client(("127.0.0.1", PORT - 2))
        PORT += 2
        client.connect()
        client.wait_connected()
        client = [client]

        def gen():
            yield 1
            yield 2
            self.kill_client(client)

        client[0].publish('service', 0, 'method', (gen(), ))
        ev.wait(TIMEOUT)

        self.assertEqual(l[:2], [1, 2])
        self.assertEqual(len(l), 3)
        self.assertIsInstance(l[-1], junction.errors.LostConnection)
예제 #2
0
    def test_downed_hub_during_chunked_publish_terminates_correctly(self):
        port = _free_port()
        hub = junction.Hub(("127.0.0.1", port), [])
        l = []
        ev = backend.Event()

        @hub.accept_publish('service', 0, 0, 'method')
        def handle(x):
            for item in x:
                l.append(item)
            ev.set()

        hub.start()

        port2 = _free_port()
        hub2 = junction.Hub(("127.0.0.1", port2), [("127.0.0.1", port)])
        hub2.start()
        hub2.wait_connected()
        hub2 = [hub2]

        def gen():
            yield 1
            yield 2
            self.kill_hub(hub2)

        hub2[0].publish('service', 0, 'method', (gen(), ))
        ev.wait(TIMEOUT)

        self.assertEqual(l[:2], [1, 2])
        self.assertEqual(len(l), 3, l)
        self.assertIsInstance(l[-1], junction.errors.LostConnection)
예제 #3
0
    def test_rpc_ruled_out_by_service(self):
        results = []
        ev = backend.Event()

        @self.peer.accept_rpc("service1", 0, 0, "method")
        def handler(item):
            results.append(item)
            ev.set()

        backend.pause_for(TIMEOUT)

        self.assertRaises(junction.errors.Unroutable, self.sender.rpc,
                          "service2", 0, "method", (1, ), {}, TIMEOUT)

        assert ev.wait(TIMEOUT)

        self.assertEqual(results, [])
예제 #4
0
    def test_chunked_publish_success(self):
        results = []
        ev = backend.Event()

        @self.peer.accept_publish("service", 0, 0, "method")
        def handler(items):
            for item in items:
                results.append(item)
            ev.set()

        backend.pause_for(TIMEOUT)

        self.sender.publish("service", 0, "method", ((x for x in xrange(5)), ))

        assert not ev.wait(TIMEOUT)

        self.assertEqual(results, [0, 1, 2, 3, 4])
예제 #5
0
    def test_publish_ruled_out_by_service(self):
        results = []
        ev = backend.Event()

        @self.peer.accept_publish("service1", 0, 0, "method")
        def handler(item):
            results.append(item)
            ev.set()

        backend.pause_for(TIMEOUT)

        try:
            self.sender.publish("service2", 0, "method", (1, ), {})
        except junction.errors.Unroutable:
            # eat this as Clients don't get this raised, only Hubs
            pass

        assert ev.wait(TIMEOUT)

        self.assertEqual(results, [])
예제 #6
0
    def test_publish_success(self):
        results = []
        ev = backend.Event()

        @self.peer.accept_publish("service", 0, 0, "method")
        def handler(item):
            results.append(item)
            if len(results) == 4:
                ev.set()

        backend.pause_for(TIMEOUT)

        self.sender.publish("service", 0, "method", (1, ), {})
        self.sender.publish("service", 0, "method", (2, ), {})
        self.sender.publish("service", 0, "method", (3, ), {})
        self.sender.publish("service", 0, "method", (4, ), {})

        ev.wait(TIMEOUT)

        self.assertEqual(results, [1, 2, 3, 4])
예제 #7
0
    def test_publish_ruled_out_by_routing_id(self):
        results = []
        ev = backend.Event()

        # only sign up for even routing ids
        @self.peer.accept_publish("service", 1, 0, "method")
        def handler(item):
            results.append(item)
            ev.set()

        for i in xrange(4):
            backend.pause()

        try:
            self.sender.publish("service", 1, "method", (1, ), {})
        except junction.errors.Unroutable:
            # eat this as Clients don't get this raised, only Hubs
            pass

        assert ev.wait(TIMEOUT)

        self.assertEqual(results, [])