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 }