diff options
Diffstat (limited to 't/readonly.py')
-rwxr-xr-x | t/readonly.py | 138 |
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) |