summaryrefslogtreecommitdiffstats
path: root/tests/crashme/run_tests.py
diff options
context:
space:
mode:
Diffstat (limited to 'tests/crashme/run_tests.py')
-rw-r--r--tests/crashme/run_tests.py95
1 files changed, 95 insertions, 0 deletions
diff --git a/tests/crashme/run_tests.py b/tests/crashme/run_tests.py
new file mode 100644
index 0000000..93f62cd
--- /dev/null
+++ b/tests/crashme/run_tests.py
@@ -0,0 +1,95 @@
+import pytest
+import subprocess
+import pathlib
+import os
+import json
+
+from plugins.agl_test_base import AGLBaseTest
+
+class CrashmeBase(AGLBaseTest):
+ def __init__(self):
+ super().__init__(name="crashme")
+
+ def setup_runtest_params(self):
+ # Get env 'STRESS_LEVEL'
+ env_dist=os.environ
+ local_stress_level = str(env_dist.get("STRESS_LEVEL"))
+
+ # If not set correctly or just not set, set default to "low"
+ if local_stress_level not in ("low", "mid", "high"):
+ local_stress_level = "low"
+
+ # Read dictionary data out of spec.json
+ spec_file_location = self.get_spec_path()
+ fp = open(spec_file_location, 'r')
+
+ json_data = fp.read()
+ spec_dict = json.loads(json_data)
+
+ dict_key="stress_level_" + str(local_stress_level)
+
+ local_param_nbytes = spec_dict[dict_key]['NBYTES']
+ local_param_srand = spec_dict[dict_key]['SRAND']
+ local_param_ntries = spec_dict[dict_key]['NTRIES']
+ local_param_nsub = spec_dict[dict_key]['NSUB']
+
+ param_string = str(local_param_nbytes) + ' ' \
+ + str(local_param_srand) + ' ' \
+ + str(local_param_ntries) + ' ' \
+ + str(local_param_nsub)
+
+ return param_string
+
+ def run_test_fun(self):
+ log_file = self.get_logfile()
+ cwd_buf = self.get_temp_logdir()
+ oss_workdir = self.get_workdir()
+ runtest_param_buf = self.setup_runtest_params()
+
+ run_test_cmd = oss_workdir + 'crashme ' + runtest_param_buf + \
+ ' | grep "^Test complete\\|^exit status\\|' + \
+ '^child_kill_count\\|[.]\\{3\\}\\|^Number of distinct cases"'
+
+ with open(log_file, 'w') as log_f:
+ run_test_crashme = subprocess.run(run_test_cmd, shell=True,
+ cwd=cwd_buf, stdout=log_f, stderr=subprocess.DEVNULL)
+ log_f.close()
+
+ if (run_test_crashme.returncode == 0):
+ self.case_info_list = {'test_crashme':
+ ['test_crashme', str(run_test_crashme.returncode), 'passed']}
+ else:
+ self.case_info_list = {'test_crashme':
+ ['test_crashme', str(run_test_crashme.returncode), 'failed']}
+
+ def precheck(self):
+ test_file_location = self.get_workdir() + "/crashme"
+ path_checker = pathlib.Path(test_file_location)
+ return super().precheck() and path_checker.is_file()
+
+@pytest.fixture(scope='module')
+def testbase():
+ #init instance for test
+ instance = CrashmeBase()
+
+ #run test scripts
+ instance.run_test_fun()
+
+ yield instance
+
+ #package log files and make report file
+ instance.log_report()
+
+def precheck():
+ instance = CrashmeBase()
+ return instance.precheck()
+skip_msg = "The current environment does not match the test requirements."
+pytestmark = pytest.mark.skipif(precheck() == False, reason = skip_msg)
+
+@pytest.mark.dangerous
+@pytest.mark.order("last")
+def test_crashme(testbase: CrashmeBase):
+ assert testbase.case_info_list['test_crashme'][1] == '0'
+
+if __name__ == '__main__':
+ pytest.main("-s run_tests")