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