summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--tests/LTP/__init__.py0
-rw-r--r--tests/LTP/agl_test_ltp_base.py130
-rw-r--r--tests/LTP/math/__init__.py0
-rw-r--r--tests/LTP/math/run_tests.py24
4 files changed, 154 insertions, 0 deletions
diff --git a/tests/LTP/__init__.py b/tests/LTP/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/tests/LTP/__init__.py
diff --git a/tests/LTP/agl_test_ltp_base.py b/tests/LTP/agl_test_ltp_base.py
new file mode 100644
index 0000000..1e6eac9
--- /dev/null
+++ b/tests/LTP/agl_test_ltp_base.py
@@ -0,0 +1,130 @@
+import subprocess
+import pathlib
+import re
+
+import plugins.agl_test_conf as conf
+from plugins.agl_test_base import AGLBaseTest
+
+class LTPBase(AGLBaseTest):
+
+ LTPDIR = "/opt/ltp/"
+ RUNLTP = LTPDIR + "runltp"
+ LTPTEST = LTPDIR + "runtest/"
+
+ #Test name without the prefix of "ltp/"
+ test_name: str
+
+ def __init__(self, test_name: str):
+ self.test_name = test_name
+ super().__init__(name = ("ltp/" + test_name))
+
+ #Check and clean exit log
+ tmp_log_dir = self.get_temp_logdir() + "/log/"
+ log_file = tmp_log_dir + self.test_name + ".log"
+ log_path = pathlib.Path(log_file)
+ check_log_path = log_path.is_file()
+ if check_log_path:
+ subprocess.run("rm " + tmp_log_dir + "*", shell = True)
+
+ def get_test_case_list(self):
+ case_list = list()
+ reObj = re.compile('^([\\w\-]+)(\\s+)(\\w+)', re.MULTILINE)
+
+ test_file = self.LTPTEST + self.test_name
+ test_cases = open(test_file, 'r')
+ line = test_cases.readline()
+ while line:
+ matchs = reObj.search(line)
+ if matchs:
+ groups = matchs.groups()
+ case_list.append(groups[0])
+ line = test_cases.readline()
+
+ test_cases.close()
+ return case_list
+
+ #Run test by runltp
+ def run_test_fun(self, case_name):
+ tmp_log_dir = self.get_temp_logdir() + "/log/"
+ run_test_cmd = self.RUNLTP + \
+ " -f " + self.test_name + \
+ " -s "+ "^" + case_name + "\\\\b" + \
+ " -p " + \
+ " -o " + tmp_log_dir + self.test_name + ".output " + \
+ " -l " + tmp_log_dir + self.test_name + ".log " + \
+ " -C " + tmp_log_dir + self.test_name + ".failed " + \
+ " -T " + tmp_log_dir + self.test_name + ".tconf "
+
+ console_log = tmp_log_dir + self.test_name + ".console"
+
+ with open(console_log, 'a') as consolelog:
+ subprocess.run(run_test_cmd, shell = True, stdout = consolelog,
+ stderr = consolelog)
+ consolelog.close()
+
+ def run_case(self, case_id):
+ case_info = self.get_caseinfo_by_name(case_id)
+ if (case_info[2] == ""):
+ if (case_info[1] == "PASS"):
+ case_info[2] = "passed"
+ elif (case_info[1] == "FAIL"):
+ case_info[2] = "failed"
+ elif (case_info[1] == "CONF"):
+ case_info[2] = "skipped"
+ else:
+ case_info[2] = "failed"
+
+ self.update_caseinfo_by_name(case_id, case_info)
+ assert case_info[2] == "passed" or case_info[2] == "skipped" or case_info[2] == "xpassed"
+
+ def precheck(self):
+ # Check for common
+ check_common = super().precheck()
+
+ # Check for runltp script
+ runltp_script = pathlib.Path(self.RUNLTP)
+ check_runltp_script = runltp_script.is_file()
+
+ # Check self test file
+ test_file = pathlib.Path(self.LTPTEST + self.test_name)
+ check_test_file = test_file.is_file()
+
+ return check_common and check_runltp_script and check_test_file
+
+ def log_process(self):
+ tmp_log_dir = conf.get_tmp_log_dir(self.name)
+ log_file = tmp_log_dir + self.test_name + ".log"
+ case_result = self.log_parser(log_file)
+ self.case_info_list[case_result[0]] = [case_result[0], case_result[2], ""]
+
+ #Log sample:
+ #Testcase Result Exit Value
+ #-------- ------ ----------
+ #cve-2011-0999 PASS 0
+ #cve-2011-2183 CONF 32
+ #cve-2011-2496 FAIL 1
+ def log_parser(self, log_file):
+ reObj = re.compile('^(.+\\w+)( +)(PASS|CONF|FAIL)( +)(\\d+)', re.MULTILINE)
+ case_list = dict()
+ test_log = open(log_file, 'r')
+
+ lines = test_log.readlines()
+ num = -1
+ line = lines[num]
+ while line:
+ matchs = reObj.search(line)
+
+ if matchs:
+ groups = matchs.groups()
+ test_log.close()
+ return groups
+
+ num = num - 1
+ line = lines[num]
+
+ test_log.close()
+
+ def run_ltp_test(self, case_name):
+ if(self.precheck() == True):
+ self.run_test_fun(case_name)
+ self.log_process()
diff --git a/tests/LTP/math/__init__.py b/tests/LTP/math/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/tests/LTP/math/__init__.py
diff --git a/tests/LTP/math/run_tests.py b/tests/LTP/math/run_tests.py
new file mode 100644
index 0000000..9f82915
--- /dev/null
+++ b/tests/LTP/math/run_tests.py
@@ -0,0 +1,24 @@
+import pytest
+
+from tests.LTP.agl_test_ltp_base import LTPBase
+
+class MathBase(LTPBase):
+ def __init__(self):
+ super().__init__(test_name="math")
+
+instance = MathBase()
+test_case_list = instance.get_test_case_list()
+
+@pytest.fixture(scope='module')
+def testbase():
+ yield instance
+ #package log files and make report file
+ instance.log_report()
+
+@pytest.mark.parametrize('case_name', test_case_list)
+def test_ltp_math(testbase: MathBase, case_name):
+ testbase.run_ltp_test(case_name)
+ testbase.run_case(case_name)
+
+if __name__ == '__main__':
+ pytest.main("-s run_tests")