func (s *PeekerSuite) TestPeeks(c *gc.C) { expect := hooktesting.HookList(hooks.Install, hooks.ConfigChanged, hooks.Start) source := hook.NewListSource(expect) peeker := hook.NewPeeker(source) defer statetesting.AssertStop(c, peeker) timeout := time.After(coretesting.LongWait) for _, expectInfo := range expect { select { case peek, ok := <-peeker.Peeks(): c.Assert(ok, jc.IsTrue) c.Assert(peek.HookInfo(), gc.Equals, expectInfo) peek.Reject() case <-timeout: c.Fatalf("ran out of time") } select { case peek, ok := <-peeker.Peeks(): c.Assert(ok, jc.IsTrue) c.Assert(peek.HookInfo(), gc.Equals, expectInfo) peek.Consume() case <-timeout: c.Fatalf("ran out of time") } } select { case <-time.After(coretesting.ShortWait): case peek, ok := <-peeker.Peeks(): c.Fatalf("unexpected peek from empty queue: %#v, %#v", peek, ok) } }
func (s *ListSourceSuite) TestQueue(c *gc.C) { for i, test := range [][]hook.Info{ hooktesting.HookList(), hooktesting.HookList(hooks.Install, hooks.Install), hooktesting.HookList(hooks.Stop, hooks.Start, hooks.Stop), } { c.Logf("test %d: %v", i, test) source := hook.NewListSource(test) for _, expect := range test { c.Check(source.Empty(), jc.IsFalse) c.Check(source.Next(), gc.DeepEquals, expect) source.Pop() } c.Check(source.Empty(), jc.IsTrue) c.Check(source.Next, gc.PanicMatches, "Source is empty") c.Check(source.Pop, gc.PanicMatches, "Source is empty") } }
func (s *ListSourceSuite) TestNoUpdates(c *gc.C) { source := hook.NewListSource(hooktesting.HookList(hooks.Start, hooks.Stop)) c.Check(source.Changes(), gc.IsNil) ch := source.Changes() c.Check(ch, gc.IsNil) err := source.Stop() c.Check(err, jc.ErrorIsNil) }
func (s *HookSenderSuite) TestStopsHooks(c *gc.C) { expect := hooktesting.HookList(hooks.Install, hooks.ConfigChanged, hooks.Start) source := hook.NewListSource(expect) out := make(chan hook.Info) sender := hook.NewSender(out, source) defer statetesting.AssertStop(c, sender) assertNext(c, out, expect[0]) assertNext(c, out, expect[1]) statetesting.AssertStop(c, sender) assertEmpty(c, out) c.Assert(source.Next(), gc.Equals, expect[2]) }
func (s *HookSenderSuite) TestSendsHooks(c *gc.C) { expect := hooktesting.HookList(hooks.Install, hooks.ConfigChanged, hooks.Start) source := hook.NewListSource(expect) out := make(chan hook.Info) sender := hook.NewSender(out, source) defer statetesting.AssertStop(c, sender) for i := range expect { assertNext(c, out, expect[i]) } assertEmpty(c, out) statetesting.AssertStop(c, sender) c.Assert(source.Empty(), jc.IsTrue) }