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