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  }