ppf/new: Complete several tests for util.py.
authorRazvan Deaconescu <razvan.deaconescu@cs.pub.ro>
Fri, 26 Aug 2011 12:41:12 +0000 (15:41 +0300)
committerRazvan Deaconescu <razvan.deaconescu@cs.pub.ro>
Fri, 26 Aug 2011 12:41:12 +0000 (15:41 +0300)
ppf/new/tests/test_util.py

index f5a2ea9..8fb7289 100644 (file)
@@ -24,24 +24,96 @@ class LiveLogStatusTest(unittest.TestCase):
 
 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)."""
@@ -59,9 +131,17 @@ class LiveLogFileTest(unittest.TestCase):
         """
         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()