NFSTEST_LOCK(1)

NAME
nfstest_lock - Locking tests

SYNOPSIS
nfstest_lock --server <server> [--client <client>] [options]

DESCRIPTION
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.

SEE ALSO
baseobj(3), formatstr(3), nfstest.test_util(3), nfstest_alloc(1), nfstest_cache(1), nfstest_delegation(1), nfstest_dio(1), nfstest_fcmp(1), nfstest_file(1), nfstest_interop(1), nfstest_io(1), nfstest_pkt(1), nfstest_pnfs(1), nfstest_posix(1), nfstest_rdma(1), nfstest_sparse(1), nfstest_ssc(1), nfstest_xattr(1), nfstest_xid(1), packet.nfs.nfs3_const(3), packet.nfs.nfs4_const(3), packet.nfs.nlm4_const(3)

BUGS
No known bugs.

AUTHOR
Jorge Mora (mora@netapp.com)