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)
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)
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, [])
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])
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, [])
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])
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, [])