Annotation of embedaddon/sudo/common/regress/atofoo/atofoo_test.c, revision 1.1.1.1
1.1 misho 1: /*
2: * Copyright (c) 2014 Todd C. Miller <Todd.Miller@courtesan.com>
3: *
4: * Permission to use, copy, modify, and distribute this software for any
5: * purpose with or without fee is hereby granted, provided that the above
6: * copyright notice and this permission notice appear in all copies.
7: *
8: * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
9: * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
10: * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
11: * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
12: * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
13: * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
14: * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
15: */
16:
17: #include <config.h>
18:
19: #include <sys/types.h>
20: #include <stdio.h>
21: #ifdef STDC_HEADERS
22: # include <stdlib.h>
23: # include <stddef.h>
24: #else
25: # ifdef HAVE_STDLIB_H
26: # include <stdlib.h>
27: # endif
28: #endif /* STDC_HEADERS */
29: #ifdef HAVE_STDBOOL_H
30: # include <stdbool.h>
31: #else
32: # include "compat/stdbool.h"
33: #endif
34:
35: #include "missing.h"
36: #include "sudo_util.h"
37: #include "fatal.h"
38:
39: __dso_public int main(int argc, char *argv[]);
40:
41: /* atobool() tests */
42: static struct atobool_data {
43: const char *bool_str;
44: int value;
45: } atobool_data[] = {
46: { "true", true },
47: { "false", false },
48: { "TrUe", true },
49: { "fAlSe", false },
50: { "1", true },
51: { "0", false },
52: { "on", true },
53: { "off", false },
54: { "yes", true },
55: { "no", false },
56: { "nope", -1 },
57: { "10", -1 },
58: { "one", -1 },
59: { "zero", -1 },
60: { NULL, 0 }
61: };
62:
63: static int
64: test_atobool(int *ntests)
65: {
66: struct atobool_data *d;
67: int errors = 0;
68: int value;
69:
70: for (d = atobool_data; d->bool_str != NULL; d++) {
71: (*ntests)++;
72: value = atobool(d->bool_str);
73: if (value != d->value) {
74: warningx_nodebug("FAIL: %s != %d", d->bool_str, d->value);
75: errors++;
76: }
77: }
78:
79: return errors;
80: }
81:
82: /* atoid() tests */
83: static struct atoid_data {
84: const char *idstr;
85: id_t id;
86: const char *sep;
87: const char *ep;
88: } atoid_data[] = {
89: { "0,1", 0, ",", "," },
90: { "10", 10, NULL, NULL },
91: { "-2", -2, NULL, NULL },
92: { "-2", 4294967294U, NULL, NULL },
93: { "4294967294", 4294967294U, NULL, NULL },
94: { NULL, 0, NULL, NULL }
95: };
96:
97: static int
98: test_atoid(int *ntests)
99: {
100: struct atoid_data *d;
101: const char *errstr;
102: char *ep;
103: int errors = 0;
104: id_t value;
105:
106: for (d = atoid_data; d->idstr != NULL; d++) {
107: (*ntests)++;
108: errstr = "some error";
109: value = atoid(d->idstr, d->sep, &ep, &errstr);
110: if (errstr != NULL) {
111: if (d->id != (id_t)-1) {
112: warningx_nodebug("FAIL: %s: %s", d->idstr, errstr);
113: errors++;
114: }
115: } else if (value != d->id) {
116: warningx_nodebug("FAIL: %s != %u", d->idstr, (unsigned int)d->id);
117: errors++;
118: } else if (d->ep != NULL && ep[0] != d->ep[0]) {
119: warningx_nodebug("FAIL: ep[0] %d != %d", (int)(unsigned char)ep[0],
120: (int)(unsigned char)d->ep[0]);
121: errors++;
122: }
123: }
124:
125: return errors;
126: }
127:
128: /* atomode() tests */
129: static struct atomode_data {
130: const char *mode_str;
131: mode_t mode;
132: } atomode_data[] = {
133: { "755", 0755 },
134: { "007", 007 },
135: { "7", 7 },
136: { "8", -1 },
137: { NULL, 0 }
138: };
139:
140: static int
141: test_atomode(int *ntests)
142: {
143: struct atomode_data *d;
144: const char *errstr;
145: int errors = 0;
146: mode_t mode;
147:
148: for (d = atomode_data; d->mode_str != NULL; d++) {
149: (*ntests)++;
150: errstr = "some error";
151: mode = atomode(d->mode_str, &errstr);
152: if (errstr != NULL) {
153: if (d->mode != (mode_t)-1) {
154: warningx_nodebug("FAIL: %s: %s", d->mode_str, errstr);
155: errors++;
156: }
157: } else if (mode != d->mode) {
158: warningx_nodebug("FAIL: %s != 0%o", d->mode_str, d->mode);
159: errors++;
160: }
161: }
162:
163: return errors;
164: }
165:
166: /*
167: * Simple tests for atobool(), atoid(), atomode().
168: */
169: int
170: main(int argc, char *argv[])
171: {
172: int errors = 0;
173: int ntests = 0;
174:
175: initprogname(argc > 0 ? argv[0] : "atofoo");
176:
177: errors += test_atobool(&ntests);
178: errors += test_atoid(&ntests);
179: errors += test_atomode(&ntests);
180:
181: printf("%s: %d tests run, %d errors, %d%% success rate\n", getprogname(),
182: ntests, errors, (ntests - errors) * 100 / ntests);
183:
184: exit(errors);
185: }
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>