github.com/juju/juju@v0.0.0-20240430160146-1752b71fcf00/apiserver/common/machinestatus_test.go (about) 1 // Copyright 2016 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package common_test 5 6 import ( 7 "errors" 8 9 "github.com/juju/names/v5" 10 "github.com/juju/testing" 11 jc "github.com/juju/testing/checkers" 12 gc "gopkg.in/check.v1" 13 14 "github.com/juju/juju/apiserver/common" 15 "github.com/juju/juju/core/status" 16 "github.com/juju/juju/state" 17 ) 18 19 type MachineStatusSuite struct { 20 testing.IsolationSuite 21 ctx common.ModelPresenceContext 22 machine *mockMachine 23 } 24 25 var _ = gc.Suite(&MachineStatusSuite{}) 26 27 func (s *MachineStatusSuite) SetUpTest(c *gc.C) { 28 s.machine = &mockMachine{ 29 id: "666", 30 status: status.Started, 31 } 32 s.ctx = common.ModelPresenceContext{ 33 Presence: agentAlive(names.NewMachineTag(s.machine.id).String()), 34 } 35 } 36 37 func (s *MachineStatusSuite) checkUntouched(c *gc.C) { 38 agent, err := s.ctx.MachineStatus(s.machine) 39 c.Check(err, jc.ErrorIsNil) 40 c.Assert(agent.Status, jc.DeepEquals, s.machine.status) 41 } 42 43 func (s *MachineStatusSuite) TestNormal(c *gc.C) { 44 s.checkUntouched(c) 45 } 46 47 func (s *MachineStatusSuite) TestErrors(c *gc.C) { 48 s.machine.statusErr = errors.New("status error") 49 50 _, err := s.ctx.MachineStatus(s.machine) 51 c.Assert(err, gc.ErrorMatches, "status error") 52 } 53 54 func (s *MachineStatusSuite) TestDown(c *gc.C) { 55 s.ctx.Presence = agentDown(names.NewMachineTag(s.machine.Id()).String()) 56 agent, err := s.ctx.MachineStatus(s.machine) 57 c.Assert(err, jc.ErrorIsNil) 58 c.Assert(agent, jc.DeepEquals, status.StatusInfo{ 59 Status: status.Down, 60 Message: "agent is not communicating with the server", 61 }) 62 } 63 64 func (s *MachineStatusSuite) TestDownAndDead(c *gc.C) { 65 s.ctx.Presence = agentDown(names.NewMachineTag(s.machine.Id()).String()) 66 s.machine.life = state.Dead 67 // Status is untouched if unit is Dead. 68 s.checkUntouched(c) 69 } 70 71 func (s *MachineStatusSuite) TestPresenceError(c *gc.C) { 72 s.ctx.Presence = presenceError(names.NewMachineTag(s.machine.Id()).String()) 73 // Presence error gets ignored, so no output is unchanged. 74 s.checkUntouched(c) 75 } 76 77 func (s *MachineStatusSuite) TestNotDownIfPending(c *gc.C) { 78 s.ctx.Presence = agentDown(names.NewMachineTag(s.machine.Id()).String()) 79 s.machine.status = status.Pending 80 s.checkUntouched(c) 81 }