Merge pull request #1599 from katlapinka/kasiat/tf-refactor

Tests and CAS API fixes after TF refactor
This commit is contained in:
Katarzyna Treder 2024-12-31 12:44:52 +01:00 committed by GitHub
commit 1934e801e7
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
173 changed files with 762 additions and 1051 deletions

View File

@ -8,8 +8,8 @@ from api.cas.casadm_parser import *
from api.cas.core import Core from api.cas.core import Core
from api.cas.dmesg import get_metadata_size_on_device from api.cas.dmesg import get_metadata_size_on_device
from api.cas.statistics import CacheStats, CacheIoClassStats from api.cas.statistics import CacheStats, CacheIoClassStats
from test_utils.os_utils import * from connection.utils.output import Output
from test_utils.output import Output from test_tools.os_tools import sync
class Cache: class Cache:

View File

@ -6,9 +6,9 @@
from enum import Enum, IntFlag from enum import Enum, IntFlag
from test_utils.os_utils import get_kernel_module_parameter from test_tools.os_tools import get_kernel_module_parameter
from test_utils.size import Size, Unit from type_def.size import Size, Unit
from test_utils.time import Time from type_def.time import Time
class CacheLineSize(Enum): class CacheLineSize(Enum):

View File

@ -6,8 +6,7 @@
from enum import Enum from enum import Enum
from core.test_run import TestRun from core.test_run import TestRun
from test_utils import os_utils from test_tools.os_tools import unload_kernel_module, load_kernel_module
from test_utils.os_utils import ModuleRemoveMethod
class CasModule(Enum): class CasModule(Enum):
@ -15,12 +14,12 @@ class CasModule(Enum):
def reload_all_cas_modules(): def reload_all_cas_modules():
os_utils.unload_kernel_module(CasModule.cache.value, ModuleRemoveMethod.modprobe) unload_kernel_module(CasModule.cache.value)
os_utils.load_kernel_module(CasModule.cache.value) load_kernel_module(CasModule.cache.value)
def unload_all_cas_modules(): def unload_all_cas_modules():
os_utils.unload_kernel_module(CasModule.cache.value, os_utils.ModuleRemoveMethod.rmmod) unload_kernel_module(CasModule.cache.value)
def is_cas_management_dev_present(): def is_cas_management_dev_present():

View File

@ -9,7 +9,7 @@ import os
import re import re
from core.test_run import TestRun from core.test_run import TestRun
from test_tools.fs_utils import check_if_directory_exists, find_all_files from test_tools.fs_tools import check_if_directory_exists, find_all_files
from test_tools.linux_packaging import DebSet, RpmSet from test_tools.linux_packaging import DebSet, RpmSet

View File

@ -9,13 +9,13 @@ from datetime import timedelta
from string import Template from string import Template
from textwrap import dedent from textwrap import dedent
from test_tools.fs_utils import ( from test_tools.fs_tools import (
check_if_directory_exists, check_if_directory_exists,
create_directory, create_directory,
write_file, write_file,
remove, remove,
) )
from test_utils.systemd import reload_daemon from test_tools.systemctl import reload_daemon
opencas_drop_in_directory = Path("/etc/systemd/system/open-cas.service.d/") opencas_drop_in_directory = Path("/etc/systemd/system/open-cas.service.d/")
test_drop_in_file = Path("10-modified-timeout.conf") test_drop_in_file = Path("10-modified-timeout.conf")

View File

@ -20,9 +20,9 @@ from api.cas.cli import *
from api.cas.core import Core from api.cas.core import Core
from core.test_run import TestRun from core.test_run import TestRun
from storage_devices.device import Device from storage_devices.device import Device
from test_utils.os_utils import reload_kernel_module from test_tools.os_tools import reload_kernel_module
from test_utils.output import CmdException, Output from connection.utils.output import CmdException, Output
from test_utils.size import Size, Unit from type_def.size import Size, Unit
# casadm commands # casadm commands

View File

@ -18,7 +18,7 @@ from api.cas.ioclass_config import IoClass
from api.cas.version import CasVersion from api.cas.version import CasVersion
from core.test_run_utils import TestRun from core.test_run_utils import TestRun
from storage_devices.device import Device from storage_devices.device import Device
from test_utils.output import CmdException from connection.utils.output import CmdException
class Stats(dict): class Stats(dict):

View File

@ -7,7 +7,7 @@
import re import re
from core.test_run import TestRun from core.test_run import TestRun
from test_utils.output import Output from connection.utils.output import Output
load_inactive_core_missing = [ load_inactive_core_missing = [
r"WARNING: Can not resolve path to core \d+ from cache \d+\. By-id path will be shown for that " r"WARNING: Can not resolve path to core \d+ from cache \d+\. By-id path will be shown for that "

View File

@ -15,9 +15,10 @@ from api.cas.casadm_parser import get_seq_cut_off_parameters, get_core_info_for_
from api.cas.statistics import CoreStats, CoreIoClassStats from api.cas.statistics import CoreStats, CoreIoClassStats
from core.test_run_utils import TestRun from core.test_run_utils import TestRun
from storage_devices.device import Device from storage_devices.device import Device
from test_tools import fs_utils, disk_utils from test_tools.fs_tools import Filesystem, ls_item
from test_utils.os_utils import wait, sync from test_tools.os_tools import sync
from test_utils.size import Unit, Size from test_tools.common.wait import wait
from type_def.size import Unit, Size
class CoreStatus(Enum): class CoreStatus(Enum):
@ -49,7 +50,7 @@ class Core(Device):
return get_core_info_for_cache_by_path(core_disk_path=self.core_device.path, return get_core_info_for_cache_by_path(core_disk_path=self.core_device.path,
target_cache_id=self.cache_id) target_cache_id=self.cache_id)
def create_filesystem(self, fs_type: disk_utils.Filesystem, force=True, blocksize=None): def create_filesystem(self, fs_type: Filesystem, force=True, blocksize=None):
super().create_filesystem(fs_type, force, blocksize) super().create_filesystem(fs_type, force, blocksize)
self.core_device.filesystem = self.filesystem self.core_device.filesystem = self.filesystem
@ -138,7 +139,7 @@ class Core(Device):
def check_if_is_present_in_os(self, should_be_visible=True): def check_if_is_present_in_os(self, should_be_visible=True):
device_in_system_message = "CAS device exists in OS." device_in_system_message = "CAS device exists in OS."
device_not_in_system_message = "CAS device does not exist in OS." device_not_in_system_message = "CAS device does not exist in OS."
item = fs_utils.ls_item(f"{self.path}") item = ls_item(self.path)
if item is not None: if item is not None:
if should_be_visible: if should_be_visible:
TestRun.LOGGER.info(device_in_system_message) TestRun.LOGGER.info(device_in_system_message)

View File

@ -6,8 +6,8 @@
import re import re
from test_utils.dmesg import get_dmesg from test_tools.dmesg import get_dmesg
from test_utils.size import Size, Unit from type_def.size import Size, Unit
def get_metadata_size_on_device(cache_id: int) -> Size: def get_metadata_size_on_device(cache_id: int) -> Size:

View File

@ -7,8 +7,7 @@
from api.cas import casadm_parser from api.cas import casadm_parser
from api.cas.cache_config import CacheMode from api.cas.cache_config import CacheMode
from storage_devices.device import Device from storage_devices.device import Device
from test_tools import fs_utils from test_tools.fs_tools import remove, write_file
opencas_conf_path = "/etc/opencas/opencas.conf" opencas_conf_path = "/etc/opencas/opencas.conf"
@ -34,7 +33,7 @@ class InitConfig:
@staticmethod @staticmethod
def remove_config_file(): def remove_config_file():
fs_utils.remove(opencas_conf_path, force=False) remove(opencas_conf_path, force=False)
def save_config_file(self): def save_config_file(self):
config_lines = [] config_lines = []
@ -47,7 +46,7 @@ class InitConfig:
config_lines.append(CoreConfigLine.header) config_lines.append(CoreConfigLine.header)
for c in self.core_config_lines: for c in self.core_config_lines:
config_lines.append(str(c)) config_lines.append(str(c))
fs_utils.write_file(opencas_conf_path, "\n".join(config_lines), False) write_file(opencas_conf_path, "\n".join(config_lines), False)
@classmethod @classmethod
def create_init_config_from_running_configuration( def create_init_config_from_running_configuration(
@ -69,7 +68,7 @@ class InitConfig:
@classmethod @classmethod
def create_default_init_config(cls): def create_default_init_config(cls):
cas_version = casadm_parser.get_casadm_version() cas_version = casadm_parser.get_casadm_version()
fs_utils.write_file(opencas_conf_path, f"version={cas_version.base}") write_file(opencas_conf_path, f"version={cas_version.base}")
class CacheConfigLine: class CacheConfigLine:

View File

@ -9,8 +9,9 @@ import os
from core.test_run import TestRun from core.test_run import TestRun
from api.cas import cas_module from api.cas import cas_module
from api.cas.version import get_installed_cas_version from api.cas.version import get_installed_cas_version
from test_utils import os_utils, git from test_tools import git
from test_utils.output import CmdException from connection.utils.output import CmdException
from test_tools.os_tools import is_kernel_module_loaded
def rsync_opencas_sources(): def rsync_opencas_sources():
@ -98,7 +99,7 @@ def reinstall_opencas(version: str = ""):
def check_if_installed(version: str = ""): def check_if_installed(version: str = ""):
TestRun.LOGGER.info("Check if Open CAS Linux is installed") TestRun.LOGGER.info("Check if Open CAS Linux is installed")
output = TestRun.executor.run("which casadm") output = TestRun.executor.run("which casadm")
modules_loaded = os_utils.is_kernel_module_loaded(cas_module.CasModule.cache.value) modules_loaded = is_kernel_module_loaded(cas_module.CasModule.cache.value)
if output.exit_code != 0 or not modules_loaded: if output.exit_code != 0 or not modules_loaded:
TestRun.LOGGER.info("CAS is not installed") TestRun.LOGGER.info("CAS is not installed")

View File

@ -14,9 +14,8 @@ from datetime import timedelta
from packaging import version from packaging import version
from core.test_run import TestRun from core.test_run import TestRun
from test_tools import fs_utils from test_tools.fs_tools import write_file
from test_utils import os_utils from test_tools.os_tools import get_kernel_version
from test_utils.generator import random_string
default_config_file_path = "/tmp/opencas_ioclass.conf" default_config_file_path = "/tmp/opencas_ioclass.conf"
@ -109,7 +108,7 @@ class IoClass:
ioclass_config_path: str = default_config_file_path, ioclass_config_path: str = default_config_file_path,
): ):
TestRun.LOGGER.info(f"Creating config file {ioclass_config_path}") TestRun.LOGGER.info(f"Creating config file {ioclass_config_path}")
fs_utils.write_file( write_file(
ioclass_config_path, IoClass.list_to_csv(ioclass_list, add_default_rule) ioclass_config_path, IoClass.list_to_csv(ioclass_list, add_default_rule)
) )
@ -167,7 +166,7 @@ class IoClass:
"file_offset", "file_offset",
"request_size", "request_size",
] ]
if os_utils.get_kernel_version() >= version.Version("4.13"): if get_kernel_version() >= version.Version("4.13"):
rules.append("wlth") rules.append("wlth")
rule = random.choice(rules) rule = random.choice(rules)
@ -178,13 +177,14 @@ class IoClass:
def add_random_params(rule: str): def add_random_params(rule: str):
if rule == "directory": if rule == "directory":
allowed_chars = string.ascii_letters + string.digits + "/" allowed_chars = string.ascii_letters + string.digits + "/"
rule += f":/{random_string(random.randint(1, 40), allowed_chars)}" rule += f":/{''.join(random.choices(allowed_chars, k=random.randint(1, 40)))}"
elif rule in ["file_size", "lba", "pid", "file_offset", "request_size", "wlth"]: elif rule in ["file_size", "lba", "pid", "file_offset", "request_size", "wlth"]:
rule += f":{Operator(random.randrange(len(Operator))).name}:{random.randrange(1000000)}" rule += f":{Operator(random.randrange(len(Operator))).name}:{random.randrange(1000000)}"
elif rule == "io_class": elif rule == "io_class":
rule += f":{random.randrange(MAX_IO_CLASS_PRIORITY + 1)}" rule += f":{random.randrange(MAX_IO_CLASS_PRIORITY + 1)}"
elif rule in ["extension", "process_name", "file_name_prefix"]: elif rule in ["extension", "process_name", "file_name_prefix"]:
rule += f":{random_string(random.randint(1, 10))}" allowed_chars = string.ascii_letters + string.digits
rule += f":{''.join(random.choices(allowed_chars, k=random.randint(1, 10)))}"
if random.randrange(2): if random.randrange(2):
rule += "&done" rule += "&done"
return rule return rule

View File

@ -10,7 +10,7 @@ from datetime import timedelta
import paramiko import paramiko
from core.test_run import TestRun from core.test_run import TestRun
from test_utils.os_utils import wait from test_tools.common.wait import wait
def check_progress_bar(command: str, progress_bar_expected: bool = True): def check_progress_bar(command: str, progress_bar_expected: bool = True):

View File

@ -11,7 +11,7 @@ from typing import List
from api.cas import casadm from api.cas import casadm
from api.cas.casadm_params import StatsFilter from api.cas.casadm_params import StatsFilter
from test_utils.size import Size, Unit from type_def.size import Size, Unit
class UnitType(Enum): class UnitType(Enum):

View File

@ -6,9 +6,9 @@
import re import re
from test_utils import git from test_tools import git
from core.test_run import TestRun from core.test_run import TestRun
from test_utils.output import CmdException from connection.utils.output import CmdException
class CasVersion: class CasVersion:
@ -43,7 +43,7 @@ class CasVersion:
def get_available_cas_versions(): def get_available_cas_versions():
release_tags = git.get_release_tags() release_tags = git.get_tags()
versions = [CasVersion.from_git_tag(tag) for tag in release_tags] versions = [CasVersion.from_git_tag(tag) for tag in release_tags]

@ -1 +1 @@
Subproject commit 072c72b08c9d5657c131b5cd325175a19a5417df Subproject commit f7f2914e41ce73d13dafe6cd749aa6e2d33b4315

View File

@ -12,9 +12,8 @@ from core.test_run import TestRun
from api.cas import casadm from api.cas import casadm
from storage_devices.disk import DiskType, DiskTypeSet from storage_devices.disk import DiskType, DiskTypeSet
from api.cas.cache_config import CacheMode from api.cas.cache_config import CacheMode
from test_tools import fs_utils from test_tools.fs_tools import Filesystem, remove, create_directory
from test_tools.disk_utils import Filesystem from type_def.size import Size, Unit
from test_utils.size import Size, Unit
from test_tools.fio.fio import Fio from test_tools.fio.fio import Fio
from test_tools.fio.fio_param import ReadWrite, IoEngine from test_tools.fio.fio_param import ReadWrite, IoEngine
@ -52,8 +51,8 @@ def test_support_different_io_size(cache_mode):
cache.load_io_class(opencas_ioclass_conf_path) cache.load_io_class(opencas_ioclass_conf_path)
with TestRun.step("Create a filesystem on the core device and mount it"): with TestRun.step("Create a filesystem on the core device and mount it"):
fs_utils.remove(path=mountpoint, force=True, recursive=True, ignore_errors=True) remove(path=mountpoint, force=True, recursive=True, ignore_errors=True)
fs_utils.create_directory(path=mountpoint) create_directory(path=mountpoint)
core.create_filesystem(Filesystem.xfs) core.create_filesystem(Filesystem.xfs)
core.mount(mountpoint) core.mount(mountpoint)

View File

@ -17,12 +17,11 @@ from api.cas.cli_messages import (
) )
from core.test_run import TestRun from core.test_run import TestRun
from storage_devices.disk import DiskType, DiskTypeSet, DiskTypeLowerThan from storage_devices.disk import DiskType, DiskTypeSet, DiskTypeLowerThan
from test_tools import fs_utils
from test_tools.dd import Dd from test_tools.dd import Dd
from test_tools.disk_utils import Filesystem from test_tools.fs_tools import Filesystem, read_file
from test_utils.filesystem.file import File from test_utils.filesystem.file import File
from test_utils.output import CmdException from connection.utils.output import CmdException
from test_utils.size import Size, Unit from type_def.size import Size, Unit
version_file_path = r"/var/lib/opencas/cas_version" version_file_path = r"/var/lib/opencas/cas_version"
mountpoint = "/mnt" mountpoint = "/mnt"
@ -45,7 +44,7 @@ def test_cas_version():
cmd_cas_versions = [version.split(",")[1] for version in cmd_version.split("\n")[1:]] cmd_cas_versions = [version.split(",")[1] for version in cmd_version.split("\n")[1:]]
with TestRun.step(f"Read cas version from {version_file_path} location"): with TestRun.step(f"Read cas version from {version_file_path} location"):
file_read = fs_utils.read_file(version_file_path).split("\n") file_read = read_file(version_file_path).split("\n")
file_cas_version = next( file_cas_version = next(
(line.split("=")[1] for line in file_read if "CAS_VERSION=" in line) (line.split("=")[1] for line in file_read if "CAS_VERSION=" in line)
) )

View File

@ -9,7 +9,7 @@ import pytest
from api.cas import casadm from api.cas import casadm
from core.test_run import TestRun from core.test_run import TestRun
from storage_devices.disk import DiskTypeSet, DiskType, DiskTypeLowerThan from storage_devices.disk import DiskTypeSet, DiskType, DiskTypeLowerThan
from test_utils.size import Size, Unit from type_def.size import Size, Unit
@pytest.mark.CI @pytest.mark.CI

View File

@ -17,8 +17,8 @@ from api.cas.cache_config import (
) )
from storage_devices.disk import DiskType, DiskTypeSet, DiskTypeLowerThan from storage_devices.disk import DiskType, DiskTypeSet, DiskTypeLowerThan
from core.test_run import TestRun from core.test_run import TestRun
from test_utils.size import Size, Unit from type_def.size import Size, Unit
from test_utils.os_utils import Udev from test_tools.udev import Udev
from test_tools.fio.fio import Fio from test_tools.fio.fio import Fio
from test_tools.fio.fio_param import ReadWrite, IoEngine from test_tools.fio.fio_param import ReadWrite, IoEngine

View File

@ -15,8 +15,8 @@ from core.test_run import TestRun
from storage_devices.disk import DiskType, DiskTypeSet, DiskTypeLowerThan from storage_devices.disk import DiskType, DiskTypeSet, DiskTypeLowerThan
from test_tools.fio.fio import Fio from test_tools.fio.fio import Fio
from test_tools.fio.fio_param import IoEngine, ReadWrite from test_tools.fio.fio_param import IoEngine, ReadWrite
from test_utils.output import CmdException from connection.utils.output import CmdException
from test_utils.size import Size, Unit from type_def.size import Size, Unit
@pytest.mark.parametrize("cache_mode", CacheMode.with_traits(CacheModeTrait.LazyWrites)) @pytest.mark.parametrize("cache_mode", CacheMode.with_traits(CacheModeTrait.LazyWrites))

View File

@ -5,15 +5,14 @@
# #
import random import random
import pytest import pytest
from api.cas import casadm from api.cas import casadm
from core.test_run import TestRun from core.test_run import TestRun
from storage_devices.disk import DiskType, DiskTypeLowerThan, DiskTypeSet from storage_devices.disk import DiskType, DiskTypeLowerThan, DiskTypeSet
from test_tools.disk_utils import Filesystem from test_tools.fs_tools import Filesystem
from test_utils.output import CmdException from connection.utils.output import CmdException
from test_utils.size import Size, Unit from type_def.size import Size, Unit
mount_point = "/mnt/cas" mount_point = "/mnt/cas"
cores_amount = 3 cores_amount = 3

View File

@ -15,8 +15,9 @@ from core.test_run import TestRun
from storage_devices.disk import DiskType, DiskTypeSet, DiskTypeLowerThan from storage_devices.disk import DiskType, DiskTypeSet, DiskTypeLowerThan
from test_tools.fio.fio import Fio from test_tools.fio.fio import Fio
from test_tools.fio.fio_param import ReadWrite, IoEngine, VerifyMethod from test_tools.fio.fio_param import ReadWrite, IoEngine, VerifyMethod
from test_utils.os_utils import Udev, sync from test_tools.os_tools import sync
from test_utils.size import Size, Unit from test_tools.udev import Udev
from type_def.size import Size, Unit
io_size = Size(10000, Unit.Blocks4096) io_size = Size(10000, Unit.Blocks4096)

View File

@ -9,7 +9,7 @@ import pytest
from api.cas import casadm, cli, cli_messages from api.cas import casadm, cli, cli_messages
from core.test_run import TestRun from core.test_run import TestRun
from storage_devices.disk import DiskType, DiskTypeSet, DiskTypeLowerThan from storage_devices.disk import DiskType, DiskTypeSet, DiskTypeLowerThan
from test_utils.size import Size, Unit from type_def.size import Size, Unit
@pytest.mark.require_disk("cache", DiskTypeSet([DiskType.optane, DiskType.nand])) @pytest.mark.require_disk("cache", DiskTypeSet([DiskType.optane, DiskType.nand]))

View File

@ -21,12 +21,12 @@ from api.cas.casadm_params import StatsFilter
from core.test_run_utils import TestRun from core.test_run_utils import TestRun
from storage_devices.disk import DiskTypeSet, DiskTypeLowerThan, DiskType from storage_devices.disk import DiskTypeSet, DiskTypeLowerThan, DiskType
from test_tools.dd import Dd from test_tools.dd import Dd
from test_tools.disk_utils import Filesystem from test_tools.fs_tools import Filesystem
from test_tools.fio.fio import Fio from test_tools.fio.fio import Fio
from test_tools.fio.fio_param import IoEngine, ReadWrite from test_tools.fio.fio_param import IoEngine, ReadWrite
from test_utils.os_utils import Udev from test_tools.udev import Udev
from test_utils.output import CmdException from connection.utils.output import CmdException
from test_utils.size import Size, Unit from type_def.size import Size, Unit
random_thresholds = random.sample(range(1028, 1024**2, 4), 3) random_thresholds = random.sample(range(1028, 1024**2, 4), 3)
random_stream_numbers = random.sample(range(2, 128), 3) random_stream_numbers = random.sample(range(2, 128), 3)

View File

@ -15,8 +15,9 @@ from core.test_run import TestRun
from storage_devices.disk import DiskType, DiskTypeSet, DiskTypeLowerThan from storage_devices.disk import DiskType, DiskTypeSet, DiskTypeLowerThan
from test_tools.fio.fio import Fio from test_tools.fio.fio import Fio
from test_tools.fio.fio_param import ReadWrite, IoEngine, CpusAllowedPolicy from test_tools.fio.fio_param import ReadWrite, IoEngine, CpusAllowedPolicy
from test_utils.os_utils import Udev, sync, get_dut_cpu_physical_cores from test_tools.os_tools import sync, get_dut_cpu_physical_cores
from test_utils.size import Size, Unit from test_tools.udev import Udev
from type_def.size import Size, Unit
class VerifyType(Enum): class VerifyType(Enum):

View File

@ -1,5 +1,6 @@
# #
# Copyright(c) 2022 Intel Corporation # Copyright(c) 2022 Intel Corporation
# Copyright(c) 2024 Huawei Technologies Co., Ltd.
# SPDX-License-Identifier: BSD-3-Clause # SPDX-License-Identifier: BSD-3-Clause
# #
@ -9,8 +10,8 @@ from api.cas import casadm
from api.cas.cache_config import CacheMode from api.cas.cache_config import CacheMode
from core.test_run import TestRun from core.test_run import TestRun
from storage_devices.disk import DiskType, DiskTypeSet, DiskTypeLowerThan from storage_devices.disk import DiskType, DiskTypeSet, DiskTypeLowerThan
from test_utils.os_utils import Udev from test_tools.udev import Udev
from test_utils.size import Unit, Size from type_def.size import Unit, Size
from test_tools.dd import Dd from test_tools.dd import Dd
from test_tools.iostat import IOstatBasic from test_tools.iostat import IOstatBasic
@ -62,7 +63,7 @@ def test_ci_read(cache_mode):
dd.run() dd.run()
with TestRun.step("Collect iostat"): with TestRun.step("Collect iostat"):
iostat = IOstatBasic.get_iostat_list([cache_device.parent_device]) iostat = IOstatBasic.get_iostat_list([cache_device.parent_device.get_device_id()])
read_cache_1 = iostat[0].total_reads read_cache_1 = iostat[0].total_reads
with TestRun.step("Generate cache hits using reads"): with TestRun.step("Generate cache hits using reads"):
@ -77,7 +78,7 @@ def test_ci_read(cache_mode):
dd.run() dd.run()
with TestRun.step("Collect iostat"): with TestRun.step("Collect iostat"):
iostat = IOstatBasic.get_iostat_list([cache_device.parent_device]) iostat = IOstatBasic.get_iostat_list([cache_device.parent_device.get_device_id()])
read_cache_2 = iostat[0].total_reads read_cache_2 = iostat[0].total_reads
with TestRun.step("Stop cache"): with TestRun.step("Stop cache"):
@ -117,10 +118,10 @@ def test_ci_write_around_write():
casadm.add_core(cache, core_device) casadm.add_core(cache, core_device)
with TestRun.step("Collect iostat before I/O"): with TestRun.step("Collect iostat before I/O"):
iostat_core = IOstatBasic.get_iostat_list([core_device.parent_device]) iostat_core = IOstatBasic.get_iostat_list([core_device.parent_device.get_device_id()])
write_core_0 = iostat_core[0].total_writes write_core_0 = iostat_core[0].total_writes
iostat_cache = IOstatBasic.get_iostat_list([cache_device.parent_device]) iostat_cache = IOstatBasic.get_iostat_list([cache_device.parent_device.get_device_id()])
write_cache_0 = iostat_cache[0].total_writes write_cache_0 = iostat_cache[0].total_writes
with TestRun.step("Submit writes to exported object"): with TestRun.step("Submit writes to exported object"):
@ -136,11 +137,11 @@ def test_ci_write_around_write():
dd.run() dd.run()
with TestRun.step("Collect iostat"): with TestRun.step("Collect iostat"):
iostat_core = IOstatBasic.get_iostat_list([core_device.parent_device]) iostat_core = IOstatBasic.get_iostat_list([core_device.parent_device.get_device_id()])
write_core_1 = iostat_core[0].total_writes write_core_1 = iostat_core[0].total_writes
read_core_1 = iostat_core[0].total_reads read_core_1 = iostat_core[0].total_reads
iostat_cache = IOstatBasic.get_iostat_list([cache_device.parent_device]) iostat_cache = IOstatBasic.get_iostat_list([cache_device.parent_device.get_device_id()])
write_cache_1 = iostat_cache[0].total_writes write_cache_1 = iostat_cache[0].total_writes
read_cache_1 = iostat_cache[0].total_reads read_cache_1 = iostat_cache[0].total_reads
@ -156,10 +157,10 @@ def test_ci_write_around_write():
dd.run() dd.run()
with TestRun.step("Collect iostat"): with TestRun.step("Collect iostat"):
iostat_core = IOstatBasic.get_iostat_list([core_device.parent_device]) iostat_core = IOstatBasic.get_iostat_list([core_device.parent_device.get_device_id()])
read_core_2 = iostat_core[0].total_reads read_core_2 = iostat_core[0].total_reads
iostat_cache = IOstatBasic.get_iostat_list([cache_device.parent_device]) iostat_cache = IOstatBasic.get_iostat_list([cache_device.parent_device.get_device_id()])
read_cache_2 = iostat_cache[0].total_reads read_cache_2 = iostat_cache[0].total_reads
with TestRun.step("Stop cache"): with TestRun.step("Stop cache"):
@ -221,10 +222,10 @@ def test_ci_write_through_write():
casadm.add_core(cache, core_device) casadm.add_core(cache, core_device)
with TestRun.step("Collect iostat before I/O"): with TestRun.step("Collect iostat before I/O"):
iostat_core = IOstatBasic.get_iostat_list([core_device.parent_device]) iostat_core = IOstatBasic.get_iostat_list([core_device.parent_device.get_device_id()])
write_core_0 = iostat_core[0].total_writes write_core_0 = iostat_core[0].total_writes
iostat_cache = IOstatBasic.get_iostat_list([cache_device.parent_device]) iostat_cache = IOstatBasic.get_iostat_list([cache_device.parent_device.get_device_id()])
write_cache_0 = iostat_cache[0].total_writes write_cache_0 = iostat_cache[0].total_writes
with TestRun.step("Insert data into the cache using writes"): with TestRun.step("Insert data into the cache using writes"):
@ -241,11 +242,11 @@ def test_ci_write_through_write():
dd.run() dd.run()
with TestRun.step("Collect iostat"): with TestRun.step("Collect iostat"):
iostat_core = IOstatBasic.get_iostat_list([core_device.parent_device]) iostat_core = IOstatBasic.get_iostat_list([core_device.parent_device.get_device_id()])
write_core_1 = iostat_core[0].total_writes write_core_1 = iostat_core[0].total_writes
read_core_1 = iostat_core[0].total_reads read_core_1 = iostat_core[0].total_reads
iostat_cache = IOstatBasic.get_iostat_list([cache_device.parent_device]) iostat_cache = IOstatBasic.get_iostat_list([cache_device.parent_device.get_device_id()])
write_cache_1 = iostat_cache[0].total_writes write_cache_1 = iostat_cache[0].total_writes
read_cache_1 = iostat_cache[0].total_reads read_cache_1 = iostat_cache[0].total_reads
@ -262,10 +263,10 @@ def test_ci_write_through_write():
dd.run() dd.run()
with TestRun.step("Collect iostat"): with TestRun.step("Collect iostat"):
iostat_core = IOstatBasic.get_iostat_list([core_device.parent_device]) iostat_core = IOstatBasic.get_iostat_list([core_device.parent_device.get_device_id()])
read_core_2 = iostat_core[0].total_reads read_core_2 = iostat_core[0].total_reads
iostat_cache = IOstatBasic.get_iostat_list([cache_device.parent_device]) iostat_cache = IOstatBasic.get_iostat_list([cache_device.parent_device.get_device_id()])
read_cache_2 = iostat_cache[0].total_reads read_cache_2 = iostat_cache[0].total_reads
with TestRun.step("Stop cache"): with TestRun.step("Stop cache"):

View File

@ -8,15 +8,13 @@ import pytest
from api.cas.cas_module import CasModule from api.cas.cas_module import CasModule
from core.test_run import TestRun from core.test_run import TestRun
from test_utils.size import Unit from type_def.size import Unit
from test_utils.os_utils import (allocate_memory, from test_tools.os_tools import (drop_caches,
disable_memory_affecting_functions,
drop_caches,
get_mem_free,
is_kernel_module_loaded, is_kernel_module_loaded,
load_kernel_module, load_kernel_module,
unload_kernel_module, unload_kernel_module,
) )
from test_tools.memory import disable_memory_affecting_functions, get_mem_free, allocate_memory
@pytest.mark.os_dependent @pytest.mark.os_dependent

View File

@ -8,14 +8,14 @@ import pytest
import time import time
from core.test_run_utils import TestRun from core.test_run_utils import TestRun
from test_utils.size import Size, Unit from type_def.size import Size, Unit
from core.test_run import TestRun from core.test_run import TestRun
from storage_devices.disk import DiskType, DiskTypeSet, DiskTypeLowerThan from storage_devices.disk import DiskType, DiskTypeSet, DiskTypeLowerThan
from test_tools.fio.fio import Fio from test_tools.fio.fio import Fio
from test_tools.fio.fio_param import ReadWrite, IoEngine from test_tools.fio.fio_param import ReadWrite, IoEngine
from api.cas import casadm from api.cas import casadm
from api.cas.cache_config import CacheMode, CleaningPolicy from api.cas.cache_config import CacheMode, CleaningPolicy
from test_utils.os_utils import Udev from test_tools.udev import Udev
@pytest.mark.CI @pytest.mark.CI

View File

@ -1,16 +1,17 @@
# #
# Copyright(c) 2020-2021 Intel Corporation # Copyright(c) 2020-2021 Intel Corporation
# Copyright(c) 2024 Huawei Technologies Co., Ltd.
# SPDX-License-Identifier: BSD-3-Clause # SPDX-License-Identifier: BSD-3-Clause
# #
import pytest import pytest
from api.cas import casadm, casadm_parser from api.cas import casadm
from core.test_run import TestRun from core.test_run import TestRun
from test_utils.os_utils import sync from test_tools.os_tools import sync
from storage_devices.disk import DiskType, DiskTypeSet, DiskTypeLowerThan from storage_devices.disk import DiskType, DiskTypeSet, DiskTypeLowerThan
from test_utils.size import Unit, Size from type_def.size import Unit, Size
from test_tools.dd import Dd from test_tools.dd import Dd

View File

@ -13,11 +13,11 @@ from core.test_run import TestRun
from storage_devices.device import Device from storage_devices.device import Device
from storage_devices.disk import DiskType, DiskTypeSet, DiskTypeLowerThan from storage_devices.disk import DiskType, DiskTypeSet, DiskTypeLowerThan
from test_tools.dd import Dd from test_tools.dd import Dd
from test_tools.disk_utils import Filesystem from test_tools.fs_tools import Filesystem
from test_utils.filesystem.file import File from test_utils.filesystem.file import File
from test_utils.os_utils import sync from test_tools.os_tools import sync
from test_utils.output import CmdException from connection.utils.output import CmdException
from test_utils.size import Size, Unit from type_def.size import Size, Unit
from api.cas.cli_messages import ( from api.cas.cli_messages import (
check_stderr_msg, check_stderr_msg,
missing_param, missing_param,

View File

@ -1,5 +1,6 @@
# #
# Copyright(c) 2019-2021 Intel Corporation # Copyright(c) 2019-2021 Intel Corporation
# Copyright(c) 2024 Huawei Technologies Co., Ltd.
# SPDX-License-Identifier: BSD-3-Clause # SPDX-License-Identifier: BSD-3-Clause
# #
@ -10,7 +11,7 @@ from api.cas import casadm, casadm_parser, cli_messages
from api.cas.cli import start_cmd from api.cas.cli import start_cmd
from core.test_run import TestRun from core.test_run import TestRun
from storage_devices.disk import DiskType, DiskTypeSet, DiskTypeLowerThan from storage_devices.disk import DiskType, DiskTypeSet, DiskTypeLowerThan
from test_utils.size import Unit, Size from type_def.size import Unit, Size
CACHE_ID_RANGE = (1, 16384) CACHE_ID_RANGE = (1, 16384)
CORE_ID_RANGE = (0, 4095) CORE_ID_RANGE = (0, 4095)

View File

@ -1,5 +1,6 @@
# #
# Copyright(c) 2022 Intel Corporation # Copyright(c) 2022 Intel Corporation
# Copyright(c) 2024 Huawei Technologies Co., Ltd.
# SPDX-License-Identifier: BSD-3-Clause # SPDX-License-Identifier: BSD-3-Clause
# #
@ -8,14 +9,14 @@ import time
from core.test_run_utils import TestRun from core.test_run_utils import TestRun
from storage_devices.device import Device from storage_devices.device import Device
from test_utils.size import Size, Unit from type_def.size import Size, Unit
from core.test_run import TestRun from core.test_run import TestRun
from storage_devices.disk import DiskType, DiskTypeSet, DiskTypeLowerThan from storage_devices.disk import DiskType, DiskTypeSet, DiskTypeLowerThan
from test_tools.fio.fio import Fio from test_tools.fio.fio import Fio
from test_tools.fio.fio_param import ReadWrite, IoEngine from test_tools.fio.fio_param import ReadWrite, IoEngine
from api.cas import casadm from api.cas import casadm
from api.cas.cache_config import CacheMode, CleaningPolicy from api.cas.cache_config import CacheMode, CleaningPolicy
from test_utils.os_utils import Udev from test_tools.udev import Udev
@pytest.mark.CI @pytest.mark.CI

View File

@ -1,5 +1,6 @@
# #
# Copyright(c) 2019-2022 Intel Corporation # Copyright(c) 2019-2022 Intel Corporation
# Copyright(c) 2024 Huawei Technologies Co., Ltd.
# SPDX-License-Identifier: BSD-3-Clause # SPDX-License-Identifier: BSD-3-Clause
# #
@ -14,7 +15,7 @@ from api.cas.casadm import set_param_cutoff_cmd
from core.test_run import TestRun from core.test_run import TestRun
from storage_devices.disk import DiskType, DiskTypeSet, DiskTypeLowerThan from storage_devices.disk import DiskType, DiskTypeSet, DiskTypeLowerThan
from test_utils.size import Size, Unit from type_def.size import Size, Unit
@pytest.mark.require_disk("cache", DiskTypeSet([DiskType.optane, DiskType.nand])) @pytest.mark.require_disk("cache", DiskTypeSet([DiskType.optane, DiskType.nand]))

View File

@ -1,5 +1,6 @@
# #
# Copyright(c) 2020-2021 Intel Corporation # Copyright(c) 2020-2021 Intel Corporation
# Copyright(c) 2024 Huawei Technologies Co., Ltd.
# SPDX-License-Identifier: BSD-3-Clause # SPDX-License-Identifier: BSD-3-Clause
# #
@ -19,7 +20,7 @@ from api.cas.cache_config import (
) )
from core.test_run import TestRun from core.test_run import TestRun
from storage_devices.disk import DiskType, DiskTypeSet, DiskTypeLowerThan from storage_devices.disk import DiskType, DiskTypeSet, DiskTypeLowerThan
from test_utils.size import Size, Unit from type_def.size import Size, Unit
# There should be at least 2 cache instances and 2 cores per cache # There should be at least 2 cache instances and 2 cores per cache

View File

@ -12,12 +12,12 @@ from api.cas import casadm, cli_messages, cli
from api.cas.cache_config import CacheMode, CleaningPolicy from api.cas.cache_config import CacheMode, CleaningPolicy
from core.test_run import TestRun from core.test_run import TestRun
from storage_devices.disk import DiskTypeSet, DiskType, DiskTypeLowerThan from storage_devices.disk import DiskTypeSet, DiskType, DiskTypeLowerThan
from test_tools.disk_utils import get_device_filesystem_type, Filesystem from test_tools.fs_tools import Filesystem, get_device_filesystem_type
from test_tools.fio.fio import Fio from test_tools.fio.fio import Fio
from test_tools.fio.fio_param import IoEngine, ReadWrite from test_tools.fio.fio_param import IoEngine, ReadWrite
from test_utils.disk_finder import get_system_disks from test_tools.disk_finder import get_system_disks
from test_utils.output import CmdException from connection.utils.output import CmdException
from test_utils.size import Size, Unit from type_def.size import Size, Unit
@pytest.mark.require_disk("cache", DiskTypeSet([DiskType.optane, DiskType.nand])) @pytest.mark.require_disk("cache", DiskTypeSet([DiskType.optane, DiskType.nand]))

View File

@ -1,35 +0,0 @@
#
# Copyright(c) 2021 Intel Corporation
# SPDX-License-Identifier: BSD-3-Clause
#
import datetime
from storage_devices.lvm import get_block_devices_list
from api.cas.init_config import InitConfig
from test_tools.fio.fio import Fio
from test_tools.fio.fio_param import IoEngine, ReadWrite, VerifyMethod
from test_utils.size import Size, Unit
def run_fio_on_lvm(volumes: []):
fio_run = (Fio().create_command()
.read_write(ReadWrite.randrw)
.io_engine(IoEngine.sync)
.io_depth(1)
.time_based()
.run_time(datetime.timedelta(seconds=180))
.do_verify()
.verify(VerifyMethod.md5)
.block_size(Size(1, Unit.Blocks4096)))
for lvm in volumes:
fio_run.add_job().target(lvm).size(lvm.size)
fio_run.run()
def get_test_configuration():
config = InitConfig.create_init_config_from_running_configuration()
devices = get_block_devices_list()
return config, devices

View File

@ -20,20 +20,20 @@ from core.test_run import Blocked
from core.test_run_utils import TestRun from core.test_run_utils import TestRun
from api.cas import installer from api.cas import installer
from api.cas import casadm from api.cas import casadm
from test_utils import git
from api.cas.cas_service import opencas_drop_in_directory from api.cas.cas_service import opencas_drop_in_directory
from storage_devices.raid import Raid from storage_devices.raid import Raid
from storage_devices.ramdisk import RamDisk from storage_devices.ramdisk import RamDisk
from test_utils.os_utils import Udev, kill_all_io from test_tools.os_tools import kill_all_io
from test_utils.disk_finder import get_disk_serial_number from test_tools.udev import Udev
from test_tools.disk_utils import PartitionTable, create_partition_table from test_tools.disk_tools import PartitionTable, create_partition_table
from test_tools.device_mapper import DeviceMapper from test_tools.device_mapper import DeviceMapper
from test_tools.mdadm import Mdadm from test_tools.mdadm import Mdadm
from test_tools.fs_utils import remove from test_tools.fs_tools import remove
from test_tools import initramfs from test_tools import initramfs, git
from log.logger import create_log, Log from log.logger import create_log, Log
from test_utils.singleton import Singleton from test_utils.common.singleton import Singleton
from storage_devices.lvm import Lvm, LvmConfiguration from storage_devices.lvm import Lvm, LvmConfiguration
from storage_devices.disk import Disk
def pytest_addoption(parser): def pytest_addoption(parser):
@ -185,7 +185,7 @@ def base_prepare(item):
RamDisk.remove_all() RamDisk.remove_all()
for disk in TestRun.disks.values(): for disk in TestRun.disks.values():
disk_serial = get_disk_serial_number(disk.path) disk_serial = Disk.get_disk_serial_number(disk.path)
if disk.serial_number and disk.serial_number != disk_serial: if disk.serial_number and disk.serial_number != disk_serial:
raise Exception( raise Exception(
f"Serial for {disk.path} doesn't match the one from the config." f"Serial for {disk.path} doesn't match the one from the config."

View File

@ -1,5 +1,6 @@
# #
# Copyright(c) 2019-2021 Intel Corporation # Copyright(c) 2019-2021 Intel Corporation
# Copyright(c) 2024 Huawei Technologies Co., Ltd.
# SPDX-License-Identifier: BSD-3-Clause # SPDX-License-Identifier: BSD-3-Clause
# #
@ -14,7 +15,7 @@ from core.test_run import TestRun
from test_tools.fio.fio import Fio from test_tools.fio.fio import Fio
from test_tools.fio.fio_param import ReadWrite, IoEngine, VerifyMethod from test_tools.fio.fio_param import ReadWrite, IoEngine, VerifyMethod
from storage_devices.disk import DiskType, DiskTypeSet, DiskTypeLowerThan from storage_devices.disk import DiskType, DiskTypeSet, DiskTypeLowerThan
from test_utils.size import Unit, Size from type_def.size import Unit, Size
start_size = int(Size(512, Unit.Byte)) start_size = int(Size(512, Unit.Byte))

View File

@ -1,5 +1,6 @@
# #
# Copyright(c) 2019-2021 Intel Corporation # Copyright(c) 2019-2021 Intel Corporation
# Copyright(c) 2024 Huawei Technologies Co., Ltd.
# SPDX-License-Identifier: BSD-3-Clause # SPDX-License-Identifier: BSD-3-Clause
# #
@ -12,14 +13,12 @@ import pytest
from api.cas import casadm from api.cas import casadm
from api.cas.cache_config import CacheMode from api.cas.cache_config import CacheMode
from core.test_run import TestRun from core.test_run import TestRun
from test_tools import fs_utils from test_tools.fs_tools import Filesystem, create_directory, check_if_directory_exists, md5sum
from test_tools.disk_utils import Filesystem
from test_tools.fio.fio import Fio from test_tools.fio.fio import Fio
from test_tools.fio.fio_param import ReadWrite, IoEngine, VerifyMethod from test_tools.fio.fio_param import ReadWrite, IoEngine, VerifyMethod
from storage_devices.disk import DiskType, DiskTypeSet, DiskTypeLowerThan from storage_devices.disk import DiskType, DiskTypeSet, DiskTypeLowerThan
from test_utils.filesystem.file import File from test_tools.os_tools import sync
from test_utils.os_utils import sync from type_def.size import Unit, Size
from test_utils.size import Unit, Size
start_size = Size(512, Unit.Byte).get_value() start_size = Size(512, Unit.Byte).get_value()
@ -72,8 +71,8 @@ def test_data_integrity_5d_dss(filesystems):
with TestRun.step("Create filesystems and mount cores"): with TestRun.step("Create filesystems and mount cores"):
for i, core in enumerate(cores): for i, core in enumerate(cores):
mount_point = core.path.replace('/dev/', '/mnt/') mount_point = core.path.replace('/dev/', '/mnt/')
if not fs_utils.check_if_directory_exists(mount_point): if not check_if_directory_exists(mount_point):
fs_utils.create_directory(mount_point) create_directory(mount_point)
TestRun.LOGGER.info(f"Create filesystem {filesystems[i].name} on {core.path}") TestRun.LOGGER.info(f"Create filesystem {filesystems[i].name} on {core.path}")
core.create_filesystem(filesystems[i]) core.create_filesystem(filesystems[i])
TestRun.LOGGER.info(f"Mount filesystem {filesystems[i].name} on {core.path} to " TestRun.LOGGER.info(f"Mount filesystem {filesystems[i].name} on {core.path} to "
@ -106,14 +105,14 @@ def test_data_integrity_5d_dss(filesystems):
core.unmount() core.unmount()
with TestRun.step("Calculate md5 for each core"): with TestRun.step("Calculate md5 for each core"):
core_md5s = [File(core.full_path).md5sum() for core in cores] core_md5s = [md5sum(core.path) for core in cores]
with TestRun.step("Stop caches"): with TestRun.step("Stop caches"):
for cache in caches: for cache in caches:
cache.stop() cache.stop()
with TestRun.step("Calculate md5 for each core"): with TestRun.step("Calculate md5 for each core"):
dev_md5s = [File(dev.full_path).md5sum() for dev in core_devices] dev_md5s = [md5sum(dev.full_path) for dev in core_devices]
with TestRun.step("Compare md5 sums for cores and core devices"): with TestRun.step("Compare md5 sums for cores and core devices"):
for core_md5, dev_md5, mode, fs in zip(core_md5s, dev_md5s, cache_modes, filesystems): for core_md5, dev_md5, mode, fs in zip(core_md5s, dev_md5s, cache_modes, filesystems):
@ -171,14 +170,14 @@ def test_data_integrity_5d():
fio_run.run() fio_run.run()
with TestRun.step("Calculate md5 for each core"): with TestRun.step("Calculate md5 for each core"):
core_md5s = [File(core.full_path).md5sum() for core in cores] core_md5s = [md5sum(core.path) for core in cores]
with TestRun.step("Stop caches"): with TestRun.step("Stop caches"):
for cache in caches: for cache in caches:
cache.stop() cache.stop()
with TestRun.step("Calculate md5 for each core"): with TestRun.step("Calculate md5 for each core"):
dev_md5s = [File(dev.full_path).md5sum() for dev in core_devices] dev_md5s = [md5sum(dev.full_path) for dev in core_devices]
with TestRun.step("Compare md5 sums for cores and core devices"): with TestRun.step("Compare md5 sums for cores and core devices"):
for core_md5, dev_md5, mode in zip(core_md5s, dev_md5s, cache_modes): for core_md5, dev_md5, mode in zip(core_md5s, dev_md5s, cache_modes):

View File

@ -19,10 +19,10 @@ from storage_devices.disk import DiskType, DiskTypeSet, DiskTypeLowerThan
from storage_devices.ramdisk import RamDisk from storage_devices.ramdisk import RamDisk
from test_tools.fio.fio import Fio from test_tools.fio.fio import Fio
from test_tools.fio.fio_param import ReadWrite from test_tools.fio.fio_param import ReadWrite
from test_utils.asynchronous import start_async_func from connection.utils.asynchronous import start_async_func
from test_utils.filesystem.directory import Directory from test_utils.filesystem.directory import Directory
from test_utils.output import CmdException from connection.utils.output import CmdException
from test_utils.size import Unit, Size from type_def.size import Unit, Size
ram_disk, tmp_dir, fio_seed = None, None, None ram_disk, tmp_dir, fio_seed = None, None, None
num_jobs = 8 num_jobs = 8

View File

@ -1,5 +1,6 @@
# #
# Copyright(c) 2019-2022 Intel Corporation # Copyright(c) 2019-2022 Intel Corporation
# Copyright(c) 2024 Huawei Technologies Co., Ltd.
# SPDX-License-Identifier: BSD-3-Clause # SPDX-License-Identifier: BSD-3-Clause
# #
@ -13,14 +14,13 @@ from storage_devices.ramdisk import RamDisk
from test_utils.drbd import Resource, Node from test_utils.drbd import Resource, Node
from storage_devices.drbd import Drbd from storage_devices.drbd import Drbd
from test_tools.drbdadm import Drbdadm from test_tools.drbdadm import Drbdadm
from test_tools import fs_utils from test_tools.fs_tools import copy, Filesystem, replace_in_lines, remove, Permissions, \
from test_tools.disk_utils import Filesystem PermissionsUsers
from test_tools.fs_utils import copy, check_if_file_exists
from test_utils.filesystem.directory import Directory from test_utils.filesystem.directory import Directory
from test_utils.filesystem.file import File from test_utils.filesystem.file import File
from test_utils.size import Size, Unit from type_def.size import Size, Unit
from test_utils.emergency_escape import EmergencyEscape from test_utils.emergency_escape import EmergencyEscape
from test_utils.fstab import add_mountpoint from test_tools.fstab import add_mountpoint
from storage_devices.lvm import Lvm from storage_devices.lvm import Lvm
@ -102,7 +102,7 @@ def test_create_example_files():
content_before_change = file1.read() content_before_change = file1.read()
TestRun.LOGGER.info(f"File content: {content_before_change}") TestRun.LOGGER.info(f"File content: {content_before_change}")
with TestRun.step("Replace single line in file"): with TestRun.step("Replace single line in file"):
fs_utils.replace_in_lines(file1, 'content line', 'replaced line') replace_in_lines(file1, 'content line', 'replaced line')
with TestRun.step("Read file content and check if it changed"): with TestRun.step("Read file content and check if it changed"):
content_after_change = file1.read() content_after_change = file1.read()
if content_before_change == content_after_change: if content_before_change == content_after_change:
@ -115,19 +115,19 @@ def test_create_example_files():
with TestRun.step("Change permissions of second file"): with TestRun.step("Change permissions of second file"):
file2.chmod_numerical(123) file2.chmod_numerical(123)
with TestRun.step("Remove second file"): with TestRun.step("Remove second file"):
fs_utils.remove(file2.full_path, True) remove(file2.full_path, True)
with TestRun.step("List contents of home directory"): with TestRun.step("List contents of home directory"):
dir1 = Directory("~") dir1 = Directory("~")
dir_content = dir1.ls() dir_content = dir1.ls()
with TestRun.step("Change permissions of file"): with TestRun.step("Change permissions of file"):
file1.chmod(fs_utils.Permissions['r'] | fs_utils.Permissions['w'], file1.chmod(Permissions['r'] | Permissions['w'],
fs_utils.PermissionsUsers(7)) PermissionsUsers(7))
with TestRun.step("Log home directory content"): with TestRun.step("Log home directory content"):
for item in dir_content: for item in dir_content:
TestRun.LOGGER.info(f"Item {str(item)} - {type(item).__name__}") TestRun.LOGGER.info(f"Item {str(item)} - {type(item).__name__}")
with TestRun.step("Remove file"): with TestRun.step("Remove file"):
fs_utils.remove(file1.full_path, True) remove(file1.full_path, True)
@pytest.mark.require_disk("cache1", DiskTypeSet([DiskType.optane, DiskType.nand])) @pytest.mark.require_disk("cache1", DiskTypeSet([DiskType.optane, DiskType.nand]))

View File

@ -1,5 +1,6 @@
# #
# Copyright(c) 2022 Intel Corporation # Copyright(c) 2022 Intel Corporation
# Copyright(c) 2024 Huawei Technologies Co., Ltd.
# SPDX-License-Identifier: BSD-3-Clause # SPDX-License-Identifier: BSD-3-Clause
# #
from datetime import timedelta, datetime from datetime import timedelta, datetime
@ -10,8 +11,8 @@ from core.test_run import TestRun
from test_tools.dd import Dd from test_tools.dd import Dd
from test_tools.fio.fio import Fio from test_tools.fio.fio import Fio
from test_tools.fio.fio_param import ReadWrite, IoEngine from test_tools.fio.fio_param import ReadWrite, IoEngine
from test_utils.os_utils import Udev from test_tools.udev import Udev
from test_utils.size import Size, Unit from type_def.size import Size, Unit
from storage_devices.disk import DiskType, DiskTypeSet from storage_devices.disk import DiskType, DiskTypeSet
from storage_devices.device import Device from storage_devices.device import Device
from api.cas import casadm, dmesg from api.cas import casadm, dmesg

View File

@ -1,5 +1,6 @@
# #
# Copyright(c) 2022 Intel Corporation # Copyright(c) 2022 Intel Corporation
# Copyright(c) 2024 Huawei Technologies Co., Ltd.
# SPDX-License-Identifier: BSD-3-Clause # SPDX-License-Identifier: BSD-3-Clause
# #
@ -22,14 +23,12 @@ from core.test_run import TestRun
from storage_devices.disk import DiskType, DiskTypeSet from storage_devices.disk import DiskType, DiskTypeSet
from storage_devices.drbd import Drbd from storage_devices.drbd import Drbd
from test_tools.dd import Dd from test_tools.dd import Dd
from test_tools.disk_utils import Filesystem
from test_utils.size import Size, Unit
from test_utils.filesystem.file import File from test_utils.filesystem.file import File
from test_tools.fio.fio import Fio from test_tools.fio.fio import Fio
from test_tools.fio.fio_param import ReadWrite from test_tools.fio.fio_param import ReadWrite
from test_tools.fs_utils import readlink, create_directory from test_tools.fs_tools import create_directory, Filesystem
from test_utils.drbd import Resource, Node from test_utils.drbd import Resource, Node
from test_utils.size import Size, Unit from type_def.size import Size, Unit
from test_failover_multihost import check_drbd_installed from test_failover_multihost import check_drbd_installed
@ -1096,13 +1095,6 @@ def test_failover_io_long(cls, cleaning_policy, num_iterations):
TestRun.executor.wait_for_connection() TestRun.executor.wait_for_connection()
def check_drbd_installed(duts):
for dut in duts:
with TestRun.use_dut(dut):
if not Drbd.is_installed():
TestRun.fail(f"DRBD is not installed on DUT {dut.ip}")
def prepare_devices(duts): def prepare_devices(duts):
for dut in duts: for dut in duts:
with TestRun.use_dut(dut): with TestRun.use_dut(dut):

View File

@ -4,7 +4,6 @@
# SPDX-License-Identifier: BSD-3-Clause # SPDX-License-Identifier: BSD-3-Clause
# #
from time import sleep
import pytest import pytest
from api.cas import casadm from api.cas import casadm
@ -22,15 +21,13 @@ from storage_devices.disk import DiskType, DiskTypeSet
from storage_devices.drbd import Drbd from storage_devices.drbd import Drbd
from storage_devices.raid import Raid, RaidConfiguration, MetadataVariant, Level from storage_devices.raid import Raid, RaidConfiguration, MetadataVariant, Level
from test_tools.dd import Dd from test_tools.dd import Dd
from test_tools.drbdadm import Drbdadm
from test_tools.disk_utils import Filesystem
from test_tools.fio.fio import Fio from test_tools.fio.fio import Fio
from test_tools.fio.fio_param import ReadWrite from test_tools.fio.fio_param import ReadWrite
from test_tools.fs_utils import readlink from test_tools.fs_tools import readlink, Filesystem, create_directory
from test_utils.drbd import Resource, Node from test_utils.drbd import Resource, Node
from test_utils.os_utils import sync, Udev from test_tools.os_tools import sync
from test_utils.size import Size, Unit from test_tools.udev import Udev
from test_tools import fs_utils from type_def.size import Size, Unit
cache_id = 5 cache_id = 5
@ -147,7 +144,7 @@ def test_functional_activate_twice_round_trip(filesystem):
primary_node.cache.set_seq_cutoff_policy(SeqCutOffPolicy.never) primary_node.cache.set_seq_cutoff_policy(SeqCutOffPolicy.never)
if filesystem: if filesystem:
TestRun.executor.run(f"rm -rf {mountpoint}") TestRun.executor.run(f"rm -rf {mountpoint}")
fs_utils.create_directory(path=mountpoint) create_directory(path=mountpoint)
core.create_filesystem(filesystem) core.create_filesystem(filesystem)
core.mount(mountpoint) core.mount(mountpoint)
@ -318,7 +315,7 @@ def test_functional_activate_twice_new_host(filesystem):
primary_node.cache.set_seq_cutoff_policy(SeqCutOffPolicy.never) primary_node.cache.set_seq_cutoff_policy(SeqCutOffPolicy.never)
if filesystem: if filesystem:
TestRun.executor.run(f"rm -rf {mountpoint}") TestRun.executor.run(f"rm -rf {mountpoint}")
fs_utils.create_directory(path=mountpoint) create_directory(path=mountpoint)
core.create_filesystem(filesystem) core.create_filesystem(filesystem)
core.mount(mountpoint) core.mount(mountpoint)
@ -494,7 +491,7 @@ def failover_sequence(standby_node, drbd_resource, filesystem, core):
if filesystem: if filesystem:
with TestRun.use_dut(standby_node), TestRun.step(f"Mount core"): with TestRun.use_dut(standby_node), TestRun.step(f"Mount core"):
TestRun.executor.run(f"rm -rf {mountpoint}") TestRun.executor.run(f"rm -rf {mountpoint}")
fs_utils.create_directory(path=mountpoint) create_directory(path=mountpoint)
core.mount(mountpoint) core.mount(mountpoint)

View File

@ -1,16 +1,15 @@
# #
# Copyright(c) 2019-2021 Intel Corporation # Copyright(c) 2019-2021 Intel Corporation
# Copyright(c) 2024 Huawei Technologies Co., Ltd.
# SPDX-License-Identifier: BSD-3-Clause # SPDX-License-Identifier: BSD-3-Clause
# #
import time
import pytest import pytest
from api.cas import cli, casadm from api.cas import cli, casadm
from storage_devices.disk import DiskType, DiskTypeSet, DiskTypeLowerThan from storage_devices.disk import DiskType, DiskTypeSet, DiskTypeLowerThan
from core.test_run import TestRun from core.test_run import TestRun
from test_utils.size import Size, Unit from type_def.size import Size, Unit
@pytest.mark.require_disk("cache_1", DiskTypeSet([DiskType.optane, DiskType.nand])) @pytest.mark.require_disk("cache_1", DiskTypeSet([DiskType.optane, DiskType.nand]))

View File

@ -1,5 +1,6 @@
# #
# Copyright(c) 2019-2022 Intel Corporation # Copyright(c) 2019-2022 Intel Corporation
# Copyright(c) 2024 Huawei Technologies Co., Ltd.
# SPDX-License-Identifier: BSD-3-Clause # SPDX-License-Identifier: BSD-3-Clause
# #
@ -16,11 +17,12 @@ from api.cas.cache_config import (
from core.test_run import TestRun from core.test_run import TestRun
from storage_devices.disk import DiskTypeSet, DiskType, DiskTypeLowerThan from storage_devices.disk import DiskTypeSet, DiskType, DiskTypeLowerThan
from test_tools.device_mapper import ErrorDevice, DmTable from test_tools.device_mapper import DmTable
from storage_devices.error_device import ErrorDevice
from test_tools.fio.fio import Fio from test_tools.fio.fio import Fio
from test_tools.fio.fio_param import ReadWrite, IoEngine, ErrorFilter, VerifyMethod from test_tools.fio.fio_param import ReadWrite, IoEngine, ErrorFilter, VerifyMethod
from test_utils.os_utils import Udev from test_tools.udev import Udev
from test_utils.size import Size, Unit from type_def.size import Size, Unit
start_size = Size(512, Unit.Byte) start_size = Size(512, Unit.Byte)
stop_size = Size(128, Unit.KibiByte) stop_size = Size(128, Unit.KibiByte)

View File

@ -9,7 +9,8 @@ from time import sleep
from test_tools.fio.fio import Fio from test_tools.fio.fio import Fio
from test_tools.fio.fio_param import ReadWrite, IoEngine, ErrorFilter from test_tools.fio.fio_param import ReadWrite, IoEngine, ErrorFilter
from test_tools.device_mapper import ErrorDevice, DmTable from test_tools.device_mapper import DmTable
from storage_devices.error_device import ErrorDevice
from core.test_run import TestRun from core.test_run import TestRun
from api.cas import casadm from api.cas import casadm
from api.cas.cache_config import ( from api.cas.cache_config import (
@ -21,7 +22,7 @@ from api.cas.cache_config import (
) )
from storage_devices.disk import DiskTypeSet, DiskType from storage_devices.disk import DiskTypeSet, DiskType
from test_utils.io_stats import IoStats from test_utils.io_stats import IoStats
from test_utils.size import Size, Unit from type_def.size import Size, Unit
@pytest.mark.parametrizex("cache_line_size", CacheLineSize) @pytest.mark.parametrizex("cache_line_size", CacheLineSize)

View File

@ -11,12 +11,11 @@ from api.cas.cache_config import CacheMode, CleaningPolicy, CacheModeTrait
from api.cas.casadm_parser import wait_for_flushing from api.cas.casadm_parser import wait_for_flushing
from core.test_run import TestRun from core.test_run import TestRun
from storage_devices.disk import DiskType, DiskTypeSet, DiskTypeLowerThan from storage_devices.disk import DiskType, DiskTypeSet, DiskTypeLowerThan
from test_tools import fs_utils
from test_tools.dd import Dd from test_tools.dd import Dd
from test_tools.disk_utils import Filesystem from test_tools.fs_tools import Filesystem, create_random_test_file
from test_utils import os_utils from test_tools.os_tools import DropCachesMode, sync, drop_caches
from test_utils.os_utils import Udev, DropCachesMode from test_tools.udev import Udev
from test_utils.size import Size, Unit from type_def.size import Size, Unit
from tests.lazy_writes.recovery.recovery_tests_methods import compare_files from tests.lazy_writes.recovery.recovery_tests_methods import compare_files
mount_point = "/mnt/cas" mount_point = "/mnt/cas"
@ -65,8 +64,8 @@ def test_interrupt_core_flush(cache_mode, filesystem):
test_file_md5sum_before = test_file.md5sum() test_file_md5sum_before = test_file.md5sum()
with TestRun.step("Get number of dirty data on exported object before interruption."): with TestRun.step("Get number of dirty data on exported object before interruption."):
os_utils.sync() sync()
os_utils.drop_caches(DropCachesMode.ALL) drop_caches(DropCachesMode.ALL)
core_dirty_blocks_before = core.get_dirty_blocks() core_dirty_blocks_before = core.get_dirty_blocks()
with TestRun.step("Start flushing core device."): with TestRun.step("Start flushing core device."):
@ -149,8 +148,8 @@ def test_interrupt_cache_flush(cache_mode, filesystem):
test_file_md5sum_before = test_file.md5sum() test_file_md5sum_before = test_file.md5sum()
with TestRun.step("Get number of dirty data on exported object before interruption."): with TestRun.step("Get number of dirty data on exported object before interruption."):
os_utils.sync() sync()
os_utils.drop_caches(DropCachesMode.ALL) drop_caches(DropCachesMode.ALL)
cache_dirty_blocks_before = cache.get_dirty_blocks() cache_dirty_blocks_before = cache.get_dirty_blocks()
with TestRun.step("Start flushing cache."): with TestRun.step("Start flushing cache."):
@ -238,8 +237,8 @@ def test_interrupt_core_remove(cache_mode, filesystem):
with TestRun.step( with TestRun.step(
"Get number of dirty data on exported object before core removal interruption" "Get number of dirty data on exported object before core removal interruption"
): ):
os_utils.sync() sync()
os_utils.drop_caches(DropCachesMode.ALL) drop_caches(DropCachesMode.ALL)
cache_dirty_blocks_before = cache.get_dirty_blocks() cache_dirty_blocks_before = cache.get_dirty_blocks()
with TestRun.step("Unmount core"): with TestRun.step("Unmount core"):
@ -342,7 +341,7 @@ def test_interrupt_cache_mode_switch_parametrized(cache_mode, stop_percentage):
core = cache.add_core(core_part) core = cache.add_core(core_part)
with TestRun.step(f"Create test file in mount point of exported object"): with TestRun.step(f"Create test file in mount point of exported object"):
test_file = fs_utils.create_random_test_file(test_file_path, test_file_size) test_file = create_random_test_file(test_file_path, test_file_size)
with TestRun.step("Calculate md5sum of test file"): with TestRun.step("Calculate md5sum of test file"):
test_file_md5_before = test_file.md5sum() test_file_md5_before = test_file.md5sum()
@ -358,8 +357,8 @@ def test_interrupt_cache_mode_switch_parametrized(cache_mode, stop_percentage):
dd.run() dd.run()
with TestRun.step("Get number of dirty data on exported object before interruption"): with TestRun.step("Get number of dirty data on exported object before interruption"):
os_utils.sync() sync()
os_utils.drop_caches(DropCachesMode.ALL) drop_caches(DropCachesMode.ALL)
cache_dirty_blocks_before = cache.get_dirty_blocks() cache_dirty_blocks_before = cache.get_dirty_blocks()
with TestRun.step("Start switching cache mode"): with TestRun.step("Start switching cache mode"):
@ -450,8 +449,8 @@ def test_interrupt_cache_stop(cache_mode, filesystem):
test_file = create_test_file() test_file = create_test_file()
with TestRun.step("Get number of dirty data on exported object before interruption."): with TestRun.step("Get number of dirty data on exported object before interruption."):
os_utils.sync() sync()
os_utils.drop_caches(DropCachesMode.ALL) drop_caches(DropCachesMode.ALL)
cache_dirty_blocks_before = cache.get_dirty_blocks() cache_dirty_blocks_before = cache.get_dirty_blocks()
with TestRun.step("Unmount core."): with TestRun.step("Unmount core."):

View File

@ -12,8 +12,8 @@ from api.cas.core import Core
from storage_devices.disk import DiskType, DiskTypeSet, DiskTypeLowerThan from storage_devices.disk import DiskType, DiskTypeSet, DiskTypeLowerThan
from core.test_run import TestRun from core.test_run import TestRun
from test_tools.dd import Dd from test_tools.dd import Dd
from test_utils.os_utils import Udev, sync from test_tools.udev import Udev
from test_utils.size import Size, Unit from type_def.size import Size, Unit
block_size = Size(1, Unit.Blocks4096) block_size = Size(1, Unit.Blocks4096)
@ -289,7 +289,7 @@ def test_one_core_fail_dirty():
with TestRun.step("Check if core device is really out of cache."): with TestRun.step("Check if core device is really out of cache."):
output = str(casadm.list_caches().stdout.splitlines()) output = str(casadm.list_caches().stdout.splitlines())
if core_part1.path in output: if core_part1.path in output:
TestRun.exception("The first core device should be unplugged!") TestRun.LOGGER.exception("The first core device should be unplugged!")
with TestRun.step("Verify that I/O to the remaining cores does not insert to cache"): with TestRun.step("Verify that I/O to the remaining cores does not insert to cache"):
dd_builder(cache_mode, core2, Size(100, Unit.MebiByte)).run() dd_builder(cache_mode, core2, Size(100, Unit.MebiByte)).run()

View File

@ -1,5 +1,6 @@
# #
# Copyright(c) 2020-2022 Intel Corporation # Copyright(c) 2020-2022 Intel Corporation
# Copyright(c) 2024 Huawei Technologies
# SPDX-License-Identifier: BSD-3-Clause # SPDX-License-Identifier: BSD-3-Clause
# #
@ -7,14 +8,12 @@ import pytest
from api.cas import casadm, casadm_parser, cli, cli_messages from api.cas import casadm, casadm_parser, cli, cli_messages
from api.cas.cache_config import CacheMode, CleaningPolicy, CacheModeTrait from api.cas.cache_config import CacheMode, CleaningPolicy, CacheModeTrait
from test_tools.fs_tools import create_random_test_file
from test_tools.udev import Udev
from tests.lazy_writes.recovery.recovery_tests_methods import copy_file, compare_files from tests.lazy_writes.recovery.recovery_tests_methods import copy_file, compare_files
from core.test_run import TestRun from core.test_run import TestRun
from storage_devices.disk import DiskType, DiskTypeSet, DiskTypeLowerThan from storage_devices.disk import DiskType, DiskTypeSet, DiskTypeLowerThan
from test_tools import fs_utils from type_def.size import Size, Unit
from test_tools.dd import Dd
from test_tools.disk_utils import Filesystem
from test_utils import os_utils
from test_utils.size import Size, Unit
mount_point = "/mnt/cas" mount_point = "/mnt/cas"
test_file_path = f"{mount_point}/test_file" test_file_path = f"{mount_point}/test_file"
@ -48,7 +47,7 @@ def test_stop_no_flush_load_cache(cache_mode):
with TestRun.step(f"Create test file in mount point of exported object and check its md5 sum."): with TestRun.step(f"Create test file in mount point of exported object and check its md5 sum."):
test_file_size = Size(48, Unit.MebiByte) test_file_size = Size(48, Unit.MebiByte)
test_file = fs_utils.create_random_test_file(test_file_path, test_file_size) test_file = create_random_test_file(test_file_path, test_file_size)
test_file_md5_before = test_file.md5sum() test_file_md5_before = test_file.md5sum()
copy_file(source=test_file.full_path, target=core.path, size=test_file_size, copy_file(source=test_file.full_path, target=core.path, size=test_file_size,
direct="oflag") direct="oflag")
@ -101,5 +100,5 @@ def prepare():
core_dev = TestRun.disks['core'] core_dev = TestRun.disks['core']
core_dev.create_partitions([Size(2, Unit.GibiByte)]) core_dev.create_partitions([Size(2, Unit.GibiByte)])
core_part = core_dev.partitions[0] core_part = core_dev.partitions[0]
os_utils.Udev.disable() Udev.disable()
return cache_part, core_part return cache_part, core_part

View File

@ -5,22 +5,17 @@
# #
import pytest import pytest
from collections import namedtuple
import random
from api.cas import casadm from api.cas import casadm
from api.cas import dmesg from api.cas import dmesg
from api.cas.cli import casadm_bin
from core.test_run import TestRun from core.test_run import TestRun
from storage_devices.disk import DiskType, DiskTypeSet, DiskTypeLowerThan from storage_devices.disk import DiskType, DiskTypeSet, DiskTypeLowerThan
from test_utils.size import Size, Unit from type_def.size import Size, Unit
from api.cas.cli_messages import check_stderr_msg, missing_param, disallowed_param
from api.cas.cache_config import CacheLineSize, CacheMode from api.cas.cache_config import CacheLineSize, CacheMode
from api.cas.cli import standby_activate_cmd, standby_load_cmd from api.cas.cli import standby_activate_cmd, standby_load_cmd
from api.cas.dmesg import get_md_section_size from api.cas.dmesg import get_md_section_size
from api.cas.ioclass_config import IoClass
from test_tools.dd import Dd from test_tools.dd import Dd
from test_utils.os_utils import sync from test_tools.os_tools import sync
from test_utils.filesystem.file import File from test_utils.filesystem.file import File

View File

@ -6,11 +6,11 @@
import pytest import pytest
from api.cas import cli, casadm from api.cas import casadm
from storage_devices.disk import DiskType, DiskTypeSet, DiskTypeLowerThan from storage_devices.disk import DiskType, DiskTypeSet, DiskTypeLowerThan
from core.test_run import TestRun from core.test_run import TestRun
from test_utils.size import Size, Unit from type_def.size import Size, Unit
from api.cas.cache_config import CacheLineSize, CacheMode, CacheStatus from api.cas.cache_config import CacheLineSize, CacheStatus
from api.cas.casadm_params import StatsFilter from api.cas.casadm_params import StatsFilter
from api.cas.casadm_parser import get_core_info_for_cache_by_path from api.cas.casadm_parser import get_core_info_for_cache_by_path
from api.cas.core import CoreStatus, Core from api.cas.core import CoreStatus, Core

View File

@ -9,11 +9,11 @@ import pytest
from api.cas import casadm, casadm_parser, cli, cli_messages from api.cas import casadm, casadm_parser, cli, cli_messages
from core.test_run import TestRun from core.test_run import TestRun
from storage_devices.disk import DiskType, DiskTypeSet, DiskTypeLowerThan from storage_devices.disk import DiskType, DiskTypeSet, DiskTypeLowerThan
from test_tools import fs_utils, disk_utils from test_tools.disk_tools import get_block_size, create_partitions
from test_tools.disk_utils import Filesystem from test_tools.fs_tools import Filesystem, create_random_test_file, check_if_file_exists
from test_utils.filesystem.file import File from test_utils.filesystem.file import File
from test_utils.filesystem.symlink import Symlink from test_utils.filesystem.symlink import Symlink
from test_utils.size import Size, Unit from type_def.size import Size, Unit
mount_point, mount_point2 = "/mnt/cas", "/mnt/cas2" mount_point, mount_point2 = "/mnt/cas", "/mnt/cas2"
test_file_path = f"{mount_point}/test_file" test_file_path = f"{mount_point}/test_file"
@ -46,7 +46,7 @@ def test_load_cache_with_mounted_core():
core.mount(mount_point) core.mount(mount_point)
with TestRun.step(f"Create test file in mount point of exported object and check its md5 sum."): with TestRun.step(f"Create test file in mount point of exported object and check its md5 sum."):
test_file = fs_utils.create_random_test_file(test_file_path) test_file = create_random_test_file(test_file_path)
test_file_md5_before = test_file.md5sum() test_file_md5_before = test_file.md5sum()
with TestRun.step("Unmount core device."): with TestRun.step("Unmount core device."):
@ -110,8 +110,8 @@ def test_stop_cache_with_mounted_partition():
core2 = cache.add_core(core_dev2) core2 = cache.add_core(core_dev2)
with TestRun.step("Create partitions on one exported object."): with TestRun.step("Create partitions on one exported object."):
core.block_size = Size(disk_utils.get_block_size(core.get_device_id())) core.block_size = Size(get_block_size(core.get_device_id()))
disk_utils.create_partitions(core, 2 * [Size(4, Unit.GibiByte)]) create_partitions(core, 2 * [Size(4, Unit.GibiByte)])
fs_part = core.partitions[0] fs_part = core.partitions[0]
with TestRun.step("Create xfs filesystems on one exported object partition " with TestRun.step("Create xfs filesystems on one exported object partition "
@ -124,7 +124,7 @@ def test_stop_cache_with_mounted_partition():
core2.mount(mount_point2) core2.mount(mount_point2)
with TestRun.step("Ensure /etc/mtab exists."): with TestRun.step("Ensure /etc/mtab exists."):
if not fs_utils.check_if_file_exists("/etc/mtab"): if not check_if_file_exists("/etc/mtab"):
Symlink.create_symlink("/proc/self/mounts", "/etc/mtab") Symlink.create_symlink("/proc/self/mounts", "/etc/mtab")
with TestRun.step("Try to remove the core with partitions from cache."): with TestRun.step("Try to remove the core with partitions from cache."):
@ -185,7 +185,7 @@ def test_stop_cache_with_mounted_partition_no_mtab():
core.mount(mount_point) core.mount(mount_point)
with TestRun.step("Move /etc/mtab"): with TestRun.step("Move /etc/mtab"):
if fs_utils.check_if_file_exists("/etc/mtab"): if check_if_file_exists("/etc/mtab"):
mtab = File("/etc/mtab") mtab = File("/etc/mtab")
else: else:
mtab = Symlink.create_symlink("/proc/self/mounts", "/etc/mtab") mtab = Symlink.create_symlink("/proc/self/mounts", "/etc/mtab")

View File

@ -1,17 +1,17 @@
# #
# Copyright(c) 2022 Intel Corporation # Copyright(c) 2022 Intel Corporation
# Copyright(c) 2024 Huawei Technologies
# SPDX-License-Identifier: BSD-3-Clause # SPDX-License-Identifier: BSD-3-Clause
# #
import time import time
import pytest import pytest
from api.cas import casadm, cli, cli_messages from api.cas import casadm, cli, cli_messages
from core.test_run import TestRun from core.test_run import TestRun
from storage_devices.disk import DiskType, DiskTypeSet, DiskTypeLowerThan from storage_devices.disk import DiskType, DiskTypeSet, DiskTypeLowerThan
from test_utils.output import CmdException from connection.utils.output import CmdException
from test_utils.size import Size, Unit from type_def.size import Size, Unit
log_path = "/var/log/opencas.log" log_path = "/var/log/opencas.log"
wait_long_time = 180 wait_long_time = 180

View File

@ -1,5 +1,6 @@
# #
# Copyright(c) 2022 Intel Corporation # Copyright(c) 2022 Intel Corporation
# Copyright(c) 2024 Huawei Technologies Co., Ltd.
# SPDX-License-Identifier: BSD-3-Clause # SPDX-License-Identifier: BSD-3-Clause
# #
import pytest import pytest
@ -9,8 +10,8 @@ from api.cas.cache_config import CacheMode, CacheLineSize
from core.test_run import TestRun from core.test_run import TestRun
from storage_devices.disk import DiskType, DiskTypeSet from storage_devices.disk import DiskType, DiskTypeSet
from test_tools.dd import Dd from test_tools.dd import Dd
from test_utils.os_utils import Udev from test_tools.udev import Udev
from test_utils.size import Size, Unit from type_def.size import Size, Unit
@pytest.mark.require_disk("cache", DiskTypeSet([DiskType.optane, DiskType.nand])) @pytest.mark.require_disk("cache", DiskTypeSet([DiskType.optane, DiskType.nand]))

View File

@ -1,5 +1,6 @@
# #
# Copyright(c) 2019-2022 Intel Corporation # Copyright(c) 2019-2022 Intel Corporation
# Copyright(c) 2024 Huawei Technologies Co., Ltd.
# SPDX-License-Identifier: BSD-3-Clause # SPDX-License-Identifier: BSD-3-Clause
# #
@ -7,7 +8,8 @@ import pytest
from test_tools.fio.fio import Fio from test_tools.fio.fio import Fio
from test_tools.fio.fio_param import ReadWrite, IoEngine, ErrorFilter, VerifyMethod from test_tools.fio.fio_param import ReadWrite, IoEngine, ErrorFilter, VerifyMethod
from test_tools.device_mapper import ErrorDevice, DmTable from test_tools.device_mapper import DmTable
from storage_devices.error_device import ErrorDevice
from core.test_run import TestRun from core.test_run import TestRun
from api.cas import casadm from api.cas import casadm
from api.cas.cache_config import ( from api.cas.cache_config import (
@ -18,8 +20,8 @@ from api.cas.cache_config import (
CleaningPolicy, CleaningPolicy,
) )
from storage_devices.disk import DiskTypeSet, DiskType, DiskTypeLowerThan from storage_devices.disk import DiskTypeSet, DiskType, DiskTypeLowerThan
from test_utils.os_utils import Udev from test_tools.udev import Udev
from test_utils.size import Size, Unit from type_def.size import Size, Unit
@pytest.mark.parametrizex("cache_mode", CacheMode.without_traits(CacheModeTrait.LazyWrites)) @pytest.mark.parametrizex("cache_mode", CacheMode.without_traits(CacheModeTrait.LazyWrites))

View File

@ -16,8 +16,8 @@ from core.test_run import TestRun
from storage_devices.disk import DiskType, DiskTypeSet, DiskTypeLowerThan from storage_devices.disk import DiskType, DiskTypeSet, DiskTypeLowerThan
from test_tools.fio.fio import Fio from test_tools.fio.fio import Fio
from test_tools.fio.fio_param import ReadWrite, IoEngine, ErrorFilter from test_tools.fio.fio_param import ReadWrite, IoEngine, ErrorFilter
from test_utils.output import CmdException from connection.utils.output import CmdException
from test_utils.size import Size, Unit from type_def.size import Size, Unit
@pytest.mark.parametrizex("cache_mode", CacheMode) @pytest.mark.parametrizex("cache_mode", CacheMode)

View File

@ -11,12 +11,12 @@ from api.cas.cli import standby_activate_cmd
from core.test_run import TestRun from core.test_run import TestRun
from storage_devices.disk import DiskType, DiskTypeSet, DiskTypeLowerThan from storage_devices.disk import DiskType, DiskTypeSet, DiskTypeLowerThan
from test_utils.filesystem.symlink import Symlink from test_utils.filesystem.symlink import Symlink
from test_utils.size import Size, Unit from type_def.size import Size, Unit
from api.cas.cache_config import CacheLineSize from api.cas.cache_config import CacheLineSize
from api.cas.cache import CacheStatus from api.cas.cache import CacheStatus
from test_tools.dd import Dd from test_tools.dd import Dd
from test_tools.fs_utils import check_if_symlink_exists from test_tools.fs_tools import check_if_symlink_exists
from test_utils.os_utils import sync from test_tools.os_tools import sync
@pytest.mark.CI @pytest.mark.CI

View File

@ -10,7 +10,7 @@ from api.cas import casadm
from api.cas.casadm_parser import get_caches from api.cas.casadm_parser import get_caches
from core.test_run import TestRun from core.test_run import TestRun
from storage_devices.disk import DiskType, DiskTypeSet, DiskTypeLowerThan from storage_devices.disk import DiskType, DiskTypeSet, DiskTypeLowerThan
from test_utils.size import Size, Unit from type_def.size import Size, Unit
from api.cas.cache_config import CacheStatus from api.cas.cache_config import CacheStatus

View File

@ -1,5 +1,6 @@
# #
# Copyright(c) 2019-2022 Intel Corporation # Copyright(c) 2019-2022 Intel Corporation
# Copyright(c) 2024 Huawei Technologies Co., Ltd.
# SPDX-License-Identifier: BSD-3-Clause # SPDX-License-Identifier: BSD-3-Clause
# #
@ -9,9 +10,9 @@ from api.cas import casadm
from api.cas.core import CoreStatus from api.cas.core import CoreStatus
from core.test_run import TestRun from core.test_run import TestRun
from storage_devices.disk import DiskTypeSet, DiskType, DiskTypeLowerThan from storage_devices.disk import DiskTypeSet, DiskType, DiskTypeLowerThan
from test_tools.disk_utils import Filesystem from test_tools.fs_tools import Filesystem
from test_utils.output import CmdException from connection.utils.output import CmdException
from test_utils.size import Size, Unit from type_def.size import Size, Unit
@pytest.mark.require_disk("cache", DiskTypeSet([DiskType.optane, DiskType.nand])) @pytest.mark.require_disk("cache", DiskTypeSet([DiskType.optane, DiskType.nand]))

View File

@ -13,7 +13,7 @@ from api.cas.core import Core, CoreStatus
from core.test_run import TestRun from core.test_run import TestRun
from storage_devices.disk import DiskType, DiskTypeSet, DiskTypeLowerThan from storage_devices.disk import DiskType, DiskTypeSet, DiskTypeLowerThan
from test_tools.dd import Dd from test_tools.dd import Dd
from test_utils.size import Size, Unit from type_def.size import Size, Unit
@pytest.mark.require_disk("cache", DiskTypeSet([DiskType.optane, DiskType.nand])) @pytest.mark.require_disk("cache", DiskTypeSet([DiskType.optane, DiskType.nand]))

View File

@ -25,14 +25,15 @@ from api.cas.statistics import CacheStats
from core.test_run import TestRun from core.test_run import TestRun
from storage_devices.disk import DiskTypeSet, DiskType, DiskTypeLowerThan from storage_devices.disk import DiskTypeSet, DiskType, DiskTypeLowerThan
from test_tools.dd import Dd from test_tools.dd import Dd
from test_tools.disk_utils import Filesystem from test_tools.fs_tools import Filesystem
from test_tools.fio.fio import Fio from test_tools.fio.fio import Fio
from test_tools.fio.fio_param import IoEngine, ReadWrite from test_tools.fio.fio_param import IoEngine, ReadWrite
from test_utils.filesystem.file import File from test_utils.filesystem.file import File
from test_utils.os_utils import Udev, sync from test_tools.os_tools import sync
from test_utils.output import CmdException from test_tools.udev import Udev
from test_utils.size import Size, Unit from connection.utils.output import CmdException
from test_utils.time import Time from type_def.size import Size, Unit
from type_def.time import Time
@pytest.mark.CI @pytest.mark.CI

View File

@ -16,7 +16,7 @@ from api.cas.init_config import InitConfig
from core.test_run import TestRun from core.test_run import TestRun
from storage_devices.disk import DiskTypeSet, DiskType from storage_devices.disk import DiskTypeSet, DiskType
from storage_devices.raid import RaidConfiguration, Raid, Level, MetadataVariant from storage_devices.raid import RaidConfiguration, Raid, Level, MetadataVariant
from test_utils.size import Size, Unit from type_def.size import Size, Unit
@pytest.mark.os_dependent @pytest.mark.os_dependent

View File

@ -12,10 +12,10 @@ from api.cas.cache_config import CacheMode
from core.test_run import TestRun from core.test_run import TestRun
from storage_devices.disk import DiskTypeSet, DiskType, DiskTypeLowerThan from storage_devices.disk import DiskTypeSet, DiskType, DiskTypeLowerThan
from test_tools.dd import Dd from test_tools.dd import Dd
from test_tools.disk_utils import Filesystem from test_tools.fs_tools import Filesystem
from test_utils.filesystem.file import File from test_utils.filesystem.file import File
from test_utils.os_utils import drop_caches, DropCachesMode, sync from test_tools.os_tools import drop_caches, DropCachesMode, sync
from test_utils.size import Size, Unit from type_def.size import Size, Unit
@pytest.mark.os_dependent @pytest.mark.os_dependent

View File

@ -1,5 +1,6 @@
# #
# Copyright(c) 2019-2022 Intel Corporation # Copyright(c) 2019-2022 Intel Corporation
# Copyright(c) 2024 Huawei Technologies Co., Ltd.
# SPDX-License-Identifier: BSD-3-Clause # SPDX-License-Identifier: BSD-3-Clause
# #
@ -12,10 +13,11 @@ from api.cas.cache_config import (CleaningPolicy,
FlushParametersAlru, FlushParametersAlru,
Time, Time,
FlushParametersAcp) FlushParametersAcp)
from core.test_run import TestRun
from storage_devices.disk import DiskType, DiskTypeSet, DiskTypeLowerThan from storage_devices.disk import DiskType, DiskTypeSet, DiskTypeLowerThan
from test_tools.fio.fio import Fio from test_tools.fio.fio import Fio
from test_tools.fio.fio_param import * from test_tools.fio.fio_param import IoEngine, ReadWrite, CpusAllowedPolicy
from test_utils.size import Size, Unit from type_def.size import Size, Unit
@pytest.mark.parametrizex("cores_amount", [1, 4]) @pytest.mark.parametrizex("cores_amount", [1, 4])

View File

@ -1,22 +1,24 @@
# #
# Copyright(c) 2020-2021 Intel Corporation # Copyright(c) 2020-2021 Intel Corporation
# Copyright(c) 2024 Huawei Technologies Co., Ltd.
# SPDX-License-Identifier: BSD-3-Clause # SPDX-License-Identifier: BSD-3-Clause
# #
import os import os
import pytest import pytest
import time import time
from api.cas import casadm, casadm_parser from api.cas import casadm, casadm_parser
from api.cas.cache_config import CacheMode from api.cas.cache_config import CacheMode
from api.cas.init_config import InitConfig from api.cas.init_config import InitConfig
from core.test_run import TestRun from core.test_run import TestRun
from storage_devices.disk import DiskTypeLowerThan, DiskTypeSet, DiskType from storage_devices.disk import DiskTypeLowerThan, DiskTypeSet, DiskType
from test_tools.disk_utils import Filesystem from test_tools.fs_tools import Filesystem
from test_tools.fio.fio import Fio from test_tools.fio.fio import Fio
from test_tools.fio.fio_param import ReadWrite, IoEngine from test_tools.fio.fio_param import ReadWrite, IoEngine
from test_utils import os_utils from test_tools.os_tools import sync, drop_caches
from test_utils.os_utils import Runlevel from test_tools.runlevel import Runlevel, change_runlevel
from test_utils.size import Size, Unit from type_def.size import Size, Unit
mount_point = "/mnt/test" mount_point = "/mnt/test"
@ -36,7 +38,7 @@ def test_init_reboot_runlevels(runlevel, cache_mode):
- Cache should be loaded successfully after reboot. - Cache should be loaded successfully after reboot.
""" """
with TestRun.step(f"Set runlevel to {runlevel.value}."): with TestRun.step(f"Set runlevel to {runlevel.value}."):
os_utils.change_runlevel(runlevel) change_runlevel(runlevel)
with TestRun.step("Prepare CAS device."): with TestRun.step("Prepare CAS device."):
cache_disk = TestRun.disks['cache'] cache_disk = TestRun.disks['cache']
@ -65,8 +67,8 @@ def test_init_reboot_runlevels(runlevel, cache_mode):
.file_size(Size(30, Unit.GibiByte)) .file_size(Size(30, Unit.GibiByte))
fio.run_in_background() fio.run_in_background()
os_utils.sync() sync()
os_utils.drop_caches() drop_caches()
time.sleep(10) time.sleep(10)
TestRun.executor.run_expect_success("pgrep fio") TestRun.executor.run_expect_success("pgrep fio")
@ -86,5 +88,5 @@ def test_init_reboot_runlevels(runlevel, cache_mode):
with TestRun.step("Stop cache and set default runlevel."): with TestRun.step("Stop cache and set default runlevel."):
if len(caches) != 0: if len(caches) != 0:
casadm.stop_all_caches() casadm.stop_all_caches()
os_utils.change_runlevel(Runlevel.runlevel3) change_runlevel(Runlevel.runlevel3)
TestRun.executor.reboot() TestRun.executor.reboot()

View File

@ -10,7 +10,7 @@ import pytest
from api.cas import cas_module, casctl from api.cas import cas_module, casctl
from api.cas.cas_module import CasModule from api.cas.cas_module import CasModule
from core.test_run import TestRun from core.test_run import TestRun
from test_utils import os_utils from test_tools.os_tools import load_kernel_module
@pytest.mark.os_dependent @pytest.mark.os_dependent
@ -46,5 +46,5 @@ def test_init_status():
TestRun.fail("CAS management device is present in OS when CAS module is not loaded.") TestRun.fail("CAS management device is present in OS when CAS module is not loaded.")
with TestRun.step("Load CAS modules and start CAS service"): with TestRun.step("Load CAS modules and start CAS service"):
os_utils.load_kernel_module(CasModule.cache.value) load_kernel_module(CasModule.cache.value)
casctl.start() casctl.start()

View File

@ -1,14 +1,15 @@
# #
# Copyright(c) 2019-2022 Intel Corporation # Copyright(c) 2019-2022 Intel Corporation
# Copyright(c) 2024 Huawei Technologies Co., Ltd.
# SPDX-License-Identifier: BSD-3-Clause # SPDX-License-Identifier: BSD-3-Clause
# #
import pytest import pytest
from api.cas import casadm, casadm_parser, cli, cli_messages from api.cas import casadm, casadm_parser, cli, cli_messages
from core.test_run import TestRun from core.test_run import TestRun
from storage_devices.disk import DiskType, DiskTypeSet, DiskTypeLowerThan from storage_devices.disk import DiskType, DiskTypeSet, DiskTypeLowerThan
from test_utils.size import Size, Unit from type_def.size import Size, Unit
@pytest.mark.require_disk("cache", DiskTypeSet([DiskType.optane, DiskType.nand])) @pytest.mark.require_disk("cache", DiskTypeSet([DiskType.optane, DiskType.nand]))

View File

@ -14,11 +14,10 @@ from api.cas.cli_messages import check_stderr_msg, stop_cache_errors
from core.test_run import TestRun from core.test_run import TestRun
from storage_devices.disk import DiskTypeLowerThan, DiskTypeSet, DiskType from storage_devices.disk import DiskTypeLowerThan, DiskTypeSet, DiskType
from test_tools.dd import Dd from test_tools.dd import Dd
from test_tools.disk_utils import Filesystem, mount from test_tools.fs_tools import check_if_file_exists, Filesystem
from test_tools.fs_utils import check_if_file_exists
from test_utils.filesystem.file import File from test_utils.filesystem.file import File
from test_utils.os_utils import sync from test_tools.os_tools import sync
from test_utils.size import Size, Unit from type_def.size import Size, Unit
mount_point = "/mnt/cas" mount_point = "/mnt/cas"

View File

@ -13,7 +13,7 @@ from api.cas.core import CoreStatus
from api.cas.init_config import InitConfig from api.cas.init_config import InitConfig
from core.test_run import TestRun from core.test_run import TestRun
from storage_devices.disk import DiskTypeLowerThan, DiskTypeSet, DiskType from storage_devices.disk import DiskTypeLowerThan, DiskTypeSet, DiskType
from test_utils.size import Size, Unit from type_def.size import Size, Unit
@pytest.mark.CI @pytest.mark.CI

View File

@ -14,11 +14,12 @@ from api.cas.init_config import InitConfig
from core.test_run import TestRun from core.test_run import TestRun
from storage_devices.disk import DiskType, DiskTypeSet, DiskTypeLowerThan from storage_devices.disk import DiskType, DiskTypeSet, DiskTypeLowerThan
from test_utils.filesystem.file import File from test_utils.filesystem.file import File
from test_tools.disk_utils import Filesystem from test_tools.fs_tools import Filesystem
from test_utils import fstab from test_tools import fstab
from test_tools.dd import Dd from test_tools.dd import Dd
from test_utils.size import Unit, Size from type_def.size import Unit, Size
from test_utils.os_utils import sync, Udev from test_tools.os_tools import sync
from test_tools.udev import Udev
from test_utils.emergency_escape import EmergencyEscape from test_utils.emergency_escape import EmergencyEscape
from api.cas.cas_service import set_cas_service_timeout, clear_cas_service_timeout from api.cas.cas_service import set_cas_service_timeout, clear_cas_service_timeout
@ -221,7 +222,7 @@ def test_cas_startup_lazy():
core_pool_paths = {c["device_path"] for c in core_pool_list} core_pool_paths = {c["device_path"] for c in core_pool_list}
if core_pool_paths != expected_core_pool_paths: if core_pool_paths != expected_core_pool_paths:
TestRun.error( TestRun.LOGGER.error(
f"Expected the following devices in core pool " f"Expected the following devices in core pool "
f"{expected_core_pool_paths}. Got {core_pool_paths}" f"{expected_core_pool_paths}. Got {core_pool_paths}"
) )
@ -230,7 +231,7 @@ def test_cas_startup_lazy():
caches_paths = {c["device_path"] for c in caches_list} caches_paths = {c["device_path"] for c in caches_list}
if caches_paths != expected_caches_paths: if caches_paths != expected_caches_paths:
TestRun.error( TestRun.LOGGER.error(
f"Expected the following devices as caches " f"Expected the following devices as caches "
f"{expected_caches_paths}. Got {caches_paths}" f"{expected_caches_paths}. Got {caches_paths}"
) )
@ -239,7 +240,7 @@ def test_cas_startup_lazy():
cores_paths = {c["device_path"] for c in cores_list} cores_paths = {c["device_path"] for c in cores_list}
if cores_paths != expected_cores_paths: if cores_paths != expected_cores_paths:
TestRun.error( TestRun.LOGGER.error(
f"Expected the following devices as cores " f"Expected the following devices as cores "
f"{expected_caches_paths}. Got {cores_paths}" f"{expected_caches_paths}. Got {cores_paths}"
) )
@ -446,14 +447,14 @@ def test_failover_config_startup():
cores_list = get_cas_devices_dict()["cores"].values() cores_list = get_cas_devices_dict()["cores"].values()
if len(core_pool_list) != 0: if len(core_pool_list) != 0:
TestRun.error(f"No cores expected in core pool. Got {core_pool_list}") TestRun.LOGGER.error(f"No cores expected in core pool. Got {core_pool_list}")
else: else:
TestRun.LOGGER.info("Core pool is ok") TestRun.LOGGER.info("Core pool is ok")
expected_caches_paths = set([active_cache_path, standby_cache_path]) expected_caches_paths = set([active_cache_path, standby_cache_path])
caches_paths = {c["device"] for c in caches_list} caches_paths = {c["device"] for c in caches_list}
if caches_paths != expected_caches_paths: if caches_paths != expected_caches_paths:
TestRun.error( TestRun.LOGGER.error(
f"Expected the following devices as caches " f"Expected the following devices as caches "
f"{expected_caches_paths}. Got {caches_paths}" f"{expected_caches_paths}. Got {caches_paths}"
) )
@ -463,7 +464,7 @@ def test_failover_config_startup():
expected_core_paths = set([active_core_path]) expected_core_paths = set([active_core_path])
cores_paths = {c["device"] for c in cores_list} cores_paths = {c["device"] for c in cores_list}
if cores_paths != expected_core_paths: if cores_paths != expected_core_paths:
TestRun.error( TestRun.LOGGER.error(
f"Expected the following devices as cores " f"Expected the following devices as cores "
f"{expected_core_paths}. Got {cores_paths}" f"{expected_core_paths}. Got {cores_paths}"
) )

View File

@ -1,21 +1,22 @@
# #
# Copyright(c) 2020-2021 Intel Corporation # Copyright(c) 2020-2021 Intel Corporation
# Copyright(c) 2024 Huawei Technologies Co., Ltd.
# SPDX-License-Identifier: BSD-3-Clause # SPDX-License-Identifier: BSD-3-Clause
# #
from datetime import timedelta
import pytest import pytest
from datetime import timedelta
from api.cas import casadm from api.cas import casadm
from api.cas.cache_config import CacheMode from api.cas.cache_config import CacheMode
from core.test_run import TestRun from core.test_run import TestRun
from storage_devices.disk import DiskType, DiskTypeSet, DiskTypeLowerThan from storage_devices.disk import DiskType, DiskTypeSet, DiskTypeLowerThan
from test_tools.disk_utils import Filesystem from test_tools.fs_tools import Filesystem
from test_tools.fio.fio import Fio from test_tools.fio.fio import Fio
from test_tools.fio.fio_param import IoEngine, CpusAllowedPolicy, ReadWrite from test_tools.fio.fio_param import IoEngine, CpusAllowedPolicy, ReadWrite
from test_utils.os_utils import get_dut_cpu_physical_cores from test_tools.os_tools import get_dut_cpu_physical_cores
from test_utils.size import Size, Unit from type_def.size import Size, Unit
mount_point = "/mnt/test" mount_point = "/mnt/test"
runtime = timedelta(minutes=15) runtime = timedelta(minutes=15)

View File

@ -1,10 +1,10 @@
# #
# Copyright(c) 2019-2022 Intel Corporation # Copyright(c) 2019-2022 Intel Corporation
# Copyright(c) 2024 Huawei Technologies Co., Ltd.
# SPDX-License-Identifier: BSD-3-Clause # SPDX-License-Identifier: BSD-3-Clause
# #
import time import time
import pytest import pytest
from datetime import timedelta from datetime import timedelta
@ -13,7 +13,7 @@ from test_tools.fio.fio import Fio
from test_tools.fio.fio_param import ReadWrite, IoEngine from test_tools.fio.fio_param import ReadWrite, IoEngine
from storage_devices.disk import DiskType, DiskTypeSet, DiskTypeLowerThan from storage_devices.disk import DiskType, DiskTypeSet, DiskTypeLowerThan
from core.test_run import TestRun from core.test_run import TestRun
from test_utils.size import Size, Unit from type_def.size import Size, Unit
@pytest.mark.require_disk("cache", DiskTypeSet([DiskType.optane, DiskType.nand])) @pytest.mark.require_disk("cache", DiskTypeSet([DiskType.optane, DiskType.nand]))

View File

@ -1,11 +1,13 @@
# #
# Copyright(c) 2020-2022 Intel Corporation # Copyright(c) 2020-2022 Intel Corporation
# Copyright(c) 2024 Huawei Technologies Co., Ltd.
# SPDX-License-Identifier: BSD-3-Clause # SPDX-License-Identifier: BSD-3-Clause
# #
import os
import os
import pytest import pytest
import uuid import uuid
from api.cas import casadm from api.cas import casadm
from api.cas.cache_config import CacheMode, CacheLineSize, CacheModeTrait from api.cas.cache_config import CacheMode, CacheLineSize, CacheModeTrait
from core.test_run import TestRun from core.test_run import TestRun
@ -13,8 +15,8 @@ from storage_devices.disk import DiskTypeSet, DiskTypeLowerThan, DiskType
from test_tools.fio.fio import Fio from test_tools.fio.fio import Fio
from test_tools.fio.fio_param import IoEngine, ReadWrite from test_tools.fio.fio_param import IoEngine, ReadWrite
from test_utils.filesystem.symlink import Symlink from test_utils.filesystem.symlink import Symlink
from test_utils.os_utils import Udev from test_tools.udev import Udev
from test_utils.size import Size, Unit from type_def.size import Size, Unit
@pytest.mark.require_disk("cache", DiskTypeSet([DiskType.optane, DiskType.nand])) @pytest.mark.require_disk("cache", DiskTypeSet([DiskType.optane, DiskType.nand]))

View File

@ -3,23 +3,23 @@
# Copyright(c) 2024 Huawei Technologies Co., Ltd. # Copyright(c) 2024 Huawei Technologies Co., Ltd.
# SPDX-License-Identifier: BSD-3-Clause # SPDX-License-Identifier: BSD-3-Clause
# #
import os
import posixpath import posixpath
import time import time
import pytest import pytest
from test_tools.os_tools import sync, drop_caches
from test_tools.udev import Udev
from api.cas import casadm from api.cas import casadm
from api.cas.cache_config import CacheMode, CacheModeTrait, CleaningPolicy, SeqCutOffPolicy from api.cas.cache_config import CacheMode, CacheModeTrait, CleaningPolicy, SeqCutOffPolicy
from core.test_run import TestRun from core.test_run import TestRun
from storage_devices.disk import DiskType, DiskTypeSet from storage_devices.disk import DiskType, DiskTypeSet
from test_tools import fs_utils
from test_tools.blktrace import BlkTrace, BlkTraceMask, RwbsKind from test_tools.blktrace import BlkTrace, BlkTraceMask, RwbsKind
from test_tools.disk_utils import Filesystem, check_if_device_supports_trim from test_tools.disk_tools import check_if_device_supports_trim
from test_tools.fs_tools import Filesystem, create_random_test_file
from test_tools.fio.fio import Fio from test_tools.fio.fio import Fio
from test_tools.fio.fio_param import ReadWrite, IoEngine from test_tools.fio.fio_param import ReadWrite, IoEngine
from test_utils import os_utils from type_def.size import Size, Unit
from test_utils.size import Size, Unit
from api.cas.dmesg import get_metadata_size_on_device from api.cas.dmesg import get_metadata_size_on_device
@ -129,7 +129,7 @@ def test_trim_propagation():
raise Exception("Core device doesn't support discards") raise Exception("Core device doesn't support discards")
with TestRun.step(f"Disable udev"): with TestRun.step(f"Disable udev"):
os_utils.Udev.disable() Udev.disable()
with TestRun.step(f"Prepare cache instance in WB with one core"): with TestRun.step(f"Prepare cache instance in WB with one core"):
cache = casadm.start_cache(cache_dev, CacheMode.WB, force=True) cache = casadm.start_cache(cache_dev, CacheMode.WB, force=True)
@ -161,7 +161,7 @@ def test_trim_propagation():
with TestRun.step("Power cycle"): with TestRun.step("Power cycle"):
power_control = TestRun.plugin_manager.get_plugin("power_control") power_control = TestRun.plugin_manager.get_plugin("power_control")
power_control.power_cycle() power_control.power_cycle()
os_utils.Udev.disable() Udev.disable()
with TestRun.step("Load cache"): with TestRun.step("Load cache"):
cache = casadm.start_cache(cache_dev, load=True) cache = casadm.start_cache(cache_dev, load=True)
@ -235,7 +235,7 @@ def test_trim_device_discard_support(
core.mount(mount_point, ["discard"]) core.mount(mount_point, ["discard"])
with TestRun.step("Create random file."): with TestRun.step("Create random file."):
test_file = fs_utils.create_random_test_file( test_file = create_random_test_file(
posixpath.join(mount_point, "test_file"), core_dev.size * 0.2 posixpath.join(mount_point, "test_file"), core_dev.size * 0.2
) )
occupancy_before = core.get_occupancy() occupancy_before = core.get_occupancy()
@ -246,8 +246,8 @@ def test_trim_device_discard_support(
with TestRun.step("Remove file."): with TestRun.step("Remove file."):
test_file.remove() test_file.remove()
os_utils.sync() sync()
os_utils.drop_caches() drop_caches()
time.sleep(5) time.sleep(5)
with TestRun.step("Ensure that discards were detected by blktrace on proper devices."): with TestRun.step("Ensure that discards were detected by blktrace on proper devices."):
@ -315,8 +315,8 @@ def compare_properties(value, expected_value, property_name):
def stop_monitoring_and_check_discards(blktraces, discard_support): def stop_monitoring_and_check_discards(blktraces, discard_support):
time.sleep(60) time.sleep(60)
os_utils.sync() sync()
os_utils.drop_caches() drop_caches()
time.sleep(5) time.sleep(5)
discard_flag = RwbsKind.D # Discard discard_flag = RwbsKind.D # Discard

View File

@ -1,17 +1,20 @@
# #
# Copyright(c) 2020-2022 Intel Corporation # Copyright(c) 2020-2022 Intel Corporation
# Copyright(c) 2024 Huawei Technologies Co., Ltd.
# SPDX-License-Identifier: BSD-3-Clause # SPDX-License-Identifier: BSD-3-Clause
# #
import os
from datetime import timedelta
import pytest import pytest
from datetime import timedelta
from api.cas import casadm from api.cas import casadm
from api.cas.cache_config import CacheMode, CacheLineSize from api.cas.cache_config import CacheMode, CacheLineSize
from core.test_run import TestRun from core.test_run import TestRun
from storage_devices.disk import DiskTypeSet, DiskType from storage_devices.disk import DiskTypeSet, DiskType
from test_tools.disk_utils import Filesystem from test_tools.fio.fio import Fio
from test_utils.size import Size, Unit from test_tools.fio.fio_param import ReadWrite, IoEngine
from type_def.size import Size, Unit
@pytest.mark.os_dependent @pytest.mark.os_dependent
@ -19,28 +22,23 @@ from test_utils.size import Size, Unit
@pytest.mark.require_disk("core", DiskTypeSet([DiskType.optane, DiskType.nand, DiskType.sata])) @pytest.mark.require_disk("core", DiskTypeSet([DiskType.optane, DiskType.nand, DiskType.sata]))
@pytest.mark.parametrizex("cache_mode", CacheMode) @pytest.mark.parametrizex("cache_mode", CacheMode)
@pytest.mark.parametrizex("cache_line_size", CacheLineSize) @pytest.mark.parametrizex("cache_line_size", CacheLineSize)
@pytest.mark.require_plugin("vdbench")
def test_trim_stress(cache_mode, cache_line_size): def test_trim_stress(cache_mode, cache_line_size):
""" """
title: Trim support on cache devices in different cache modes stress test. title: Trim support on cache devices in different cache modes stress test.
description: | description: |
Stress test validating the ability of CAS to handle trim requests in different modes, Stress test validating the ability of CAS to handle trim requests in different modes.
on different filesystem types.
pass_criteria: pass_criteria:
- No kernel bug. - No kernel bug.
- Cache should still work correctly. - Cache should still work correctly.
""" """
cores_number = 4
mount_point = "/mnt"
with TestRun.step("Prepare devices."): with TestRun.step("Prepare devices."):
cache_disk = TestRun.disks['cache'] cache_disk = TestRun.disks['cache']
cache_disk.create_partitions([Size(1, Unit.GibiByte)]) cache_disk.create_partitions([Size(1, Unit.GibiByte)])
cache_dev = cache_disk.partitions[0] cache_dev = cache_disk.partitions[0]
core_disk = TestRun.disks['core'] core_disk = TestRun.disks['core']
core_disk.create_partitions([Size(1, Unit.GibiByte)] * cores_number) core_disk.create_partitions([Size(1, Unit.GibiByte)] * 3)
core_devices = core_disk.partitions core_devices = core_disk.partitions
with TestRun.step("Start cache and add cores."): with TestRun.step("Start cache and add cores."):
@ -49,41 +47,35 @@ def test_trim_stress(cache_mode, cache_line_size):
for d in core_devices: for d in core_devices:
cores.append(cache.add_core(d)) cores.append(cache.add_core(d))
with TestRun.step("Create filesystem and mount CAS devices."):
directories = []
for counter, core in enumerate(cores):
core.create_filesystem(Filesystem(counter % len(Filesystem)))
mount_dir = os.path.join(mount_point, str(counter + 1))
directories.append(mount_dir)
core.mount(mount_dir, ["discard"])
with TestRun.step("Run I/O workload."): with TestRun.step("Run I/O workload."):
for _ in TestRun.iteration(range(1, 7)): for _ in TestRun.iteration(range(1, 6)):
run_vdbench(directories) run_fio([core.path for core in cores])
with TestRun.step("Stop CAS."): with TestRun.step("Stop CAS."):
for c in cores: for c in cores:
c.unmount()
c.remove_core() c.remove_core()
cache.stop() cache.stop()
def run_vdbench(directories): def run_fio(paths):
vdbench = TestRun.plugin_manager.get_plugin('vdbench') block_sizes = [f"{2 ** n}k" for n in range(0, 10)]
config = f"data_errors=1,validate=yes,messagescan=no,create_anchors=yes\n" \
f"fsd=default,depth=4,width=5,files=10,sizes=" \
f"(1k,10,2k,10,4k,10,8k,10,16k,10,32k,10,64k,10,128k,10,256k,10,512k,10)\n"
for i, dir in enumerate(directories): fio = (
config += f"fsd=fsd{i},anchor={dir}\n" Fio().create_command()
.io_engine(IoEngine.libaio)
.io_depth(16)
.bs_split(":".join([f"{bs}/{100 // len(block_sizes)}" for bs in block_sizes]))
.time_based()
.run_time(timedelta(minutes=10))
.trim_verify_zero()
.verify_fatal()
)
config += f"\nfwd=fwd1,fsd=fsd*," \ for path, rw in zip(paths, [ReadWrite.trim, ReadWrite.randtrim, ReadWrite.trimwrite]):
f"fileio=(random),fileselect=random,threads=32," \ (
f"xfersizes=(512,10,1k,10,2k,10,4k,10,8k,10,16k,10,32k,10,64k,10," \ fio.add_job(path + rw.name)
f"128k,10,256k,10)\nrd=rd1,fwd=fwd*,fwdrate=max,format=yes," \ .file_name(path)
f"interval=5,operations=(read,write,open,close,getattr,setattr)" .read_write(rw)
vdbench.create_config(config, run_time=timedelta(minutes=5)) )
if vdbench.run():
TestRun.LOGGER.info("VDBench finished with status zero.") fio.run(fio_timeout=timedelta(minutes=20))
else:
TestRun.LOGGER.error("VDBench finished with non-zero status.")

View File

@ -1,5 +1,6 @@
# #
# Copyright(c) 2019-2022 Intel Corporation # Copyright(c) 2019-2022 Intel Corporation
# Copyright(c) 2024 Huawei Technologies Co., Ltd.
# SPDX-License-Identifier: BSD-3-Clause # SPDX-License-Identifier: BSD-3-Clause
# #
@ -16,9 +17,10 @@ from core.test_run import TestRun
from test_tools.dd import Dd from test_tools.dd import Dd
from test_tools.fio.fio import Fio from test_tools.fio.fio import Fio
from test_tools.fio.fio_param import ReadWrite, IoEngine from test_tools.fio.fio_param import ReadWrite, IoEngine
from test_utils.os_utils import Udev, sync from test_tools.os_tools import sync
from test_utils.os_utils import drop_caches, DropCachesMode from test_tools.udev import Udev
from test_utils.size import Size, Unit from test_tools.os_tools import drop_caches, DropCachesMode
from type_def.size import Size, Unit
ioclass_config_path = "/etc/opencas/ioclass.conf" ioclass_config_path = "/etc/opencas/ioclass.conf"
template_config_path = "/etc/opencas/ioclass-config.csv" template_config_path = "/etc/opencas/ioclass-config.csv"

View File

@ -1,9 +1,9 @@
# #
# Copyright(c) 2019-2022 Intel Corporation # Copyright(c) 2019-2022 Intel Corporation
# Copyright(c) 2024 Huawei Technologies Co., Ltd.
# SPDX-License-Identifier: BSD-3-Clause # SPDX-License-Identifier: BSD-3-Clause
# #
import pytest import pytest
from api.cas import casadm, ioclass_config from api.cas import casadm, ioclass_config
@ -12,8 +12,8 @@ from api.cas.casadm_params import OutputFormat
from api.cas.ioclass_config import IoClass from api.cas.ioclass_config import IoClass
from core.test_run import TestRun from core.test_run import TestRun
from storage_devices.disk import DiskType, DiskTypeSet, DiskTypeLowerThan from storage_devices.disk import DiskType, DiskTypeSet, DiskTypeLowerThan
from test_tools import fs_utils from test_tools.fs_tools import read_file, remove
from test_utils.size import Size, Unit from type_def.size import Size, Unit
ioclass_config_path = "/tmp/opencas_ioclass.conf" ioclass_config_path = "/tmp/opencas_ioclass.conf"
@ -61,7 +61,7 @@ def test_io_class_export_configuration():
f"{casadm.list_io_classes_cmd(str(cache.cache_id), OutputFormat.csv.name)}" f"{casadm.list_io_classes_cmd(str(cache.cache_id), OutputFormat.csv.name)}"
f" > {saved_config_path}" f" > {saved_config_path}"
) )
csv = fs_utils.read_file(saved_config_path) csv = read_file(saved_config_path)
if not IoClass.compare_ioclass_lists(IoClass.csv_to_list(csv), random_list): if not IoClass.compare_ioclass_lists(IoClass.csv_to_list(csv), random_list):
TestRun.LOGGER.error( TestRun.LOGGER.error(
"Exported configuration does not match expected\n" "Exported configuration does not match expected\n"
@ -98,7 +98,7 @@ def test_io_class_export_configuration():
) )
with TestRun.LOGGER.step(f"Test cleanup"): with TestRun.LOGGER.step(f"Test cleanup"):
fs_utils.remove(saved_config_path) remove(saved_config_path)
def prepare(cache_mode: CacheMode = None): def prepare(cache_mode: CacheMode = None):

View File

@ -1,5 +1,6 @@
# #
# Copyright(c) 2019-2022 Intel Corporation # Copyright(c) 2019-2022 Intel Corporation
# Copyright(c) 2024 Huawei Technologies Co., Ltd.
# SPDX-License-Identifier: BSD-3-Clause # SPDX-License-Identifier: BSD-3-Clause
# #
@ -10,8 +11,9 @@ from api.cas.cache_config import CacheMode, CleaningPolicy, SeqCutOffPolicy
from core.test_run import TestRun from core.test_run import TestRun
from storage_devices.disk import DiskType, DiskTypeSet, DiskTypeLowerThan from storage_devices.disk import DiskType, DiskTypeSet, DiskTypeLowerThan
from test_tools.dd import Dd from test_tools.dd import Dd
from test_utils.os_utils import sync, Udev, drop_caches from test_tools.os_tools import sync, drop_caches
from test_utils.size import Unit, Size from test_tools.udev import Udev
from type_def.size import Unit, Size
dd_bs = Size(1, Unit.Blocks4096) dd_bs = Size(1, Unit.Blocks4096)
dd_count = 1230 dd_count = 1230

View File

@ -1,24 +1,25 @@
# #
# Copyright(c) 2019-2022 Intel Corporation # Copyright(c) 2019-2022 Intel Corporation
# Copyright(c) 2024 Huawei Technologies Co., Ltd.
# SPDX-License-Identifier: BSD-3-Clause # SPDX-License-Identifier: BSD-3-Clause
# #
import random import random
import time import time
from datetime import datetime
import pytest import pytest
from datetime import datetime
from api.cas import ioclass_config, casadm from api.cas import ioclass_config, casadm
from core.test_run import TestRun from core.test_run import TestRun
from storage_devices.disk import DiskType, DiskTypeSet, DiskTypeLowerThan from storage_devices.disk import DiskType, DiskTypeSet, DiskTypeLowerThan
from test_tools import fs_utils
from test_tools.dd import Dd from test_tools.dd import Dd
from test_tools.disk_utils import Filesystem from test_tools.fs_tools import Filesystem, create_directory, remove
from test_utils.filesystem.directory import Directory from test_utils.filesystem.directory import Directory
from test_utils.filesystem.file import File from test_utils.filesystem.file import File
from test_utils.os_utils import drop_caches, DropCachesMode, sync, Udev from test_tools.os_tools import drop_caches, DropCachesMode, sync
from test_utils.size import Size, Unit from test_tools.udev import Udev
from type_def.size import Size, Unit
from tests.io_class.io_class_common import mountpoint, prepare, ioclass_config_path from tests.io_class.io_class_common import mountpoint, prepare, ioclass_config_path
@ -50,14 +51,14 @@ def test_ioclass_directory_depth(filesystem):
sync() sync()
with TestRun.step(f"Create the base directory: {base_dir_path}."): with TestRun.step(f"Create the base directory: {base_dir_path}."):
fs_utils.create_directory(base_dir_path) create_directory(base_dir_path)
with TestRun.step(f"Create a nested directory."): with TestRun.step(f"Create a nested directory."):
nested_dir_path = base_dir_path nested_dir_path = base_dir_path
random_depth = random.randint(40, 80) random_depth = random.randint(40, 80)
for i in range(random_depth): for i in range(random_depth):
nested_dir_path += f"/dir_{i}" nested_dir_path += f"/dir_{i}"
fs_utils.create_directory(path=nested_dir_path, parents=True) create_directory(path=nested_dir_path, parents=True)
# Test classification in nested dir by reading a previously unclassified file # Test classification in nested dir by reading a previously unclassified file
with TestRun.step("Create the first file in the nested directory."): with TestRun.step("Create the first file in the nested directory."):
@ -175,7 +176,7 @@ def test_ioclass_directory_file_operations(filesystem):
casadm.load_io_classes(cache_id=cache.cache_id, file=ioclass_config_path) casadm.load_io_classes(cache_id=cache.cache_id, file=ioclass_config_path)
with TestRun.step( with TestRun.step(
f"Prepare {filesystem.name} filesystem " f"and mounting {core.path} at {mountpoint}." f"Prepare {filesystem.name} filesystem and mounting {core.path} at {mountpoint}."
): ):
core.create_filesystem(fs_type=filesystem) core.create_filesystem(fs_type=filesystem)
core.mount(mount_point=mountpoint) core.mount(mount_point=mountpoint)
@ -397,7 +398,7 @@ def test_ioclass_directory_dir_operations(filesystem):
) )
with TestRun.step(f"Remove {classified_dir_path_2}."): with TestRun.step(f"Remove {classified_dir_path_2}."):
fs_utils.remove(path=classified_dir_path_2, force=True, recursive=True) remove(path=classified_dir_path_2, force=True, recursive=True)
sync() sync()
drop_caches(DropCachesMode.ALL) drop_caches(DropCachesMode.ALL)

View File

@ -1,19 +1,22 @@
# #
# Copyright(c) 2022 Intel Corporation # Copyright(c) 2022 Intel Corporation
# Copyright(c) 2024 Huawei Technologies Co., Ltd.
# SPDX-License-Identifier: BSD-3-Clause # SPDX-License-Identifier: BSD-3-Clause
# #
from collections import namedtuple
import pytest import pytest
from collections import namedtuple
from api.cas.ioclass_config import default_config_file_path from api.cas.ioclass_config import default_config_file_path
from storage_devices.disk import DiskType, DiskTypeSet, DiskTypeLowerThan from storage_devices.disk import DiskType, DiskTypeSet, DiskTypeLowerThan
from core.test_run import TestRun from core.test_run import TestRun
from api.cas.cache_config import CacheMode, CleaningPolicy, SeqCutOffPolicy from api.cas.cache_config import CacheMode, CleaningPolicy, SeqCutOffPolicy
from .io_class_common import ioclass_config, get_io_class_occupancy, run_io_dir from .io_class_common import ioclass_config, get_io_class_occupancy, run_io_dir
from api.cas import casadm from api.cas import casadm
from test_utils.os_utils import sync, Udev, drop_caches from test_tools.os_tools import sync, drop_caches
from test_utils.size import Unit, Size from test_tools.udev import Udev
from type_def.size import Unit, Size
cache_size = Size(100, Unit.MiB) cache_size = Size(100, Unit.MiB)

View File

@ -1,16 +1,16 @@
# #
# Copyright(c) 2020-2022 Intel Corporation # Copyright(c) 2020-2022 Intel Corporation
# Copyright(c) 2024 Huawei Technologies Co., Ltd.
# SPDX-License-Identifier: BSD-3-Clause # SPDX-License-Identifier: BSD-3-Clause
# #
import pytest
from collections import namedtuple from collections import namedtuple
from math import isclose from math import isclose
import pytest
from storage_devices.disk import DiskType, DiskTypeSet, DiskTypeLowerThan from storage_devices.disk import DiskType, DiskTypeSet, DiskTypeLowerThan
from test_tools import fs_utils from test_tools.fs_tools import Filesystem, create_directory
from test_tools.disk_utils import Filesystem
from .io_class_common import * from .io_class_common import *
@ -50,7 +50,7 @@ def test_io_class_eviction_priority():
IoclassConfig(4, 1, 1.00, f"{mountpoint}/D"), IoclassConfig(4, 1, 1.00, f"{mountpoint}/D"),
] ]
for io_class in io_classes: for io_class in io_classes:
fs_utils.create_directory(io_class.dir_path, parents=True) create_directory(io_class.dir_path, parents=True)
with TestRun.step("Adding io classes for all dirs"): with TestRun.step("Adding io classes for all dirs"):
for io_class in io_classes: for io_class in io_classes:

View File

@ -1,20 +1,20 @@
# #
# Copyright(c) 2019-2022 Intel Corporation # Copyright(c) 2019-2022 Intel Corporation
# Copyright(c) 2024 Huawei Technologies Co., Ltd.
# SPDX-License-Identifier: BSD-3-Clause # SPDX-License-Identifier: BSD-3-Clause
# #
import random import random
import pytest import pytest
from api.cas import ioclass_config, casadm from api.cas import ioclass_config, casadm
from core.test_run import TestRun from core.test_run import TestRun
from storage_devices.disk import DiskType, DiskTypeSet, DiskTypeLowerThan from storage_devices.disk import DiskType, DiskTypeSet, DiskTypeLowerThan
from test_tools.dd import Dd from test_tools.dd import Dd
from test_tools.disk_utils import Filesystem from test_tools.fs_tools import Filesystem
from test_utils.filesystem.file import File from test_utils.filesystem.file import File
from test_utils.os_utils import sync, DropCachesMode, drop_caches from test_tools.os_tools import sync, DropCachesMode, drop_caches
from test_utils.size import Size, Unit from type_def.size import Size, Unit
from tests.io_class.io_class_common import mountpoint, prepare, ioclass_config_path from tests.io_class.io_class_common import mountpoint, prepare, ioclass_config_path

View File

@ -12,11 +12,10 @@ from api.cas.ioclass_config import IoClass
from core.test_run import TestRun from core.test_run import TestRun
from storage_devices.disk import DiskType, DiskTypeSet, DiskTypeLowerThan from storage_devices.disk import DiskType, DiskTypeSet, DiskTypeLowerThan
from storage_devices.lvm import Lvm, LvmConfiguration from storage_devices.lvm import Lvm, LvmConfiguration
from test_tools import fs_utils from test_tools.fs_tools import Filesystem, read_file, remove
from test_tools.disk_utils import Filesystem
from test_tools.fio.fio import Fio from test_tools.fio.fio import Fio
from test_tools.fio.fio_param import ReadWrite, IoEngine from test_tools.fio.fio_param import ReadWrite, IoEngine
from test_utils.size import Size, Unit from type_def.size import Size, Unit
from tests.volumes.common import lvm_filters from tests.volumes.common import lvm_filters
mount_point = "/mnt/" mount_point = "/mnt/"
@ -62,7 +61,7 @@ def test_io_class_lvm_on_cas():
lvm.mount(mount_point) lvm.mount(mount_point)
with TestRun.step("Prepare and load IO class config."): with TestRun.step("Prepare and load IO class config."):
io_classes = IoClass.csv_to_list(fs_utils.read_file("/etc/opencas/ioclass-config.csv")) io_classes = IoClass.csv_to_list(read_file("/etc/opencas/ioclass-config.csv"))
# remove two firs elements/lines: unclassified and metadata # remove two firs elements/lines: unclassified and metadata
io_classes.pop(1) io_classes.pop(1)
io_classes.pop(0) io_classes.pop(0)
@ -123,7 +122,7 @@ def test_io_class_lvm_on_cas():
else: else:
file_size = Size(1100, Unit.MebiByte) file_size = Size(1100, Unit.MebiByte)
fs_utils.remove(io_target) remove(io_target)
with TestRun.step("Remove LVMs."): with TestRun.step("Remove LVMs."):
TestRun.executor.run(f"umount {mount_point}") TestRun.executor.run(f"umount {mount_point}")

View File

@ -4,21 +4,20 @@
# SPDX-License-Identifier: BSD-3-Clause # SPDX-License-Identifier: BSD-3-Clause
# #
import pytest
from collections import namedtuple from collections import namedtuple
from math import isclose from math import isclose
import pytest
from api.cas import ioclass_config, casadm from api.cas import ioclass_config, casadm
from api.cas.cache_config import CacheMode, CacheLineSize from api.cas.cache_config import CacheMode, CacheLineSize
from api.cas.ioclass_config import IoClass, default_config_file_path from api.cas.ioclass_config import IoClass, default_config_file_path
from api.cas.statistics import IoClassUsageStats
from core.test_run import TestRun from core.test_run import TestRun
from storage_devices.disk import DiskType, DiskTypeSet, DiskTypeLowerThan from storage_devices.disk import DiskType, DiskTypeSet, DiskTypeLowerThan
from test_tools import fs_utils from test_tools.fs_tools import Filesystem, create_directory
from test_tools.disk_utils import Filesystem from test_tools.os_tools import sync
from test_utils.os_utils import sync, Udev from test_tools.udev import Udev
from test_utils.size import Unit, Size from type_def.size import Unit, Size
from tests.io_class.io_class_common import ( from tests.io_class.io_class_common import (
prepare, prepare,
mountpoint, mountpoint,
@ -69,7 +68,7 @@ def test_io_class_occupancy_directory_write(io_size_multiplication, cache_mode):
] ]
for io_class in io_classes: for io_class in io_classes:
fs_utils.create_directory(io_class.dir_path, parents=True) create_directory(io_class.dir_path, parents=True)
with TestRun.step("Remove old ioclass config"): with TestRun.step("Remove old ioclass config"):
ioclass_config.remove_ioclass_config() ioclass_config.remove_ioclass_config()
@ -199,7 +198,7 @@ def test_io_class_occupancy_directory_read(io_size_multiplication):
] ]
for io_class in io_classes: for io_class in io_classes:
fs_utils.create_directory(io_class.dir_path, parents=True) create_directory(io_class.dir_path, parents=True)
with TestRun.step( with TestRun.step(
f"In each directory create file with size of {io_size_multiplication} " f"In each directory create file with size of {io_size_multiplication} "
@ -330,7 +329,7 @@ def test_ioclass_occupancy_sum_cache():
] ]
for io_class in io_classes: for io_class in io_classes:
fs_utils.create_directory(io_class.dir_path, parents=True) create_directory(io_class.dir_path, parents=True)
with TestRun.step("Remove old ioclass config"): with TestRun.step("Remove old ioclass config"):
ioclass_config.remove_ioclass_config() ioclass_config.remove_ioclass_config()

View File

@ -1,21 +1,22 @@
# #
# Copyright(c) 2020-2022 Intel Corporation # Copyright(c) 2020-2022 Intel Corporation
# Copyright(c) 2024 Huawei Technologies Co., Ltd.
# SPDX-License-Identifier: BSD-3-Clause # SPDX-License-Identifier: BSD-3-Clause
# #
import pytest
from collections import namedtuple from collections import namedtuple
from math import isclose from math import isclose
import pytest
from api.cas import ioclass_config, casadm from api.cas import ioclass_config, casadm
from api.cas.cache_config import CacheMode, CacheLineSize from api.cas.cache_config import CacheMode, CacheLineSize
from api.cas.ioclass_config import IoClass, default_config_file_path from api.cas.ioclass_config import IoClass, default_config_file_path
from storage_devices.device import Device from storage_devices.device import Device
from storage_devices.disk import DiskType, DiskTypeSet, DiskTypeLowerThan from storage_devices.disk import DiskType, DiskTypeSet, DiskTypeLowerThan
from test_tools import fs_utils from test_tools.fs_tools import Filesystem, create_directory
from test_tools.disk_utils import Filesystem from test_tools.os_tools import sync
from test_utils.os_utils import sync, Udev from test_tools.udev import Udev
from tests.io_class.io_class_common import ( from tests.io_class.io_class_common import (
prepare, prepare,
mountpoint, mountpoint,
@ -65,7 +66,7 @@ def test_ioclass_occupancy_load():
] ]
for io_class in io_classes: for io_class in io_classes:
fs_utils.create_directory(io_class.dir_path, parents=True) create_directory(io_class.dir_path, parents=True)
with TestRun.step("Remove old ioclass config"): with TestRun.step("Remove old ioclass config"):
ioclass_config.remove_ioclass_config() ioclass_config.remove_ioclass_config()

View File

@ -1,22 +1,23 @@
# #
# Copyright(c) 2020-2022 Intel Corporation # Copyright(c) 2020-2022 Intel Corporation
# Copyright(c) 2024 Huawei Technologies Co., Ltd.
# SPDX-License-Identifier: BSD-3-Clause # SPDX-License-Identifier: BSD-3-Clause
# #
import pytest
from collections import namedtuple from collections import namedtuple
from math import isclose from math import isclose
import pytest
from api.cas import ioclass_config, casadm from api.cas import ioclass_config, casadm
from api.cas.cache_config import CacheMode, CacheLineSize from api.cas.cache_config import CacheMode, CacheLineSize
from api.cas.ioclass_config import IoClass, default_config_file_path from api.cas.ioclass_config import IoClass, default_config_file_path
from core.test_run_utils import TestRun from core.test_run_utils import TestRun
from storage_devices.disk import DiskType, DiskTypeSet, DiskTypeLowerThan from storage_devices.disk import DiskType, DiskTypeSet, DiskTypeLowerThan
from test_tools import fs_utils from test_tools.fs_tools import Filesystem, create_directory, move
from test_tools.disk_utils import Filesystem from test_tools.os_tools import sync
from test_utils.os_utils import sync, Udev from test_tools.udev import Udev
from test_utils.size import Unit from type_def.size import Unit
from tests.io_class.io_class_common import ( from tests.io_class.io_class_common import (
prepare, prepare,
mountpoint, mountpoint,
@ -67,7 +68,7 @@ def test_ioclass_repart(io_class_size_multiplication):
] ]
for io_class in io_classes: for io_class in io_classes:
fs_utils.create_directory(io_class.dir_path, parents=True) create_directory(io_class.dir_path, parents=True)
with TestRun.step("Remove old io class config"): with TestRun.step("Remove old io class config"):
ioclass_config.remove_ioclass_config() ioclass_config.remove_ioclass_config()
@ -123,7 +124,7 @@ def test_ioclass_repart(io_class_size_multiplication):
with TestRun.step("Force repart - move files to created directories and read theirs contents"): with TestRun.step("Force repart - move files to created directories and read theirs contents"):
for i, io_class in enumerate(io_classes): for i, io_class in enumerate(io_classes):
fs_utils.move(source=f"{mountpoint}/{i}", destination=io_class.dir_path) move(source=f"{mountpoint}/{i}", destination=io_class.dir_path)
run_io_dir_read(f"{io_class.dir_path}/{i}") run_io_dir_read(f"{io_class.dir_path}/{i}")
with TestRun.step("Check if each ioclass reached it's occupancy limit"): with TestRun.step("Check if each ioclass reached it's occupancy limit"):

View File

@ -1,9 +1,11 @@
# #
# Copyright(c) 2020-2022 Intel Corporation # Copyright(c) 2020-2022 Intel Corporation
# Copyright(c) 2024 Huawei Technologies Co., Ltd.
# SPDX-License-Identifier: BSD-3-Clause # SPDX-License-Identifier: BSD-3-Clause
# #
import pytest import pytest
from recordclass import recordclass from recordclass import recordclass
from api.cas import ioclass_config, casadm from api.cas import ioclass_config, casadm
@ -11,10 +13,10 @@ from api.cas.cache_config import CacheMode, CacheLineSize
from api.cas.ioclass_config import IoClass, default_config_file_path from api.cas.ioclass_config import IoClass, default_config_file_path
from core.test_run import TestRun from core.test_run import TestRun
from storage_devices.disk import DiskType, DiskTypeSet, DiskTypeLowerThan from storage_devices.disk import DiskType, DiskTypeSet, DiskTypeLowerThan
from test_tools import fs_utils from test_tools.fs_tools import Filesystem, create_directory
from test_tools.disk_utils import Filesystem from test_tools.os_tools import sync
from test_utils.os_utils import sync, Udev from test_tools.udev import Udev
from test_utils.size import Unit from type_def.size import Unit
from tests.io_class.io_class_common import ( from tests.io_class.io_class_common import (
mountpoint, mountpoint,
prepare, prepare,
@ -54,7 +56,7 @@ def test_ioclass_resize(cache_line_size, new_occupancy):
IoclassConfig = recordclass("IoclassConfig", "id eviction_prio max_occupancy dir_path") IoclassConfig = recordclass("IoclassConfig", "id eviction_prio max_occupancy dir_path")
io_class = IoclassConfig(2, 3, 0.10, f"{mountpoint}/A") io_class = IoclassConfig(2, 3, 0.10, f"{mountpoint}/A")
fs_utils.create_directory(io_class.dir_path, parents=True) create_directory(io_class.dir_path, parents=True)
with TestRun.step("Remove old ioclass config"): with TestRun.step("Remove old ioclass config"):
ioclass_config.remove_ioclass_config() ioclass_config.remove_ioclass_config()

View File

@ -1,19 +1,19 @@
# #
# Copyright(c) 2022 Intel Corporation # Copyright(c) 2022 Intel Corporation
# Copyright(c) 2024 Huawei Technologies Co., Ltd.
# SPDX-License-Identifier: BSD-3-Clause # SPDX-License-Identifier: BSD-3-Clause
# #
import pytest import pytest
from collections import namedtuple from collections import namedtuple
from math import isclose from math import isclose
from storage_devices.disk import DiskType, DiskTypeSet, DiskTypeLowerThan from storage_devices.disk import DiskType, DiskTypeSet, DiskTypeLowerThan
from api.cas.ioclass_config import IoClass, default_config_file_path from api.cas.ioclass_config import IoClass, default_config_file_path
from test_tools import fs_utils from test_tools.fs_tools import Filesystem, create_directory
from test_tools.disk_utils import Filesystem
from core.test_run import TestRun from core.test_run import TestRun
from test_utils.size import Size, Unit from type_def.size import Size, Unit
from .io_class_common import ( from .io_class_common import (
prepare, prepare,
mountpoint, mountpoint,
@ -58,7 +58,7 @@ def test_io_class_pinning_eviction():
] ]
for io_class in io_classes: for io_class in io_classes:
fs_utils.create_directory(io_class.dir_path, parents=True) create_directory(io_class.dir_path, parents=True)
with TestRun.step("Remove old config"): with TestRun.step("Remove old config"):
ioclass_config.remove_ioclass_config() ioclass_config.remove_ioclass_config()
@ -152,7 +152,7 @@ def test_pinned_ioclasses_eviction():
] ]
for io_class in io_classes: for io_class in io_classes:
fs_utils.create_directory(io_class.dir_path, parents=True) create_directory(io_class.dir_path, parents=True)
with TestRun.step("Remove old config"): with TestRun.step("Remove old config"):
ioclass_config.remove_ioclass_config() ioclass_config.remove_ioclass_config()

View File

@ -1,5 +1,6 @@
# #
# Copyright(c) 2022 Intel Corporation # Copyright(c) 2022 Intel Corporation
# Copyright(c) 2024 Huawei Technologies Co., Ltd.
# SPDX-License-Identifier: BSD-3-Clause # SPDX-License-Identifier: BSD-3-Clause
# #
@ -9,7 +10,7 @@ from api.cas import casadm, ioclass_config
from api.cas.ioclass_config import IoClass from api.cas.ioclass_config import IoClass
from core.test_run_utils import TestRun from core.test_run_utils import TestRun
from storage_devices.disk import DiskTypeSet, DiskType, DiskTypeLowerThan from storage_devices.disk import DiskTypeSet, DiskType, DiskTypeLowerThan
from test_utils.size import Size, Unit from type_def.size import Size, Unit
from tests.io_class.io_class_common import ( from tests.io_class.io_class_common import (
compare_io_classes_list, compare_io_classes_list,
generate_and_load_random_io_class_config, generate_and_load_random_io_class_config,

View File

@ -1,5 +1,6 @@
# #
# Copyright(c) 2022 Intel Corporation # Copyright(c) 2022 Intel Corporation
# Copyright(c) 2024 Huawei Technologies Co., Ltd.
# SPDX-License-Identifier: BSD-3-Clause # SPDX-License-Identifier: BSD-3-Clause
# #
@ -9,9 +10,9 @@ from api.cas import ioclass_config, cli_messages
from api.cas.ioclass_config import IoClass from api.cas.ioclass_config import IoClass
from core.test_run import TestRun from core.test_run import TestRun
from storage_devices.disk import DiskType, DiskTypeSet, DiskTypeLowerThan from storage_devices.disk import DiskType, DiskTypeSet, DiskTypeLowerThan
from test_tools import fs_utils from connection.utils.output import CmdException
from test_utils.output import CmdException from test_tools.fs_tools import read_file, write_file
from test_utils.size import Unit, Size from type_def.size import Unit, Size
from tests.io_class.io_class_common import prepare, ioclass_config_path from tests.io_class.io_class_common import prepare, ioclass_config_path
headerless_configuration = "1,unclassified,22,1.00" headerless_configuration = "1,unclassified,22,1.00"
@ -86,7 +87,7 @@ def test_io_class_prevent_wrong_configuration():
f"{IoClass.default_header()}\n{loaded_io_classes_str}" f"{IoClass.default_header()}\n{loaded_io_classes_str}"
) )
config_io_classes = IoClass.csv_to_list(fs_utils.read_file(ioclass_config_path)) config_io_classes = IoClass.csv_to_list(read_file(ioclass_config_path))
if not IoClass.compare_ioclass_lists(config_io_classes, loaded_io_classes): if not IoClass.compare_ioclass_lists(config_io_classes, loaded_io_classes):
TestRun.fail("Default IO class configuration not loaded correctly.") TestRun.fail("Default IO class configuration not loaded correctly.")
@ -98,7 +99,7 @@ def test_io_class_prevent_wrong_configuration():
f"Preparing headerless configuration file with following content:\n" f"Preparing headerless configuration file with following content:\n"
f"{headerless_configuration}" f"{headerless_configuration}"
) )
fs_utils.write_file(ioclass_config_path, headerless_configuration) write_file(ioclass_config_path, headerless_configuration)
try_load_malformed_config( try_load_malformed_config(
cache, cache,
config_io_classes, config_io_classes,
@ -114,7 +115,7 @@ def test_io_class_prevent_wrong_configuration():
TestRun.LOGGER.info( TestRun.LOGGER.info(
f"Testing following header with default IO class:\n" f"{config_content}" f"Testing following header with default IO class:\n" f"{config_content}"
) )
fs_utils.write_file(ioclass_config_path, config_content) write_file(ioclass_config_path, config_content)
try_load_malformed_config(cache, config_io_classes, expected_err_msg=err_message) try_load_malformed_config(cache, config_io_classes, expected_err_msg=err_message)
with TestRun.step( with TestRun.step(
@ -123,7 +124,7 @@ def test_io_class_prevent_wrong_configuration():
): ):
config_content = f"{IoClass.default_header()}\n{double_io_class_configuration}" config_content = f"{IoClass.default_header()}\n{double_io_class_configuration}"
TestRun.LOGGER.info(f"Testing following configuration file:\n{config_content}") TestRun.LOGGER.info(f"Testing following configuration file:\n{config_content}")
fs_utils.write_file(ioclass_config_path, config_content) write_file(ioclass_config_path, config_content)
try_load_malformed_config( try_load_malformed_config(
cache, cache,
config_io_classes, config_io_classes,
@ -139,7 +140,7 @@ def test_io_class_prevent_wrong_configuration():
TestRun.LOGGER.info( TestRun.LOGGER.info(
f"Testing following header with default IO class:\n{config_content}" f"Testing following header with default IO class:\n{config_content}"
) )
fs_utils.write_file(ioclass_config_path, config_content) write_file(ioclass_config_path, config_content)
try_load_malformed_config(cache, config_io_classes, expected_err_msg=err_message) try_load_malformed_config(cache, config_io_classes, expected_err_msg=err_message)

View File

@ -1,18 +1,19 @@
# #
# Copyright(c) 2019-2022 Intel Corporation # Copyright(c) 2019-2022 Intel Corporation
# Copyright(c) 2024 Huawei Technologies Co., Ltd.
# SPDX-License-Identifier: BSD-3-Clause # SPDX-License-Identifier: BSD-3-Clause
# #
import time import time
import pytest import pytest
from api.cas import ioclass_config, casadm from api.cas import ioclass_config, casadm
from core.test_run import TestRun from core.test_run import TestRun
from storage_devices.disk import DiskType, DiskTypeSet, DiskTypeLowerThan from storage_devices.disk import DiskType, DiskTypeSet, DiskTypeLowerThan
from test_tools.dd import Dd from test_tools.dd import Dd
from test_utils.os_utils import sync, Udev from test_tools.os_tools import sync
from test_utils.size import Size, Unit from test_tools.udev import Udev
from type_def.size import Size, Unit
from tests.io_class.io_class_common import prepare, ioclass_config_path from tests.io_class.io_class_common import prepare, ioclass_config_path

View File

@ -4,19 +4,18 @@
# SPDX-License-Identifier: BSD-3-Clause # SPDX-License-Identifier: BSD-3-Clause
# #
from collections import namedtuple
import pytest import pytest
from collections import namedtuple
from api.cas import ioclass_config, casadm from api.cas import ioclass_config, casadm
from api.cas.statistics import IoClassUsageStats
from core.test_run import TestRun from core.test_run import TestRun
from storage_devices.disk import DiskType, DiskTypeSet, DiskTypeLowerThan from storage_devices.disk import DiskType, DiskTypeSet, DiskTypeLowerThan
from test_tools import fs_utils
from test_tools.dd import Dd from test_tools.dd import Dd
from test_tools.disk_utils import Filesystem from test_tools.fs_tools import Filesystem, create_directory
from test_utils.os_utils import drop_caches, DropCachesMode, sync, Udev from test_tools.os_tools import drop_caches, DropCachesMode, sync
from test_utils.size import Unit, Size from test_tools.udev import Udev
from type_def.size import Unit, Size
from tests.io_class.io_class_common import prepare, mountpoint, ioclass_config_path from tests.io_class.io_class_common import prepare, mountpoint, ioclass_config_path
@ -56,7 +55,7 @@ def test_ioclass_usage_sum():
] ]
for io_class in io_classes: for io_class in io_classes:
fs_utils.create_directory(io_class.dir_path, parents=True) create_directory(io_class.dir_path, parents=True)
with TestRun.step("Add io classes for all dirs"): with TestRun.step("Add io classes for all dirs"):
ioclass_config.remove_ioclass_config() ioclass_config.remove_ioclass_config()

View File

@ -1,25 +1,28 @@
# #
# Copyright(c) 2022 Intel Corporation # Copyright(c) 2022 Intel Corporation
# Copyright(c) 2024 Huawei Technologies Co., Ltd.
# SPDX-License-Identifier: BSD-3-Clause # SPDX-License-Identifier: BSD-3-Clause
# #
import os import os
import pytest import pytest
from datetime import timedelta from datetime import timedelta
from api.cas import ioclass_config, casadm_parser
from api.cas.cache_config import CacheMode from api.cas.cache_config import CacheMode
from api.cas.casadm_params import StatsFilter from api.cas.casadm_params import StatsFilter
from api.cas.casadm_parser import get_caches, get_cores
from api.cas.init_config import InitConfig from api.cas.init_config import InitConfig
from api.cas.ioclass_config import IoClass from api.cas.ioclass_config import IoClass, remove_ioclass_config, create_ioclass_config, \
add_ioclass
from core.test_run_utils import TestRun from core.test_run_utils import TestRun
from storage_devices.disk import DiskTypeSet, DiskType, DiskTypeLowerThan from storage_devices.disk import DiskTypeSet, DiskType, DiskTypeLowerThan
from test_tools import fs_utils from test_tools.fs_tools import Filesystem, copy, read_file
from test_tools.disk_utils import Filesystem
from test_tools.fio.fio import Fio from test_tools.fio.fio import Fio
from test_tools.fio.fio_param import IoEngine, ReadWrite from test_tools.fio.fio_param import IoEngine, ReadWrite
from test_utils import os_utils from test_tools.os_tools import sync, drop_caches
from test_utils.os_utils import Runlevel from test_tools.runlevel import Runlevel, change_runlevel
from test_utils.size import Size, Unit from type_def.size import Size, Unit
from tests.io_class.io_class_common import ( from tests.io_class.io_class_common import (
prepare, prepare,
mountpoint, mountpoint,
@ -73,21 +76,21 @@ def test_io_class_service_load(runlevel):
InitConfig.create_init_config_from_running_configuration( InitConfig.create_init_config_from_running_configuration(
cache_extra_flags=f"ioclass_file={ioclass_config_path}" cache_extra_flags=f"ioclass_file={ioclass_config_path}"
) )
os_utils.sync() sync()
with TestRun.step(f"Reboot system to runlevel {runlevel}."): with TestRun.step(f"Reboot system to runlevel {runlevel}."):
os_utils.change_runlevel(runlevel) change_runlevel(runlevel)
TestRun.executor.reboot() TestRun.executor.reboot()
with TestRun.step( with TestRun.step(
"Check if CAS device loads properly - " "Check if CAS device loads properly - "
"IO class configuration and statistics shall not change" "IO class configuration and statistics shall not change"
): ):
caches = casadm_parser.get_caches() caches = get_caches()
if len(caches) != 1: if len(caches) != 1:
TestRun.fail("Cache did not start at boot time.") TestRun.fail("Cache did not start at boot time.")
cache = caches[0] cache = caches[0]
cores = casadm_parser.get_cores(cache.cache_id) cores = get_cores(cache.cache_id)
if len(cores) != 1: if len(cores) != 1:
TestRun.fail(f"Actual number of cores: {len(cores)}\nExpected number of cores: 1") TestRun.fail(f"Actual number of cores: {len(cores)}\nExpected number of cores: 1")
core = cores[0] core = cores[0]
@ -152,22 +155,22 @@ def run_io():
) )
fio.run() fio.run()
os_utils.sync() sync()
os_utils.drop_caches() drop_caches()
def prepare_and_load_io_class_config(cache, metadata_not_cached=False): def prepare_and_load_io_class_config(cache, metadata_not_cached=False):
ioclass_config.remove_ioclass_config() remove_ioclass_config()
if metadata_not_cached: if metadata_not_cached:
ioclass_config.create_ioclass_config( create_ioclass_config(
add_default_rule=True, ioclass_config_path=ioclass_config_path add_default_rule=True, ioclass_config_path=ioclass_config_path
) )
ioclass_config.add_ioclass(1, "metadata&done", 1, "0.00", ioclass_config_path) add_ioclass(1, "metadata&done", 1, "0.00", ioclass_config_path)
else: else:
fs_utils.copy(template_config_path, ioclass_config_path) copy(template_config_path, ioclass_config_path)
config_io_classes = IoClass.csv_to_list(fs_utils.read_file(ioclass_config_path)) config_io_classes = IoClass.csv_to_list(read_file(ioclass_config_path))
cache.load_io_class(ioclass_config_path) cache.load_io_class(ioclass_config_path)
output_io_classes = cache.list_io_classes() output_io_classes = cache.list_io_classes()
if not IoClass.compare_ioclass_lists(config_io_classes, output_io_classes): if not IoClass.compare_ioclass_lists(config_io_classes, output_io_classes):

View File

@ -13,12 +13,11 @@ from api.cas.cache_config import CacheMode, CleaningPolicy, SeqCutOffPolicy
from api.cas.ioclass_config import IoClass from api.cas.ioclass_config import IoClass
from core.test_run_utils import TestRun from core.test_run_utils import TestRun
from storage_devices.disk import DiskTypeSet, DiskType, DiskTypeLowerThan from storage_devices.disk import DiskTypeSet, DiskType, DiskTypeLowerThan
from test_tools import fs_utils from test_tools.fs_tools import Filesystem, remove, read_file
from test_tools.disk_utils import Filesystem
from test_tools.fio.fio import Fio from test_tools.fio.fio import Fio
from test_tools.fio.fio_param import IoEngine, ReadWrite from test_tools.fio.fio_param import IoEngine, ReadWrite
from test_utils.os_utils import sync, drop_caches from test_tools.os_tools import sync, drop_caches
from test_utils.size import Size, Unit from type_def.size import Size, Unit
from tests.io_class.io_class_common import template_config_path from tests.io_class.io_class_common import template_config_path
@ -83,7 +82,7 @@ def test_io_class_stats_file_size_core_fs(cache_mode: CacheMode, filesystem: Fil
issued_reqs_no = \ issued_reqs_no = \
result[0].write_requests_number() + result[0].read_requests_number() result[0].write_requests_number() + result[0].read_requests_number()
check_statistics(cache, core, io_classes, io_class, issued_reqs_no) check_statistics(cache, core, io_classes, io_class, issued_reqs_no)
fs_utils.remove(f"{core.mount_point}/*", force=True, recursive=True) remove(f"{core.mount_point}/*", force=True, recursive=True)
size_min = size + Size(512, Unit.Byte) size_min = size + Size(512, Unit.Byte)
@ -140,7 +139,7 @@ def test_io_class_stats_file_size_core_direct(cache_mode: CacheMode):
issued_reqs_no = \ issued_reqs_no = \
result[0].write_requests_number() + result[0].read_requests_number() result[0].write_requests_number() + result[0].read_requests_number()
check_statistics(cache, core, io_classes, io_class_direct, issued_reqs_no) check_statistics(cache, core, io_classes, io_class_direct, issued_reqs_no)
fs_utils.remove(f"{core.path}/*", force=True, recursive=True) remove(f"{core.path}/*", force=True, recursive=True)
size_min = size + Size(512, Unit.Byte) size_min = size + Size(512, Unit.Byte)
@ -191,7 +190,7 @@ def check_statistics(cache, core, io_classes, tested_io_class, issued_reqs_no):
def prepare_io_classes(cache): def prepare_io_classes(cache):
template_io_classes = IoClass.csv_to_list(fs_utils.read_file(template_config_path)) template_io_classes = IoClass.csv_to_list(read_file(template_config_path))
test_io_classes = [] test_io_classes = []
for io_class in template_io_classes: for io_class in template_io_classes:

View File

@ -1,5 +1,6 @@
# #
# Copyright(c) 2019-2022 Intel Corporation # Copyright(c) 2019-2022 Intel Corporation
# Copyright(c) 2024 Huawei Technologies Co., Ltd.
# SPDX-License-Identifier: BSD-3-Clause # SPDX-License-Identifier: BSD-3-Clause
# #
@ -10,8 +11,9 @@ from core.test_run import TestRun
from storage_devices.disk import DiskType, DiskTypeSet, DiskTypeLowerThan from storage_devices.disk import DiskType, DiskTypeSet, DiskTypeLowerThan
from test_tools.fio.fio import Fio from test_tools.fio.fio import Fio
from test_tools.fio.fio_param import ReadWrite, IoEngine from test_tools.fio.fio_param import ReadWrite, IoEngine
from test_utils.os_utils import sync, Udev, drop_caches from test_tools.os_tools import sync, drop_caches
from test_utils.size import Unit, Size from test_tools.udev import Udev
from type_def.size import Unit, Size
from tests.io_class.io_class_common import prepare from tests.io_class.io_class_common import prepare

View File

@ -1,26 +1,28 @@
# #
# Copyright(c) 2019-2022 Intel Corporation # Copyright(c) 2019-2022 Intel Corporation
# Copyright(c) 2024 Huawei Technologies Co., Ltd.
# SPDX-License-Identifier: BSD-3-Clause # SPDX-License-Identifier: BSD-3-Clause
# #
import random import random
import time import time
from itertools import permutations
import pytest import pytest
from itertools import permutations
from api.cas import ioclass_config, casadm from api.cas import ioclass_config, casadm
from api.cas.ioclass_config import IoClass from api.cas.ioclass_config import IoClass
from core.test_run import TestRun from core.test_run import TestRun
from storage_devices.disk import DiskType, DiskTypeSet, DiskTypeLowerThan from storage_devices.disk import DiskType, DiskTypeSet, DiskTypeLowerThan
from test_tools import fs_utils
from test_tools.dd import Dd from test_tools.dd import Dd
from test_tools.disk_utils import Filesystem from test_tools.fs_tools import Filesystem, create_directory, remove, \
replace_first_pattern_occurrence
from test_tools.fio.fio import Fio from test_tools.fio.fio import Fio
from test_tools.fio.fio_param import ReadWrite, IoEngine from test_tools.fio.fio_param import ReadWrite, IoEngine
from test_utils.filesystem.file import File from test_utils.filesystem.file import File
from test_utils.os_utils import sync, Udev from test_tools.os_tools import sync
from test_utils.size import Size, Unit from test_tools.udev import Udev
from type_def.size import Size, Unit
from tests.io_class.io_class_common import prepare, ioclass_config_path, mountpoint from tests.io_class.io_class_common import prepare, ioclass_config_path, mountpoint
@ -371,7 +373,7 @@ def test_ioclass_metadata(filesystem):
with TestRun.step(f"Create directory {test_dir_path}."): with TestRun.step(f"Create directory {test_dir_path}."):
requests_to_metadata_before = requests_to_metadata_after requests_to_metadata_before = requests_to_metadata_after
fs_utils.create_directory(path=test_dir_path) create_directory(path=test_dir_path)
TestRun.LOGGER.info(f"Moving test files into {test_dir_path}") TestRun.LOGGER.info(f"Moving test files into {test_dir_path}")
for file in files: for file in files:
@ -386,7 +388,7 @@ def test_ioclass_metadata(filesystem):
TestRun.fail("No requests to metadata while moving files!") TestRun.fail("No requests to metadata while moving files!")
with TestRun.step(f"Remove {test_dir_path}."): with TestRun.step(f"Remove {test_dir_path}."):
fs_utils.remove(path=test_dir_path, force=True, recursive=True) remove(path=test_dir_path, force=True, recursive=True)
with TestRun.step("Check requests to metadata."): with TestRun.step("Check requests to metadata."):
requests_to_metadata_after = cache.get_io_class_statistics( requests_to_metadata_after = cache.get_io_class_statistics(
@ -475,7 +477,7 @@ def test_ioclass_id_as_condition():
): ):
core.create_filesystem(filesystem) core.create_filesystem(filesystem)
core.mount(mountpoint) core.mount(mountpoint)
fs_utils.create_directory(base_dir_path) create_directory(base_dir_path)
sync() sync()
# CAS needs some time to resolve directory to inode # CAS needs some time to resolve directory to inode
time.sleep(ioclass_config.MAX_CLASSIFICATION_DELAY.seconds) time.sleep(ioclass_config.MAX_CLASSIFICATION_DELAY.seconds)
@ -617,7 +619,7 @@ def test_ioclass_conditions_or():
core.create_filesystem(filesystem) core.create_filesystem(filesystem)
core.mount(mountpoint) core.mount(mountpoint)
for i in range(1, 6): for i in range(1, 6):
fs_utils.create_directory(f"{mountpoint}/dir{i}") create_directory(f"{mountpoint}/dir{i}")
sync() sync()
with TestRun.step("Perform IO fulfilling each condition and check if occupancy raises."): with TestRun.step("Perform IO fulfilling each condition and check if occupancy raises."):
@ -744,7 +746,7 @@ def test_ioclass_effective_ioclass():
): ):
core.create_filesystem(filesystem) core.create_filesystem(filesystem)
core.mount(mountpoint) core.mount(mountpoint)
fs_utils.create_directory(test_dir) create_directory(test_dir)
sync() sync()
for i, permutation in TestRun.iteration(enumerate(permutations(range(1, 5)), start=1)): for i, permutation in TestRun.iteration(enumerate(permutations(range(1, 5)), start=1)):
@ -830,7 +832,7 @@ def add_done_to_second_non_exclusive_condition(rules, permutation, cache):
if non_exclusive_conditions == 2: if non_exclusive_conditions == 2:
break break
second_class_id += 1 second_class_id += 1
fs_utils.replace_first_pattern_occurrence(ioclass_config_path, rules[idx], f"{rules[idx]}&done") replace_first_pattern_occurrence(ioclass_config_path, rules[idx], f"{rules[idx]}&done")
sync() sync()
casadm.load_io_classes(cache_id=cache.cache_id, file=ioclass_config_path) casadm.load_io_classes(cache_id=cache.cache_id, file=ioclass_config_path)
return second_class_id return second_class_id

View File

@ -6,11 +6,11 @@
import random import random
import time import time
import pytest
from collections import namedtuple from collections import namedtuple
from datetime import timedelta from datetime import timedelta
import pytest
from api.cas import casadm from api.cas import casadm
from api.cas.cache_config import ( from api.cas.cache_config import (
CacheMode, CacheMode,
@ -24,9 +24,9 @@ from storage_devices.disk import DiskTypeSet, DiskTypeLowerThan, DiskType
from test_tools.blktrace import BlkTrace, BlkTraceMask, ActionKind, RwbsKind from test_tools.blktrace import BlkTrace, BlkTraceMask, ActionKind, RwbsKind
from test_tools.fio.fio import Fio from test_tools.fio.fio import Fio
from test_tools.fio.fio_param import IoEngine, ReadWrite from test_tools.fio.fio_param import IoEngine, ReadWrite
from test_utils.os_utils import kill_all_io from test_tools.os_tools import kill_all_io
from test_utils.size import Size, Unit from type_def.size import Size, Unit
from test_utils.time import Time from type_def.time import Time
@pytest.mark.require_disk("cache", DiskTypeSet([DiskType.optane, DiskType.nand])) @pytest.mark.require_disk("cache", DiskTypeSet([DiskType.optane, DiskType.nand]))

Some files were not shown because too many files have changed in this diff Show More