github.com/juju/juju@v0.0.0-20240430160146-1752b71fcf00/worker/caasunitsmanager/worker_test.go (about) 1 // Copyright 2022 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package caasunitsmanager_test 5 6 import ( 7 "github.com/juju/clock" 8 "github.com/juju/loggo" 9 jc "github.com/juju/testing/checkers" 10 "github.com/juju/worker/v3" 11 "go.uber.org/mock/gomock" 12 gc "gopkg.in/check.v1" 13 14 message "github.com/juju/juju/pubsub/agent" 15 "github.com/juju/juju/worker/caasunitsmanager" 16 "github.com/juju/juju/worker/caasunitsmanager/mocks" 17 ) 18 19 var _ = gc.Suite(&workerSuite{}) 20 21 type workerSuite struct{} 22 23 func (s *workerSuite) newWorker(c *gc.C, hub caasunitsmanager.Hub) worker.Worker { 24 config := caasunitsmanager.Config{ 25 Logger: loggo.GetLogger("test"), 26 Clock: clock.WallClock, 27 Hub: hub, 28 } 29 w, err := caasunitsmanager.NewWorker(config) 30 c.Assert(err, jc.ErrorIsNil) 31 return w 32 } 33 34 func (s *workerSuite) TestStartStop(c *gc.C) { 35 ctrl := gomock.NewController(c) 36 defer ctrl.Finish() 37 38 hub := mocks.NewMockHub(ctrl) 39 40 unsubStopCalled := false 41 unsubStartCalled := false 42 unsubStatusCalled := false 43 unsubStop := func() { unsubStopCalled = true } 44 unsubStart := func() { unsubStartCalled = true } 45 unsubStatus := func() { unsubStatusCalled = true } 46 47 gomock.InOrder( 48 hub.EXPECT().Subscribe(message.StopUnitTopic, gomock.Any()).Return(unsubStop), 49 hub.EXPECT().Subscribe(message.StartUnitTopic, gomock.Any()).Return(unsubStart), 50 hub.EXPECT().Subscribe(message.UnitStatusTopic, gomock.Any()).Return(unsubStatus), 51 52 hub.EXPECT().Publish( 53 message.StopUnitResponseTopic, 54 message.StartStopResponse{"error": `stop units for {[minio/0]} not supported`}, 55 ), 56 hub.EXPECT().Publish( 57 message.StartUnitResponseTopic, 58 message.StartStopResponse{"error": `start units for {[minio/0]} not supported`}, 59 ), 60 61 hub.EXPECT().Publish( 62 message.UnitStatusResponseTopic, 63 message.Status{"error": `units status not supported`}, 64 ), 65 ) 66 67 w := s.newWorker(c, hub) 68 m := w.(caasunitsmanager.Manager) 69 m.StopUnitRequest(message.StopUnitTopic, message.Units{Names: []string{"minio/0"}}) 70 m.StartUnitRequest(message.StartUnitTopic, message.Units{Names: []string{"minio/0"}}) 71 m.UnitStatusRequest(message.UnitStatusTopic, message.Units{Names: []string{"minio/0"}}) 72 73 w.Kill() 74 err := w.Wait() 75 c.Assert(err, jc.ErrorIsNil) 76 c.Assert(unsubStopCalled, jc.IsTrue) 77 c.Assert(unsubStartCalled, jc.IsTrue) 78 c.Assert(unsubStatusCalled, jc.IsTrue) 79 }