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 }