func (s *AssignSuite) TestAssignUnitToNewMachineBecomesDirty(c *gc.C) { _, err := s.State.AddMachine("quantal", state.JobManageEnviron) // bootstrap machine c.Assert(err, gc.IsNil) // Set up constraints to specify we want to install into a container. econs := constraints.MustParse("container=lxc") err = s.State.SetEnvironConstraints(econs) c.Assert(err, gc.IsNil) // Create some units and a clean machine. unit, err := s.wordpress.AddUnit() c.Assert(err, gc.IsNil) anotherUnit, err := s.wordpress.AddUnit() c.Assert(err, gc.IsNil) machine, err := s.State.AddMachine("quantal", state.JobHostUnits) c.Assert(err, gc.IsNil) makeDirty := state.TransactionHook{ Before: func() { c.Assert(unit.AssignToMachine(machine), gc.IsNil) }, } defer state.SetTransactionHooks( c, s.State, makeDirty, ).Check() err = anotherUnit.AssignToNewMachineOrContainer() c.Assert(err, gc.IsNil) mid, err := unit.AssignedMachineId() c.Assert(err, gc.IsNil) c.Assert(mid, gc.Equals, "1") mid, err = anotherUnit.AssignedMachineId() c.Assert(err, gc.IsNil) c.Assert(mid, gc.Equals, "2/lxc/0") }
func (s *AssignSuite) TestAssignUnitToNewMachineBecomesHost(c *gc.C) { _, err := s.State.AddMachine("quantal", state.JobManageEnviron) // bootstrap machine c.Assert(err, gc.IsNil) // Set up constraints to specify we want to install into a container. econs := constraints.MustParse("container=lxc") err = s.State.SetEnvironConstraints(econs) c.Assert(err, gc.IsNil) // Create a unit and a clean machine. unit, err := s.wordpress.AddUnit() c.Assert(err, gc.IsNil) machine, err := s.State.AddMachine("quantal", state.JobHostUnits) c.Assert(err, gc.IsNil) addContainer := state.TransactionHook{ Before: func() { _, err := s.State.AddMachineInsideMachine(state.MachineTemplate{ Series: "quantal", Jobs: []state.MachineJob{state.JobHostUnits}, }, machine.Id(), instance.LXC) c.Assert(err, gc.IsNil) }, } defer state.SetTransactionHooks( c, s.State, addContainer, ).Check() err = unit.AssignToNewMachineOrContainer() c.Assert(err, gc.IsNil) mid, err := unit.AssignedMachineId() c.Assert(err, gc.IsNil) c.Assert(mid, gc.Equals, "2/lxc/0") }
func (s *ActionSuite) TestAddActionFailsOnDeadUnitInTransaction(c *gc.C) { unit, err := s.State.Unit(s.unit.Name()) c.Assert(err, gc.IsNil) preventUnitDestroyRemove(c, unit) killUnit := state.TransactionHook{ Before: func() { c.Assert(unit.Destroy(), gc.IsNil) c.Assert(unit.EnsureDead(), gc.IsNil) }, } defer state.SetTransactionHooks(c, s.State, killUnit).Check() _, err = unit.AddAction("fakeaction", map[string]interface{}{}) c.Assert(err, gc.ErrorMatches, "unit .* is dead") }