def test_simple_sessionized_push_pop(self): sender1 = Sender(self.conn, "/test.sessionized2") sender1.start() sender1.send("test", headers={"COOKIE": "xyz"}) sender2 = Sender(self.conn, "/test.sessionized2") sender2.start() sender2.send("diff", headers={"COOKIE": "diff"}) msgs1 = [] sem1 = Semaphore(0) receiver1 = Receiver(self.conn, "/test.sessionized2", cookie="xyz") receiver1.on_message = make_receiver(2, msgs1, sem1, receiver1) receiver1.start() Thread(target=receiver1.run).start() msgs2 = [] sem2 = Semaphore(0) receiver2 = Receiver(self.conn, "/test.sessionized2", cookie="diff") receiver2.on_message = make_receiver(2, msgs2, sem2, receiver2) receiver2.start() Thread(target=receiver2.run).start() assert sem1.acquire(timeout=10) assert sem2.acquire(timeout=10) assert msgs1[0] == "test" assert msgs2[0] == "diff" # Test retrieving items for the second time. sender1.send("test2", headers={"COOKIE": "xyz"}) assert sem1.acquire(timeout=10) assert msgs1[1] == "test2" assert not sem2.acquire(timeout=5)
def test_multiple_push_pop(self): obj = {"foo": "bar"} s = Sender(self.conn, "/a.b.c") r = Receiver(self.conn, "/a.b.c") s.start() for _ in range(10): s.send(obj) expected_message_count = 10 def on_message(msg, headers): assert msg == obj nonlocal expected_message_count if expected_message_count == 1: r.stop() expected_message_count -= 1 r.start() r.on_message = on_message thread = Thread(target=r.run) thread.start() thread.join()
def test_fifo_push_pop(self): msgs1 = [] sem1 = Semaphore(0) receiver1 = Receiver(self.conn, "/test.fifo/simple") receiver1.on_message = make_receiver(2, msgs1, sem1, receiver1) receiver1.start() Thread(target=receiver1.run).start() msgs2 = [] sem2 = Semaphore(0) receiver2 = Receiver(self.conn, "/test.fifo/simple") receiver2.on_message = make_receiver(2, msgs2, sem2, receiver2) receiver2.start() Thread(target=receiver2.run).start() sender1 = Sender(self.conn, "/test.fifo/simple") sender1.start() sender1.send("test") assert sem1.acquire(timeout=10) assert msgs1[-1] == "test" assert not sem2.acquire(timeout=2) sender1.send("test2") assert sem2.acquire(timeout=10) assert msgs2[-1] == "test2" assert not sem1.acquire(timeout=2) sender1.send("test3") assert sem1.acquire(timeout=10) assert msgs1[-1] == "test3" assert not sem2.acquire(timeout=2) sender1.send("test4") assert sem2.acquire(timeout=10) assert msgs2[-1] == "test4" assert not sem1.acquire(timeout=2)
def test_queue_waits_removed_after_client_disconnects(self, queue_name): conn1 = WeaveConnection.local() conn2 = WeaveConnection.local() conn3 = WeaveConnection.local() conn1.connect() conn2.connect() conn3.connect() msgs1 = [] sem1 = Semaphore(0) receiver1 = Receiver(conn1, queue_name, cookie="a") receiver1.on_message = make_receiver(1, msgs1, sem1, receiver1) receiver1.start() Thread(target=receiver1.run).start() msgs2 = [] sem2 = Semaphore(0) receiver2 = Receiver(conn2, queue_name, cookie="b") receiver2.on_message = make_receiver(1, msgs2, sem2, receiver2) receiver2.start() Thread(target=receiver2.run).start() conn1.close() import time time.sleep(1) sender1 = Sender(conn3, queue_name) sender1.start() sender1.send("test", headers={"COOKIE": "b"}) assert sem2.acquire(timeout=5) assert msgs2[-1] == "test" conn2.close() conn3.close()
def test_multicast_with_synonym(self): msgs = [] sem = Semaphore(0) receiver = Receiver(self.conn, "/synonyms/multi") receiver.on_message = make_receiver(1, msgs, sem, receiver) receiver.start() Thread(target=receiver.run).start() sender = Sender(self.conn, "/synonyms/multi") sender.start() sender.send("test") assert sem.acquire(timeout=10) assert msgs[-1] == "test" assert not sem.acquire(timeout=2)
def test_simple_push_pop(self): msgs = [] s = Sender(self.conn, "/a.b.c") r = Receiver(self.conn, "/a.b.c") s.start() r.start() r.on_message = lambda msg, hdrs: msgs.append(msg) or r.stop() s.send({"foo": "bar"}) thread = Thread(target=r.run) thread.start() thread.join() assert msgs == [{"foo": "bar"}]