tests: update tests
Signed-off-by: Kamil Gierszewski <kamil.gierszewski@huawei.com>
This commit is contained in:
170
test/functional/tests/basic/test_basic.py
Normal file
170
test/functional/tests/basic/test_basic.py
Normal file
@@ -0,0 +1,170 @@
|
||||
#
|
||||
# Copyright(c) 2022 Intel Corporation
|
||||
# Copyright(c) 2024 Huawei Technologies Co., Ltd.
|
||||
# SPDX-License-Identifier: BSD-3-Clause
|
||||
#
|
||||
|
||||
import pytest
|
||||
|
||||
from api.cas.cache_config import CacheMode, CacheLineSize
|
||||
from api.cas.casadm_params import OutputFormat
|
||||
from api.cas.cli import start_cmd
|
||||
from core.test_run import TestRun
|
||||
from api.cas import casadm
|
||||
from api.cas.cli_messages import (
|
||||
check_stderr_msg,
|
||||
start_cache_on_already_used_dev,
|
||||
start_cache_with_existing_id,
|
||||
)
|
||||
from storage_devices.disk import DiskType, DiskTypeSet, DiskTypeLowerThan
|
||||
from test_tools import fs_utils
|
||||
from test_tools.dd import Dd
|
||||
from test_tools.disk_utils import Filesystem
|
||||
from test_utils.filesystem.file import File
|
||||
from test_utils.output import CmdException
|
||||
from test_utils.size import Size, Unit
|
||||
|
||||
version_file_path = r"/var/lib/opencas/cas_version"
|
||||
mountpoint = "/mnt"
|
||||
|
||||
|
||||
@pytest.mark.CI
|
||||
def test_cas_version():
|
||||
"""
|
||||
title: Test for CAS version
|
||||
description:
|
||||
Check if CAS print version cmd returns consistent version with version file
|
||||
pass criteria:
|
||||
- casadm version command succeeds
|
||||
- versions from cmd and file in /var/lib/opencas/cas_version are consistent
|
||||
"""
|
||||
|
||||
with TestRun.step("Read cas version using casadm cmd"):
|
||||
output = casadm.print_version(output_format=OutputFormat.csv)
|
||||
cmd_version = output.stdout
|
||||
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"):
|
||||
file_read = fs_utils.read_file(version_file_path).split("\n")
|
||||
file_cas_version = next(
|
||||
(line.split("=")[1] for line in file_read if "CAS_VERSION=" in line)
|
||||
)
|
||||
|
||||
with TestRun.step("Compare cmd and file versions"):
|
||||
if not all(file_cas_version == cmd_cas_version for cmd_cas_version in cmd_cas_versions):
|
||||
TestRun.LOGGER.error(f"Cmd and file versions doesn`t match")
|
||||
|
||||
|
||||
@pytest.mark.CI
|
||||
@pytest.mark.require_disk("cache", DiskTypeSet([DiskType.nand, DiskType.optane]))
|
||||
def test_negative_start_cache():
|
||||
"""
|
||||
title: Test start cache negative on cache device
|
||||
description:
|
||||
Check for negative cache start scenarios
|
||||
pass criteria:
|
||||
- Cache start succeeds
|
||||
- Fails to start cache on the same device with another id
|
||||
- Fails to start cache on another partition with the same id
|
||||
"""
|
||||
|
||||
with TestRun.step("Prepare cache device"):
|
||||
cache_dev = TestRun.disks["cache"]
|
||||
|
||||
cache_dev.create_partitions([Size(2, Unit.GibiByte)] * 2)
|
||||
|
||||
cache_dev_1 = cache_dev.partitions[0]
|
||||
cache_dev_2 = cache_dev.partitions[1]
|
||||
|
||||
with TestRun.step("Start cache on cache device"):
|
||||
casadm.start_cache(cache_dev=cache_dev_1, force=True)
|
||||
|
||||
with TestRun.step("Start cache on the same device but with another ID"):
|
||||
try:
|
||||
output = TestRun.executor.run(
|
||||
start_cmd(
|
||||
cache_dev=cache_dev_1.path,
|
||||
cache_id="2",
|
||||
force=True,
|
||||
)
|
||||
)
|
||||
TestRun.fail("Two caches started on same device")
|
||||
except CmdException:
|
||||
if not check_stderr_msg(output, start_cache_on_already_used_dev):
|
||||
TestRun.fail(f"Received unexpected error message: {output.stderr}")
|
||||
|
||||
with TestRun.step("Start cache with the same ID on another cache device"):
|
||||
try:
|
||||
output = TestRun.executor.run(
|
||||
start_cmd(
|
||||
cache_dev=cache_dev_2.path,
|
||||
cache_id="1",
|
||||
force=True,
|
||||
)
|
||||
)
|
||||
TestRun.fail("Two caches started with same ID")
|
||||
except CmdException:
|
||||
if not check_stderr_msg(output, start_cache_with_existing_id):
|
||||
TestRun.fail(f"Received unexpected error message: {output.stderr}")
|
||||
|
||||
|
||||
@pytest.mark.CI
|
||||
@pytest.mark.parametrizex("filesystem", Filesystem)
|
||||
@pytest.mark.parametrizex("cache_mode", CacheMode)
|
||||
@pytest.mark.parametrizex("cache_line_size", CacheLineSize)
|
||||
@pytest.mark.require_disk("cache", DiskTypeSet([DiskType.optane, DiskType.nand]))
|
||||
@pytest.mark.require_disk("core", DiskTypeLowerThan("cache"))
|
||||
def test_data_integrity(filesystem, cache_mode, cache_line_size):
|
||||
"""
|
||||
title: Basic data integrity test
|
||||
description:
|
||||
Check basic data integrity after stopping the cache
|
||||
pass criteria:
|
||||
- System does not crash.
|
||||
- All operations complete successfully.
|
||||
- Data consistency is preserved.
|
||||
"""
|
||||
|
||||
with TestRun.step("Prepare cache and core devices"):
|
||||
cache_device = TestRun.disks["cache"]
|
||||
core_device = TestRun.disks["core"]
|
||||
|
||||
cache_device.create_partitions([Size(200, Unit.MebiByte)])
|
||||
core_device.create_partitions([Size(100, Unit.MebiByte)])
|
||||
|
||||
cache_part = cache_device.partitions[0]
|
||||
core_part = core_device.partitions[0]
|
||||
|
||||
with TestRun.step("Start cache and add core device"):
|
||||
cache = casadm.start_cache(
|
||||
cache_dev=cache_part, cache_mode=cache_mode, cache_line_size=cache_line_size, force=True
|
||||
)
|
||||
core = cache.add_core(core_dev=core_part)
|
||||
|
||||
with TestRun.step("Create filesystem on CAS device and mount it"):
|
||||
core.create_filesystem(filesystem)
|
||||
core.mount(mountpoint)
|
||||
|
||||
with TestRun.step("Create test file and calculate md5 checksum"):
|
||||
(
|
||||
Dd()
|
||||
.input("/dev/urandom")
|
||||
.output(f"{mountpoint}/test_file")
|
||||
.count(1)
|
||||
.block_size(Size(50, Unit.MebiByte))
|
||||
.run()
|
||||
)
|
||||
test_file = File(f"{mountpoint}/test_file")
|
||||
md5_before = test_file.md5sum()
|
||||
|
||||
with TestRun.step("Unmount core"):
|
||||
core.unmount()
|
||||
|
||||
with TestRun.step("Stop cache"):
|
||||
cache.stop()
|
||||
|
||||
with TestRun.step("Mount the core device and check for file"):
|
||||
core_part.mount(mountpoint)
|
||||
md5_after = test_file.md5sum()
|
||||
if md5_before != md5_after:
|
||||
TestRun.fail("md5 checksum mismatch!")
|
@@ -1,5 +1,6 @@
|
||||
#
|
||||
# Copyright(c) 2022 Intel Corporation
|
||||
# Copyright(c) 2024 Huawei Technologies Co., Ltd.
|
||||
# SPDX-License-Identifier: BSD-3-Clause
|
||||
#
|
||||
|
||||
@@ -16,21 +17,22 @@ from test_utils.size import Size, Unit
|
||||
@pytest.mark.require_disk("core", DiskTypeLowerThan("cache"))
|
||||
def test_start_cache_add_core():
|
||||
"""
|
||||
title: Basic test for starting cache and adding core.
|
||||
description: |
|
||||
Test for start cache and add core.
|
||||
pass_criteria:
|
||||
- Cache started successfully.
|
||||
- Core added successfully.
|
||||
title: Basic test for starting cache and adding core.
|
||||
description: |
|
||||
Test for start cache and add core.
|
||||
pass_criteria:
|
||||
- Cache started successfully.
|
||||
- Core added successfully.
|
||||
"""
|
||||
with TestRun.step("Prepare cache and core devices."):
|
||||
with TestRun.step("Prepare cache and core devices"):
|
||||
cache_dev = TestRun.disks["cache"]
|
||||
cache_dev.create_partitions([Size(500, Unit.MebiByte)])
|
||||
core_dev = TestRun.disks["core"]
|
||||
|
||||
cache_dev.create_partitions([Size(500, Unit.MebiByte)])
|
||||
core_dev.create_partitions([Size(2, Unit.GibiByte)])
|
||||
|
||||
with TestRun.step("Start cache."):
|
||||
with TestRun.step("Start cache"):
|
||||
cache = casadm.start_cache(cache_dev.partitions[0], force=True)
|
||||
|
||||
with TestRun.step("Add core."):
|
||||
core = cache.add_core(core_dev.partitions[0])
|
||||
with TestRun.step("Add core"):
|
||||
cache.add_core(core_dev.partitions[0])
|
Reference in New Issue
Block a user