class LiveLogFileTest(unittest.TestCase):
"""Test suite for LiveLogFile class in util.py."""
+ ok_log_filename = "ok.log"
+ ok_status_filename = "ok.log.status"
+ empty_log_filename = "empty.log"
+ incomplete_log_filename = "incomplete.log"
+ no_log_filename = "no.log"
+ first_line = "line 1\n"
+ second_line = "line 1\n"
+ third_line = "line 1\n"
def setUp(self):
- pass
+ """Create test log files."""
+ f = open(self.ok_log_filename, "wt")
+ f.write(self.first_line)
+ f.write(self.second_line)
+ f.write(self.third_line)
+ f.close()
+
+ f = open(self.empty_log_filename, "wt")
+ f.close()
+
+ f = open(self.incomplete_log_filename, "wt")
+ f.write("no newline")
+ f.close()
+
+ # Remove "no log" file and status file in case they exist.
+ try:
+ os.remove(self.no_log_filename)
+ except OSError, e:
+ pass
+
+ try:
+ os.remove(self.ok_status_filename)
+ except OSError, e:
+ pass
def tearDown(self):
- pass
+ """Remove test log files."""
+ os.remove(self.ok_log_filename)
+ os.remove(self.empty_log_filename)
+ os.remove(self.incomplete_log_filename)
+
+ def read_position_in_status_file(self, status_filename):
+ """Read first line in status file as integer."""
+ f = open(status_filename, "rt")
+ line = f.readline()
+ return int(line)
def test_no_log_file(self):
"""No log file is present."""
- self.assertEqual(True, False)
+ exception_raised = False
+ try:
+ llf = util.LiveLogFile(self.no_log_filename)
+ except IOError, e:
+ exception_raised = True
+
+ self.assertEqual(exception_raised, True)
def test_no_status_file(self):
"""No status file is present."""
- self.assertEqual(True, False)
+
+ # Status file should be created by constructor.
+ llf = util.LiveLogFile(self.ok_log_filename)
+ self.assertEqual(os.access(self.ok_status_filename, os.W_OK), True)
+
+ # Log file cursor should be 0 and the first line should be read.
+ line = llf.readline()
+ self.assertEqual(line, self.first_line)
+ llf.close()
+
+ # Check whether position is updated in status file.
+ pos = self.read_position_in_status_file(self.ok_status_filename)
+ self.assertEqual(pos, len(self.first_line))
def test_invalid_content_in_status_file(self):
"""Status file contains invalid content (no string)."""
- self.assertEqual(True, False)
+
+ f = open(self.ok_status_filename, "wt")
+ f.write("ana-are-mere\n")
+ f.close()
+
+ llf = util.LiveLogFile(self.ok_log_filename)
+
+ # Log file cursor should be 0 and the first line should be read.
+ line = llf.readline()
+ self.assertEqual(line, self.first_line)
+ llf.close()
+
+ # Check whether position is updated in status file.
+ pos = self.read_position_in_status_file(self.ok_status_filename)
+ self.assertEqual(pos, len(self.first_line))
def test_no_newline_at_end_of_status_file(self):
"""Status file contains invalid content (no string)."""
"""
self.assertEqual(True, False)
+ def test_empty_log_file(self):
+ """Log file is empty (zero length)."""
+ self.assertEqual(True, False)
+
def test_incomplete_log_file(self):
"""Log file's last doesn't end in a new line."""
self.assertEqual(True, False)
+ def test_readline_fails_after_close(self):
+ """Use readline() after close(). Should fail."""
+ self.assertEqual(True, False)
+
if __name__ == "__main__":
unittest.main()