170 lines
		
	
	
		
			6.1 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
			
		
		
	
	
			170 lines
		
	
	
		
			6.1 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
| 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
 | |
| **************
 |