def test_remove_nodes_from_clb_predicate(self): """ :obj:`RemoveNodesFromCLB` only succeeds on 202. """ lb_id = "12345" node_ids = [str(i) for i in range(5)] step = RemoveNodesFromCLB(lb_id=lb_id, node_ids=pset(node_ids)) request = step.as_effect() self.assertTrue(request.intent.json_response) predicate = request.intent.success_pred self.assertTrue(predicate(StubResponse(202, {}), None)) self.assertFalse(predicate(StubResponse(200, {}), None))
def test_remove_nodes_from_clb_retry(self): """ :obj:`RemoveNodesFromCLB`, on receiving a 400, parses out the nodes that are no longer on the load balancer, and retries the bulk delete with those nodes removed. TODO: this has been left in as a regression test - this can probably be removed the next time it's touched, as this functionality happens in cloud_client now and there is a similar test there. """ lb_id = "12345" node_ids = [str(i) for i in range(5)] error_body = { "validationErrors": { "messages": [ "Node ids 1,2,3 are not a part of your loadbalancer" ] }, "message": "Validation Failure", "code": 400, "details": "The object is not valid" } expected_req = service_request( ServiceType.CLOUD_LOAD_BALANCERS, 'DELETE', 'loadbalancers/12345/nodes', params={'id': transform_eq(sorted, node_ids)}, success_pred=ANY, json_response=True).intent expected_req2 = service_request( ServiceType.CLOUD_LOAD_BALANCERS, 'DELETE', 'loadbalancers/12345/nodes', params={'id': transform_eq(sorted, ['0', '4'])}, success_pred=ANY, json_response=True).intent step = RemoveNodesFromCLB(lb_id=lb_id, node_ids=pset(node_ids)) seq = [ (expected_req, lambda i: raise_(APIError(400, json.dumps(error_body)))), (expected_req2, lambda i: stub_pure_response('', 202)), ] r = perform_sequence(seq, step.as_effect()) self.assertEqual(r, (StepResult.SUCCESS, []))
def test_remove_nodes_from_clb(self): """ :obj:`RemoveNodesFromCLB` produces a request for deleting any number of nodes from a cloud load balancer. """ lb_id = "12345" node_ids = [str(i) for i in range(5)] step = RemoveNodesFromCLB(lb_id=lb_id, node_ids=pset(node_ids)) request = step.as_effect() self.assertEqual( request.intent, service_request( ServiceType.CLOUD_LOAD_BALANCERS, 'DELETE', "loadbalancers/12345/nodes", params={'id': transform_eq(sorted, node_ids)}, json_response=True, success_pred=ANY).intent)