~themue/juju-core/027-http-synctools

« back to all changes in this revision

Viewing changes to worker/cleaner/cleaner_test.go

  • Committer: Tarmac
  • Author(s): Frank Mueller
  • Date: 2013-06-14 08:08:27 UTC
  • mfrom: (1253.4.7 juju-core)
  • Revision ID: tarmac-20130614080827-ro5z9b8h1i5k37ow
[r=jameinel] cleaner: implemented the cleaner worker

The cleaner worker listens to events raised by
the cleaner watcher. This signals that there are documents
marked for removal. So the worker calls state.Cleanup()
to remove them.

https://codereview.appspot.com/10148045/

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
// Copyright 2013 Canonical Ltd.
 
2
// Licensed under the AGPLv3, see LICENCE file for details.
 
3
 
 
4
package cleaner_test
 
5
 
 
6
import (
 
7
        . "launchpad.net/gocheck"
 
8
        "launchpad.net/juju-core/juju/testing"
 
9
        coretesting "launchpad.net/juju-core/testing"
 
10
        "launchpad.net/juju-core/worker"
 
11
        "launchpad.net/juju-core/worker/cleaner"
 
12
        stdtesting "testing"
 
13
        "time"
 
14
)
 
15
 
 
16
func TestPackage(t *stdtesting.T) {
 
17
        coretesting.MgoTestPackage(t)
 
18
}
 
19
 
 
20
type CleanerSuite struct {
 
21
        testing.JujuConnSuite
 
22
}
 
23
 
 
24
var _ = Suite(&CleanerSuite{})
 
25
 
 
26
var _ worker.Worker = (*cleaner.Cleaner)(nil)
 
27
 
 
28
func (s *CleanerSuite) TestCleaner(c *C) {
 
29
        cr := cleaner.NewCleaner(s.State)
 
30
        defer func() { c.Assert(cr.Stop(), IsNil) }()
 
31
 
 
32
        needed, err := s.State.NeedsCleanup()
 
33
        c.Assert(err, IsNil)
 
34
        c.Assert(needed, Equals, false)
 
35
 
 
36
        _, err = s.State.AddService("wordpress", s.AddTestingCharm(c, "wordpress"))
 
37
        c.Assert(err, IsNil)
 
38
        _, err = s.State.AddService("mysql", s.AddTestingCharm(c, "mysql"))
 
39
        c.Assert(err, IsNil)
 
40
        eps, err := s.State.InferEndpoints([]string{"wordpress", "mysql"})
 
41
        c.Assert(err, IsNil)
 
42
        relM, err := s.State.AddRelation(eps...)
 
43
        c.Assert(err, IsNil)
 
44
 
 
45
        needed, err = s.State.NeedsCleanup()
 
46
        c.Assert(err, IsNil)
 
47
        c.Assert(needed, Equals, false)
 
48
 
 
49
        // Observe destroying of the relation with a watcher.
 
50
        cw := s.State.WatchCleanups()
 
51
        defer func() { c.Assert(cw.Stop(), IsNil) }()
 
52
 
 
53
        err = relM.Destroy()
 
54
        c.Assert(err, IsNil)
 
55
 
 
56
        timeout := time.After(500 * time.Millisecond)
 
57
        for {
 
58
                s.State.StartSync()
 
59
                select {
 
60
                case <-time.After(50 * time.Millisecond):
 
61
                        continue
 
62
                case <-timeout:
 
63
                        c.Fatalf("timed out waiting for cleanup")
 
64
                case <-cw.Changes():
 
65
                        needed, err = s.State.NeedsCleanup()
 
66
                        c.Assert(err, IsNil)
 
67
                        if needed {
 
68
                                continue
 
69
                        }
 
70
                }
 
71
                break
 
72
        }
 
73
}