def test_ltp_hugemmap(self): ''' polarion_id: RHEL7-88729 bz: 1312331 ''' utils_lib.get_memsize(self) if utils_lib.is_arch(self, arch='aarch64') and utils_lib.get_memsize(self) < 100: #Hugepagesize is big in aarch64, so not run all hugetlb case in low memory arm system self._ltp_run(case_name="hugemmap01", file_name="hugetlb") elif utils_lib.get_memsize(self) < 4: self._ltp_run(case_name="hugemmap01", file_name="hugetlb") else: self._ltp_run(file_name="hugetlb")
def _verify_memory_size(self, expect_ratio=None): ''' Verify memory capacity (GB) between Nutanix AHV and RHEL guest. ''' self.log.info( "Verify memory capacity (GB) between Nutanix AHV and RHEL guest") mem_in_ahv = float(self.vm.get_memory_size()) if not expect_ratio: if mem_in_ahv <= 1: expect_ratio = 0.75 elif mem_in_ahv in range(2, 4): expect_ratio = 0.8 elif mem_in_ahv in range(4, 8): expect_ratio = 0.88 elif mem_in_ahv >= 8: expect_ratio = 0.92 mem_in_guest = float(round(utils_lib.get_memsize(self), 2)) self.assertLess( mem_in_guest, mem_in_ahv, "Test failed, memory capacity on RHEL guest: %s is more than on Nutanix AHV: %s" % (mem_in_guest, mem_in_ahv)) self.assertGreater( mem_in_guest / mem_in_ahv, float(expect_ratio), "Test failed, memory capacity on RHEL guest: %s does not match with Nutanix AHV: %s" % (mem_in_guest, mem_in_ahv))
def test_fork_pte(self): ''' case_name: test_fork_pte case_priority: 2 component: kernel bugzilla_id: 1908439 polarion_id: n/a maintainer: [email protected] description: Ensure dirty bit is preserved across pte_wrprotect key_steps: 1. # wget https://github.com/redis/redis/files/5717040/redis_8124.c.txt 2. # mv redis_8124.c.txt redis_8124.c 3. # gcc -o reproduce redis_8124.c 4. # systemd-run --scope -p MemoryLimit=550M ./reproduce expected_result: Your kernel looks fine. ''' utils_lib.run_cmd(self, 'uname -r', cancel_not_kw='el7,el6', msg='not support in el7 and el6') if utils_lib.get_memsize(self) < 4: self.skipTest('skip when mem lower than 4GiB') utils_lib.is_cmd_exist(self, cmd='gcc', cancel_case=True) utils_lib.is_cmd_exist(self, cmd='wget', cancel_case=True) cmd_list = [ 'wget https://github.com/redis/redis/files/5717040/redis_8124.c.txt', 'mv redis_8124.c.txt redis_8124.c', 'gcc -o reproduce redis_8124.c', 'sudo systemd-run --scope -p MemoryLimit=550M ./reproduce' ] for cmd in cmd_list: out = utils_lib.run_cmd(self, cmd, expect_ret=0, timeout=120) if 'Your kernel looks fine' not in out: self.fail("'Your kernel looks fine' not found in {}".format(out))
def test_check_lshw_mem(self): ''' case_name: test_check_lshw_mem case_priority: 1 component: lshw bugzilla_id: 1882157 polarion_id: n/a maintainer: [email protected] description: Check "lshw -C memory -json" reported memory size is correct. key_steps: 1. # lshw -C memory -json expected_result: No big gap found. eg. # lshw -C memory -json|grep -i size "size" : 98304, "size" : 4286578688, <-- 4GiB is correct "size" : 4286578688, ''' utils_lib.is_cmd_exist(self, cmd='lshw') base_memory = utils_lib.get_memsize(self) cmd = 'lshw -json' output = utils_lib.run_cmd(self, cmd, expect_ret=0) out = json.loads(output)['children'][0]["children"] for i in out: if i['id'] == 'memory': mem_in_byte = i['size'] break mem_in_gib = mem_in_byte / 1024 / 1024 / 1024 self.log.info("lshw showed mem: {}".format(mem_in_gib)) utils_lib.compare_nums(self, mem_in_gib, base_memory, ratio=15)
def test_boot_debugkernel(self): ''' polarion_id: bz: 1703366 ''' if self.vm.provider == 'nutanix' and self.vm.prism.if_secure_boot: self.skipTest('''Red Hat Insights error "sed: can't read /sys/kernel/debug/sched_features: Operation not permitted" When using secure boot''') self.old_grub_index = utils_lib.run_cmd(self, 'sudo grubby --default-index', expect_ret=0) self.log.info("Check kernel-debug can boot up!") mini_mem = utils_lib.get_memsize(self) if int(mini_mem) < 2: self.skipTest('minimal 2G memory required for debug kernel') if utils_lib.is_arch(self, 'aarch64') and int(mini_mem) < 4: self.skipTest('minimal 4G memory required in aarch64') need_reboot = False kernel_ver = utils_lib.run_cmd(self, 'uname -r', expect_ret=0) if 'debug' in kernel_ver: self.log.info('already in debug kernel') else: need_reboot = True if 'el7' in kernel_ver: debug_kernel = "/boot/vmlinuz-" + kernel_ver.strip('\n') + ".debug" else: debug_kernel = "/boot/vmlinuz-" + kernel_ver.strip('\n') + "+debug" kernel_pkg = 'kernel-debug-' + kernel_ver utils_lib.is_pkg_installed(self, pkg_name=kernel_pkg, timeout=600) #Increase this timeout time for once failure against Nutanix VM utils_lib.run_cmd(self, "sudo grubby --info=%s" % debug_kernel, expect_ret=0, msg="check kernel-debug installed") cmd = "sudo grubby --info=%s|grep index|cut -d'=' -f2" % debug_kernel debug_kernel_index = utils_lib.run_cmd(self, cmd, expect_ret=0, cancel_ret='0', msg="check kernel-debug index") cmd = "sudo grubby --set-default-index=%s" % debug_kernel_index utils_lib.run_cmd(self, cmd, expect_ret=0, msg="change default boot index") cmd = 'cat /proc/cmdline' cmd_options = utils_lib.run_cmd(self, cmd) if 'kmemleak=on' not in cmd_options: need_reboot = True if need_reboot: cmd = 'sudo grubby --update-kernel=ALL --args="kmemleak=on"' utils_lib.run_cmd(self, cmd, expect_ret=0, msg="enable kmemleak") utils_lib.run_cmd(self, 'sudo reboot', msg='reboot system under test') time.sleep(10) utils_lib.init_connection(self, timeout=self.ssh_timeout) utils_lib.run_cmd(self, 'uname -r', expect_ret=0, expect_kw='debug', msg="checking debug kernel booted") utils_lib.run_cmd(self, 'dmesg', expect_ret=0, msg="saving dmesg output") cmd = 'journalctl > /tmp/journalctl.log' utils_lib.run_cmd(self, cmd, expect_ret=0, msg="saving journalctl output") utils_lib.run_cmd(self, 'cat /tmp/journalctl.log', expect_ret=0) utils_lib.run_cmd(self, "sudo systemd-analyze blame > /tmp/blame.log") utils_lib.run_cmd(self, "cat /tmp/blame.log") cmd = "sudo systemd-analyze " time_start = int(time.time()) while True: output = utils_lib.run_cmd(self, cmd) if 'Bootup is not yet finished' not in output: break time_end = int(time.time()) utils_lib.run_cmd(self, 'sudo systemctl list-jobs') if time_end - time_start > 120: self.fail("Bootup is not yet finished after 120s") self.log.info("Wait for bootup finish......") time.sleep(1) utils_lib.run_cmd(self, "dmesg", expect_not_kw="Call trace,Call Trace") if int(mini_mem) < 17: cmd = 'sudo bash -c "echo scan > /sys/kernel/debug/kmemleak"' utils_lib.run_cmd(self, cmd, expect_ret=0, timeout=1800) cmd = 'sudo cat /sys/kernel/debug/kmemleak' output = utils_lib.run_cmd(self, cmd, expect_ret=0) if len(output) > 0: self.fail('Memory leak found!')
def test_boot_debugkernel(self): ''' polarion_id: bz: 1703366 ''' self.old_grub_index = utils_lib.run_cmd(self, 'sudo grubby --default-index', expect_ret=0) self.log.info("Check kernel-debug can boot up!") mini_mem = utils_lib.get_memsize(self) if int(mini_mem) < 2: self.skipTest('minimal 2G memory required for debug kernel') if utils_lib.is_arch(self, 'aarch64') and int(mini_mem) < 4: self.skipTest('minimal 4G memory required in aarch64') kernel_ver = utils_lib.run_cmd(self, 'uname -r', expect_ret=0) if 'el7' in kernel_ver: debug_kernel = "/boot/vmlinuz-" + kernel_ver.strip('\n') + ".debug" else: debug_kernel = "/boot/vmlinuz-" + kernel_ver.strip('\n') + "+debug" utils_lib.run_cmd(self, "sudo grubby --info=%s" % debug_kernel, expect_ret=0, msg="check kernel-debug installed") cmd = "sudo grubby --info=%s|grep index|cut -d'=' -f2" % debug_kernel debug_kernel_index = utils_lib.run_cmd(self, cmd, expect_ret=0, cancel_ret='0', msg="check kernel-debug index") cmd = "sudo grubby --set-default-index=%s" % debug_kernel_index utils_lib.run_cmd(self, cmd, expect_ret=0, msg="change default boot index") cmd = 'sudo grubby --update-kernel=ALL --args="kmemleak=on"' utils_lib.run_cmd(self, cmd, expect_ret=0, msg="enable kmemleak") utils_lib.run_cmd(self, 'sudo reboot', msg='reboot system under test') time.sleep(10) utils_lib.init_connection(self, timeout=800) utils_lib.run_cmd(self, 'uname -r', expect_ret=0, expect_kw='debug', msg="checking debug kernel booted") utils_lib.run_cmd(self, 'dmesg', expect_ret=0, msg="saving dmesg output") cmd = 'journalctl > /tmp/journalctl.log' utils_lib.run_cmd(self, cmd, expect_ret=0, msg="saving journalctl output") utils_lib.run_cmd(self, 'cat /tmp/journalctl.log', expect_ret=0) utils_lib.run_cmd(self, "sudo systemd-analyze blame > /tmp/blame.log") utils_lib.run_cmd(self, "cat /tmp/blame.log") cmd = "sudo systemd-analyze " time_start = int(time.time()) while True: output = utils_lib.run_cmd(self, cmd) if 'Bootup is not yet finished' not in output: break time_end = int(time.time()) utils_lib.run_cmd(self, 'sudo systemctl list-jobs') if time_end - time_start > 120: self.fail("Bootup is not yet finished after 120s") self.log.info("Wait for bootup finish......") time.sleep(1) utils_lib.run_cmd(self, "dmesg", expect_not_kw="Call trace,Call Trace") if int(mini_mem) < 17: cmd = 'sudo echo scan > /sys/kernel/debug/kmemleak' utils_lib.run_cmd(self, cmd, expect_ret=0, timeout=1800) cmd = 'sudo cat /sys/kernel/debug/kmemleak' output = utils_lib.run_cmd(self, cmd, expect_ret=0) if len(output) > 0: self.fail('Memory leak found!')