github.com/mattyw/juju@v0.0.0-20140610034352-732aecd63861/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  	"fmt"
     8  
     9  	gc "launchpad.net/gocheck"
    10  
    11  	"github.com/juju/juju/state"
    12  	"github.com/juju/juju/state/api/params"
    13  	"github.com/juju/juju/state/apiserver/common"
    14  	apiservertesting "github.com/juju/juju/state/apiserver/testing"
    15  )
    16  
    17  type deadEnsurerSuite struct{}
    18  
    19  var _ = gc.Suite(&deadEnsurerSuite{})
    20  
    21  type fakeDeadEnsurer struct {
    22  	state.Entity
    23  	life state.Life
    24  	err  error
    25  	fetchError
    26  }
    27  
    28  func (e *fakeDeadEnsurer) EnsureDead() error {
    29  	return e.err
    30  }
    31  
    32  func (e *fakeDeadEnsurer) Life() state.Life {
    33  	return e.life
    34  }
    35  
    36  func (*deadEnsurerSuite) TestEnsureDead(c *gc.C) {
    37  	st := &fakeState{
    38  		entities: map[string]entityWithError{
    39  			"x0": &fakeDeadEnsurer{life: state.Dying, err: fmt.Errorf("x0 fails")},
    40  			"x1": &fakeDeadEnsurer{life: state.Alive},
    41  			"x2": &fakeDeadEnsurer{life: state.Dying},
    42  			"x3": &fakeDeadEnsurer{life: state.Dead},
    43  			"x4": &fakeDeadEnsurer{fetchError: "x4 error"},
    44  		},
    45  	}
    46  	getCanModify := func() (common.AuthFunc, error) {
    47  		return func(tag string) bool {
    48  			switch tag {
    49  			case "x0", "x1", "x2", "x4":
    50  				return true
    51  			}
    52  			return false
    53  		}, nil
    54  	}
    55  	d := common.NewDeadEnsurer(st, getCanModify)
    56  	entities := params.Entities{[]params.Entity{
    57  		{"x0"}, {"x1"}, {"x2"}, {"x3"}, {"x4"}, {"x5"},
    58  	}}
    59  	result, err := d.EnsureDead(entities)
    60  	c.Assert(err, gc.IsNil)
    61  	c.Assert(result, gc.DeepEquals, params.ErrorResults{
    62  		Results: []params.ErrorResult{
    63  			{&params.Error{Message: "x0 fails"}},
    64  			{nil},
    65  			{nil},
    66  			{apiservertesting.ErrUnauthorized},
    67  			{&params.Error{Message: "x4 error"}},
    68  			{apiservertesting.ErrUnauthorized},
    69  		},
    70  	})
    71  }
    72  
    73  func (*deadEnsurerSuite) TestEnsureDeadError(c *gc.C) {
    74  	getCanModify := func() (common.AuthFunc, error) {
    75  		return nil, fmt.Errorf("pow")
    76  	}
    77  	d := common.NewDeadEnsurer(&fakeState{}, getCanModify)
    78  	_, err := d.EnsureDead(params.Entities{[]params.Entity{{"x0"}}})
    79  	c.Assert(err, gc.ErrorMatches, "pow")
    80  }
    81  
    82  func (*removeSuite) TestEnsureDeadNoArgsNoError(c *gc.C) {
    83  	getCanModify := func() (common.AuthFunc, error) {
    84  		return nil, fmt.Errorf("pow")
    85  	}
    86  	d := common.NewDeadEnsurer(&fakeState{}, getCanModify)
    87  	result, err := d.EnsureDead(params.Entities{})
    88  	c.Assert(err, gc.IsNil)
    89  	c.Assert(result.Results, gc.HasLen, 0)
    90  }