Left: | ||
Right: |
OLD | NEW |
---|---|
1 package state_test | 1 package state_test |
2 | 2 |
3 import ( | 3 import ( |
4 "fmt" | 4 "fmt" |
5 . "launchpad.net/gocheck" | 5 . "launchpad.net/gocheck" |
6 "launchpad.net/gozk/zookeeper" | 6 "launchpad.net/gozk/zookeeper" |
7 "launchpad.net/juju/go/charm" | 7 "launchpad.net/juju/go/charm" |
8 "launchpad.net/juju/go/state" | 8 "launchpad.net/juju/go/state" |
9 "launchpad.net/juju/go/testing" | 9 "launchpad.net/juju/go/testing" |
10 "net/url" | 10 "net/url" |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
48 s.ch = testing.Charms.Dir("dummy") | 48 s.ch = testing.Charms.Dir("dummy") |
49 url := fmt.Sprintf("local:series/%s-%d", s.ch.Meta().Name, s.ch.Revision ()) | 49 url := fmt.Sprintf("local:series/%s-%d", s.ch.Meta().Name, s.ch.Revision ()) |
50 s.curl = charm.MustParseURL(url) | 50 s.curl = charm.MustParseURL(url) |
51 } | 51 } |
52 | 52 |
53 func (s *StateSuite) TearDownTest(c *C) { | 53 func (s *StateSuite) TearDownTest(c *C) { |
54 testing.ZkRemoveTree(s.zkConn, "/") | 54 testing.ZkRemoveTree(s.zkConn, "/") |
55 s.zkConn.Close() | 55 s.zkConn.Close() |
56 } | 56 } |
57 | 57 |
58 func (s *StateSuite) assertMachineCount(c *C, expect int) { | |
59 ms, err := s.st.AllMachines() | |
60 c.Assert(err, IsNil) | |
61 c.Assert(len(ms), Equals, expect) | |
62 } | |
63 | |
58 func (s *StateSuite) TestInitialize(c *C) { | 64 func (s *StateSuite) TestInitialize(c *C) { |
59 info := &state.Info{ | 65 info := &state.Info{ |
60 Addrs: []string{state.TestingZkAddr}, | 66 Addrs: []string{state.TestingZkAddr}, |
61 } | 67 } |
62 // Check that initialization of an already-initialized state succeeds. | 68 // Check that initialization of an already-initialized state succeeds. |
63 st, err := state.Initialize(info) | 69 st, err := state.Initialize(info) |
64 c.Assert(err, IsNil) | 70 c.Assert(err, IsNil) |
65 c.Assert(st, NotNil) | 71 c.Assert(st, NotNil) |
66 st.Close() | 72 st.Close() |
67 | 73 |
(...skipping 185 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
253 _, err := s.st.Machine(0) | 259 _, err := s.st.Machine(0) |
254 c.Assert(err, ErrorMatches, "machine 0 not found") | 260 c.Assert(err, ErrorMatches, "machine 0 not found") |
255 | 261 |
256 _, err = s.st.AddMachine() | 262 _, err = s.st.AddMachine() |
257 c.Assert(err, IsNil) | 263 c.Assert(err, IsNil) |
258 _, err = s.st.Machine(1) | 264 _, err = s.st.Machine(1) |
259 c.Assert(err, ErrorMatches, "machine 1 not found") | 265 c.Assert(err, ErrorMatches, "machine 1 not found") |
260 } | 266 } |
261 | 267 |
262 func (s *StateSuite) TestAllMachines(c *C) { | 268 func (s *StateSuite) TestAllMachines(c *C) { |
263 » machines, err := s.st.AllMachines() | 269 » s.assertMachineCount(c, 0) |
270 » _, err := s.st.AddMachine() | |
264 c.Assert(err, IsNil) | 271 c.Assert(err, IsNil) |
265 » c.Assert(len(machines), Equals, 0) | 272 » s.assertMachineCount(c, 1) |
266 | |
267 _, err = s.st.AddMachine() | 273 _, err = s.st.AddMachine() |
268 c.Assert(err, IsNil) | 274 c.Assert(err, IsNil) |
269 » machines, err = s.st.AllMachines() | 275 » s.assertMachineCount(c, 2) |
270 » c.Assert(err, IsNil) | |
271 » c.Assert(len(machines), Equals, 1) | |
272 | |
273 » _, err = s.st.AddMachine() | |
274 » c.Assert(err, IsNil) | |
275 » machines, err = s.st.AllMachines() | |
276 » c.Assert(err, IsNil) | |
277 » c.Assert(len(machines), Equals, 2) | |
278 } | 276 } |
279 | 277 |
280 func (s *StateSuite) TestMachineSetAgentAlive(c *C) { | 278 func (s *StateSuite) TestMachineSetAgentAlive(c *C) { |
281 machine0, err := s.st.AddMachine() | 279 machine0, err := s.st.AddMachine() |
282 c.Assert(err, IsNil) | 280 c.Assert(err, IsNil) |
283 c.Assert(machine0.Id(), Equals, 0) | 281 c.Assert(machine0.Id(), Equals, 0) |
284 | 282 |
285 alive, err := machine0.AgentAlive() | 283 alive, err := machine0.AgentAlive() |
286 c.Assert(err, IsNil) | 284 c.Assert(err, IsNil) |
287 c.Assert(alive, Equals, false) | 285 c.Assert(alive, Equals, false) |
(...skipping 388 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
676 err = s.st.RemoveService(wordpress) | 674 err = s.st.RemoveService(wordpress) |
677 c.Assert(err, IsNil) | 675 c.Assert(err, IsNil) |
678 | 676 |
679 err = unit.UnassignFromMachine() | 677 err = unit.UnassignFromMachine() |
680 c.Assert(err, ErrorMatches, "environment state has changed") | 678 c.Assert(err, ErrorMatches, "environment state has changed") |
681 _, err = unit.AssignedMachineId() | 679 _, err = unit.AssignedMachineId() |
682 c.Assert(err, ErrorMatches, "environment state has changed") | 680 c.Assert(err, ErrorMatches, "environment state has changed") |
683 } | 681 } |
684 | 682 |
685 func (s *StateSuite) TestAssignUnitToUnusedMachine(c *C) { | 683 func (s *StateSuite) TestAssignUnitToUnusedMachine(c *C) { |
686 » // Create root machine that shouldn't be useds. | 684 » // Create root machine that shouldn't be used. |
687 _, err := s.st.AddMachine() | 685 _, err := s.st.AddMachine() |
688 c.Assert(err, IsNil) | 686 c.Assert(err, IsNil) |
689 // Check that a unit can be assigned to an unused machine. | 687 // Check that a unit can be assigned to an unused machine. |
690 dummy := s.addDummyCharm(c) | 688 dummy := s.addDummyCharm(c) |
691 mysqlService, err := s.st.AddService("mysql", dummy) | 689 mysqlService, err := s.st.AddService("mysql", dummy) |
692 c.Assert(err, IsNil) | 690 c.Assert(err, IsNil) |
693 mysqlUnit, err := mysqlService.AddUnit() | 691 mysqlUnit, err := mysqlService.AddUnit() |
694 c.Assert(err, IsNil) | 692 c.Assert(err, IsNil) |
695 mysqlMachine, err := s.st.AddMachine() | 693 mysqlMachine, err := s.st.AddMachine() |
696 c.Assert(err, IsNil) | 694 c.Assert(err, IsNil) |
697 err = mysqlUnit.AssignToMachine(mysqlMachine) | 695 err = mysqlUnit.AssignToMachine(mysqlMachine) |
698 c.Assert(err, IsNil) | 696 c.Assert(err, IsNil) |
699 err = s.st.RemoveService(mysqlService) | 697 err = s.st.RemoveService(mysqlService) |
700 c.Assert(err, IsNil) | 698 c.Assert(err, IsNil) |
701 | 699 |
702 wordpressService, err := s.st.AddService("wordpress", dummy) | 700 wordpressService, err := s.st.AddService("wordpress", dummy) |
703 c.Assert(err, IsNil) | 701 c.Assert(err, IsNil) |
704 wordpressUnit, err := wordpressService.AddUnit() | 702 wordpressUnit, err := wordpressService.AddUnit() |
705 c.Assert(err, IsNil) | 703 c.Assert(err, IsNil) |
706 wordpressMachine, err := wordpressUnit.AssignToUnusedMachine() | 704 wordpressMachine, err := wordpressUnit.AssignToUnusedMachine() |
707 c.Assert(err, IsNil) | 705 c.Assert(err, IsNil) |
708 | 706 |
709 c.Assert(wordpressMachine.Id(), Equals, mysqlMachine.Id()) | 707 c.Assert(wordpressMachine.Id(), Equals, mysqlMachine.Id()) |
710 } | 708 } |
711 | 709 |
712 func (s *StateSuite) TestAssignUnitToUnusedMachineWithChangingService(c *C) { | 710 func (s *StateSuite) TestAssignUnitToUnusedMachineWithChangingService(c *C) { |
713 » // Create root machine that shouldn't be useds. | 711 » // Create root machine that shouldn't be used. |
714 _, err := s.st.AddMachine() | 712 _, err := s.st.AddMachine() |
715 c.Assert(err, IsNil) | 713 c.Assert(err, IsNil) |
716 // Check for a 'state changed' error if a service is manipulated | 714 // Check for a 'state changed' error if a service is manipulated |
717 // during reuse. | 715 // during reuse. |
718 dummy := s.addDummyCharm(c) | 716 dummy := s.addDummyCharm(c) |
719 mysqlService, err := s.st.AddService("mysql", dummy) | 717 mysqlService, err := s.st.AddService("mysql", dummy) |
720 c.Assert(err, IsNil) | 718 c.Assert(err, IsNil) |
721 mysqlUnit, err := mysqlService.AddUnit() | 719 mysqlUnit, err := mysqlService.AddUnit() |
722 c.Assert(err, IsNil) | 720 c.Assert(err, IsNil) |
723 mysqlMachine, err := s.st.AddMachine() | 721 mysqlMachine, err := s.st.AddMachine() |
724 c.Assert(err, IsNil) | 722 c.Assert(err, IsNil) |
725 err = mysqlUnit.AssignToMachine(mysqlMachine) | 723 err = mysqlUnit.AssignToMachine(mysqlMachine) |
726 c.Assert(err, IsNil) | 724 c.Assert(err, IsNil) |
727 err = s.st.RemoveService(mysqlService) | 725 err = s.st.RemoveService(mysqlService) |
728 c.Assert(err, IsNil) | 726 c.Assert(err, IsNil) |
729 | 727 |
730 wordpressService, err := s.st.AddService("wordpress", dummy) | 728 wordpressService, err := s.st.AddService("wordpress", dummy) |
731 c.Assert(err, IsNil) | 729 c.Assert(err, IsNil) |
732 wordpressUnit, err := wordpressService.AddUnit() | 730 wordpressUnit, err := wordpressService.AddUnit() |
733 c.Assert(err, IsNil) | 731 c.Assert(err, IsNil) |
734 err = s.st.RemoveService(wordpressService) | 732 err = s.st.RemoveService(wordpressService) |
735 c.Assert(err, IsNil) | 733 c.Assert(err, IsNil) |
736 | 734 |
737 _, err = wordpressUnit.AssignToUnusedMachine() | 735 _, err = wordpressUnit.AssignToUnusedMachine() |
738 c.Assert(err, ErrorMatches, "environment state has changed") | 736 c.Assert(err, ErrorMatches, "environment state has changed") |
739 } | 737 } |
740 | 738 |
741 func (s *StateSuite) TestAssignUnitToUnusedMachineWithChangingUnit(c *C) { | 739 func (s *StateSuite) TestAssignUnitToUnusedMachineWithChangingUnit(c *C) { |
742 » // Create root machine that shouldn't be useds. | 740 » // Create root machine that shouldn't be used. |
743 _, err := s.st.AddMachine() | 741 _, err := s.st.AddMachine() |
744 c.Assert(err, IsNil) | 742 c.Assert(err, IsNil) |
745 // Check for a 'state changed' error if a unit is manipulated | 743 // Check for a 'state changed' error if a unit is manipulated |
746 // during reuse. | 744 // during reuse. |
747 dummy := s.addDummyCharm(c) | 745 dummy := s.addDummyCharm(c) |
748 mysqlService, err := s.st.AddService("mysql", dummy) | 746 mysqlService, err := s.st.AddService("mysql", dummy) |
749 c.Assert(err, IsNil) | 747 c.Assert(err, IsNil) |
750 mysqlUnit, err := mysqlService.AddUnit() | 748 mysqlUnit, err := mysqlService.AddUnit() |
751 c.Assert(err, IsNil) | 749 c.Assert(err, IsNil) |
752 mysqlMachine, err := s.st.AddMachine() | 750 mysqlMachine, err := s.st.AddMachine() |
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
799 | 797 |
800 wordpressService, err := s.st.AddService("wordpress", dummy) | 798 wordpressService, err := s.st.AddService("wordpress", dummy) |
801 c.Assert(err, IsNil) | 799 c.Assert(err, IsNil) |
802 wordpressUnit, err := wordpressService.AddUnit() | 800 wordpressUnit, err := wordpressService.AddUnit() |
803 c.Assert(err, IsNil) | 801 c.Assert(err, IsNil) |
804 | 802 |
805 _, err = wordpressUnit.AssignToUnusedMachine() | 803 _, err = wordpressUnit.AssignToUnusedMachine() |
806 c.Assert(err, ErrorMatches, "no unused machine found") | 804 c.Assert(err, ErrorMatches, "no unused machine found") |
807 } | 805 } |
808 | 806 |
807 func (s *StateSuite) TestAssignUnit(c *C) { | |
808 _, err := s.st.AddMachine() | |
809 c.Assert(err, IsNil) | |
810 dummy := s.addDummyCharm(c) | |
811 serv, err := s.st.AddService("minecraft", dummy) | |
812 c.Assert(err, IsNil) | |
813 unit0, err := serv.AddUnit() | |
814 c.Assert(err, IsNil) | |
815 | |
816 // Check nonsensical policy | |
817 fail := func() { state.AssignUnit(s.st, unit0, state.AssignmentPolicy("r andom")) } | |
818 c.Assert(fail, PanicMatches, `unknown unit assignment policy: "random"`) | |
819 _, err = unit0.AssignedMachineId() | |
820 c.Assert(err, NotNil) | |
821 s.assertMachineCount(c, 1) | |
822 | |
823 // Check local placement | |
824 err = state.AssignUnit(s.st, unit0, state.AssignLocal) | |
825 c.Assert(err, IsNil) | |
826 mid, err := unit0.AssignedMachineId() | |
827 c.Assert(err, IsNil) | |
828 c.Assert(mid, Equals, 0) | |
829 s.assertMachineCount(c, 1) | |
830 | |
831 // Check unassigned placement with no unused machines | |
832 unit1, err := serv.AddUnit() | |
833 c.Assert(err, IsNil) | |
834 err = state.AssignUnit(s.st, unit1, state.AssignUnused) | |
835 c.Assert(err, IsNil) | |
836 mid, err = unit1.AssignedMachineId() | |
837 c.Assert(err, IsNil) | |
838 c.Assert(mid, Equals, 1) | |
839 s.assertMachineCount(c, 2) | |
840 | |
841 // Check unassigned placement on an unused machine | |
842 _, err = s.st.AddMachine() | |
843 unit2, err := serv.AddUnit() | |
844 c.Assert(err, IsNil) | |
845 err = state.AssignUnit(s.st, unit2, state.AssignUnused) | |
846 c.Assert(err, IsNil) | |
847 mid, err = unit2.AssignedMachineId() | |
848 c.Assert(err, IsNil) | |
849 c.Assert(mid, Equals, 2) | |
850 s.assertMachineCount(c, 3) | |
851 } | |
852 | |
809 func (s *StateSuite) TestGetSetClearUnitUpgrade(c *C) { | 853 func (s *StateSuite) TestGetSetClearUnitUpgrade(c *C) { |
810 // Check that setting and clearing an upgrade flag on a unit works. | 854 // Check that setting and clearing an upgrade flag on a unit works. |
811 dummy := s.addDummyCharm(c) | 855 dummy := s.addDummyCharm(c) |
812 wordpress, err := s.st.AddService("wordpress", dummy) | 856 wordpress, err := s.st.AddService("wordpress", dummy) |
813 c.Assert(err, IsNil) | 857 c.Assert(err, IsNil) |
814 unit, err := wordpress.AddUnit() | 858 unit, err := wordpress.AddUnit() |
815 c.Assert(err, IsNil) | 859 c.Assert(err, IsNil) |
816 | 860 |
817 // Defaults to false and false. | 861 // Defaults to false and false. |
818 needsUpgrade, err := unit.NeedsUpgrade() | 862 needsUpgrade, err := unit.NeedsUpgrade() |
(...skipping 189 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1008 c.Assert(err, IsNil) | 1052 c.Assert(err, IsNil) |
1009 c.Assert(alive, Equals, true) | 1053 c.Assert(alive, Equals, true) |
1010 | 1054 |
1011 pinger.Kill() | 1055 pinger.Kill() |
1012 | 1056 |
1013 alive, err = unit.AgentAlive() | 1057 alive, err = unit.AgentAlive() |
1014 c.Assert(err, IsNil) | 1058 c.Assert(err, IsNil) |
1015 c.Assert(alive, Equals, false) | 1059 c.Assert(alive, Equals, false) |
1016 } | 1060 } |
1017 | 1061 |
1018 func (s *StateSuite) TestAddRelation(c *C) { | 1062 func (s *StateSuite) TestAddRelation(c *C) { |
niemeyer
2012/06/06 10:40:04
This shouldn't be here, I suspect.
fwereade
2012/06/06 10:52:46
Ignored per IRC :).
| |
1019 dummy := s.addDummyCharm(c) | 1063 dummy := s.addDummyCharm(c) |
1020 // Provider and requirer. | 1064 // Provider and requirer. |
1021 s.st.AddService("mysqldb", dummy) | 1065 s.st.AddService("mysqldb", dummy) |
1022 s.st.AddService("wordpress", dummy) | 1066 s.st.AddService("wordpress", dummy) |
1023 mysqlep := state.RelationEndpoint{"mysqldb", "blog", "db", state.RolePro vider, state.ScopeGlobal} | 1067 mysqlep := state.RelationEndpoint{"mysqldb", "blog", "db", state.RolePro vider, state.ScopeGlobal} |
1024 blogep := state.RelationEndpoint{"wordpress", "blog", "db", state.RoleRe quirer, state.ScopeGlobal} | 1068 blogep := state.RelationEndpoint{"wordpress", "blog", "db", state.RoleRe quirer, state.ScopeGlobal} |
1025 relation, serviceRelations, err := s.st.AddRelation(blogep, mysqlep) | 1069 relation, serviceRelations, err := s.st.AddRelation(blogep, mysqlep) |
1026 c.Assert(err, IsNil) | 1070 c.Assert(err, IsNil) |
1027 c.Assert(relation, NotNil) | 1071 c.Assert(relation, NotNil) |
1028 c.Assert(serviceRelations, HasLen, 2) | 1072 c.Assert(serviceRelations, HasLen, 2) |
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1118 func (s *StateSuite) TestEnvironment(c *C) { | 1162 func (s *StateSuite) TestEnvironment(c *C) { |
1119 path, err := s.zkConn.Create("/environment", "type: dummy\nname: foo\n", 0, zookeeper.WorldACL(zookeeper.PERM_ALL)) | 1163 path, err := s.zkConn.Create("/environment", "type: dummy\nname: foo\n", 0, zookeeper.WorldACL(zookeeper.PERM_ALL)) |
1120 c.Assert(err, IsNil) | 1164 c.Assert(err, IsNil) |
1121 c.Assert(path, Equals, "/environment") | 1165 c.Assert(path, Equals, "/environment") |
1122 | 1166 |
1123 env, err := s.st.Environment() | 1167 env, err := s.st.Environment() |
1124 env.Read() | 1168 env.Read() |
1125 c.Assert(err, IsNil) | 1169 c.Assert(err, IsNil) |
1126 c.Assert(env.Map(), DeepEquals, map[string]interface{}{"type": "dummy", "name": "foo"}) | 1170 c.Assert(env.Map(), DeepEquals, map[string]interface{}{"type": "dummy", "name": "foo"}) |
1127 } | 1171 } |
OLD | NEW |