diff --git a/test/ganeti.utils_unittest.py b/test/ganeti.utils_unittest.py
index 2c46afcb1ae2ea2eaaa44fc403e7e82221c85a2b..7c7e99c92201e2708ee25d6744e66c37b838b4f1 100755
--- a/test/ganeti.utils_unittest.py
+++ b/test/ganeti.utils_unittest.py
@@ -2390,5 +2390,41 @@ class TestFileID(testutils.GanetiTestCase):
     utils.SafeWriteFile(name, None, data="")
 
 
+class TimeMock:
+  def __init__(self, values):
+    self.values = values
+
+  def __call__(self):
+    return self.values.pop(0)
+
+
+class TestRunningTimeout(unittest.TestCase):
+  def setUp(self):
+    self.time_fn = TimeMock([0.0, 0.3, 4.6, 6.5])
+
+  def testRemainingFloat(self):
+    timeout = utils.RunningTimeout(5.0, True, _time_fn=self.time_fn)
+    self.assertAlmostEqual(timeout.Remaining(), 4.7)
+    self.assertAlmostEqual(timeout.Remaining(), 0.4)
+    self.assertAlmostEqual(timeout.Remaining(), -1.5)
+
+  def testRemaining(self):
+    self.time_fn = TimeMock([0, 2, 4, 5, 6])
+    timeout = utils.RunningTimeout(5, True, _time_fn=self.time_fn)
+    self.assertEqual(timeout.Remaining(), 3)
+    self.assertEqual(timeout.Remaining(), 1)
+    self.assertEqual(timeout.Remaining(), 0)
+    self.assertEqual(timeout.Remaining(), -1)
+
+  def testRemainingNonNegative(self):
+    timeout = utils.RunningTimeout(5.0, False, _time_fn=self.time_fn)
+    self.assertAlmostEqual(timeout.Remaining(), 4.7)
+    self.assertAlmostEqual(timeout.Remaining(), 0.4)
+    self.assertEqual(timeout.Remaining(), 0.0)
+
+  def testNegativeTimeout(self):
+    self.assertRaises(ValueError, utils.RunningTimeout, -1.0, True)
+
+
 if __name__ == '__main__':
   testutils.GanetiTestProgram()