Пример #1
0
    def test_message_receive(self):
        """Test %s QueuedListener() message send-receive functionality."""

        listener = QueuedListener(self.Message)
        broadcaster = MessageBroadcaster(self.Message)
        data = self.Message(A=1, B=2)
        self.queued_send_receive(listener, broadcaster, data)
Пример #2
0
Файл: common.py Проект: acfr/mcl
    def test_message_init(self):
        """Test %s MessageBroadcaster() initialisation."""

        # Ensure non-Message() inputs are caught.
        with self.assertRaises(TypeError):
            MessageBroadcaster(None)

        # Ensure errors are propagated.
        with self.assertRaises(Exception):
            MessageBroadcaster(self.BadMessage)

        # Create an instance of MessageBroadcaster() with defaults.
        broadcaster = MessageBroadcaster(self.Message)
        self.assertEqual(broadcaster.topic, None)
        self.assertTrue(broadcaster.is_open)
        broadcaster.close()

        # Create an instance of MessageBroadcaster() with a specific topic.
        broadcaster = MessageBroadcaster(self.Message, topic=TOPIC)
        self.assertEqual(broadcaster.topic, TOPIC)
        self.assertTrue(broadcaster.is_open)
        broadcaster.close()

        # Ensure non-string topics are caught.
        with self.assertRaises(TypeError):
            MessageBroadcaster(self.Message, topic=False)
Пример #3
0
Файл: common.py Проект: acfr/mcl
    def test_message_send_receive(self):
        """Test %s with MessageBroadcaster/Listener() objects."""

        # NOTE: this test listens for multiple topics from many. Rather than
        #       sending raw data (a previous test), Message() objects are
        #       sent. This tests all the functionality of the
        #       MessageBroadcaster() and MessageListener() objects.

        # Send multiple topics, receive SOME topics.
        send_topics = ['topic A', 'topic B', 'topic C', 'topic D', 'topic E']
        listen_topics = ['topic A', 'topic C', 'topic E']

        # Create broadcaster.
        broadcaster = MessageBroadcaster(self.Message)

        # Catch messages with a specific topic.
        topic_buffer = list()
        listener_topic = MessageListener(self.Message, topics=listen_topics)

        # Subscribe callback.
        def callback(data): topic_buffer.append(data)
        self.assertTrue(listener_topic.subscribe(callback))
        self.assertTrue(listener_topic.is_subscribed(callback))
        self.assertEqual(listener_topic.num_subscriptions(), 1)

        # Catch all messages. This ensures the unit-test does not time out
        # waiting for messages that are filtered out by topic.
        message_buffer = list()
        listener_message = MessageListener(self.Message)

        # Ensure network objects are open.
        self.assertTrue(broadcaster.is_open)
        self.assertTrue(listener_topic.is_open)
        self.assertTrue(listener_message.is_open)

        # Publish messages with different topics.
        messages = list()
        for (i, topic) in enumerate(send_topics):
            messages.append(self.Message())
            messages[-1]['text'] = '%s: %1.8f' % (topic, time.time())

            # Perform test.
            message_buffer = self.publish(broadcaster,
                                          listener_message,
                                          messages[-1],
                                          topic=topic,
                                          received_buffer=message_buffer)

        # Close connections.
        broadcaster.close()
        listener_topic.close()
        listener_message.close()
        self.assertFalse(broadcaster.is_open)
        self.assertFalse(listener_topic.is_open)
        self.assertFalse(listener_message.is_open)

        # Ensure all topics were received.
        self.assertEqual(len(topic_buffer), len(listen_topics))
        for i, topic in enumerate(listen_topics):
            self.assertEqual(topic_buffer[i]['payload'],
                             messages[send_topics.index(topic)])
Пример #4
0
Файл: common.py Проект: acfr/mcl
    def test_message_publish(self):
        """Test %s MessageBroadcaster() publish."""

        # Test publish fails if the input is not a Message().
        with self.assertRaises(TypeError):
            MessageBroadcaster(dict)
        with self.assertRaises(TypeError):
            MessageBroadcaster(0)

        # Create an instance of MessageBroadcaster().
        message = self.Message()
        broadcaster = MessageBroadcaster(self.Message)

        # Test publish succeeds with default topic.
        broadcaster.publish(message)

        # Ensure attempts to publish a non-message type raises an exception.
        with self.assertRaises(TypeError):
            broadcaster.publish(False)

        # Test setting topic at publish.
        self.assertEqual(broadcaster.topic, None)
        broadcaster.publish(message, topic='topic')
        with self.assertRaises(TypeError):
            broadcaster(message, topic=5)

        # Ensure attempts to publish on a closed connection raises an
        # exception.
        broadcaster.close()
        with self.assertRaises(IOError):
            broadcaster.publish(message)
Пример #5
0
    def test_open_close(self):
        """Test LogNetwork() open/close."""

        # Create broadcasters.
        broadcaster_A = MessageBroadcaster(UnitTestMessageA)
        broadcaster_B = MessageBroadcaster(UnitTestMessageB)

        # Initialise network dump.
        messages = [UnitTestMessageA, UnitTestMessageB]
        dump = LogNetwork(TMP_PATH, messages, open_init=False)
        self.assertEqual(dump.directory, None)
        self.assertFalse(dump.is_alive)

        # Ensure a log directory has NOT been created (Note a README file is
        # created in the /tmp directory).
        self.assertEqual(len(os.listdir(TMP_PATH)), 1)

        # Start network dump.
        self.assertTrue(dump.open())
        self.assertTrue(dump.is_alive)
        self.assertFalse(dump.open())
        self.assertNotEqual(dump.directory, None)

        # Ensure a log directory as been created and it is empty.
        directory = dump.directory
        self.assertEqual(len(os.listdir(TMP_PATH)), 2)
        self.assertEqual(len(os.listdir(directory)), 0)

        # Broadcast messages for logging.
        broadcaster_A.publish(UnitTestMessageA(data='A'))
        broadcaster_B.publish(UnitTestMessageB(data='B'))

        # Wait for log files to be created.
        begin_time = time.time()
        while len(os.listdir(dump.directory)) < 2:
            time.sleep(0.1)
            if time.time() - begin_time > TIME_OUT:
                break

        # Ensure the log files have been created and are in a logging state.
        directory = dump.directory
        files = os.listdir(directory)
        self.assertEqual(len(files), 2)
        for message in messages:
            self.assertTrue((message.name + '.tmp') in files)

        # Stop network dump.
        self.assertTrue(dump.close())
        self.assertFalse(dump.is_alive)
        self.assertFalse(dump.close())
        self.assertEqual(dump.directory, None)

        # Ensure the log files have been closed.
        files = os.listdir(directory)
        self.assertEqual(len(files), 2)
        for message in messages:
            self.assertTrue((message.name + '.log') in files)

        # Ensure LogNetwork auto-opens by default.
        dump = LogNetwork(TMP_PATH, messages)
        self.assertNotEqual(dump.directory, None)
        self.assertFalse(dump.open())
        self.assertTrue(dump.is_alive)
        self.assertTrue(dump.close())
Пример #6
0
    def test_log_message(self):
        """Test LogConnection() log message data."""

        self.log_file(os.path.join(TMP_PATH, 'unittest'), UnitTestMessageA,
                      MessageBroadcaster(UnitTestMessageA),
                      UnitTestMessageA(data='test'))
Пример #7
0
    def test_open_close(self):
        """Test LogNetwork() open/close."""

        # Create broadcasters.
        broadcaster_A = MessageBroadcaster(UnitTestMessageA)
        broadcaster_B = MessageBroadcaster(UnitTestMessageB)

        # Initialise network dump.
        messages = [UnitTestMessageA, UnitTestMessageB]
        dump = LogNetwork(TMP_PATH, messages, open_init=False)
        self.assertEqual(dump.directory, None)
        self.assertFalse(dump.is_alive)

        # Ensure a log directory has NOT been created (Note a README file is
        # created in the /tmp directory).
        self.assertEqual(len(os.listdir(TMP_PATH)), 1)

        # Start network dump.
        self.assertTrue(dump.open())
        self.assertTrue(dump.is_alive)
        self.assertFalse(dump.open())
        self.assertNotEqual(dump.directory, None)

        # Ensure a log directory as been created and it is empty.
        directory = dump.directory
        self.assertEqual(len(os.listdir(TMP_PATH)), 2)
        self.assertEqual(len(os.listdir(directory)), 0)

        # Broadcast messages for logging.
        broadcaster_A.publish(UnitTestMessageA(data='A'))
        broadcaster_B.publish(UnitTestMessageB(data='B'))

        # Wait for log files to be created.
        begin_time = time.time()
        while len(os.listdir(dump.directory)) < 2:
            time.sleep(0.1)
            if time.time() - begin_time > TIME_OUT:
                break

        # Ensure the log files have been created and are in a logging state.
        directory = dump.directory
        files = os.listdir(directory)
        self.assertEqual(len(files), 2)
        for message in messages:
            self.assertTrue((message.name + '.tmp') in files)

        # Stop network dump.
        self.assertTrue(dump.close())
        self.assertFalse(dump.is_alive)
        self.assertFalse(dump.close())
        self.assertEqual(dump.directory, None)

        # Ensure the log files have been closed.
        files = os.listdir(directory)
        self.assertEqual(len(files), 2)
        for message in messages:
            self.assertTrue((message.name + '.log') in files)

        # Ensure LogNetwork auto-opens by default.
        dump = LogNetwork(TMP_PATH, messages)
        self.assertNotEqual(dump.directory, None)
        self.assertFalse(dump.open())
        self.assertTrue(dump.is_alive)
        self.assertTrue(dump.close())
Пример #8
0
    def test_message_send_receive(self):
        """Test %s with MessageBroadcaster/Listener() objects."""

        # NOTE: this test listens for multiple topics from many. Rather than
        #       sending raw data (a previous test), Message() objects are
        #       sent. This tests all the functionality of the
        #       MessageBroadcaster() and MessageListener() objects.

        # Send multiple topics, receive SOME topics.
        send_topics = ['topic A', 'topic B', 'topic C', 'topic D', 'topic E']
        listen_topics = ['topic A', 'topic C', 'topic E']

        # Create broadcaster.
        broadcaster = MessageBroadcaster(self.Message)

        # Catch messages with a specific topic.
        topic_buffer = list()
        listener_topic = MessageListener(self.Message, topics=listen_topics)

        # Subscribe callback.
        def callback(data):
            topic_buffer.append(data)

        self.assertTrue(listener_topic.subscribe(callback))
        self.assertTrue(listener_topic.is_subscribed(callback))
        self.assertEqual(listener_topic.num_subscriptions(), 1)

        # Catch all messages. This ensures the unit-test does not time out
        # waiting for messages that are filtered out by topic.
        message_buffer = list()
        listener_message = MessageListener(self.Message)

        # Ensure network objects are open.
        self.assertTrue(broadcaster.is_open)
        self.assertTrue(listener_topic.is_open)
        self.assertTrue(listener_message.is_open)

        # Publish messages with different topics.
        messages = list()
        for (i, topic) in enumerate(send_topics):
            messages.append(self.Message())
            messages[-1]['text'] = '%s: %1.8f' % (topic, time.time())

            # Perform test.
            message_buffer = self.publish(broadcaster,
                                          listener_message,
                                          messages[-1],
                                          topic=topic,
                                          received_buffer=message_buffer)

        # Close connections.
        broadcaster.close()
        listener_topic.close()
        listener_message.close()
        self.assertFalse(broadcaster.is_open)
        self.assertFalse(listener_topic.is_open)
        self.assertFalse(listener_message.is_open)

        # Ensure all topics were received.
        self.assertEqual(len(topic_buffer), len(listen_topics))
        for i, topic in enumerate(listen_topics):
            self.assertEqual(topic_buffer[i]['payload'],
                             messages[send_topics.index(topic)])
Пример #9
0
    def test_message_publish(self):
        """Test %s MessageBroadcaster() publish."""

        # Test publish fails if the input is not a Message().
        with self.assertRaises(TypeError):
            MessageBroadcaster(dict)
        with self.assertRaises(TypeError):
            MessageBroadcaster(0)

        # Create an instance of MessageBroadcaster().
        message = self.Message()
        broadcaster = MessageBroadcaster(self.Message)

        # Test publish succeeds with default topic.
        broadcaster.publish(message)

        # Ensure attempts to publish a non-message type raises an exception.
        with self.assertRaises(TypeError):
            broadcaster.publish(False)

        # Test setting topic at publish.
        self.assertEqual(broadcaster.topic, None)
        broadcaster.publish(message, topic='topic')
        with self.assertRaises(TypeError):
            broadcaster(message, topic=5)

        # Ensure attempts to publish on a closed connection raises an
        # exception.
        broadcaster.close()
        with self.assertRaises(IOError):
            broadcaster.publish(message)
Пример #10
0
    def test_message_init(self):
        """Test %s MessageBroadcaster() initialisation."""

        # Ensure non-Message() inputs are caught.
        with self.assertRaises(TypeError):
            MessageBroadcaster(None)

        # Ensure errors are propagated.
        with self.assertRaises(Exception):
            MessageBroadcaster(self.BadMessage)

        # Create an instance of MessageBroadcaster() with defaults.
        broadcaster = MessageBroadcaster(self.Message)
        self.assertEqual(broadcaster.topic, None)
        self.assertTrue(broadcaster.is_open)
        broadcaster.close()

        # Create an instance of MessageBroadcaster() with a specific topic.
        broadcaster = MessageBroadcaster(self.Message, topic=TOPIC)
        self.assertEqual(broadcaster.topic, TOPIC)
        self.assertTrue(broadcaster.is_open)
        broadcaster.close()

        # Ensure non-string topics are caught.
        with self.assertRaises(TypeError):
            MessageBroadcaster(self.Message, topic=False)