github.com/axw/juju@v0.0.0-20161005053422-4bd6544d08d4/worker/unitassigner/unitassigner_test.go (about)

     1  // Copyright 2015 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package unitassigner
     5  
     6  import (
     7  	"errors"
     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/params"
    14  	"github.com/juju/juju/status"
    15  	"github.com/juju/juju/watcher"
    16  )
    17  
    18  var _ = gc.Suite(testsuite{})
    19  
    20  type testsuite struct{}
    21  
    22  func (testsuite) TestSetup(c *gc.C) {
    23  	f := &fakeAPI{}
    24  	ua := unitAssignerHandler{api: f}
    25  	_, err := ua.SetUp()
    26  	c.Assert(err, jc.ErrorIsNil)
    27  	c.Assert(f.calledWatch, jc.IsTrue)
    28  
    29  	f.err = errors.New("boo")
    30  	_, err = ua.SetUp()
    31  	c.Assert(err, gc.Equals, f.err)
    32  }
    33  
    34  func (testsuite) TestHandle(c *gc.C) {
    35  	f := &fakeAPI{}
    36  	ua := unitAssignerHandler{api: f}
    37  	ids := []string{"foo/0", "bar/0"}
    38  	err := ua.Handle(nil, ids)
    39  	c.Assert(err, jc.ErrorIsNil)
    40  	c.Assert(f.assignTags, gc.DeepEquals, []names.UnitTag{
    41  		names.NewUnitTag("foo/0"),
    42  		names.NewUnitTag("bar/0"),
    43  	})
    44  
    45  	f.err = errors.New("boo")
    46  	err = ua.Handle(nil, ids)
    47  	c.Assert(err, gc.Equals, f.err)
    48  }
    49  
    50  func (testsuite) TestHandleError(c *gc.C) {
    51  	e := errors.New("some error")
    52  	f := &fakeAPI{assignErrs: []error{e}}
    53  	ua := unitAssignerHandler{api: f}
    54  	ids := []string{"foo/0", "bar/0"}
    55  	err := ua.Handle(nil, ids)
    56  	c.Assert(err, jc.ErrorIsNil)
    57  	c.Assert(f.assignTags, gc.DeepEquals, []names.UnitTag{
    58  		names.NewUnitTag("foo/0"),
    59  		names.NewUnitTag("bar/0"),
    60  	})
    61  	c.Assert(f.status.Entities, gc.NotNil)
    62  	entities := f.status.Entities
    63  	c.Assert(entities, gc.HasLen, 1)
    64  	c.Assert(entities[0], gc.DeepEquals, params.EntityStatusArgs{
    65  		Tag:    "unit-foo-0",
    66  		Status: status.Error.String(),
    67  		Info:   e.Error(),
    68  	})
    69  }
    70  
    71  type fakeAPI struct {
    72  	calledWatch bool
    73  	assignTags  []names.UnitTag
    74  	err         error
    75  	status      params.SetStatus
    76  	assignErrs  []error
    77  }
    78  
    79  func (f *fakeAPI) AssignUnits(tags []names.UnitTag) ([]error, error) {
    80  	f.assignTags = tags
    81  	return f.assignErrs, f.err
    82  }
    83  
    84  func (f *fakeAPI) WatchUnitAssignments() (watcher.StringsWatcher, error) {
    85  	f.calledWatch = true
    86  	return nil, f.err
    87  }
    88  
    89  func (f *fakeAPI) SetAgentStatus(args params.SetStatus) error {
    90  	f.status = args
    91  	return f.err
    92  }