예제 #1
0
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()
예제 #2
0
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()
예제 #3
0
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()
예제 #4
0
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()
예제 #5
0
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()
예제 #6
0
def install_kedr():
    TestRun.LOGGER.info("Checking if kedr is installed")
    if not Kedr.is_installed():
        TestRun.LOGGER.info("Installing kedr")
        Kedr.install()