launchpad.net/~rogpeppe/juju-core/500-errgo-fix@v0.0.0-20140213181702-000000002356/state/apiserver/common/ensuredead_test.go (about)

     1  // Copyright 2013 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package common_test
     5  
     6  import (
     7  	"launchpad.net/errgo/errors"
     8  	gc "launchpad.net/gocheck"
     9  
    10  	"launchpad.net/juju-core/state"
    11  	"launchpad.net/juju-core/state/api/params"
    12  	"launchpad.net/juju-core/state/apiserver/common"
    13  	apiservertesting "launchpad.net/juju-core/state/apiserver/testing"
    14  )
    15  
    16  type deadEnsurerSuite struct{}
    17  
    18  var _ = gc.Suite(&deadEnsurerSuite{})
    19  
    20  type fakeDeadEnsurer struct {
    21  	state.Entity
    22  	life state.Life
    23  	err  error
    24  	fetchError
    25  }
    26  
    27  func (e *fakeDeadEnsurer) EnsureDead() error {
    28  	return e.err
    29  }
    30  
    31  func (e *fakeDeadEnsurer) Life() state.Life {
    32  	return e.life
    33  }
    34  
    35  func (*deadEnsurerSuite) TestEnsureDead(c *gc.C) {
    36  	st := &fakeState{
    37  		entities: map[string]entityWithError{
    38  			"x0": &fakeDeadEnsurer{life: state.Dying, err: errors.Newf("x0 fails")},
    39  			"x1": &fakeDeadEnsurer{life: state.Alive},
    40  			"x2": &fakeDeadEnsurer{life: state.Dying},
    41  			"x3": &fakeDeadEnsurer{life: state.Dead},
    42  			"x4": &fakeDeadEnsurer{fetchError: "x4 error"},
    43  		},
    44  	}
    45  	getCanModify := func() (common.AuthFunc, error) {
    46  		return func(tag string) bool {
    47  			switch tag {
    48  			case "x0", "x1", "x2", "x4":
    49  				return true
    50  			}
    51  			return false
    52  		}, nil
    53  	}
    54  	d := common.NewDeadEnsurer(st, getCanModify)
    55  	entities := params.Entities{[]params.Entity{
    56  		{"x0"}, {"x1"}, {"x2"}, {"x3"}, {"x4"}, {"x5"},
    57  	}}
    58  	result, err := d.EnsureDead(entities)
    59  	c.Assert(err, gc.IsNil)
    60  	c.Assert(result, gc.DeepEquals, params.ErrorResults{
    61  		Results: []params.ErrorResult{
    62  			{&params.Error{Message: "x0 fails"}},
    63  			{nil},
    64  			{nil},
    65  			{apiservertesting.ErrUnauthorized},
    66  			{&params.Error{Message: "x4 error"}},
    67  			{apiservertesting.ErrUnauthorized},
    68  		},
    69  	})
    70  }
    71  
    72  func (*deadEnsurerSuite) TestEnsureDeadError(c *gc.C) {
    73  	getCanModify := func() (common.AuthFunc, error) {
    74  		return nil, errors.Newf("pow")
    75  	}
    76  	d := common.NewDeadEnsurer(&fakeState{}, getCanModify)
    77  	_, err := d.EnsureDead(params.Entities{[]params.Entity{{"x0"}}})
    78  	c.Assert(err, gc.ErrorMatches, "pow")
    79  }
    80  
    81  func (*removeSuite) TestEnsureDeadNoArgsNoError(c *gc.C) {
    82  	getCanModify := func() (common.AuthFunc, error) {
    83  		return nil, errors.Newf("pow")
    84  	}
    85  	d := common.NewDeadEnsurer(&fakeState{}, getCanModify)
    86  	result, err := d.EnsureDead(params.Entities{})
    87  	c.Assert(err, gc.IsNil)
    88  	c.Assert(result.Results, gc.HasLen, 0)
    89  }