From 8b0018e93eac657d4f4423414fa8e23b0597ae0d Mon Sep 17 00:00:00 2001 From: Shin'ichiro Kawasaki Date: Thu, 29 Aug 2024 17:58:25 +0900 Subject: [PATCH] t/jobs/t0033: add test for the log file format Add a test to check the log file format which is described in the "Log File Format" section in HOWTO.rst. Generate log files using combination of options relevant to log files, and check that lines in log files have the format expected. This test helps to confirm that the changes in the log file related functions do not cause regressions. Signed-off-by: Shin'ichiro Kawasaki Link: https://lore.kernel.org/r/20240829085826.999859-9-shinichiro.kawasaki@wdc.com Signed-off-by: Vincent Fu --- t/jobs/t0033.fio | 28 ++++++++++++++++++++++++++++ t/run-fio-tests.py | 35 +++++++++++++++++++++++++++++++++++ 2 files changed, 63 insertions(+) create mode 100644 t/jobs/t0033.fio diff --git a/t/jobs/t0033.fio b/t/jobs/t0033.fio new file mode 100644 index 00000000..156bdadc --- /dev/null +++ b/t/jobs/t0033.fio @@ -0,0 +1,28 @@ +[global] +rw=read +filename=t0033file +size=8k +time_based +runtime=2s +ioengine=libaio +iodepth=1 + +[job1] +write_bw_log=log +log_prio=1 + +[job2] +write_lat_log=log +log_avg_msec=100 +log_window_value=both + +[job3] +write_iops_log=log +log_offset=1 +log_prio=1 + +[job4] +write_iops_log=log +log_avg_msec=100 +log_window_value=both +log_offset=1 diff --git a/t/run-fio-tests.py b/t/run-fio-tests.py index 22580613..dfd5eac9 100755 --- a/t/run-fio-tests.py +++ b/t/run-fio-tests.py @@ -47,6 +47,7 @@ import time import shutil import logging import argparse +import re from pathlib import Path from statsmodels.sandbox.stats.runs import runstest_1samp from fiotestlib import FioExeTest, FioJobFileTest, run_fio_tests @@ -553,6 +554,30 @@ class FioJobFileTest_t0029(FioJobFileTest): if self.json_data['jobs'][1]['read']['io_kbytes'] != 8: self.passed = False +class FioJobFileTest_t0033(FioJobFileTest): + """Test log file format""" + def check_result(self): + super().check_result() + + if not self.passed: + return + + patterns = { + 'log_bw.1.log': '\\d+, \\d+, \\d+, \\d+, 0x[\\da-f]+\\n', + 'log_clat.2.log': '\\d+, \\d+, \\d+, \\d+, 0, \\d+\\n', + 'log_iops.3.log': '\\d+, \\d+, \\d+, \\d+, \\d+, 0x[\\da-f]+\\n', + 'log_iops.4.log': '\\d+, \\d+, \\d+, \\d+, 0, 0, \\d+\\n', + } + + for logfile in patterns.keys(): + file_path = os.path.join(self.paths['test_dir'], logfile) + with open(file_path, "r") as f: + line = f.readline() + if not re.match(patterns[logfile], line): + self.passed = False + self.failure_reason = "wrong log file format: " + logfile + return + class FioJobFileTest_iops_rate(FioJobFileTest): """Test consists of fio test job t0011 Confirm that job0 iops == 1000 @@ -878,6 +903,16 @@ TEST_LIST = [ 'pre_success': SUCCESS_DEFAULT, 'requirements': [Requirements.linux, Requirements.libaio], }, + { + 'test_id': 33, + 'test_class': FioJobFileTest_t0033, + 'job': 't0033.fio', + 'success': SUCCESS_DEFAULT, + 'pre_job': None, + 'pre_success': None, + 'pre_success': SUCCESS_DEFAULT, + 'requirements': [Requirements.linux, Requirements.libaio], + }, { 'test_id': 1000, 'test_class': FioExeTest, -- 2.25.1