Rietveld Code Review Tool
Help | Bug tracker | Discussion group | Source code | Sign in
(13)

Delta Between Two Patch Sets: state/watch_test.go

Issue 5901058: cmd/juju: working bootstrap and destroy commands
Left Patch Set: cmd/juju: working bootstrap and destroy commands Created 13 years ago
Right Patch Set: cmd/juju: working bootstrap and destroy commands Created 12 years, 11 months ago
Left:
Right:
Use n/p to move between diff chunks; N/P to move between comments. Please Sign in to add in-line comments.
Jump to:
Right: Side by side diff | Download
« no previous file with change/comment | « state/util.go ('k') | state/watcher/watcher.go » ('j') | no next file with change/comment »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
LEFTRIGHT
(no file at all)
1 package state_test
2
3 import (
4 . "launchpad.net/gocheck"
5 "launchpad.net/juju/go/state"
6 "time"
7 )
8
9 func (s *StateSuite) TestServiceWatchConfig(c *C) {
10 dummy, _ := addDummyCharm(c, s.st)
11 wordpress, err := s.st.AddService("wordpress", dummy)
12 c.Assert(err, IsNil)
13 c.Assert(wordpress.Name(), Equals, "wordpress")
14
15 config, err := wordpress.Config()
16 c.Assert(err, IsNil)
17 c.Assert(config.Keys(), HasLen, 0)
18 configWatcher := wordpress.WatchConfig()
19
20 // Two change events.
21 config.Set("foo", "bar")
22 config.Set("baz", "yadda")
23 _, err = config.Write()
24 c.Assert(err, IsNil)
25 time.Sleep(100 * time.Millisecond)
26 config.Delete("foo")
27 _, err = config.Write()
28 c.Assert(err, IsNil)
29
30 var expectedChanges = []map[string]interface{}{
31 {},
32 {"foo": "bar", "baz": "yadda"},
33 {"baz": "yadda"},
34 }
35 for _, want := range expectedChanges {
36 select {
37 case got, ok := <-configWatcher.Changes():
38 c.Assert(ok, Equals, true)
39 c.Assert(got.Map(), DeepEquals, want)
40 case <-time.After(200 * time.Millisecond):
41 c.Fatalf("didn't get change: %#v", want)
42 }
43 }
44
45 select {
46 case got, _ := <-configWatcher.Changes():
47 c.Fatalf("got unexpected change: %#v", got)
48 case <-time.After(100 * time.Millisecond):
49 }
50
51 err = configWatcher.Stop()
52 c.Assert(err, IsNil)
53 }
54
55 func (s *StateSuite) TestServiceWatchConfigIllegalData(c *C) {
56 dummy, _ := addDummyCharm(c, s.st)
57 wordpress, err := s.st.AddService("wordpress", dummy)
58 c.Assert(err, IsNil)
59 c.Assert(wordpress.Name(), Equals, "wordpress")
60 configWatcher := wordpress.WatchConfig()
61
62 // Receive empty change after service adding.
63 select {
64 case got, ok := <-configWatcher.Changes():
65 c.Assert(ok, Equals, true)
66 c.Assert(got.Map(), DeepEquals, map[string]interface{}{})
67 case <-time.After(100 * time.Millisecond):
68 c.Fatalf("unexpected timeout")
69 }
70
71 // Set config to illegal data.
72 _, err = s.zkConn.Set("/services/service-0000000000/config", "---", -1)
73 c.Assert(err, IsNil)
74
75 select {
76 case _, ok := <-configWatcher.Changes():
77 c.Assert(ok, Equals, false)
78 case <-time.After(100 * time.Millisecond):
79 }
80
81 err = configWatcher.Stop()
82 c.Assert(err, ErrorMatches, "YAML error: .*")
83 }
84
85 func (s *StateSuite) TestUnitWatchNeedsUpgrade(c *C) {
86 dummy, _ := addDummyCharm(c, s.st)
87 wordpress, err := s.st.AddService("wordpress", dummy)
88 c.Assert(err, IsNil)
89 c.Assert(wordpress.Name(), Equals, "wordpress")
90 unit, err := wordpress.AddUnit()
91 c.Assert(err, IsNil)
92 needsUpgradeWatcher := unit.WatchNeedsUpgrade()
93
94 go func() {
95 time.Sleep(50 * time.Millisecond)
96 err = unit.SetNeedsUpgrade()
97 c.Assert(err, IsNil)
98 time.Sleep(50 * time.Millisecond)
99 err = unit.ClearNeedsUpgrade()
100 c.Assert(err, IsNil)
101 time.Sleep(50 * time.Millisecond)
102 err = unit.SetNeedsUpgrade()
103 c.Assert(err, IsNil)
104 }()
105
106 var expectedChanges = []bool{
107 true,
108 false,
109 true,
110 }
111 for _, want := range expectedChanges {
112 select {
113 case got, ok := <-needsUpgradeWatcher.Changes():
114 c.Assert(ok, Equals, true)
115 c.Assert(got, Equals, want)
116 case <-time.After(200 * time.Millisecond):
117 c.Fatalf("didn't get change: %#v", want)
118 }
119 }
120
121 select {
122 case got, _ := <-needsUpgradeWatcher.Changes():
123 c.Fatalf("got unexpected change: %#v", got)
124 case <-time.After(100 * time.Millisecond):
125 }
126
127 err = needsUpgradeWatcher.Stop()
128 c.Assert(err, IsNil)
129 }
130
131 func (s *StateSuite) TestUnitWatchResolved(c *C) {
132 dummy, _ := addDummyCharm(c, s.st)
133 wordpress, err := s.st.AddService("wordpress", dummy)
134 c.Assert(err, IsNil)
135 c.Assert(wordpress.Name(), Equals, "wordpress")
136 unit, err := wordpress.AddUnit()
137 c.Assert(err, IsNil)
138 resolvedWatcher := unit.WatchResolved()
139
140 go func() {
141 time.Sleep(50 * time.Millisecond)
142 err = unit.SetResolved(state.ResolvedRetryHooks)
143 c.Assert(err, IsNil)
144 time.Sleep(50 * time.Millisecond)
145 err = unit.ClearResolved()
146 c.Assert(err, IsNil)
147 time.Sleep(50 * time.Millisecond)
148 err = unit.SetResolved(state.ResolvedNoHooks)
149 c.Assert(err, IsNil)
150 }()
151
152 var expectedChanges = []state.ResolvedMode{
153 state.ResolvedRetryHooks,
154 state.ResolvedNone,
155 state.ResolvedNoHooks,
156 }
157 for _, want := range expectedChanges {
158 select {
159 case got, ok := <-resolvedWatcher.Changes():
160 c.Assert(ok, Equals, true)
161 c.Assert(got, Equals, want)
162 case <-time.After(200 * time.Millisecond):
163 c.Fatalf("didn't get change: %#v", want)
164 }
165 }
166
167 select {
168 case got, _ := <-resolvedWatcher.Changes():
169 c.Fatalf("got unexpected change: %#v", got)
170 case <-time.After(100 * time.Millisecond):
171 }
172
173 err = resolvedWatcher.Stop()
174 c.Assert(err, IsNil)
175 }
LEFTRIGHT

Powered by Google App Engine
RSS Feeds Recent Issues | This issue
This is Rietveld f62528b