def test_multiple_errors(self): """ If bulk add returns 409 then multiple errors returned are collected and raised as a single `BulkErrors` """ errors = { "errors": [ lb_inactive(self.lbs[0]), "Load Balancer Pool {} does not exist".format(self.lbs[1]), "Cloud Server {} is unprocessable".format(self.nodes[2]) ] } seq = [(self.svc_req_intent(self.data), const(stub_json_response(errors, 409))), (log_intent("request-rcv3-bulk", errors, req_body=("jsonified", self.data)), noop)] with self.assertRaises(r.BulkErrors) as ec: perform_sequence(seq, r.bulk_add(self.pairs)) self.assertEqual( ec.exception.errors, pset([ r.LBInactive(self.lbs[0]), r.NoSuchLBError(self.lbs[1]), r.ServerUnprocessableError(self.nodes[2]) ]))
def test_lb_inactive(self): """ If bulk_delete returns 409 with only LB inactive errors then it raises `BulkErrors` with LBInActive errors in it """ errors = { "errors": [lb_inactive(self.lbs[0]), lb_inactive(self.lbs[1])] } seq = [(self.svc_req_intent(self.data), const(stub_json_response(errors, 409))), (log_intent("request-rcv3-bulk", errors, req_body=("jsonified", self.data)), noop)] with self.assertRaises(r.BulkErrors) as ec: perform_sequence(seq, r.bulk_delete(self.pairs)) self.assertEqual( ec.exception.errors, pset([r.LBInactive(self.lbs[0]), r.LBInactive(self.lbs[1])]))
def test_failures_and_retries(self): """ If `rcv3.bulk_add` results in BulkErrors with ServerUnprocessableError and other errors in it then step returns FAILURE """ excp1 = rcv3.LBInactive("l1") excp2 = rcv3.ServerUnprocessableError("s2") seq = [(("ba", self.pairs), self.ba_raiser(excp1, excp2))] self.assertEqual( perform_sequence(seq, self.step.as_effect()), (StepResult.FAILURE, [ErrorReason.String(excp1.message)]) )
def test_failure(self): """ Returns FAILURE if rcv3.bulk_delete raises BulkErrors """ terminals = (rcv3.BulkErrors([rcv3.LBInactive("l1")]), APIError(code=403, body="You're out of luck."), APIError(code=422, body="Oh look another 422.")) eff = self.step.as_effect() for exc in terminals: seq = [(("bd", self.pairs), lambda i: raise_(exc))] self.assertEqual( perform_sequence(seq, eff), (StepResult.FAILURE, [ ErrorReason.Exception((type(exc), exc, ANY))]) )
def test_failures(self): """ If `rcv3.bulk_add` results in BulkErrors with only non-ServerUnprocessableError errors in it then step returns FAILURE """ excp1 = rcv3.LBInactive("l1") excp2 = rcv3.NoSuchLBError("l2") seq = [(("ba", self.pairs), self.ba_raiser(excp1, excp2))] self.assertEqual( perform_sequence(seq, self.step.as_effect()), (StepResult.FAILURE, transform_eq(pset, pset([ ErrorReason.String(excp1.message), ErrorReason.String(excp2.message)]))) )
def test_bulk_and_retry_error(self): """ If bulk adding returns "LB node already member" error along with other errors then there is no retry and BulkErrors is raised """ errors = { "errors": [ node_already_member(self.lbs[0].upper(), self.nodes[0]), lb_inactive(self.lbs[1]) ] } seq = [(self.svc_req_intent(self.data), const(stub_json_response(errors, 409))), (log_intent("request-rcv3-bulk", errors, req_body=("jsonified", self.data)), noop)] with self.assertRaises(r.BulkErrors) as ec: perform_sequence(seq, r.bulk_add(self.pairs)) self.assertEqual(ec.exception.errors, pset([r.LBInactive(self.lbs[1])]))