New RPC added specifically to the bdevio app. It will launch all tests on all targets by default. When optional parameter for bdev name provided is supplied tests will be ran against just that bdev. After finishing, the application will await another RPC. stop_init_thread() and __run_ut_thread now pass json request. Added separate test.py to not pollute rpc.py with custom RPC just for the bdevio application. Added '-w' argument to the bdevio app, so that instead of performing the tests immidietly - it awaits RPC. After a lot of changes to blockdev.sh, we might end up removing this argument and just use it as default. Change-Id: I82e52352bdf8082c1712caa223ad5ab78aa4e7fa Signed-off-by: Tomasz Zawadzki <tomasz.zawadzki@intel.com> Reviewed-on: https://review.gerrithub.io/c/spdk/spdk/+/455200 Tested-by: SPDK CI Jenkins <sys_sgci@intel.com> Reviewed-by: Paul Luse <paul.e.luse@intel.com> Reviewed-by: Darek Stojaczyk <dariusz.stojaczyk@intel.com> Reviewed-by: Shuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com> Reviewed-by: Jim Harris <james.r.harris@intel.com>
85 lines
2.8 KiB
Python
Executable File
85 lines
2.8 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
|
|
from rpc.client import print_dict, JSONRPCException
|
|
|
|
import logging
|
|
import argparse
|
|
import rpc
|
|
import sys
|
|
import shlex
|
|
|
|
try:
|
|
from shlex import quote
|
|
except ImportError:
|
|
from pipes import quote
|
|
|
|
|
|
def print_array(a):
|
|
print(" ".join((quote(v) for v in a)))
|
|
|
|
|
|
def perform_tests_func(client, name=None):
|
|
"""
|
|
|
|
Args:
|
|
name: bdev name to perform bdevio tests on (optional; if omitted, test all bdevs)
|
|
|
|
Returns:
|
|
Number of failures in tests. 0 means no errors found.
|
|
"""
|
|
params = {}
|
|
if name:
|
|
params['name'] = name
|
|
return client.call('perform_tests', params)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
parser = argparse.ArgumentParser(
|
|
description='SPDK RPC command line interface. NOTE: spdk/scripts/ is expected in PYTHONPATH')
|
|
parser.add_argument('-s', dest='server_addr',
|
|
help='RPC domain socket path or IP address', default='/var/tmp/spdk.sock')
|
|
parser.add_argument('-p', dest='port',
|
|
help='RPC port number (if server_addr is IP address)',
|
|
default=5260, type=int)
|
|
parser.add_argument('-t', dest='timeout',
|
|
help='Timeout as a floating point number expressed in seconds waiting for response. Default: 60.0',
|
|
default=60.0, type=float)
|
|
parser.add_argument('-v', dest='verbose', action='store_const', const="INFO",
|
|
help='Set verbose mode to INFO', default="ERROR")
|
|
parser.add_argument('--verbose', dest='verbose', choices=['DEBUG', 'INFO', 'ERROR'],
|
|
help="""Set verbose level. """)
|
|
subparsers = parser.add_subparsers(help='RPC methods')
|
|
|
|
def perform_tests(args):
|
|
print_dict(perform_tests_func(args.client, name=args.name))
|
|
|
|
p = subparsers.add_parser('perform_tests', help='Perform all bdevio tests on select bdev')
|
|
p.add_argument('-b', '--name', help="Name of the Blockdev. Example: Nvme0n1")
|
|
p.set_defaults(func=perform_tests)
|
|
|
|
def call_rpc_func(args):
|
|
try:
|
|
args.func(args)
|
|
except JSONRPCException as ex:
|
|
print(ex.message)
|
|
exit(1)
|
|
|
|
def execute_script(parser, client, fd):
|
|
for rpc_call in map(str.rstrip, fd):
|
|
if not rpc_call.strip():
|
|
continue
|
|
args = parser.parse_args(shlex.split(rpc_call))
|
|
args.client = client
|
|
call_rpc_func(args)
|
|
|
|
args = parser.parse_args()
|
|
args.client = rpc.client.JSONRPCClient(args.server_addr, args.port, args.timeout, log_level=getattr(logging, args.verbose.upper()))
|
|
if hasattr(args, 'func'):
|
|
call_rpc_func(args)
|
|
elif sys.stdin.isatty():
|
|
# No arguments and no data piped through stdin
|
|
parser.print_help()
|
|
exit(1)
|
|
else:
|
|
execute_script(parser, args.client, sys.stdin)
|