From 95b07c2d205ba04f91dc0444593aa613a684b4ef Mon Sep 17 00:00:00 2001 From: iasunsea Date: Tue, 9 May 2023 20:00:07 +0800 Subject: [PATCH] check 'reserve-mb' number with kickstart --- com_redhat_kdump/service/kdump.py | 12 +++ test/unit_tests/test_interface.py | 45 +++++++++- test/unit_tests/test_kickstart.py | 136 +++++++++++++++++++++++++++++- 3 files changed, 191 insertions(+), 2 deletions(-) diff --git a/com_redhat_kdump/service/kdump.py b/com_redhat_kdump/service/kdump.py index 3f2a14c..5c2a5b6 100755 --- a/com_redhat_kdump/service/kdump.py +++ b/com_redhat_kdump/service/kdump.py @@ -49,6 +49,7 @@ def __init__(self): self._reserved_memory = "auto" self.reserved_memory_changed = Signal() + self._lower, self._upper, self._step = getMemoryBounds() def publish(self): """Publish the DBus objects.""" @@ -85,6 +86,17 @@ def reserved_memory(self): @reserved_memory.setter def reserved_memory(self, value): + if value != "auto": + suffix = False + if value[-1] == 'M': + value = value[:-1] + suffix = True + if int(value) > self._upper: + value = self._upper + if int(value) < self._lower: + value = self._lower + if suffix: + value += 'M' self._reserved_memory = value self.reserved_memory_changed.emit() log.debug("Reserved memory is set to '%s'.", value) diff --git a/test/unit_tests/test_interface.py b/test/unit_tests/test_interface.py index dbac003..aff5acc 100644 --- a/test/unit_tests/test_interface.py +++ b/test/unit_tests/test_interface.py @@ -1,11 +1,35 @@ from unittest.case import TestCase +from unittest.mock import patch from unittest.mock import Mock from com_redhat_kdump import common +from .mock import MockBuiltinRead from com_redhat_kdump.constants import KDUMP from com_redhat_kdump.service.kdump import KdumpService from com_redhat_kdump.service.kdump_interface import KdumpInterface +SYS_CRASH_SIZE = '/sys/kernel/kexec_crash_size' +PROC_MEMINFO = '/proc/meminfo' +CRASHKERNEL_DEFAULT = '/usr/lib/modules/{}/crashkernel.default' + +X86_INFO_FIXTURE = { + SYS_CRASH_SIZE: "167772160", # 160MB + PROC_MEMINFO:"""MemTotal: 1048576 kB +""" # 1GB - 160MB +} + +AARCH64_NFO_FIXTURE = { + SYS_CRASH_SIZE: "536870912", # 512MB + PROC_MEMINFO:"""MemTotal: 2097152 kB +""" # 2GB - 512MB +} + +PPC64_INFO_FIXTURE = { + SYS_CRASH_SIZE: "1073741824", # 1024MB + PROC_MEMINFO:"""MemTotal: 66060288 kB +""" # 64GB - 1GB +} + class PropertiesChangedCallback(Mock): @@ -48,7 +72,26 @@ def test_fadump_enabled(self): self._check_properties_changed("FadumpEnabled", True) self.assertEqual(self._interface.FadumpEnabled, True) - def test_reserved_memory(self): + @patch("builtins.open", MockBuiltinRead(AARCH64_NFO_FIXTURE)) + @patch("blivet.arch.get_arch", return_value="aarch64") + def test_reserved_memory_aarch64(self): + self._service.__init__() + self._interface.ReservedMemory = "256" + self._check_properties_changed("ReservedMemory", "512") + self.assertEqual(self._interface.ReservedMemory, "512") + + @patch("builtins.open", MockBuiltinRead(X86_INFO_FIXTURE)) + @patch("blivet.arch.get_arch", return_value="aarch64") + def test_reserved_memory_aarch64(self): + self._service.__init__() self._interface.ReservedMemory = "256" self._check_properties_changed("ReservedMemory", "256") self.assertEqual(self._interface.ReservedMemory, "256") + + @patch("builtins.open", MockBuiltinRead(PPC64_INFO_FIXTURE)) + @patch("blivet.arch.get_arch", return_value="aarch64") + def test_reserved_memory_aarch64(self): + self._service.__init__() + self._interface.ReservedMemory = "256" + self._check_properties_changed("ReservedMemory", "384") + self.assertEqual(self._interface.ReservedMemory, "384") diff --git a/test/unit_tests/test_kickstart.py b/test/unit_tests/test_kickstart.py index 746c242..ed503b6 100644 --- a/test/unit_tests/test_kickstart.py +++ b/test/unit_tests/test_kickstart.py @@ -1,8 +1,44 @@ from textwrap import dedent from unittest.case import TestCase +from unittest.mock import patch from com_redhat_kdump import common +from .mock import MockBuiltinRead from com_redhat_kdump.service.kdump import KdumpService +SYS_CRASH_SIZE = '/sys/kernel/kexec_crash_size' +PROC_MEMINFO = '/proc/meminfo' +CRASHKERNEL_DEFAULT = '/usr/lib/modules/{}/crashkernel.default' + +X86_INFO_FIXTURE = { + SYS_CRASH_SIZE: "167772160", # 160MB + PROC_MEMINFO:"""MemTotal: 4030464 kB +""" # 4GB - 160MB +} + +X86_LOWER_INFO_FIXTURE = { + SYS_CRASH_SIZE: "167772160", # 160MB + PROC_MEMINFO:"""MemTotal: 1048576 kB +""" # 1GB - 160MB +} + +AARCH64_INFO_FIXTURE = { + SYS_CRASH_SIZE: "536870912", # 512MB + PROC_MEMINFO:"""MemTotal: 66584576 kB +""" # 64GB - 512MB +} + +AARCH64_LOWER_NFO_FIXTURE = { + SYS_CRASH_SIZE: "536870912", # 512MB + PROC_MEMINFO:"""MemTotal: 2097152 kB +""" # 2GB - 512MB +} + +PPC64_INFO_FIXTURE = { + SYS_CRASH_SIZE: "1073741824", # 1024MB + PROC_MEMINFO:"""MemTotal: 66060288 kB +""" # 64GB - 1GB +} + class KdumpKickstartTestCase(TestCase): @@ -68,7 +104,29 @@ def test_ks_disable(self): %end """) - def test_ks_reserve_mb(self): + @patch("builtins.open", MockBuiltinRead(X86_INFO_FIXTURE)) + @patch("blivet.arch.get_arch", return_value="x86_64") + def test_ks_reserve_mb_x86_with_low(self, _mock_read): + self._service.__init__() + self._check_ks_input(""" + %addon com_redhat_kdump --enable --reserve-mb=80 + %end + """) + + self.assertEqual(self._service.kdump_enabled, True) + self.assertEqual(self._service.fadump_enabled, False) + self.assertEqual(self._service.reserved_memory, "160") + + self._check_ks_output(""" + %addon com_redhat_kdump --enable --reserve-mb='160' + + %end + """) + + @patch("builtins.open", MockBuiltinRead(X86_INFO_FIXTURE)) + @patch("blivet.arch.get_arch", return_value="x86_64") + def test_ks_reserve_mb_x86_with_normal(self, _mock_read): + self._service.__init__() self._check_ks_input(""" %addon com_redhat_kdump --enable --reserve-mb=256 %end @@ -84,6 +142,82 @@ def test_ks_reserve_mb(self): %end """) + @patch("builtins.open", MockBuiltinRead(X86_LOWER_INFO_FIXTURE)) + @patch("blivet.arch.get_arch", return_value="x86_64") + def test_ks_reserve_mb_x86_with_up(self, _mock_read): + self._service.__init__() + self._check_ks_input(""" + %addon com_redhat_kdump --enable --reserve-mb=600 + %end + """) + + self.assertEqual(self._service.kdump_enabled, True) + self.assertEqual(self._service.fadump_enabled, False) + self.assertEqual(self._service.reserved_memory, "512") # upper = 1024M - 512M + + self._check_ks_output(""" + %addon com_redhat_kdump --enable --reserve-mb='512' + + %end + """) + + @patch("builtins.open", MockBuiltinRead(AARCH64_INFO_FIXTURE)) + @patch("blivet.arch.get_arch", return_value="aarch64") + def test_ks_reserve_mb_aarch64_with_low(self, _mock_read): + self._service.__init__() + self._check_ks_input(""" + %addon com_redhat_kdump --enable --reserve-mb=256 + %end + """) + + self.assertEqual(self._service.kdump_enabled, True) + self.assertEqual(self._service.fadump_enabled, False) + self.assertEqual(self._service.reserved_memory, "512") + + self._check_ks_output(""" + %addon com_redhat_kdump --enable --reserve-mb='512' + + %end + """) + + @patch("builtins.open", MockBuiltinRead(AARCH64_INFO_FIXTURE)) + @patch("blivet.arch.get_arch", return_value="aarch64") + def test_ks_reserve_mb_aarch64_with_normal(self, _mock_read): + self._service.__init__() + self._check_ks_input(""" + %addon com_redhat_kdump --enable --reserve-mb=1024 + %end + """) + + self.assertEqual(self._service.kdump_enabled, True) + self.assertEqual(self._service.fadump_enabled, False) + self.assertEqual(self._service.reserved_memory, "1024") + + self._check_ks_output(""" + %addon com_redhat_kdump --enable --reserve-mb='1024' + + %end + """) + + @patch("builtins.open", MockBuiltinRead(AARCH64_LOWER_NFO_FIXTURE)) + @patch("blivet.arch.get_arch", return_value="aarch64") + def test_ks_reserve_mb_aarch64_with_up(self, _mock_read): + self._service.__init__() + self._check_ks_input(""" + %addon com_redhat_kdump --enable --reserve-mb=1600 + %end + """) + + self.assertEqual(self._service.kdump_enabled, True) + self.assertEqual(self._service.fadump_enabled, False) + self.assertEqual(self._service.reserved_memory, "1536") # upper = 2*1024M - 512M + + self._check_ks_output(""" + %addon com_redhat_kdump --enable --reserve-mb='1536' + + %end + """) + def test_ks_reserve_auto(self): self._check_ks_input(""" %addon com_redhat_kdump --enable --reserve-mb=auto