324 lines
12 KiB
Diff
324 lines
12 KiB
Diff
diff -Naur rpm/tests/infiniband/infiniband.py oech/tests/infiniband/infiniband.py
|
|
--- rpm/tests/infiniband/infiniband.py 2022-08-03 18:05:22.031340460 +0800
|
|
+++ oech/tests/infiniband/infiniband.py 2022-08-03 18:02:43.727340460 +0800
|
|
@@ -29,6 +29,7 @@
|
|
self.target_bandwidth_percent = 0.5
|
|
self.config_data = dict()
|
|
self.server_ip = ""
|
|
+ self.server_port = "80"
|
|
self.args = None
|
|
|
|
def test_ib_link(self):
|
|
@@ -68,6 +69,8 @@
|
|
self.config_data = getattr(self.args, "config_data", None)
|
|
if self.config_data:
|
|
self.server_ip = self.config_data.get("server_ip", "")
|
|
+ if ":" in self.server_ip:
|
|
+ self.server_ip, self.server_port = self.server_ip.split(":")
|
|
else:
|
|
self.logger.error("Failed to test item value from configuration file.")
|
|
|
|
diff -Naur rpm/tests/infiniband/network.py oech/tests/infiniband/network.py
|
|
--- rpm/tests/infiniband/network.py 2022-08-03 18:05:22.031340460 +0800
|
|
+++ oech/tests/infiniband/network.py 2022-08-03 18:02:43.727340460 +0800
|
|
@@ -34,6 +34,7 @@
|
|
self.interface = None
|
|
self.other_interfaces = []
|
|
self.server_ip = None
|
|
+ self.server_port = "80"
|
|
self.retries = 3
|
|
self.speed = 1000 # Mb/s
|
|
self.target_bandwidth_percent = 0.8
|
|
@@ -94,7 +95,7 @@
|
|
form = dict()
|
|
form['cmd'] = cmd
|
|
form['ib_server_ip'] = ib_server_ip
|
|
- url = 'http://%s/api/%s' % (self.server_ip, act)
|
|
+ url = 'http://%s:%s/api/%s' % (self.server_ip, self.server_port, act)
|
|
data = urlencode(form).encode('utf8')
|
|
headers = {
|
|
'Content-type': 'application/x-www-form-urlencoded',
|
|
diff -Naur rpm/tests/network/ethernet.py oech/tests/network/ethernet.py
|
|
--- rpm/tests/network/ethernet.py 2022-08-03 18:05:22.031340460 +0800
|
|
+++ oech/tests/network/ethernet.py 2022-08-03 18:02:43.727340460 +0800
|
|
@@ -33,6 +33,7 @@
|
|
self.device = None
|
|
self.config_data = dict()
|
|
self.server_ip = ""
|
|
+ self.server_port = "80"
|
|
self.subtests = [self.test_ip_info, self.test_eth_link, self.test_icmp,
|
|
self.test_udp_tcp, self.test_http]
|
|
self.target_bandwidth_percent = 0.75
|
|
@@ -61,7 +62,9 @@
|
|
self.show_driver_info()
|
|
self.config_data = getattr(args, "config_data", None)
|
|
if self.config_data:
|
|
- self.server_ip = self.config_data.get("server_ip")
|
|
+ self.server_ip = self.config_data.get("server_ip", "")
|
|
+ if ":" in self.server_ip:
|
|
+ self.server_ip, self.server_port = self.server_ip.split(":")
|
|
choice = self.config_data.get("if_rdma")
|
|
else:
|
|
self.logger.error("Get test item value from configuration file failed.")
|
|
diff -Naur rpm/tests/network/network.py oech/tests/network/network.py
|
|
--- rpm/tests/network/network.py 2022-08-03 18:05:22.031340460 +0800
|
|
+++ oech/tests/network/network.py 2022-08-03 18:02:43.727340460 +0800
|
|
@@ -22,6 +22,7 @@
|
|
|
|
from hwcompatible.test import Test
|
|
from hwcompatible.command import Command
|
|
+from hwcompatible.constants import FILE_FLAGS, FILE_MODES
|
|
|
|
|
|
class NetworkTest(Test):
|
|
@@ -33,6 +34,7 @@
|
|
self.requirements = ['ethtool', 'iproute', 'psmisc', 'qperf']
|
|
self.retries = 3
|
|
self.testfile = 'testfile'
|
|
+ self.speed = 0
|
|
|
|
def ifdown(self, interface):
|
|
"""
|
|
@@ -72,7 +74,7 @@
|
|
return int(speed)
|
|
except Exception:
|
|
self.logger.error("[X] No speed found on the interface.")
|
|
- return None
|
|
+ return 0
|
|
|
|
def get_interface_ip(self):
|
|
"""
|
|
@@ -86,7 +88,7 @@
|
|
return ip_addr
|
|
except Exception:
|
|
self.logger.error("[X] No available ip on the interface.")
|
|
- return None
|
|
+ return ""
|
|
|
|
def test_icmp(self):
|
|
"""
|
|
@@ -98,14 +100,14 @@
|
|
pattern = r".*, (?P<loss>\d+\.{0,1}\d*)% packet loss.*"
|
|
|
|
for _ in range(self.retries):
|
|
+ self.logger.info(com.command)
|
|
try:
|
|
- self.logger.info(com.command)
|
|
loss = com.get_str(pattern, 'loss', False)
|
|
- com.print_output()
|
|
- if float(loss) == 0:
|
|
- return True
|
|
except Exception as concrete_error:
|
|
self.logger.error(concrete_error)
|
|
+ if float(loss) == 0:
|
|
+ return True
|
|
+ com.print_output()
|
|
return False
|
|
|
|
def call_remote_server(self, cmd, act='start', ib_server_ip=''):
|
|
@@ -119,14 +121,15 @@
|
|
form = dict()
|
|
form['cmd'] = cmd
|
|
form['ib_server_ip'] = ib_server_ip
|
|
- url = 'http://%s/api/%s' % (self.server_ip, act)
|
|
+ url = 'http://%s:%s/api/%s' % (self.server_ip, self.server_port, act)
|
|
data = urlencode(form).encode('utf8')
|
|
headers = {
|
|
'Content-type': 'application/x-www-form-urlencoded',
|
|
'Accept': 'text/plain'
|
|
}
|
|
+
|
|
+ request = Request(url, data=data, headers=headers)
|
|
try:
|
|
- request = Request(url, data=data, headers=headers)
|
|
response = urlopen(request)
|
|
except Exception as concrete_error:
|
|
self.logger.error(str(concrete_error))
|
|
@@ -169,19 +172,20 @@
|
|
for _ in range(self.retries):
|
|
try:
|
|
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(band_width[0]) * 8
|
|
-
|
|
- target_bandwidth = self.target_bandwidth_percent * self.speed
|
|
- self.logger.info("Current bandwidth is %.2fMb/s, target is %.2fMb/s" %
|
|
- (bandwidth, target_bandwidth))
|
|
- if bandwidth > target_bandwidth:
|
|
- return True
|
|
except Exception as concrete_error:
|
|
self.logger.error(concrete_error)
|
|
+ band_width = bandwidth.split()
|
|
+ if 'GB' in band_width[1]:
|
|
+ bandwidth = float(band_width[0]) * 8 * 1024
|
|
+ else:
|
|
+ bandwidth = float(band_width[0]) * 8
|
|
+
|
|
+ target_bandwidth = self.target_bandwidth_percent * self.speed
|
|
+ self.logger.info(
|
|
+ "Current bandwidth is %.2fMb/s, target is %.2fMb/s" %
|
|
+ (bandwidth, target_bandwidth))
|
|
+ if bandwidth > target_bandwidth:
|
|
+ return True
|
|
return False
|
|
|
|
def create_testfile(self):
|
|
@@ -212,7 +216,7 @@
|
|
|
|
form['filename'] = filename
|
|
form['filetext'] = filetext
|
|
- url = 'http://%s/api/file/upload' % self.server_ip
|
|
+ url = 'http://%s:%s/api/file/upload' % (self.server_ip, self.server_port)
|
|
data = urlencode(form).encode('utf8')
|
|
headers = {
|
|
'Content-type': 'application/x-www-form-urlencoded',
|
|
@@ -220,8 +224,8 @@
|
|
}
|
|
|
|
time_start = time.time()
|
|
+ request = Request(url, data=data, headers=headers)
|
|
try:
|
|
- request = Request(url, data=data, headers=headers)
|
|
response = urlopen(request)
|
|
except Exception as concrete_error:
|
|
self.logger.error(concrete_error)
|
|
@@ -242,7 +246,7 @@
|
|
:return:
|
|
"""
|
|
filename = os.path.basename(self.testfile)
|
|
- url = "http://%s/files/%s" % (self.server_ip, filename)
|
|
+ url = "http://%s:%s/files/%s" % (self.server_ip, self.server_port, filename)
|
|
|
|
time_start = time.time()
|
|
try:
|
|
@@ -257,7 +261,8 @@
|
|
self.logger.info(str(response.headers), terminal_print=False)
|
|
filetext = response.read()
|
|
try:
|
|
- with open(self.testfile, 'wb') as file_info:
|
|
+ with os.fdopen(os.open(self.testfile, FILE_FLAGS, FILE_MODES),
|
|
+ "wb") as file_info:
|
|
file_info.write(filetext)
|
|
except Exception as concrete_error:
|
|
self.logger.error(concrete_error)
|
|
diff -Naur rpm/tests/system/system.py oech/tests/system/system.py
|
|
--- rpm/tests/system/system.py 2022-08-03 18:13:04.395340460 +0800
|
|
+++ oech/tests/system/system.py 2022-08-03 18:06:55.651340460 +0800
|
|
@@ -69,17 +69,16 @@
|
|
self.logger.info("Checking installed cert package...")
|
|
for cert_package in ["oec-hardware"]:
|
|
rpm_verify = Command(
|
|
- "rpm -V --nomtime --nomode --nocontexts %s &>> %s" %
|
|
- (cert_package, self.logger.logfile))
|
|
- rpm_verify.echo(ignore_errors=True)
|
|
- output = rpm_verify.read().split('\n')
|
|
- for file in output:
|
|
- if "test_config.yaml" in file:
|
|
- continue
|
|
- else:
|
|
- self.logger.error(
|
|
- "Files in %s have been tampered." % cert_package)
|
|
- return False
|
|
+ "rpm -V --nomtime --nomode --nocontexts %s" % cert_package)
|
|
+ output = rpm_verify.read()
|
|
+ if output:
|
|
+ for file in output.split('\n'):
|
|
+ if "test_config.yaml" in file:
|
|
+ continue
|
|
+ else:
|
|
+ self.logger.error("Files in %s have beem tampered. \nThe tampered files are as follows:\n %s" %
|
|
+ (cert_package, output))
|
|
+ return False
|
|
return True
|
|
|
|
def check_kernel(self):
|
|
@@ -173,85 +172,6 @@
|
|
proc_modules.close()
|
|
return modules
|
|
|
|
- def abi_check(self, module):
|
|
- """
|
|
- Check abi whitelist
|
|
- :param module:
|
|
- :return:
|
|
- """
|
|
- whitelist_path = [("/lib/modules/kabi-current/kabi_whitelist_" + self.sysinfo.arch),
|
|
- ("/lib/modules/kabi/kabi_whitelist_" + self.sysinfo.arch),
|
|
- ("/usr/src/kernels/%s/kabi_whitelist" %
|
|
- self.sysinfo.kernel)
|
|
- ]
|
|
- whitelist = ""
|
|
- for whitelist in whitelist_path:
|
|
- if os.path.exists(whitelist):
|
|
- break
|
|
-
|
|
- if not os.path.exists(whitelist):
|
|
- self.logger.error(
|
|
- "Unable not find whitelist file in any of the following locations:")
|
|
- self.logger.error("\n".join(whitelist_path))
|
|
- return False
|
|
-
|
|
- whitelist_symbols = self.read_abi_whitelist(whitelist)
|
|
- if not whitelist_symbols:
|
|
- return False
|
|
- module_symbols = self.read_module(module)
|
|
- if not module_symbols:
|
|
- return False
|
|
- extra_symbols = list()
|
|
- for symbol in module_symbols:
|
|
- if symbol not in whitelist_symbols:
|
|
- extra_symbols.append(symbol)
|
|
-
|
|
- black_symbols = list()
|
|
- if extra_symbols:
|
|
- greylist = "/usr/share/doc/kmod-%s/greylist.txt" % module
|
|
- if os.path.exists(greylist):
|
|
- self.logger.info("checking greylist for %s" % module)
|
|
- greylist_symbols = self.read_abi_whitelist(greylist)
|
|
- for symbol in extra_symbols:
|
|
- if symbol not in greylist_symbols:
|
|
- black_symbols.append(symbol)
|
|
- else:
|
|
- black_symbols = extra_symbols
|
|
-
|
|
- if black_symbols:
|
|
- self.logger.error("The following symbols are used by %s are not on the ABI \
|
|
- whitelist." % module)
|
|
- for symbol in black_symbols:
|
|
- self.logger.error(symbol)
|
|
- return False
|
|
- return True
|
|
-
|
|
- def read_abi_whitelist(self, whitelist):
|
|
- """
|
|
- Read abi whitelist
|
|
- :param whitelist:
|
|
- :return:
|
|
- """
|
|
- symbols = list()
|
|
- if not os.path.isfile(whitelist):
|
|
- self.logger.error("Failed to read the whitelist file")
|
|
- return None
|
|
-
|
|
- whitelistfile = open(whitelist, "r")
|
|
- while True:
|
|
- line = whitelistfile.readline()
|
|
- if line == "":
|
|
- break
|
|
- if line == "\n":
|
|
- continue
|
|
- line.split()
|
|
- if line[0] == '[':
|
|
- continue
|
|
- symbol = line.strip()
|
|
- symbols.append(symbol)
|
|
-
|
|
- return symbols
|
|
-
|
|
def read_module(self, module):
|
|
"""
|
|
Read module
|