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