Merge branch 'master' into 8654-arv-jobs-cwl-runner
[arvados.git] / services / nodemanager / tests / test_failure.py
index b7127fc2bbddf4ea2c9fd0c22dc746ec4baae6f2..35605fcd8c564ef910bfcd352d90e36d0680e064 100644 (file)
@@ -2,7 +2,9 @@
 
 from __future__ import absolute_import, print_function
 
+import errno
 import logging
+import threading
 import unittest
 
 import mock
@@ -10,21 +12,28 @@ import pykka
 
 from . import testutil
 
-import arvnodeman.fullstopactor
+import arvnodeman.baseactor
+
+class BogusActor(arvnodeman.baseactor.BaseNodeManagerActor):
+    def __init__(self, e):
+        super(BogusActor, self).__init__()
+        self.exp = e
 
-class BogusActor(arvnodeman.fullstopactor.FullStopActor):
     def doStuff(self):
-        raise MemoryError
+        raise self.exp
 
 class ActorUnhandledExceptionTest(unittest.TestCase):
-    def test1(self):
+    def test_fatal_error(self):
+        for e in (MemoryError(), threading.ThreadError(), OSError(errno.ENOMEM, "")):
+            with mock.patch('os.killpg') as killpg_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()
-            act.tell({
-                'command': 'pykka_call',
-                'attr_path': ("doStuff",),
-                'args': [],
-                'kwargs': {}
-            })
-            act.stop(block=True)
-            self.assertTrue(killpg_mock.called)
+            act = BogusActor.start(OSError(errno.ENOENT, "")).tell_proxy()
+            act.doStuff()
+            act.actor_ref.stop(block=True)
+            self.assertFalse(killpg_mock.called)