190792Sgshapiro/* 290792Sgshapiro * Copyright (c) 2000-2002 Sendmail, Inc. and its suppliers. 390792Sgshapiro * All rights reserved. 490792Sgshapiro * 590792Sgshapiro * By using this file, you agree to the terms and conditions set 690792Sgshapiro * forth in the LICENSE file which can be found at the top level of 790792Sgshapiro * the sendmail distribution. 890792Sgshapiro */ 990792Sgshapiro 1090792Sgshapiro#include <sm/gen.h> 1198121SgshapiroSM_IDSTR(Id, "@(#)$Id: test.c,v 1.16 2002/01/08 17:54:40 ca Exp $") 1290792Sgshapiro 1390792Sgshapiro/* 1490792Sgshapiro** Abstractions for writing libsm test programs. 1590792Sgshapiro*/ 1690792Sgshapiro 1790792Sgshapiro#include <stdlib.h> 1890792Sgshapiro#include <unistd.h> 1990792Sgshapiro#include <stdio.h> 2090792Sgshapiro#include <sm/debug.h> 2190792Sgshapiro#include <sm/test.h> 2290792Sgshapiro 2390792Sgshapiroextern char *optarg; 2490792Sgshapiroextern int optind; 2590792Sgshapiroextern int optopt; 2690792Sgshapiroextern int opterr; 2790792Sgshapiro 2890792Sgshapiroint SmTestIndex; 2990792Sgshapiroint SmTestNumErrors; 3090792Sgshapirobool SmTestVerbose; 3190792Sgshapiro 3290792Sgshapirostatic char Help[] = "\ 3390792Sgshapiro%s [-h] [-d debugging] [-v]\n\ 3490792Sgshapiro\n\ 3590792Sgshapiro%s\n\ 3690792Sgshapiro\n\ 3790792Sgshapiro-h Display this help information.\n\ 3890792Sgshapiro-d debugging Set debug activation levels.\n\ 3990792Sgshapiro-v Verbose output.\n\ 4090792Sgshapiro"; 4190792Sgshapiro 4290792Sgshapirostatic char Usage[] = "\ 4390792SgshapiroUsage: %s [-h] [-v]\n\ 4490792SgshapiroUse %s -h for help.\n\ 4590792Sgshapiro"; 4690792Sgshapiro 4790792Sgshapiro/* 4890792Sgshapiro** SM_TEST_BEGIN -- initialize test system. 4990792Sgshapiro** 5090792Sgshapiro** Parameters: 5190792Sgshapiro** argc -- argument counter. 5290792Sgshapiro** argv -- argument vector. 5390792Sgshapiro** testname -- description of tests. 5490792Sgshapiro** 5590792Sgshapiro** Results: 5690792Sgshapiro** none. 5790792Sgshapiro*/ 5890792Sgshapiro 5990792Sgshapirovoid 6090792Sgshapirosm_test_begin(argc, argv, testname) 6190792Sgshapiro int argc; 6290792Sgshapiro char **argv; 6390792Sgshapiro char *testname; 6490792Sgshapiro{ 6590792Sgshapiro int c; 6690792Sgshapiro 6790792Sgshapiro SmTestIndex = 0; 6890792Sgshapiro SmTestNumErrors = 0; 6990792Sgshapiro SmTestVerbose = false; 7090792Sgshapiro opterr = 0; 7190792Sgshapiro 7290792Sgshapiro while ((c = getopt(argc, argv, "vhd:")) != -1) 7390792Sgshapiro { 7490792Sgshapiro switch (c) 7590792Sgshapiro { 7690792Sgshapiro case 'v': 7790792Sgshapiro SmTestVerbose = true; 7890792Sgshapiro break; 7990792Sgshapiro case 'd': 8090792Sgshapiro sm_debug_addsettings_x(optarg); 8190792Sgshapiro break; 8290792Sgshapiro case 'h': 8390792Sgshapiro (void) fprintf(stdout, Help, argv[0], testname); 8490792Sgshapiro exit(0); 8590792Sgshapiro default: 8690792Sgshapiro (void) fprintf(stderr, 8790792Sgshapiro "Unknown command line option -%c\n", 8890792Sgshapiro optopt); 8990792Sgshapiro (void) fprintf(stderr, Usage, argv[0], argv[0]); 9090792Sgshapiro exit(1); 9190792Sgshapiro } 9290792Sgshapiro } 9390792Sgshapiro} 9490792Sgshapiro 9590792Sgshapiro/* 9690792Sgshapiro** SM_TEST -- single test. 9790792Sgshapiro** 9890792Sgshapiro** Parameters: 9990792Sgshapiro** success -- did test succeeed? 10090792Sgshapiro** expr -- expression that has been evaluated. 10190792Sgshapiro** filename -- guess... 10290792Sgshapiro** lineno -- line number. 10390792Sgshapiro** 10490792Sgshapiro** Results: 10590792Sgshapiro** value of success. 10690792Sgshapiro*/ 10790792Sgshapiro 10890792Sgshapirobool 10990792Sgshapirosm_test(success, expr, filename, lineno) 11090792Sgshapiro bool success; 11190792Sgshapiro char *expr; 11290792Sgshapiro char *filename; 11390792Sgshapiro int lineno; 11490792Sgshapiro{ 11590792Sgshapiro ++SmTestIndex; 11690792Sgshapiro if (SmTestVerbose) 11790792Sgshapiro (void) fprintf(stderr, "%d..", SmTestIndex); 11890792Sgshapiro if (!success) 11990792Sgshapiro { 12090792Sgshapiro ++SmTestNumErrors; 12190792Sgshapiro if (!SmTestVerbose) 12290792Sgshapiro (void) fprintf(stderr, "%d..", SmTestIndex); 12390792Sgshapiro (void) fprintf(stderr, "bad! %s:%d %s\n", filename, lineno, 12490792Sgshapiro expr); 12590792Sgshapiro } 12690792Sgshapiro else 12790792Sgshapiro { 12890792Sgshapiro if (SmTestVerbose) 12990792Sgshapiro (void) fprintf(stderr, "ok\n"); 13090792Sgshapiro } 13190792Sgshapiro return success; 13290792Sgshapiro} 13390792Sgshapiro 13490792Sgshapiro/* 13590792Sgshapiro** SM_TEST_END -- end of test system. 13690792Sgshapiro** 13790792Sgshapiro** Parameters: 13890792Sgshapiro** none. 13990792Sgshapiro** 14090792Sgshapiro** Results: 14190792Sgshapiro** number of errors. 14290792Sgshapiro*/ 14390792Sgshapiro 14490792Sgshapiroint 14590792Sgshapirosm_test_end() 14690792Sgshapiro{ 14790792Sgshapiro (void) fprintf(stderr, "%d of %d tests completed successfully\n", 14890792Sgshapiro SmTestIndex - SmTestNumErrors, SmTestIndex); 14990792Sgshapiro if (SmTestNumErrors != 0) 15090792Sgshapiro (void) fprintf(stderr, "*** %d error%s in test! ***\n", 15190792Sgshapiro SmTestNumErrors, 15290792Sgshapiro SmTestNumErrors > 1 ? "s" : ""); 15390792Sgshapiro 15490792Sgshapiro return SmTestNumErrors; 15590792Sgshapiro} 156