blob: 91c102058d41ec1456a9c1c90d99fd31fefc3b28 [file] [log] [blame]
COMPILE : make
RUN LOCAL: ./locktests -n <number of concurent process> -f <test file> [-T]
GOAL : This test is aimed at stressing the fcntl locking functions.
A master process sets a lock on a file region (byte range locking).
Several slave processes try to perform operations on this region, such
as: read, write, set a new lock ...
The expected results of these operations are known.
If the operation's result is the same as the expected one, the test
succeeds, otherwise it fails.
HISTORY : This program was been written to stress NFSv4 locks.
Slaves are concurrent processes or threads.
-n <num> : Number of threads to use (mandatory).
-f <file> : Run the test on a test file defined by the -f option (mandatory).
-T : Use threads instead of processes (optional).
* RUN NETWORK *
Test server:
./locktests -n <number of concurent processes> -f <test file> -c <number of clients>
Test clients:
./locktests --server <server host name>
Multiple clients options
_______________________
These options have been developed to test NFSv4 locking when multiple
clients try to use the same file. It uses a test server and several test
clients.
--------------
| |
| NFS SERVER |
| |
--------------
|
|
-----------------------------------------------
| | |
| | |
------------------ ------------------- ------------------
| NFS Client 1 | | NFS Client 1 | | NFS Client 1 |
| running | | running | | running |
| a CLIENT TEST | | the SERVER TEST | | a CLIENT TEST |
------------------ ------------------- ------------------
See the DEPLOY file to know how to configure client test on each client.
Server options are:
-n <num> : Number of threads to use (mandatory).
-f <file> : Run the test on given test file defined by the -f option (mandatory).
-c <num> : Number of clients to connect before starting the tests.
Client options
______________
--server <server hostname>
* EXAMPLES *
============
Local testing:
./locktests -n 50 -f /file/system/to/test
Multiple clients:
-on the test server (called host1):
./locktest -n 50 -f /network/file/system/to/test -c 3
(Server waiting for 3 clients to be connected)
-test clients:
./locktest --server host1
HOW TO UNDERSTAND TEST RESULTS
==============================
Ten tests are performed:
1. WRITE ON A READ LOCK
2. WRITE ON A WRITE LOCK
3. READ ON A READ LOCK
4. READ ON A WRITE LOCK
5. SET A READ LOCK ON A READ LOCK
6. SET A WRITE LOCK ON A WRITE LOCK
7. SET A WRITE LOCK ON A READ LOCK
8. SET A READ LOCK ON A WRITE LOCK
9. READ LOCK THE WHOLE FILE BYTE BY BYTE
10. WRITE LOCK THE WHOLE FILE BYTE BY BYTE
For each test, the MASTER process takes a lock (READ/WRITE LOCK) and
the SLAVE processes try to perform the following operations on the
locked section:
- WRITE
- READ
- SET A WRITE LOCK
- SET A WRITE LOCK
If a slave process performs its test operation without error it prints
"=", otherwise it prints "x".
An operation performed "without error" means:
- The operation (write, read, fcntl ...) returns no error code, and
- errno is not changed.
However, "the slave performs its test operation without error" does NOT
mean the "result is correct". For example, a slave process is NOT
allowed to set a READ LOCK on an already-set WRITE LOCK. When such
operations are performed, the correct and expected result is that the
tested function returns the EAGAIN error code.
When all tests have been processed, the result of each process for each
test is compared with the table of expected results, and a new table is
displayed:
For example:
200 processes of 200 successfully ran test : READ ON A READ LOCK
200 processes of 200 successfully ran test : SET A READ LOCK ON A WRITE LOCK
This result lists the process/thread both on local and remote machines.
Note that the testing locks with thread on multiple clients is disabled
because it does not make sense: 2 different clients obviously run at
least 2 different processes (thread information cannot be shared
between this thread over the network).
EXPECTED RESULTS
================
Here is the table of expected results, depending on :
- Slave test operations (READ, WRITE, SET A WRITE LOCK ... )
- Master Operation (SET A READ/A WRITE LOCK )
- Slave types (Processes, threads)
- Locking profile (POSIX locking, Mandatory locking)
================================================================================================
| Master process/thread |
===================================|===========================================================|
Slave type | Test operation | advisory locking | mandatory locking |
___________________________________|______________________________|____________________________|
| | read lock write lock | read lock write lock |
___________________________________|______________________________|____________________________|
thread | set a read lock | Allowed Allowed | Allowed Allowed |
| set a write lock | Allowed Allowed | Allowed Allowed |
| read | Allowed Allowed | Allowed Allowed |
| write | Allowed Allowed | Allowed Allowed |
===================================+==============================+============================|
process | set a read lock | Allowed Denied | Allowed Denied |
| set a write lock | Denied Denied | Denied Denied |
| read | Allowed Allowed | Denied Allowed |
| write | Allowed Allowed | Denied Denied |
================================================================================================
**************
Bull SA - 2006 - http://nfsv4.bullopensource.org
Tony Reix: tony.reix@bull.net
Aurélien Charbon: aurelien.charbon@ext bull.net
**************