Mercurial > illumos > illumos-gate
annotate usr/src/test/zfs-tests/cmd/file_trunc/file_trunc.c @ 13899:0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
3312 Add a testrunner package for OS unit tests
3313 Add a testrunner package to convert ZFS tests from STF
Reviewed by: Matt Ahrens <matthew.ahrens@delphix.com>
Reviewed by: Will Guyette <will.guyette@delphix.com>
Reviewed by: Dan Kimmel <dan.kimmel@delphix.com>
Reviewed by: Adam Leventhal <ahl@delphix.com>
Reviewed by: Henrik Mattson <henrik.mattson@delphix.com>
Reviewed by: Sonu Pillai <sonu.pillai@delphix.com>
Reviewed by: Christopher Siden <chris.siden@delphix.com>
Reviewed by: George Wilson <george.wilson@delphix.com>
Reviewed by: Richard Lowe <richlowe@richlowe.net>
Approved by: Richard Lowe <richlowe@richlowe.net>
author | John Wren Kennedy <john.kennedy@delphix.com> |
---|---|
date | Wed, 05 Dec 2012 22:04:50 -0500 |
parents | |
children |
rev | line source |
---|---|
13899
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
1 /* |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
2 * CDDL HEADER START |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
3 * |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
4 * The contents of this file are subject to the terms of the |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
5 * Common Development and Distribution License (the "License"). |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
6 * You may not use this file except in compliance with the License. |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
7 * |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
9 * or http://www.opensolaris.org/os/licensing. |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
10 * See the License for the specific language governing permissions |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
11 * and limitations under the License. |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
12 * |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
13 * When distributing Covered Code, include this CDDL HEADER in each |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE. |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
15 * If applicable, add the following below this CDDL HEADER, with the |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
16 * fields enclosed by brackets "[]" replaced with your own identifying |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
17 * information: Portions Copyright [yyyy] [name of copyright owner] |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
18 * |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
19 * CDDL HEADER END |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
20 */ |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
21 |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
22 /* |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
23 * Copyright 2007 Sun Microsystems, Inc. All rights reserved. |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
24 * Use is subject to license terms. |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
25 */ |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
26 |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
27 /* |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
28 * Copyright (c) 2012 by Delphix. All rights reserved. |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
29 */ |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
30 |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
31 #include <stdio.h> |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
32 #include <stdlib.h> |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
33 #include <unistd.h> |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
34 #include <limits.h> |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
35 #include <errno.h> |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
36 #include <fcntl.h> |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
37 #include <sys/types.h> |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
38 #include <sys/fcntl.h> |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
39 #include <sys/stat.h> |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
40 #include <sys/statvfs.h> |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
41 #include <sys/errno.h> |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
42 #include <sys/time.h> |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
43 #include <sys/ioctl.h> |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
44 #include <sys/wait.h> |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
45 #include <sys/param.h> |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
46 #include <string.h> |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
47 |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
48 #define FSIZE 256*1024*1024 |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
49 #define BSIZE 512 |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
50 |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
51 /* Initialize Globals */ |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
52 static long fsize = FSIZE; |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
53 static size_t bsize = BSIZE; |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
54 static int count = 0; |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
55 static int rflag = 0; |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
56 static int seed = 0; |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
57 static int vflag = 0; |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
58 static int errflag = 0; |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
59 static off_t offset = 0; |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
60 static char *filename = NULL; |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
61 |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
62 static void usage(char *execname); |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
63 static void parse_options(int argc, char *argv[]); |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
64 static void do_write(int fd); |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
65 static void do_trunc(int fd); |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
66 |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
67 static void |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
68 usage(char *execname) |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
69 { |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
70 (void) fprintf(stderr, |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
71 "usage: %s [-b blocksize] [-c count] [-f filesize]" |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
72 " [-o offset] [-s seed] [-r] [-v] filename\n", execname); |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
73 (void) exit(1); |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
74 } |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
75 |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
76 int |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
77 main(int argc, char *argv[]) |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
78 { |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
79 int i = 0; |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
80 int fd = -1; |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
81 |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
82 parse_options(argc, argv); |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
83 |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
84 fd = open(filename, O_RDWR|O_CREAT|O_TRUNC, 0666); |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
85 if (fd < 0) { |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
86 perror("open"); |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
87 exit(3); |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
88 } |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
89 |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
90 while (i < count) { |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
91 (void) do_write(fd); |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
92 (void) do_trunc(fd); |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
93 |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
94 i++; |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
95 } |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
96 |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
97 (void) close(fd); |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
98 return (0); |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
99 } |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
100 |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
101 static void |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
102 parse_options(int argc, char *argv[]) |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
103 { |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
104 int c; |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
105 |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
106 extern char *optarg; |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
107 extern int optind, optopt; |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
108 |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
109 count = fsize / bsize; |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
110 seed = time(NULL); |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
111 while ((c = getopt(argc, argv, "b:c:f:o:rs:v")) != -1) { |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
112 switch (c) { |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
113 case 'b': |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
114 bsize = atoi(optarg); |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
115 break; |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
116 |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
117 case 'c': |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
118 count = atoi(optarg); |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
119 break; |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
120 |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
121 case 'f': |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
122 fsize = atoi(optarg); |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
123 break; |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
124 |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
125 case 'o': |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
126 offset = atoi(optarg); |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
127 break; |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
128 |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
129 case 'r': |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
130 rflag++; |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
131 break; |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
132 |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
133 case 's': |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
134 seed = atoi(optarg); |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
135 break; |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
136 |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
137 case 'v': |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
138 vflag++; |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
139 break; |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
140 |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
141 case ':': |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
142 (void) fprintf(stderr, |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
143 "Option -%c requires an operand\n", optopt); |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
144 errflag++; |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
145 break; |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
146 |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
147 case '?': |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
148 (void) fprintf(stderr, |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
149 "Unrecognized option: -%c\n", optopt); |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
150 errflag++; |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
151 break; |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
152 } |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
153 |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
154 if (errflag) { |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
155 (void) usage(argv[0]); |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
156 } |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
157 } |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
158 if (argc <= optind) { |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
159 (void) fprintf(stderr, |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
160 "No filename specified\n"); |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
161 usage(argv[0]); |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
162 } |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
163 filename = argv[optind]; |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
164 |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
165 if (vflag) { |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
166 (void) fprintf(stderr, "Seed = %d\n", seed); |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
167 } |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
168 srandom(seed); |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
169 } |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
170 |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
171 static void |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
172 do_write(int fd) |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
173 { |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
174 off_t roffset = 0; |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
175 char *buf = NULL; |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
176 char *rbuf = NULL; |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
177 |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
178 buf = (char *)calloc(1, bsize); |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
179 rbuf = (char *)calloc(1, bsize); |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
180 if (buf == NULL || rbuf == NULL) { |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
181 perror("malloc"); |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
182 exit(4); |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
183 } |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
184 |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
185 roffset = random() % fsize; |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
186 if (lseek64(fd, (offset + roffset), SEEK_SET) < 0) { |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
187 perror("lseek"); |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
188 exit(5); |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
189 } |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
190 |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
191 buf = "ZFS Test Suite Truncation Test"; |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
192 if (write(fd, buf, bsize) < bsize) { |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
193 perror("write"); |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
194 exit(6); |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
195 } |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
196 |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
197 if (rflag) { |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
198 if (lseek64(fd, (offset + roffset), SEEK_SET) < 0) { |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
199 perror("lseek"); |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
200 exit(7); |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
201 } |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
202 |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
203 if (read(fd, rbuf, bsize) < bsize) { |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
204 perror("read"); |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
205 exit(8); |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
206 } |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
207 |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
208 if (memcmp(buf, rbuf, bsize) != 0) { |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
209 perror("memcmp"); |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
210 exit(9); |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
211 } |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
212 } |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
213 if (vflag) { |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
214 (void) fprintf(stderr, |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
215 "Wrote to offset %lld\n", (offset + roffset)); |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
216 if (rflag) { |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
217 (void) fprintf(stderr, |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
218 "Read back from offset %lld\n", (offset + roffset)); |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
219 } |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
220 } |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
221 |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
222 (void) free(buf); |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
223 (void) free(rbuf); |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
224 } |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
225 |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
226 static void |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
227 do_trunc(int fd) |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
228 { |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
229 off_t roffset = 0; |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
230 |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
231 roffset = random() % fsize; |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
232 if (ftruncate64(fd, (offset + roffset)) < 0) { |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
233 perror("truncate"); |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
234 exit(7); |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
235 } |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
236 |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
237 if (vflag) { |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
238 (void) fprintf(stderr, |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
239 "Truncated at offset %lld\n", |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
240 (offset + roffset)); |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
241 } |
0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff
changeset
|
242 } |