|
|
1.1 ! root 1: # ! 2: # @(#)README 1.11 90/01/03 NFS Rev 2 Testsuite ! 3: # ! 4: NFS and Connectathon are trademarks of Sun Microsystems, Inc. ! 5: ! 6: ! 7: ! 8: Introduction to the NFS Revision 2 Testsuites ! 9: --------------------------------------------- ! 10: ! 11: These directories contain programs that can be used to test an implementation ! 12: of Revision 2 of the NFS Protocol. The tests run on a UNIX client and test ! 13: server and client functions. They are divided into three groups: ! 14: ! 15: basic - basic NFS operations tests ! 16: general - general file system tests ! 17: special - tests that poke certain common problem areas ! 18: ! 19: This README is divided into six sections. The first section is the introd- ! 20: uction, which you are reading now. That is followed by a description of ! 21: what you have to do before you run the testsuites on your machine. Then ! 22: comes a description of how the testsuites are run in general followed by a ! 23: description of how they are used at Connectathon. The last sections describes ! 24: what each test does in detail. ! 25: ! 26: This testsuite should run on both BSD and System V based systems. ! 27: The System V port of the Connectathon Testsuite is provided courtesy ! 28: of the Software Technologies Group, INTERACTIVE Systems Corporation, ! 29: 1901 N. Naper Blvd., Naperville, IL. 60563 ! 30: ! 31: ! 32: Preparing to run the Testsuites ! 33: ------------------------------- ! 34: ! 35: To prepare to run the testsuites on your machine, change directories to the ! 36: highest level testsuite directory (it should be the same one that contains ! 37: this README file), and type "make" to compile the test programs. If you are ! 38: not sure your are in the correct directory, type "ls -F" and you should see ! 39: the following files and directories: ! 40: ! 41: Makefile Testitems domount.c getopt.c server* tests.init ! 42: README basic/ general/ runtests* special/ tools/ ! 43: ! 44: The "server" script uses "getopt" and a source file of a public-domain ! 45: version is included in the directory. The makefile will compile it for you. ! 46: ! 47: Changes may be required to the Makefile depending on the type of system ! 48: you are testing on and what version of NFS you are testing. Change the ! 49: COMPAT variable if you are running NFS3.2 to: ! 50: ! 51: COMPAT = -DNFS3_2 ! 52: ! 53: If you are running on a System V based system (SVR3) you will need to change: ! 54: ! 55: SYSTYPE=-DSVR3 ! 56: LIBS=-lrpc ! 57: ! 58: If you are running Lachman NFS for System V Release 3, you should set the ! 59: compatability variable to: ! 60: ! 61: COMPAT = -DSVR3 ! 62: ! 63: Lachman NFS is based on NFS3.2, but you should not set NFS3_2. That symbol ! 64: is used only for vnode-based systems, not FSS-based systems. ! 65: ! 66: If you are testing on a BSD based system SYSTYPE and LIBS should not be ! 67: set to anything. Be sure and check the COMPAT variable if running ! 68: release 3.2 of NFS. ! 69: ! 70: Two special targets are included in the Makefiles: copy and dist. The command ! 71: "make copy DESTDIR="path"", where "path" is the name of a directory, will ! 72: cause the compiled tests to be copied to "path". "make dist DESTDIR="path"", ! 73: where "path" is the name of a directory, will copy the test sources to ! 74: "path". DESTDIR must be specified on the make command line when making ! 75: either of these targets. ! 76: ! 77: Modifications may be required so the programs compile on your machine. If ! 78: that is so, we would like to know what they are so that we can incorporate ! 79: them into our distribution. ! 80: ! 81: When defaults are used, the test programs expect /mnt to exist on the client ! 82: and /server to exist on the server. These defaults can be overridden at ! 83: run time. Read about how to run the testsuites for a description of how this ! 84: is done. ! 85: ! 86: NOTE: When running any of the tests, you should save stdout and stderr ! 87: output in a file for future reference. ! 88: ! 89: ! 90: ! 91: ! 92: How to run the Testsuites ! 93: ------------------------- ! 94: ! 95: There are two ways to run the tests: (1) use the server shell script or ! 96: (2) mount, run the tests yourself, and unmount. We recommend you use the ! 97: server script to run the tests. ! 98: ! 99: ! 100: ! 101: The server script: ! 102: ! 103: The server script executes the basic and general tests. (It runs the ! 104: special tests only if use the -s option.) It is set up to mount, ! 105: run tests using the runtests program, and unmount. It will attempt to unmount ! 106: anything mounted on the mount point before attempting to mount the server file ! 107: system. ! 108: ! 109: server uses the domount program to mount and unmount the test file systems. ! 110: Since mount can only be executed by root, domount must have root permission. ! 111: The Makefile will attempt to setuid the domount program to root. The server ! 112: script can be run as a nonprivileged user. Alternately, you may login as root ! 113: before you run server. ! 114: ! 115: ! 116: ! 117: server [-a|-b|-g|-s] [-|-f|-t|-n] [-o mnt_options] [-p server_path] [-m mntpoint] server_name ! 118: ! 119: ! 120: -a|-b|-g|-s - will be passed on to the runtests scripts. This argument is ! 121: optional. The default is read from the initialization file, ! 122: tests.init. ! 123: This argument selects which tests to run: ! 124: -a run basic and general tests ! 125: -b run basic tests only ! 126: -g run general tests only ! 127: -s run special tests only ! 128: -f|-t|-n - will be passed on to the runtests scripts. This argument is ! 129: optional. The default is read from the initialization file, ! 130: tests.init. ! 131: mnt_options - will be passed on to the mount command. This argument is ! 132: optional. The default is read from the initialization file, ! 133: tests.init. ! 134: server_path - specifies a directory on the server to mount. This argument ! 135: is optional. The default is read from the initialization file, ! 136: tests.init. ! 137: mntpoint - specifies a mount point on your client. This argument is ! 138: optional. The default is read from the initialization file, ! 139: tests.init. ! 140: server_name - the server you want to exercise. This is the only required ! 141: argument. ! 142: ! 143: The test programs create a sub-directory in the mntpoint directory with the ! 144: name 'hostname'.test (where 'hostname' is the name of the machine on which ! 145: you run the tests). This name can not be overridden if you use the server ! 146: script although it can be if you use runtests directly. ! 147: ! 148: Example: (the client machine is eddie) ! 149: ! 150: eddie% server -o hard,intr,rw slartibartfarst ! 151: Start tests on path /mnt/eddie.test [y/n]? y ! 152: <output from tests> ! 153: : ! 154: : ! 155: All tests completed ! 156: eddie% ! 157: ! 158: See the script for more details. ! 159: ! 160: ! 161: ! 162: Run tests yourself: ! 163: ! 164: There is a runtest script in the highest level directory (the master runtests) ! 165: which uses tests.init to set up the test environment and then executes runtest ! 166: scripts in the basic, general, and/or special sub-directories. ! 167: ! 168: ! 169: runtests [-a|-b|-g|-s] [-f|-n|-t] [test-directory] ! 170: ! 171: ! 172: -a - Run the basic and general tests. This is the default. ! 173: -b - Run the basic tests. ! 174: -g - Run the general tests. ! 175: -s - Run the special tests. ! 176: -f - Set parameters for a quick functional test. This is the ! 177: default. It applies only to basic tests. ! 178: -n - Suppress directory operations (mkdir and rmdir) on the ! 179: test-directory. See descriptions of basic tests for more ! 180: details. ! 181: -t - Run full-length test with running time statistics. It only ! 182: applies to basic tests. You will want to rerun with "-t" after ! 183: all the "-f" (default option) tests run successfully. ! 184: ! 185: ! 186: test-directory - The name of test directory that the test programs create ! 187: on the client. runtests executes the basic tests in place ! 188: and they work on the test directory. The general tests are ! 189: copied over to the test directory and executed there. When ! 190: the -n flag is used, the test directory is assumed to already ! 191: exist. ! 192: ! 193: The default test-directory is /mnt/'hostname'.test (where ! 194: 'hostname' is the name of the machine on which you are ! 195: running the tests). There are three ways to override the ! 196: default test directory name. One it to put the ! 197: test_directory on the command line. Another way is to set ! 198: the environment variable NFSTESTDIR equal to the directory ! 199: name. The command line method overrides setting the ! 200: environment variable. The third way can only be used ! 201: for the tests in the basic sub-directory. There you ! 202: can set the TESTDIR variable in tests.h. The command ! 203: line and environment variable both override this ! 204: method. ! 205: ! 206: Running the tests without mounting your NFS server on /mnt will run the tests ! 207: locally (if /mnt is local disk). We recommend that you do this once to make ! 208: sure the testsuites run properly before you use them to test NFS. ! 209: ! 210: The runtests in sub-directories: basic, general, and special, may be invoked ! 211: with the same arguments as the master runtests if you wish to run each suite ! 212: separately. ! 213: ! 214: ! 215: ! 216: ! 217: How to run the Testsuites at Connectathon ! 218: ----------------------------------------- ! 219: ! 220: ! 221: The tests should be run in the following order: basic, general, and special. ! 222: The basic tests should be passed completely before other tests are attempted. ! 223: ! 224: The NFS Test Suite should be run in three phases: ! 225: ! 226: Phase 1 - Run test programs locally. ! 227: ! 228: Phase 2 - Run the tests against a Sun. Run them on your machine using the ! 229: Sun as the server and then run them on the Sun using your machine ! 230: as the server. ! 231: ! 232: Phase 3 - NxN Testing. Run the tests on your machine using every other ! 233: machine as a server, one at a time. After the tests are ! 234: successfully completed using a particular server, log that ! 235: with the electronic board software provided. Check the electronic ! 236: board to make sure that the tests run successfully on ! 237: every other machine that uses your machine as a server. ! 238: ! 239: ! 240: Test Descriptions ! 241: ----------------- ! 242: ! 243: System and library calls that are used by the testsuites are included in paren- ! 244: theses. Look at the source if you are interested in how time statistics are ! 245: recorded since that is not included in this description. ! 246: ! 247: ! 248: ! 249: ! 250: - BASIC TESTS: ! 251: ! 252: Many of the programs listed below have optional calling parameters that can be ! 253: used to override existing parameters. These are not used at this time so they ! 254: are not described. ! 255: ! 256: ! 257: test1: File and Directory Creation Test ! 258: ! 259: This program creates the test directory (mkdir) on the client and changes ! 260: directories (chdir) to it, unless the -n flag is used in which case it simply ! 261: changes directories to the test directory. Then it builds a directory tree ! 262: N levels deep, where each directory (including the test directory) has M ! 263: files and P directories (creat, close, chdir, and mkdir). For the -f ! 264: option N = 2, M = 2, and P = 2 so a total of six files and six directories ! 265: are created. For other options N = 5, M = 5, and P = 2. The files that are ! 266: created are given names that begin with "file." and directories with names ! 267: that begin with "dir.". ! 268: ! 269: ! 270: ! 271: test2: File and directory removal test ! 272: ! 273: This program changes directory to the test directory (chdir and/or mkdir) and ! 274: removes the directory tree (unlink, chdir, and rmdir) that was just created ! 275: by test1. The number of levels, files, and directories, and the name pre- ! 276: fixes, are the same as in test1. ! 277: ! 278: This routine will not remove a file or directory that was not created by test1 ! 279: and will fail if it finds one. It determines this by looking at the prefix on ! 280: the name of the object it's trying to remove. ! 281: ! 282: ! 283: ! 284: test3: Lookups across mount point ! 285: ! 286: This program changes directory to the test directory (chdir and/or mkdir) and ! 287: gets the file status of the working directory (getwd and stat). ! 288: ! 289: ! 290: test4: setattr, getattr, and lookup ! 291: ! 292: This program changes directory to the test directory (chdir and/or mkdir) and ! 293: creates ten files (creat). Then the permissions are changed (chmod) and the ! 294: file status is retrieved (stat) twice for each file. ! 295: ! 296: ! 297: test4a: getattr, and lookup ! 298: ! 299: This test exists but is not called as part of the testsuite. You can edit ! 300: runtests in the basic directory so this test is called. ! 301: ! 302: This program changes directory to the test directory (chdir and/or mkdir) and ! 303: creates ten files (creat). Then the file status is retrieved (stat) for ! 304: each file. ! 305: ! 306: ! 307: ! 308: test5: read and write ! 309: ! 310: This program changes directory to the test directory (chdir and/or mkdir) and ! 311: then: ! 312: ! 313: 1) Creates a file (creat) ! 314: 2) Gets status of file (fstat) ! 315: 3) Checks size of file ! 316: 4) Writes 1048576 bytes into the file (write) in 8192 byte buffers. ! 317: 5) Closes file (close) ! 318: 6) Gets status of file (stat) ! 319: 7) Checks the size of the file ! 320: ! 321: Then the file is opened (open) and read (read) in 8192 byte buffers. It's ! 322: contents are compared with what was written. The file is then closed (close). ! 323: ! 324: Then the file is then re-opened (open) and re-read (read) before it is removed ! 325: (unlink). ! 326: ! 327: test5a: write ! 328: ! 329: This test exists but is not called as part of the testsuite. You can edit ! 330: runtests in the basic directory so this test is called. ! 331: ! 332: This program changes directory to the test directory (chdir and/or mkdir) and ! 333: then: ! 334: ! 335: 1) Creates a file (creat) ! 336: 2) Gets status of file (fstat) ! 337: 3) Checks size of file ! 338: 4) Writes 1048576 bytes into the file (write) in 8192 byte buffers. ! 339: 5) Closes file (close) ! 340: 6) Gets status of file (stat) ! 341: 7) Checks the size of the file ! 342: ! 343: ! 344: test5b: read ! 345: ! 346: This test exists but is not called as part of the testsuite. You can edit ! 347: runtests in the basic directory so this test is called. ! 348: ! 349: The file created in test5a is opened (open) and read (read) in 8192 byte ! 350: buffers. It's contents are compared with what was written. The file is ! 351: then closed (close) and removed (unlink). ! 352: ! 353: ! 354: ! 355: test6: readdir ! 356: ! 357: This program changes directory to the test directory (chdir and/or mkdir) and ! 358: creates 200 files (creat). The current directory is opened (opendir), the ! 359: beginning is found (rewinddir), and the directory is read (readdir) in a loop ! 360: until the end is found. Errors flagged are: ! 361: ! 362: 1) No entry for "." ! 363: 2) No entry for ".." ! 364: 3) Duplicate entry ! 365: 4) Filename that doesn't begin with "file." ! 366: 5) The suffix of the filename is out of range ! 367: 6) An entry is returned for an unlinked file. (This error can only be ! 368: found when the test is run with an option other than -f. For other ! 369: options the readdir loop is done multiple times and a file is unlinked ! 370: each time). ! 371: ! 372: The directory is then closed (closedir) and the files that were created are ! 373: removed (unlink). ! 374: ! 375: ! 376: ! 377: test7: link and rename ! 378: ! 379: This program changes directory to the test directory (chdir and/or mkdir) and ! 380: creates ten files. For each of these files, the file is renamed (rename) and ! 381: file statistics are retrieved (stat) for both the new and old names. Errors ! 382: that are flagged are: ! 383: ! 384: 1) Old file still exists ! 385: 2) New file doesn't exist (can't stat) ! 386: 3) The new file's number of links doesn't equal one ! 387: ! 388: Then an attempt is made to link the new file to it's old name (link) and file ! 389: stats are again retrieved (stat). An error is flagged if: ! 390: ! 391: 1) Can't link ! 392: 2) Stats on new file can't be retrieved after link ! 393: 3) The new file's number of links doesn't equal two ! 394: 4) Stats on old file can't be retrieved after link ! 395: 5) The old file's number of links doesn't equal two ! 396: ! 397: Then the new file is removed (unlink) and file stats are retrieved for the old ! 398: file (stat). An error is flagged if: ! 399: ! 400: 1) Stats on old file can't be retrieved after unlink ! 401: 2) The old file's number of links doesn't equal one ! 402: ! 403: Any files that remain at the end of the test are removed (unlink). ! 404: ! 405: test7a: rename ! 406: ! 407: This test exists but is not called as part of the testsuite. You can edit ! 408: runtests in the basic directory so this test is called. ! 409: ! 410: This program changes directory to the test directory (chdir and/or mkdir) and ! 411: creates ten files. For each of these files, the file is renamed (rename) and ! 412: file statistics are retrieved (stat) for both the new and old names. Errors ! 413: that are flagged are: ! 414: ! 415: 1) Old file still exists ! 416: 2) New file doesn't exist (can't stat) ! 417: 3) The new file's number of links doesn't equal one ! 418: ! 419: Any files that remain at the end of the test are removed (unlink). ! 420: ! 421: test7b: link ! 422: ! 423: This test exists but is not called as part of the testsuite. You can edit ! 424: runtests in the basic directory so this test is called. ! 425: ! 426: This program changes directory to the test directory (chdir and/or mkdir) and ! 427: creates ten files. A link (link) is done for each of these files, and file ! 428: stats are retrieved for the old and new files (stat). An error is flagged ! 429: if: ! 430: ! 431: 1) Can't link ! 432: 2) Stats on either file can't be retrieved after link ! 433: 3) The either file's number of links doesn't equal two ! 434: ! 435: This is followed by an unlink (unlink) of the new file. An error is ! 436: flagged if: ! 437: ! 438: 1) Stats on the old file can't be retrieved after unlink ! 439: 2) The old file's number of links doesn't equal one ! 440: ! 441: Any files that remain at the end of the test are removed (unlink). ! 442: ! 443: ! 444: ! 445: test8: symlink and readlink ! 446: ! 447: NOTE: Not all operating systems support symlink and readlink. If the ! 448: errno EOPNOTSUPP is returned during test8, the test will be ! 449: counted as passing. For clients not supporting S_IFLNK, the ! 450: test will not be attempted. ! 451: ! 452: This program changes directory to the test directory (chdir and/or mkdir) and ! 453: makes 10 symlinks (symlink). It reads (readlink), and gets statistics for ! 454: (lstat), each, and then removes them (unlink). Errors flagged are: ! 455: ! 456: 1) Unsupported function ! 457: 2) Can't get statistics (lstat failed) ! 458: 3) The mode in the stats is not symlink ! 459: 4) The value of the symlink is incorrect (returned from readlink) ! 460: 5) The linkname is wrong ! 461: 6) The unlink failed ! 462: ! 463: ! 464: ! 465: test9: statfs ! 466: ! 467: This program changes directory to the test directory (chdir and/or mkdir) and ! 468: gets the file system status on the current directory (statfs). ! 469: ! 470: ! 471: ! 472: ! 473: - GENERAL: General tests to look at server loading. ! 474: ! 475: Runs a small compile, Tbl, Nroff and a Large Compile. Four simultaneous ! 476: large compiles are also run. ! 477: ! 478: ! 479: ! 480: ! 481: - SPECIAL: Information specific to the special tests ! 482: ! 483: The special directory is set up to test special problems that have ! 484: come up in the past. These tests are meant to be advisory, ... ! 485: things to watch out for. It is not required that you "pass" these ! 486: tests but we suggest you give them a try. ! 487: ! 488: The tests try to: ! 489: ! 490: check for proper open/unlink operation ! 491: check for proper open/chmod 0 operation ! 492: check for lost reply on non-idempotent requests ! 493: test exclusive create ! 494: test negative seek ! 495: test rename ! 496: ! 497: ! 498: ! 499: ! 500: - MISC: ! 501: ! 502: 'Testitems' is a list of NFS functionality that can be used for reference. ! 503: ! 504: Programs in 'tools' are provided for your use as you see fit. Please ! 505: feel free to add to this (or any other) directory! If you do, please ! 506: make sure that Cathe Ray (sun!cathe or [email protected]) at Sun gets a copy ! 507: so we can add it to the master test distribution. ! 508:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.