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  }