class TriblerLogParserTest(unittest.TestCase):
"""Test suite for TriblerLogParser class in parsing.py."""
+ log_file = 'tribler.log'
+ no_log_file = 'no.log'
+
def setUp(self):
- pass
+ """Create log file and initiate local counter variables."""
+ f = open(self.log_file, "w")
+ f.close()
+
+ # Initialize message type counters.
+ self.statmsg_count = 0
+ self.pstatmsg_count = 0
+ self.verbmsg_count = 0
+
+ # Initialize internal call counts.
+ self.bogus_line_num_calls = 0
+ self.status_line_num_calls = 0
+ self.peer_status_line_num_calls = 0
+ self.verbose_line_num_calls = 0
+
+ # Remove no log file in case it exists.
+ try:
+ os.remove(self.no_log_file)
+ except OSError, e:
+ pass
def tearDown(self):
- pass
+ """Remove log file."""
+ os.remove(self.log_file)
+
+ def append_line(self, filename, line):
+ """Add (append) a line to to a file."""
+ f = open(filename, "at")
+ f.write(line + "\n")
+ f.close()
+
+ def add_bogus_line(self, filename):
+ """Add bogus (non-relevant) line to file."""
+ if self.bogus_line_num_calls == 0:
+ self.append_line(filename, "Nebuchadnezzar")
+ else:
+ self.append_line(filename, "Assurbanipal")
+ self.bogus_line_num_calls = self.bogus_line_num_calls + 1
+
+ def add_status_line(self, filename):
+ """Add status line to file."""
+ if self.status_line_num_calls == 0:
+ pass
+ else:
+ pass
+ self.status_line_num_calls = self.status_line_num_calls + 1
+
+ def add_peer_status_line(self, filename):
+ """Add peer status line to file."""
+ if self.peer_status_line_num_calls == 0:
+ pass
+ else:
+ pass
+ self.peer_status_line_num_calls = self.peer_status_line_num_calls + 1
+
+ def add_verbose_line(self, filename):
+ """Add verbose line to file."""
+ if self.verbose_line_num_calls == 0:
+ pass
+ else:
+ pass
+ self.verbose_line_num_calls = self.verbose_line_num_calls + 1
+
+ def add_message_to_count(self, msg):
+ """Update message type counters according to msg."""
+ if msg.__class__ == storage.StatusMessage:
+ self.statmsg_count = self.statmsg_count + 1
+ elif msg.__class__ == storage.PeerStatusMessage:
+ self.pstatmsg_count = self.pstatmsg_count + 1
+ elif msg.__class__ == storage.VerboseMessage:
+ self.verbmsg_count = self.verbmsg_count + 1
def test_no_log_file(self):
- self.assertEqual(True, False)
+ """Log file doesn't exist."""
+ exception_raised = False
+ try:
+ p = parsing.TriblerLogParser(self.no_log_file,
+ "2009-01-01 12:13:14")
+ except (IOError, OSError, IndexError), e:
+ exception_raised = True
+
+ self.assertEqual(exception_raised, True)
def test_empty_log_file(self):
- self.assertEqual(True, False)
+ """Log file is empty."""
+ p = parsing.TriblerLogParser(self.log_file, "2009-01-01 12:13:14")
+
+ msg = p.get_next_message()
+
+ self.assertEqual(msg, None)
def test_bogus_log_file(self):
- self.assertEqual(True, False)
+ """Log file contains bogus information (no real data)."""
+ self.add_bogus_line(self.log_file)
+ self.add_bogus_line(self.log_file)
+ p = parsing.TriblerLogParser(self.log_file, "2009-01-01 12:13:14")
+
+ msg = p.get_next_message()
+
+ self.assertEqual(msg, None)
def test_get_status_message(self):
- self.assertEqual(True, False)
+ """Add status message."""
+ self.add_status_line(self.log_file)
+ p = parsing.TriblerLogParser(self.log_file, "2009-01-01 12:13:14")
+
+ msg = p.get_next_message()
+ self.add_message_to_count(msg)
+
+ self.assertEqual(self.statmsg_count, 1)
def test_get_status_messages(self):
- self.assertEqual(True, False)
+ """Add multiple status messages."""
+ self.add_status_line(self.log_file)
+ self.add_status_line(self.log_file)
+ p = parsing.TriblerLogParser(self.log_file, "2009-01-01 12:13:14")
+
+ msg1 = p.get_next_message()
+ msg2 = p.get_next_message()
+ self.add_message_to_count(msg1)
+ self.add_message_to_count(msg2)
+
+ self.assertEqual(self.statmsg_count, 2)
+
+ def test_get_peer_status_message(self):
+ """Add peer status message."""
+ self.add_peer_status_line(self.log_file)
+ p = parsing.TriblerLogParser(self.log_file, "2009-01-01 12:13:14")
+
+ msg = p.get_next_message()
+ self.add_message_to_count(msg)
+
+ self.assertEqual(self.pstatmsg_count, 1)
+
+ def test_get_peer_status_messages(self):
+ """Add multiple peer status messsages."""
+ self.add_peer_status_line(self.log_file)
+ self.add_peer_status_line(self.log_file)
+ p = parsing.TriblerLogParser(self.log_file, "2009-01-01 12:13:14")
+
+ msg1 = p.get_next_message()
+ msg2 = p.get_next_message()
+ self.add_message_to_count(msg1)
+ self.add_message_to_count(msg2)
+
+ self.assertEqual(self.pstatmsg_count, 2)
+
+ def test_get_verbose_message(self):
+ """Add verbose message."""
+ self.add_verbose_line(self.log_file)
+ p = parsing.TriblerLogParser(self.log_file, "2009-01-01 12:13:14")
+
+ msg = p.get_next_message()
+ self.add_message_to_count(msg)
+
+ self.assertEqual(self.verbmsg_count, 1)
+
+ def test_get_verbose_messages(self):
+ """Add multiple verbose messages."""
+ self.add_verbose_line(self.log_file)
+ self.add_verbose_line(self.log_file)
+ p = parsing.TriblerLogParser(self.log_file, "2009-01-01 12:13:14")
+
+ msg1 = p.get_next_message()
+ msg2 = p.get_next_message()
+ self.add_message_to_count(msg1)
+ self.add_message_to_count(msg2)
+
+ self.assertEqual(self.verbmsg_count, 2)
def test_get_mixed_messages_same_file(self):
- self.assertEqual(True, False)
+ """Add mixed messages in the same file.
+ Parser should detect a message of each type (status, peer status
+ and verbose).
+ """
+ self.add_bogus_line(self.log_file)
+ self.add_status_line(self.log_file)
+ self.add_peer_status_line(self.log_file)
+ self.add_verbose_line(self.log_file)
+ p = parsing.TriblerLogParser(self.log_file, "2009-01-01 12:13:14")
+
+ msg1 = p.get_next_message()
+ msg2 = p.get_next_message()
+ msg3 = p.get_next_message()
+ self.add_message_to_count(msg1)
+ self.add_message_to_count(msg2)
+ self.add_message_to_count(msg3)
+
+ self.assertEqual(self.statmsg_count, 1)
+ self.assertEqual(self.pstatmsg_count, 1)
+ self.assertEqual(self.verbmsg_count, 1)
if __name__ == "__main__":