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