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  }