14714: keep-balance uses cluster config
[arvados.git] / services / nodemanager / tests / test_status.py
index a3f0d177f7e219095a88abcc37fc9ed50fa0e9f1..2a1c0fc58960c8a36a3decde1d0a611643c2c0a8 100644 (file)
@@ -7,6 +7,8 @@ from __future__ import absolute_import, print_function
 from future import standard_library
 
 import json
+import mock
+import random
 import requests
 import unittest
 
@@ -62,16 +64,40 @@ class StatusServerUpdates(unittest.TestCase):
     def test_counters(self):
         with TestServer() as srv:
             resp = srv.get_status()
-            # Test initial values
-            for counter in ['cloud_errors', 'boot_failures', 'actor_exceptions']:
+            # Test counters existance
+            for counter in ['list_nodes_errors', 'create_node_errors',
+                'destroy_node_errors', 'boot_failures', 'actor_exceptions']:
                 self.assertIn(counter, resp)
-                self.assertEqual(0, resp[counter])
             # Test counter increment
             for count in range(1, 3):
                 status.tracker.counter_add('a_counter')
                 resp = srv.get_status()
                 self.assertEqual(count, resp['a_counter'])
 
+    @mock.patch('time.time')
+    def test_idle_times(self, time_mock):
+        with TestServer() as srv:
+            resp = srv.get_status()
+            node_name = 'idle_compute{}'.format(random.randint(1, 1024))
+            self.assertIn('idle_times', resp)
+            # Test add an idle node
+            time_mock.return_value = 10
+            status.tracker.idle_in(node_name)
+            time_mock.return_value += 10
+            resp = srv.get_status()
+            self.assertEqual(10, resp['idle_times'][node_name])
+            # Test adding the same idle node a 2nd time
+            time_mock.return_value += 10
+            status.tracker.idle_in(node_name)
+            time_mock.return_value += 10
+            resp = srv.get_status()
+            # Idle timestamp doesn't get reset if already exists
+            self.assertEqual(30, resp['idle_times'][node_name])
+            # Test remove idle node
+            status.tracker.idle_out(node_name)
+            resp = srv.get_status()
+            self.assertNotIn(node_name, resp['idle_times'])
+
 
 class StatusServerDisabled(unittest.TestCase):
     def test_config_disabled(self):