func getAssertActionChange(actionC coretesting.ContentAsserterC) func(ids []string) { // This calls AssertReceive N times for N ids, but allows the // ids to come back in any order. return func(ids []string) { expected := make(map[string]int) seen := make(map[string]int) for _, id := range ids { expected[id] += 1 actionId := actionC.AssertReceive().(string) seen[actionId] += 1 } actionC.C.Assert(seen, jc.DeepEquals, expected) // Ensure that there are no other items remaining actionC.AssertNoReceive() } }
func (s *FilterSuite) TestResolvedEvents(c *gc.C) { f, err := newFilter(s.uniter, s.unit.Tag().String()) c.Assert(err, gc.IsNil) defer statetesting.AssertStop(c, f) resolvedAsserter := coretesting.ContentAsserterC{ C: c, Precond: func() { s.BackingState.StartSync() }, Chan: f.ResolvedEvents(), } resolvedAsserter.AssertNoReceive() // Request an event; no interesting event is available. f.WantResolvedEvent() resolvedAsserter.AssertNoReceive() // Change the unit in an irrelevant way; no events. err = s.unit.SetStatus(params.StatusError, "blarg", nil) c.Assert(err, gc.IsNil) resolvedAsserter.AssertNoReceive() // Change the unit's resolved to an interesting value; new event received. err = s.unit.SetResolved(state.ResolvedRetryHooks) c.Assert(err, gc.IsNil) assertChange := func(expect params.ResolvedMode) { rm := resolvedAsserter.AssertOneReceive().(params.ResolvedMode) c.Assert(rm, gc.Equals, expect) } assertChange(params.ResolvedRetryHooks) // Ask for the event again, and check it's resent. f.WantResolvedEvent() assertChange(params.ResolvedRetryHooks) // Clear the resolved status *via the filter*; check not resent... err = f.ClearResolved() c.Assert(err, gc.IsNil) resolvedAsserter.AssertNoReceive() // ...even when requested. f.WantResolvedEvent() resolvedAsserter.AssertNoReceive() // Induce several events; only latest state is reported. err = s.unit.SetResolved(state.ResolvedRetryHooks) c.Assert(err, gc.IsNil) err = f.ClearResolved() c.Assert(err, gc.IsNil) err = s.unit.SetResolved(state.ResolvedNoHooks) c.Assert(err, gc.IsNil) assertChange(params.ResolvedNoHooks) }