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