Merge branch '8784-dir-listings'
[arvados.git] / services / nodemanager / tests / test_failure.py
index 35605fcd8c564ef910bfcd352d90e36d0680e064..cfac61ba2eaf64c67cf44aeb298f2caf4d9b1f86 100644 (file)
@@ -1,9 +1,13 @@
 #!/usr/bin/env python
+# Copyright (C) The Arvados Authors. All rights reserved.
+#
+# SPDX-License-Identifier: AGPL-3.0
 
 from __future__ import absolute_import, print_function
 
 import errno
 import logging
+import time
 import threading
 import unittest
 
@@ -22,18 +26,33 @@ class BogusActor(arvnodeman.baseactor.BaseNodeManagerActor):
     def doStuff(self):
         raise self.exp
 
-class ActorUnhandledExceptionTest(unittest.TestCase):
+    def ping(self):
+        # Called by WatchdogActorTest, this delay is longer than the test timeout
+        # of 1 second, which should cause the watchdog ping to fail.
+        time.sleep(4)
+        return True
+
+class ActorUnhandledExceptionTest(testutil.ActorTestMixin, unittest.TestCase):
     def test_fatal_error(self):
         for e in (MemoryError(), threading.ThreadError(), OSError(errno.ENOMEM, "")):
-            with mock.patch('os.killpg') as killpg_mock:
+            with mock.patch('os.kill') as kill_mock:
                 act = BogusActor.start(e).tell_proxy()
                 act.doStuff()
                 act.actor_ref.stop(block=True)
-                self.assertTrue(killpg_mock.called)
-
-    def test_nonfatal_error(self):
-        with mock.patch('os.killpg') as killpg_mock:
-            act = BogusActor.start(OSError(errno.ENOENT, "")).tell_proxy()
-            act.doStuff()
-            act.actor_ref.stop(block=True)
-            self.assertFalse(killpg_mock.called)
+                self.assertTrue(kill_mock.called)
+
+    @mock.patch('os.kill')
+    def test_nonfatal_error(self, kill_mock):
+        act = BogusActor.start(OSError(errno.ENOENT, "")).tell_proxy()
+        act.doStuff()
+        act.actor_ref.stop(block=True)
+        self.assertFalse(kill_mock.called)
+
+class WatchdogActorTest(testutil.ActorTestMixin, unittest.TestCase):
+    @mock.patch('os.kill')
+    def test_time_timout(self, kill_mock):
+        act = BogusActor.start(OSError(errno.ENOENT, ""))
+        watch = arvnodeman.baseactor.WatchdogActor.start(1, act)
+        watch.stop(block=True)
+        act.stop(block=True)
+        self.assertTrue(kill_mock.called)