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