github.com/cloudbase/juju-core@v0.0.0-20140504232958-a7271ac7912f/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 gc "launchpad.net/gocheck" 10 11 "launchpad.net/juju-core/errors" 12 "launchpad.net/juju-core/state" 13 "launchpad.net/juju-core/state/api/params" 14 "launchpad.net/juju-core/state/apiserver/common" 15 jc "launchpad.net/juju-core/testing/checkers" 16 "launchpad.net/juju-core/testing/testbase" 17 ) 18 19 type errorsSuite struct { 20 testbase.LoggingSuite 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: common.ErrUnknownWatcher, 79 code: params.CodeNotFound, 80 helperFunc: params.IsCodeNotFound, 81 }, { 82 err: &state.NotAssignedError{&state.Unit{}}, // too sleazy?! nah.. 83 code: params.CodeNotAssigned, 84 helperFunc: params.IsCodeNotAssigned, 85 }, { 86 err: common.ErrStoppedWatcher, 87 code: params.CodeStopped, 88 helperFunc: params.IsCodeStopped, 89 }, { 90 err: &state.HasAssignedUnitsError{"42", []string{"a"}}, 91 code: params.CodeHasAssignedUnits, 92 helperFunc: params.IsCodeHasAssignedUnits, 93 }, { 94 err: stderrors.New("an error"), 95 code: "", 96 }, { 97 err: unhashableError{"foo"}, 98 code: "", 99 }, { 100 err: nil, 101 code: "", 102 }} 103 104 type unhashableError []string 105 106 func (err unhashableError) Error() string { 107 return err[0] 108 } 109 110 func (s *errorsSuite) TestErrorTransform(c *gc.C) { 111 for _, t := range errorTransformTests { 112 err1 := common.ServerError(t.err) 113 if t.err == nil { 114 c.Assert(err1, gc.IsNil) 115 } else { 116 c.Assert(err1.Message, gc.Equals, t.err.Error()) 117 c.Assert(err1.Code, gc.Equals, t.code) 118 if t.helperFunc != nil { 119 c.Assert(err1, jc.Satisfies, t.helperFunc) 120 } 121 } 122 } 123 }