github.com/juju/juju@v0.0.0-20240327075706-a90865de2538/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 "github.com/juju/loggo" 10 "github.com/juju/names/v5" 11 jc "github.com/juju/testing/checkers" 12 gc "gopkg.in/check.v1" 13 14 "github.com/juju/juju/core/status" 15 "github.com/juju/juju/core/watcher" 16 "github.com/juju/juju/rpc/params" 17 ) 18 19 var _ = gc.Suite(testsuite{}) 20 21 type testsuite struct{} 22 23 func newHandler(api UnitAssigner) unitAssignerHandler { 24 return unitAssignerHandler{api: api, logger: loggo.GetLogger("test")} 25 } 26 27 func (testsuite) TestSetup(c *gc.C) { 28 f := &fakeAPI{} 29 ua := newHandler(f) 30 _, err := ua.SetUp() 31 c.Assert(err, jc.ErrorIsNil) 32 c.Assert(f.calledWatch, jc.IsTrue) 33 34 f.err = errors.New("boo") 35 _, err = ua.SetUp() 36 c.Assert(err, gc.Equals, f.err) 37 } 38 39 func (testsuite) TestHandle(c *gc.C) { 40 f := &fakeAPI{} 41 ua := newHandler(f) 42 ids := []string{"foo/0", "bar/0"} 43 err := ua.Handle(nil, ids) 44 c.Assert(err, jc.ErrorIsNil) 45 c.Assert(f.assignTags, gc.DeepEquals, []names.UnitTag{ 46 names.NewUnitTag("foo/0"), 47 names.NewUnitTag("bar/0"), 48 }) 49 50 f.err = errors.New("boo") 51 err = ua.Handle(nil, ids) 52 c.Assert(err, gc.Equals, f.err) 53 } 54 55 func (testsuite) TestHandleError(c *gc.C) { 56 e := errors.New("some error") 57 f := &fakeAPI{assignErrs: []error{e}} 58 ua := newHandler(f) 59 ids := []string{"foo/0", "bar/0"} 60 err := ua.Handle(nil, ids) 61 c.Assert(err, jc.ErrorIsNil) 62 c.Assert(f.assignTags, gc.DeepEquals, []names.UnitTag{ 63 names.NewUnitTag("foo/0"), 64 names.NewUnitTag("bar/0"), 65 }) 66 c.Assert(f.status.Entities, gc.NotNil) 67 entities := f.status.Entities 68 c.Assert(entities, gc.HasLen, 1) 69 c.Assert(entities[0], gc.DeepEquals, params.EntityStatusArgs{ 70 Tag: "unit-foo-0", 71 Status: status.Error.String(), 72 Info: e.Error(), 73 }) 74 } 75 76 type fakeAPI struct { 77 calledWatch bool 78 assignTags []names.UnitTag 79 err error 80 status params.SetStatus 81 assignErrs []error 82 } 83 84 func (f *fakeAPI) AssignUnits(tags []names.UnitTag) ([]error, error) { 85 f.assignTags = tags 86 return f.assignErrs, f.err 87 } 88 89 func (f *fakeAPI) WatchUnitAssignments() (watcher.StringsWatcher, error) { 90 f.calledWatch = true 91 return nil, f.err 92 } 93 94 func (f *fakeAPI) SetAgentStatus(args params.SetStatus) error { 95 f.status = args 96 return f.err 97 }