github.com/juju/juju@v0.0.0-20240430160146-1752b71fcf00/rpc/params/apierror_test.go (about)

     1  // Copyright 2015 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package params_test
     5  
     6  import (
     7  	"github.com/juju/errors"
     8  	jc "github.com/juju/testing/checkers"
     9  	gc "gopkg.in/check.v1"
    10  
    11  	"github.com/juju/juju/rpc"
    12  	"github.com/juju/juju/rpc/params"
    13  )
    14  
    15  type errorSuite struct{}
    16  
    17  var _ rpc.ErrorCoder = (*params.Error)(nil)
    18  
    19  var _ = gc.Suite(&errorSuite{})
    20  
    21  func (*errorSuite) TestErrCode(c *gc.C) {
    22  	var err error
    23  	err = &params.Error{Code: params.CodeDead, Message: "brain dead test"}
    24  	c.Check(params.ErrCode(err), gc.Equals, params.CodeDead)
    25  
    26  	err = errors.Trace(err)
    27  	c.Check(params.ErrCode(err), gc.Equals, params.CodeDead)
    28  }
    29  
    30  func (*errorSuite) TestTranslateWellKnownError(c *gc.C) {
    31  	var tests = []struct {
    32  		name string
    33  		err  params.Error
    34  		test func(err error) bool
    35  	}{
    36  		{params.CodeNotFound, params.Error{Code: params.CodeNotFound, Message: "look a NotFound error"}, errors.IsNotFound},
    37  		{params.CodeUserNotFound, params.Error{Code: params.CodeUserNotFound, Message: "look a UserNotFound error"}, errors.IsUserNotFound},
    38  		{params.CodeUnauthorized, params.Error{Code: params.CodeUnauthorized, Message: "look a Unauthorized error"}, errors.IsUnauthorized},
    39  		{params.CodeNotImplemented, params.Error{Code: params.CodeNotImplemented, Message: "look a NotImplemented error"}, errors.IsNotImplemented},
    40  		{params.CodeAlreadyExists, params.Error{Code: params.CodeAlreadyExists, Message: "look a AlreadyExists error"}, errors.IsAlreadyExists},
    41  		{params.CodeNotSupported, params.Error{Code: params.CodeNotSupported, Message: "look a NotSupported error"}, errors.IsNotSupported},
    42  		{params.CodeNotValid, params.Error{Code: params.CodeNotValid, Message: "look a NotValid error"}, errors.IsNotValid},
    43  		{params.CodeNotProvisioned, params.Error{Code: params.CodeNotProvisioned, Message: "look a NotProvisioned error"}, errors.IsNotProvisioned},
    44  		{params.CodeNotAssigned, params.Error{Code: params.CodeNotAssigned, Message: "look a NotAssigned error"}, errors.IsNotAssigned},
    45  		{params.CodeBadRequest, params.Error{Code: params.CodeBadRequest, Message: "look a BadRequest error"}, errors.IsBadRequest},
    46  		{params.CodeMethodNotAllowed, params.Error{Code: params.CodeMethodNotAllowed, Message: "look a MethodNotAllowed error"}, errors.IsMethodNotAllowed},
    47  		{params.CodeForbidden, params.Error{Code: params.CodeForbidden, Message: "look a Forbidden error"}, errors.IsForbidden},
    48  		{params.CodeQuotaLimitExceeded, params.Error{Code: params.CodeQuotaLimitExceeded, Message: "look a QuotaLimitExceeded error"}, errors.IsQuotaLimitExceeded},
    49  		{params.CodeNotYetAvailable, params.Error{Code: params.CodeNotYetAvailable, Message: "look a NotYetAvailable error"}, errors.IsNotYetAvailable},
    50  	}
    51  
    52  	for _, v := range tests {
    53  		c.Assert(v.test(v.err), jc.IsFalse, gc.Commentf("test %s: params error is not a juju/errors error", v.name))
    54  		c.Assert(v.test(params.TranslateWellKnownError(v.err)), jc.IsTrue, gc.Commentf("test %s: translated error is a juju/errors error", v.name))
    55  	}
    56  }