github.com/niedbalski/juju@v0.0.0-20190215020005-8ff100488e47/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/core/status" 15 "github.com/juju/juju/core/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 }