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)
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())