test.c revision 266692
1/* 2 * Copyright (c) 2000-2002 Proofpoint, Inc. and its suppliers. 3 * All rights reserved. 4 * 5 * By using this file, you agree to the terms and conditions set 6 * forth in the LICENSE file which can be found at the top level of 7 * the sendmail distribution. 8 */ 9 10#include <sm/gen.h> 11SM_IDSTR(Id, "@(#)$Id: test.c,v 1.17 2013-11-22 20:51:44 ca Exp $") 12 13/* 14** Abstractions for writing libsm test programs. 15*/ 16 17#include <stdlib.h> 18#include <unistd.h> 19#include <stdio.h> 20#include <sm/debug.h> 21#include <sm/test.h> 22 23extern char *optarg; 24extern int optind; 25extern int optopt; 26extern int opterr; 27 28int SmTestIndex; 29int SmTestNumErrors; 30bool SmTestVerbose; 31 32static char Help[] = "\ 33%s [-h] [-d debugging] [-v]\n\ 34\n\ 35%s\n\ 36\n\ 37-h Display this help information.\n\ 38-d debugging Set debug activation levels.\n\ 39-v Verbose output.\n\ 40"; 41 42static char Usage[] = "\ 43Usage: %s [-h] [-v]\n\ 44Use %s -h for help.\n\ 45"; 46 47/* 48** SM_TEST_BEGIN -- initialize test system. 49** 50** Parameters: 51** argc -- argument counter. 52** argv -- argument vector. 53** testname -- description of tests. 54** 55** Results: 56** none. 57*/ 58 59void 60sm_test_begin(argc, argv, testname) 61 int argc; 62 char **argv; 63 char *testname; 64{ 65 int c; 66 67 SmTestIndex = 0; 68 SmTestNumErrors = 0; 69 SmTestVerbose = false; 70 opterr = 0; 71 72 while ((c = getopt(argc, argv, "vhd:")) != -1) 73 { 74 switch (c) 75 { 76 case 'v': 77 SmTestVerbose = true; 78 break; 79 case 'd': 80 sm_debug_addsettings_x(optarg); 81 break; 82 case 'h': 83 (void) fprintf(stdout, Help, argv[0], testname); 84 exit(0); 85 default: 86 (void) fprintf(stderr, 87 "Unknown command line option -%c\n", 88 optopt); 89 (void) fprintf(stderr, Usage, argv[0], argv[0]); 90 exit(1); 91 } 92 } 93} 94 95/* 96** SM_TEST -- single test. 97** 98** Parameters: 99** success -- did test succeeed? 100** expr -- expression that has been evaluated. 101** filename -- guess... 102** lineno -- line number. 103** 104** Results: 105** value of success. 106*/ 107 108bool 109sm_test(success, expr, filename, lineno) 110 bool success; 111 char *expr; 112 char *filename; 113 int lineno; 114{ 115 ++SmTestIndex; 116 if (SmTestVerbose) 117 (void) fprintf(stderr, "%d..", SmTestIndex); 118 if (!success) 119 { 120 ++SmTestNumErrors; 121 if (!SmTestVerbose) 122 (void) fprintf(stderr, "%d..", SmTestIndex); 123 (void) fprintf(stderr, "bad! %s:%d %s\n", filename, lineno, 124 expr); 125 } 126 else 127 { 128 if (SmTestVerbose) 129 (void) fprintf(stderr, "ok\n"); 130 } 131 return success; 132} 133 134/* 135** SM_TEST_END -- end of test system. 136** 137** Parameters: 138** none. 139** 140** Results: 141** number of errors. 142*/ 143 144int 145sm_test_end() 146{ 147 (void) fprintf(stderr, "%d of %d tests completed successfully\n", 148 SmTestIndex - SmTestNumErrors, SmTestIndex); 149 if (SmTestNumErrors != 0) 150 (void) fprintf(stderr, "*** %d error%s in test! ***\n", 151 SmTestNumErrors, 152 SmTestNumErrors > 1 ? "s" : ""); 153 154 return SmTestNumErrors; 155} 156