Example #1
0
 def create_node(self,
                 name=None,
                 size=None,
                 image=None,
                 auth=None,
                 ex_storage_account=None,
                 ex_customdata=None,
                 ex_resource_group=None,
                 ex_user_name=None,
                 ex_tags=None,
                 ex_network=None):
     global all_nodes, create_calls, quota
     if len(all_nodes) >= quota:
         raise BaseHTTPError(503, "Quota exceeded")
     else:
         return super(QuotaDriver, self).create_node(
             name=name,
             size=size,
             image=image,
             auth=auth,
             ex_storage_account=ex_storage_account,
             ex_customdata=ex_customdata,
             ex_resource_group=ex_resource_group,
             ex_user_name=ex_user_name,
             ex_tags=ex_tags,
             ex_network=ex_network)
Example #2
0
 def create_node(self,
                 name=None,
                 size=None,
                 image=None,
                 auth=None,
                 ex_storage_account=None,
                 ex_customdata=None,
                 ex_resource_group=None,
                 ex_user_name=None,
                 ex_tags=None,
                 ex_network=None):
     global create_calls
     create_calls += 1
     if create_calls < 2:
         raise RateLimitReachedError(429,
                                     "Rate limit exceeded",
                                     headers={'retry-after': '2'})
     elif create_calls < 3:
         raise BaseHTTPError(429, "Rate limit exceeded",
                             {'retry-after': '1'})
     else:
         return super(RetryDriver, self).create_node(
             name=name,
             size=size,
             image=image,
             auth=auth,
             ex_storage_account=ex_storage_account,
             ex_customdata=ex_customdata,
             ex_resource_group=ex_resource_group,
             ex_user_name=ex_user_name,
             ex_tags=ex_tags,
             ex_network=ex_network)
 def test_known_basehttperror_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)
 def test_basehttperror_retried(self):
     self.make_mocks()
     self.cloud_client.create_node.side_effect = [
         BaseHTTPError(500, "Try again"),
         self.cloud_client.create_node.return_value,
     ]
     self.make_actor()
     self.wait_for_assignment(self.setup_actor, 'cloud_node')
     self.setup_actor.ping().get(self.TIMEOUT)
     self.assertEqual(1, self.cloud_client.post_create_node.call_count)
 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()
     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_unknown_basehttperror_not_retried(self):
     self.make_mocks()
     self.cloud_client.create_node.side_effect = [
         BaseHTTPError(400, "Unknown"),
         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)
Example #7
0
    def test_destroy_node__destroy_nic_retries(self, time_sleep_mock):
        def error(e, **kwargs):
            raise e(**kwargs)

        node = self.driver.list_nodes()[0]
        err = BaseHTTPError(code=400, message="[NicInUse] Cannot destroy")
        with mock.patch.object(self.driver, "ex_destroy_nic") as m:
            m.side_effect = [err] * 5 + [True]  # 5 errors before a success
            ret = self.driver.destroy_node(node)
            self.assertTrue(ret)
            self.assertEqual(6, m.call_count)  # 6th call was a success

            m.side_effect = [err] * 10 + [True]  # 10 errors before a success
            with self.assertRaises(BaseHTTPError):
                self.driver.destroy_node(node)
                self.assertEqual(10, m.call_count)  # try 10 times & fail