github.com/makyo/juju@v0.0.0-20160425123129-2608902037e9/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 func (s *rebootSuite) SetUpTest(c *gc.C) { 48 var err error 49 template := state.MachineTemplate{ 50 Series: coretesting.FakeDefaultSeries, 51 Jobs: []state.MachineJob{state.JobHostUnits}, 52 } 53 s.JujuConnSuite.SetUpTest(c) 54 55 s.stateAPI, s.machine = s.OpenAPIAsNewMachine(c) 56 s.rebootState, err = s.stateAPI.Reboot() 57 c.Assert(err, jc.ErrorIsNil) 58 c.Assert(s.rebootState, gc.NotNil) 59 60 //Add container 61 s.ct, err = s.State.AddMachineInsideMachine(template, s.machine.Id(), instance.KVM) 62 c.Assert(err, jc.ErrorIsNil) 63 password, err := utils.RandomPassword() 64 c.Assert(err, jc.ErrorIsNil) 65 err = s.ct.SetPassword(password) 66 c.Assert(err, jc.ErrorIsNil) 67 err = s.ct.SetProvisioned("foo", "fake_nonce", nil) 68 c.Assert(err, jc.ErrorIsNil) 69 70 // Open api as container 71 ctState := s.OpenAPIAsMachine(c, s.ct.Tag(), password, "fake_nonce") 72 s.ctRebootState, err = ctState.Reboot() 73 c.Assert(err, jc.ErrorIsNil) 74 c.Assert(s.ctRebootState, gc.NotNil) 75 76 lock, err := fslock.NewLock(c.MkDir(), "fake", fslock.Defaults()) 77 c.Assert(err, jc.ErrorIsNil) 78 s.lock = lock 79 } 80 81 func (s *rebootSuite) TearDownTest(c *gc.C) { 82 s.JujuConnSuite.TearDownTest(c) 83 } 84 85 func (s *rebootSuite) TestStartStop(c *gc.C) { 86 worker, err := reboot.NewReboot(s.rebootState, s.AgentConfigForTag(c, s.machine.Tag()), s.lock) 87 c.Assert(err, jc.ErrorIsNil) 88 worker.Kill() 89 c.Assert(worker.Wait(), gc.IsNil) 90 } 91 92 func (s *rebootSuite) TestWorkerCatchesRebootEvent(c *gc.C) { 93 wrk, err := reboot.NewReboot(s.rebootState, s.AgentConfigForTag(c, s.machine.Tag()), s.lock) 94 c.Assert(err, jc.ErrorIsNil) 95 err = s.rebootState.RequestReboot() 96 c.Assert(err, jc.ErrorIsNil) 97 c.Assert(wrk.Wait(), gc.Equals, worker.ErrRebootMachine) 98 } 99 100 func (s *rebootSuite) TestContainerCatchesParentFlag(c *gc.C) { 101 wrk, err := reboot.NewReboot(s.ctRebootState, s.AgentConfigForTag(c, s.ct.Tag()), s.lock) 102 c.Assert(err, jc.ErrorIsNil) 103 err = s.rebootState.RequestReboot() 104 c.Assert(err, jc.ErrorIsNil) 105 c.Assert(wrk.Wait(), gc.Equals, worker.ErrShutdownMachine) 106 } 107 108 func (s *rebootSuite) TestCleanupIsDoneOnBoot(c *gc.C) { 109 s.lock.Lock(reboot.RebootMessage) 110 111 wrk, err := reboot.NewReboot(s.rebootState, s.AgentConfigForTag(c, s.machine.Tag()), s.lock) 112 c.Assert(err, jc.ErrorIsNil) 113 wrk.Kill() 114 c.Assert(wrk.Wait(), gc.IsNil) 115 116 c.Assert(s.lock.IsLocked(), jc.IsFalse) 117 }