|
|
1.1 root 1: /* @(#)test2.c 1.4 90/01/03 NFS Rev 2 Testsuite
2: * 1.3 Lachman ONC Test Suite source
3: *
4: * Test file and directory removal.
5: * Builds a tree on the server.
6: *
7: * Uses the following important system calls against the server:
8: *
9: * chdir()
10: * rmdir() (if removing directories, level > 1)
11: * unlink()
12: */
13:
14: #include <sys/param.h>
15: #ifndef major
16: #include <sys/types.h>
17: #endif
18: #ifdef SVR3
19: #include <sys/fs/nfs/time.h>
20: #else
21: #include <sys/time.h>
22: #endif
23: #include <sys/stat.h>
24: #include <stdio.h>
25: #include "tests.h"
26:
27: int Tflag = 0; /* print timing */
28: int Hflag = 0; /* print help message */
29: int Fflag = 0; /* test function only; set count to 1, negate -t */
30: int Nflag = 0; /* Suppress directory operations */
31:
32: usage()
33: {
34: fprintf(stdout, "usage: %s [-htfn] [levels files dirs fname dname]\n",
35: Myname);
36: fprintf(stdout, " Flags: h Help - print this usage info\n");
37: fprintf(stdout, " t Print execution time statistics\n");
38: fprintf(stdout, " f Test function only (negate -t)\n");
39: fprintf(stdout, " n Suppress test directory create operations\n");
40: }
41:
42: main(argc, argv)
43: int argc;
44: char *argv[];
45: {
46: int files = DFILS; /* number of files in each dir */
47: int totfiles = 0;
48: int dirs = DDIRS; /* directories in each dir */
49: int totdirs = 0;
50: int levels = DLEVS; /* levels deep */
51: char *fname = FNAME;
52: char *dname = DNAME;
53: struct timeval time;
54: char command[MAXPATHLEN];
55: struct stat statb;
56: char *opts;
57: char str[256];
58:
59: setbuf(stdout, NULL);
60: Myname = *argv++;
61: argc--;
62: while (argc && **argv == '-') {
63: for (opts = &argv[0][1]; *opts; opts++) {
64: switch (*opts) {
65: case 'h': /* help */
66: usage();
67: exit(1);
68:
69: case 't': /* time */
70: Tflag++;
71: break;
72:
73: case 'f': /* funtionality */
74: Fflag++;
75: break;
76:
77: case 'n': /* No Test Directory create */
78: Nflag++;
79: break;
80:
81: default:
82: error("unknown option '%c'", *opts);
83: usage();
84: exit(1);
85: }
86: }
87: argc--;
88: argv++;
89: }
90:
91: if (argc) {
92: levels = getparm(*argv, 1, "levels");
93: argv++;
94: argc--;
95: }
96: if (argc) {
97: files = getparm(*argv, 0, "files");
98: argv++;
99: argc--;
100: }
101: if (argc) {
102: dirs = getparm(*argv, 0, "dirs");
103: if (dirs == 0 && levels != 1) {
104: error("Illegal dirs parameter, must be at least 1");
105: exit(1);
106: }
107: argv++;
108: argc--;
109: }
110: if (argc) {
111: fname = *argv;
112: argc--;
113: argv++;
114: }
115: if (argc) {
116: dname = *argv;
117: argc--;
118: argv++;
119: }
120: if (argc != 0) {
121: error("too many parameters");
122: usage();
123: exit(1);
124: }
125:
126: if (Fflag) {
127: Tflag = 0;
128: levels = 2;
129: files = 2;
130: dirs = 2;
131: }
132:
133: fprintf(stdout, "%s: File and directory removal test\n", Myname);
134:
135: if (mtestdir(NULL)) {
136: sprintf(str, "test1 -s %s %d %d %d %s %s",
137: Nflag ? "-n" : "",
138: levels, files, dirs, fname, dname);
139: if (system(str) != 0) {
140: error("can't make directroy tree to remove");
141: exit(1);
142: }
143: if (mtestdir(NULL)) {
144: error("still can't go to test directory");
145: exit(1);
146: }
147: }
148:
149: if (Tflag) {
150: starttime();
151: }
152: rmdirtree(levels, files, dirs, fname, dname, &totfiles, &totdirs, 0);
153: if (Tflag) {
154: endtime(&time);
155: }
156: fprintf(stdout,
157: "\tremoved %d files %d directories %d levels deep",
158: totfiles, totdirs, levels);
159: if (Tflag) {
160: fprintf(stdout, " in %d.%-2d seconds",
161: time.tv_sec, time.tv_usec / 10000);
162: }
163: fprintf(stdout, "\n");
164: complete();
165: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.