Merge branch '12057-nodemanager-priority' closes #12057
[arvados.git] / services / nodemanager / tests / test_computenode_dispatch.py
index ec1573409a9340db4ca6e4c8e5b3d6739469aaf6..a8aa2e38fb46ce2c3e3b0d2ae7f35f01b12e4952 100644 (file)
@@ -1,4 +1,7 @@
 #!/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
 
@@ -28,7 +31,6 @@ class ComputeNodeSetupActorTestCase(testutil.ActorTestMixin, unittest.TestCase):
         self.api_client.nodes().update().execute.side_effect = arvados_effect
         self.cloud_client = mock.MagicMock(name='cloud_client')
         self.cloud_client.create_node.return_value = testutil.cloud_node_mock(1)
-        self.cloud_client.is_cloud_exception = BaseComputeNodeDriver.is_cloud_exception
 
     def make_actor(self, arv_node=None):
         if not hasattr(self, 'timer'):
@@ -90,27 +92,27 @@ class ComputeNodeSetupActorTestCase(testutil.ActorTestMixin, unittest.TestCase):
         self.make_actor()
         self.wait_for_assignment(self.setup_actor, 'cloud_node')
 
-    def test_unknown_basehttperror_not_retried(self):
+    def test_basehttperror_retried(self):
         self.make_mocks()
         self.cloud_client.create_node.side_effect = [
-            BaseHTTPError(400, "Unknown"),
+            BaseHTTPError(500, "Try again"),
             self.cloud_client.create_node.return_value,
             ]
         self.make_actor()
-        finished = threading.Event()
-        self.setup_actor.subscribe(lambda _: finished.set())
-        assert(finished.wait(self.TIMEOUT))
-        self.assertEqual(0, self.cloud_client.post_create_node.call_count)
+        self.wait_for_assignment(self.setup_actor, 'cloud_node')
+        self.assertEqual(1, self.cloud_client.post_create_node.call_count)
 
-    def test_known_basehttperror_retried(self):
+    def test_instance_exceeded_not_retried(self):
         self.make_mocks()
         self.cloud_client.create_node.side_effect = [
             BaseHTTPError(400, "InstanceLimitExceeded"),
             self.cloud_client.create_node.return_value,
             ]
         self.make_actor()
-        self.wait_for_assignment(self.setup_actor, 'cloud_node')
-        self.assertEqual(1, self.cloud_client.post_create_node.call_count)
+        done = self.FUTURE_CLASS()
+        self.setup_actor.subscribe(done.set)
+        done.get(self.TIMEOUT)
+        self.assertEqual(0, self.cloud_client.post_create_node.call_count)
 
     def test_failed_post_create_retried(self):
         self.make_mocks()
@@ -273,11 +275,14 @@ class ComputeNodeShutdownActorTestCase(ComputeNodeShutdownActorMixin,
 
 class ComputeNodeUpdateActorTestCase(testutil.ActorTestMixin,
                                      unittest.TestCase):
+    ACTOR_CLASS = dispatch.ComputeNodeUpdateActor
+
     def make_actor(self):
         self.driver = mock.MagicMock(name='driver_mock')
-        self.updater = dispatch.ComputeNodeUpdateActor.start(self.driver).proxy()
+        self.timer = mock.MagicMock(name='timer_mock')
+        self.updater = self.ACTOR_CLASS.start(self.driver, self.timer).proxy()
 
-    def test_node_sync(self):
+    def test_node_sync(self, *args):
         self.make_actor()
         cloud_node = testutil.cloud_node_mock()
         arv_node = testutil.arvados_node_mock()
@@ -285,7 +290,7 @@ class ComputeNodeUpdateActorTestCase(testutil.ActorTestMixin,
         self.driver().sync_node.assert_called_with(cloud_node, arv_node)
 
     @testutil.no_sleep
-    def test_node_sync_error(self):
+    def test_node_sync_error(self, *args):
         self.make_actor()
         cloud_node = testutil.cloud_node_mock()
         arv_node = testutil.arvados_node_mock()