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  }