github.com/mhilton/juju-juju@v0.0.0-20150901100907-a94dd2c73455/apiserver/common/errors_test.go (about)

     1  // Copyright 2012, 2013 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package common_test
     5  
     6  import (
     7  	stderrors "errors"
     8  
     9  	"github.com/juju/errors"
    10  	"github.com/juju/names"
    11  	jc "github.com/juju/testing/checkers"
    12  	"github.com/juju/txn"
    13  	gc "gopkg.in/check.v1"
    14  
    15  	"github.com/juju/juju/apiserver/common"
    16  	"github.com/juju/juju/apiserver/params"
    17  	"github.com/juju/juju/leadership"
    18  	"github.com/juju/juju/state"
    19  	"github.com/juju/juju/testing"
    20  )
    21  
    22  type errorsSuite struct {
    23  	testing.BaseSuite
    24  }
    25  
    26  var _ = gc.Suite(&errorsSuite{})
    27  
    28  var errorTransformTests = []struct {
    29  	err        error
    30  	code       string
    31  	helperFunc func(error) bool
    32  }{{
    33  	err:        errors.NotFoundf("hello"),
    34  	code:       params.CodeNotFound,
    35  	helperFunc: params.IsCodeNotFound,
    36  }, {
    37  	err:        errors.Unauthorizedf("hello"),
    38  	code:       params.CodeUnauthorized,
    39  	helperFunc: params.IsCodeUnauthorized,
    40  }, {
    41  	err:        state.ErrCannotEnterScopeYet,
    42  	code:       params.CodeCannotEnterScopeYet,
    43  	helperFunc: params.IsCodeCannotEnterScopeYet,
    44  }, {
    45  	err:        state.ErrCannotEnterScope,
    46  	code:       params.CodeCannotEnterScope,
    47  	helperFunc: params.IsCodeCannotEnterScope,
    48  }, {
    49  	err:        state.ErrDead,
    50  	code:       params.CodeDead,
    51  	helperFunc: params.IsCodeDead,
    52  }, {
    53  	err:        txn.ErrExcessiveContention,
    54  	code:       params.CodeExcessiveContention,
    55  	helperFunc: params.IsCodeExcessiveContention,
    56  }, {
    57  	err:        state.ErrUnitHasSubordinates,
    58  	code:       params.CodeUnitHasSubordinates,
    59  	helperFunc: params.IsCodeUnitHasSubordinates,
    60  }, {
    61  	err:        common.ErrBadId,
    62  	code:       params.CodeNotFound,
    63  	helperFunc: params.IsCodeNotFound,
    64  }, {
    65  	err:        common.NoAddressSetError(names.NewUnitTag("mysql/0"), "public"),
    66  	code:       params.CodeNoAddressSet,
    67  	helperFunc: params.IsCodeNoAddressSet,
    68  }, {
    69  	err:        common.ErrBadCreds,
    70  	code:       params.CodeUnauthorized,
    71  	helperFunc: params.IsCodeUnauthorized,
    72  }, {
    73  	err:        common.ErrPerm,
    74  	code:       params.CodeUnauthorized,
    75  	helperFunc: params.IsCodeUnauthorized,
    76  }, {
    77  	err:        common.ErrNotLoggedIn,
    78  	code:       params.CodeUnauthorized,
    79  	helperFunc: params.IsCodeUnauthorized,
    80  }, {
    81  	err:        errors.NotProvisionedf("machine 0"),
    82  	code:       params.CodeNotProvisioned,
    83  	helperFunc: params.IsCodeNotProvisioned,
    84  }, {
    85  	err:        errors.AlreadyExistsf("blah"),
    86  	code:       params.CodeAlreadyExists,
    87  	helperFunc: params.IsCodeAlreadyExists,
    88  }, {
    89  	err:        common.ErrUnknownWatcher,
    90  	code:       params.CodeNotFound,
    91  	helperFunc: params.IsCodeNotFound,
    92  }, {
    93  	err:        errors.NotAssignedf("unit mysql/0"),
    94  	code:       params.CodeNotAssigned,
    95  	helperFunc: params.IsCodeNotAssigned,
    96  }, {
    97  	err:        common.ErrStoppedWatcher,
    98  	code:       params.CodeStopped,
    99  	helperFunc: params.IsCodeStopped,
   100  }, {
   101  	err:        &state.HasAssignedUnitsError{"42", []string{"a"}},
   102  	code:       params.CodeHasAssignedUnits,
   103  	helperFunc: params.IsCodeHasAssignedUnits,
   104  }, {
   105  	err:        common.ErrTryAgain,
   106  	code:       params.CodeTryAgain,
   107  	helperFunc: params.IsCodeTryAgain,
   108  }, {
   109  	err:        state.UpgradeInProgressError,
   110  	code:       params.CodeUpgradeInProgress,
   111  	helperFunc: params.IsCodeUpgradeInProgress,
   112  }, {
   113  	err:        leadership.ErrClaimDenied,
   114  	code:       params.CodeLeadershipClaimDenied,
   115  	helperFunc: params.IsCodeLeadershipClaimDenied,
   116  }, {
   117  	err:        common.ErrOperationBlocked("test"),
   118  	code:       params.CodeOperationBlocked,
   119  	helperFunc: params.IsCodeOperationBlocked,
   120  }, {
   121  	err:  stderrors.New("an error"),
   122  	code: "",
   123  }, {
   124  	err:  unhashableError{"foo"},
   125  	code: "",
   126  }, {
   127  	err:        common.UnknownEnvironmentError("dead-beef-123456"),
   128  	code:       params.CodeNotFound,
   129  	helperFunc: params.IsCodeNotFound,
   130  }, {
   131  	err:  nil,
   132  	code: "",
   133  }}
   134  
   135  type unhashableError []string
   136  
   137  func (err unhashableError) Error() string {
   138  	return err[0]
   139  }
   140  
   141  func (s *errorsSuite) TestErrorTransform(c *gc.C) {
   142  	for _, t := range errorTransformTests {
   143  		err1 := common.ServerError(t.err)
   144  		if t.err == nil {
   145  			c.Assert(err1, gc.IsNil)
   146  		} else {
   147  			c.Assert(err1.Message, gc.Equals, t.err.Error())
   148  			c.Assert(err1.Code, gc.Equals, t.code)
   149  			if t.helperFunc != nil {
   150  				c.Assert(err1, jc.Satisfies, t.helperFunc)
   151  			}
   152  		}
   153  	}
   154  }
   155  
   156  func (s *errorsSuite) TestUnknownEnvironment(c *gc.C) {
   157  	err := common.UnknownEnvironmentError("dead-beef")
   158  	c.Check(err, gc.ErrorMatches, `unknown environment: "dead-beef"`)
   159  }