Revision 05484a24 test/ganeti.cli_unittest.py
b/test/ganeti.cli_unittest.py | ||
---|---|---|
32 | 32 |
from ganeti import errors |
33 | 33 |
from ganeti import utils |
34 | 34 |
from ganeti import objects |
35 |
from ganeti import qlang |
|
35 | 36 |
from ganeti.errors import OpPrereqError, ParameterError |
36 | 37 |
|
37 | 38 |
|
... | ... | |
753 | 754 |
self.assertTrue(result.endswith(")")) |
754 | 755 |
|
755 | 756 |
|
757 |
class TestGetOnlineNodes(unittest.TestCase): |
|
758 |
class _FakeClient: |
|
759 |
def __init__(self): |
|
760 |
self._query = [] |
|
761 |
|
|
762 |
def AddQueryResult(self, *args): |
|
763 |
self._query.append(args) |
|
764 |
|
|
765 |
def CountPending(self): |
|
766 |
return len(self._query) |
|
767 |
|
|
768 |
def Query(self, res, fields, filter_): |
|
769 |
if res != constants.QR_NODE: |
|
770 |
raise Exception("Querying wrong resource") |
|
771 |
|
|
772 |
(exp_fields, check_filter, result) = self._query.pop(0) |
|
773 |
|
|
774 |
if exp_fields != fields: |
|
775 |
raise Exception("Expected fields %s, got %s" % (exp_fields, fields)) |
|
776 |
|
|
777 |
if not (filter_ is None or check_filter(filter_)): |
|
778 |
raise Exception("Filter doesn't match expectations") |
|
779 |
|
|
780 |
return objects.QueryResponse(fields=None, data=result) |
|
781 |
|
|
782 |
def testEmpty(self): |
|
783 |
cl = self._FakeClient() |
|
784 |
|
|
785 |
cl.AddQueryResult(["name", "offline", "sip"], None, []) |
|
786 |
self.assertEqual(cli.GetOnlineNodes(None, cl=cl), []) |
|
787 |
self.assertEqual(cl.CountPending(), 0) |
|
788 |
|
|
789 |
def testNoSpecialFilter(self): |
|
790 |
cl = self._FakeClient() |
|
791 |
|
|
792 |
cl.AddQueryResult(["name", "offline", "sip"], None, [ |
|
793 |
[(constants.RS_NORMAL, "master.example.com"), |
|
794 |
(constants.RS_NORMAL, False), |
|
795 |
(constants.RS_NORMAL, "192.0.2.1")], |
|
796 |
[(constants.RS_NORMAL, "node2.example.com"), |
|
797 |
(constants.RS_NORMAL, False), |
|
798 |
(constants.RS_NORMAL, "192.0.2.2")], |
|
799 |
]) |
|
800 |
self.assertEqual(cli.GetOnlineNodes(None, cl=cl), |
|
801 |
["master.example.com", "node2.example.com"]) |
|
802 |
self.assertEqual(cl.CountPending(), 0) |
|
803 |
|
|
804 |
def testNoMaster(self): |
|
805 |
cl = self._FakeClient() |
|
806 |
|
|
807 |
def _CheckFilter(filter_): |
|
808 |
self.assertEqual(filter_, [qlang.OP_NOT, [qlang.OP_TRUE, "master"]]) |
|
809 |
return True |
|
810 |
|
|
811 |
cl.AddQueryResult(["name", "offline", "sip"], _CheckFilter, [ |
|
812 |
[(constants.RS_NORMAL, "node2.example.com"), |
|
813 |
(constants.RS_NORMAL, False), |
|
814 |
(constants.RS_NORMAL, "192.0.2.2")], |
|
815 |
]) |
|
816 |
self.assertEqual(cli.GetOnlineNodes(None, cl=cl, filter_master=True), |
|
817 |
["node2.example.com"]) |
|
818 |
self.assertEqual(cl.CountPending(), 0) |
|
819 |
|
|
820 |
def testSecondaryIpAddress(self): |
|
821 |
cl = self._FakeClient() |
|
822 |
|
|
823 |
cl.AddQueryResult(["name", "offline", "sip"], None, [ |
|
824 |
[(constants.RS_NORMAL, "master.example.com"), |
|
825 |
(constants.RS_NORMAL, False), |
|
826 |
(constants.RS_NORMAL, "192.0.2.1")], |
|
827 |
[(constants.RS_NORMAL, "node2.example.com"), |
|
828 |
(constants.RS_NORMAL, False), |
|
829 |
(constants.RS_NORMAL, "192.0.2.2")], |
|
830 |
]) |
|
831 |
self.assertEqual(cli.GetOnlineNodes(None, cl=cl, secondary_ips=True), |
|
832 |
["192.0.2.1", "192.0.2.2"]) |
|
833 |
self.assertEqual(cl.CountPending(), 0) |
|
834 |
|
|
835 |
def testNoMasterFilterNodeName(self): |
|
836 |
cl = self._FakeClient() |
|
837 |
|
|
838 |
def _CheckFilter(filter_): |
|
839 |
self.assertEqual(filter_, |
|
840 |
[qlang.OP_AND, |
|
841 |
[qlang.OP_OR] + [[qlang.OP_EQUAL, "name", name] |
|
842 |
for name in ["node2", "node3"]], |
|
843 |
[qlang.OP_NOT, [qlang.OP_TRUE, "master"]]]) |
|
844 |
return True |
|
845 |
|
|
846 |
cl.AddQueryResult(["name", "offline", "sip"], _CheckFilter, [ |
|
847 |
[(constants.RS_NORMAL, "node2.example.com"), |
|
848 |
(constants.RS_NORMAL, False), |
|
849 |
(constants.RS_NORMAL, "192.0.2.12")], |
|
850 |
[(constants.RS_NORMAL, "node3.example.com"), |
|
851 |
(constants.RS_NORMAL, False), |
|
852 |
(constants.RS_NORMAL, "192.0.2.13")], |
|
853 |
]) |
|
854 |
self.assertEqual(cli.GetOnlineNodes(["node2", "node3"], cl=cl, |
|
855 |
secondary_ips=True, filter_master=True), |
|
856 |
["192.0.2.12", "192.0.2.13"]) |
|
857 |
self.assertEqual(cl.CountPending(), 0) |
|
858 |
|
|
859 |
def testOfflineNodes(self): |
|
860 |
cl = self._FakeClient() |
|
861 |
|
|
862 |
cl.AddQueryResult(["name", "offline", "sip"], None, [ |
|
863 |
[(constants.RS_NORMAL, "master.example.com"), |
|
864 |
(constants.RS_NORMAL, False), |
|
865 |
(constants.RS_NORMAL, "192.0.2.1")], |
|
866 |
[(constants.RS_NORMAL, "node2.example.com"), |
|
867 |
(constants.RS_NORMAL, True), |
|
868 |
(constants.RS_NORMAL, "192.0.2.2")], |
|
869 |
[(constants.RS_NORMAL, "node3.example.com"), |
|
870 |
(constants.RS_NORMAL, True), |
|
871 |
(constants.RS_NORMAL, "192.0.2.3")], |
|
872 |
]) |
|
873 |
self.assertEqual(cli.GetOnlineNodes(None, cl=cl, nowarn=True), |
|
874 |
["master.example.com"]) |
|
875 |
self.assertEqual(cl.CountPending(), 0) |
|
876 |
|
|
877 |
def testNodeGroup(self): |
|
878 |
cl = self._FakeClient() |
|
879 |
|
|
880 |
def _CheckFilter(filter_): |
|
881 |
self.assertEqual(filter_, |
|
882 |
[qlang.OP_OR, [qlang.OP_EQUAL, "group", "foobar"], |
|
883 |
[qlang.OP_EQUAL, "group.uuid", "foobar"]]) |
|
884 |
return True |
|
885 |
|
|
886 |
cl.AddQueryResult(["name", "offline", "sip"], _CheckFilter, [ |
|
887 |
[(constants.RS_NORMAL, "master.example.com"), |
|
888 |
(constants.RS_NORMAL, False), |
|
889 |
(constants.RS_NORMAL, "192.0.2.1")], |
|
890 |
[(constants.RS_NORMAL, "node3.example.com"), |
|
891 |
(constants.RS_NORMAL, False), |
|
892 |
(constants.RS_NORMAL, "192.0.2.3")], |
|
893 |
]) |
|
894 |
self.assertEqual(cli.GetOnlineNodes(None, cl=cl, nodegroup="foobar"), |
|
895 |
["master.example.com", "node3.example.com"]) |
|
896 |
self.assertEqual(cl.CountPending(), 0) |
|
897 |
|
|
898 |
|
|
756 | 899 |
if __name__ == '__main__': |
757 | 900 |
testutils.GanetiTestProgram() |
Also available in: Unified diff