func (s *HookSenderSuite) TestHandlesUpdatesEmptyQueueSpam(c *gc.C) { source := hooktesting.NewEmptySource() defer statetesting.AssertStop(c, source) out := make(chan hook.Info) sender := hook.NewSender(out, source) defer statetesting.AssertStop(c, sender) // Spam all channels continuously for a bit. timeout := time.After(coretesting.LongWait) changeCount := 0 updateCount := 0 for i := 0; i < 100; i++ { select { case hi, ok := <-out: c.Fatalf("got unexpected hook: %#v %#v", hi, ok) case source.ChangesC <- source.NewChange("sent"): changeCount++ case update, ok := <-source.UpdatesC: c.Assert(ok, jc.IsTrue) c.Assert(update, gc.Equals, "sent") updateCount++ case <-timeout: c.Fatalf("not enough things happened in time") } } // Check sane end state. c.Check(changeCount, gc.Equals, 50) c.Check(updateCount, gc.Equals, 50) }
func (s *PeekerSuite) TestUpdatesEmptyQueueSpam(c *gc.C) { source := hooktesting.NewEmptySource() defer statetesting.AssertStop(c, source) peeker := hook.NewPeeker(source) defer statetesting.AssertStop(c, peeker) // Spam all channels continuously for a bit. timeout := time.After(coretesting.LongWait) changeCount := 0 updateCount := 0 for i := 0; i < 100; i++ { select { case peek, ok := <-peeker.Peeks(): c.Fatalf("got unexpected peek: %#v %#v", peek, ok) case source.ChangesC <- source.NewChange("!"): changeCount++ case update, ok := <-source.UpdatesC: c.Assert(ok, jc.IsTrue) c.Assert(update, gc.Equals, "!") updateCount++ case <-timeout: c.Fatalf("not enough things happened in time") } } // Check sane end state. c.Check(changeCount, gc.Equals, 50) c.Check(updateCount, gc.Equals, 50) }
func (s *HookSenderSuite) TestHandlesUpdatesEmptyQueue(c *gc.C) { source := hooktesting.NewEmptySource() defer statetesting.AssertStop(c, source) out := make(chan hook.Info) sender := hook.NewSender(out, source) defer statetesting.AssertStop(c, sender) // Check no hooks are sent and no updates delivered. assertIdle := func() { select { case hi, ok := <-out: c.Fatalf("got unexpected hook: %#v %#v", hi, ok) case update, ok := <-source.UpdatesC: c.Fatalf("got unexpected update: %#v %#v", update, ok) case <-time.After(coretesting.ShortWait): } } assertIdle() // Send an event on the Changes() chan. timeout := time.After(coretesting.LongWait) select { case source.ChangesC <- source.NewChange("sent"): case <-timeout: c.Fatalf("timed out") } // Now that a change has been delivered, nothing should be sent on the out // chan, or read from the changes chan, until the Update method has completed. select { case source.ChangesC <- source.NewChange("notSent"): c.Fatalf("sent extra update while updating queue") case hi, ok := <-out: c.Fatalf("got unexpected hook while updating queue: %#v %#v", hi, ok) case got, ok := <-source.UpdatesC: c.Assert(ok, jc.IsTrue) c.Assert(got, gc.Equals, "sent") case <-timeout: c.Fatalf("timed out") } // Now the change has been delivered, nothing should be happening. assertIdle() }