-
Notifications
You must be signed in to change notification settings - Fork 82
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #1496 from Kamoppl/kamilg/update_tests
tests: update tests
- Loading branch information
Showing
23 changed files
with
2,153 additions
and
1,689 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,4 @@ | ||
# | ||
# Copyright(c) 2024 Huawei Technologies Co., Ltd. | ||
# SPDX-License-Identifier: BSD-3-Clause | ||
# |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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!") |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,4 @@ | ||
# | ||
# Copyright(c) 2024 Huawei Technologies Co., Ltd. | ||
# SPDX-License-Identifier: BSD-3-Clause | ||
# |
Oops, something went wrong.