LEFT | RIGHT |
(no file at all) | |
1 // Copyright 2012, 2013 Canonical Ltd. | 1 // Copyright 2012, 2013 Canonical Ltd. |
2 // Licensed under the AGPLv3, see LICENCE file for details. | 2 // Licensed under the AGPLv3, see LICENCE file for details. |
3 | 3 |
4 package state_test | 4 package state_test |
5 | 5 |
6 import ( | 6 import ( |
7 "sort" | 7 "sort" |
8 | 8 |
9 gc "launchpad.net/gocheck" | 9 gc "launchpad.net/gocheck" |
10 | 10 |
(...skipping 645 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
656 | 656 |
657 // Assign that unit (to a separate machine instance); change detected. | 657 // Assign that unit (to a separate machine instance); change detected. |
658 machine, err := s.State.Machine(s.machine.Id()) | 658 machine, err := s.State.Machine(s.machine.Id()) |
659 c.Assert(err, gc.IsNil) | 659 c.Assert(err, gc.IsNil) |
660 err = mysql0.AssignToMachine(machine) | 660 err = mysql0.AssignToMachine(machine) |
661 c.Assert(err, gc.IsNil) | 661 c.Assert(err, gc.IsNil) |
662 wc.AssertChange("mysql/0") | 662 wc.AssertChange("mysql/0") |
663 wc.AssertNoChange() | 663 wc.AssertNoChange() |
664 | 664 |
665 // Change the unit; no change. | 665 // Change the unit; no change. |
666 » err = mysql0.SetStatus(params.StatusStarted, "") | 666 » err = mysql0.SetStatus(params.StatusStarted, "", nil) |
667 c.Assert(err, gc.IsNil) | 667 c.Assert(err, gc.IsNil) |
668 wc.AssertNoChange() | 668 wc.AssertNoChange() |
669 | 669 |
670 // Assign another unit and make the first Dying; check both changes dete
cted. | 670 // Assign another unit and make the first Dying; check both changes dete
cted. |
671 mysql1, err := mysql.AddUnit() | 671 mysql1, err := mysql.AddUnit() |
672 c.Assert(err, gc.IsNil) | 672 c.Assert(err, gc.IsNil) |
673 err = mysql1.AssignToMachine(machine) | 673 err = mysql1.AssignToMachine(machine) |
674 c.Assert(err, gc.IsNil) | 674 c.Assert(err, gc.IsNil) |
675 err = mysql0.Destroy() | 675 err = mysql0.Destroy() |
676 c.Assert(err, gc.IsNil) | 676 c.Assert(err, gc.IsNil) |
677 wc.AssertChange("mysql/0", "mysql/1") | 677 wc.AssertChange("mysql/0", "mysql/1") |
678 wc.AssertNoChange() | 678 wc.AssertNoChange() |
679 | 679 |
680 // Add a subordinate to the Alive unit; no change. | 680 // Add a subordinate to the Alive unit; no change. |
681 logging, err := s.State.AddService("logging", s.AddTestingCharm(c, "logg
ing")) | 681 logging, err := s.State.AddService("logging", s.AddTestingCharm(c, "logg
ing")) |
682 c.Assert(err, gc.IsNil) | 682 c.Assert(err, gc.IsNil) |
683 eps, err := s.State.InferEndpoints([]string{"mysql", "logging"}) | 683 eps, err := s.State.InferEndpoints([]string{"mysql", "logging"}) |
684 c.Assert(err, gc.IsNil) | 684 c.Assert(err, gc.IsNil) |
685 rel, err := s.State.AddRelation(eps...) | 685 rel, err := s.State.AddRelation(eps...) |
686 c.Assert(err, gc.IsNil) | 686 c.Assert(err, gc.IsNil) |
687 mysqlru1, err := rel.Unit(mysql1) | 687 mysqlru1, err := rel.Unit(mysql1) |
688 c.Assert(err, gc.IsNil) | 688 c.Assert(err, gc.IsNil) |
689 err = mysqlru1.EnterScope(nil) | 689 err = mysqlru1.EnterScope(nil) |
690 c.Assert(err, gc.IsNil) | 690 c.Assert(err, gc.IsNil) |
691 logging0, err := logging.Unit("logging/0") | 691 logging0, err := logging.Unit("logging/0") |
692 c.Assert(err, gc.IsNil) | 692 c.Assert(err, gc.IsNil) |
693 wc.AssertNoChange() | 693 wc.AssertNoChange() |
694 | 694 |
695 // Change the subordinate; no change. | 695 // Change the subordinate; no change. |
696 » err = logging0.SetStatus(params.StatusStarted, "") | 696 » err = logging0.SetStatus(params.StatusStarted, "", nil) |
697 c.Assert(err, gc.IsNil) | 697 c.Assert(err, gc.IsNil) |
698 wc.AssertNoChange() | 698 wc.AssertNoChange() |
699 | 699 |
700 // Make the Dying unit Dead; change detected. | 700 // Make the Dying unit Dead; change detected. |
701 err = mysql0.EnsureDead() | 701 err = mysql0.EnsureDead() |
702 c.Assert(err, gc.IsNil) | 702 c.Assert(err, gc.IsNil) |
703 wc.AssertChange("mysql/0") | 703 wc.AssertChange("mysql/0") |
704 wc.AssertNoChange() | 704 wc.AssertNoChange() |
705 | 705 |
706 // Stop watcher; check Changes chan closed. | 706 // Stop watcher; check Changes chan closed. |
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
762 mysql0, err := mysql.AddUnit() | 762 mysql0, err := mysql.AddUnit() |
763 c.Assert(err, gc.IsNil) | 763 c.Assert(err, gc.IsNil) |
764 machine, err := s.State.Machine(s.machine.Id()) | 764 machine, err := s.State.Machine(s.machine.Id()) |
765 c.Assert(err, gc.IsNil) | 765 c.Assert(err, gc.IsNil) |
766 err = mysql0.AssignToMachine(machine) | 766 err = mysql0.AssignToMachine(machine) |
767 c.Assert(err, gc.IsNil) | 767 c.Assert(err, gc.IsNil) |
768 wc.AssertChange("mysql/0") | 768 wc.AssertChange("mysql/0") |
769 wc.AssertNoChange() | 769 wc.AssertNoChange() |
770 | 770 |
771 // Change the unit; no change. | 771 // Change the unit; no change. |
772 » err = mysql0.SetStatus(params.StatusStarted, "") | 772 » err = mysql0.SetStatus(params.StatusStarted, "", nil) |
773 c.Assert(err, gc.IsNil) | 773 c.Assert(err, gc.IsNil) |
774 wc.AssertNoChange() | 774 wc.AssertNoChange() |
775 | 775 |
776 // Assign another unit and make the first Dying; check both changes dete
cted. | 776 // Assign another unit and make the first Dying; check both changes dete
cted. |
777 mysql1, err := mysql.AddUnit() | 777 mysql1, err := mysql.AddUnit() |
778 c.Assert(err, gc.IsNil) | 778 c.Assert(err, gc.IsNil) |
779 err = mysql1.AssignToMachine(machine) | 779 err = mysql1.AssignToMachine(machine) |
780 c.Assert(err, gc.IsNil) | 780 c.Assert(err, gc.IsNil) |
781 err = mysql0.Destroy() | 781 err = mysql0.Destroy() |
782 c.Assert(err, gc.IsNil) | 782 c.Assert(err, gc.IsNil) |
(...skipping 10 matching lines...) Expand all Loading... |
793 mysqlru1, err := rel.Unit(mysql1) | 793 mysqlru1, err := rel.Unit(mysql1) |
794 c.Assert(err, gc.IsNil) | 794 c.Assert(err, gc.IsNil) |
795 err = mysqlru1.EnterScope(nil) | 795 err = mysqlru1.EnterScope(nil) |
796 c.Assert(err, gc.IsNil) | 796 c.Assert(err, gc.IsNil) |
797 logging0, err := logging.Unit("logging/0") | 797 logging0, err := logging.Unit("logging/0") |
798 c.Assert(err, gc.IsNil) | 798 c.Assert(err, gc.IsNil) |
799 wc.AssertChange("logging/0") | 799 wc.AssertChange("logging/0") |
800 wc.AssertNoChange() | 800 wc.AssertNoChange() |
801 | 801 |
802 // Change the subordinate; no change. | 802 // Change the subordinate; no change. |
803 » err = logging0.SetStatus(params.StatusStarted, "") | 803 » err = logging0.SetStatus(params.StatusStarted, "", nil) |
804 c.Assert(err, gc.IsNil) | 804 c.Assert(err, gc.IsNil) |
805 wc.AssertNoChange() | 805 wc.AssertNoChange() |
806 | 806 |
807 // Make the Dying unit Dead; change detected. | 807 // Make the Dying unit Dead; change detected. |
808 err = mysql0.EnsureDead() | 808 err = mysql0.EnsureDead() |
809 c.Assert(err, gc.IsNil) | 809 c.Assert(err, gc.IsNil) |
810 wc.AssertChange("mysql/0") | 810 wc.AssertChange("mysql/0") |
811 wc.AssertNoChange() | 811 wc.AssertNoChange() |
812 | 812 |
813 // Stop watcher; check Changes chan closed. | 813 // Stop watcher; check Changes chan closed. |
(...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
934 | 934 |
935 err := s.machine.Remove() | 935 err := s.machine.Remove() |
936 c.Assert(err, gc.IsNil) | 936 c.Assert(err, gc.IsNil) |
937 err = s.machine.SetConstraints(cons) | 937 err = s.machine.SetConstraints(cons) |
938 c.Assert(err, gc.ErrorMatches, cannotSet) | 938 c.Assert(err, gc.ErrorMatches, cannotSet) |
939 _, err = s.machine.Constraints() | 939 _, err = s.machine.Constraints() |
940 c.Assert(err, gc.ErrorMatches, `constraints not found`) | 940 c.Assert(err, gc.ErrorMatches, `constraints not found`) |
941 } | 941 } |
942 | 942 |
943 func (s *MachineSuite) TestGetSetStatusWhileAlive(c *gc.C) { | 943 func (s *MachineSuite) TestGetSetStatusWhileAlive(c *gc.C) { |
944 » err := s.machine.SetStatus(params.StatusError, "") | 944 » err := s.machine.SetStatus(params.StatusError, "", nil) |
945 c.Assert(err, gc.ErrorMatches, `cannot set status "error" without info`) | 945 c.Assert(err, gc.ErrorMatches, `cannot set status "error" without info`) |
946 » err = s.machine.SetStatus(params.StatusPending, "") | 946 » err = s.machine.SetStatus(params.StatusPending, "", nil) |
947 c.Assert(err, gc.ErrorMatches, `cannot set status "pending"`) | 947 c.Assert(err, gc.ErrorMatches, `cannot set status "pending"`) |
948 » err = s.machine.SetStatus(params.StatusDown, "") | 948 » err = s.machine.SetStatus(params.StatusDown, "", nil) |
949 c.Assert(err, gc.ErrorMatches, `cannot set status "down"`) | 949 c.Assert(err, gc.ErrorMatches, `cannot set status "down"`) |
950 » err = s.machine.SetStatus(params.Status("vliegkat"), "orville") | 950 » err = s.machine.SetStatus(params.Status("vliegkat"), "orville", nil) |
951 c.Assert(err, gc.ErrorMatches, `cannot set invalid status "vliegkat"`) | 951 c.Assert(err, gc.ErrorMatches, `cannot set invalid status "vliegkat"`) |
952 | 952 |
953 status, info, err := s.machine.Status() | 953 status, info, err := s.machine.Status() |
954 c.Assert(err, gc.IsNil) | 954 c.Assert(err, gc.IsNil) |
955 c.Assert(status, gc.Equals, params.StatusPending) | 955 c.Assert(status, gc.Equals, params.StatusPending) |
956 c.Assert(info, gc.Equals, "") | 956 c.Assert(info, gc.Equals, "") |
957 | 957 |
958 » err = s.machine.SetStatus(params.StatusStarted, "") | 958 » err = s.machine.SetStatus(params.StatusStarted, "", nil) |
959 c.Assert(err, gc.IsNil) | 959 c.Assert(err, gc.IsNil) |
960 status, info, err = s.machine.Status() | 960 status, info, err = s.machine.Status() |
961 c.Assert(err, gc.IsNil) | 961 c.Assert(err, gc.IsNil) |
962 c.Assert(status, gc.Equals, params.StatusStarted) | 962 c.Assert(status, gc.Equals, params.StatusStarted) |
963 c.Assert(info, gc.Equals, "") | 963 c.Assert(info, gc.Equals, "") |
964 | 964 |
965 » err = s.machine.SetStatus(params.StatusError, "provisioning failed") | 965 » err = s.machine.SetStatus(params.StatusError, "provisioning failed", nil
) |
966 c.Assert(err, gc.IsNil) | 966 c.Assert(err, gc.IsNil) |
967 status, info, err = s.machine.Status() | 967 status, info, err = s.machine.Status() |
968 c.Assert(err, gc.IsNil) | 968 c.Assert(err, gc.IsNil) |
969 c.Assert(status, gc.Equals, params.StatusError) | 969 c.Assert(status, gc.Equals, params.StatusError) |
970 c.Assert(info, gc.Equals, "provisioning failed") | 970 c.Assert(info, gc.Equals, "provisioning failed") |
971 } | 971 } |
972 | 972 |
973 func (s *MachineSuite) TestGetSetStatusWhileNotAlive(c *gc.C) { | 973 func (s *MachineSuite) TestGetSetStatusWhileNotAlive(c *gc.C) { |
974 // When Dying set/get should work. | 974 // When Dying set/get should work. |
975 err := s.machine.Destroy() | 975 err := s.machine.Destroy() |
976 c.Assert(err, gc.IsNil) | 976 c.Assert(err, gc.IsNil) |
977 » err = s.machine.SetStatus(params.StatusStopped, "") | 977 » err = s.machine.SetStatus(params.StatusStopped, "", nil) |
978 c.Assert(err, gc.IsNil) | 978 c.Assert(err, gc.IsNil) |
979 status, info, err := s.machine.Status() | 979 status, info, err := s.machine.Status() |
980 c.Assert(err, gc.IsNil) | 980 c.Assert(err, gc.IsNil) |
981 c.Assert(status, gc.Equals, params.StatusStopped) | 981 c.Assert(status, gc.Equals, params.StatusStopped) |
982 c.Assert(info, gc.Equals, "") | 982 c.Assert(info, gc.Equals, "") |
983 | 983 |
984 // When Dead set should fail, but get will work. | 984 // When Dead set should fail, but get will work. |
985 err = s.machine.EnsureDead() | 985 err = s.machine.EnsureDead() |
986 c.Assert(err, gc.IsNil) | 986 c.Assert(err, gc.IsNil) |
987 » err = s.machine.SetStatus(params.StatusStarted, "not really") | 987 » err = s.machine.SetStatus(params.StatusStarted, "not really", nil) |
988 c.Assert(err, gc.ErrorMatches, `cannot set status of machine "0": not fo
und or not alive`) | 988 c.Assert(err, gc.ErrorMatches, `cannot set status of machine "0": not fo
und or not alive`) |
989 status, info, err = s.machine.Status() | 989 status, info, err = s.machine.Status() |
990 c.Assert(err, gc.IsNil) | 990 c.Assert(err, gc.IsNil) |
991 c.Assert(status, gc.Equals, params.StatusStopped) | 991 c.Assert(status, gc.Equals, params.StatusStopped) |
992 c.Assert(info, gc.Equals, "") | 992 c.Assert(info, gc.Equals, "") |
993 | 993 |
994 err = s.machine.Remove() | 994 err = s.machine.Remove() |
995 c.Assert(err, gc.IsNil) | 995 c.Assert(err, gc.IsNil) |
996 » err = s.machine.SetStatus(params.StatusStarted, "not really") | 996 » err = s.machine.SetStatus(params.StatusStarted, "not really", nil) |
997 c.Assert(err, gc.ErrorMatches, `cannot set status of machine "0": not fo
und or not alive`) | 997 c.Assert(err, gc.ErrorMatches, `cannot set status of machine "0": not fo
und or not alive`) |
998 _, _, err = s.machine.Status() | 998 _, _, err = s.machine.Status() |
999 c.Assert(err, gc.ErrorMatches, "status not found") | 999 c.Assert(err, gc.ErrorMatches, "status not found") |
1000 } | 1000 } |
1001 | 1001 |
| 1002 func (s *MachineSuite) TestGetSetStatusDataStandard(c *gc.C) { |
| 1003 err := s.machine.SetStatus(params.StatusStarted, "", nil) |
| 1004 c.Assert(err, gc.IsNil) |
| 1005 _, _, err = s.machine.Status() |
| 1006 c.Assert(err, gc.IsNil) |
| 1007 |
| 1008 // Regular status setting with data. |
| 1009 err = s.machine.SetStatus(params.StatusError, "provisioning failed", par
ams.StatusData{ |
| 1010 "reason": "unknown", |
| 1011 "retries": 5, |
| 1012 }) |
| 1013 c.Assert(err, gc.IsNil) |
| 1014 status, info, err := s.machine.Status() |
| 1015 c.Assert(err, gc.IsNil) |
| 1016 c.Assert(status, gc.Equals, params.StatusError) |
| 1017 c.Assert(info, gc.Equals, "provisioning failed") |
| 1018 |
| 1019 data, err := state.MachineStatusData(s.machine) |
| 1020 c.Assert(err, gc.IsNil) |
| 1021 c.Assert(data["reason"], gc.Equals, "unknown") |
| 1022 c.Assert(data["retries"], gc.Equals, 5) |
| 1023 } |
| 1024 |
| 1025 func (s *MachineSuite) TestGetSetStatusDataMongo(c *gc.C) { |
| 1026 err := s.machine.SetStatus(params.StatusStarted, "", nil) |
| 1027 c.Assert(err, gc.IsNil) |
| 1028 _, _, err = s.machine.Status() |
| 1029 c.Assert(err, gc.IsNil) |
| 1030 |
| 1031 // Status setting with MongoDB special values. |
| 1032 err = s.machine.SetStatus(params.StatusError, "mongo", params.StatusData
{ |
| 1033 `{name: "Joe"}`: "$where", |
| 1034 "eval": `eval(function(foo) { return foo; }, "bar")`, |
| 1035 "mapReduce": "mapReduce", |
| 1036 "group": "group", |
| 1037 }) |
| 1038 c.Assert(err, gc.IsNil) |
| 1039 status, info, err := s.machine.Status() |
| 1040 c.Assert(err, gc.IsNil) |
| 1041 c.Assert(status, gc.Equals, params.StatusError) |
| 1042 c.Assert(info, gc.Equals, "mongo") |
| 1043 |
| 1044 data, err := state.MachineStatusData(s.machine) |
| 1045 c.Assert(err, gc.IsNil) |
| 1046 c.Assert(data[`{name: "Joe"}`], gc.Equals, "$where") |
| 1047 c.Assert(data["eval"], gc.Equals, `eval(function(foo) { return foo; }, "
bar")`) |
| 1048 c.Assert(data["mapReduce"], gc.Equals, "mapReduce") |
| 1049 c.Assert(data["group"], gc.Equals, "group") |
| 1050 } |
| 1051 |
1002 func (s *MachineSuite) TestSetAddresses(c *gc.C) { | 1052 func (s *MachineSuite) TestSetAddresses(c *gc.C) { |
1003 machine, err := s.State.AddMachine("series", state.JobHostUnits) | 1053 machine, err := s.State.AddMachine("series", state.JobHostUnits) |
1004 c.Assert(err, gc.IsNil) | 1054 c.Assert(err, gc.IsNil) |
1005 c.Assert(machine.Addresses(), gc.HasLen, 0) | 1055 c.Assert(machine.Addresses(), gc.HasLen, 0) |
1006 | 1056 |
1007 addresses := []instance.Address{ | 1057 addresses := []instance.Address{ |
1008 instance.NewAddress("127.0.0.1"), | 1058 instance.NewAddress("127.0.0.1"), |
1009 instance.NewAddress("8.8.8.8"), | 1059 instance.NewAddress("8.8.8.8"), |
1010 } | 1060 } |
1011 err = machine.SetAddresses(addresses) | 1061 err = machine.SetAddresses(addresses) |
1012 c.Assert(err, gc.IsNil) | 1062 c.Assert(err, gc.IsNil) |
1013 err = machine.Refresh() | 1063 err = machine.Refresh() |
1014 c.Assert(err, gc.IsNil) | 1064 c.Assert(err, gc.IsNil) |
1015 c.Assert(machine.Addresses(), gc.DeepEquals, addresses) | 1065 c.Assert(machine.Addresses(), gc.DeepEquals, addresses) |
1016 } | 1066 } |
LEFT | RIGHT |