func (ovs *overlordSuite) TestEnsureLoopMediatedEnsureBeforeInEnsure(c *C) { restoreIntv := overlord.MockEnsureInterval(10 * time.Minute) defer restoreIntv() o, err := overlord.New() c.Assert(err, IsNil) ensure := func(s *state.State) error { s.EnsureBefore(0) return nil } witness := &witnessManager{ state: o.State(), expectedEnsure: 2, ensureCalled: make(chan struct{}), ensureCallack: ensure, } se := o.Engine() se.AddManager(witness) o.Loop() defer o.Stop() se.State().EnsureBefore(0) select { case <-witness.ensureCalled: case <-time.After(2 * time.Second): c.Fatal("Ensure calls not happening") } }
func (ovs *overlordSuite) TestTrivialSettle(c *C) { restoreIntv := overlord.MockEnsureInterval(1 * time.Minute) defer restoreIntv() o, err := overlord.New() c.Assert(err, IsNil) se := o.Engine() s := se.State() rm1 := newRunnerManager(s) se.AddManager(rm1) defer o.Engine().Stop() s.Lock() defer s.Unlock() chg := s.NewChange("chg", "...") t1 := s.NewTask("runMgr1", "1...") chg.AddTask(t1) s.Unlock() o.Settle() s.Lock() c.Check(t1.Status(), Equals, state.DoneStatus) var v int err = s.Get("runMgr1Mark", &v) c.Check(err, IsNil) }
func (ovs *overlordSuite) TestEnsureLoopRunAndStop(c *C) { restoreIntv := overlord.MockEnsureInterval(10 * time.Millisecond) defer restoreIntv() o, err := overlord.New() c.Assert(err, IsNil) witness := &witnessManager{ state: o.State(), expectedEnsure: 2, ensureCalled: make(chan struct{}), } o.Engine().AddManager(witness) o.Loop() defer o.Stop() t0 := time.Now() select { case <-witness.ensureCalled: case <-time.After(2 * time.Second): c.Fatal("Ensure calls not happening") } c.Check(time.Since(t0) >= 20*time.Millisecond, Equals, true) err = o.Stop() c.Assert(err, IsNil) }
func (ovs *overlordSuite) TestSettleExplicitEnsureBefore(c *C) { restoreIntv := overlord.MockEnsureInterval(1 * time.Minute) defer restoreIntv() o, err := overlord.New() c.Assert(err, IsNil) se := o.Engine() s := se.State() rm1 := newRunnerManager(s) rm1.ensureCallback = func() { s.Lock() defer s.Unlock() v := 0 s.Get("ensureCount", &v) s.Set("ensureCount", v+1) } se.AddManager(rm1) defer o.Engine().Stop() s.Lock() defer s.Unlock() chg := s.NewChange("chg", "...") t := s.NewTask("runMgrEnsureBefore", "...") chg.AddTask(t) s.Unlock() o.Settle() s.Lock() c.Check(t.Status(), Equals, state.DoneStatus) var v int err = s.Get("ensureCount", &v) c.Check(err, IsNil) c.Check(v, Equals, 2) }