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

Delta Between Two Patch Sets: state/state_test.go

Issue 5690051: Continued development of the machine state. (Closed)
Left Patch Set: Continued development of the machine state. Created 13 years ago
Right Patch Set: Continued development of the machine state. Created 13 years 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:
Left: Side by side diff | Download
Right: Side by side diff | Download
« no previous file with change/comment | « state/state.go ('k') | no next file » | no next file with change/comment »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
LEFTRIGHT
1 // launchpad.net/juju/go/state 1 // launchpad.net/juju/go/state
2 // 2 //
3 // Copyright (c) 2011-2012 Canonical Ltd. 3 // Copyright (c) 2011-2012 Canonical Ltd.
4 package state_test 4 package state_test
5 5
6 import ( 6 import (
7 "fmt" 7 "fmt"
8 . "launchpad.net/gocheck" 8 . "launchpad.net/gocheck"
9 "launchpad.net/gozk/zookeeper" 9 "launchpad.net/gozk/zookeeper"
10 "launchpad.net/juju/go/charm" 10 "launchpad.net/juju/go/charm"
(...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after
135 func (s StateSuite) TestGetNonExistentCharm(c *C) { 135 func (s StateSuite) TestGetNonExistentCharm(c *C) {
136 // Check that getting a non-existent charm fails nicely. 136 // Check that getting a non-existent charm fails nicely.
137 addDummyCharm(c, s.st) 137 addDummyCharm(c, s.st)
138 138
139 curl := charm.MustParseURL("local:anotherseries/dummy-1") 139 curl := charm.MustParseURL("local:anotherseries/dummy-1")
140 _, err := s.st.Charm(curl) 140 _, err := s.st.Charm(curl)
141 c.Assert(err, ErrorMatches, `charm not found: "local:anotherseries/dummy -1"`) 141 c.Assert(err, ErrorMatches, `charm not found: "local:anotherseries/dummy -1"`)
142 } 142 }
143 143
144 func (s StateSuite) TestAddMachine(c *C) { 144 func (s StateSuite) TestAddMachine(c *C) {
145 // Check that adding machines works correctly.
146 machine0, err := s.st.AddMachine() 145 machine0, err := s.st.AddMachine()
147 c.Assert(err, IsNil) 146 c.Assert(err, IsNil)
148 c.Assert(machine0.Id(), Equals, 0) 147 c.Assert(machine0.Id(), Equals, 0)
149 machine1, err := s.st.AddMachine() 148 machine1, err := s.st.AddMachine()
150 c.Assert(err, IsNil) 149 c.Assert(err, IsNil)
151 c.Assert(machine1.Id(), Equals, 1) 150 c.Assert(machine1.Id(), Equals, 1)
152 151
153 children, _, err := s.zkConn.Children("/machines") 152 children, _, err := s.zkConn.Children("/machines")
154 c.Assert(err, IsNil) 153 c.Assert(err, IsNil)
155 sort.Strings(children) 154 sort.Strings(children)
156 c.Assert(children, DeepEquals, []string{"machine-0000000000", "machine-0 000000001"}) 155 c.Assert(children, DeepEquals, []string{"machine-0000000000", "machine-0 000000001"})
157 } 156 }
158 157
159 func (s StateSuite) TestRemoveMachine(c *C) { 158 func (s StateSuite) TestRemoveMachine(c *C) {
160 // Check that removing a machine doesn't fail.
161 machine, err := s.st.AddMachine() 159 machine, err := s.st.AddMachine()
162 c.Assert(err, IsNil) 160 c.Assert(err, IsNil)
163 _, err = s.st.AddMachine() 161 _, err = s.st.AddMachine()
164 c.Assert(err, IsNil) 162 c.Assert(err, IsNil)
165 err = s.st.RemoveMachine(machine.Id()) 163 err = s.st.RemoveMachine(machine.Id())
166 c.Assert(err, IsNil) 164 c.Assert(err, IsNil)
167 165
168 children, _, err := s.zkConn.Children("/machines") 166 children, _, err := s.zkConn.Children("/machines")
169 c.Assert(err, IsNil) 167 c.Assert(err, IsNil)
170 sort.Strings(children) 168 sort.Strings(children)
171 c.Assert(children, DeepEquals, []string{"machine-0000000001"}) 169 c.Assert(children, DeepEquals, []string{"machine-0000000001"})
172 170
173 // Removing a non-existing machine has to fail. 171 // Removing a non-existing machine has to fail.
174 err = s.st.RemoveMachine(machine.Id()) 172 err = s.st.RemoveMachine(machine.Id())
175 » c.Assert(err, ErrorMatches, "machine 0 does not exist") 173 » c.Assert(err, ErrorMatches, "can't remove machine 0: machine not found")
176 } 174 }
177 175
178 func (s StateSuite) TestReadMachine(c *C) { 176 func (s StateSuite) TestReadMachine(c *C) {
179 // Check that reading a machine doesn't fail.
180 machine, err := s.st.AddMachine() 177 machine, err := s.st.AddMachine()
181 c.Assert(err, IsNil) 178 c.Assert(err, IsNil)
182 expectedId := machine.Id() 179 expectedId := machine.Id()
183 machine, err = s.st.Machine(expectedId) 180 machine, err = s.st.Machine(expectedId)
184 c.Assert(err, IsNil) 181 c.Assert(err, IsNil)
185 c.Assert(machine.Id(), Equals, expectedId) 182 c.Assert(machine.Id(), Equals, expectedId)
186 } 183 }
187 184
188 func (s StateSuite) TestReadNonExistentMachine(c *C) { 185 func (s StateSuite) TestReadNonExistentMachine(c *C) {
189 // Check that reading a non-existent machine fails nicely.
190 _, err := s.st.Machine(0) 186 _, err := s.st.Machine(0)
191 c.Assert(err, ErrorMatches, "machine 0 not found") 187 c.Assert(err, ErrorMatches, "machine 0 not found")
192 188
193 _, err = s.st.AddMachine() 189 _, err = s.st.AddMachine()
194 c.Assert(err, IsNil) 190 c.Assert(err, IsNil)
195 _, err = s.st.Machine(1) 191 _, err = s.st.Machine(1)
196 c.Assert(err, ErrorMatches, "machine 1 not found") 192 c.Assert(err, ErrorMatches, "machine 1 not found")
197 } 193 }
198 194
199 func (s StateSuite) TestAllMachines(c *C) { 195 func (s StateSuite) TestAllMachines(c *C) {
200 // Check that reading all machines works correctly.
201 machines, err := s.st.AllMachines() 196 machines, err := s.st.AllMachines()
202 c.Assert(err, IsNil) 197 c.Assert(err, IsNil)
203 c.Assert(len(machines), Equals, 0) 198 c.Assert(len(machines), Equals, 0)
204 199
205 _, err = s.st.AddMachine() 200 _, err = s.st.AddMachine()
206 c.Assert(err, IsNil) 201 c.Assert(err, IsNil)
207 machines, err = s.st.AllMachines() 202 machines, err = s.st.AllMachines()
208 c.Assert(err, IsNil) 203 c.Assert(err, IsNil)
209 c.Assert(len(machines), Equals, 1) 204 c.Assert(len(machines), Equals, 1)
210 205
211 _, err = s.st.AddMachine() 206 _, err = s.st.AddMachine()
212 c.Assert(err, IsNil) 207 c.Assert(err, IsNil)
213 machines, err = s.st.AllMachines() 208 machines, err = s.st.AllMachines()
214 c.Assert(err, IsNil) 209 c.Assert(err, IsNil)
215 c.Assert(len(machines), Equals, 2) 210 c.Assert(len(machines), Equals, 2)
216 } 211 }
217 212
218 func (s StateSuite) TestAddService(c *C) { 213 func (s StateSuite) TestAddService(c *C) {
219 // Check that adding services works correctly.
220 dummy, curl := addDummyCharm(c, s.st) 214 dummy, curl := addDummyCharm(c, s.st)
221 wordpress, err := s.st.AddService("wordpress", dummy) 215 wordpress, err := s.st.AddService("wordpress", dummy)
222 c.Assert(err, IsNil) 216 c.Assert(err, IsNil)
223 c.Assert(wordpress.Name(), Equals, "wordpress") 217 c.Assert(wordpress.Name(), Equals, "wordpress")
224 mysql, err := s.st.AddService("mysql", dummy) 218 mysql, err := s.st.AddService("mysql", dummy)
225 c.Assert(err, IsNil) 219 c.Assert(err, IsNil)
226 c.Assert(mysql.Name(), Equals, "mysql") 220 c.Assert(mysql.Name(), Equals, "mysql")
227 221
228 // Check that retrieving the new created services works correctly. 222 // Check that retrieving the new created services works correctly.
229 wordpress, err = s.st.Service("wordpress") 223 wordpress, err = s.st.Service("wordpress")
230 c.Assert(err, IsNil) 224 c.Assert(err, IsNil)
231 c.Assert(wordpress.Name(), Equals, "wordpress") 225 c.Assert(wordpress.Name(), Equals, "wordpress")
232 url, err := wordpress.CharmURL() 226 url, err := wordpress.CharmURL()
233 c.Assert(err, IsNil) 227 c.Assert(err, IsNil)
234 c.Assert(url.String(), Equals, curl.String()) 228 c.Assert(url.String(), Equals, curl.String())
235 mysql, err = s.st.Service("mysql") 229 mysql, err = s.st.Service("mysql")
236 c.Assert(err, IsNil) 230 c.Assert(err, IsNil)
237 c.Assert(mysql.Name(), Equals, "mysql") 231 c.Assert(mysql.Name(), Equals, "mysql")
238 url, err = mysql.CharmURL() 232 url, err = mysql.CharmURL()
239 c.Assert(err, IsNil) 233 c.Assert(err, IsNil)
240 c.Assert(url.String(), Equals, curl.String()) 234 c.Assert(url.String(), Equals, curl.String())
241 } 235 }
242 236
243 func (s StateSuite) TestRemoveService(c *C) { 237 func (s StateSuite) TestRemoveService(c *C) {
244 dummy, _ := addDummyCharm(c, s.st) 238 dummy, _ := addDummyCharm(c, s.st)
245 service, err := s.st.AddService("wordpress", dummy) 239 service, err := s.st.AddService("wordpress", dummy)
246 c.Assert(err, IsNil) 240 c.Assert(err, IsNil)
247 241
248 // Check that removing the service works correctly.
249 err = s.st.RemoveService(service) 242 err = s.st.RemoveService(service)
250 c.Assert(err, IsNil) 243 c.Assert(err, IsNil)
251 service, err = s.st.Service("wordpress") 244 service, err = s.st.Service("wordpress")
252 c.Assert(err, ErrorMatches, `service with name "wordpress" not found`) 245 c.Assert(err, ErrorMatches, `service with name "wordpress" not found`)
253 } 246 }
254 247
255 func (s StateSuite) TestReadNonExistentService(c *C) { 248 func (s StateSuite) TestReadNonExistentService(c *C) {
256 // Check that reading a non-existent service fails nicely.
257 _, err := s.st.Service("pressword") 249 _, err := s.st.Service("pressword")
258 c.Assert(err, ErrorMatches, `service with name "pressword" not found`) 250 c.Assert(err, ErrorMatches, `service with name "pressword" not found`)
259 } 251 }
260 252
261 func (s StateSuite) TestAllServices(c *C) { 253 func (s StateSuite) TestAllServices(c *C) {
262 // Check without existing services.
263 services, err := s.st.AllServices() 254 services, err := s.st.AllServices()
264 c.Assert(err, IsNil) 255 c.Assert(err, IsNil)
265 c.Assert(len(services), Equals, 0) 256 c.Assert(len(services), Equals, 0)
266 257
267 // Check that after adding services the result is ok. 258 // Check that after adding services the result is ok.
268 dummy, _ := addDummyCharm(c, s.st) 259 dummy, _ := addDummyCharm(c, s.st)
269 _, err = s.st.AddService("wordpress", dummy) 260 _, err = s.st.AddService("wordpress", dummy)
270 c.Assert(err, IsNil) 261 c.Assert(err, IsNil)
271 services, err = s.st.AllServices() 262 services, err = s.st.AllServices()
272 c.Assert(err, IsNil) 263 c.Assert(err, IsNil)
(...skipping 416 matching lines...) Expand 10 before | Expand all | Expand 10 after
689 err = mysqlUnit.AssignToMachine(mysqlMachine) 680 err = mysqlUnit.AssignToMachine(mysqlMachine)
690 c.Assert(err, IsNil) 681 c.Assert(err, IsNil)
691 682
692 wordpressService, err := s.st.AddService("wordpress", dummy) 683 wordpressService, err := s.st.AddService("wordpress", dummy)
693 c.Assert(err, IsNil) 684 c.Assert(err, IsNil)
694 wordpressUnit, err := wordpressService.AddUnit() 685 wordpressUnit, err := wordpressService.AddUnit()
695 c.Assert(err, IsNil) 686 c.Assert(err, IsNil)
696 687
697 _, err = wordpressUnit.AssignToUnusedMachine() 688 _, err = wordpressUnit.AssignToUnusedMachine()
698 c.Assert(err, ErrorMatches, "no unused machine found") 689 c.Assert(err, ErrorMatches, "no unused machine found")
690 }
691
692 func (s StateSuite) TestGetSetClearUnitUpgrate(c *C) {
693 // Check that setting and clearing an upgrade flag on a unit works.
694 dummy, _ := addDummyCharm(c, s.st)
695 wordpress, err := s.st.AddService("wordpress", dummy)
696 c.Assert(err, IsNil)
697 unit, err := wordpress.AddUnit()
698 c.Assert(err, IsNil)
699
700 // Defaults to false.
701 upgrade, err := unit.NeedsUpgrade()
702 c.Assert(err, IsNil)
703 c.Assert(upgrade, Equals, false)
704
705 // Can be set.
706 err = unit.SetNeedsUpgrade()
707 c.Assert(err, IsNil)
708 upgrade, err = unit.NeedsUpgrade()
709 c.Assert(err, IsNil)
710 c.Assert(upgrade, Equals, true)
711
712 // Can be set multiple times.
713 err = unit.SetNeedsUpgrade()
714 c.Assert(err, IsNil)
715 upgrade, err = unit.NeedsUpgrade()
716 c.Assert(err, IsNil)
717 c.Assert(upgrade, Equals, true)
718
719 // Can be cleared.
720 err = unit.ClearNeedsUpgrade()
721 c.Assert(err, IsNil)
722 upgrade, err = unit.NeedsUpgrade()
723 c.Assert(err, IsNil)
724 c.Assert(upgrade, Equals, false)
725
726 // Can be cleared multiple times
727 err = unit.ClearNeedsUpgrade()
728 c.Assert(err, IsNil)
729 upgrade, err = unit.NeedsUpgrade()
730 c.Assert(err, IsNil)
731 c.Assert(upgrade, Equals, false)
732 }
733
734 func (s StateSuite) TestGetSetClearResolved(c *C) {
735 // Check that setting and clearing the resolved setting on a unit works.
736 dummy, _ := addDummyCharm(c, s.st)
737 wordpress, err := s.st.AddService("wordpress", dummy)
738 c.Assert(err, IsNil)
739 unit, err := wordpress.AddUnit()
740 c.Assert(err, IsNil)
741
742 setting, err := unit.Resolved()
743 c.Assert(err, IsNil)
744 c.Assert(setting, Equals, state.ResolvedNone)
745
746 err = unit.SetResolved(state.ResolvedNoHooks)
747 c.Assert(err, IsNil)
748 err = unit.SetResolved(state.ResolvedNoHooks)
749 c.Assert(err, ErrorMatches, `unit "wordpress/0" resolved flag already se t`)
750 retry, err := unit.Resolved()
751 c.Assert(err, IsNil)
752 c.Assert(retry, Equals, state.ResolvedNoHooks)
753
754 err = unit.ClearResolved()
755 c.Assert(err, IsNil)
756 setting, err = unit.Resolved()
757 c.Assert(err, IsNil)
758 c.Assert(setting, Equals, state.ResolvedNone)
759 err = unit.ClearResolved()
760 c.Assert(err, IsNil)
761
762 err = unit.SetResolved(state.ResolvedMode(999))
763 c.Assert(err, ErrorMatches, `invalid error resolution mode: 999`)
764 }
765
766 func (s StateSuite) TestGetOpenPorts(c *C) {
767 // Check that changes to the open ports of units work porperly.
768 dummy, _ := addDummyCharm(c, s.st)
769 wordpress, err := s.st.AddService("wordpress", dummy)
770 c.Assert(err, IsNil)
771 unit, err := wordpress.AddUnit()
772 c.Assert(err, IsNil)
773
774 // Verify no open ports before activity.
775 open, err := unit.OpenPorts()
776 c.Assert(err, IsNil)
777 c.Assert(open, HasLen, 0)
778
779 // Now open and close port.
780 err = unit.OpenPort("tcp", 80)
781 c.Assert(err, IsNil)
782 open, err = unit.OpenPorts()
783 c.Assert(err, IsNil)
784 c.Assert(open, DeepEquals, []state.Port{
785 {"tcp", 80},
786 })
787
788 err = unit.OpenPort("udp", 53)
789 c.Assert(err, IsNil)
790 open, err = unit.OpenPorts()
791 c.Assert(err, IsNil)
792 c.Assert(open, DeepEquals, []state.Port{
793 {"tcp", 80},
794 {"udp", 53},
795 })
796
797 err = unit.OpenPort("tcp", 53)
798 c.Assert(err, IsNil)
799 open, err = unit.OpenPorts()
800 c.Assert(err, IsNil)
801 c.Assert(open, DeepEquals, []state.Port{
802 {"tcp", 80},
803 {"udp", 53},
804 {"tcp", 53},
805 })
806
807 err = unit.OpenPort("tcp", 443)
808 c.Assert(err, IsNil)
809 open, err = unit.OpenPorts()
810 c.Assert(err, IsNil)
811 c.Assert(open, DeepEquals, []state.Port{
812 {"tcp", 80},
813 {"udp", 53},
814 {"tcp", 53},
815 {"tcp", 443},
816 })
817
818 err = unit.ClosePort("tcp", 80)
819 c.Assert(err, IsNil)
820 open, err = unit.OpenPorts()
821 c.Assert(err, IsNil)
822 c.Assert(open, DeepEquals, []state.Port{
823 {"udp", 53},
824 {"tcp", 53},
825 {"tcp", 443},
826 })
699 } 827 }
700 828
701 // zkRemoveTree recursively removes a tree. 829 // zkRemoveTree recursively removes a tree.
702 func zkRemoveTree(zk *zookeeper.Conn, path string) error { 830 func zkRemoveTree(zk *zookeeper.Conn, path string) error {
703 // First recursively delete the children. 831 // First recursively delete the children.
704 children, _, err := zk.Children(path) 832 children, _, err := zk.Children(path)
705 if err != nil { 833 if err != nil {
706 return err 834 return err
707 } 835 }
708 for _, child := range children { 836 for _, child := range children {
709 if err = zkRemoveTree(zk, fmt.Sprintf("%s/%s", path, child)); er r != nil { 837 if err = zkRemoveTree(zk, fmt.Sprintf("%s/%s", path, child)); er r != nil {
710 return err 838 return err
711 } 839 }
712 } 840 }
713 // Now delete the path itself. 841 // Now delete the path itself.
714 return zk.Delete(path, -1) 842 return zk.Delete(path, -1)
715 } 843 }
LEFTRIGHT

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