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 }