3076 lines
106 KiB
Diff
3076 lines
106 KiB
Diff
|
|
Binary files oec-hardware/docs/test-flow.png and oec-hardware_new/docs/test-flow.png differ
|
|||
|
|
diff -urN oec-hardware/hwcompatible/client.py oec-hardware_new/hwcompatible/client.py
|
|||
|
|
--- oec-hardware/hwcompatible/client.py 2021-09-13 11:43:59.390364522 +0800
|
|||
|
|
+++ oec-hardware_new/hwcompatible/client.py 2021-09-13 11:42:03.381474028 +0800
|
|||
|
|
@@ -12,15 +12,16 @@
|
|||
|
|
# See the Mulan PSL v2 for more details.
|
|||
|
|
# Create: 2020-04-01
|
|||
|
|
|
|||
|
|
+"""upload file"""
|
|||
|
|
+
|
|||
|
|
import os
|
|||
|
|
import base64
|
|||
|
|
try:
|
|||
|
|
from urllib.parse import urlencode
|
|||
|
|
from urllib.request import urlopen, Request
|
|||
|
|
- from urllib.error import HTTPError
|
|||
|
|
except ImportError:
|
|||
|
|
from urllib import urlencode
|
|||
|
|
- from urllib2 import urlopen, Request, HTTPError
|
|||
|
|
+ from urllib2 import urlopen, Request
|
|||
|
|
|
|||
|
|
|
|||
|
|
class Client:
|
|||
|
|
@@ -29,7 +30,7 @@
|
|||
|
|
"""
|
|||
|
|
def __init__(self, host, oec_id):
|
|||
|
|
self.host = host
|
|||
|
|
- self.id = oec_id
|
|||
|
|
+ self.oec_id = oec_id
|
|||
|
|
self.form = {}
|
|||
|
|
|
|||
|
|
def upload(self, files, server='localhost'):
|
|||
|
|
@@ -42,17 +43,17 @@
|
|||
|
|
filename = os.path.basename(files)
|
|||
|
|
try:
|
|||
|
|
job = filename.split('.')[0]
|
|||
|
|
- with open(files, 'rb') as f:
|
|||
|
|
- filetext = base64.b64encode(f.read())
|
|||
|
|
- except Exception as e:
|
|||
|
|
- print(e)
|
|||
|
|
+ with open(files, 'rb') as file:
|
|||
|
|
+ filetext = base64.b64encode(file.read())
|
|||
|
|
+ except Exception as excp:
|
|||
|
|
+ print(excp)
|
|||
|
|
return False
|
|||
|
|
|
|||
|
|
- if not self.host or not self.id:
|
|||
|
|
- print("Missing host({0}) or id({1})".format(self.host, self.id))
|
|||
|
|
+ if not self.host or not self.oec_id:
|
|||
|
|
+ print("Missing host({0}) or id({1})".format(self.host, self.oec_id))
|
|||
|
|
return False
|
|||
|
|
self.form['host'] = self.host
|
|||
|
|
- self.form['id'] = self.id
|
|||
|
|
+ self.form['id'] = self.oec_id
|
|||
|
|
self.form['job'] = job
|
|||
|
|
self.form['filetext'] = filetext
|
|||
|
|
|
|||
|
|
@@ -70,8 +71,8 @@
|
|||
|
|
print("Error: upload failed, %s" % res.msg)
|
|||
|
|
return False
|
|||
|
|
return True
|
|||
|
|
- except Exception as e:
|
|||
|
|
- print(e)
|
|||
|
|
+ except Exception as excp:
|
|||
|
|
+ print(excp)
|
|||
|
|
return False
|
|||
|
|
|
|||
|
|
|
|||
|
|
diff -urN oec-hardware/hwcompatible/command.py oec-hardware_new/hwcompatible/command.py
|
|||
|
|
--- oec-hardware/hwcompatible/command.py 2021-09-13 11:43:59.390364522 +0800
|
|||
|
|
+++ oec-hardware_new/hwcompatible/command.py 2021-09-13 11:42:03.381474028 +0800
|
|||
|
|
@@ -45,7 +45,7 @@
|
|||
|
|
encoding='utf8')
|
|||
|
|
(output, errors) = self.pipe.communicate()
|
|||
|
|
if output:
|
|||
|
|
- #Strip new line character/s if any from the end of output string
|
|||
|
|
+ # Strip new line character/s if any from the end of output string
|
|||
|
|
output = output.rstrip('\n')
|
|||
|
|
self.origin_output = output
|
|||
|
|
self.output = output.splitlines()
|
|||
|
|
@@ -54,6 +54,7 @@
|
|||
|
|
self.returncode = self.pipe.returncode
|
|||
|
|
|
|||
|
|
def start(self):
|
|||
|
|
+ """start command"""
|
|||
|
|
if sys.version_info.major < 3:
|
|||
|
|
self.pipe = subprocess.Popen(self.command, shell=True,
|
|||
|
|
stdin=subprocess.PIPE,
|
|||
|
|
@@ -82,14 +83,15 @@
|
|||
|
|
# raise CertCommandError(self, "has output on stderr")
|
|||
|
|
|
|||
|
|
def run_quiet(self):
|
|||
|
|
+ """quiet after running command"""
|
|||
|
|
self._run()
|
|||
|
|
if self.returncode != 0:
|
|||
|
|
raise CertCommandError(self, "returned %d" % self.returncode)
|
|||
|
|
|
|||
|
|
def echo(self, ignore_errors=False):
|
|||
|
|
+ """Print information to terminal"""
|
|||
|
|
self.run(ignore_errors)
|
|||
|
|
self.print_output()
|
|||
|
|
- return
|
|||
|
|
|
|||
|
|
def print_output(self):
|
|||
|
|
"""
|
|||
|
|
@@ -141,49 +143,39 @@
|
|||
|
|
return self.pipe.stdout.read().decode('utf-8', 'ignore').rstrip()
|
|||
|
|
|
|||
|
|
def poll(self):
|
|||
|
|
+ """get poll message"""
|
|||
|
|
if self.pipe:
|
|||
|
|
return self.pipe.poll()
|
|||
|
|
|
|||
|
|
- def _get_str(self, regex=None, regex_group=None, single_line=True, return_list=False):
|
|||
|
|
- self.regex = regex
|
|||
|
|
- self.single_line = single_line
|
|||
|
|
- self.regex_group = regex_group
|
|||
|
|
-
|
|||
|
|
- self._run()
|
|||
|
|
-
|
|||
|
|
- if self.single_line:
|
|||
|
|
- if self.output and len(self.output) > 1:
|
|||
|
|
- raise CertCommandError(self, "Found %u lines of output, expected 1" % len(self.output))
|
|||
|
|
+ def _get_str_single_line(self):
|
|||
|
|
+ if self.output and len(self.output) > 1:
|
|||
|
|
+ raise CertCommandError(self, "Found %u lines of output, "
|
|||
|
|
+ "expected 1" % len(self.output))
|
|||
|
|
|
|||
|
|
- if self.output:
|
|||
|
|
- line = self.output[0].strip()
|
|||
|
|
- if not self.regex:
|
|||
|
|
- return line
|
|||
|
|
- # otherwise, try the regex
|
|||
|
|
- pattern = re.compile(self.regex)
|
|||
|
|
- match = pattern.match(line)
|
|||
|
|
+ if self.output:
|
|||
|
|
+ line = self.output[0].strip()
|
|||
|
|
+ if not self.regex:
|
|||
|
|
+ return line
|
|||
|
|
+ # otherwise, try the regex
|
|||
|
|
+ pattern = re.compile(self.regex)
|
|||
|
|
+ match = pattern.match(line)
|
|||
|
|
+ if match:
|
|||
|
|
+ if self.regex_group:
|
|||
|
|
+ return match.group(self.regex_group)
|
|||
|
|
+ # otherwise, no group, return the whole line
|
|||
|
|
+ return line
|
|||
|
|
+
|
|||
|
|
+ # no regex match try a grep-style match
|
|||
|
|
+ if not self.regex_group:
|
|||
|
|
+ match = pattern.search(line)
|
|||
|
|
if match:
|
|||
|
|
- if self.regex_group:
|
|||
|
|
- return match.group(self.regex_group)
|
|||
|
|
- # otherwise, no group, return the whole line
|
|||
|
|
- return line
|
|||
|
|
-
|
|||
|
|
- # no regex match try a grep-style match
|
|||
|
|
- if not self.regex_group:
|
|||
|
|
- match = pattern.search(line)
|
|||
|
|
- if match:
|
|||
|
|
- return match.group()
|
|||
|
|
+ return match.group()
|
|||
|
|
|
|||
|
|
- # otherwise
|
|||
|
|
- raise CertCommandError(self, "no match for regular expression %s" % self.regex)
|
|||
|
|
+ # otherwise
|
|||
|
|
+ raise CertCommandError(self, "no match for regular "
|
|||
|
|
+ "expression %s" % self.regex)
|
|||
|
|
|
|||
|
|
- #otherwise, multi-line or single-line regex
|
|||
|
|
- if not self.regex:
|
|||
|
|
- raise CertCommandError(self, "no regular expression set for multi-line command")
|
|||
|
|
- pattern = re.compile(self.regex)
|
|||
|
|
- result = None
|
|||
|
|
- if return_list:
|
|||
|
|
- result = list()
|
|||
|
|
+ def _get_str_multi_line(self, result, pattern, return_list):
|
|||
|
|
if self.output:
|
|||
|
|
for line in self.output:
|
|||
|
|
if self.regex_group:
|
|||
|
|
@@ -202,12 +194,32 @@
|
|||
|
|
result.append(match.group())
|
|||
|
|
else:
|
|||
|
|
return match.group()
|
|||
|
|
- if result:
|
|||
|
|
- return result
|
|||
|
|
+ return result
|
|||
|
|
+
|
|||
|
|
+ def _get_str(self, regex=None, regex_group=None,
|
|||
|
|
+ single_line=True, return_list=False):
|
|||
|
|
+ self.regex = regex
|
|||
|
|
+ self.single_line = single_line
|
|||
|
|
+ self.regex_group = regex_group
|
|||
|
|
+
|
|||
|
|
+ self._run()
|
|||
|
|
+
|
|||
|
|
+ if self.single_line:
|
|||
|
|
+ return self._get_str_single_line()
|
|||
|
|
|
|||
|
|
- raise CertCommandError(self, "no match for regular expression %s" % self.regex)
|
|||
|
|
+ # otherwise, multi-line or single-line regex
|
|||
|
|
+ if not self.regex:
|
|||
|
|
+ raise CertCommandError(self, "no regular expression "
|
|||
|
|
+ "set for multi-line command")
|
|||
|
|
+ pattern = re.compile(self.regex)
|
|||
|
|
+ result = None
|
|||
|
|
+ if return_list:
|
|||
|
|
+ result = list()
|
|||
|
|
+ return self._get_str_multi_line(result, pattern, return_list)
|
|||
|
|
|
|||
|
|
- def get_str(self, regex=None, regex_group=None, single_line=True, return_list=False, ignore_errors=False):
|
|||
|
|
+ def get_str(self, regex=None, regex_group=None, single_line=True,
|
|||
|
|
+ return_list=False, ignore_errors=False):
|
|||
|
|
+ """获取命令执行结果中匹配的值"""
|
|||
|
|
result = self._get_str(regex, regex_group, single_line, return_list)
|
|||
|
|
if not ignore_errors:
|
|||
|
|
if self.returncode != 0:
|
|||
|
|
@@ -226,7 +238,7 @@
|
|||
|
|
Cert command error handling
|
|||
|
|
"""
|
|||
|
|
def __init__(self, command, message):
|
|||
|
|
- super(CertCommandError, self).__init__()
|
|||
|
|
+ Exception.__init__(self)
|
|||
|
|
self.message = message
|
|||
|
|
self.command = command
|
|||
|
|
self.__message = None
|
|||
|
|
@@ -234,7 +246,9 @@
|
|||
|
|
def __str__(self):
|
|||
|
|
return "\"%s\" %s" % (self.command.command, self.message)
|
|||
|
|
|
|||
|
|
- def _get_message(self): return self.__message
|
|||
|
|
- def _set_message(self, value): self.__message = value
|
|||
|
|
- message = property(_get_message, _set_message)
|
|||
|
|
+ def _get_message(self):
|
|||
|
|
+ return self.__message
|
|||
|
|
|
|||
|
|
+ def _set_message(self, value):
|
|||
|
|
+ self.__message = value
|
|||
|
|
+ message = property(_get_message, _set_message)
|
|||
|
|
diff -urN oec-hardware/hwcompatible/commandUI.py oec-hardware_new/hwcompatible/commandUI.py
|
|||
|
|
--- oec-hardware/hwcompatible/commandUI.py 2021-09-13 11:43:59.390364522 +0800
|
|||
|
|
+++ oec-hardware_new/hwcompatible/commandUI.py 2021-09-13 11:42:03.381474028 +0800
|
|||
|
|
@@ -23,7 +23,7 @@
|
|||
|
|
def __init__(self, echoResponses=False):
|
|||
|
|
self.echo = echoResponses
|
|||
|
|
|
|||
|
|
- def printPipe(self, pipe):
|
|||
|
|
+ def print_pipe(self, pipe):
|
|||
|
|
"""
|
|||
|
|
print pipe data
|
|||
|
|
:param pipe:
|
|||
|
|
@@ -123,6 +123,7 @@
|
|||
|
|
reply = input(label).strip()
|
|||
|
|
if not choices or reply in choices:
|
|||
|
|
return reply
|
|||
|
|
- print("Please enter one of the following: %s" % " | ".join(choices))
|
|||
|
|
+ print("Please enter one of the "
|
|||
|
|
+ "following: %s" % " | ".join(choices))
|
|||
|
|
finally:
|
|||
|
|
readline.set_startup_hook()
|
|||
|
|
diff -urN oec-hardware/hwcompatible/compatibility.py oec-hardware_new/hwcompatible/compatibility.py
|
|||
|
|
--- oec-hardware/hwcompatible/compatibility.py 2021-09-13 11:43:59.390364522 +0800
|
|||
|
|
+++ oec-hardware_new/hwcompatible/compatibility.py 2021-09-13 11:42:03.381474028 +0800
|
|||
|
|
@@ -60,7 +60,8 @@
|
|||
|
|
self.devices = DeviceDocument(CertEnv.devicefile, oec_devices)
|
|||
|
|
self.devices.save()
|
|||
|
|
|
|||
|
|
- # test_factory format example: [{"name":"nvme", "device":device, "run":True, "status":"PASS", "reboot":False}]
|
|||
|
|
+ # test_factory format example: [{"name":"nvme", "device":device,
|
|||
|
|
+ # "run":True, "status":"PASS", "reboot":False}]
|
|||
|
|
test_factory = self.get_tests(oec_devices)
|
|||
|
|
self.update_factory(test_factory)
|
|||
|
|
if not self.choose_tests():
|
|||
|
|
@@ -95,7 +96,8 @@
|
|||
|
|
clean all compatibility test file
|
|||
|
|
:return:
|
|||
|
|
"""
|
|||
|
|
- if self.ui.prompt_confirm("Are you sure to clean all compatibility test data?"):
|
|||
|
|
+ if self.ui.prompt_confirm("Are you sure to clean all "
|
|||
|
|
+ "compatibility test data?"):
|
|||
|
|
try:
|
|||
|
|
Command("rm -rf %s" % CertEnv.certificationfile).run()
|
|||
|
|
Command("rm -rf %s" % CertEnv.factoryfile).run()
|
|||
|
|
@@ -149,7 +151,8 @@
|
|||
|
|
|
|||
|
|
cwd = os.getcwd()
|
|||
|
|
os.chdir(os.path.dirname(doc_dir))
|
|||
|
|
- dir_name = "oech-" + datetime.datetime.now().strftime("%Y%m%d%H%M%S") + "-" + job.job_id
|
|||
|
|
+ dir_name = "oech-" + datetime.datetime.now().strftime("%Y%m%d%H%M%S")\
|
|||
|
|
+ + "-" + job.job_id
|
|||
|
|
pack_name = dir_name + ".tar"
|
|||
|
|
cmd = Command("tar -cf %s %s" % (pack_name, dir_name))
|
|||
|
|
try:
|
|||
|
|
@@ -213,11 +216,8 @@
|
|||
|
|
:param devices:
|
|||
|
|
:return:
|
|||
|
|
"""
|
|||
|
|
- nodevice = ["cpufreq", "memory", "clock", "profiler", "system", "stress", "kdump", "perf", "acpi", "watchdog"]
|
|||
|
|
- ethernet = ["ethernet"]
|
|||
|
|
- infiniband = ["infiniband"]
|
|||
|
|
- storage = ["nvme", "disk", "nvdimm"]
|
|||
|
|
- cdrom = ["cdrom"]
|
|||
|
|
+ nodevice = ["cpufreq", "memory", "clock", "profiler", "system",
|
|||
|
|
+ "stress", "kdump", "perf", "acpi", "watchdog"]
|
|||
|
|
sort_devices = self.sort_tests(devices)
|
|||
|
|
empty_device = Device()
|
|||
|
|
test_factory = list()
|
|||
|
|
@@ -225,7 +225,8 @@
|
|||
|
|
for (dirpath, dirs, filenames) in os.walk(CertEnv.testdirectoy):
|
|||
|
|
dirs.sort()
|
|||
|
|
for filename in filenames:
|
|||
|
|
- if filename.endswith(".py") and not filename.startswith("__init__"):
|
|||
|
|
+ if filename.endswith(".py") and \
|
|||
|
|
+ not filename.startswith("__init__"):
|
|||
|
|
casenames.append(filename.split(".")[0])
|
|||
|
|
|
|||
|
|
for testname in casenames:
|
|||
|
|
@@ -258,15 +259,18 @@
|
|||
|
|
empty_device = Device()
|
|||
|
|
for device in devices:
|
|||
|
|
if device.get_property("SUBSYSTEM") == "usb" and \
|
|||
|
|
- device.get_property("ID_VENDOR_FROM_DATABASE") == "Linux Foundation" and \
|
|||
|
|
+ device.get_property("ID_VENDOR_FROM_DATABASE") == \
|
|||
|
|
+ "Linux Foundation" and \
|
|||
|
|
("2." in device.get_property("ID_MODEL_FROM_DATABASE") or
|
|||
|
|
"3." in device.get_property("ID_MODEL_FROM_DATABASE")):
|
|||
|
|
sort_devices["usb"] = [empty_device]
|
|||
|
|
continue
|
|||
|
|
- if device.get_property("PCI_CLASS") == "30000" or device.get_property("PCI_CLASS") == "38000":
|
|||
|
|
+ if device.get_property("PCI_CLASS") == "30000" or \
|
|||
|
|
+ device.get_property("PCI_CLASS") == "38000":
|
|||
|
|
sort_devices["video"] = [device]
|
|||
|
|
continue
|
|||
|
|
- if (device.get_property("DEVTYPE") == "disk" and not device.get_property("ID_TYPE")) or \
|
|||
|
|
+ if (device.get_property("DEVTYPE") == "disk" and
|
|||
|
|
+ not device.get_property("ID_TYPE")) or \
|
|||
|
|
device.get_property("ID_TYPE") == "disk":
|
|||
|
|
if "nvme" in device.get_property("DEVPATH"):
|
|||
|
|
sort_devices["disk"] = [empty_device]
|
|||
|
|
@@ -274,11 +278,10 @@
|
|||
|
|
sort_devices["nvme"].extend([device])
|
|||
|
|
except KeyError:
|
|||
|
|
sort_devices["nvme"] = [device]
|
|||
|
|
- continue
|
|||
|
|
elif "/host" in device.get_property("DEVPATH"):
|
|||
|
|
sort_devices["disk"] = [empty_device]
|
|||
|
|
- continue
|
|||
|
|
- if device.get_property("SUBSYSTEM") == "net" and device.get_property("INTERFACE"):
|
|||
|
|
+ if device.get_property("SUBSYSTEM") == "net" and \
|
|||
|
|
+ device.get_property("INTERFACE"):
|
|||
|
|
interface = device.get_property("INTERFACE")
|
|||
|
|
nmcli = Command("nmcli device")
|
|||
|
|
nmcli.start()
|
|||
|
|
@@ -304,7 +307,7 @@
|
|||
|
|
break
|
|||
|
|
continue
|
|||
|
|
if device.get_property("ID_CDROM") == "1":
|
|||
|
|
- types = ["DVD_RW", "DVD_PLUS_RW", "DVD_R", "DVD_PLUS_R", "DVD", \
|
|||
|
|
+ types = ["DVD_RW", "DVD_PLUS_RW", "DVD_R", "DVD_PLUS_R", "DVD",
|
|||
|
|
"BD_RE", "BD_R", "BD", "CD_RW", "CD_R", "CD"]
|
|||
|
|
for dev_type in types:
|
|||
|
|
if device.get_property("ID_CDROM_" + dev_type) == "1":
|
|||
|
|
@@ -316,7 +319,8 @@
|
|||
|
|
if device.get_property("SUBSYSTEM") == "ipmi":
|
|||
|
|
sort_devices["ipmi"] = [empty_device]
|
|||
|
|
try:
|
|||
|
|
- Command("dmidecode").get_str("IPMI Device Information", single_line=False)
|
|||
|
|
+ Command("dmidecode").get_str("IPMI Device Information",
|
|||
|
|
+ single_line=False)
|
|||
|
|
sort_devices["ipmi"] = [empty_device]
|
|||
|
|
except:
|
|||
|
|
pass
|
|||
|
|
@@ -353,21 +357,24 @@
|
|||
|
|
test["run"] = True
|
|||
|
|
continue
|
|||
|
|
|
|||
|
|
- try:
|
|||
|
|
- num = int(reply)
|
|||
|
|
- except:
|
|||
|
|
- continue
|
|||
|
|
+ num_lst = reply.split(" ")
|
|||
|
|
+ for num in num_lst:
|
|||
|
|
+ try:
|
|||
|
|
+ num = int(num)
|
|||
|
|
+ except ValueError:
|
|||
|
|
+ continue
|
|||
|
|
|
|||
|
|
- if num > 0 and num <= len(self.test_factory):
|
|||
|
|
- self.test_factory[num - 1]["run"] = not self.test_factory[num - 1]["run"]
|
|||
|
|
- continue
|
|||
|
|
+ if 0 < num <= len(self.test_factory):
|
|||
|
|
+ self.test_factory[num - 1]["run"] = not \
|
|||
|
|
+ self.test_factory[num - 1]["run"]
|
|||
|
|
+ continue
|
|||
|
|
|
|||
|
|
def show_tests(self):
|
|||
|
|
"""
|
|||
|
|
show test items
|
|||
|
|
:return:
|
|||
|
|
"""
|
|||
|
|
- print("\033[1;35m" + "No.".ljust(4) + "Run-Now?".ljust(10) \
|
|||
|
|
+ print("\033[1;35m" + "No.".ljust(4) + "Run-Now?".ljust(10)
|
|||
|
|
+ "Status".ljust(8) + "Class".ljust(14) + "Device\033[0m")
|
|||
|
|
num = 0
|
|||
|
|
for test in self.test_factory:
|
|||
|
|
@@ -385,16 +392,16 @@
|
|||
|
|
|
|||
|
|
num = num + 1
|
|||
|
|
if status == "PASS":
|
|||
|
|
- print("%-6d" % num + run.ljust(8) + "\033[0;32mPASS \033[0m" \
|
|||
|
|
+ print("%-6d" % num + run.ljust(8) + "\033[0;32mPASS \033[0m"
|
|||
|
|
+ name.ljust(14) + "%s" % device)
|
|||
|
|
elif status == "FAIL":
|
|||
|
|
- print("%-6d" % num + run.ljust(8) + "\033[0;31mFAIL \033[0m" \
|
|||
|
|
+ print("%-6d" % num + run.ljust(8) + "\033[0;31mFAIL \033[0m"
|
|||
|
|
+ name.ljust(14) + "%s" % device)
|
|||
|
|
elif status == "Force":
|
|||
|
|
- print("%-6d" % num + run.ljust(8) + "\033[0;33mForce \033[0m" \
|
|||
|
|
+ print("%-6d" % num + run.ljust(8) + "\033[0;33mForce \033[0m"
|
|||
|
|
+ name.ljust(14) + "%s" % device)
|
|||
|
|
else:
|
|||
|
|
- print("%-6d" % num + run.ljust(8) + "\033[0;34mNotRun \033[0m" \
|
|||
|
|
+ print("%-6d" % num + run.ljust(8) + "\033[0;34mNotRun \033[0m"
|
|||
|
|
+ name.ljust(14) + "%s" % device)
|
|||
|
|
|
|||
|
|
def choose_tests(self):
|
|||
|
|
@@ -408,19 +415,20 @@
|
|||
|
|
else:
|
|||
|
|
test["run"] = True
|
|||
|
|
os.system("clear")
|
|||
|
|
- print("These tests are recommended to complete the compatibility test:")
|
|||
|
|
+ print("These tests are recommended to "
|
|||
|
|
+ "complete the compatibility test:")
|
|||
|
|
self.show_tests()
|
|||
|
|
- action = self.ui.prompt("Ready to begin testing?", ["run", "edit", "quit"])
|
|||
|
|
+ action = self.ui.prompt("Ready to begin testing?",
|
|||
|
|
+ ["run", "edit", "quit"])
|
|||
|
|
action = action.lower()
|
|||
|
|
if action in ["r", "run"]:
|
|||
|
|
return True
|
|||
|
|
- elif action in ["q", "quit"]:
|
|||
|
|
+ if action in ["q", "quit"]:
|
|||
|
|
return False
|
|||
|
|
- elif action in ["e", "edit"]:
|
|||
|
|
+ if action in ["e", "edit"]:
|
|||
|
|
return self.edit_tests()
|
|||
|
|
- else:
|
|||
|
|
- print("Invalid choice!")
|
|||
|
|
- return self.choose_tests()
|
|||
|
|
+ print("Invalid choice!")
|
|||
|
|
+ return self.choose_tests()
|
|||
|
|
|
|||
|
|
def check_result(self):
|
|||
|
|
"""
|
|||
|
|
@@ -443,15 +451,16 @@
|
|||
|
|
if not self.test_factory:
|
|||
|
|
self.test_factory = test_factory
|
|||
|
|
else:
|
|||
|
|
- factory_changed = False
|
|||
|
|
for test in self.test_factory:
|
|||
|
|
if not self.search_factory(test, test_factory):
|
|||
|
|
self.test_factory.remove(test)
|
|||
|
|
- print("delete %s test %s" % (test["name"], test["device"].get_name()))
|
|||
|
|
+ print("delete %s test %s" % (test["name"],
|
|||
|
|
+ test["device"].get_name()))
|
|||
|
|
for test in test_factory:
|
|||
|
|
if not self.search_factory(test, self.test_factory):
|
|||
|
|
self.test_factory.append(test)
|
|||
|
|
- print("add %s test %s" % (test["name"], test["device"].get_name()))
|
|||
|
|
+ print("add %s test %s" % (test["name"],
|
|||
|
|
+ test["device"].get_name()))
|
|||
|
|
self.test_factory.sort(key=lambda k: k["name"])
|
|||
|
|
FactoryDocument(CertEnv.factoryfile, self.test_factory).save()
|
|||
|
|
|
|||
|
|
@@ -463,6 +472,7 @@
|
|||
|
|
:return:
|
|||
|
|
"""
|
|||
|
|
for test in test_factory:
|
|||
|
|
- if test["name"] == obj_test["name"] and test["device"].path == obj_test["device"].path:
|
|||
|
|
+ if test["name"] == obj_test["name"] and \
|
|||
|
|
+ test["device"].path == obj_test["device"].path:
|
|||
|
|
return True
|
|||
|
|
return False
|
|||
|
|
diff -urN oec-hardware/hwcompatible/device.py oec-hardware_new/hwcompatible/device.py
|
|||
|
|
--- oec-hardware/hwcompatible/device.py 2021-09-13 11:43:59.390364522 +0800
|
|||
|
|
+++ oec-hardware_new/hwcompatible/device.py 2021-09-13 11:42:03.381474028 +0800
|
|||
|
|
@@ -12,7 +12,7 @@
|
|||
|
|
# See the Mulan PSL v2 for more details.
|
|||
|
|
# Create: 2020-04-01
|
|||
|
|
|
|||
|
|
-from .command import Command, CertCommandError
|
|||
|
|
+from .command import Command
|
|||
|
|
|
|||
|
|
|
|||
|
|
def filter_char(string):
|
|||
|
|
@@ -25,8 +25,8 @@
|
|||
|
|
filtered = u''
|
|||
|
|
start = 0
|
|||
|
|
for i in range(len(string)):
|
|||
|
|
- c = string[i]
|
|||
|
|
- if c in ascii_blacklist or (type(string) != unicode and ord(c) >= 128):
|
|||
|
|
+ char_filter = string[i]
|
|||
|
|
+ if char_filter in ascii_blacklist or (type(string) != unicode and ord(char_filter) >= 128):
|
|||
|
|
if start < i:
|
|||
|
|
filtered += string[start:i]
|
|||
|
|
start = i + 1
|
|||
|
|
@@ -110,10 +110,8 @@
|
|||
|
|
"""
|
|||
|
|
if "INTERFACE" in self.properties.keys():
|
|||
|
|
return self.properties["INTERFACE"]
|
|||
|
|
- elif "DEVNAME" in self.properties.keys():
|
|||
|
|
+ if "DEVNAME" in self.properties.keys():
|
|||
|
|
return self.properties["DEVNAME"].split("/")[-1]
|
|||
|
|
- elif self.path:
|
|||
|
|
+ if self.path:
|
|||
|
|
return self.path.split("/")[-1]
|
|||
|
|
- else:
|
|||
|
|
- return ""
|
|||
|
|
-
|
|||
|
|
+ return ""
|
|||
|
|
diff -urN oec-hardware/hwcompatible/document.py oec-hardware_new/hwcompatible/document.py
|
|||
|
|
--- oec-hardware/hwcompatible/document.py 2021-09-13 11:43:59.390364522 +0800
|
|||
|
|
+++ oec-hardware_new/hwcompatible/document.py 2021-09-13 11:42:03.381474028 +0800
|
|||
|
|
@@ -12,8 +12,9 @@
|
|||
|
|
# See the Mulan PSL v2 for more details.
|
|||
|
|
# Create: 2020-04-01
|
|||
|
|
|
|||
|
|
-import json
|
|||
|
|
+"""Document processing"""
|
|||
|
|
|
|||
|
|
+import json
|
|||
|
|
from .commandUI import CommandUI
|
|||
|
|
from .command import Command
|
|||
|
|
from .device import Device
|
|||
|
|
@@ -33,23 +34,25 @@
|
|||
|
|
print("doc new")
|
|||
|
|
|
|||
|
|
def save(self):
|
|||
|
|
+ """save file"""
|
|||
|
|
try:
|
|||
|
|
with open(self.filename, "w+") as save_f:
|
|||
|
|
json.dump(self.document, save_f, indent=4)
|
|||
|
|
save_f.close()
|
|||
|
|
- except Exception as e:
|
|||
|
|
+ except Exception as concrete_error:
|
|||
|
|
print("Error: doc save fail.")
|
|||
|
|
- print(e)
|
|||
|
|
+ print(concrete_error)
|
|||
|
|
return False
|
|||
|
|
return True
|
|||
|
|
|
|||
|
|
def load(self):
|
|||
|
|
+ """load file"""
|
|||
|
|
try:
|
|||
|
|
with open(self.filename, "r") as load_f:
|
|||
|
|
self.document = json.load(load_f)
|
|||
|
|
load_f.close()
|
|||
|
|
return True
|
|||
|
|
- except:
|
|||
|
|
+ except Exception:
|
|||
|
|
return False
|
|||
|
|
|
|||
|
|
|
|||
|
|
@@ -86,33 +89,53 @@
|
|||
|
|
self.document[key] = value
|
|||
|
|
else:
|
|||
|
|
break
|
|||
|
|
- except Exception as e:
|
|||
|
|
+ except Exception as concrete_error:
|
|||
|
|
print("Error: get hardware info fail.")
|
|||
|
|
- print(e)
|
|||
|
|
+ print(concrete_error)
|
|||
|
|
|
|||
|
|
sysinfo = SysInfo(CertEnv.releasefile)
|
|||
|
|
self.document["OS"] = sysinfo.product + " " + sysinfo.get_version()
|
|||
|
|
self.document["kernel"] = sysinfo.kernel
|
|||
|
|
self.document["ID"] = CommandUI().prompt("Please provide your Compatibility Test ID:")
|
|||
|
|
self.document["Product URL"] = CommandUI().prompt("Please provide your Product URL:")
|
|||
|
|
- self.document["server"] = CommandUI().prompt("Please provide the Compatibility Test Server (Hostname or Ipaddr):")
|
|||
|
|
+ self.document["server"] = CommandUI().prompt("Please provide the Compatibility Test "
|
|||
|
|
+ "Server (Hostname or Ipaddr):")
|
|||
|
|
|
|||
|
|
def get_hardware(self):
|
|||
|
|
- return self.document["Manufacturer"] + " " + self.document["Product Name"] + " " + self.document["Version"]
|
|||
|
|
+ """
|
|||
|
|
+ Get hardware information
|
|||
|
|
+ """
|
|||
|
|
+ return self.document["Manufacturer"] + " " + self.document["Product Name"] + " " \
|
|||
|
|
+ + self.document["Version"]
|
|||
|
|
|
|||
|
|
def get_os(self):
|
|||
|
|
+ """
|
|||
|
|
+ Get os information
|
|||
|
|
+ """
|
|||
|
|
return self.document["OS"]
|
|||
|
|
|
|||
|
|
def get_server(self):
|
|||
|
|
+ """
|
|||
|
|
+ Get server information
|
|||
|
|
+ """
|
|||
|
|
return self.document["server"]
|
|||
|
|
|
|||
|
|
def get_url(self):
|
|||
|
|
+ """
|
|||
|
|
+ Get url
|
|||
|
|
+ """
|
|||
|
|
return self.document["Product URL"]
|
|||
|
|
|
|||
|
|
def get_certify(self):
|
|||
|
|
+ """
|
|||
|
|
+ Get certify
|
|||
|
|
+ """
|
|||
|
|
return self.document["ID"]
|
|||
|
|
|
|||
|
|
def get_kernel(self):
|
|||
|
|
+ """
|
|||
|
|
+ Get kernel information
|
|||
|
|
+ """
|
|||
|
|
return self.document["kernel"]
|
|||
|
|
|
|||
|
|
|
|||
|
|
@@ -179,17 +202,23 @@
|
|||
|
|
self.load()
|
|||
|
|
|
|||
|
|
def load(self):
|
|||
|
|
- fp = open(self.filename)
|
|||
|
|
- self.config = fp.readlines()
|
|||
|
|
+ """
|
|||
|
|
+ Load config file
|
|||
|
|
+ """
|
|||
|
|
+ fp_info = open(self.filename)
|
|||
|
|
+ self.config = fp_info.readlines()
|
|||
|
|
for line in self.config:
|
|||
|
|
if line.strip() and line.strip()[0] == "#":
|
|||
|
|
continue
|
|||
|
|
words = line.strip().split(" ")
|
|||
|
|
if words[0]:
|
|||
|
|
self.parameters[words[0]] = " ".join(words[1:])
|
|||
|
|
- fp.close()
|
|||
|
|
+ fp_info.close()
|
|||
|
|
|
|||
|
|
def get_parameter(self, name):
|
|||
|
|
+ """
|
|||
|
|
+ Get parameter
|
|||
|
|
+ """
|
|||
|
|
if self.parameters:
|
|||
|
|
try:
|
|||
|
|
return self.parameters[name]
|
|||
|
|
@@ -198,6 +227,9 @@
|
|||
|
|
return None
|
|||
|
|
|
|||
|
|
def dump(self):
|
|||
|
|
+ """
|
|||
|
|
+ Dump
|
|||
|
|
+ """
|
|||
|
|
for line in self.config:
|
|||
|
|
string = line.strip()
|
|||
|
|
if not string or string[0] == "#":
|
|||
|
|
@@ -205,6 +237,9 @@
|
|||
|
|
print(string)
|
|||
|
|
|
|||
|
|
def add_parameter(self, name, value):
|
|||
|
|
+ """
|
|||
|
|
+ add parameter
|
|||
|
|
+ """
|
|||
|
|
if not self.getParameter(name):
|
|||
|
|
self.parameters[name] = value
|
|||
|
|
self.config.append("%s %s\n" % (name, value))
|
|||
|
|
@@ -238,7 +273,7 @@
|
|||
|
|
Save the config property value to a file
|
|||
|
|
:return:
|
|||
|
|
"""
|
|||
|
|
- fp = open(self.filename, "w")
|
|||
|
|
+ fp_info = open(self.filename, "w")
|
|||
|
|
for line in self.config:
|
|||
|
|
- fp.write(line)
|
|||
|
|
- fp.close()
|
|||
|
|
+ fp_info.write(line)
|
|||
|
|
+ fp_info.close()
|
|||
|
|
diff -urN oec-hardware/hwcompatible/env.py oec-hardware_new/hwcompatible/env.py
|
|||
|
|
--- oec-hardware/hwcompatible/env.py 2021-09-13 11:43:59.390364522 +0800
|
|||
|
|
+++ oec-hardware_new/hwcompatible/env.py 2021-09-13 11:42:03.381474028 +0800
|
|||
|
|
@@ -12,6 +12,8 @@
|
|||
|
|
# See the Mulan PSL v2 for more details.
|
|||
|
|
# Create: 2020-04-01
|
|||
|
|
|
|||
|
|
+"""Certification file path"""
|
|||
|
|
+
|
|||
|
|
|
|||
|
|
class CertEnv:
|
|||
|
|
"""
|
|||
|
|
@@ -28,5 +30,3 @@
|
|||
|
|
logdirectoy = "/usr/share/oech/logs"
|
|||
|
|
resultdirectoy = "/usr/share/oech/lib/server/results"
|
|||
|
|
kernelinfo = "/usr/share/oech/kernelrelease.json"
|
|||
|
|
-
|
|||
|
|
-
|
|||
|
|
diff -urN oec-hardware/hwcompatible/job.py oec-hardware_new/hwcompatible/job.py
|
|||
|
|
--- oec-hardware/hwcompatible/job.py 2021-09-13 11:43:59.390364522 +0800
|
|||
|
|
+++ oec-hardware_new/hwcompatible/job.py 2021-09-13 11:42:03.381474028 +0800
|
|||
|
|
@@ -12,6 +12,8 @@
|
|||
|
|
# See the Mulan PSL v2 for more details.
|
|||
|
|
# Create: 2020-04-01
|
|||
|
|
|
|||
|
|
+"""Test task management"""
|
|||
|
|
+
|
|||
|
|
import os
|
|||
|
|
import sys
|
|||
|
|
import string
|
|||
|
|
@@ -26,7 +28,7 @@
|
|||
|
|
from .reboot import Reboot
|
|||
|
|
|
|||
|
|
|
|||
|
|
-class Job(object):
|
|||
|
|
+class Job():
|
|||
|
|
"""
|
|||
|
|
Test task management
|
|||
|
|
"""
|
|||
|
|
@@ -42,7 +44,7 @@
|
|||
|
|
self.test_factory = getattr(args, "test_factory", [])
|
|||
|
|
self.test_suite = []
|
|||
|
|
self.job_id = ''.join(random.sample(string.ascii_letters + string.digits, 10))
|
|||
|
|
- self.ui = CommandUI()
|
|||
|
|
+ self.com_ui = CommandUI()
|
|||
|
|
self.subtests_filter = getattr(args, "subtests_filter", None)
|
|||
|
|
|
|||
|
|
self.test_parameters = None
|
|||
|
|
@@ -74,9 +76,9 @@
|
|||
|
|
sys.path.insert(0, dirpath)
|
|||
|
|
try:
|
|||
|
|
module = __import__(testname, globals(), locals())
|
|||
|
|
- except Exception as e:
|
|||
|
|
+ except Exception as concrete_error:
|
|||
|
|
print("Error: module import failed for %s" % testname)
|
|||
|
|
- print(e)
|
|||
|
|
+ print(concrete_error)
|
|||
|
|
return None
|
|||
|
|
|
|||
|
|
for thing in dir(module):
|
|||
|
|
@@ -144,8 +146,8 @@
|
|||
|
|
try:
|
|||
|
|
cmd = Command("yum install -y " + " ".join(required_rpms))
|
|||
|
|
cmd.echo()
|
|||
|
|
- except CertCommandError as e:
|
|||
|
|
- print(e)
|
|||
|
|
+ except CertCommandError as concrete_error:
|
|||
|
|
+ print(concrete_error)
|
|||
|
|
print("Fail to install required packages.")
|
|||
|
|
return False
|
|||
|
|
|
|||
|
|
@@ -182,8 +184,8 @@
|
|||
|
|
return_code = test.test()
|
|||
|
|
else:
|
|||
|
|
return_code = test.test()
|
|||
|
|
- except Exception as e:
|
|||
|
|
- print(e)
|
|||
|
|
+ except Exception as concrete_error:
|
|||
|
|
+ print(concrete_error)
|
|||
|
|
return_code = False
|
|||
|
|
|
|||
|
|
if reboot:
|
|||
|
|
@@ -251,5 +253,6 @@
|
|||
|
|
"""
|
|||
|
|
for test in self.test_factory:
|
|||
|
|
for testcase in self.test_suite:
|
|||
|
|
- if test["name"] == testcase["name"] and test["device"].path == testcase["device"].path:
|
|||
|
|
+ if test["name"] == testcase["name"] and test["device"].path == \
|
|||
|
|
+ testcase["device"].path:
|
|||
|
|
test["status"] = testcase["status"]
|
|||
|
|
diff -urN oec-hardware/hwcompatible/log.py oec-hardware_new/hwcompatible/log.py
|
|||
|
|
--- oec-hardware/hwcompatible/log.py 2021-09-13 11:43:59.390364522 +0800
|
|||
|
|
+++ oec-hardware_new/hwcompatible/log.py 2021-09-13 11:42:03.381474028 +0800
|
|||
|
|
@@ -12,6 +12,8 @@
|
|||
|
|
# See the Mulan PSL v2 for more details.
|
|||
|
|
# Create: 2020-04-01
|
|||
|
|
|
|||
|
|
+"""Log management"""
|
|||
|
|
+
|
|||
|
|
import os
|
|||
|
|
import sys
|
|||
|
|
import datetime
|
|||
|
|
diff -urN oec-hardware/hwcompatible/reboot.py oec-hardware_new/hwcompatible/reboot.py
|
|||
|
|
--- oec-hardware/hwcompatible/reboot.py 2021-09-13 11:43:59.390364522 +0800
|
|||
|
|
+++ oec-hardware_new/hwcompatible/reboot.py 2021-09-13 11:42:03.381474028 +0800
|
|||
|
|
@@ -12,7 +12,10 @@
|
|||
|
|
# See the Mulan PSL v2 for more details.
|
|||
|
|
# Create: 2020-04-01
|
|||
|
|
|
|||
|
|
+"""Special for restart tasks, so that the test can be continued after the machine is restarted"""
|
|||
|
|
+
|
|||
|
|
import datetime
|
|||
|
|
+import os
|
|||
|
|
|
|||
|
|
from .document import Document, FactoryDocument
|
|||
|
|
from .env import CertEnv
|
|||
|
|
@@ -73,7 +76,7 @@
|
|||
|
|
try:
|
|||
|
|
Command("systemctl daemon-reload").run_quiet()
|
|||
|
|
Command("systemctl enable oech").run_quiet()
|
|||
|
|
- except:
|
|||
|
|
+ except Exception:
|
|||
|
|
print("Error: enable oech.service fail.")
|
|||
|
|
return False
|
|||
|
|
|
|||
|
|
@@ -85,17 +88,20 @@
|
|||
|
|
:return:
|
|||
|
|
"""
|
|||
|
|
doc = Document(CertEnv.rebootfile)
|
|||
|
|
- if not doc.load():
|
|||
|
|
- print("Error: reboot file load fail.")
|
|||
|
|
+ if os.path.exists(CertEnv.rebootfile):
|
|||
|
|
+ if not doc.load():
|
|||
|
|
+ print("Error: reboot111 file load fail.")
|
|||
|
|
+ return False
|
|||
|
|
+ else:
|
|||
|
|
return False
|
|||
|
|
-
|
|||
|
|
+
|
|||
|
|
try:
|
|||
|
|
self.testname = doc.document["test"]
|
|||
|
|
self.reboot = doc.document
|
|||
|
|
self.job.job_id = self.reboot["job_id"]
|
|||
|
|
self.job.subtests_filter = self.reboot["rebootup"]
|
|||
|
|
time_reboot = datetime.datetime.strptime(self.reboot["time"], "%Y%m%d%H%M%S")
|
|||
|
|
- except:
|
|||
|
|
+ except Exception:
|
|||
|
|
print("Error: reboot file format not as expect.")
|
|||
|
|
return False
|
|||
|
|
|
|||
|
|
@@ -108,4 +114,3 @@
|
|||
|
|
return False
|
|||
|
|
|
|||
|
|
return True
|
|||
|
|
-
|
|||
|
|
diff -urN oec-hardware/hwcompatible/sysinfo.py oec-hardware_new/hwcompatible/sysinfo.py
|
|||
|
|
--- oec-hardware/hwcompatible/sysinfo.py 2021-09-13 11:43:59.390364522 +0800
|
|||
|
|
+++ oec-hardware_new/hwcompatible/sysinfo.py 2021-09-13 11:42:03.381474028 +0800
|
|||
|
|
@@ -12,6 +12,8 @@
|
|||
|
|
# See the Mulan PSL v2 for more details.
|
|||
|
|
# Create: 2020-04-01
|
|||
|
|
|
|||
|
|
+"""Get system information"""
|
|||
|
|
+
|
|||
|
|
import os
|
|||
|
|
import re
|
|||
|
|
|
|||
|
|
@@ -40,10 +42,10 @@
|
|||
|
|
:return:
|
|||
|
|
"""
|
|||
|
|
try:
|
|||
|
|
- f = open(filename)
|
|||
|
|
- text = f.read()
|
|||
|
|
- f.close()
|
|||
|
|
- except:
|
|||
|
|
+ file_content = open(filename)
|
|||
|
|
+ text = file_content.read()
|
|||
|
|
+ file_content.close()
|
|||
|
|
+ except Exception:
|
|||
|
|
print("Release file not found.")
|
|||
|
|
return
|
|||
|
|
|
|||
|
|
@@ -56,12 +58,12 @@
|
|||
|
|
results = pattern.findall(text)
|
|||
|
|
self.version = results[0].strip() if results else ""
|
|||
|
|
|
|||
|
|
- with os.popen('uname -m') as p:
|
|||
|
|
- self.arch = p.readline().strip()
|
|||
|
|
+ with os.popen('uname -m') as pop:
|
|||
|
|
+ self.arch = pop.readline().strip()
|
|||
|
|
self.debug_kernel = "debug" in self.arch
|
|||
|
|
|
|||
|
|
- with os.popen('uname -r') as p:
|
|||
|
|
- self.kernel = p.readline().strip()
|
|||
|
|
+ with os.popen('uname -r') as pop:
|
|||
|
|
+ self.kernel = pop.readline().strip()
|
|||
|
|
self.kernel_rpm = "kernel-{}".format(self.kernel)
|
|||
|
|
self.kerneldevel_rpm = "kernel-devel-{}".format(self.kernel)
|
|||
|
|
self.kernel_version = self.kernel.split('-')[0]
|
|||
|
|
@@ -72,4 +74,3 @@
|
|||
|
|
:return:
|
|||
|
|
"""
|
|||
|
|
return self.version
|
|||
|
|
-
|
|||
|
|
diff -urN oec-hardware/hwcompatible/test.py oec-hardware_new/hwcompatible/test.py
|
|||
|
|
--- oec-hardware/hwcompatible/test.py 2021-09-13 11:43:59.390364522 +0800
|
|||
|
|
+++ oec-hardware_new/hwcompatible/test.py 2021-09-13 11:42:03.381474028 +0800
|
|||
|
|
@@ -12,6 +12,8 @@
|
|||
|
|
# See the Mulan PSL v2 for more details.
|
|||
|
|
# Create: 2020-04-01
|
|||
|
|
|
|||
|
|
+"""Test set template"""
|
|||
|
|
+
|
|||
|
|
|
|||
|
|
class Test:
|
|||
|
|
"""
|
|||
|
|
@@ -24,7 +26,13 @@
|
|||
|
|
self.rebootup = None
|
|||
|
|
|
|||
|
|
def setup(self, args=None):
|
|||
|
|
+ """
|
|||
|
|
+ setup
|
|||
|
|
+ """
|
|||
|
|
pass
|
|||
|
|
|
|||
|
|
def teardown(self):
|
|||
|
|
+ """
|
|||
|
|
+ teardown
|
|||
|
|
+ """
|
|||
|
|
pass
|
|||
|
|
diff -urN oec-hardware/hwcompatible/version.py oec-hardware_new/hwcompatible/version.py
|
|||
|
|
--- oec-hardware/hwcompatible/version.py 1970-01-01 08:00:00.000000000 +0800
|
|||
|
|
+++ oec-hardware_new/hwcompatible/version.py 2021-09-13 11:42:03.381474028 +0800
|
|||
|
|
@@ -0,0 +1,3 @@
|
|||
|
|
+# hwcompatible/version.py is automatically-generated
|
|||
|
|
+version = ''
|
|||
|
|
+name = 'oec-hardware'
|
|||
|
|
diff -urN oec-hardware/README.md oec-hardware_new/README.md
|
|||
|
|
--- oec-hardware/README.md 2021-09-13 11:43:59.390364522 +0800
|
|||
|
|
+++ oec-hardware_new/README.md 2021-09-13 11:43:06.821961002 +0800
|
|||
|
|
@@ -31,15 +31,15 @@
|
|||
|
|
|
|||
|
|
## 背景介绍
|
|||
|
|
|
|||
|
|
-OS 厂商为了扩大自己产品的兼容性范围,常常寻求与硬件厂商的合作,进行兼容性测试。OS 厂商制定一个测试标准,并提供测试用例,硬件厂商进行实际的测试,测试通过后,OS 厂商和硬件厂商将共同对结果负责。这是一个双赢的合作,双方都可以藉此推销自己的产品。
|
|||
|
|
+OS 厂商为了扩大自己产品的兼容性范围,常常寻求与硬件厂商的合作,进行兼容性测试。OS 厂商制定一个测试标准,并提供测试用例,硬件厂商进行实际的测试。测试通过后,OS 厂商和硬件厂商将共同在对应的官网发布兼容性信息。
|
|||
|
|
|
|||
|
|
-验证目的就是保证 OS 与硬件平台的兼容性,认证仅限于基本功能验证,不包括性能测试等其它测试。
|
|||
|
|
+验证目的就是保证 OS 与硬件平台的兼容性,验证仅限于基本功能验证,不包括性能测试等其它测试。
|
|||
|
|
|
|||
|
|
openEuler硬件兼容性验证测试框架有如下特点:
|
|||
|
|
|
|||
|
|
1. 为满足可信要求,必须使用openEuler操作系统,不能随意重编/插入内核模块。
|
|||
|
|
2. 通过扫描机制自适应发现硬件列表,来确定要运行的测试用例集合。
|
|||
|
|
-3. 面向对象抽象各种硬件类型以及测试用例类,用于扩展开发。
|
|||
|
|
+3. 面向对象抽象各种硬件类型以及测试用例类,用于扩展开发。
|
|||
|
|
|
|||
|
|
## 原理简介
|
|||
|
|
|
|||
|
|
@@ -100,33 +100,19 @@
|
|||
|
|
|
|||
|
|
## 获取安装包
|
|||
|
|
|
|||
|
|
-* 安装包从 openEuler 官方网站下载(暂未开放)。
|
|||
|
|
-
|
|||
|
|
-* 校验安装包的完整性。
|
|||
|
|
-
|
|||
|
|
- 1. 获取校验文件中的校验值:
|
|||
|
|
-
|
|||
|
|
- ```
|
|||
|
|
- cat oec-hardware-*.rpm.sha256sum
|
|||
|
|
- ```
|
|||
|
|
-
|
|||
|
|
- 2. 计算文件的 sha256 校验值:
|
|||
|
|
-
|
|||
|
|
- ```
|
|||
|
|
- sha256sum oec-hardware-*.rpm
|
|||
|
|
- ```
|
|||
|
|
-
|
|||
|
|
- 命令执行完成后,输出校验值。
|
|||
|
|
-
|
|||
|
|
- 3. 对比步骤1和步骤2计算的校验值是否一致。
|
|||
|
|
-
|
|||
|
|
- 如果校验值一致说明安装文件完整性没有破坏,如果校验值不一致则可以确认文件完整性已被破坏,需要重新获取。
|
|||
|
|
+https://gitee.com/src-openeuler/oec-hardware/releases
|
|||
|
|
|
|||
|
|
## 安装过程
|
|||
|
|
|
|||
|
|
### 客户端
|
|||
|
|
|
|||
|
|
-1. 配置 [openEuler 官方 repo](https://repo.openeuler.org/) 中对应版本的 everything 源,使用 `dnf` 安装客户端 oec-hardware。
|
|||
|
|
+1. 安装 memtester 依赖工具。
|
|||
|
|
+
|
|||
|
|
+ ```
|
|||
|
|
+ dnf install memtester-4.3.0-18.fc33.aarch64(x86_64).rpm
|
|||
|
|
+ ```
|
|||
|
|
+
|
|||
|
|
+2. 配置 [openEuler 官方 repo](https://repo.openeuler.org/) 中对应版本的 everything 源,使用 `dnf` 安装客户端 oec-hardware。
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
dnf install oec-hardware-XXX.rpm
|
|||
|
|
@@ -277,7 +263,6 @@
|
|||
|
|
|
|||
|
|
1. **system**
|
|||
|
|
|
|||
|
|
- 注意:在安装openEuler系统的时候,非最小安装会引入kmod-kvdo模块,此模块会修改内核,导致system测试项"检测内核是否被修改"不过。若非有意引入,可卸载该模块。
|
|||
|
|
- 检查本工具是否被修改。
|
|||
|
|
- 检查 OS 版本和 kernel 版本是否匹配。
|
|||
|
|
- 检查内核是否被修改/感染。
|
|||
|
|
diff -urN oec-hardware/scripts/oech oec-hardware_new/scripts/oech
|
|||
|
|
--- oec-hardware/scripts/oech 2021-09-13 11:43:59.390364522 +0800
|
|||
|
|
+++ oec-hardware_new/scripts/oech 2021-09-13 11:42:03.409474243 +0800
|
|||
|
|
@@ -12,6 +12,8 @@
|
|||
|
|
# See the Mulan PSL v2 for more details.
|
|||
|
|
# Create: 2020-04-01
|
|||
|
|
|
|||
|
|
+"""Operation of client """
|
|||
|
|
+
|
|||
|
|
import os
|
|||
|
|
import sys
|
|||
|
|
import fcntl
|
|||
|
|
@@ -25,22 +27,31 @@
|
|||
|
|
|
|||
|
|
|
|||
|
|
class CertLock:
|
|||
|
|
+ """
|
|||
|
|
+ certlock
|
|||
|
|
+ """
|
|||
|
|
def __init__(self, filename):
|
|||
|
|
self.filename = filename
|
|||
|
|
- self.fd = open(filename, 'w')
|
|||
|
|
+ self.fd_obj = open(filename, 'w')
|
|||
|
|
|
|||
|
|
def acquire(self):
|
|||
|
|
+ """
|
|||
|
|
+ acquire
|
|||
|
|
+ """
|
|||
|
|
try:
|
|||
|
|
- fcntl.flock(self.fd, fcntl.LOCK_EX|fcntl.LOCK_NB)
|
|||
|
|
+ fcntl.flock(self.fd_obj, fcntl.LOCK_EX|fcntl.LOCK_NB)
|
|||
|
|
return True
|
|||
|
|
except IOError:
|
|||
|
|
return False
|
|||
|
|
|
|||
|
|
def release(self):
|
|||
|
|
- fcntl.flock(self.fd, fcntl.LOCK_UN)
|
|||
|
|
+ """
|
|||
|
|
+ release
|
|||
|
|
+ """
|
|||
|
|
+ fcntl.flock(self.fd_obj, fcntl.LOCK_UN)
|
|||
|
|
|
|||
|
|
def __del__(self):
|
|||
|
|
- self.fd.close()
|
|||
|
|
+ self.fd_obj.close()
|
|||
|
|
|
|||
|
|
|
|||
|
|
if __name__ == '__main__':
|
|||
|
|
@@ -80,4 +91,3 @@
|
|||
|
|
|
|||
|
|
lock.release()
|
|||
|
|
sys.exit(0)
|
|||
|
|
-
|
|||
|
|
diff -urN oec-hardware/scripts/oech-server.service oec-hardware_new/scripts/oech-server.service
|
|||
|
|
--- oec-hardware/scripts/oech-server.service 2021-09-13 11:43:59.390364522 +0800
|
|||
|
|
+++ oec-hardware_new/scripts/oech-server.service 2021-09-13 11:42:03.409474243 +0800
|
|||
|
|
@@ -6,6 +6,8 @@
|
|||
|
|
Type=notify
|
|||
|
|
ExecStartPre=/usr/share/oech/lib/server/oech-server-pre.sh
|
|||
|
|
ExecStart=/usr/local/bin/uwsgi --ini /usr/share/oech/lib/server/uwsgi.ini
|
|||
|
|
+ExecStop=/usr/local/bin/uwsgi --stop /usr/share/oech/lib/server/uwsgi.pid
|
|||
|
|
+
|
|||
|
|
|
|||
|
|
[Install]
|
|||
|
|
WantedBy=multi-user.target
|
|||
|
|
diff -urN oec-hardware/server/server.py oec-hardware_new/server/server.py
|
|||
|
|
--- oec-hardware/server/server.py 2021-09-13 11:43:59.394364553 +0800
|
|||
|
|
+++ oec-hardware_new/server/server.py 2021-09-13 11:42:03.409474243 +0800
|
|||
|
|
@@ -12,6 +12,8 @@
|
|||
|
|
# See the Mulan PSL v2 for more details.
|
|||
|
|
# Create: 2020-04-01
|
|||
|
|
|
|||
|
|
+"""server"""
|
|||
|
|
+
|
|||
|
|
import os
|
|||
|
|
import json
|
|||
|
|
import time
|
|||
|
|
@@ -40,27 +42,42 @@
|
|||
|
|
|
|||
|
|
|
|||
|
|
@app.errorhandler(400)
|
|||
|
|
-def bad_request(e):
|
|||
|
|
+def bad_request():
|
|||
|
|
+ """
|
|||
|
|
+ bad request
|
|||
|
|
+ """
|
|||
|
|
return render_template('error.html', error='400 - Bad Request'), 400
|
|||
|
|
|
|||
|
|
|
|||
|
|
@app.errorhandler(404)
|
|||
|
|
def page_not_found(e):
|
|||
|
|
+ """
|
|||
|
|
+ page not fount
|
|||
|
|
+ """
|
|||
|
|
return render_template('error.html', error='404 - Page Not Found'), 404
|
|||
|
|
|
|||
|
|
|
|||
|
|
@app.errorhandler(500)
|
|||
|
|
def internal_server_error(e):
|
|||
|
|
+ """
|
|||
|
|
+ internal server error
|
|||
|
|
+ """
|
|||
|
|
return render_template('error.html', error='500 - Internal Server Error'), 500
|
|||
|
|
|
|||
|
|
|
|||
|
|
@app.route('/')
|
|||
|
|
def index():
|
|||
|
|
+ """
|
|||
|
|
+ index
|
|||
|
|
+ """
|
|||
|
|
return render_template('index.html')
|
|||
|
|
|
|||
|
|
|
|||
|
|
@app.route('/results')
|
|||
|
|
def get_results():
|
|||
|
|
+ """
|
|||
|
|
+ get results
|
|||
|
|
+ """
|
|||
|
|
results = {}
|
|||
|
|
for host in next(os.walk(dir_results))[1]:
|
|||
|
|
dir_host = os.path.join(dir_results, host)
|
|||
|
|
@@ -85,11 +102,11 @@
|
|||
|
|
json_info = os.path.join(dir_job, 'compatibility.json')
|
|||
|
|
json_results = os.path.join(dir_job, 'factory.json')
|
|||
|
|
try:
|
|||
|
|
- with open(json_info, 'r') as f:
|
|||
|
|
- info = json.load(f)
|
|||
|
|
- with open(json_results, 'r') as f:
|
|||
|
|
- results = json.load(f)
|
|||
|
|
- except Exception as e:
|
|||
|
|
+ with open(json_info, 'r') as file_content:
|
|||
|
|
+ info = json.load(file_content)
|
|||
|
|
+ with open(json_results, 'r') as file_content:
|
|||
|
|
+ results = json.load(file_content)
|
|||
|
|
+ except Exception:
|
|||
|
|
abort(404)
|
|||
|
|
return render_template('job.html', host=host, id=oec_id, job=job, info=info, results=results)
|
|||
|
|
|
|||
|
|
@@ -107,9 +124,9 @@
|
|||
|
|
dir_job = os.path.join(dir_results, host, oec_id, job)
|
|||
|
|
json_results = os.path.join(dir_job, 'factory.json')
|
|||
|
|
try:
|
|||
|
|
- with open(json_results, 'r') as f:
|
|||
|
|
- results = json.load(f)
|
|||
|
|
- except Exception as e:
|
|||
|
|
+ with open(json_results, 'r') as file_content:
|
|||
|
|
+ results = json.load(file_content)
|
|||
|
|
+ except Exception:
|
|||
|
|
abort(404)
|
|||
|
|
for testcase in results:
|
|||
|
|
device = testcase.get('device')
|
|||
|
|
@@ -131,9 +148,9 @@
|
|||
|
|
dir_job = os.path.join(dir_results, host, oec_id, job)
|
|||
|
|
json_devices = os.path.join(dir_job, 'device.json')
|
|||
|
|
try:
|
|||
|
|
- with open(json_devices, 'r') as f:
|
|||
|
|
- devices = json.load(f)
|
|||
|
|
- except Exception as e:
|
|||
|
|
+ with open(json_devices, 'r') as file_content:
|
|||
|
|
+ devices = json.load(file_content)
|
|||
|
|
+ except Exception:
|
|||
|
|
abort(404)
|
|||
|
|
return render_template('devices.html', devices=devices)
|
|||
|
|
|
|||
|
|
@@ -169,9 +186,9 @@
|
|||
|
|
if not os.path.exists(logpath):
|
|||
|
|
logpath = os.path.join(dir_job, 'job.log')
|
|||
|
|
try:
|
|||
|
|
- with open(logpath, 'r') as f:
|
|||
|
|
- log = f.read().split('\n')
|
|||
|
|
- except Exception as e:
|
|||
|
|
+ with open(logpath, 'r') as file_content:
|
|||
|
|
+ log = file_content.read().split('\n')
|
|||
|
|
+ except Exception:
|
|||
|
|
abort(404)
|
|||
|
|
return render_template('log.html', name=name, log=log)
|
|||
|
|
|
|||
|
|
@@ -189,12 +206,12 @@
|
|||
|
|
tar_job = dir_job + '.tar.gz'
|
|||
|
|
json_cert = os.path.join(dir_job, 'compatibility.json')
|
|||
|
|
try:
|
|||
|
|
- with open(json_cert, 'r') as f:
|
|||
|
|
- cert = json.load(f)
|
|||
|
|
- with open(tar_job, 'rb') as f:
|
|||
|
|
- attachment = base64.b64encode(f.read())
|
|||
|
|
- except Exception as e:
|
|||
|
|
- print(e)
|
|||
|
|
+ with open(json_cert, 'r') as file_content:
|
|||
|
|
+ cert = json.load(file_content)
|
|||
|
|
+ with open(tar_job, 'rb') as file_content:
|
|||
|
|
+ attachment = base64.b64encode(file_content.read())
|
|||
|
|
+ except Exception as concrete_error:
|
|||
|
|
+ print(concrete_error)
|
|||
|
|
abort(500)
|
|||
|
|
|
|||
|
|
form = {}
|
|||
|
|
@@ -211,9 +228,9 @@
|
|||
|
|
try:
|
|||
|
|
req = Request(url, data=data, headers=headers)
|
|||
|
|
res = urlopen(req)
|
|||
|
|
- except HTTPError as e:
|
|||
|
|
- print(e)
|
|||
|
|
- res = e
|
|||
|
|
+ except HTTPError as concrete_error:
|
|||
|
|
+ print(concrete_error)
|
|||
|
|
+ res = concrete_error
|
|||
|
|
|
|||
|
|
if res.code == 200:
|
|||
|
|
flash('Submit Successful', 'success')
|
|||
|
|
@@ -242,11 +259,11 @@
|
|||
|
|
if not os.path.exists(dir_job):
|
|||
|
|
os.makedirs(dir_job)
|
|||
|
|
try:
|
|||
|
|
- with open(tar_job, 'wb') as f:
|
|||
|
|
- f.write(base64.b64decode(filetext))
|
|||
|
|
+ with open(tar_job, 'wb') as file_content:
|
|||
|
|
+ file_content.write(base64.b64decode(filetext))
|
|||
|
|
os.system("tar xf '%s' -C '%s'" % (tar_job, os.path.dirname(dir_job)))
|
|||
|
|
- except Exception as e:
|
|||
|
|
- print(e)
|
|||
|
|
+ except Exception as concrete_error:
|
|||
|
|
+ print(concrete_error)
|
|||
|
|
abort(400)
|
|||
|
|
return render_template('upload.html', host=host, id=oec_id, job=job,
|
|||
|
|
filetext=filetext, ret='Successful')
|
|||
|
|
@@ -254,17 +271,26 @@
|
|||
|
|
|
|||
|
|
@app.route('/files')
|
|||
|
|
def get_files():
|
|||
|
|
+ """
|
|||
|
|
+ get files
|
|||
|
|
+ """
|
|||
|
|
files = os.listdir(dir_files)
|
|||
|
|
return render_template('files.html', files=files)
|
|||
|
|
|
|||
|
|
|
|||
|
|
@app.route('/files/<path:path>')
|
|||
|
|
def download_file(path):
|
|||
|
|
+ """
|
|||
|
|
+ download file
|
|||
|
|
+ """
|
|||
|
|
return send_from_directory('files', path, as_attachment=True)
|
|||
|
|
|
|||
|
|
|
|||
|
|
@app.route('/api/file/upload', methods=['GET', 'POST'])
|
|||
|
|
def upload_file():
|
|||
|
|
+ """
|
|||
|
|
+ upload_file
|
|||
|
|
+ """
|
|||
|
|
filename = request.values.get('filename', '')
|
|||
|
|
filetext = request.values.get('filetext', '')
|
|||
|
|
if not(all([filename, filetext])):
|
|||
|
|
@@ -275,10 +301,10 @@
|
|||
|
|
if not os.path.exists(dir_files):
|
|||
|
|
os.makedirs(dir_files)
|
|||
|
|
try:
|
|||
|
|
- with open(filepath, 'wb') as f:
|
|||
|
|
- f.write(base64.b64decode(filetext))
|
|||
|
|
- except Exception as e:
|
|||
|
|
- print(e)
|
|||
|
|
+ with open(filepath, 'wb') as file_content:
|
|||
|
|
+ file_content.write(base64.b64decode(filetext))
|
|||
|
|
+ except Exception as concrete_error:
|
|||
|
|
+ print(concrete_error)
|
|||
|
|
abort(400)
|
|||
|
|
return render_template('upload.html', filename=filename, filetext=filetext,
|
|||
|
|
ret='Successful')
|
|||
|
|
@@ -286,6 +312,9 @@
|
|||
|
|
|
|||
|
|
@app.route('/api/<act>', methods=['GET', 'POST'])
|
|||
|
|
def test_server(act):
|
|||
|
|
+ """
|
|||
|
|
+ test server
|
|||
|
|
+ """
|
|||
|
|
valid_commands = ['rping', 'rcopy', 'ib_read_bw', 'ib_write_bw', 'ib_send_bw',
|
|||
|
|
'qperf']
|
|||
|
|
cmd = request.values.get('cmd', '')
|
|||
|
|
@@ -295,7 +324,7 @@
|
|||
|
|
abort(400)
|
|||
|
|
|
|||
|
|
if act == 'start':
|
|||
|
|
- if 'rping' == cmd[0]:
|
|||
|
|
+ if cmd[0] == 'rping':
|
|||
|
|
cmd = ['rping', '-s']
|
|||
|
|
|
|||
|
|
if 'ib_' in cmd[0]:
|
|||
|
|
@@ -309,7 +338,7 @@
|
|||
|
|
abort(400)
|
|||
|
|
cmd.extend(['-d', ibdev, '-i', ibport])
|
|||
|
|
elif act == 'stop':
|
|||
|
|
- if 'all' == cmd[0]:
|
|||
|
|
+ if cmd[0] == 'all':
|
|||
|
|
cmd = ['killall', '-9'] + valid_commands
|
|||
|
|
else:
|
|||
|
|
cmd = ['killall', '-9', cmd[0]]
|
|||
|
|
@@ -351,11 +380,10 @@
|
|||
|
|
ibport = str(ibport)
|
|||
|
|
|
|||
|
|
return ibdev, ibport
|
|||
|
|
- except Exception as e:
|
|||
|
|
- print(e)
|
|||
|
|
+ except Exception as concrete_error:
|
|||
|
|
+ print(concrete_error)
|
|||
|
|
return None, None
|
|||
|
|
|
|||
|
|
|
|||
|
|
if __name__ == '__main__':
|
|||
|
|
app.run(host='0.0.0.0', port=80)
|
|||
|
|
-
|
|||
|
|
diff -urN oec-hardware/server/uwsgi.ini oec-hardware_new/server/uwsgi.ini
|
|||
|
|
--- oec-hardware/server/uwsgi.ini 2021-09-13 11:43:59.394364553 +0800
|
|||
|
|
+++ oec-hardware_new/server/uwsgi.ini 2021-09-13 11:42:03.409474243 +0800
|
|||
|
|
@@ -1,6 +1,11 @@
|
|||
|
|
[uwsgi]
|
|||
|
|
socket = 127.0.0.1:8080
|
|||
|
|
chdir = /usr/share/oech/lib/server
|
|||
|
|
-wsgi-file = server.py
|
|||
|
|
+wsgi-file = /usr/share/oech/lib/server/server.py
|
|||
|
|
callable = app
|
|||
|
|
processes = 4
|
|||
|
|
+pidfile = /usr/share/oech/lib/server/uwsgi.pid
|
|||
|
|
+master = true
|
|||
|
|
+buffer-size = 65536
|
|||
|
|
+
|
|||
|
|
+
|
|||
|
|
diff -urN oec-hardware/tests/acpi/acpi.py oec-hardware_new/tests/acpi/acpi.py
|
|||
|
|
--- oec-hardware/tests/acpi/acpi.py 2021-09-13 11:43:59.394364553 +0800
|
|||
|
|
+++ oec-hardware_new/tests/acpi/acpi.py 2021-09-13 11:42:03.409474243 +0800
|
|||
|
|
@@ -12,6 +12,8 @@
|
|||
|
|
# See the Mulan PSL v2 for more details.
|
|||
|
|
# Create: 2020-04-01
|
|||
|
|
|
|||
|
|
+"""acpi test"""
|
|||
|
|
+
|
|||
|
|
from hwcompatible.test import Test
|
|||
|
|
from hwcompatible.command import Command
|
|||
|
|
|
|||
|
|
@@ -25,9 +27,12 @@
|
|||
|
|
self.requirements = ["acpica-tools"]
|
|||
|
|
|
|||
|
|
def test(self):
|
|||
|
|
+ """
|
|||
|
|
+ start test
|
|||
|
|
+ """
|
|||
|
|
try:
|
|||
|
|
Command("acpidump").echo()
|
|||
|
|
return True
|
|||
|
|
- except Exception as e:
|
|||
|
|
- print(e)
|
|||
|
|
+ except Exception as concrete_error:
|
|||
|
|
+ print(concrete_error)
|
|||
|
|
return False
|
|||
|
|
diff -urN oec-hardware/tests/cdrom/cdrom.py oec-hardware_new/tests/cdrom/cdrom.py
|
|||
|
|
--- oec-hardware/tests/cdrom/cdrom.py 2021-09-13 11:43:59.394364553 +0800
|
|||
|
|
+++ oec-hardware_new/tests/cdrom/cdrom.py 2021-09-13 12:54:30.082712105 +0800
|
|||
|
|
@@ -12,6 +12,8 @@
|
|||
|
|
# See the Mulan PSL v2 for more details.
|
|||
|
|
# Create: 2020-04-01
|
|||
|
|
|
|||
|
|
+"""cdrom test"""
|
|||
|
|
+
|
|||
|
|
import os
|
|||
|
|
import sys
|
|||
|
|
import time
|
|||
|
|
@@ -34,7 +36,7 @@
|
|||
|
|
self.device = None
|
|||
|
|
self.type = None
|
|||
|
|
self.args = None
|
|||
|
|
- self.ui = CommandUI()
|
|||
|
|
+ self.com_ui = CommandUI()
|
|||
|
|
self.test_dir = "/usr/share/doc"
|
|||
|
|
|
|||
|
|
def setup(self, args=None):
|
|||
|
|
@@ -62,12 +64,13 @@
|
|||
|
|
devname = self.device.get_property("DEVNAME")
|
|||
|
|
Command("eject %s" % devname).run(ignore_errors=True)
|
|||
|
|
while True:
|
|||
|
|
- print("Please insert %s disc into %s, then close the tray manually." % (self.type.lower(), devname))
|
|||
|
|
+ print("Please insert %s disc into %s, then close the tray manually."\
|
|||
|
|
+ % (self.type.lower(), devname))
|
|||
|
|
if self.method == "write_test":
|
|||
|
|
print(" tips:disc should be new.")
|
|||
|
|
elif self.method == "read_test":
|
|||
|
|
print(" tips:disc should not be blank.")
|
|||
|
|
- if self.ui.prompt_confirm("Done well?"):
|
|||
|
|
+ if self.com_ui.prompt_confirm("Done well?"):
|
|||
|
|
break
|
|||
|
|
Command("eject -t %s" % devname).run(ignore_errors=True)
|
|||
|
|
print("Waiting media..).")
|
|||
|
|
@@ -86,7 +89,7 @@
|
|||
|
|
if not device:
|
|||
|
|
return None
|
|||
|
|
|
|||
|
|
- bd_types = ["BD_RE", "BD_R", "BD"]
|
|||
|
|
+ bd_types = ["BD_RE", "BD_R", "BD"]
|
|||
|
|
dvd_types = ["DVD_RW", "DVD_PLUS_RW", "DVD_R", "DVD_PLUS_R", "DVD"]
|
|||
|
|
cd_types = ["CD_RW", "CD_R", "CD"]
|
|||
|
|
for bd_type in bd_types:
|
|||
|
|
@@ -99,7 +102,7 @@
|
|||
|
|
if device.get_property("ID_CDROM_" + cd_type) == "1":
|
|||
|
|
return cd_type
|
|||
|
|
|
|||
|
|
- print("Can not find proper test-type for %s." % device.get_name())
|
|||
|
|
+ print("Can not find pr)oper test-type for %s." % device.get_name())
|
|||
|
|
return None
|
|||
|
|
|
|||
|
|
def get_mode(self, device_type):
|
|||
|
|
@@ -148,7 +151,7 @@
|
|||
|
|
self.reload_disc(devname)
|
|||
|
|
sys.stdout.flush()
|
|||
|
|
return self.write_test()
|
|||
|
|
- except CertCommandError as e:
|
|||
|
|
+ except CertCommandError:
|
|||
|
|
return False
|
|||
|
|
|
|||
|
|
def write_test(self):
|
|||
|
|
@@ -168,18 +171,20 @@
|
|||
|
|
write_opts = "-sao"
|
|||
|
|
try:
|
|||
|
|
command = Command("cdrecord dev=%s -checkdrive" % devname)
|
|||
|
|
- modes = command.get_str(regex="^Supported modes[^:]*:(?P<modes>.*$)", regex_group="modes",
|
|||
|
|
+ modes = command.get_str(regex="^Supported modes[^:]*:(?P<modes>.*$)", \
|
|||
|
|
+ regex_group="modes",
|
|||
|
|
single_line=False, ignore_errors=True)
|
|||
|
|
if "TAO" in modes:
|
|||
|
|
write_opts = "-tao"
|
|||
|
|
if "SAO" in modes:
|
|||
|
|
write_opts = "-sao"
|
|||
|
|
- flags = command.get_str(regex="^Driver flags[^:]*:(?P<flags>.*$)", regex_group="flags",
|
|||
|
|
+ flags = command.get_str(regex="^Driver flags[^:]*:(?P<flags>.*$)", \
|
|||
|
|
+ regex_group="flags",
|
|||
|
|
single_line=False, ignore_errors=True)
|
|||
|
|
if "BURNFREE" in flags:
|
|||
|
|
write_opts += " driveropts=burnfree"
|
|||
|
|
- except CertCommandError as e:
|
|||
|
|
- print(e)
|
|||
|
|
+ except CertCommandError as concrete_error:
|
|||
|
|
+ print(concrete_error)
|
|||
|
|
|
|||
|
|
size = Command("mkisofs -quiet -R -print-size %s " % self.test_dir).get_str()
|
|||
|
|
blocks = int(size)
|
|||
|
|
@@ -189,7 +194,7 @@
|
|||
|
|
self.reload_disc(devname)
|
|||
|
|
sys.stdout.flush()
|
|||
|
|
return True
|
|||
|
|
- except CertCommandError as e:
|
|||
|
|
+ except CertCommandError as concrete_error:
|
|||
|
|
return False
|
|||
|
|
|
|||
|
|
def read_test(self):
|
|||
|
|
@@ -229,8 +234,8 @@
|
|||
|
|
Command("umount ./mnt_cdrom").run(ignore_errors=True)
|
|||
|
|
Command("rm -rf ./mnt_cdrom ./device_dir").run(ignore_errors=True)
|
|||
|
|
return return_code
|
|||
|
|
- except CertCommandError as e:
|
|||
|
|
- print(e)
|
|||
|
|
+ except CertCommandError as concrete_error:
|
|||
|
|
+ print(concrete_error)
|
|||
|
|
return False
|
|||
|
|
|
|||
|
|
def cmp_tree(self, dir1, dir2):
|
|||
|
|
@@ -246,7 +251,7 @@
|
|||
|
|
try:
|
|||
|
|
Command("diff -r %s %s" % (dir1, dir2)).run()
|
|||
|
|
return True
|
|||
|
|
- except CertCommandError as e:
|
|||
|
|
+ except CertCommandError:
|
|||
|
|
print("Error: file comparison failed.")
|
|||
|
|
return False
|
|||
|
|
|
|||
|
|
@@ -265,16 +270,16 @@
|
|||
|
|
Command("eject %s" % device).run()
|
|||
|
|
print("tray ejected.")
|
|||
|
|
sys.stdout.flush()
|
|||
|
|
- except:
|
|||
|
|
+ except Exception:
|
|||
|
|
pass
|
|||
|
|
|
|||
|
|
try:
|
|||
|
|
Command("eject -t %s" % device).run()
|
|||
|
|
print("tray auto-closed.\n")
|
|||
|
|
sys.stdout.flush()
|
|||
|
|
- except:
|
|||
|
|
+ except Exception:
|
|||
|
|
print("Could not auto-close the tray, please close the tray manually.")
|
|||
|
|
- self.ui.prompt_confirm("Done well?")
|
|||
|
|
+ self.com_ui.prompt_confirm("Done well?")
|
|||
|
|
|
|||
|
|
time.sleep(20)
|
|||
|
|
return True
|
|||
|
|
diff -urN oec-hardware/tests/clock/clock.py oec-hardware_new/tests/clock/clock.py
|
|||
|
|
--- oec-hardware/tests/clock/clock.py 2021-09-13 11:43:59.394364553 +0800
|
|||
|
|
+++ oec-hardware_new/tests/clock/clock.py 2021-09-13 11:42:03.409474243 +0800
|
|||
|
|
@@ -12,8 +12,11 @@
|
|||
|
|
# See the Mulan PSL v2 for more details.
|
|||
|
|
# Create: 2020-04-01
|
|||
|
|
|
|||
|
|
+"""clock test"""
|
|||
|
|
+
|
|||
|
|
import os
|
|||
|
|
|
|||
|
|
+from hwcompatible.command import Command, CertCommandError
|
|||
|
|
from hwcompatible.test import Test
|
|||
|
|
|
|||
|
|
clock_dir = os.path.dirname(os.path.realpath(__file__))
|
|||
|
|
@@ -28,7 +31,12 @@
|
|||
|
|
Clock test case
|
|||
|
|
:return:
|
|||
|
|
"""
|
|||
|
|
- return 0 == os.system("cd %s; ./clock" % clock_dir)
|
|||
|
|
+ try:
|
|||
|
|
+ Command("cd %s; ./clock" % clock_dir).echo()
|
|||
|
|
+ return True
|
|||
|
|
+ except CertCommandError as concrete_error:
|
|||
|
|
+ print(concrete_error)
|
|||
|
|
+ return False
|
|||
|
|
|
|||
|
|
|
|||
|
|
if __name__ == '__main__':
|
|||
|
|
diff -urN oec-hardware/tests/cpufreq/cal.py oec-hardware_new/tests/cpufreq/cal.py
|
|||
|
|
--- oec-hardware/tests/cpufreq/cal.py 2021-09-13 11:43:59.394364553 +0800
|
|||
|
|
+++ oec-hardware_new/tests/cpufreq/cal.py 2021-09-13 11:42:03.409474243 +0800
|
|||
|
|
@@ -12,11 +12,14 @@
|
|||
|
|
# See the Mulan PSL v2 for more details.
|
|||
|
|
# Create: 2020-04-01
|
|||
|
|
|
|||
|
|
+"""call test_case"""
|
|||
|
|
+
|
|||
|
|
import decimal
|
|||
|
|
import time
|
|||
|
|
|
|||
|
|
|
|||
|
|
def cal():
|
|||
|
|
+ """call test_case"""
|
|||
|
|
decimal.getcontext().prec = 1000
|
|||
|
|
one = decimal.Decimal(1)
|
|||
|
|
for i in range(1000):
|
|||
|
|
diff -urN oec-hardware/tests/cpufreq/cpufreq.py oec-hardware_new/tests/cpufreq/cpufreq.py
|
|||
|
|
--- oec-hardware/tests/cpufreq/cpufreq.py 2021-09-13 11:43:59.394364553 +0800
|
|||
|
|
+++ oec-hardware_new/tests/cpufreq/cpufreq.py 2021-09-13 12:53:08.458080148 +0800
|
|||
|
|
@@ -12,6 +12,8 @@
|
|||
|
|
# See the Mulan PSL v2 for more details.
|
|||
|
|
# Create: 2020-04-01
|
|||
|
|
|
|||
|
|
+"""cpufreq test"""
|
|||
|
|
+
|
|||
|
|
from random import randint
|
|||
|
|
from time import sleep
|
|||
|
|
|
|||
|
|
@@ -21,6 +23,9 @@
|
|||
|
|
|
|||
|
|
|
|||
|
|
class CPU:
|
|||
|
|
+ """
|
|||
|
|
+ cpufreq test
|
|||
|
|
+ """
|
|||
|
|
def __init__(self):
|
|||
|
|
self.cpu = None
|
|||
|
|
self.nums = None
|
|||
|
|
@@ -39,8 +44,8 @@
|
|||
|
|
cmd = Command("lscpu")
|
|||
|
|
try:
|
|||
|
|
nums = cmd.get_str(r'^CPU\S*:\s+(?P<cpus>\d+)$', 'cpus', False)
|
|||
|
|
- except Exception as e:
|
|||
|
|
- print(e)
|
|||
|
|
+ except Exception as concrete_error:
|
|||
|
|
+ print(concrete_error)
|
|||
|
|
return False
|
|||
|
|
self.nums = int(nums)
|
|||
|
|
self.list = range(self.nums)
|
|||
|
|
@@ -48,16 +53,16 @@
|
|||
|
|
cmd = Command("cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq")
|
|||
|
|
try:
|
|||
|
|
max_freq = cmd.get_str()
|
|||
|
|
- except Exception as e:
|
|||
|
|
- print(e)
|
|||
|
|
+ except Exception as concrete_error:
|
|||
|
|
+ print(concrete_error)
|
|||
|
|
return False
|
|||
|
|
self.max_freq = int(max_freq)
|
|||
|
|
|
|||
|
|
cmd = Command("cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_min_freq")
|
|||
|
|
try:
|
|||
|
|
min_freq = cmd.get_str()
|
|||
|
|
- except Exception as e:
|
|||
|
|
- print(e)
|
|||
|
|
+ except Exception as concrete_error:
|
|||
|
|
+ print(concrete_error)
|
|||
|
|
return False
|
|||
|
|
self.min_freq = int(min_freq)
|
|||
|
|
|
|||
|
|
@@ -74,8 +79,8 @@
|
|||
|
|
try:
|
|||
|
|
cmd.run()
|
|||
|
|
return cmd.returncode
|
|||
|
|
- except Exception as e:
|
|||
|
|
- print(e)
|
|||
|
|
+ except Exception as concrete_error:
|
|||
|
|
+ print(concrete_error)
|
|||
|
|
return False
|
|||
|
|
|
|||
|
|
def get_freq(self, cpu):
|
|||
|
|
@@ -87,8 +92,8 @@
|
|||
|
|
cmd = Command("cpupower -c %s frequency-info -w" % cpu)
|
|||
|
|
try:
|
|||
|
|
return int(cmd.get_str(r'.* frequency: (?P<freq>\d+) .*', 'freq', False))
|
|||
|
|
- except Exception as e:
|
|||
|
|
- print(e)
|
|||
|
|
+ except Exception as concrete_error:
|
|||
|
|
+ print(concrete_error)
|
|||
|
|
return False
|
|||
|
|
|
|||
|
|
def set_governor(self, governor, cpu='all'):
|
|||
|
|
@@ -102,8 +107,8 @@
|
|||
|
|
try:
|
|||
|
|
cmd.run()
|
|||
|
|
return cmd.returncode
|
|||
|
|
- except Exception as e:
|
|||
|
|
- print(e)
|
|||
|
|
+ except Exception as concrete_error:
|
|||
|
|
+ print(concrete_error)
|
|||
|
|
return False
|
|||
|
|
|
|||
|
|
def get_governor(self, cpu):
|
|||
|
|
@@ -115,8 +120,8 @@
|
|||
|
|
cmd = Command("cpupower -c %s frequency-info -p" % cpu)
|
|||
|
|
try:
|
|||
|
|
return cmd.get_str(r'.* governor "(?P<governor>\w+)".*', 'governor', False)
|
|||
|
|
- except Exception as e:
|
|||
|
|
- print(e)
|
|||
|
|
+ except Exception as concrete_error:
|
|||
|
|
+ print(concrete_error)
|
|||
|
|
return False
|
|||
|
|
|
|||
|
|
def find_path(self, parent_dir, target_name):
|
|||
|
|
@@ -130,8 +135,8 @@
|
|||
|
|
try:
|
|||
|
|
cmd.run()
|
|||
|
|
return cmd.returncode
|
|||
|
|
- except Exception as e:
|
|||
|
|
- print(e)
|
|||
|
|
+ except Exception as concrete_error:
|
|||
|
|
+ print(concrete_error)
|
|||
|
|
return False
|
|||
|
|
|
|||
|
|
|
|||
|
|
@@ -141,7 +146,8 @@
|
|||
|
|
"""
|
|||
|
|
def __init__(self, cpu):
|
|||
|
|
self.cpu = cpu
|
|||
|
|
- self.process = Command("taskset -c {} python -u {}/cpufreq/cal.py".format(self.cpu, CertEnv.testdirectoy))
|
|||
|
|
+ self.process = Command("taskset -c {} python -u {}/cpufreq/cal.py".\
|
|||
|
|
+ format(self.cpu, CertEnv.testdirectoy))
|
|||
|
|
self.returncode = None
|
|||
|
|
|
|||
|
|
def run(self):
|
|||
|
|
diff -urN oec-hardware/tests/cpufreq/cpufreq.py.orig oec-hardware_new/tests/cpufreq/cpufreq.py.orig
|
|||
|
|
--- oec-hardware/tests/cpufreq/cpufreq.py.orig 1970-01-01 08:00:00.000000000 +0800
|
|||
|
|
+++ oec-hardware_new/tests/cpufreq/cpufreq.py.orig 2021-09-13 11:42:03.409474243 +0800
|
|||
|
|
@@ -0,0 +1,466 @@
|
|||
|
|
+#!/usr/bin/env python
|
|||
|
|
+# coding: utf-8
|
|||
|
|
+
|
|||
|
|
+# Copyright (c) 2020 Huawei Technologies Co., Ltd.
|
|||
|
|
+# oec-hardware is licensed under the Mulan PSL v2.
|
|||
|
|
+# 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.
|
|||
|
|
+# Create: 2020-04-01
|
|||
|
|
+
|
|||
|
|
+"""cpufreq test"""
|
|||
|
|
+
|
|||
|
|
+from random import randint
|
|||
|
|
+from time import sleep
|
|||
|
|
+
|
|||
|
|
+from hwcompatible.env import CertEnv
|
|||
|
|
+from hwcompatible.test import Test
|
|||
|
|
+from hwcompatible.command import Command
|
|||
|
|
+
|
|||
|
|
+
|
|||
|
|
+class CPU:
|
|||
|
|
+ """
|
|||
|
|
+ cpufreq test
|
|||
|
|
+ """
|
|||
|
|
+ def __init__(self):
|
|||
|
|
+ self.cpu = None
|
|||
|
|
+ self.nums = None
|
|||
|
|
+ self.list = None
|
|||
|
|
+ self.numa_nodes = None
|
|||
|
|
+ self.governors = None
|
|||
|
|
+ self.original_governor = None
|
|||
|
|
+ self.max_freq = None
|
|||
|
|
+ self.min_freq = None
|
|||
|
|
+
|
|||
|
|
+ def get_info(self):
|
|||
|
|
+ """
|
|||
|
|
+ Get CPU info
|
|||
|
|
+ :return:
|
|||
|
|
+ """
|
|||
|
|
+ cmd = Command("lscpu")
|
|||
|
|
+ try:
|
|||
|
|
+ nums = cmd.get_str(r'^CPU\S*:\s+(?P<cpus>\d+)$', 'cpus', False)
|
|||
|
|
+ except Exception as concrete_error:
|
|||
|
|
+ print(concrete_error)
|
|||
|
|
+ return False
|
|||
|
|
+ self.nums = int(nums)
|
|||
|
|
+ self.list = range(self.nums)
|
|||
|
|
+
|
|||
|
|
+ cmd = Command("cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq")
|
|||
|
|
+ try:
|
|||
|
|
+ max_freq = cmd.get_str()
|
|||
|
|
+ except Exception as concrete_error:
|
|||
|
|
+ print(concrete_error)
|
|||
|
|
+ return False
|
|||
|
|
+ self.max_freq = int(max_freq)
|
|||
|
|
+
|
|||
|
|
+ cmd = Command("cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_min_freq")
|
|||
|
|
+ try:
|
|||
|
|
+ min_freq = cmd.get_str()
|
|||
|
|
+ except Exception as concrete_error:
|
|||
|
|
+ print(concrete_error)
|
|||
|
|
+ return False
|
|||
|
|
+ self.min_freq = int(min_freq)
|
|||
|
|
+
|
|||
|
|
+ return True
|
|||
|
|
+
|
|||
|
|
+ def set_freq(self, freq, cpu='all'):
|
|||
|
|
+ """
|
|||
|
|
+ Set CPU frequency
|
|||
|
|
+ :param freq:
|
|||
|
|
+ :param cpu:
|
|||
|
|
+ :return:
|
|||
|
|
+ """
|
|||
|
|
+ cmd = Command("cpupower -c %s frequency-set --freq %s" % (cpu, freq))
|
|||
|
|
+ try:
|
|||
|
|
+ cmd.run()
|
|||
|
|
+ return cmd.returncode
|
|||
|
|
+ except Exception as concrete_error:
|
|||
|
|
+ print(concrete_error)
|
|||
|
|
+ return False
|
|||
|
|
+
|
|||
|
|
+ def get_freq(self, cpu):
|
|||
|
|
+ """
|
|||
|
|
+ Get CPU frequency
|
|||
|
|
+ :param cpu:
|
|||
|
|
+ :return:
|
|||
|
|
+ """
|
|||
|
|
+ cmd = Command("cpupower -c %s frequency-info -w" % cpu)
|
|||
|
|
+ try:
|
|||
|
|
+ return int(cmd.get_str(r'.* frequency: (?P<freq>\d+) .*', 'freq', False))
|
|||
|
|
+ except Exception as concrete_error:
|
|||
|
|
+ print(concrete_error)
|
|||
|
|
+ return False
|
|||
|
|
+
|
|||
|
|
+ def set_governor(self, governor, cpu='all'):
|
|||
|
|
+ """
|
|||
|
|
+ Set the frequency governor mode of CPU
|
|||
|
|
+ :param governor:
|
|||
|
|
+ :param cpu:
|
|||
|
|
+ :return:
|
|||
|
|
+ """
|
|||
|
|
+ cmd = Command("cpupower -c %s frequency-set --governor %s" % (cpu, governor))
|
|||
|
|
+ try:
|
|||
|
|
+ cmd.run()
|
|||
|
|
+ return cmd.returncode
|
|||
|
|
+ except Exception as concrete_error:
|
|||
|
|
+ print(concrete_error)
|
|||
|
|
+ return False
|
|||
|
|
+
|
|||
|
|
+ def get_governor(self, cpu):
|
|||
|
|
+ """
|
|||
|
|
+ Get cpu governor
|
|||
|
|
+ :param cpu:
|
|||
|
|
+ :return:
|
|||
|
|
+ """
|
|||
|
|
+ cmd = Command("cpupower -c %s frequency-info -p" % cpu)
|
|||
|
|
+ try:
|
|||
|
|
+ return cmd.get_str(r'.* governor "(?P<governor>\w+)".*', 'governor', False)
|
|||
|
|
+ except Exception as concrete_error:
|
|||
|
|
+ print(concrete_error)
|
|||
|
|
+ return False
|
|||
|
|
+
|
|||
|
|
+ def find_path(self, parent_dir, target_name):
|
|||
|
|
+ """
|
|||
|
|
+ Find the target path from the specified directory
|
|||
|
|
+ :param parent_dir:
|
|||
|
|
+ :param target_name:
|
|||
|
|
+ :return:
|
|||
|
|
+ """
|
|||
|
|
+ cmd = Command("find %s -name %s" % (parent_dir, target_name))
|
|||
|
|
+ try:
|
|||
|
|
+ cmd.run()
|
|||
|
|
+ return cmd.returncode
|
|||
|
|
+ except Exception as concrete_error:
|
|||
|
|
+ print(concrete_error)
|
|||
|
|
+ return False
|
|||
|
|
+
|
|||
|
|
+
|
|||
|
|
+class Load:
|
|||
|
|
+ """
|
|||
|
|
+ Let a program run on a specific CPU
|
|||
|
|
+ """
|
|||
|
|
+ def __init__(self, cpu):
|
|||
|
|
+ self.cpu = cpu
|
|||
|
|
+ self.process = Command("taskset -c {} python -u {}/cpufreq/cal.py".\
|
|||
|
|
+ format(self.cpu, CertEnv.testdirectoy))
|
|||
|
|
+ self.returncode = None
|
|||
|
|
+
|
|||
|
|
+ def run(self):
|
|||
|
|
+ """
|
|||
|
|
+ Process started
|
|||
|
|
+ :return:
|
|||
|
|
+ """
|
|||
|
|
+ self.process.start() # background
|
|||
|
|
+
|
|||
|
|
+ def get_runtime(self):
|
|||
|
|
+ """
|
|||
|
|
+ Get the running time of the process
|
|||
|
|
+ :return:
|
|||
|
|
+ """
|
|||
|
|
+ if not self.process:
|
|||
|
|
+ return None
|
|||
|
|
+
|
|||
|
|
+ while self.returncode is None:
|
|||
|
|
+ self.returncode = self.process.poll()
|
|||
|
|
+ if self.returncode == 0:
|
|||
|
|
+ line = self.process.readline()
|
|||
|
|
+ return float(line)
|
|||
|
|
+ else:
|
|||
|
|
+ return False
|
|||
|
|
+
|
|||
|
|
+
|
|||
|
|
+class CPUFreqTest(Test):
|
|||
|
|
+ """
|
|||
|
|
+ CPU frequency test
|
|||
|
|
+ """
|
|||
|
|
+ def __init__(self):
|
|||
|
|
+ Test.__init__(self)
|
|||
|
|
+ self.requirements = ['util-linux', 'kernel-tools']
|
|||
|
|
+ self.cpu = CPU()
|
|||
|
|
+ self.original_governor = self.cpu.get_governor(0)
|
|||
|
|
+
|
|||
|
|
+ def test_userspace(self):
|
|||
|
|
+ """
|
|||
|
|
+ userspace mode of testing CPU frequency
|
|||
|
|
+ :return:
|
|||
|
|
+ """
|
|||
|
|
+ target_cpu = randint(0, self.cpu.nums-1)
|
|||
|
|
+ target_freq = randint(self.cpu.min_freq, self.cpu.max_freq)
|
|||
|
|
+ if self.cpu.set_freq(target_freq, cpu=target_cpu) != 0:
|
|||
|
|
+ print("[X] Set CPU%s to freq %d failed." % (target_cpu, target_freq))
|
|||
|
|
+ return False
|
|||
|
|
+ print("[.] Set CPU%s to freq %d." % (target_cpu, target_freq))
|
|||
|
|
+ target_cpu_freq = self.cpu.get_freq(target_cpu)
|
|||
|
|
+ print("[.] Current freq of CPU%s is %d." % (target_cpu, target_cpu_freq))
|
|||
|
|
+
|
|||
|
|
+ target_cpu_governor = self.cpu.get_governor(target_cpu)
|
|||
|
|
+ if target_cpu_governor != 'userspace':
|
|||
|
|
+ print("[X] The governor of CPU%s(%s) is not userspace." %
|
|||
|
|
+ (target_cpu, target_cpu_governor))
|
|||
|
|
+ return False
|
|||
|
|
+ print("[.] The governor of CPU%s is %s." %
|
|||
|
|
+ (target_cpu, target_cpu_governor))
|
|||
|
|
+
|
|||
|
|
+ # min_freq -> max_runtime
|
|||
|
|
+ self.cpu.set_freq(self.cpu.min_freq)
|
|||
|
|
+ load_list = []
|
|||
|
|
+ runtime_list = []
|
|||
|
|
+ for cpu in self.cpu.list:
|
|||
|
|
+ load_test = Load(cpu)
|
|||
|
|
+ load_test.run()
|
|||
|
|
+ load_list.append(load_test)
|
|||
|
|
+ for cpu in self.cpu.list:
|
|||
|
|
+ runtime = load_list[cpu].get_runtime()
|
|||
|
|
+ runtime_list.append(runtime)
|
|||
|
|
+ max_average_runtime = 1.0 * sum(runtime_list) / len(runtime_list)
|
|||
|
|
+ if max_average_runtime == 0:
|
|||
|
|
+ print("[X] Max average time is 0.")
|
|||
|
|
+ return False
|
|||
|
|
+ print("[.] Max average time of all CPUs userspace load test: %.2f" %
|
|||
|
|
+ max_average_runtime)
|
|||
|
|
+
|
|||
|
|
+ # max_freq -> min_runtime
|
|||
|
|
+ self.cpu.set_freq(self.cpu.max_freq)
|
|||
|
|
+ load_list = []
|
|||
|
|
+ runtime_list = []
|
|||
|
|
+ for cpu in self.cpu.list:
|
|||
|
|
+ load_test = Load(cpu)
|
|||
|
|
+ load_test.run()
|
|||
|
|
+ load_list.append(load_test)
|
|||
|
|
+ for cpu in self.cpu.list:
|
|||
|
|
+ runtime = load_list[cpu].get_runtime()
|
|||
|
|
+ runtime_list.append(runtime)
|
|||
|
|
+ min_average_runtime = 1.0 * sum(runtime_list) / len(runtime_list)
|
|||
|
|
+ if min_average_runtime == 0:
|
|||
|
|
+ print("[X] Min average time is 0.")
|
|||
|
|
+ return False
|
|||
|
|
+ print("[.] Min average time of all CPUs userspace load test: %.2f" %
|
|||
|
|
+ min_average_runtime)
|
|||
|
|
+
|
|||
|
|
+ measured_speedup = 1.0 * max_average_runtime / min_average_runtime
|
|||
|
|
+ expected_speedup = 1.0 * self.cpu.max_freq / self.cpu.min_freq
|
|||
|
|
+ tolerance = 1.0
|
|||
|
|
+ min_speedup = expected_speedup - (expected_speedup - 1.0) * tolerance
|
|||
|
|
+ max_speedup = expected_speedup + (expected_speedup - 1.0) * tolerance
|
|||
|
|
+ if not min_speedup < measured_speedup < max_speedup:
|
|||
|
|
+ print("[X] The speedup(%.2f) is not between %.2f and %.2f" %
|
|||
|
|
+ (measured_speedup, min_speedup, max_speedup))
|
|||
|
|
+ return False
|
|||
|
|
+ print("[.] The speedup(%.2f) is between %.2f and %.2f" %
|
|||
|
|
+ (measured_speedup, min_speedup, max_speedup))
|
|||
|
|
+
|
|||
|
|
+ return True
|
|||
|
|
+
|
|||
|
|
+ def test_ondemand(self):
|
|||
|
|
+ """
|
|||
|
|
+ ondemand mode of testing CPU frequency
|
|||
|
|
+ :return:
|
|||
|
|
+ """
|
|||
|
|
+ if self.cpu.set_governor('powersave') != 0:
|
|||
|
|
+ print("[X] Set governor of all CPUs to powersave failed.")
|
|||
|
|
+ return False
|
|||
|
|
+ print("[.] Set governor of all CPUs to powersave.")
|
|||
|
|
+
|
|||
|
|
+ if self.cpu.set_governor('ondemand') != 0:
|
|||
|
|
+ print("[X] Set governor of all CPUs to ondemand failed.")
|
|||
|
|
+ return False
|
|||
|
|
+ print("[.] Set governor of all CPUs to ondemand.")
|
|||
|
|
+
|
|||
|
|
+ target_cpu = randint(0, self.cpu.nums)
|
|||
|
|
+ target_cpu_governor = self.cpu.get_governor(target_cpu)
|
|||
|
|
+ if target_cpu_governor != 'ondemand':
|
|||
|
|
+ print("[X] The governor of CPU%s(%s) is not ondemand." %
|
|||
|
|
+ (target_cpu, target_cpu_governor))
|
|||
|
|
+ return False
|
|||
|
|
+ print("[.] The governor of CPU%s is %s." %
|
|||
|
|
+ (target_cpu, target_cpu_governor))
|
|||
|
|
+
|
|||
|
|
+ load_test = Load(target_cpu)
|
|||
|
|
+ load_test.run()
|
|||
|
|
+ sleep(1)
|
|||
|
|
+ target_cpu_freq = self.cpu.get_freq(target_cpu)
|
|||
|
|
+ if target_cpu_freq != self.cpu.max_freq:
|
|||
|
|
+ print("[X] The freq of CPU%s(%d) is not scaling_max_freq(%d)." %
|
|||
|
|
+ (target_cpu, target_cpu_freq, self.cpu.max_freq))
|
|||
|
|
+ return False
|
|||
|
|
+ print("[.] The freq of CPU%s is scaling_max_freq(%d)." %
|
|||
|
|
+ (target_cpu, target_cpu_freq))
|
|||
|
|
+
|
|||
|
|
+ load_test_time = load_test.get_runtime()
|
|||
|
|
+ print("[.] Time of CPU%s ondemand load test: %.2f" %
|
|||
|
|
+ (target_cpu, load_test_time))
|
|||
|
|
+ target_cpu_freq = self.cpu.get_freq(target_cpu)
|
|||
|
|
+ if not target_cpu_freq <= self.cpu.max_freq:
|
|||
|
|
+ print("[X] The freq of CPU%s(%d) is not less equal than %d." %
|
|||
|
|
+ (target_cpu, target_cpu_freq, self.cpu.max_freq))
|
|||
|
|
+ return False
|
|||
|
|
+ print("[.] The freq of CPU%s(%d) is less equal than %d." %
|
|||
|
|
+ (target_cpu, target_cpu_freq, self.cpu.max_freq))
|
|||
|
|
+
|
|||
|
|
+ return True
|
|||
|
|
+
|
|||
|
|
+ def test_conservative(self):
|
|||
|
|
+ """
|
|||
|
|
+ conservative mode of testing CPU frequency
|
|||
|
|
+ :return:
|
|||
|
|
+ """
|
|||
|
|
+ if self.cpu.set_governor('powersave') != 0:
|
|||
|
|
+ print("[X] Set governor of all CPUs to powersave failed.")
|
|||
|
|
+ return False
|
|||
|
|
+ print("[.] Set governor of all CPUs to powersave.")
|
|||
|
|
+
|
|||
|
|
+ if self.cpu.set_governor('conservative') != 0:
|
|||
|
|
+ print("[X] Set governor of all CPUs to conservative failed.")
|
|||
|
|
+ return False
|
|||
|
|
+ print("[.] Set governor of all CPUs to conservative.")
|
|||
|
|
+
|
|||
|
|
+ target_cpu = randint(0, self.cpu.nums)
|
|||
|
|
+ target_cpu_governor = self.cpu.get_governor(target_cpu)
|
|||
|
|
+ if target_cpu_governor != 'conservative':
|
|||
|
|
+ print("[X] The governor of CPU%s(%s) is not conservative." %
|
|||
|
|
+ (target_cpu, target_cpu_governor))
|
|||
|
|
+ return False
|
|||
|
|
+ print("[.] The governor of CPU%s is %s." %
|
|||
|
|
+ (target_cpu, target_cpu_governor))
|
|||
|
|
+
|
|||
|
|
+ load_test = Load(target_cpu)
|
|||
|
|
+ load_test.run()
|
|||
|
|
+ sleep(1)
|
|||
|
|
+ target_cpu_freq = self.cpu.get_freq(target_cpu)
|
|||
|
|
+ if not self.cpu.min_freq < target_cpu_freq < self.cpu.max_freq:
|
|||
|
|
+ print("[X] The freq of CPU%s(%d) is not between %d~%d." %
|
|||
|
|
+ (target_cpu, target_cpu_freq, self.cpu.min_freq, self.cpu.max_freq))
|
|||
|
|
+ return False
|
|||
|
|
+ print("[.] The freq of CPU%s(%d) is between %d~%d." %
|
|||
|
|
+ (target_cpu, target_cpu_freq, self.cpu.min_freq, self.cpu.max_freq))
|
|||
|
|
+
|
|||
|
|
+ load_test_time = load_test.get_runtime()
|
|||
|
|
+ print("[.] Time of CPU%s conservative load test: %.2f" %
|
|||
|
|
+ (target_cpu, load_test_time))
|
|||
|
|
+ target_cpu_freq = self.cpu.get_freq(target_cpu)
|
|||
|
|
+ print("[.] Current freq of CPU%s is %d." % (target_cpu, target_cpu_freq))
|
|||
|
|
+
|
|||
|
|
+ return True
|
|||
|
|
+
|
|||
|
|
+ def test_powersave(self):
|
|||
|
|
+ """
|
|||
|
|
+ powersave mode of testing CPU frequency
|
|||
|
|
+ :return:
|
|||
|
|
+ """
|
|||
|
|
+ if self.cpu.set_governor('powersave') != 0:
|
|||
|
|
+ print("[X] Set governor of all CPUs to powersave failed.")
|
|||
|
|
+ return False
|
|||
|
|
+ print("[.] Set governor of all CPUs to powersave.")
|
|||
|
|
+
|
|||
|
|
+ target_cpu = randint(0, self.cpu.nums)
|
|||
|
|
+ target_cpu_governor = self.cpu.get_governor(target_cpu)
|
|||
|
|
+ if target_cpu_governor != 'powersave':
|
|||
|
|
+ print("[X] The governor of CPU%s(%s) is not powersave." %
|
|||
|
|
+ (target_cpu, target_cpu_governor))
|
|||
|
|
+ return False
|
|||
|
|
+ print("[.] The governor of CPU%s is %s." %
|
|||
|
|
+ (target_cpu, target_cpu_governor))
|
|||
|
|
+
|
|||
|
|
+ target_cpu_freq = self.cpu.get_freq(target_cpu)
|
|||
|
|
+ if target_cpu_freq != self.cpu.min_freq:
|
|||
|
|
+ print("[X] The freq of CPU%s(%d) is not scaling_min_freq(%d)." %
|
|||
|
|
+ (target_cpu, target_cpu_freq, self.cpu.min_freq))
|
|||
|
|
+ return False
|
|||
|
|
+ print("[.] The freq of CPU%s is %d." % (target_cpu, target_cpu_freq))
|
|||
|
|
+
|
|||
|
|
+ load_test = Load(target_cpu)
|
|||
|
|
+ load_test.run()
|
|||
|
|
+ load_test_time = load_test.get_runtime()
|
|||
|
|
+ print("[.] Time of CPU%s powersave load test: %.2f" %
|
|||
|
|
+ (target_cpu, load_test_time))
|
|||
|
|
+ target_cpu_freq = self.cpu.get_freq(target_cpu)
|
|||
|
|
+ print("[.] Current freq of CPU%s is %d." % (target_cpu, target_cpu_freq))
|
|||
|
|
+
|
|||
|
|
+ return True
|
|||
|
|
+
|
|||
|
|
+ def test_performance(self):
|
|||
|
|
+ """
|
|||
|
|
+ Performance mode of testing CPU frequency
|
|||
|
|
+ :return:
|
|||
|
|
+ """
|
|||
|
|
+ if self.cpu.set_governor('performance') != 0:
|
|||
|
|
+ print("[X] Set governor of all CPUs to performance failed.")
|
|||
|
|
+ return False
|
|||
|
|
+ print("[.] Set governor of all CPUs to performance.")
|
|||
|
|
+
|
|||
|
|
+ target_cpu = randint(0, self.cpu.nums)
|
|||
|
|
+ target_cpu_governor = self.cpu.get_governor(target_cpu)
|
|||
|
|
+ if target_cpu_governor != 'performance':
|
|||
|
|
+ print("[X] The governor of CPU%s(%s) is not performance." %
|
|||
|
|
+ (target_cpu, target_cpu_governor))
|
|||
|
|
+ return False
|
|||
|
|
+ print("[.] The governor of CPU%s is %s." %
|
|||
|
|
+ (target_cpu, target_cpu_governor))
|
|||
|
|
+
|
|||
|
|
+ target_cpu_freq = self.cpu.get_freq(target_cpu)
|
|||
|
|
+ if target_cpu_freq != self.cpu.max_freq:
|
|||
|
|
+ print("[X] The freq of CPU%s(%d) is not scaling_max_freq(%d)." %
|
|||
|
|
+ (target_cpu, target_cpu_freq, self.cpu.max_freq))
|
|||
|
|
+ return False
|
|||
|
|
+ print("[.] The freq of CPU%s is %d." % (target_cpu, target_cpu_freq))
|
|||
|
|
+
|
|||
|
|
+ load_test = Load(target_cpu)
|
|||
|
|
+ load_test.run()
|
|||
|
|
+ load_test_time = load_test.get_runtime()
|
|||
|
|
+ print("[.] Time of CPU%s performance load test: %.2f" %
|
|||
|
|
+ (target_cpu, load_test_time))
|
|||
|
|
+ target_cpu_freq = self.cpu.get_freq(target_cpu)
|
|||
|
|
+ print("[.] Current freq of CPU%s is %d." % (target_cpu, target_cpu_freq))
|
|||
|
|
+
|
|||
|
|
+ return True
|
|||
|
|
+
|
|||
|
|
+ def test(self):
|
|||
|
|
+ """
|
|||
|
|
+ Test case
|
|||
|
|
+ :return:
|
|||
|
|
+ """
|
|||
|
|
+ if not self.cpu.get_info():
|
|||
|
|
+ print("[X] Fail to get CPU info."
|
|||
|
|
+ " Please check if the CPU supports cpufreq.")
|
|||
|
|
+ return False
|
|||
|
|
+
|
|||
|
|
+ ret = True
|
|||
|
|
+ print("")
|
|||
|
|
+ print("[.] Test userspace")
|
|||
|
|
+ if not self.test_userspace():
|
|||
|
|
+ print("[X] Test userspace FAILED")
|
|||
|
|
+ ret = False
|
|||
|
|
+ print("")
|
|||
|
|
+ print("[.] Test ondemand")
|
|||
|
|
+ if not self.test_ondemand():
|
|||
|
|
+ print("[X] Test ondemand FAILED")
|
|||
|
|
+ ret = False
|
|||
|
|
+ print("")
|
|||
|
|
+ print("[.] Test conservative")
|
|||
|
|
+ if not self.test_conservative():
|
|||
|
|
+ print("[X] Test conservative FAILED")
|
|||
|
|
+ ret = False
|
|||
|
|
+ print("")
|
|||
|
|
+ print("[.] Test powersave")
|
|||
|
|
+ if not self.test_powersave():
|
|||
|
|
+ print("[X] Test powersave FAILED")
|
|||
|
|
+ ret = False
|
|||
|
|
+ print("")
|
|||
|
|
+ print("[.] Test performance")
|
|||
|
|
+ if not self.test_performance():
|
|||
|
|
+ print("[X] Test performance FAILED")
|
|||
|
|
+ ret = False
|
|||
|
|
+
|
|||
|
|
+ self.cpu.set_governor(self.original_governor)
|
|||
|
|
+ return ret
|
|||
|
|
+
|
|||
|
|
+
|
|||
|
|
+if __name__ == "__main__":
|
|||
|
|
+ t = CPUFreqTest()
|
|||
|
|
+ t.setup()
|
|||
|
|
+ t.test()
|
|||
|
|
diff -urN oec-hardware/tests/disk/disk.py oec-hardware_new/tests/disk/disk.py
|
|||
|
|
--- oec-hardware/tests/disk/disk.py 2021-09-13 11:43:59.394364553 +0800
|
|||
|
|
+++ oec-hardware_new/tests/disk/disk.py 2021-09-13 11:42:03.409474243 +0800
|
|||
|
|
@@ -12,6 +12,8 @@
|
|||
|
|
# See the Mulan PSL v2 for more details.
|
|||
|
|
# Create: 2020-04-01
|
|||
|
|
|
|||
|
|
+"""disk test"""
|
|||
|
|
+
|
|||
|
|
import os
|
|||
|
|
import sys
|
|||
|
|
import shutil
|
|||
|
|
@@ -23,12 +25,14 @@
|
|||
|
|
|
|||
|
|
|
|||
|
|
class DiskTest(Test):
|
|||
|
|
-
|
|||
|
|
+ """
|
|||
|
|
+ disk test
|
|||
|
|
+ """
|
|||
|
|
def __init__(self):
|
|||
|
|
Test.__init__(self)
|
|||
|
|
self.disks = list()
|
|||
|
|
self.filesystems = ["ext4"]
|
|||
|
|
- self.ui = CommandUI()
|
|||
|
|
+ self.com_ui = CommandUI()
|
|||
|
|
|
|||
|
|
def setup(self, args=None):
|
|||
|
|
"""
|
|||
|
|
@@ -52,18 +56,22 @@
|
|||
|
|
Command("cat /proc/mdstat").echo(ignore_errors=True)
|
|||
|
|
sys.stdout.flush()
|
|||
|
|
print("\n")
|
|||
|
|
- except Exception as e:
|
|||
|
|
+ except Exception as concrete_error:
|
|||
|
|
print("Warning: could not get disk info")
|
|||
|
|
- print(e)
|
|||
|
|
+ print(concrete_error)
|
|||
|
|
|
|||
|
|
def test(self):
|
|||
|
|
+ """
|
|||
|
|
+ start test
|
|||
|
|
+ """
|
|||
|
|
self.get_disk()
|
|||
|
|
if len(self.disks) == 0:
|
|||
|
|
print("No suite disk found to test.")
|
|||
|
|
return False
|
|||
|
|
|
|||
|
|
self.disks.append("all")
|
|||
|
|
- disk = self.ui.prompt_edit("Which disk would you like to test: ", self.disks[0], self.disks)
|
|||
|
|
+ disk = self.com_ui.prompt_edit("Which disk would you like to test: ",\
|
|||
|
|
+ self.disks[0], self.disks)
|
|||
|
|
return_code = True
|
|||
|
|
if disk == "all":
|
|||
|
|
for disk in self.disks[:-1]:
|
|||
|
|
@@ -79,12 +87,16 @@
|
|||
|
|
return return_code
|
|||
|
|
|
|||
|
|
def get_disk(self):
|
|||
|
|
+ """
|
|||
|
|
+ get disk info
|
|||
|
|
+ """
|
|||
|
|
self.disks = list()
|
|||
|
|
disks = list()
|
|||
|
|
devices = CertDevice().get_devices()
|
|||
|
|
for device in devices:
|
|||
|
|
- if (device.get_property("DEVTYPE") == "disk" and not device.get_property("ID_TYPE")) or \
|
|||
|
|
- device.get_property("ID_TYPE") == "disk":
|
|||
|
|
+ if (device.get_property("DEVTYPE") == "disk" and not \
|
|||
|
|
+ device.get_property("ID_TYPE")) or device.\
|
|||
|
|
+ get_property("ID_TYPE") == "disk":
|
|||
|
|
if "/host" in device.get_property("DEVPATH"):
|
|||
|
|
disks.append(device.get_name())
|
|||
|
|
|
|||
|
|
@@ -123,6 +135,9 @@
|
|||
|
|
print("These disks %s are in use now, skip them." % "|".join(un_suitable))
|
|||
|
|
|
|||
|
|
def raw_test(self, disk):
|
|||
|
|
+ """
|
|||
|
|
+ raw test
|
|||
|
|
+ """
|
|||
|
|
print("\n#############")
|
|||
|
|
print("%s raw IO test" % disk)
|
|||
|
|
device = "/dev/" + disk
|
|||
|
|
@@ -147,7 +162,8 @@
|
|||
|
|
return False
|
|||
|
|
|
|||
|
|
print("\nStarting rand raw IO test...")
|
|||
|
|
- opts = "-direct=1 -iodepth 4 -rw=randrw -rwmixread=50 -group_reporting -name=file -runtime=300"
|
|||
|
|
+ opts = "-direct=1 -iodepth 4 -rw=randrw -rwmixread=50 " \
|
|||
|
|
+ "-group_reporting -name=file -runtime=300"
|
|||
|
|
if not self.do_fio(device, size, opts):
|
|||
|
|
print("%s rand raw IO test fail." % device)
|
|||
|
|
print("#############")
|
|||
|
|
@@ -157,6 +173,9 @@
|
|||
|
|
return True
|
|||
|
|
|
|||
|
|
def vfs_test(self, disk):
|
|||
|
|
+ """
|
|||
|
|
+ vfs test
|
|||
|
|
+ """
|
|||
|
|
print("\n#############")
|
|||
|
|
print("%s vfs test" % disk)
|
|||
|
|
device = "/dev/" + disk
|
|||
|
|
@@ -179,12 +198,12 @@
|
|||
|
|
path = os.path.join(os.getcwd(), "vfs_test")
|
|||
|
|
|
|||
|
|
return_code = True
|
|||
|
|
- for fs in self.filesystems:
|
|||
|
|
+ for file_sys in self.filesystems:
|
|||
|
|
try:
|
|||
|
|
- print("\nFormatting %s to %s ..." % (device, fs))
|
|||
|
|
+ print("\nFormatting %s to %s ..." % (device, file_sys))
|
|||
|
|
Command("umount %s" % device).echo(ignore_errors=True)
|
|||
|
|
- Command("mkfs -t %s -F %s 2>/dev/null" % (fs, device)).echo()
|
|||
|
|
- Command("mount -t %s %s %s" % (fs, device, "vfs_test")).echo()
|
|||
|
|
+ Command("mkfs -t %s -F %s 2>/dev/null" % (file_sys, device)).echo()
|
|||
|
|
+ Command("mount -t %s %s %s" % (file_sys, device, "vfs_test")).echo()
|
|||
|
|
|
|||
|
|
print("\nStarting sequential vfs IO test...")
|
|||
|
|
opts = "-direct=1 -iodepth 4 -rw=rw -rwmixread=50 -name=directoy -runtime=300"
|
|||
|
|
@@ -197,8 +216,8 @@
|
|||
|
|
if not self.do_fio(path, size, opts):
|
|||
|
|
return_code = False
|
|||
|
|
break
|
|||
|
|
- except Exception as e:
|
|||
|
|
- print(e)
|
|||
|
|
+ except Exception as concrete_error:
|
|||
|
|
+ print(concrete_error)
|
|||
|
|
return_code = False
|
|||
|
|
break
|
|||
|
|
|
|||
|
|
@@ -208,17 +227,20 @@
|
|||
|
|
return return_code
|
|||
|
|
|
|||
|
|
def do_fio(self, filepath, size, option):
|
|||
|
|
+ """
|
|||
|
|
+ fio test
|
|||
|
|
+ """
|
|||
|
|
if os.path.isdir(filepath):
|
|||
|
|
file_opt = "-directory=%s" % filepath
|
|||
|
|
else:
|
|||
|
|
file_opt = "-filename=%s" % filepath
|
|||
|
|
max_bs = 64
|
|||
|
|
- bs = 4
|
|||
|
|
- while bs <= max_bs:
|
|||
|
|
- if os.system("fio %s -size=%dK -bs=%dK %s" % (file_opt, size, bs, option)) != 0:
|
|||
|
|
+ a_bs = 4
|
|||
|
|
+ while a_bs <= max_bs:
|
|||
|
|
+ if os.system("fio %s -size=%dK -bs=%dK %s" % (file_opt, size, a_bs, option)) != 0:
|
|||
|
|
print("Error: %s fio failed." % filepath)
|
|||
|
|
return False
|
|||
|
|
print("\n")
|
|||
|
|
sys.stdout.flush()
|
|||
|
|
- bs = bs * 2
|
|||
|
|
+ a_bs = a_bs * 2
|
|||
|
|
return True
|
|||
|
|
diff -urN oec-hardware/tests/ipmi/ipmi.py oec-hardware_new/tests/ipmi/ipmi.py
|
|||
|
|
--- oec-hardware/tests/ipmi/ipmi.py 2021-09-13 11:43:59.394364553 +0800
|
|||
|
|
+++ oec-hardware_new/tests/ipmi/ipmi.py 2021-09-13 11:42:03.413474274 +0800
|
|||
|
|
@@ -12,6 +12,8 @@
|
|||
|
|
# See the Mulan PSL v2 for more details.
|
|||
|
|
# Create: 2020-04-01
|
|||
|
|
|
|||
|
|
+"""ipmi test"""
|
|||
|
|
+
|
|||
|
|
from hwcompatible.test import Test
|
|||
|
|
from hwcompatible.command import Command
|
|||
|
|
|
|||
|
|
@@ -31,8 +33,9 @@
|
|||
|
|
"""
|
|||
|
|
try:
|
|||
|
|
Command("systemctl start ipmi").run()
|
|||
|
|
- Command("systemctl status ipmi.service").get_str(regex="Active: active", single_line=False)
|
|||
|
|
- except:
|
|||
|
|
+ Command("systemctl status ipmi.service").get_str(regex="Active: active", \
|
|||
|
|
+ single_line=False)
|
|||
|
|
+ except Exception:
|
|||
|
|
print("ipmi service cant't be started")
|
|||
|
|
return False
|
|||
|
|
return True
|
|||
|
|
@@ -46,7 +49,7 @@
|
|||
|
|
for cmd in cmd_list:
|
|||
|
|
try:
|
|||
|
|
Command(cmd).echo()
|
|||
|
|
- except:
|
|||
|
|
+ except Exception:
|
|||
|
|
print("%s return error." % cmd)
|
|||
|
|
return False
|
|||
|
|
return True
|
|||
|
|
diff -urN oec-hardware/tests/kdump/kdump.py oec-hardware_new/tests/kdump/kdump.py
|
|||
|
|
--- oec-hardware/tests/kdump/kdump.py 2021-09-13 11:43:59.394364553 +0800
|
|||
|
|
+++ oec-hardware_new/tests/kdump/kdump.py 2021-09-13 11:42:03.413474274 +0800
|
|||
|
|
@@ -12,6 +12,8 @@
|
|||
|
|
# See the Mulan PSL v2 for more details.
|
|||
|
|
# Create: 2020-04-01
|
|||
|
|
|
|||
|
|
+"""kdump test"""
|
|||
|
|
+
|
|||
|
|
import os
|
|||
|
|
import sys
|
|||
|
|
import time
|
|||
|
|
@@ -26,6 +28,7 @@
|
|||
|
|
"""
|
|||
|
|
Kdump Test
|
|||
|
|
"""
|
|||
|
|
+
|
|||
|
|
def __init__(self):
|
|||
|
|
Test.__init__(self)
|
|||
|
|
self.pri = 9
|
|||
|
|
@@ -42,7 +45,7 @@
|
|||
|
|
"""
|
|||
|
|
try:
|
|||
|
|
Command("cat /proc/cmdline").get_str(r"crashkernel=[^\ ]*")
|
|||
|
|
- except:
|
|||
|
|
+ except Exception:
|
|||
|
|
print("Error: no crashkernel found.")
|
|||
|
|
return False
|
|||
|
|
|
|||
|
|
@@ -58,8 +61,9 @@
|
|||
|
|
|
|||
|
|
try:
|
|||
|
|
Command("systemctl restart kdump").run()
|
|||
|
|
- Command("systemctl status kdump").get_str(regex="Active: active", single_line=False)
|
|||
|
|
- except:
|
|||
|
|
+ Command("systemctl status kdump").get_str(regex="Active: active",
|
|||
|
|
+ single_line=False)
|
|||
|
|
+ except Exception:
|
|||
|
|
print("Error: kdump service not working.")
|
|||
|
|
return False
|
|||
|
|
|
|||
|
|
@@ -68,8 +72,8 @@
|
|||
|
|
config.dump()
|
|||
|
|
print("#############")
|
|||
|
|
|
|||
|
|
- ui = CommandUI()
|
|||
|
|
- if ui.prompt_confirm("System will reboot, are you ready?"):
|
|||
|
|
+ com_ui = CommandUI()
|
|||
|
|
+ if com_ui.prompt_confirm("System will reboot, are you ready?"):
|
|||
|
|
print("\ntrigger crash...")
|
|||
|
|
sys.stdout.flush()
|
|||
|
|
os.system("sync")
|
|||
|
|
@@ -89,8 +93,9 @@
|
|||
|
|
if config.get_parameter("path"):
|
|||
|
|
self.vmcore_path = config.get_parameter("path")
|
|||
|
|
|
|||
|
|
- dir_pattern = re.compile(r'(?P<ipaddr>[0-9]+\.[0-9]+\.[0-9]+)-(?P<date>[0-9]+[-.][0-9]+[-.][0-9]+)-'
|
|||
|
|
- r'(?P<time>[0-9]+:[0-9]+:[0-9]+)')
|
|||
|
|
+ dir_pattern = re.compile(
|
|||
|
|
+ r'(?P<ipaddr>[0-9]+\.[0-9]+\.[0-9]+)-(?P<date>[0-9]+[-.][0-9]+[-.][0-9]+)-'
|
|||
|
|
+ r'(?P<time>[0-9]+:[0-9]+:[0-9]+)')
|
|||
|
|
|
|||
|
|
vmcore_dirs = list()
|
|||
|
|
for (root, dirs, files) in os.walk(self.vmcore_path):
|
|||
|
|
@@ -101,10 +106,12 @@
|
|||
|
|
vmcore_file = os.path.join(self.vmcore_path, vmcore_dirs[-1], "vmcore")
|
|||
|
|
|
|||
|
|
try:
|
|||
|
|
- Command("echo \"sys\nq\" | crash -s %s /usr/lib/debug/lib/modules/`uname -r`/vmlinux" % vmcore_file).echo()
|
|||
|
|
+ Command(
|
|||
|
|
+ "echo \"sys\nq\" | crash -s %s /usr/lib/debug/lib/modules/`uname -r`/vmlinux" % \
|
|||
|
|
+ vmcore_file).echo()
|
|||
|
|
print("kdump image %s verified" % vmcore_file)
|
|||
|
|
return True
|
|||
|
|
- except CertCommandError as e:
|
|||
|
|
+ except CertCommandError as concrete_error:
|
|||
|
|
print("Error: could not verify kdump image %s" % vmcore_file)
|
|||
|
|
- print(e)
|
|||
|
|
+ print(concrete_error)
|
|||
|
|
return False
|
|||
|
|
diff -urN oec-hardware/tests/memory/memory.py oec-hardware_new/tests/memory/memory.py
|
|||
|
|
--- oec-hardware/tests/memory/memory.py 2021-09-13 11:43:59.394364553 +0800
|
|||
|
|
+++ oec-hardware_new/tests/memory/memory.py 2021-09-13 11:42:03.413474274 +0800
|
|||
|
|
@@ -12,6 +12,8 @@
|
|||
|
|
# See the Mulan PSL v2 for more details.
|
|||
|
|
# Create: 2020-04-01
|
|||
|
|
|
|||
|
|
+"""memory test"""
|
|||
|
|
+
|
|||
|
|
import os
|
|||
|
|
import time
|
|||
|
|
import re
|
|||
|
|
@@ -79,18 +81,18 @@
|
|||
|
|
if line:
|
|||
|
|
tokens = line.split()
|
|||
|
|
if len(tokens) == 3:
|
|||
|
|
- if "MemTotal:" == tokens[0].strip():
|
|||
|
|
+ if tokens[0].strip() == "MemTotal:":
|
|||
|
|
self.system_memory = int(tokens[1].strip())/1024
|
|||
|
|
elif tokens[0].strip() in ["MemFree:", "Cached:", "Buffers:"]:
|
|||
|
|
self.free_memory += int(tokens[1].strip())
|
|||
|
|
- elif "SwapTotal:" == tokens[0].strip():
|
|||
|
|
+ elif tokens[0].strip() == "SwapTotal:":
|
|||
|
|
self.swap_memory = int(tokens[1].strip())/1024
|
|||
|
|
- elif "Hugepagesize:" == tokens[0].strip():
|
|||
|
|
+ elif tokens[0].strip() == "Hugepagesize:":
|
|||
|
|
self.hugepage_size = int(tokens[1].strip())/1024
|
|||
|
|
elif len(tokens) == 2:
|
|||
|
|
- if "HugePages_Total:" == tokens[0].strip():
|
|||
|
|
+ if tokens[0].strip() == "HugePages_Total:":
|
|||
|
|
self.hugepage_total = int(tokens[1].strip())
|
|||
|
|
- elif "HugePages_Free:" == tokens[0].strip():
|
|||
|
|
+ elif tokens[0].strip() == "HugePages_Free:":
|
|||
|
|
self.hugepage_free = int(tokens[1].strip())
|
|||
|
|
else:
|
|||
|
|
break
|
|||
|
|
@@ -180,8 +182,8 @@
|
|||
|
|
try:
|
|||
|
|
Command("cd %s; ./hugetlb_test" % self.test_dir).echo()
|
|||
|
|
print("Hugetlb test succ.\n")
|
|||
|
|
- except CertCommandError as e:
|
|||
|
|
- print(e)
|
|||
|
|
+ except CertCommandError as concrete_error:
|
|||
|
|
+ print(concrete_error)
|
|||
|
|
print("Error: hugepages test fail.\n")
|
|||
|
|
return False
|
|||
|
|
return True
|
|||
|
|
@@ -241,7 +243,7 @@
|
|||
|
|
Command("echo 1 > %s/online" % memory_path).run()
|
|||
|
|
Command("cat %s/state" % memory_path).get_str("online")
|
|||
|
|
return True
|
|||
|
|
- except:
|
|||
|
|
+ except Exception:
|
|||
|
|
print("Error: fail to online %s." % memory_path)
|
|||
|
|
return False
|
|||
|
|
|
|||
|
|
@@ -255,7 +257,7 @@
|
|||
|
|
Command("echo 0 > %s/online" % memory_path).run()
|
|||
|
|
Command("cat %s/state" % memory_path).get_str("offline")
|
|||
|
|
return True
|
|||
|
|
- except:
|
|||
|
|
+ except Exception:
|
|||
|
|
print("Error: fail to online %s." % memory_path)
|
|||
|
|
return False
|
|||
|
|
|
|||
|
|
diff -urN oec-hardware/tests/network/ethernet.py oec-hardware_new/tests/network/ethernet.py
|
|||
|
|
--- oec-hardware/tests/network/ethernet.py 2021-09-13 11:43:59.394364553 +0800
|
|||
|
|
+++ oec-hardware_new/tests/network/ethernet.py 2021-09-13 11:42:03.413474274 +0800
|
|||
|
|
@@ -12,6 +12,8 @@
|
|||
|
|
# See the Mulan PSL v2 for more details.
|
|||
|
|
# Create: 2020-04-01
|
|||
|
|
|
|||
|
|
+"""ethernet test"""
|
|||
|
|
+
|
|||
|
|
import os
|
|||
|
|
import argparse
|
|||
|
|
|
|||
|
|
@@ -43,7 +45,7 @@
|
|||
|
|
path_pci = path_netdev.split('net')[0]
|
|||
|
|
cmd = "ls %s | grep -q infiniband" % path_pci
|
|||
|
|
print(cmd)
|
|||
|
|
- return 0 == os.system(cmd)
|
|||
|
|
+ return os.system(cmd) == 0
|
|||
|
|
|
|||
|
|
def setup(self, args=None):
|
|||
|
|
"""
|
|||
|
|
diff -urN oec-hardware/tests/network/infiniband.py oec-hardware_new/tests/network/infiniband.py
|
|||
|
|
--- oec-hardware/tests/network/infiniband.py 2021-09-13 11:43:59.394364553 +0800
|
|||
|
|
+++ oec-hardware_new/tests/network/infiniband.py 2021-09-13 11:42:03.413474274 +0800
|
|||
|
|
@@ -12,6 +12,8 @@
|
|||
|
|
# See the Mulan PSL v2 for more details.
|
|||
|
|
# Create: 2020-04-01
|
|||
|
|
|
|||
|
|
+"""InfiniBand Test"""
|
|||
|
|
+
|
|||
|
|
from rdma import RDMATest
|
|||
|
|
|
|||
|
|
|
|||
|
|
@@ -38,12 +40,12 @@
|
|||
|
|
if 'ACTIVE' not in self.state:
|
|||
|
|
print("[X] Link is not ACTIVE.")
|
|||
|
|
|
|||
|
|
- if 0x0 == self.base_lid:
|
|||
|
|
+ if self.base_lid == 0x0:
|
|||
|
|
print("[X] Fail to get base lid of %s." % self.interface)
|
|||
|
|
return False
|
|||
|
|
print("[.] The base lid is %s" % self.base_lid)
|
|||
|
|
|
|||
|
|
- if 0x0 == self.sm_lid:
|
|||
|
|
+ if self.sm_lid == 0x0:
|
|||
|
|
print("[X] Fail to get subnet manager lid of %s." % self.interface)
|
|||
|
|
return False
|
|||
|
|
print("[.] The subnet manager lid is %s" % self.sm_lid)
|
|||
|
|
diff -urN oec-hardware/tests/network/network.py oec-hardware_new/tests/network/network.py
|
|||
|
|
--- oec-hardware/tests/network/network.py 2021-09-13 11:43:59.394364553 +0800
|
|||
|
|
+++ oec-hardware_new/tests/network/network.py 2021-09-13 11:42:03.413474274 +0800
|
|||
|
|
@@ -12,6 +12,8 @@
|
|||
|
|
# See the Mulan PSL v2 for more details.
|
|||
|
|
# Create: 2020-04-01
|
|||
|
|
|
|||
|
|
+"""Network Test"""
|
|||
|
|
+
|
|||
|
|
import os
|
|||
|
|
import time
|
|||
|
|
import argparse
|
|||
|
|
@@ -58,7 +60,7 @@
|
|||
|
|
"""
|
|||
|
|
os.system("ip link set down %s" % interface)
|
|||
|
|
for _ in range(5):
|
|||
|
|
- if 0 == os.system("ip link show %s | grep 'state DOWN'" % interface):
|
|||
|
|
+ if os.system("ip link show %s | grep 'state DOWN'" % interface) == 0:
|
|||
|
|
return True
|
|||
|
|
time.sleep(1)
|
|||
|
|
return False
|
|||
|
|
@@ -72,7 +74,7 @@
|
|||
|
|
os.system("ip link set up %s" % interface)
|
|||
|
|
for _ in range(5):
|
|||
|
|
time.sleep(1)
|
|||
|
|
- if 0 == os.system("ip link show %s | grep 'state UP'" % interface):
|
|||
|
|
+ if os.system("ip link show %s | grep 'state UP'" % interface) == 0:
|
|||
|
|
return True
|
|||
|
|
return False
|
|||
|
|
|
|||
|
|
@@ -83,8 +85,8 @@
|
|||
|
|
"""
|
|||
|
|
ignore_interfaces = ['^lo', '^v', 'docker', 'br', 'bond']
|
|||
|
|
cmd = "ip route show default | awk '/default/ {print $5}'"
|
|||
|
|
- c = Command(cmd)
|
|||
|
|
- management_interface = c.read()
|
|||
|
|
+ com = Command(cmd)
|
|||
|
|
+ management_interface = com.read()
|
|||
|
|
if management_interface:
|
|||
|
|
ignore_interfaces.append(management_interface)
|
|||
|
|
# print(cmd)
|
|||
|
|
@@ -94,12 +96,12 @@
|
|||
|
|
# print(ignore_pattern)
|
|||
|
|
cmd = "ls /sys/class/net/ | grep -vE '%s'" % ignore_pattern
|
|||
|
|
# print(cmd)
|
|||
|
|
- c = Command(cmd)
|
|||
|
|
+ com = Command(cmd)
|
|||
|
|
try:
|
|||
|
|
- c.run()
|
|||
|
|
- return c.output
|
|||
|
|
- except Exception as e:
|
|||
|
|
- print(e)
|
|||
|
|
+ com.run()
|
|||
|
|
+ return com.output
|
|||
|
|
+ except Exception as concrete_error:
|
|||
|
|
+ print(concrete_error)
|
|||
|
|
return []
|
|||
|
|
|
|||
|
|
def set_other_interfaces_down(self):
|
|||
|
|
@@ -128,12 +130,12 @@
|
|||
|
|
Get speed on the interface
|
|||
|
|
:return:
|
|||
|
|
"""
|
|||
|
|
- c = Command("ethtool %s" % self.interface)
|
|||
|
|
+ com = Command("ethtool %s" % self.interface)
|
|||
|
|
pattern = r".*Speed:\s+(?P<speed>\d+)Mb/s"
|
|||
|
|
try:
|
|||
|
|
- speed = c.get_str(pattern, 'speed', False)
|
|||
|
|
+ speed = com.get_str(pattern, 'speed', False)
|
|||
|
|
return int(speed)
|
|||
|
|
- except Exception as e:
|
|||
|
|
+ except Exception:
|
|||
|
|
print("[X] No speed found on the interface.")
|
|||
|
|
return None
|
|||
|
|
|
|||
|
|
@@ -142,12 +144,12 @@
|
|||
|
|
Get interface ip
|
|||
|
|
:return:
|
|||
|
|
"""
|
|||
|
|
- c = Command("ip addr show %s" % self.interface)
|
|||
|
|
+ com = Command("ip addr show %s" % self.interface)
|
|||
|
|
pattern = r".*inet.? (?P<ip>.+)/.*"
|
|||
|
|
try:
|
|||
|
|
- ip = c.get_str(pattern, 'ip', False)
|
|||
|
|
- return ip
|
|||
|
|
- except Exception as e:
|
|||
|
|
+ ip_addr = com.get_str(pattern, 'ip', False)
|
|||
|
|
+ return ip_addr
|
|||
|
|
+ except Exception:
|
|||
|
|
print("[X] No available ip on the interface.")
|
|||
|
|
return None
|
|||
|
|
|
|||
|
|
@@ -157,18 +159,18 @@
|
|||
|
|
:return:
|
|||
|
|
"""
|
|||
|
|
count = 500
|
|||
|
|
- c = Command("ping -q -c %d -i 0 %s" % (count, self.server_ip))
|
|||
|
|
+ com = Command("ping -q -c %d -i 0 %s" % (count, self.server_ip))
|
|||
|
|
pattern = r".*, (?P<loss>\d+\.{0,1}\d*)% packet loss.*"
|
|||
|
|
|
|||
|
|
for _ in range(self.retries):
|
|||
|
|
try:
|
|||
|
|
- print(c.command)
|
|||
|
|
- loss = c.get_str(pattern, 'loss', False)
|
|||
|
|
- c.print_output()
|
|||
|
|
+ print(com.command)
|
|||
|
|
+ loss = com.get_str(pattern, 'loss', False)
|
|||
|
|
+ com.print_output()
|
|||
|
|
if float(loss) == 0:
|
|||
|
|
return True
|
|||
|
|
- except Exception as e:
|
|||
|
|
- print(e)
|
|||
|
|
+ except Exception as concrete_error:
|
|||
|
|
+ print(concrete_error)
|
|||
|
|
return False
|
|||
|
|
|
|||
|
|
def call_remote_server(self, cmd, act='start', ib_server_ip=''):
|
|||
|
|
@@ -191,8 +193,8 @@
|
|||
|
|
try:
|
|||
|
|
request = Request(url, data=data, headers=headers)
|
|||
|
|
response = urlopen(request)
|
|||
|
|
- except Exception as e:
|
|||
|
|
- print(e)
|
|||
|
|
+ except Exception as concrete_error:
|
|||
|
|
+ print(concrete_error)
|
|||
|
|
return False
|
|||
|
|
print("Status: %u %s" % (response.code, response.msg))
|
|||
|
|
return int(response.code) == 200
|
|||
|
|
@@ -205,15 +207,18 @@
|
|||
|
|
cmd = "qperf %s udp_lat" % self.server_ip
|
|||
|
|
print(cmd)
|
|||
|
|
for _ in range(self.retries):
|
|||
|
|
- if 0 == os.system(cmd):
|
|||
|
|
+ if os.system(cmd) == 0:
|
|||
|
|
return True
|
|||
|
|
return False
|
|||
|
|
|
|||
|
|
def test_tcp_latency(self):
|
|||
|
|
+ """
|
|||
|
|
+ tcp test
|
|||
|
|
+ """
|
|||
|
|
cmd = "qperf %s tcp_lat" % self.server_ip
|
|||
|
|
print(cmd)
|
|||
|
|
for _ in range(self.retries):
|
|||
|
|
- if 0 == os.system(cmd):
|
|||
|
|
+ if os.system(cmd) == 0:
|
|||
|
|
return True
|
|||
|
|
return False
|
|||
|
|
|
|||
|
|
@@ -224,24 +229,24 @@
|
|||
|
|
"""
|
|||
|
|
cmd = "qperf %s tcp_bw" % self.server_ip
|
|||
|
|
print(cmd)
|
|||
|
|
- c = Command(cmd)
|
|||
|
|
+ com = Command(cmd)
|
|||
|
|
pattern = r"\s+bw\s+=\s+(?P<bandwidth>[\.0-9]+ [MG]B/sec)"
|
|||
|
|
for _ in range(self.retries):
|
|||
|
|
try:
|
|||
|
|
- bandwidth = c.get_str(pattern, 'bandwidth', False)
|
|||
|
|
- bw = bandwidth.split()
|
|||
|
|
- if 'GB' in bw[1]:
|
|||
|
|
- bandwidth = float(bw[0]) * 8 * 1024
|
|||
|
|
+ bandwidth = com.get_str(pattern, 'bandwidth', False)
|
|||
|
|
+ band_width = bandwidth.split()
|
|||
|
|
+ if 'GB' in band_width[1]:
|
|||
|
|
+ bandwidth = float(band_width[0]) * 8 * 1024
|
|||
|
|
else:
|
|||
|
|
- bandwidth = float(bw[0]) * 8
|
|||
|
|
+ bandwidth = float(band_width[0]) * 8
|
|||
|
|
|
|||
|
|
target_bandwidth = self.target_bandwidth_percent * self.speed
|
|||
|
|
print("Current bandwidth is %.2fMb/s, target is %.2fMb/s" %
|
|||
|
|
(bandwidth, target_bandwidth))
|
|||
|
|
if bandwidth > target_bandwidth:
|
|||
|
|
return True
|
|||
|
|
- except Exception as e:
|
|||
|
|
- print(e)
|
|||
|
|
+ except Exception as concrete_error:
|
|||
|
|
+ print(concrete_error)
|
|||
|
|
return False
|
|||
|
|
|
|||
|
|
def create_testfile(self):
|
|||
|
|
@@ -249,10 +254,10 @@
|
|||
|
|
Create testfile
|
|||
|
|
:return:
|
|||
|
|
"""
|
|||
|
|
- bs = 128
|
|||
|
|
+ b_s = 128
|
|||
|
|
count = self.speed/8
|
|||
|
|
- cmd = "dd if=/dev/urandom of=%s bs=%uk count=%u" % (self.testfile, bs, count)
|
|||
|
|
- return 0 == os.system(cmd)
|
|||
|
|
+ cmd = "dd if=/dev/urandom of=%s bs=%uk count=%u" % (self.testfile, b_s, count)
|
|||
|
|
+ return os.system(cmd) == 0
|
|||
|
|
|
|||
|
|
def test_http_upload(self):
|
|||
|
|
"""
|
|||
|
|
@@ -264,10 +269,10 @@
|
|||
|
|
filename = os.path.basename(self.testfile)
|
|||
|
|
|
|||
|
|
try:
|
|||
|
|
- with open(self.testfile, 'rb') as f:
|
|||
|
|
- filetext = base64.b64encode(f.read())
|
|||
|
|
- except Exception as e:
|
|||
|
|
- print(e)
|
|||
|
|
+ with open(self.testfile, 'rb') as file_info:
|
|||
|
|
+ filetext = base64.b64encode(file_info.read())
|
|||
|
|
+ except Exception as concrete_error:
|
|||
|
|
+ print(concrete_error)
|
|||
|
|
return False
|
|||
|
|
|
|||
|
|
form['filename'] = filename
|
|||
|
|
@@ -283,8 +288,8 @@
|
|||
|
|
try:
|
|||
|
|
request = Request(url, data=data, headers=headers)
|
|||
|
|
response = urlopen(request)
|
|||
|
|
- except Exception as e:
|
|||
|
|
- print(e)
|
|||
|
|
+ except Exception as concrete_error:
|
|||
|
|
+ print(concrete_error)
|
|||
|
|
return False
|
|||
|
|
time_stop = time.time()
|
|||
|
|
time_upload = time_stop - time_start
|
|||
|
|
@@ -306,8 +311,8 @@
|
|||
|
|
time_start = time.time()
|
|||
|
|
try:
|
|||
|
|
response = urlopen(url)
|
|||
|
|
- except Exception as e:
|
|||
|
|
- print(e)
|
|||
|
|
+ except Exception as concrete_error:
|
|||
|
|
+ print(concrete_error)
|
|||
|
|
return False
|
|||
|
|
time_stop = time.time()
|
|||
|
|
time_download = time_stop - time_start
|
|||
|
|
@@ -316,10 +321,10 @@
|
|||
|
|
print(response.headers)
|
|||
|
|
filetext = response.read()
|
|||
|
|
try:
|
|||
|
|
- with open(self.testfile, 'wb') as f:
|
|||
|
|
- f.write(filetext)
|
|||
|
|
- except Exception as e:
|
|||
|
|
- print(e)
|
|||
|
|
+ with open(self.testfile, 'wb') as file_info:
|
|||
|
|
+ file_info.write(filetext)
|
|||
|
|
+ except Exception as concrete_error:
|
|||
|
|
+ print(concrete_error)
|
|||
|
|
return False
|
|||
|
|
|
|||
|
|
size = os.path.getsize(self.testfile)
|
|||
|
|
diff -urN oec-hardware/tests/network/rdma.py oec-hardware_new/tests/network/rdma.py
|
|||
|
|
--- oec-hardware/tests/network/rdma.py 2021-09-13 11:43:59.394364553 +0800
|
|||
|
|
+++ oec-hardware_new/tests/network/rdma.py 2021-09-13 11:42:03.413474274 +0800
|
|||
|
|
@@ -12,6 +12,8 @@
|
|||
|
|
# See the Mulan PSL v2 for more details.
|
|||
|
|
# Create: 2020-04-01
|
|||
|
|
|
|||
|
|
+"""RDMA Test"""
|
|||
|
|
+
|
|||
|
|
import os
|
|||
|
|
import re
|
|||
|
|
import argparse
|
|||
|
|
@@ -58,20 +60,20 @@
|
|||
|
|
path_ibdev = 'infiniband_verbs/uverb*/ibdev'
|
|||
|
|
path_ibdev = ''.join([path_pci, path_ibdev])
|
|||
|
|
cmd = "cat %s" % path_ibdev
|
|||
|
|
- c = Command(cmd)
|
|||
|
|
+ com = Command(cmd)
|
|||
|
|
try:
|
|||
|
|
- self.ib_device = c.read()
|
|||
|
|
- except Exception as e:
|
|||
|
|
- print(e)
|
|||
|
|
+ self.ib_device = com.read()
|
|||
|
|
+ except Exception as concrete_error:
|
|||
|
|
+ print(concrete_error)
|
|||
|
|
return False
|
|||
|
|
|
|||
|
|
path_ibport = '/sys/class/net/%s/dev_id' % self.interface
|
|||
|
|
cmd = "cat %s" % path_ibport
|
|||
|
|
- c = Command(cmd)
|
|||
|
|
+ com = Command(cmd)
|
|||
|
|
try:
|
|||
|
|
- self.ib_port = int(c.read(), 16) + 1
|
|||
|
|
- except Exception as e:
|
|||
|
|
- print(e)
|
|||
|
|
+ self.ib_port = int(com.read(), 16) + 1
|
|||
|
|
+ except Exception as concrete_error:
|
|||
|
|
+ print(concrete_error)
|
|||
|
|
return False
|
|||
|
|
|
|||
|
|
ib_str = "Infiniband device '%s' port %d" % (self.ib_device, self.ib_port)
|
|||
|
|
@@ -79,9 +81,9 @@
|
|||
|
|
|
|||
|
|
cmd = "ibstatus"
|
|||
|
|
print(cmd)
|
|||
|
|
- c = Command(cmd)
|
|||
|
|
+ com = Command(cmd)
|
|||
|
|
try:
|
|||
|
|
- output = c.read()
|
|||
|
|
+ output = com.read()
|
|||
|
|
for info in output.split('\n\n'):
|
|||
|
|
if ib_str not in info:
|
|||
|
|
continue
|
|||
|
|
@@ -93,8 +95,8 @@
|
|||
|
|
self.phys_state = re.search(r"phys state:\s+(.*)", info).group(1)
|
|||
|
|
self.link_layer = re.search(r"link_layer:\s+(.*)", info).group(1)
|
|||
|
|
self.speed = int(re.search(r"rate:\s+(\d*)", info).group(1)) * 1024
|
|||
|
|
- except Exception as e:
|
|||
|
|
- print(e)
|
|||
|
|
+ except Exception as concrete_error:
|
|||
|
|
+ print(concrete_error)
|
|||
|
|
return False
|
|||
|
|
|
|||
|
|
return True
|
|||
|
|
@@ -110,7 +112,7 @@
|
|||
|
|
|
|||
|
|
cmd = "rping -c -a %s -C 50 -v" % self.server_ip
|
|||
|
|
print(cmd)
|
|||
|
|
- if 0 == os.system(cmd):
|
|||
|
|
+ if os.system(cmd) == 0:
|
|||
|
|
return True
|
|||
|
|
else:
|
|||
|
|
self.call_remote_server('rping', 'stop')
|
|||
|
|
@@ -129,7 +131,7 @@
|
|||
|
|
print(cmd)
|
|||
|
|
ret = os.system(cmd)
|
|||
|
|
self.call_remote_server('rcopy', 'stop')
|
|||
|
|
- return 0 == ret
|
|||
|
|
+ return ret == 0
|
|||
|
|
|
|||
|
|
def test_bw(self, cmd):
|
|||
|
|
"""
|
|||
|
|
@@ -146,18 +148,18 @@
|
|||
|
|
|
|||
|
|
cmd = "%s %s -d %s -i %s" % (cmd, self.server_ip, self.ib_device, self.ib_port)
|
|||
|
|
print(cmd)
|
|||
|
|
- c = Command(cmd)
|
|||
|
|
+ com = Command(cmd)
|
|||
|
|
pattern = r"\s+(\d+)\s+(\d+)\s+([\.\d]+)\s+(?P<avg_bw>[\.\d]+)\s+([\.\d]+)"
|
|||
|
|
try:
|
|||
|
|
- avg_bw = c.get_str(pattern, 'avg_bw', False) # MB/sec
|
|||
|
|
+ avg_bw = com.get_str(pattern, 'avg_bw', False) # MB/sec
|
|||
|
|
avg_bw = float(avg_bw) * 8
|
|||
|
|
|
|||
|
|
tgt_bw = self.target_bandwidth_percent * self.speed
|
|||
|
|
print("Current bandwidth is %.2fMb/s, target is %.2fMb/s" %
|
|||
|
|
(avg_bw, tgt_bw))
|
|||
|
|
return avg_bw > tgt_bw
|
|||
|
|
- except Exception as e:
|
|||
|
|
- print(e)
|
|||
|
|
+ except Exception as concrete_error:
|
|||
|
|
+ print(concrete_error)
|
|||
|
|
self.call_remote_server(cmd, 'stop')
|
|||
|
|
return False
|
|||
|
|
|
|||
|
|
@@ -203,11 +205,11 @@
|
|||
|
|
Test ibstatus
|
|||
|
|
:return:
|
|||
|
|
"""
|
|||
|
|
- if 0 != os.system("systemctl start opensm"):
|
|||
|
|
+ if os.system("systemctl start opensm") != 0:
|
|||
|
|
print("[X] start opensm failed.")
|
|||
|
|
return False
|
|||
|
|
|
|||
|
|
- if 0 != os.system("modprobe ib_umad"):
|
|||
|
|
+ if os.system("modprobe ib_umad") != 0:
|
|||
|
|
print("[X] modprobe ib_umad failed.")
|
|||
|
|
return False
|
|||
|
|
|
|||
|
|
diff -urN oec-hardware/tests/nvme/nvme.py oec-hardware_new/tests/nvme/nvme.py
|
|||
|
|
--- oec-hardware/tests/nvme/nvme.py 2021-09-13 11:43:59.394364553 +0800
|
|||
|
|
+++ oec-hardware_new/tests/nvme/nvme.py 2021-09-13 11:42:03.413474274 +0800
|
|||
|
|
@@ -12,6 +12,8 @@
|
|||
|
|
# See the Mulan PSL v2 for more details.
|
|||
|
|
# Create: 2020-04-01
|
|||
|
|
|
|||
|
|
+"""Test Non-Volatile Memory express"""
|
|||
|
|
+
|
|||
|
|
import os
|
|||
|
|
import sys
|
|||
|
|
import argparse
|
|||
|
|
@@ -63,7 +65,8 @@
|
|||
|
|
sys.stdout.flush()
|
|||
|
|
|
|||
|
|
print("\nWritting...")
|
|||
|
|
- Command("nvme write -z %d -s 0 -d /dev/urandom /dev/%s 2> /dev/null" % (size, disk)).echo()
|
|||
|
|
+ Command("nvme write -z %d -s 0 -d /dev/urandom /dev/%s 2> /dev/null" \
|
|||
|
|
+ % (size, disk)).echo()
|
|||
|
|
sys.stdout.flush()
|
|||
|
|
|
|||
|
|
print("\nReading...")
|
|||
|
|
@@ -81,9 +84,9 @@
|
|||
|
|
|
|||
|
|
Command("nvme list").echo(ignore_errors=True)
|
|||
|
|
return True
|
|||
|
|
- except Exception as e:
|
|||
|
|
+ except Exception as concrete_error:
|
|||
|
|
print("Error: nvme cmd fail.")
|
|||
|
|
- print(e)
|
|||
|
|
+ print(concrete_error)
|
|||
|
|
return False
|
|||
|
|
|
|||
|
|
def in_use(self, disk):
|
|||
|
|
diff -urN oec-hardware/tests/perf/perf.py oec-hardware_new/tests/perf/perf.py
|
|||
|
|
--- oec-hardware/tests/perf/perf.py 2021-09-13 11:43:59.394364553 +0800
|
|||
|
|
+++ oec-hardware_new/tests/perf/perf.py 2021-09-13 11:42:03.413474274 +0800
|
|||
|
|
@@ -12,6 +12,8 @@
|
|||
|
|
# See the Mulan PSL v2 for more details.
|
|||
|
|
# Create: 2020-04-01
|
|||
|
|
|
|||
|
|
+"""Perf Test"""
|
|||
|
|
+
|
|||
|
|
import re
|
|||
|
|
from hwcompatible.test import Test
|
|||
|
|
from hwcompatible.command import Command
|
|||
|
|
diff -urN oec-hardware/tests/system/system.py oec-hardware_new/tests/system/system.py
|
|||
|
|
--- oec-hardware/tests/system/system.py 2021-09-13 11:43:59.394364553 +0800
|
|||
|
|
+++ oec-hardware_new/tests/system/system.py 2021-09-13 11:42:03.413474274 +0800
|
|||
|
|
@@ -12,6 +12,8 @@
|
|||
|
|
# See the Mulan PSL v2 for more details.
|
|||
|
|
# Create: 2020-04-01
|
|||
|
|
|
|||
|
|
+"""System Test"""
|
|||
|
|
+
|
|||
|
|
import os
|
|||
|
|
import sys
|
|||
|
|
import re
|
|||
|
|
@@ -82,7 +84,7 @@
|
|||
|
|
sys.stdout.flush()
|
|||
|
|
if rpm_verify.output and len(rpm_verify.output) > 0:
|
|||
|
|
return_code = False
|
|||
|
|
- except:
|
|||
|
|
+ except Exception:
|
|||
|
|
print("Error: files in %s have been tampered." % cert_package)
|
|||
|
|
return_code = False
|
|||
|
|
return return_code
|
|||
|
|
@@ -112,7 +114,7 @@
|
|||
|
|
if kernel_dict.document[os_version] != self.sysinfo.kernel_version:
|
|||
|
|
print("Error: kernel %s check GA status fail." % self.sysinfo.kernel_version)
|
|||
|
|
return_code = False
|
|||
|
|
- except:
|
|||
|
|
+ except Exception:
|
|||
|
|
print("Error: %s is not supported." % os_version)
|
|||
|
|
return_code = False
|
|||
|
|
|
|||
|
|
@@ -147,12 +149,15 @@
|
|||
|
|
print("")
|
|||
|
|
|
|||
|
|
tainted_file.close()
|
|||
|
|
- except Exception as e:
|
|||
|
|
- print(e)
|
|||
|
|
+ except Exception as concrete_error:
|
|||
|
|
+ print(concrete_error)
|
|||
|
|
print("Error: could not determine if kernel is tainted.")
|
|||
|
|
return_code = False
|
|||
|
|
|
|||
|
|
- if not os.system("rpm -V --nomtime --nomode --nocontexts %s" % kernel_rpm) is 0:
|
|||
|
|
+ except_list = ["/modules.dep$", "/modules.symbols$", "/modules.dep.bin$", \
|
|||
|
|
+ "/modules.symbols.bin$"]
|
|||
|
|
+ if os.system("rpm -V --nomtime --nomode --nocontexts %s | grep -Ev '%s'" % \
|
|||
|
|
+ (kernel_rpm, "|".join(except_list))) is 0:
|
|||
|
|
print("Error: files from %s were modified." % kernel_rpm)
|
|||
|
|
print("")
|
|||
|
|
return_code = False
|
|||
|
|
@@ -160,8 +165,8 @@
|
|||
|
|
try:
|
|||
|
|
params = Command("cat /proc/cmdline").get_str()
|
|||
|
|
print("Boot Parameters: %s" % params)
|
|||
|
|
- except Exception as e:
|
|||
|
|
- print(e)
|
|||
|
|
+ except Exception as concrete_error:
|
|||
|
|
+ print(concrete_error)
|
|||
|
|
print("Error: could not determine boot parameters.")
|
|||
|
|
return_code = False
|
|||
|
|
|
|||
|
|
@@ -228,7 +233,8 @@
|
|||
|
|
black_symbols = extra_symbols
|
|||
|
|
|
|||
|
|
if black_symbols:
|
|||
|
|
- print("Error: The following symbols are used by %s are not on the ABI whitelist." % module)
|
|||
|
|
+ print("Error: The following symbols are used by %s are not on the ABI \
|
|||
|
|
+ whitelist." % module)
|
|||
|
|
for symbol in black_symbols:
|
|||
|
|
print(symbol)
|
|||
|
|
return False
|
|||
|
|
@@ -280,17 +286,17 @@
|
|||
|
|
return None
|
|||
|
|
|
|||
|
|
if module_file[-2:] == "ko":
|
|||
|
|
- nm = os.popen('modprobe --dump-modversions ' + module_file)
|
|||
|
|
+ n_m = os.popen('modprobe --dump-modversions ' + module_file)
|
|||
|
|
else:
|
|||
|
|
- nm = open(module_file, "r")
|
|||
|
|
+ n_m = open(module_file, "r")
|
|||
|
|
|
|||
|
|
while True:
|
|||
|
|
- line = nm.readline()
|
|||
|
|
+ line = n_m.readline()
|
|||
|
|
if line == "":
|
|||
|
|
break
|
|||
|
|
symbols.append(line)
|
|||
|
|
|
|||
|
|
- nm.close()
|
|||
|
|
+ n_m.close()
|
|||
|
|
return self.readSymbols(symbols)
|
|||
|
|
|
|||
|
|
def get_modulefile(self, module):
|
|||
|
|
@@ -304,7 +310,7 @@
|
|||
|
|
if os.path.islink(modulefile):
|
|||
|
|
modulefile = os.readlink(modulefile)
|
|||
|
|
return modulefile
|
|||
|
|
- except:
|
|||
|
|
+ except Exception:
|
|||
|
|
print("Error: could no find module file for %s:" % module)
|
|||
|
|
return None
|
|||
|
|
|
|||
|
|
diff -urN oec-hardware/tests/usb/usb.py oec-hardware_new/tests/usb/usb.py
|
|||
|
|
--- oec-hardware/tests/usb/usb.py 2021-09-13 11:43:59.394364553 +0800
|
|||
|
|
+++ oec-hardware_new/tests/usb/usb.py 2021-09-13 11:42:03.413474274 +0800
|
|||
|
|
@@ -12,6 +12,8 @@
|
|||
|
|
# See the Mulan PSL v2 for more details.
|
|||
|
|
# Create: 2020-04-01
|
|||
|
|
|
|||
|
|
+"""Usb test"""
|
|||
|
|
+
|
|||
|
|
import sys
|
|||
|
|
import time
|
|||
|
|
|
|||
|
|
@@ -28,7 +30,7 @@
|
|||
|
|
def __init__(self):
|
|||
|
|
Test.__init__(self)
|
|||
|
|
self.requirements = ["usbutils"]
|
|||
|
|
- self.ui = CommandUI()
|
|||
|
|
+ self.com_ui = CommandUI()
|
|||
|
|
|
|||
|
|
def test(self):
|
|||
|
|
"""
|
|||
|
|
@@ -46,7 +48,7 @@
|
|||
|
|
print("#############")
|
|||
|
|
while True:
|
|||
|
|
print("Please plug in a USB device.")
|
|||
|
|
- if self.ui.prompt_confirm("Done well?"):
|
|||
|
|
+ if self.com_ui.prompt_confirm("Done well?"):
|
|||
|
|
break
|
|||
|
|
time.sleep(1)
|
|||
|
|
|
|||
|
|
@@ -73,7 +75,7 @@
|
|||
|
|
plugged_device = new_plugged
|
|||
|
|
while True:
|
|||
|
|
print("Please unplug the USB device you plugged in just now.")
|
|||
|
|
- if self.ui.prompt_confirm("Done well?"):
|
|||
|
|
+ if self.com_ui.prompt_confirm("Done well?"):
|
|||
|
|
break
|
|||
|
|
time.sleep(1)
|
|||
|
|
|
|||
|
|
@@ -94,7 +96,7 @@
|
|||
|
|
sys.stdout.flush()
|
|||
|
|
plugged_device = new_plugged
|
|||
|
|
|
|||
|
|
- if self.ui.prompt_confirm("All usb sockets have been tested?"):
|
|||
|
|
+ if self.com_ui.prompt_confirm("All usb sockets have been tested?"):
|
|||
|
|
return True
|
|||
|
|
|
|||
|
|
def get_usb(self):
|
|||
|
|
diff -urN oec-hardware/tests/watchdog/watchdog.py oec-hardware_new/tests/watchdog/watchdog.py
|
|||
|
|
--- oec-hardware/tests/watchdog/watchdog.py 2021-09-13 11:43:59.394364553 +0800
|
|||
|
|
+++ oec-hardware_new/tests/watchdog/watchdog.py 2021-09-13 11:42:03.413474274 +0800
|
|||
|
|
@@ -43,8 +43,9 @@
|
|||
|
|
|
|||
|
|
os.chdir(self.test_dir)
|
|||
|
|
try:
|
|||
|
|
- timeout = Command("./watchdog -g").get_str(regex="^Watchdog timeout is (?P<timeout>[0-9]*) seconds.$",
|
|||
|
|
- regex_group="timeout")
|
|||
|
|
+ timeout = Command("./watchdog -g").get_str(
|
|||
|
|
+ regex="^Watchdog timeout is (?P<timeout>[0-9]*) seconds.$",
|
|||
|
|
+ regex_group="timeout")
|
|||
|
|
timeout = int(timeout)
|
|||
|
|
if timeout > self.max_timeout:
|
|||
|
|
Command("./watchdog -s %d" % self.max_timeout).echo()
|