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  }