295
func (s *FilterSuite) TestRelationsEvents(c *C) {
296
f, err := newFilter(s.State, s.unit.Name())
300
assertNoChange := func() {
303
case ids := <-f.RelationsEvents():
304
c.Fatalf("unexpected relations event %#v", ids)
305
case <-time.After(50 * time.Millisecond):
310
// Add a couple of relations; check the event.
311
rel0 := s.addRelation(c)
312
rel1 := s.addRelation(c)
313
assertChange := func(ids []int) {
316
case got := <-f.RelationsEvents():
317
expect := map[int]struct{}{}
318
for _, id := range ids {
319
expect[id] = struct{}{}
321
c.Assert(got, DeepEquals, expect)
322
case <-time.After(50 * time.Millisecond):
323
c.Fatalf("timed out")
326
assertChange([]int{0, 1})
329
// Add another relation, and change another's Life; check event.
331
err = rel0.EnsureDying()
333
assertChange([]int{0, 2})
336
// Remove a relation completely; check event.
337
err = rel1.EnsureDead()
339
err = s.State.RemoveRelation(rel1)
341
assertChange([]int{1})
344
// Start a new filter, check initial event.
345
f, err = newFilter(s.State, s.unit.Name())
348
assertChange([]int{0, 2})
352
func (s *FilterSuite) addRelation(c *C) *state.Relation {
353
rels, err := s.svc.Relations()
355
rel, err := s.State.AddRelation(state.RelationEndpoint{
356
"dummy", "ifce", fmt.Sprintf("rel%d", len(rels)), state.RolePeer, charm.ScopeGlobal,