Revision 09a43b39 test/ganeti.rapi.rlib2_unittest.py
b/test/ganeti.rapi.rlib2_unittest.py | ||
---|---|---|
741 | 741 |
self.assertRaises(IndexError, cl.GetNextSubmittedJob) |
742 | 742 |
|
743 | 743 |
|
744 |
class TestParseInstanceCreateRequestVersion1(testutils.GanetiTestCase):
|
|
745 |
def setUp(self):
|
|
746 |
testutils.GanetiTestCase.setUp(self)
|
|
744 |
class TestInstanceCreation(testutils.GanetiTestCase):
|
|
745 |
def test(self):
|
|
746 |
clfactory = _FakeClientFactory(_FakeClient)
|
|
747 | 747 |
|
748 |
self.Parse = rlib2._ParseInstanceCreateRequestVersion1
|
|
748 |
name = "inst863.example.com"
|
|
749 | 749 |
|
750 |
def test(self): |
|
751 | 750 |
disk_variants = [ |
752 | 751 |
# No disks |
753 | 752 |
[], |
... | ... | |
798 | 797 |
for disks in disk_variants: |
799 | 798 |
for beparams in beparam_variants: |
800 | 799 |
for hvparams in hvparam_variants: |
801 |
data = { |
|
802 |
"name": "inst1.example.com", |
|
803 |
"hypervisor": constants.HT_FAKE, |
|
804 |
"disks": disks, |
|
805 |
"nics": nics, |
|
806 |
"mode": mode, |
|
807 |
"disk_template": disk_template, |
|
808 |
"os": "debootstrap", |
|
809 |
} |
|
810 |
|
|
811 |
if beparams is not None: |
|
812 |
data["beparams"] = beparams |
|
813 |
|
|
814 |
if hvparams is not None: |
|
815 |
data["hvparams"] = hvparams |
|
816 |
|
|
817 | 800 |
for dry_run in [False, True]: |
818 |
op = self.Parse(data, dry_run) |
|
819 |
self.assert_(isinstance(op, opcodes.OpInstanceCreate)) |
|
801 |
queryargs = { |
|
802 |
"dry-run": str(int(dry_run)), |
|
803 |
} |
|
804 |
|
|
805 |
data = { |
|
806 |
rlib2._REQ_DATA_VERSION: 1, |
|
807 |
"name": name, |
|
808 |
"hypervisor": constants.HT_FAKE, |
|
809 |
"disks": disks, |
|
810 |
"nics": nics, |
|
811 |
"mode": mode, |
|
812 |
"disk_template": disk_template, |
|
813 |
"os": "debootstrap", |
|
814 |
} |
|
815 |
|
|
816 |
if beparams is not None: |
|
817 |
data["beparams"] = beparams |
|
818 |
|
|
819 |
if hvparams is not None: |
|
820 |
data["hvparams"] = hvparams |
|
821 |
|
|
822 |
handler = _CreateHandler(rlib2.R_2_instances, [], |
|
823 |
queryargs, data, clfactory) |
|
824 |
job_id = handler.POST() |
|
825 |
|
|
826 |
cl = clfactory.GetNextClient() |
|
827 |
self.assertRaises(IndexError, clfactory.GetNextClient) |
|
828 |
|
|
829 |
(exp_job_id, (op, )) = cl.GetNextSubmittedJob() |
|
830 |
self.assertEqual(job_id, exp_job_id) |
|
831 |
self.assertRaises(IndexError, cl.GetNextSubmittedJob) |
|
832 |
|
|
833 |
self.assertTrue(isinstance(op, opcodes.OpInstanceCreate)) |
|
834 |
self.assertEqual(op.instance_name, name) |
|
820 | 835 |
self.assertEqual(op.mode, mode) |
821 | 836 |
self.assertEqual(op.disk_template, disk_template) |
822 | 837 |
self.assertEqual(op.dry_run, dry_run) |
... | ... | |
845 | 860 |
self.assertEqualValues(op.hvparams, hvparams) |
846 | 861 |
|
847 | 862 |
def testLegacyName(self): |
863 |
clfactory = _FakeClientFactory(_FakeClient) |
|
864 |
|
|
848 | 865 |
name = "inst29128.example.com" |
849 | 866 |
data = { |
867 |
rlib2._REQ_DATA_VERSION: 1, |
|
850 | 868 |
"name": name, |
851 | 869 |
"disks": [], |
852 | 870 |
"nics": [], |
853 | 871 |
"mode": constants.INSTANCE_CREATE, |
854 | 872 |
"disk_template": constants.DT_PLAIN, |
855 | 873 |
} |
856 |
op = self.Parse(data, False) |
|
857 |
self.assert_(isinstance(op, opcodes.OpInstanceCreate)) |
|
874 |
|
|
875 |
handler = _CreateHandler(rlib2.R_2_instances, [], {}, data, clfactory) |
|
876 |
job_id = handler.POST() |
|
877 |
|
|
878 |
cl = clfactory.GetNextClient() |
|
879 |
self.assertRaises(IndexError, clfactory.GetNextClient) |
|
880 |
|
|
881 |
(exp_job_id, (op, )) = cl.GetNextSubmittedJob() |
|
882 |
self.assertEqual(job_id, exp_job_id) |
|
883 |
self.assertTrue(isinstance(op, opcodes.OpInstanceCreate)) |
|
858 | 884 |
self.assertEqual(op.instance_name, name) |
859 | 885 |
self.assertFalse(hasattr(op, "name")) |
886 |
self.assertFalse(op.dry_run) |
|
887 |
|
|
888 |
self.assertRaises(IndexError, cl.GetNextSubmittedJob) |
|
860 | 889 |
|
861 | 890 |
# Define both |
862 |
data = { |
|
863 |
"name": name, |
|
864 |
"instance_name": "other.example.com", |
|
865 |
"disks": [], |
|
866 |
"nics": [], |
|
867 |
"mode": constants.INSTANCE_CREATE, |
|
868 |
"disk_template": constants.DT_PLAIN, |
|
869 |
} |
|
870 |
self.assertRaises(http.HttpBadRequest, self.Parse, data, False) |
|
891 |
data["instance_name"] = "other.example.com" |
|
892 |
assert "name" in data and "instance_name" in data |
|
893 |
handler = _CreateHandler(rlib2.R_2_instances, [], {}, data, clfactory) |
|
894 |
self.assertRaises(http.HttpBadRequest, handler.POST) |
|
895 |
self.assertRaises(IndexError, clfactory.GetNextClient) |
|
871 | 896 |
|
872 | 897 |
def testLegacyOs(self): |
898 |
clfactory = _FakeClientFactory(_FakeClient) |
|
899 |
|
|
873 | 900 |
name = "inst4673.example.com" |
874 | 901 |
os = "linux29206" |
875 | 902 |
data = { |
903 |
rlib2._REQ_DATA_VERSION: 1, |
|
876 | 904 |
"name": name, |
877 | 905 |
"os_type": os, |
878 | 906 |
"disks": [], |
... | ... | |
880 | 908 |
"mode": constants.INSTANCE_CREATE, |
881 | 909 |
"disk_template": constants.DT_PLAIN, |
882 | 910 |
} |
883 |
op = self.Parse(data, False) |
|
884 |
self.assert_(isinstance(op, opcodes.OpInstanceCreate)) |
|
911 |
|
|
912 |
handler = _CreateHandler(rlib2.R_2_instances, [], {}, data, clfactory) |
|
913 |
job_id = handler.POST() |
|
914 |
|
|
915 |
cl = clfactory.GetNextClient() |
|
916 |
self.assertRaises(IndexError, clfactory.GetNextClient) |
|
917 |
|
|
918 |
(exp_job_id, (op, )) = cl.GetNextSubmittedJob() |
|
919 |
self.assertEqual(job_id, exp_job_id) |
|
920 |
self.assertTrue(isinstance(op, opcodes.OpInstanceCreate)) |
|
885 | 921 |
self.assertEqual(op.instance_name, name) |
886 | 922 |
self.assertEqual(op.os_type, os) |
887 | 923 |
self.assertFalse(hasattr(op, "os")) |
924 |
self.assertFalse(op.dry_run) |
|
925 |
|
|
926 |
self.assertRaises(IndexError, cl.GetNextSubmittedJob) |
|
888 | 927 |
|
889 | 928 |
# Define both |
890 |
data = { |
|
891 |
"instance_name": name, |
|
892 |
"os": os, |
|
893 |
"os_type": "linux9584", |
|
894 |
"disks": [], |
|
895 |
"nics": [], |
|
896 |
"mode": constants.INSTANCE_CREATE, |
|
897 |
"disk_template": constants.DT_PLAIN, |
|
898 |
} |
|
899 |
self.assertRaises(http.HttpBadRequest, self.Parse, data, False) |
|
929 |
data["os"] = "linux9584" |
|
930 |
assert "os" in data and "os_type" in data |
|
931 |
handler = _CreateHandler(rlib2.R_2_instances, [], {}, data, clfactory) |
|
932 |
self.assertRaises(http.HttpBadRequest, handler.POST) |
|
900 | 933 |
|
901 | 934 |
def testErrors(self): |
935 |
clfactory = _FakeClientFactory(_FakeClient) |
|
936 |
|
|
902 | 937 |
# Test all required fields |
903 | 938 |
reqfields = { |
939 |
rlib2._REQ_DATA_VERSION: 1, |
|
904 | 940 |
"name": "inst1.example.com", |
905 | 941 |
"disks": [], |
906 | 942 |
"nics": [], |
... | ... | |
909 | 945 |
} |
910 | 946 |
|
911 | 947 |
for name in reqfields.keys(): |
912 |
self.assertRaises(http.HttpBadRequest, self.Parse, |
|
913 |
dict(i for i in reqfields.iteritems() if i[0] != name), |
|
914 |
False) |
|
948 |
data = dict(i for i in reqfields.iteritems() if i[0] != name) |
|
949 |
|
|
950 |
handler = _CreateHandler(rlib2.R_2_instances, [], {}, data, clfactory) |
|
951 |
self.assertRaises(http.HttpBadRequest, handler.POST) |
|
952 |
self.assertRaises(IndexError, clfactory.GetNextClient) |
|
915 | 953 |
|
916 | 954 |
# Invalid disks and nics |
917 | 955 |
for field in ["disks", "nics"]: |
... | ... | |
921 | 959 |
for invvalue in invalid_values: |
922 | 960 |
data = reqfields.copy() |
923 | 961 |
data[field] = invvalue |
924 |
self.assertRaises(http.HttpBadRequest, self.Parse, data, False) |
|
962 |
handler = _CreateHandler(rlib2.R_2_instances, [], {}, data, clfactory) |
|
963 |
self.assertRaises(http.HttpBadRequest, handler.POST) |
|
964 |
self.assertRaises(IndexError, clfactory.GetNextClient) |
|
965 |
|
|
966 |
def testVersion(self): |
|
967 |
clfactory = _FakeClientFactory(_FakeClient) |
|
968 |
|
|
969 |
# No version field |
|
970 |
data = { |
|
971 |
"name": "inst1.example.com", |
|
972 |
"disks": [], |
|
973 |
"nics": [], |
|
974 |
"mode": constants.INSTANCE_CREATE, |
|
975 |
"disk_template": constants.DT_PLAIN, |
|
976 |
} |
|
977 |
|
|
978 |
handler = _CreateHandler(rlib2.R_2_instances, [], {}, data, clfactory) |
|
979 |
self.assertRaises(http.HttpBadRequest, handler.POST) |
|
980 |
|
|
981 |
# Old and incorrect versions |
|
982 |
for version in [0, -1, 10483, "Hello World"]: |
|
983 |
data[rlib2._REQ_DATA_VERSION] = version |
|
984 |
|
|
985 |
handler = _CreateHandler(rlib2.R_2_instances, [], {}, data, clfactory) |
|
986 |
self.assertRaises(http.HttpBadRequest, handler.POST) |
|
987 |
|
|
988 |
self.assertRaises(IndexError, clfactory.GetNextClient) |
|
989 |
|
|
990 |
# Correct version |
|
991 |
data[rlib2._REQ_DATA_VERSION] = 1 |
|
992 |
handler = _CreateHandler(rlib2.R_2_instances, [], {}, data, clfactory) |
|
993 |
job_id = handler.POST() |
|
994 |
|
|
995 |
cl = clfactory.GetNextClient() |
|
996 |
self.assertRaises(IndexError, clfactory.GetNextClient) |
|
997 |
|
|
998 |
(exp_job_id, (op, )) = cl.GetNextSubmittedJob() |
|
999 |
self.assertEqual(job_id, exp_job_id) |
|
1000 |
self.assertTrue(isinstance(op, opcodes.OpInstanceCreate)) |
|
1001 |
self.assertRaises(IndexError, cl.GetNextSubmittedJob) |
|
925 | 1002 |
|
926 | 1003 |
|
927 | 1004 |
class TestBackupExport(unittest.TestCase): |
Also available in: Unified diff