summaryrefslogtreecommitdiff
path: root/t/readonly.py
diff options
context:
space:
mode:
Diffstat (limited to 't/readonly.py')
-rwxr-xr-xt/readonly.py138
1 files changed, 138 insertions, 0 deletions
diff --git a/t/readonly.py b/t/readonly.py
new file mode 100755
index 00000000..43686c9c
--- /dev/null
+++ b/t/readonly.py
@@ -0,0 +1,138 @@
+#!/usr/bin/env python3
+# SPDX-License-Identifier: GPL-2.0-only
+#
+# Copyright (c) 2019 Western Digital Corporation or its affiliates.
+#
+#
+# readonly.py
+#
+# Do some basic tests of the --readonly paramter
+#
+# USAGE
+# python readonly.py [-f fio-executable]
+#
+# EXAMPLES
+# python t/readonly.py
+# python t/readonly.py -f ./fio
+#
+# REQUIREMENTS
+# Python 3.5+
+#
+#
+
+import sys
+import argparse
+import subprocess
+
+
+def parse_args():
+ parser = argparse.ArgumentParser()
+ parser.add_argument('-f', '--fio',
+ help='path to fio executable (e.g., ./fio)')
+ args = parser.parse_args()
+
+ return args
+
+
+def run_fio(fio, test, index):
+ fio_args = [
+ "--name=readonly",
+ "--ioengine=null",
+ "--time_based",
+ "--runtime=1s",
+ "--size=1M",
+ "--rw={rw}".format(**test),
+ ]
+ if 'readonly-pre' in test:
+ fio_args.insert(0, "--readonly")
+ if 'readonly-post' in test:
+ fio_args.append("--readonly")
+
+ output = subprocess.run([fio] + fio_args, stdout=subprocess.PIPE,
+ stderr=subprocess.PIPE)
+
+ return output
+
+
+def check_output(output, test):
+ expect_error = False
+ if 'readonly-pre' in test or 'readonly-post' in test:
+ if 'write' in test['rw'] or 'trim' in test['rw']:
+ expect_error = True
+
+# print(output.stdout)
+# print(output.stderr)
+
+ if output.returncode == 0:
+ if expect_error:
+ return False
+ else:
+ return True
+ else:
+ if expect_error:
+ return True
+ else:
+ return False
+
+
+if __name__ == '__main__':
+ args = parse_args()
+
+ tests = [
+ {
+ "rw": "randread",
+ "readonly-pre": 1,
+ },
+ {
+ "rw": "randwrite",
+ "readonly-pre": 1,
+ },
+ {
+ "rw": "randtrim",
+ "readonly-pre": 1,
+ },
+ {
+ "rw": "randread",
+ "readonly-post": 1,
+ },
+ {
+ "rw": "randwrite",
+ "readonly-post": 1,
+ },
+ {
+ "rw": "randtrim",
+ "readonly-post": 1,
+ },
+ {
+ "rw": "randread",
+ },
+ {
+ "rw": "randwrite",
+ },
+ {
+ "rw": "randtrim",
+ },
+ ]
+
+ index = 1
+ passed = 0
+ failed = 0
+
+ if args.fio:
+ fio_path = args.fio
+ else:
+ fio_path = 'fio'
+
+ for test in tests:
+ output = run_fio(fio_path, test, index)
+ status = check_output(output, test)
+ 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)