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