nfstest_lock1
Locking tests
Usage
nfstest_lock --server
<server>
[--client
<client>]
[options]
Overview
Basic locking tests verify that a lock is granted using various arguments to fcntl. These include blocking and non-blocking locks, read or write locks, where the file is opened either for reading, writing or both. It also checks different ranges including limit conditions.
Non-overlapping tests verity that locks are granted on both the client under test and a second process or a remote client when locking the same file.
Overlapping tests verity that a lock is granted on the client under test and a second process or a remote client trying to lock the same file will be denied if a non-blocking lock is issue or will be blocked if a blocking lock is issue on the second process or remote client.
Options
-
--version -
show program's version number and exit
-
-h, --help -
show this help message and exit
-
-f FILE, --file=FILE -
File where options are specified besides the system wide file /etc/nfstest, user wide file $HOME/.nfstest or in the current directory .nfstest file
NFS specific options:
-
-s SERVER, --server=SERVER -
Server name or IP address
-
-e EXPORT, --export=EXPORT -
Exported file system to mount [default: '/']
-
--nfsversion=NFSVERSION -
NFS version, e.g., 3, 4, 4.1, etc. [default: 4.1]
-
-m MTPOINT, --mtpoint=MTPOINT -
Mount point [default: '/mnt/t']
-
-p PORT, --port=PORT -
NFS server port [default: 2049]
-
--proto=PROTO -
NFS protocol name [default: 'tcp']
-
--sec=SEC -
Security flavor [default: 'sys']
-
--nconnect=NCONNECT -
Multiple TCP connections option [default: '1']
-
-o MTOPTS, --mtopts=MTOPTS -
Mount options [default: 'hard,rsize=4096,wsize=4096']
-
--datadir=DATADIR -
Data directory where files are created, directory is created on the mount point [default: '']
Logging options:
-
-v VERBOSE, --verbose=VERBOSE -
Verbose level for debug messages [default: 'opts|info|dbg1|dbg2|dbg3']
-
--tverbose=TVERBOSE -
Verbose level for test messages [default: '2']
-
--createlog -
Create log file
-
--rexeclog -
Create rexec log files
-
--warnings -
Display warnings
-
--tag=TAG -
Informational tag, it is displayed as an INFO message [default: '']
-
--notty -
Do not use terminal colors on output
-
--isatty -
Use terminal colors on output -- useful when running with nohup
Packet trace options:
-
--createtraces -
Create a packet trace for each test
-
--tbsize=TBSIZE -
Capture buffer size for tcpdump [default: 192k]
-
--trcdelay=TRCDELAY -
Seconds to delay before stopping packet trace [default: 2.0]
-
--keeptraces -
Do not remove any trace files [default: remove trace files if no errors]
-
--rmtraces -
Remove trace files [default: remove trace files if no errors]
-
-i INTERFACE, --interface=INTERFACE -
Device interface [default: automatically selected]
-
--subtraces -
Create a packet trace for each sub-test. Use it with caution since it will create a lot of packet traces. Use --createtraces instead unless trying to get a packet trace for a specific sub-test. Best if it is used in combination with the --runtest option.
File options:
-
--nfiles=NFILES -
Number of files to create [default: 2]
-
--filesize=FILESIZE -
File size to use for test files [default: 64k]
-
--rsize=RSIZE -
Read size to use when reading files [default: 4k]
-
--wsize=WSIZE -
Write size to use when writing files [default: 4k]
-
--iodelay=IODELAY -
Seconds to delay I/O operations [default: 0.1]
-
--offset-delta=OFFSET_DELTA -
Read/Write offset delta [default: 4k]
Path options:
-
--sudo=SUDO -
Full path of binary for sudo [default: '/usr/bin/sudo']
-
--kill=KILL -
Full path of binary for kill [default: '/usr/bin/kill']
-
--nfsstat=NFSSTAT -
Full path of binary for nfsstat [default: '/usr/sbin/nfsstat']
-
--tcpdump=TCPDUMP -
Full path of binary for tcpdump [default: '/usr/sbin/tcpdump']
-
--iptables=IPTABLES -
Full path of binary for iptables [default: '/usr/sbin/iptables']
-
--messages=MESSAGES -
Full path of log messages file [default: '/var/log/messages']
-
--trcevents=TRCEVENTS -
Full path of tracing events directory [default: '/sys/kernel/debug/tracing/events']
-
--trcpipe=TRCPIPE -
Full path of trace pipe file [default: '/sys/kernel/debug/tracing/trace_pipe']
-
--tmpdir=TMPDIR -
Temporary directory [default: '/tmp']
Debug options:
-
--nocleanup -
Do not cleanup created files
-
--notimestamps -
Do not display timestamps in debug messages
-
--bugmsgs=BUGMSGS -
File containing test messages to mark as bugs if they failed
-
--nomount -
Do not mount server and run the tests on local disk space
-
--basename=BASENAME -
Base name for all files and logs [default: automatically generated]
-
--nfsdebug=NFSDEBUG -
Set NFS kernel debug flags and save log messages [default: '']
-
--rpcdebug=RPCDEBUG -
Set RPC kernel debug flags and save log messages [default: '']
-
--tracepoints=TRACEPOINTS -
List of trace points modules to enable [default: '']
-
--nfsstats -
Get NFS stats [default: 'False']
-
--pktdisp -
Display main packets related to the given test
-
--nfserrors -
Fail every NFS error found in the packet trace
-
--client-ipaddr=CLIENT_IPADDR -
IP address of localhost
Reporting options:
-
--xunit-report -
Generate xUnit compatible test report
-
--xunit-report-file=XUNIT_REPORT_FILE -
Path to xout report file
Test options:
-
--runtest=RUNTEST -
Comma separated list of tests to run, if list starts with a '^' then all tests are run except the ones listed [default: 'all']
-
--client=CLIENT -
Remote NFS client and options used for conflicting lock tests. Clients are separated by a ',' and each client definition is a list of arguments separated by a ':' given in the following order if positional arguments is used (see examples): clientname:server:export:nfsversion:port:proto:sec:mtpoint
-
--nfsopts=NFSOPTS -
Local process NFS options used for conflicting lock tests. Processes are separated by a ',' and each process definition is a list of arguments separated by a ':' given in the following order if positional arguments is used (see examples): :server:export:nfsversion:port:proto:sec:mtpoint
-
--offset=OFFSET -
Offset of first lock granted [default: 4k]
-
--length=LENGTH -
Length of first lock granted [default: 4k]
-
--unlock-delay=UNLOCK_DELAY -
Time in seconds to unlock first lock [default: 2.0]
-
--lockw-timeout=LOCKW_TIMEOUT -
Time in seconds to wait for blocked lock after conflicting lock has been released [default: 30]
-
--opentype=OPENTYPE -
List of open types to test [default: read,write,rdwr]
-
--locktype=LOCKTYPE -
List of lock types to test [default: read,write]
-
--opentype2=OPENTYPE2 -
List of open types to test on remote client [default: read,write,rdwr]
-
--locktype2=LOCKTYPE2 -
List of lock types to test on remote client [default: read,write]
-
--setlock=SETLOCK -
List of set lock types to test [default: immediate,block]
Tests
btest01
Basic locking tests These tests verify that a lock is granted using various arguments to fcntl. These include blocking and non-blocking locks, read or write locks, where the file is opened either for reading, writing or both. It also checks different ranges including limit conditions.
noverlap
Run all non-overlapping locking tests: nptest01, nptest02, nptest03, nptest04, nctest01, nctest02, nctest03, nctest04
nptest
Run all non-overlapping locking tests using a second process: nptest01, nptest02, nptest03, nptest04
nptest01
Locking non-overlapping range from a second process where end2 < start1 process1: |------------------| process2: |--------|
nptest02
Locking non-overlapping range from a second process where end2 == start1 - 1 process1: |------------------| process2: |------------------|
nptest03
Locking non-overlapping range from a second process where start2 > end1 process1: |------------------| process2: |--------|
nptest04
Locking non-overlapping range from a second process where start2 == end1 + 1 process1: |------------------| process2: |------------------|
nctest
Run all non-overlapping locking tests using a second client: nctest01, nctest02, nctest03, nctest04
nctest01
Locking non-overlapping range from a second client where end2 < start1 client1: |------------------| client2: |--------|
nctest02
Locking non-overlapping range from a second client where end2 == start1 - 1 client1: |------------------| client2: |------------------|
nctest03
Locking non-overlapping range from a second client where start2 > end1 client1: |------------------| client2: |--------|
nctest04
Locking non-overlapping range from a second client where start2 == end1 + 1 client1: |------------------| client2: |------------------|
overlap
Run all overlapping locking tests: optest01, optest02, optest03, optest04, optest05, optest06, optest07, optest08, optest09, octest01, octest02, octest03, octest04, octest05, octest06, octest07, octest08, octest09
optest
Run all overlapping locking tests using a second process: optest01, optest02, optest03, optest04, optest05, optest06, optest07, optest08, optest09
optest01
Locking same range from a second process process1: |------------------| process2: |------------------|
optest02
Locking overlapping range from a second process where start2 < start1 process1: |------------------| process2: |------------------|
optest03
Locking overlapping range from a second process where end2 > end1 process1: |------------------| process2: |------------------|
optest04
Locking overlapping range from a second process where range2 is entirely within range1 process1: |------------------| process2: |--------|
optest05
Locking overlapping range from a second process where range1 is entirely within range2 process1: |------------------| process2: |----------------------------|
optest06
Locking full file range from a second process
optest07
Locking overlapping range from a second process where end2 == start1 process1: |------------------| process2: |------------------|
optest08
Locking overlapping range from a second process where start2 == end1 process1: |------------------| process2: |------------------|
optest09
Locking overlapping range from multiple processes where range2 and range3 are entirely within range1 process1: |-----------------------------| process2: |--------| process3: |--------|
octest
Run all overlapping locking tests using a second client: octest01, octest02, octest03, octest04, octest05, octest06, octest07, octest08, octest09
octest01
Locking same range from a second client client1: |------------------| client2: |------------------|
octest02
Locking overlapping range from a second client where start2 < start1 client1: |------------------| client2: |------------------|
octest03
Locking overlapping range from a second client where end2 > end1 client1: |------------------| client2: |------------------|
octest04
Locking overlapping range from a second client where range2 is entirely within range1 client1: |------------------| client2: |--------|
octest05
Locking overlapping range from a second client where range1 is entirely within range2 client1: |------------------| client2: |----------------------------|
octest06
Locking full file range from a second client
octest07
Locking overlapping range from a second client where end2 == start1 client1: |------------------| client2: |------------------|
octest08
Locking overlapping range from a second client where start2 == end1 client1: |------------------| client2: |------------------|
octest09
Locking overlapping range from multiple clients where range2 and range3 are entirely within range1 client1: |-----------------------------| client2: |--------| client3: |--------|
all
Run all tests: btest01, nptest01, nptest02, nptest03, nptest04, nctest01, nctest02, nctest03, nctest04, optest01, optest02, optest03, optest04, optest05, optest06, optest07, optest08, optest09, octest01, octest02, octest03, octest04, octest05, octest06, octest07, octest08, octest09
Examples
Run the tests which use only the main client (no client option):
nfstest_lock --server 192.168.0.2 --export /exports
Use short options instead:
nfstest_lock -s 192.168.0.2 -e /exports
Use positional arguments with nfsversion=3 for extra client:
nfstest_lock -s 192.168.0.2 -e /exports --client 192.168.0.10:::3
Use named arguments instead:
nfstest_lock -s 192.168.0.2 -e /exports --client 192.168.0.10:nfsversion=3
Use positional arguments with nfsversion=3 for second process:
nfstest_lock -s 192.168.0.2 -e /exports --nfsopts :::3
Use named arguments instead:
nfstest_lock -s 192.168.0.2 -e /exports --nfsopts nfsversion=3
Notes
The user id in the local host and the host specified by --client must have access to run commands as root using the 'sudo' command without the need for a password.
The user id must be able to 'ssh' to remote host without the need for a password.