def unload_modules(): TestRun.LOGGER.info("Check if CAS is installed") if installer.check_if_installed(): TestRun.LOGGER.info("Unloading modules") cas_module.unload_all_cas_modules() TestRun.LOGGER.info("Stop kedr if it is running") if Kedr.is_loaded(): Kedr.stop() TestRun.LOGGER.info("Mounting debugfs") os_utils.mount_debugfs()
def test_kedr_memleak_load_cas_module(module, unload_modules, install_kedr): """ title: Loading modules with kedr started with 'memleak' configuration description: Load and unload modules with kedr started to watch for memory leaks pass_criteria: - No memory leaks observed after loading and unloading module """ with TestRun.step(f"Starting kedr against {module}"): Kedr.start(module.value) with TestRun.step(f"Loading {module}"): os_utils.load_kernel_module(module.value) with TestRun.step(f"Unloading {module}"): os_utils.unload_kernel_module(module.value, os_utils.ModuleRemoveMethod.modprobe) with TestRun.step(f"Checking for memory leaks for {module}"): try: Kedr.check_for_mem_leaks(module.value) except Exception as e: TestRun.LOGGER.error(f"{e}") with TestRun.step(f"Stopping kedr"): Kedr.stop()
def test_kedr_basic_io_raw(module, unload_modules, install_kedr): """ title: Basic IO test with kedr started with memory leaks profile description: | Load CAS modules, start kedr against one of them, start cache and add core, run simple 4 minute random IO, stop cache and unload modules pass_criteria: - No memory leaks observed """ with TestRun.step("Preparing cache device"): cache_device = TestRun.disks['cache'] cache_device.create_partitions([Size(500, Unit.MebiByte)]) cache_part = cache_device.partitions[0] with TestRun.step("Preparing core device"): core_device = TestRun.disks['core'] core_device.create_partitions([Size(1, Unit.GibiByte)]) core_part = core_device.partitions[0] with TestRun.step("Unload CAS modules if needed"): if os_utils.is_kernel_module_loaded(module.value): cas_module.unload_all_cas_modules() with TestRun.step(f"Starting kedr against {module.value}"): Kedr.start(module.value) with TestRun.step(f"Loading CAS modules"): os_utils.load_kernel_module(cas_module.CasModule.cache.value) with TestRun.step("Starting cache"): cache = casadm.start_cache(cache_part, force=True) with TestRun.step("Adding core"): core = cache.add_core(core_dev=core_part) with TestRun.step(f"Running IO"): (Fio().create_command() .io_engine(IoEngine.libaio) .run_time(timedelta(minutes=4)) .time_based() .read_write(ReadWrite.randrw) .target(f"{core.path}") .direct() ).run() with TestRun.step("Stopping cache"): cache.stop() with TestRun.step(f"Unloading CAS modules"): cas_module.unload_all_cas_modules() with TestRun.step(f"Checking for memory leaks for {module.value}"): try: Kedr.check_for_mem_leaks(module.value) except Exception as e: TestRun.LOGGER.error(f"{e}") with TestRun.step(f"Stopping kedr"): Kedr.stop()
def test_kedr_start_cache(module, unload_modules, install_kedr): """ title: Start cache and add core with kedr started against one of CAS modules description: | Load CAS modules, start kedr against one of them, start cache and add core, stop cache and unload modules pass_criteria: - No memory leaks observed """ with TestRun.step("Preparing cache device"): cache_device = TestRun.disks['cache'] cache_device.create_partitions([Size(500, Unit.MebiByte)]) cache_part = cache_device.partitions[0] with TestRun.step("Preparing core device"): core_device = TestRun.disks['core'] core_device.create_partitions([Size(1, Unit.GibiByte)]) core_part = core_device.partitions[0] with TestRun.step("Unload CAS modules if needed"): if os_utils.is_kernel_module_loaded(module.value): cas_module.unload_all_cas_modules() with TestRun.step(f"Starting kedr against {module.value}"): Kedr.start(module.value) with TestRun.step(f"Loading CAS modules"): os_utils.load_kernel_module(cas_module.CasModule.cache.value) with TestRun.step("Starting cache"): cache = casadm.start_cache(cache_part, force=True) with TestRun.step("Adding core"): cache.add_core(core_dev=core_part) with TestRun.step("Stopping cache"): cache.stop() with TestRun.step(f"Unloading CAS modules"): cas_module.unload_all_cas_modules() with TestRun.step(f"Checking for memory leaks for {module}"): try: Kedr.check_for_mem_leaks(module.value) except Exception as e: TestRun.LOGGER.error(f"{e}") with TestRun.step(f"Stopping kedr"): Kedr.stop()
def test_kedr_fsim_load_cas_module(module, unload_modules, install_kedr): """ title: Loading modules with kedr started with 'fsim' configuration description: Load and unload modules with kedr started to simulate kmalloc fails pass_criteria: - Module fails to load """ with TestRun.step(f"Starting kedr against {module}"): Kedr.start(module.value, KedrProfile.FAULT_SIM) with TestRun.step("Setting up fault simulation parameters"): Kedr.setup_fault_injections() with TestRun.step(f"Trying to load {module}"): out = os_utils.load_kernel_module(module.value) if out.exit_code == 0 \ or "Cannot allocate memory" not in out.stderr: TestRun.LOGGER.error(f"Loading module should fail because of alloc error, instead " f"modprobe's output is: {out}") with TestRun.step(f"Stopping kedr"): Kedr.stop()
def install_kedr(): TestRun.LOGGER.info("Checking if kedr is installed") if not Kedr.is_installed(): TestRun.LOGGER.info("Installing kedr") Kedr.install()