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

Side by Side Diff: state/state_test.go

Issue 6248076: add state.AssignmentPolicy type and state.AssignUnit func
Patch Set: add state.PlacementPolicy type, and state.Unit.Place method Created 11 years, 9 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:
View unified diff | Download patch
« no previous file with comments | « [revision details] ('k') | state/unit.go » ('j') | state/util.go » ('J')
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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
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
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
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
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
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 }
OLDNEW
« no previous file with comments | « [revision details] ('k') | state/unit.go » ('j') | state/util.go » ('J')

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