Disk finder refactor
Signed-off-by: Katarzyna Treder <katarzyna.treder@h-partners.com>
This commit is contained in:
parent
7512420e2a
commit
6970a43107
@ -19,7 +19,7 @@ from core.pair_testing import generate_pair_testing_testcases, register_testcase
|
|||||||
from core.plugins import PluginManager
|
from core.plugins import PluginManager
|
||||||
from log.base_log import BaseLogResult
|
from log.base_log import BaseLogResult
|
||||||
from storage_devices.disk import Disk
|
from storage_devices.disk import Disk
|
||||||
from test_utils import disk_finder
|
from test_tools import disk_finder
|
||||||
from test_utils.dut import Dut
|
from test_utils.dut import Dut
|
||||||
|
|
||||||
TestRun = core.test_run.TestRun
|
TestRun = core.test_run.TestRun
|
||||||
|
@ -13,9 +13,9 @@ from enum import IntEnum
|
|||||||
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_tools import disk_utils, fs_utils, nvme_cli
|
from test_tools import disk_utils, fs_utils, nvme_cli
|
||||||
from test_utils import disk_finder
|
|
||||||
from test_tools.common.wait import wait
|
from test_tools.common.wait import wait
|
||||||
from connection.utils.output import Output
|
from connection.utils.output import Output
|
||||||
|
from test_tools.disk_finder import get_block_devices_list, resolve_to_by_id_link
|
||||||
from types.size import Unit
|
from types.size import Unit
|
||||||
|
|
||||||
|
|
||||||
@ -159,7 +159,7 @@ class Disk(Device):
|
|||||||
|
|
||||||
def is_detected(self):
|
def is_detected(self):
|
||||||
if self.serial_number:
|
if self.serial_number:
|
||||||
serial_numbers = disk_finder.get_all_serial_numbers()
|
serial_numbers = Disk.get_all_serial_numbers()
|
||||||
return self.serial_number in serial_numbers
|
return self.serial_number in serial_numbers
|
||||||
elif self.path:
|
elif self.path:
|
||||||
output = fs_utils.ls_item(f"{self.path}")
|
output = fs_utils.ls_item(f"{self.path}")
|
||||||
@ -214,6 +214,40 @@ class Disk(Device):
|
|||||||
for disk_type in cls.types_registry:
|
for disk_type in cls.types_registry:
|
||||||
disk_type.plug_all()
|
disk_type.plug_all()
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def get_all_serial_numbers():
|
||||||
|
serial_numbers = {}
|
||||||
|
block_devices = get_block_devices_list()
|
||||||
|
for dev in block_devices:
|
||||||
|
serial = Disk.get_disk_serial_number(dev)
|
||||||
|
try:
|
||||||
|
path = resolve_to_by_id_link(dev)
|
||||||
|
except Exception:
|
||||||
|
continue
|
||||||
|
if serial:
|
||||||
|
serial_numbers[serial] = path
|
||||||
|
else:
|
||||||
|
TestRun.LOGGER.warning(f"Device {path} ({dev}) does not have a serial number.")
|
||||||
|
serial_numbers[path] = path
|
||||||
|
return serial_numbers
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def get_disk_serial_number(dev_path):
|
||||||
|
commands = [
|
||||||
|
f"(udevadm info --query=all --name={dev_path} | grep 'SCSI.*_SERIAL' || "
|
||||||
|
f"udevadm info --query=all --name={dev_path} | grep 'ID_SERIAL_SHORT') | "
|
||||||
|
"awk -F '=' '{print $NF}'",
|
||||||
|
f"sg_inq {dev_path} 2> /dev/null | grep '[Ss]erial number:' | "
|
||||||
|
"awk '{print $NF}'",
|
||||||
|
f"udevadm info --query=all --name={dev_path} | grep 'ID_SERIAL' | "
|
||||||
|
"awk -F '=' '{print $NF}'"
|
||||||
|
]
|
||||||
|
for command in commands:
|
||||||
|
serial = TestRun.executor.run(command).stdout
|
||||||
|
if serial:
|
||||||
|
return serial.split('\n')[0]
|
||||||
|
return None
|
||||||
|
|
||||||
|
|
||||||
@static_init
|
@static_init
|
||||||
class NvmeDisk(Disk):
|
class NvmeDisk(Disk):
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
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_tools.device_mapper import DmTable, DeviceMapper
|
from test_tools.device_mapper import DmTable, DeviceMapper
|
||||||
from test_utils.disk_finder import resolve_to_by_id_link
|
from test_tools.disk_finder import resolve_to_by_id_link
|
||||||
|
|
||||||
|
|
||||||
class ErrorDevice(Device):
|
class ErrorDevice(Device):
|
||||||
|
@ -11,7 +11,7 @@ from core.test_run import TestRun
|
|||||||
from storage_devices.device import Device
|
from storage_devices.device import Device
|
||||||
from storage_devices.disk import Disk
|
from storage_devices.disk import Disk
|
||||||
from test_tools.fs_utils import readlink
|
from test_tools.fs_utils import readlink
|
||||||
from test_utils.disk_finder import resolve_to_by_id_link, get_system_disks
|
from test_tools.disk_finder import resolve_to_by_id_link, get_system_disks
|
||||||
from test_utils.filesystem.symlink import Symlink
|
from test_utils.filesystem.symlink import Symlink
|
||||||
from types.size import Size
|
from types.size import Size
|
||||||
|
|
||||||
|
@ -10,7 +10,7 @@ from storage_devices.device import Device
|
|||||||
from storage_devices.disk import Disk
|
from storage_devices.disk import Disk
|
||||||
from test_tools.fs_utils import readlink
|
from test_tools.fs_utils import readlink
|
||||||
from test_tools.mdadm import Mdadm
|
from test_tools.mdadm import Mdadm
|
||||||
from test_utils.disk_finder import resolve_to_by_id_link
|
from test_tools.disk_finder import resolve_to_by_id_link
|
||||||
from types.size import Size, Unit
|
from types.size import Size, Unit
|
||||||
|
|
||||||
|
|
||||||
|
@ -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
|
||||||
#
|
#
|
||||||
import os
|
import os
|
||||||
@ -103,40 +104,6 @@ def discover_ssd_devices(block_devices, devices_res):
|
|||||||
block_devices.remove(dev)
|
block_devices.remove(dev)
|
||||||
|
|
||||||
|
|
||||||
def get_disk_serial_number(dev_path):
|
|
||||||
commands = [
|
|
||||||
f"(udevadm info --query=all --name={dev_path} | grep 'SCSI.*_SERIAL' || "
|
|
||||||
f"udevadm info --query=all --name={dev_path} | grep 'ID_SERIAL_SHORT') | "
|
|
||||||
"awk -F '=' '{print $NF}'",
|
|
||||||
f"sg_inq {dev_path} 2> /dev/null | grep '[Ss]erial number:' | "
|
|
||||||
"awk '{print $NF}'",
|
|
||||||
f"udevadm info --query=all --name={dev_path} | grep 'ID_SERIAL' | "
|
|
||||||
"awk -F '=' '{print $NF}'"
|
|
||||||
]
|
|
||||||
for command in commands:
|
|
||||||
serial = TestRun.executor.run(command).stdout
|
|
||||||
if serial:
|
|
||||||
return serial.split('\n')[0]
|
|
||||||
return None
|
|
||||||
|
|
||||||
|
|
||||||
def get_all_serial_numbers():
|
|
||||||
serial_numbers = {}
|
|
||||||
block_devices = get_block_devices_list()
|
|
||||||
for dev in block_devices:
|
|
||||||
serial = get_disk_serial_number(dev)
|
|
||||||
try:
|
|
||||||
path = resolve_to_by_id_link(dev)
|
|
||||||
except Exception:
|
|
||||||
continue
|
|
||||||
if serial:
|
|
||||||
serial_numbers[serial] = path
|
|
||||||
else:
|
|
||||||
TestRun.LOGGER.warning(f"Device {path} ({dev}) does not have a serial number.")
|
|
||||||
serial_numbers[path] = path
|
|
||||||
return serial_numbers
|
|
||||||
|
|
||||||
|
|
||||||
def get_system_disks():
|
def get_system_disks():
|
||||||
system_device = TestRun.executor.run_expect_success('mount | grep " / "').stdout.split()[0]
|
system_device = TestRun.executor.run_expect_success('mount | grep " / "').stdout.split()[0]
|
||||||
readlink_output = readlink(system_device)
|
readlink_output = readlink(system_device)
|
||||||
@ -176,7 +143,9 @@ def __get_slaves(device_name: str):
|
|||||||
|
|
||||||
def resolve_to_by_id_link(path):
|
def resolve_to_by_id_link(path):
|
||||||
by_id_paths = TestRun.executor.run_expect_success("ls /dev/disk/by-id -1").stdout.splitlines()
|
by_id_paths = TestRun.executor.run_expect_success("ls /dev/disk/by-id -1").stdout.splitlines()
|
||||||
dev_full_paths = [posixpath.join("/dev/disk/by-id", by_id_path) for by_id_path in by_id_paths]
|
dev_full_paths = [
|
||||||
|
posixpath.join("/dev/disk/by-id", by_id_path) for by_id_path in by_id_paths
|
||||||
|
]
|
||||||
|
|
||||||
for full_path in dev_full_paths:
|
for full_path in dev_full_paths:
|
||||||
# handle exception for broken links
|
# handle exception for broken links
|
Loading…
Reference in New Issue
Block a user