示例#1
0
 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])
         ]))
示例#2
0
 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])]))
示例#3
0
 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)])
     )
示例#4
0
 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))])
         )
示例#5
0
 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)])))
     )
示例#6
0
 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])]))