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  }