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