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