github.com/mwhudson/juju@v0.0.0-20160512215208-90ff01f3497f/worker/reboot/reboot_test.go (about)

     1  package reboot_test
     2  
     3  import (
     4  	stdtesting "testing"
     5  
     6  	jc "github.com/juju/testing/checkers"
     7  	"github.com/juju/utils"
     8  	"github.com/juju/utils/fslock"
     9  	"github.com/juju/utils/series"
    10  	gc "gopkg.in/check.v1"
    11  
    12  	"github.com/juju/juju/api"
    13  	apireboot "github.com/juju/juju/api/reboot"
    14  	"github.com/juju/juju/instance"
    15  	jujutesting "github.com/juju/juju/juju/testing"
    16  	"github.com/juju/juju/state"
    17  	coretesting "github.com/juju/juju/testing"
    18  	"github.com/juju/juju/worker"
    19  	"github.com/juju/juju/worker/reboot"
    20  )
    21  
    22  func TestPackage(t *stdtesting.T) {
    23  	coretesting.MgoTestPackage(t)
    24  }
    25  
    26  type machines struct {
    27  	machine     *state.Machine
    28  	stateAPI    api.Connection
    29  	rebootState apireboot.State
    30  }
    31  
    32  type rebootSuite struct {
    33  	jujutesting.JujuConnSuite
    34  
    35  	machine     *state.Machine
    36  	stateAPI    api.Connection
    37  	rebootState apireboot.State
    38  
    39  	ct            *state.Machine
    40  	ctRebootState apireboot.State
    41  
    42  	lock       *fslock.Lock
    43  	lockReboot *fslock.Lock
    44  }
    45  
    46  var _ = gc.Suite(&rebootSuite{})
    47  
    48  func (s *rebootSuite) SetUpTest(c *gc.C) {
    49  	var err error
    50  	template := state.MachineTemplate{
    51  		Series: series.LatestLts(),
    52  		Jobs:   []state.MachineJob{state.JobHostUnits},
    53  	}
    54  	s.JujuConnSuite.SetUpTest(c)
    55  
    56  	s.stateAPI, s.machine = s.OpenAPIAsNewMachine(c)
    57  	s.rebootState, err = s.stateAPI.Reboot()
    58  	c.Assert(err, jc.ErrorIsNil)
    59  	c.Assert(s.rebootState, gc.NotNil)
    60  
    61  	//Add container
    62  	s.ct, err = s.State.AddMachineInsideMachine(template, s.machine.Id(), instance.KVM)
    63  	c.Assert(err, jc.ErrorIsNil)
    64  	password, err := utils.RandomPassword()
    65  	c.Assert(err, jc.ErrorIsNil)
    66  	err = s.ct.SetPassword(password)
    67  	c.Assert(err, jc.ErrorIsNil)
    68  	err = s.ct.SetProvisioned("foo", "fake_nonce", nil)
    69  	c.Assert(err, jc.ErrorIsNil)
    70  
    71  	// Open api as container
    72  	ctState := s.OpenAPIAsMachine(c, s.ct.Tag(), password, "fake_nonce")
    73  	s.ctRebootState, err = ctState.Reboot()
    74  	c.Assert(err, jc.ErrorIsNil)
    75  	c.Assert(s.ctRebootState, gc.NotNil)
    76  
    77  	lock, err := fslock.NewLock(c.MkDir(), "fake", fslock.Defaults())
    78  	c.Assert(err, jc.ErrorIsNil)
    79  	s.lock = lock
    80  }
    81  
    82  func (s *rebootSuite) TearDownTest(c *gc.C) {
    83  	s.JujuConnSuite.TearDownTest(c)
    84  }
    85  
    86  func (s *rebootSuite) TestStartStop(c *gc.C) {
    87  	worker, err := reboot.NewReboot(s.rebootState, s.AgentConfigForTag(c, s.machine.Tag()), s.lock)
    88  	c.Assert(err, jc.ErrorIsNil)
    89  	worker.Kill()
    90  	c.Assert(worker.Wait(), gc.IsNil)
    91  }
    92  
    93  func (s *rebootSuite) TestWorkerCatchesRebootEvent(c *gc.C) {
    94  	wrk, err := reboot.NewReboot(s.rebootState, s.AgentConfigForTag(c, s.machine.Tag()), s.lock)
    95  	c.Assert(err, jc.ErrorIsNil)
    96  	err = s.rebootState.RequestReboot()
    97  	c.Assert(err, jc.ErrorIsNil)
    98  	c.Assert(wrk.Wait(), gc.Equals, worker.ErrRebootMachine)
    99  }
   100  
   101  func (s *rebootSuite) TestContainerCatchesParentFlag(c *gc.C) {
   102  	wrk, err := reboot.NewReboot(s.ctRebootState, s.AgentConfigForTag(c, s.ct.Tag()), s.lock)
   103  	c.Assert(err, jc.ErrorIsNil)
   104  	err = s.rebootState.RequestReboot()
   105  	c.Assert(err, jc.ErrorIsNil)
   106  	c.Assert(wrk.Wait(), gc.Equals, worker.ErrShutdownMachine)
   107  }
   108  
   109  func (s *rebootSuite) TestCleanupIsDoneOnBoot(c *gc.C) {
   110  	s.lock.Lock(reboot.RebootMessage)
   111  
   112  	wrk, err := reboot.NewReboot(s.rebootState, s.AgentConfigForTag(c, s.machine.Tag()), s.lock)
   113  	c.Assert(err, jc.ErrorIsNil)
   114  	wrk.Kill()
   115  	c.Assert(wrk.Wait(), gc.IsNil)
   116  
   117  	c.Assert(s.lock.IsLocked(), jc.IsFalse)
   118  }