~ubuntu-branches/ubuntu/saucy/juju-core/saucy-proposed

« back to all changes in this revision

Viewing changes to src/launchpad.net/juju-core/worker/cleaner/cleaner_test.go

  • Committer: Package Import Robot
  • Author(s): James Page
  • Date: 2013-07-11 17:18:27 UTC
  • mfrom: (1.1.1)
  • Revision ID: package-import@ubuntu.com-20130711171827-vjqkg40r0dlf7ys2
Tags: 1.11.2-0ubuntu1
* New upstream release.
* Make juju-core the default juju (LP: #1190634):
  - d/control: Add virtual package juju -> juju-core.
  - d/juju-core.postinst.in: Bump priority of alternatives over that of
    python juju packages.
* Enable for all architectures (LP: #1172505):
  - d/control: Version BD on golang-go to >= 2:1.1.1 to ensure CGO
    support for non-x86 archs, make juju-core Arch: any.
  - d/README.source: Dropped - no longer required.
* d/watch: Updated for new upstream tarball naming.

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.WatchHandler = (*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
}