~fwereade/juju-core/uniter-relations-firmer-sketch

« back to all changes in this revision

Viewing changes to worker/uniter/filter_test.go

  • Committer: William Reade
  • Date: 2012-10-11 08:39:05 UTC
  • Revision ID: fwereade@gmail.com-20121011083905-ce8u2mpvxocrlix6
add relation events to filter

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
1
package uniter
2
2
 
3
3
import (
 
4
        "fmt"
4
5
        . "launchpad.net/gocheck"
5
6
        "launchpad.net/juju-core/charm"
6
7
        "launchpad.net/juju-core/juju/testing"
290
291
        assertChange()
291
292
        assertNoChange()
292
293
}
 
294
 
 
295
func (s *FilterSuite) TestRelationsEvents(c *C) {
 
296
        f, err := newFilter(s.State, s.unit.Name())
 
297
        c.Assert(err, IsNil)
 
298
        defer f.Stop()
 
299
 
 
300
        assertNoChange := func() {
 
301
                s.State.Sync()
 
302
                select {
 
303
                case ids := <-f.RelationsEvents():
 
304
                        c.Fatalf("unexpected relations event %#v", ids)
 
305
                case <-time.After(50 * time.Millisecond):
 
306
                }
 
307
        }
 
308
        assertNoChange()
 
309
 
 
310
        // Add a couple of relations; check the event.
 
311
        rel0 := s.addRelation(c)
 
312
        rel1 := s.addRelation(c)
 
313
        assertChange := func(ids []int) {
 
314
                s.State.Sync()
 
315
                select {
 
316
                case got := <-f.RelationsEvents():
 
317
                        expect := map[int]struct{}{}
 
318
                        for _, id := range ids {
 
319
                                expect[id] = struct{}{}
 
320
                        }
 
321
                        c.Assert(got, DeepEquals, expect)
 
322
                case <-time.After(50 * time.Millisecond):
 
323
                        c.Fatalf("timed out")
 
324
                }
 
325
        }
 
326
        assertChange([]int{0, 1})
 
327
        assertNoChange()
 
328
 
 
329
        // Add another relation, and change another's Life; check event.
 
330
        s.addRelation(c)
 
331
        err = rel0.EnsureDying()
 
332
        c.Assert(err, IsNil)
 
333
        assertChange([]int{0, 2})
 
334
        assertNoChange()
 
335
 
 
336
        // Remove a relation completely; check event.
 
337
        err = rel1.EnsureDead()
 
338
        c.Assert(err, IsNil)
 
339
        err = s.State.RemoveRelation(rel1)
 
340
        c.Assert(err, IsNil)
 
341
        assertChange([]int{1})
 
342
        assertNoChange()
 
343
 
 
344
        // Start a new filter, check initial event.
 
345
        f, err = newFilter(s.State, s.unit.Name())
 
346
        c.Assert(err, IsNil)
 
347
        defer f.Stop()
 
348
        assertChange([]int{0, 2})
 
349
        assertNoChange()
 
350
}
 
351
 
 
352
func (s *FilterSuite) addRelation(c *C) *state.Relation {
 
353
        rels, err := s.svc.Relations()
 
354
        c.Assert(err, IsNil)
 
355
        rel, err := s.State.AddRelation(state.RelationEndpoint{
 
356
                "dummy", "ifce", fmt.Sprintf("rel%d", len(rels)), state.RolePeer, charm.ScopeGlobal,
 
357
        })
 
358
        c.Assert(err, IsNil)
 
359
        return rel
 
360
}