Revision 41044e04 test/py/ganeti.cmdlib_unittest.py
b/test/py/ganeti.cmdlib_unittest.py | ||
---|---|---|
673 | 673 |
# Minimal policy accepted by _ComputeIPolicySpecViolation() |
674 | 674 |
_MICRO_IPOL = { |
675 | 675 |
constants.IPOLICY_DTS: [constants.DT_PLAIN, constants.DT_DISKLESS], |
676 |
constants.ISPECS_MINMAX: NotImplemented,
|
|
676 |
constants.ISPECS_MINMAX: [NotImplemented],
|
|
677 | 677 |
} |
678 | 678 |
|
679 | 679 |
def test(self): |
... | ... | |
719 | 719 |
self.assertEqual(ret, ["foo", "bar"]) |
720 | 720 |
self.assertFalse(spec.spec) |
721 | 721 |
|
722 |
def testWithIPolicy(self): |
|
723 |
mem_size = 2048 |
|
724 |
cpu_count = 2 |
|
725 |
disk_count = 1 |
|
726 |
disk_sizes = [512] |
|
727 |
nic_count = 1 |
|
728 |
spindle_use = 4 |
|
729 |
disk_template = "mytemplate" |
|
730 |
ispec = { |
|
731 |
constants.ISPEC_MEM_SIZE: mem_size, |
|
732 |
constants.ISPEC_CPU_COUNT: cpu_count, |
|
733 |
constants.ISPEC_DISK_COUNT: disk_count, |
|
734 |
constants.ISPEC_DISK_SIZE: disk_sizes[0], |
|
735 |
constants.ISPEC_NIC_COUNT: nic_count, |
|
736 |
constants.ISPEC_SPINDLE_USE: spindle_use, |
|
737 |
} |
|
738 |
ipolicy1 = { |
|
739 |
constants.ISPECS_MINMAX: [{ |
|
740 |
constants.ISPECS_MIN: ispec, |
|
741 |
constants.ISPECS_MAX: ispec, |
|
742 |
}], |
|
743 |
constants.IPOLICY_DTS: [disk_template], |
|
744 |
} |
|
745 |
ispec_copy = copy.deepcopy(ispec) |
|
746 |
ipolicy2 = { |
|
747 |
constants.ISPECS_MINMAX: [ |
|
748 |
{ |
|
749 |
constants.ISPECS_MIN: ispec_copy, |
|
750 |
constants.ISPECS_MAX: ispec_copy, |
|
751 |
}, |
|
752 |
{ |
|
753 |
constants.ISPECS_MIN: ispec, |
|
754 |
constants.ISPECS_MAX: ispec, |
|
755 |
}, |
|
756 |
], |
|
757 |
constants.IPOLICY_DTS: [disk_template], |
|
758 |
} |
|
759 |
ipolicy3 = { |
|
760 |
constants.ISPECS_MINMAX: [ |
|
761 |
{ |
|
762 |
constants.ISPECS_MIN: ispec, |
|
763 |
constants.ISPECS_MAX: ispec, |
|
764 |
}, |
|
765 |
{ |
|
766 |
constants.ISPECS_MIN: ispec_copy, |
|
767 |
constants.ISPECS_MAX: ispec_copy, |
|
768 |
}, |
|
769 |
], |
|
770 |
constants.IPOLICY_DTS: [disk_template], |
|
771 |
} |
|
772 |
def AssertComputeViolation(ipolicy, violations): |
|
773 |
ret = cmdlib._ComputeIPolicySpecViolation(ipolicy, mem_size, cpu_count, |
|
774 |
disk_count, nic_count, |
|
775 |
disk_sizes, spindle_use, |
|
776 |
disk_template) |
|
777 |
self.assertEqual(len(ret), violations) |
|
778 |
|
|
779 |
AssertComputeViolation(ipolicy1, 0) |
|
780 |
AssertComputeViolation(ipolicy2, 0) |
|
781 |
AssertComputeViolation(ipolicy3, 0) |
|
782 |
for par in constants.ISPECS_PARAMETERS: |
|
783 |
ispec[par] += 1 |
|
784 |
AssertComputeViolation(ipolicy1, 1) |
|
785 |
AssertComputeViolation(ipolicy2, 0) |
|
786 |
AssertComputeViolation(ipolicy3, 0) |
|
787 |
ispec[par] -= 2 |
|
788 |
AssertComputeViolation(ipolicy1, 1) |
|
789 |
AssertComputeViolation(ipolicy2, 0) |
|
790 |
AssertComputeViolation(ipolicy3, 0) |
|
791 |
ispec[par] += 1 # Restore |
|
792 |
ipolicy1[constants.IPOLICY_DTS] = ["another_template"] |
|
793 |
AssertComputeViolation(ipolicy1, 1) |
|
794 |
|
|
722 | 795 |
|
723 | 796 |
class _StubComputeIPolicySpecViolation: |
724 | 797 |
def __init__(self, mem_size, cpu_count, disk_count, nic_count, disk_sizes, |
... | ... | |
1733 | 1806 |
"""Tests for cmdlib._GetUpdatedIPolicy()""" |
1734 | 1807 |
_OLD_CLUSTER_POLICY = { |
1735 | 1808 |
constants.IPOLICY_VCPU_RATIO: 1.5, |
1736 |
constants.ISPECS_MINMAX: constants.ISPECS_MINMAX_DEFAULTS, |
|
1809 |
constants.ISPECS_MINMAX: [ |
|
1810 |
{ |
|
1811 |
constants.ISPECS_MIN: { |
|
1812 |
constants.ISPEC_MEM_SIZE: 32768, |
|
1813 |
constants.ISPEC_CPU_COUNT: 8, |
|
1814 |
constants.ISPEC_DISK_COUNT: 1, |
|
1815 |
constants.ISPEC_DISK_SIZE: 1024, |
|
1816 |
constants.ISPEC_NIC_COUNT: 1, |
|
1817 |
constants.ISPEC_SPINDLE_USE: 1, |
|
1818 |
}, |
|
1819 |
constants.ISPECS_MAX: { |
|
1820 |
constants.ISPEC_MEM_SIZE: 65536, |
|
1821 |
constants.ISPEC_CPU_COUNT: 10, |
|
1822 |
constants.ISPEC_DISK_COUNT: 5, |
|
1823 |
constants.ISPEC_DISK_SIZE: 1024 * 1024, |
|
1824 |
constants.ISPEC_NIC_COUNT: 3, |
|
1825 |
constants.ISPEC_SPINDLE_USE: 12, |
|
1826 |
}, |
|
1827 |
}, |
|
1828 |
constants.ISPECS_MINMAX_DEFAULTS, |
|
1829 |
], |
|
1737 | 1830 |
constants.ISPECS_STD: constants.IPOLICY_DEFAULTS[constants.ISPECS_STD], |
1738 | 1831 |
} |
1739 | 1832 |
_OLD_GROUP_POLICY = { |
1740 | 1833 |
constants.IPOLICY_SPINDLE_RATIO: 2.5, |
1741 |
constants.ISPECS_MINMAX: { |
|
1834 |
constants.ISPECS_MINMAX: [{
|
|
1742 | 1835 |
constants.ISPECS_MIN: { |
1743 | 1836 |
constants.ISPEC_MEM_SIZE: 128, |
1744 | 1837 |
constants.ISPEC_CPU_COUNT: 1, |
... | ... | |
1755 | 1848 |
constants.ISPEC_NIC_COUNT: 3, |
1756 | 1849 |
constants.ISPEC_SPINDLE_USE: 12, |
1757 | 1850 |
}, |
1758 |
}, |
|
1851 |
}],
|
|
1759 | 1852 |
} |
1760 | 1853 |
|
1761 | 1854 |
def _TestSetSpecs(self, old_policy, isgroup): |
1762 |
diff_minmax = { |
|
1855 |
diff_minmax = [{
|
|
1763 | 1856 |
constants.ISPECS_MIN: { |
1764 | 1857 |
constants.ISPEC_MEM_SIZE: 64, |
1765 | 1858 |
constants.ISPEC_CPU_COUNT: 1, |
... | ... | |
1776 | 1869 |
constants.ISPEC_NIC_COUNT: 9, |
1777 | 1870 |
constants.ISPEC_SPINDLE_USE: 18, |
1778 | 1871 |
}, |
1779 |
} |
|
1872 |
}]
|
|
1780 | 1873 |
diff_std = { |
1781 | 1874 |
constants.ISPEC_DISK_COUNT: 10, |
1782 | 1875 |
constants.ISPEC_DISK_SIZE: 512, |
... | ... | |
1847 | 1940 |
self.assertRaises(errors.OpPrereqError, cmdlib._GetUpdatedIPolicy, |
1848 | 1941 |
old_policy, diff_policy, group_policy=False) |
1849 | 1942 |
|
1943 |
def testUnsetEmpty(self): |
|
1944 |
old_policy = {} |
|
1945 |
for key in constants.IPOLICY_ALL_KEYS: |
|
1946 |
diff_policy = { |
|
1947 |
key: constants.VALUE_DEFAULT, |
|
1948 |
} |
|
1949 |
new_policy = cmdlib._GetUpdatedIPolicy(old_policy, diff_policy, |
|
1950 |
group_policy=True) |
|
1951 |
self.assertEqual(new_policy, old_policy) |
|
1952 |
|
|
1850 | 1953 |
def _TestInvalidKeys(self, old_policy, isgroup): |
1851 | 1954 |
INVALID_KEY = "this_key_shouldnt_be_allowed" |
1852 | 1955 |
INVALID_DICT = { |
... | ... | |
1856 | 1959 |
self.assertRaises(errors.OpPrereqError, cmdlib._GetUpdatedIPolicy, |
1857 | 1960 |
old_policy, invalid_policy, group_policy=isgroup) |
1858 | 1961 |
invalid_ispecs = { |
1859 |
constants.ISPECS_MINMAX: INVALID_DICT,
|
|
1962 |
constants.ISPECS_MINMAX: [INVALID_DICT],
|
|
1860 | 1963 |
} |
1861 | 1964 |
self.assertRaises(errors.TypeEnforcementError, cmdlib._GetUpdatedIPolicy, |
1862 | 1965 |
old_policy, invalid_ispecs, group_policy=isgroup) |
... | ... | |
1871 | 1974 |
invalid_policy = { |
1872 | 1975 |
constants.ISPECS_MINMAX: invalid_ispecs, |
1873 | 1976 |
} |
1874 |
for key in constants.ISPECS_MINMAX_KEYS: |
|
1875 |
ispec = invalid_ispecs[key] |
|
1876 |
ispec[INVALID_KEY] = None |
|
1877 |
self.assertRaises(errors.TypeEnforcementError, cmdlib._GetUpdatedIPolicy, |
|
1878 |
old_policy, invalid_policy, group_policy=isgroup) |
|
1879 |
del ispec[INVALID_KEY] |
|
1880 |
for par in constants.ISPECS_PARAMETERS: |
|
1881 |
oldv = ispec[par] |
|
1882 |
ispec[par] = "this_is_not_good" |
|
1977 |
for minmax in invalid_ispecs: |
|
1978 |
for key in constants.ISPECS_MINMAX_KEYS: |
|
1979 |
ispec = minmax[key] |
|
1980 |
ispec[INVALID_KEY] = None |
|
1883 | 1981 |
self.assertRaises(errors.TypeEnforcementError, |
1884 |
cmdlib._GetUpdatedIPolicy, |
|
1885 |
old_policy, invalid_policy, group_policy=isgroup) |
|
1886 |
ispec[par] = oldv |
|
1982 |
cmdlib._GetUpdatedIPolicy, old_policy, |
|
1983 |
invalid_policy, group_policy=isgroup) |
|
1984 |
del ispec[INVALID_KEY] |
|
1985 |
for par in constants.ISPECS_PARAMETERS: |
|
1986 |
oldv = ispec[par] |
|
1987 |
ispec[par] = "this_is_not_good" |
|
1988 |
self.assertRaises(errors.TypeEnforcementError, |
|
1989 |
cmdlib._GetUpdatedIPolicy, |
|
1990 |
old_policy, invalid_policy, group_policy=isgroup) |
|
1991 |
ispec[par] = oldv |
|
1887 | 1992 |
# This is to make sure that no two errors were present during the tests |
1888 | 1993 |
cmdlib._GetUpdatedIPolicy(old_policy, invalid_policy, group_policy=isgroup) |
1889 | 1994 |
|
Also available in: Unified diff