!110 [sync] PR-107: Add compatibility patch and bugfix
From: @openeuler-sync-bot Reviewed-by: @meitingli Signed-off-by: @meitingli
This commit is contained in:
commit
017ce138d8
267
oec-hardware-1.1.2-add-compatibility.patch
Normal file
267
oec-hardware-1.1.2-add-compatibility.patch
Normal file
@ -0,0 +1,267 @@
|
|||||||
|
From 1d0d56a7a62da272a42cd1bbd4222c6cb1431ba9 Mon Sep 17 00:00:00 2001
|
||||||
|
From: meitingli <limeiting1@huawei.com>
|
||||||
|
Date: Sat, 3 Sep 2022 11:21:11 +0800
|
||||||
|
Subject: [PATCH] Add generate compatibility information and bugfix
|
||||||
|
|
||||||
|
---
|
||||||
|
hwcompatible/cert_info.py | 101 ++++++++++++++++++++++++++++++++++++++
|
||||||
|
hwcompatible/constants.py | 2 +-
|
||||||
|
hwcompatible/device.py | 2 +
|
||||||
|
hwcompatible/job.py | 11 ++++-
|
||||||
|
tests/cpufreq/cpufreq.py | 8 +--
|
||||||
|
tests/gpu/gpu.py | 6 +--
|
||||||
|
6 files changed, 120 insertions(+), 10 deletions(-)
|
||||||
|
create mode 100644 hwcompatible/cert_info.py
|
||||||
|
|
||||||
|
diff --git a/hwcompatible/cert_info.py b/hwcompatible/cert_info.py
|
||||||
|
new file mode 100644
|
||||||
|
index 0000000..741e49a
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/hwcompatible/cert_info.py
|
||||||
|
@@ -0,0 +1,101 @@
|
||||||
|
+#!/usr/bin/env python3
|
||||||
|
+# coding: utf-8
|
||||||
|
+# oec-hardware is licensed under the Mulan PSL v2.gica's
|
||||||
|
+# You can use this software according to the terms and conditions of the Mulan PSL v2.
|
||||||
|
+# You may obtain a copy of Mulan PSL v2 at:
|
||||||
|
+# http://license.coscl.org.cn/MulanPSL2
|
||||||
|
+# THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR
|
||||||
|
+# IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR
|
||||||
|
+# PURPOSE.
|
||||||
|
+# See the Mulan PSL v2 for more details.
|
||||||
|
+# Author: @meitingli
|
||||||
|
+# Create: 2022-08-24
|
||||||
|
+# Desc: Generate compatibility json file
|
||||||
|
+
|
||||||
|
+import os
|
||||||
|
+import json
|
||||||
|
+from datetime import date
|
||||||
|
+from .env import CertEnv
|
||||||
|
+from .constants import FILE_FLAGS, FILE_MODES
|
||||||
|
+
|
||||||
|
+
|
||||||
|
+class CertInfo:
|
||||||
|
+ def __init__(self, logger, command):
|
||||||
|
+ self.cert_devices = []
|
||||||
|
+ self.cert_quads = []
|
||||||
|
+ self.infos = ["vendorID", "deviceID", "svID", "ssID", "architecture", "os", "driverName", "version",
|
||||||
|
+ "type", "date", "sha256", "driverSize", "chipVendor", "boardModel", "chipModel", "downloadLink"]
|
||||||
|
+ self.logger = logger
|
||||||
|
+ self.command = command
|
||||||
|
+
|
||||||
|
+ def create_json(self, device):
|
||||||
|
+ """
|
||||||
|
+ Create hardware information json
|
||||||
|
+ Args:
|
||||||
|
+ device: hardware device
|
||||||
|
+ Returns: True/False
|
||||||
|
+ """
|
||||||
|
+ if not device or not device.quad:
|
||||||
|
+ self.logger.warning(
|
||||||
|
+ "The %s doesn't have quadruple information, couldn't get hardware." % device.name)
|
||||||
|
+ return False
|
||||||
|
+
|
||||||
|
+ if device.quad in self.cert_quads:
|
||||||
|
+ return True
|
||||||
|
+
|
||||||
|
+ oec_json = {}
|
||||||
|
+ for info in self.infos:
|
||||||
|
+ oec_json[info] = ""
|
||||||
|
+
|
||||||
|
+ self.logger.info(
|
||||||
|
+ "Please input sha256, driverSize, downloadLink for %s manually "
|
||||||
|
+ "if you use outbox driver." % device.name)
|
||||||
|
+
|
||||||
|
+ oec_json["vendorID"] = device.quad[0]
|
||||||
|
+ oec_json["deviceID"] = device.quad[1]
|
||||||
|
+ oec_json["svID"] = device.quad[2]
|
||||||
|
+ oec_json["ssID"] = device.quad[3]
|
||||||
|
+ oec_json["driverName"] = device.driver
|
||||||
|
+ oec_json["version"] = device.driver_version
|
||||||
|
+ chip_vendor = self.command.run_cmd(
|
||||||
|
+ "grep '^%s' %s | cut -d ' ' -f 3" % (device.quad[0], CertEnv.pcifile), log_print=False)
|
||||||
|
+ oec_json["chipVendor"] = chip_vendor[0].strip("\n")
|
||||||
|
+ oec_json["boardModel"] = device.board
|
||||||
|
+ oec_json["chipModel"] = device.chip
|
||||||
|
+ oec_json["type"] = device.name
|
||||||
|
+ arch = self.command.run_cmd("uname -m", log_print=False)
|
||||||
|
+ oec_json["architecture"] = arch[0].strip("\n")
|
||||||
|
+ os_cmd = self.command.run_cmd(
|
||||||
|
+ "grep openeulerversion /etc/openEuler-latest | cut -d '=' -f 2", log_print=False)
|
||||||
|
+ os_version = os_cmd[0].strip("\n").replace('-', ' ')
|
||||||
|
+ oec_json["os"] = os_version
|
||||||
|
+ curday = date.today().strftime("%Y.%m.%d")
|
||||||
|
+ oec_json["date"] = curday
|
||||||
|
+ shanum = self.command.run_cmd(
|
||||||
|
+ "modinfo %s | grep signature | awk '{print $2}'" % device.driver, log_print=False)
|
||||||
|
+ oec_json["sha256"] = shanum[0].replace(":", "").strip("\n")
|
||||||
|
+ filename = self.command.run_cmd(
|
||||||
|
+ "modinfo %s | grep filename | awk '{print $2}'" % device.driver, log_print=False)
|
||||||
|
+ driver_size = self.command.run_cmd(
|
||||||
|
+ "ls -lh %s | awk '{print $5}'" % filename[0], log_print=False)
|
||||||
|
+ oec_json["driverSize"] = driver_size[0].strip("\n")
|
||||||
|
+ oec_json["downloadLink"] = "inbox"
|
||||||
|
+
|
||||||
|
+ self.cert_quads.append(device.quad)
|
||||||
|
+ self.cert_devices.append(oec_json)
|
||||||
|
+ return True
|
||||||
|
+
|
||||||
|
+ def export_cert_info(self):
|
||||||
|
+ """
|
||||||
|
+ Export device cert informations to json file
|
||||||
|
+ """
|
||||||
|
+ if not self.cert_devices:
|
||||||
|
+ self.logger.info("There is no cert device need to export.")
|
||||||
|
+ return
|
||||||
|
+
|
||||||
|
+ name = "hw_compatibility.json"
|
||||||
|
+ file = os.path.join(self.logger.logdir, name)
|
||||||
|
+ with os.fdopen(os.open(file, FILE_FLAGS, FILE_MODES), "w", encoding='utf-8') as fd_cert:
|
||||||
|
+ fd_cert.write(json.dumps(self.cert_devices, indent=4))
|
||||||
|
+
|
||||||
|
+ self.logger.info("The cert device json file is created succeed.")
|
||||||
|
diff --git a/hwcompatible/constants.py b/hwcompatible/constants.py
|
||||||
|
index bd7e038..86713d8 100644
|
||||||
|
--- a/hwcompatible/constants.py
|
||||||
|
+++ b/hwcompatible/constants.py
|
||||||
|
@@ -33,7 +33,7 @@ KEYCARD_VENDORS = ('Xilinx', 'Renesas', 'Texas', 'PLX')
|
||||||
|
IB = "infiniband"
|
||||||
|
DEVICE_INFO = ('color', 'status', 'num', 'run', 'name',
|
||||||
|
'device', 'driver', 'version', 'chip', 'board')
|
||||||
|
-NO_CONFIG_DEVICES = ("gpu", "vgpu", "nvme", "dpdk", "cdrom")
|
||||||
|
+NO_CONFIG_DEVICES = ("gpu", "vgpu", "nvme", "dpdk", "cdrom", "keycard")
|
||||||
|
|
||||||
|
# File access control
|
||||||
|
FILE_FLAGS = os.O_WRONLY | os.O_CREAT | os.O_TRUNC
|
||||||
|
diff --git a/hwcompatible/device.py b/hwcompatible/device.py
|
||||||
|
index 72e57fa..1bd6218 100755
|
||||||
|
--- a/hwcompatible/device.py
|
||||||
|
+++ b/hwcompatible/device.py
|
||||||
|
@@ -69,6 +69,7 @@ class Device:
|
||||||
|
def __init__(self, properties=None, logger=None):
|
||||||
|
self.logger = logger
|
||||||
|
self.command = Command(self.logger)
|
||||||
|
+ self.name = ""
|
||||||
|
self.path = ""
|
||||||
|
self.pci = ""
|
||||||
|
self.quad = list()
|
||||||
|
@@ -109,6 +110,7 @@ class Device:
|
||||||
|
get board model name
|
||||||
|
:return:
|
||||||
|
"""
|
||||||
|
+ self.name = name
|
||||||
|
self.file = file
|
||||||
|
self.file.seek(0)
|
||||||
|
# get PCI number
|
||||||
|
diff --git a/hwcompatible/job.py b/hwcompatible/job.py
|
||||||
|
index fe04a14..0005eb6 100755
|
||||||
|
--- a/hwcompatible/job.py
|
||||||
|
+++ b/hwcompatible/job.py
|
||||||
|
@@ -22,7 +22,8 @@ from .env import CertEnv
|
||||||
|
from .command import Command
|
||||||
|
from .log import Logger
|
||||||
|
from .reboot import Reboot
|
||||||
|
-from .constants import NO_CONFIG_DEVICES
|
||||||
|
+from .cert_info import CertInfo
|
||||||
|
+from .constants import NO_CONFIG_DEVICES, NODEVICE
|
||||||
|
|
||||||
|
|
||||||
|
class Job():
|
||||||
|
@@ -59,7 +60,7 @@ class Job():
|
||||||
|
for tests in self.test_suite:
|
||||||
|
for pkg in tests["test"].requirements:
|
||||||
|
cmd_result = self.command.run_cmd(
|
||||||
|
- "rpm -q %s" % pkg, ignore_errors=True)
|
||||||
|
+ "rpm -q %s" % pkg, ignore_errors=True, log_print=False)
|
||||||
|
return_code = cmd_result[2]
|
||||||
|
if return_code != 0 and pkg not in required_rpms:
|
||||||
|
required_rpms.append(pkg)
|
||||||
|
@@ -88,17 +89,23 @@ class Job():
|
||||||
|
|
||||||
|
self.get_config()
|
||||||
|
self.test_suite.sort(key=lambda k: k["test"].pri)
|
||||||
|
+ cert_infos = CertInfo(self.logger, self.command)
|
||||||
|
for testcase in self.test_suite:
|
||||||
|
config_data = self.get_device(testcase)
|
||||||
|
if self._run_test(testcase, config_data, subtests_filter):
|
||||||
|
testcase["status"] = "PASS"
|
||||||
|
self.logger.info("Test %s succeed." %
|
||||||
|
testcase["name"], terminal_print=False)
|
||||||
|
+
|
||||||
|
+ if testcase["name"] not in NODEVICE:
|
||||||
|
+ cert_infos.create_json(testcase["device"])
|
||||||
|
else:
|
||||||
|
testcase["status"] = "FAIL"
|
||||||
|
self.logger.error("Test %s failed." %
|
||||||
|
testcase["name"], terminal_print=False)
|
||||||
|
|
||||||
|
+ cert_infos.export_cert_info()
|
||||||
|
+
|
||||||
|
def run(self):
|
||||||
|
"""
|
||||||
|
Test entrance
|
||||||
|
diff --git a/tests/cpufreq/cpufreq.py b/tests/cpufreq/cpufreq.py
|
||||||
|
index d01d9d9..98e7305 100644
|
||||||
|
--- a/tests/cpufreq/cpufreq.py
|
||||||
|
+++ b/tests/cpufreq/cpufreq.py
|
||||||
|
@@ -262,7 +262,7 @@ class CPUFreqTest(Test):
|
||||||
|
return False
|
||||||
|
self.logger.info("Set governor of all CPUs to ondemand succeed.")
|
||||||
|
|
||||||
|
- target_cpu = randint(0, self.cpu.nums)
|
||||||
|
+ target_cpu = randint(0, self.cpu.nums-1)
|
||||||
|
target_cpu_governor = self.cpu.get_governor(target_cpu)
|
||||||
|
if target_cpu_governor != 'ondemand':
|
||||||
|
self.logger.error("The governor of CPU%s(%s) is not ondemand." % (
|
||||||
|
@@ -311,7 +311,7 @@ class CPUFreqTest(Test):
|
||||||
|
return False
|
||||||
|
self.logger.info("Set governor of all CPUs to conservative.")
|
||||||
|
|
||||||
|
- target_cpu = randint(0, self.cpu.nums)
|
||||||
|
+ target_cpu = randint(0, self.cpu.nums-1)
|
||||||
|
target_cpu_governor = self.cpu.get_governor(target_cpu)
|
||||||
|
if target_cpu_governor != 'conservative':
|
||||||
|
self.logger.error("The governor of CPU%s(%s) is not conservative." %
|
||||||
|
@@ -350,7 +350,7 @@ class CPUFreqTest(Test):
|
||||||
|
return False
|
||||||
|
self.logger.info("Set governor of all CPUs to powersave.")
|
||||||
|
|
||||||
|
- target_cpu = randint(0, self.cpu.nums)
|
||||||
|
+ target_cpu = randint(0, self.cpu.nums-1)
|
||||||
|
target_cpu_governor = self.cpu.get_governor(target_cpu)
|
||||||
|
if target_cpu_governor != 'powersave':
|
||||||
|
self.logger.error("The governor of CPU%s(%s) is not powersave." %
|
||||||
|
@@ -389,7 +389,7 @@ class CPUFreqTest(Test):
|
||||||
|
return False
|
||||||
|
self.logger.info("Set governor of all CPUs to performance.")
|
||||||
|
|
||||||
|
- target_cpu = randint(0, self.cpu.nums)
|
||||||
|
+ target_cpu = randint(0, self.cpu.nums-1)
|
||||||
|
target_cpu_governor = self.cpu.get_governor(target_cpu)
|
||||||
|
if target_cpu_governor != 'performance':
|
||||||
|
self.logger.error("The governor of CPU%s(%s) is not performance." %
|
||||||
|
diff --git a/tests/gpu/gpu.py b/tests/gpu/gpu.py
|
||||||
|
index 665bbdf..7260b99 100644
|
||||||
|
--- a/tests/gpu/gpu.py
|
||||||
|
+++ b/tests/gpu/gpu.py
|
||||||
|
@@ -78,8 +78,8 @@ class GpuTest(Test):
|
||||||
|
os.environ['CUDA_VISIBLE_DEVICES'] = id_num
|
||||||
|
|
||||||
|
self.command.run_cmd("bash %s/test_gpu.sh install_gpu_burn" % gpu_dir)
|
||||||
|
- self.command.run_cmd(
|
||||||
|
- '/opt/gpu-burn/gpu_burn 10 | tee %s' % self.gpu_burn)
|
||||||
|
+ os.chdir("/opt/gpu-burn")
|
||||||
|
+ self.command.run_cmd('./gpu_burn 10 | tee %s' % self.gpu_burn)
|
||||||
|
time.sleep(1)
|
||||||
|
for _ in range(10):
|
||||||
|
cmd = self.command.run_cmd(
|
||||||
|
@@ -116,4 +116,4 @@ class GpuTest(Test):
|
||||||
|
except Exception as e:
|
||||||
|
self.logger.error(
|
||||||
|
"Failed to run the script because compiling or setting variables: %s" % e)
|
||||||
|
- return False
|
||||||
|
+ return False
|
||||||
|
\ No newline at end of file
|
||||||
|
--
|
||||||
|
2.33.0
|
||||||
|
|
||||||
@ -4,7 +4,7 @@
|
|||||||
Name: oec-hardware
|
Name: oec-hardware
|
||||||
Summary: openEuler Hardware Compatibility Test Suite
|
Summary: openEuler Hardware Compatibility Test Suite
|
||||||
Version: 1.1.2
|
Version: 1.1.2
|
||||||
Release: 2
|
Release: 3
|
||||||
Group: Development/Tools
|
Group: Development/Tools
|
||||||
License: Mulan PSL v2
|
License: Mulan PSL v2
|
||||||
URL: https://gitee.com/openeuler/oec-hardware
|
URL: https://gitee.com/openeuler/oec-hardware
|
||||||
@ -13,6 +13,7 @@ Source0: https://gitee.com/openeuler/oec-hardware/repository/archive/v%{v
|
|||||||
# patch fix issue
|
# patch fix issue
|
||||||
Patch0001: oec-hardware-1.1.2-fix-oech.service_status_failed.patch
|
Patch0001: oec-hardware-1.1.2-fix-oech.service_status_failed.patch
|
||||||
Patch0002: oec-hardware-1.1.2-fix-system.patch
|
Patch0002: oec-hardware-1.1.2-fix-system.patch
|
||||||
|
Patch0003: oec-hardware-1.1.2-add-compatibility.patch
|
||||||
|
|
||||||
Buildroot: %{_tmppath}/%{name}-%{version}-root
|
Buildroot: %{_tmppath}/%{name}-%{version}-root
|
||||||
BuildRequires: gcc
|
BuildRequires: gcc
|
||||||
@ -37,6 +38,7 @@ openEuler Hardware Compatibility Test Server
|
|||||||
%setup -q -c
|
%setup -q -c
|
||||||
%patch1 -p1
|
%patch1 -p1
|
||||||
%patch2 -p1
|
%patch2 -p1
|
||||||
|
%patch3 -p1
|
||||||
|
|
||||||
%build
|
%build
|
||||||
|
|
||||||
@ -79,6 +81,10 @@ DESTDIR=$RPM_BUILD_ROOT make install
|
|||||||
rm -rf /var/lock/oech.lock
|
rm -rf /var/lock/oech.lock
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Tue Sep 06 2022 meitingli <bubble_mt@outlook.com> - 1.1.2-3
|
||||||
|
- Add generate compatibility information
|
||||||
|
- Fix gpu and keycard issues
|
||||||
|
|
||||||
* Mon Sep 05 2022 cuixucui <cuixucui1@h-partners.com> - 1.1.2-2
|
* Mon Sep 05 2022 cuixucui <cuixucui1@h-partners.com> - 1.1.2-2
|
||||||
- Fix Check whether the tool is modified failed
|
- Fix Check whether the tool is modified failed
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user