Ejemplo n.º 1
0
    def test_10_pub_sub_timeout_per_socket(self):
        # Basic send/receive over PUB/SUB sockets
        print("Test a timeout per socket")
        sender = ZmqSender(zmq_pub_endpoint="tcp://*:47001")
        receiver_thread = ZmqReceiverThread(
            zmq_sub_connect_addresses=[("tcp://localhost:47001", 3)],
            recreate_sockets_on_timeout_of_sec=10)
        receiver_thread.start()
        # Slow joiner
        time.sleep(0.1)

        first_socket = receiver_thread.receiver.sub_sockets[0].zmq_socket
        sender.send("test")
        # Take 2 seconds to see if it works in case of within the 3 seconds window.
        time.sleep(2)

        self.assertEqual(receiver_thread.last_received_message(), 'test')

        # Now send another but with 2 seconds delay, which should be ok, followed by 4 heartbeats.
        # Socket should not be refreshed.
        sender.send("test2")
        time.sleep(2)
        sender.send_heartbeat()
        time.sleep(2)
        sender.send_heartbeat()
        time.sleep(2)
        sender.send_heartbeat()
        time.sleep(2)
        sender.send_heartbeat()

        self.assertEqual(receiver_thread.last_received_message(), 'test2')
        self.assertEqual(receiver_thread.receiver.sub_sockets[0].zmq_socket,
                         first_socket)

        # Now send another but with 4 seconds delay, which should restart the sockets, but message should arrive
        sender.send("test3")
        time.sleep(4)

        self.assertEqual(receiver_thread.last_received_message(), 'test3')
        second_socket = receiver_thread.receiver.sub_sockets[0].zmq_socket
        self.assertNotEqual(second_socket, first_socket)

        # Now send another but with 2 seconds delay, which should be ok
        sender.send("test4")
        time.sleep(2)

        self.assertEqual(receiver_thread.last_received_message(), 'test4')
        self.assertEqual(receiver_thread.receiver.sub_sockets[0].zmq_socket,
                         second_socket)

        receiver_thread.stop()
        receiver_thread.join()
        sender.destroy()
        # Cleaning up sockets takes some time
        time.sleep(1)
Ejemplo n.º 2
0
    def test_10_pub_sub_timeout_per_socket(self):
        # Basic send/receive over PUB/SUB sockets
        print "Test a timeout per socket"
        sender = ZmqSender(zmq_pub_endpoint="tcp://*:47001")
        receiver_thread = ZmqReceiverThread(zmq_sub_connect_addresses=[("tcp://localhost:47001", 3)], recreate_sockets_on_timeout_of_sec=10)
        receiver_thread.start()
        # Slow joiner
        time.sleep(0.1)

        first_socket = receiver_thread.receiver.sub_sockets[0].zmq_socket
        sender.send("test")
        # Take 2 seconds to see if it works in case of within the 3 seconds window. 
        time.sleep(2)

        self.assertEqual(receiver_thread.last_received_message(), 'test')
        
        # Now send another but with 2 seconds delay, which should be ok, followed by 4 heartbeats.
        # Socket should not be refreshed.
        sender.send("test2")
        time.sleep(2)
        sender.send_heartbeat()
        time.sleep(2)
        sender.send_heartbeat()
        time.sleep(2)
        sender.send_heartbeat()
        time.sleep(2)
        sender.send_heartbeat()
        
        self.assertEqual(receiver_thread.last_received_message(), 'test2')
        self.assertEqual(receiver_thread.receiver.sub_sockets[0].zmq_socket, first_socket)

        # Now send another but with 4 seconds delay, which should restart the sockets, but message should arrive
        sender.send("test3")
        time.sleep(4)
        
        self.assertEqual(receiver_thread.last_received_message(), 'test3')
        second_socket = receiver_thread.receiver.sub_sockets[0].zmq_socket
        self.assertNotEqual(second_socket, first_socket)

        # Now send another but with 2 seconds delay, which should be ok
        sender.send("test4")
        time.sleep(2)
        
        self.assertEqual(receiver_thread.last_received_message(), 'test4')
        self.assertEqual(receiver_thread.receiver.sub_sockets[0].zmq_socket, second_socket)

        receiver_thread.stop()
        receiver_thread.join()
        sender.destroy()
        # Cleaning up sockets takes some time
        time.sleep(1)