--- /dev/null
+#!/usr/bin/env python3
+# SPDX-License-Identifier: GPL-2.0-only
+#
+# Copyright (c) 2020 Western Digital Corporation or its affiliates.
+#
+"""
+jsonplus2csv-test.py
+
+Do one basic test of tools/fio_jsonplus2csv
+
+USAGE
+python jsonplus2csv-test.py [-f fio-executable] [-s script-location]
+
+EXAMPLES
+python t/jsonplus2csv-test.py
+python t/jsonplus2csv-test.py -f ./fio -s tools
+
+REQUIREMENTS
+Python 3.5+
+"""
+
+import os
+import sys
+import platform
+import argparse
+import subprocess
+
+
+def parse_args():
+ """Parse command-line arguments."""
+
+ parser = argparse.ArgumentParser()
+ parser.add_argument('-f', '--fio',
+ help='path to fio executable (e.g., ./fio)')
+ parser.add_argument('-s', '--script',
+ help='directory containing fio_jsonplus2csv script')
+ return parser.parse_args()
+
+
+def run_fio(fio):
+ """Run fio to generate json+ data.
+
+ Parameters:
+ fio path to fio executable.
+ """
+
+ if platform.system() == 'Linux':
+ aio = 'libaio'
+ elif platform.system() == 'Windows':
+ aio = 'windowsaio'
+ else:
+ aio = 'posixaio'
+
+ fio_args = [
+ "--output=fio-output.json",
+ "--output-format=json+",
+ "--filename=fio_jsonplus_clat2csv.test",
+ "--ioengine=" + aio,
+ "--time_based",
+ "--runtime=3s",
+ "--size=1G",
+ "--slat_percentiles=1",
+ "--clat_percentiles=1",
+ "--lat_percentiles=1",
+ "--thread=1",
+ "--name=test1",
+ "--rw=randrw",
+ "--name=test2",
+ "--rw=read",
+ "--name=test3",
+ "--rw=write",
+ ]
+
+ output = subprocess.run([fio] + fio_args, stdout=subprocess.PIPE,
+ stderr=subprocess.PIPE)
+
+ return output
+
+
+def check_output(fio_output, script_path):
+ """Run t/fio_jsonplus_clat2csv and validate the generated CSV files
+ against the original json+ fio output.
+
+ Parameters:
+ fio_output subprocess.run object describing fio run.
+ script_path path to fio_jsonplus_clat2csv script.
+ """
+
+ if fio_output.returncode != 0:
+ return False
+
+ if platform.system() == 'Windows':
+ script = ['python.exe', script_path]
+ else:
+ script = [script_path]
+
+ script_args = ["fio-output.json", "fio-output.csv"]
+ script_args_validate = script_args + ["--validate"]
+
+ script_output = subprocess.run(script + script_args)
+ if script_output.returncode != 0:
+ return False
+
+ script_output = subprocess.run(script + script_args_validate)
+ if script_output.returncode != 0:
+ return False
+
+ return True
+
+
+def main():
+ """Entry point for this script."""
+
+ args = parse_args()
+
+ index = 1
+ passed = 0
+ failed = 0
+
+ if args.fio:
+ fio_path = args.fio
+ else:
+ fio_path = os.path.join(os.path.dirname(__file__), '../fio')
+ if not os.path.exists(fio_path):
+ fio_path = 'fio'
+ print("fio path is", fio_path)
+
+ if args.script:
+ script_path = args.script
+ else:
+ script_path = os.path.join(os.path.dirname(__file__), '../tools/fio_jsonplus_clat2csv')
+ if not os.path.exists(script_path):
+ script_path = 'fio_jsonplus_clat2csv'
+ print("script path is", script_path)
+
+ fio_output = run_fio(fio_path)
+ status = check_output(fio_output, script_path)
+ print("Test {0} {1}".format(index, ("PASSED" if status else "FAILED")))
+ if status:
+ passed = passed + 1
+ else:
+ failed = failed + 1
+ index = index + 1
+
+ print("{0} tests passed, {1} failed".format(passed, failed))
+
+ sys.exit(failed)
+
+if __name__ == '__main__':
+ main()