Annotation of embedaddon/sudo/common/regress/atofoo/atofoo_test.c, revision 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>