Merge branch 'devel-2.5'
[ganeti-local] / test / ganeti.utils.algo_unittest.py
index d9834bb..96b4ff5 100755 (executable)
@@ -218,6 +218,59 @@ class TestNiceSort(unittest.TestCase):
     self.assertEqual(keyfn.count, len(data),
                      msg="Key function was not called once per value")
 
+  def testNiceSortKey(self):
+    self.assertEqual(algo.NiceSortKey(""),
+                     ([None] * algo._SORTER_GROUPS) + [""])
+    self.assertEqual(algo.NiceSortKey("Hello World"),
+                     ["Hello World"] +
+                     ([None] * int(algo._SORTER_GROUPS - 1)) + [""])
+    self.assertEqual(algo.NiceSortKey("node1.net75.bld3.example.com"),
+                     ["node", 1, ".net", 75, ".bld", 3, ".example.com",
+                      None, ""])
+
+
+class TestInvertDict(unittest.TestCase):
+  def testInvertDict(self):
+    test_dict = { "foo": 1, "bar": 2, "baz": 5 }
+    self.assertEqual(algo.InvertDict(test_dict),
+                     { 1: "foo", 2: "bar", 5: "baz"})
+
+
+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 = algo.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 = algo.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 = algo.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, algo.RunningTimeout, -1.0, True)
+
 
 if __name__ == "__main__":
   testutils.GanetiTestProgram()