4138: Refactor common Node Manager driver initialization to base driver.
[arvados.git] / services / nodemanager / tests / testutil.py
index 56f22c8e08fc66f69c90422e30bb116b372dfbf6..ff525f0177ea7fc7be7d5d22a7e02bf0c3e28e06 100644 (file)
@@ -2,6 +2,7 @@
 
 from __future__ import absolute_import, print_function
 
+import threading
 import time
 
 import mock
@@ -14,16 +15,18 @@ no_sleep = mock.patch('time.sleep', lambda n: None)
 def arvados_node_mock(node_num=99, job_uuid=None, age=0, **kwargs):
     if job_uuid is True:
         job_uuid = 'zzzzz-jjjjj-jobjobjobjobjob'
-    slurm_state = 'idle' if (job_uuid is None) else 'alloc'
+    crunch_worker_state = 'idle' if (job_uuid is None) else 'busy'
     node = {'uuid': 'zzzzz-yyyyy-{:015x}'.format(node_num),
             'created_at': '2014-01-01T01:02:03Z',
             'modified_at': time.strftime('%Y-%m-%dT%H:%M:%SZ',
                                          time.gmtime(time.time() - age)),
+            'slot_number': node_num,
             'hostname': 'compute{}'.format(node_num),
             'domain': 'zzzzz.arvadosapi.com',
             'ip_address': ip_address_mock(node_num),
             'job_uuid': job_uuid,
-            'info': {'slurm_state': slurm_state}}
+            'crunch_worker_state': crunch_worker_state,
+            'info': {'ping_secret': 'defaulttestsecret'}}
     node.update(kwargs)
     return node
 
@@ -62,8 +65,23 @@ class MockSize(object):
 
 
 class MockTimer(object):
+    def __init__(self, deliver_immediately=True):
+        self.deliver_immediately = deliver_immediately
+        self.messages = []
+        self.lock = threading.Lock()
+
+    def deliver(self):
+        with self.lock:
+            to_deliver = self.messages
+            self.messages = []
+        for callback, args, kwargs in to_deliver:
+            callback(*args, **kwargs)
+
     def schedule(self, want_time, callback, *args, **kwargs):
-        return callback(*args, **kwargs)
+        with self.lock:
+            self.messages.append((callback, args, kwargs))
+        if self.deliver_immediately:
+            self.deliver()
 
 
 class ActorTestMixin(object):