xref: /freebsd-src/tools/regression/netinet6/inet6_rth/test_subr.c (revision 6bfca4dcab07dad45a805879d954876b353c0810)
1*092fa28fSMike Makonnen /*-
2*092fa28fSMike Makonnen  * Copyright (c) 2007 Michael Telahun Makonnen
3*092fa28fSMike Makonnen  * All rights reserved.
4*092fa28fSMike Makonnen  *
5*092fa28fSMike Makonnen  * Redistribution and use in source and binary forms, with or without
6*092fa28fSMike Makonnen  * modification, are permitted provided that the following conditions
7*092fa28fSMike Makonnen  * are met:
8*092fa28fSMike Makonnen  * 1. Redistributions of source code must retain the above copyright
9*092fa28fSMike Makonnen  *    notice, this list of conditions and the following disclaimer.
10*092fa28fSMike Makonnen  * 2. Redistributions in binary form must reproduce the above copyright
11*092fa28fSMike Makonnen  *    notice, this list of conditions and the following disclaimer in the
12*092fa28fSMike Makonnen  *    documentation and/or other materials provided with the distribution.
13*092fa28fSMike Makonnen  *
14*092fa28fSMike Makonnen  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
15*092fa28fSMike Makonnen  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16*092fa28fSMike Makonnen  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
17*092fa28fSMike Makonnen  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
18*092fa28fSMike Makonnen  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
19*092fa28fSMike Makonnen  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20*092fa28fSMike Makonnen  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
21*092fa28fSMike Makonnen  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
22*092fa28fSMike Makonnen  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
23*092fa28fSMike Makonnen  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
24*092fa28fSMike Makonnen  * SUCH DAMAGE.
25*092fa28fSMike Makonnen  *
26*092fa28fSMike Makonnen  */
27*092fa28fSMike Makonnen 
28*092fa28fSMike Makonnen #include <sys/types.h>
29*092fa28fSMike Makonnen 
30*092fa28fSMike Makonnen #include <stdio.h>
31*092fa28fSMike Makonnen #include <stdlib.h>
32*092fa28fSMike Makonnen #include <string.h>
33*092fa28fSMike Makonnen 
34*092fa28fSMike Makonnen #include "test_subr.h"
35*092fa28fSMike Makonnen 
36*092fa28fSMike Makonnen int g_total;
37*092fa28fSMike Makonnen int g_pass;
38*092fa28fSMike Makonnen int g_fail;
39*092fa28fSMike Makonnen char g_funcname[FUNCNAMESIZE];
40*092fa28fSMike Makonnen char g_testdesc[LINESIZE];
41*092fa28fSMike Makonnen char g_errbuf[LINESIZE];
42*092fa28fSMike Makonnen 
43*092fa28fSMike Makonnen void
set_funcname(char * bufp,size_t bufsize)44*092fa28fSMike Makonnen set_funcname(char *bufp, size_t bufsize)
45*092fa28fSMike Makonnen {
46*092fa28fSMike Makonnen 	strlcpy(g_funcname, bufp,
47*092fa28fSMike Makonnen 	    bufsize < FUNCNAMESIZE ? bufsize : FUNCNAMESIZE);
48*092fa28fSMike Makonnen }
49*092fa28fSMike Makonnen 
50*092fa28fSMike Makonnen /*
51*092fa28fSMike Makonnen  * desc is a NULL-terminated string.
52*092fa28fSMike Makonnen  */
53*092fa28fSMike Makonnen void
checkptr(caddr_t expected,caddr_t got,const char * desc)54*092fa28fSMike Makonnen checkptr(caddr_t expected, caddr_t got, const char *desc)
55*092fa28fSMike Makonnen {
56*092fa28fSMike Makonnen 	int  len;
57*092fa28fSMike Makonnen 	int  failed;
58*092fa28fSMike Makonnen 	char sbuf[LINESIZE];
59*092fa28fSMike Makonnen 
60*092fa28fSMike Makonnen 	memset((void *)sbuf, 0, LINESIZE);
61*092fa28fSMike Makonnen 	snprintf(g_testdesc, LINESIZE, desc);
62*092fa28fSMike Makonnen 
63*092fa28fSMike Makonnen 	failed = 1;
64*092fa28fSMike Makonnen 	g_total++;
65*092fa28fSMike Makonnen 	if (got == expected) {
66*092fa28fSMike Makonnen 		len = snprintf(sbuf, LINESIZE, "ok");
67*092fa28fSMike Makonnen 		g_pass++;
68*092fa28fSMike Makonnen 		failed = 0;
69*092fa28fSMike Makonnen 	} else {
70*092fa28fSMike Makonnen 		len = snprintf(sbuf, LINESIZE, "not ok");
71*092fa28fSMike Makonnen 		snprintf(g_errbuf, LINESIZE, " : Expected %#x, but got %#x",
72*092fa28fSMike Makonnen 		    (unsigned int)expected, (unsigned int)got);
73*092fa28fSMike Makonnen 		g_fail++;
74*092fa28fSMike Makonnen 	}
75*092fa28fSMike Makonnen 	snprintf(sbuf + len, LINESIZE - len, " %d - %s (%s)",
76*092fa28fSMike Makonnen 	    g_total, g_funcname, g_testdesc);
77*092fa28fSMike Makonnen 	printf(sbuf);
78*092fa28fSMike Makonnen 	if (failed)
79*092fa28fSMike Makonnen 		printf(g_errbuf);
80*092fa28fSMike Makonnen 	printf("\n");
81*092fa28fSMike Makonnen 	fflush(NULL);
82*092fa28fSMike Makonnen 	memset((void *)g_errbuf, 0, LINESIZE);
83*092fa28fSMike Makonnen 	memset((void *)g_testdesc, 0, LINESIZE);
84*092fa28fSMike Makonnen }
85*092fa28fSMike Makonnen 
86*092fa28fSMike Makonnen void
checkstr(const char * expected,const char * got,size_t explen,const char * desc)87*092fa28fSMike Makonnen checkstr(const char *expected, const char *got, size_t explen, const char *desc)
88*092fa28fSMike Makonnen {
89*092fa28fSMike Makonnen 	int  len;
90*092fa28fSMike Makonnen 	int  failed;
91*092fa28fSMike Makonnen 	char sbuf[LINESIZE];
92*092fa28fSMike Makonnen 
93*092fa28fSMike Makonnen 	memset((void *)sbuf, 0, LINESIZE);
94*092fa28fSMike Makonnen 	snprintf(g_testdesc, LINESIZE, desc);
95*092fa28fSMike Makonnen 
96*092fa28fSMike Makonnen 	failed = 1;
97*092fa28fSMike Makonnen 	g_total++;
98*092fa28fSMike Makonnen 	if (strncmp(expected, got, explen) == 0) {
99*092fa28fSMike Makonnen 		len = snprintf(sbuf, LINESIZE, "ok");
100*092fa28fSMike Makonnen 		g_pass++;
101*092fa28fSMike Makonnen 		failed = 0;
102*092fa28fSMike Makonnen 	} else {
103*092fa28fSMike Makonnen 		len = snprintf(sbuf, LINESIZE, "not ok");
104*092fa28fSMike Makonnen 		snprintf(g_errbuf, LINESIZE,
105*092fa28fSMike Makonnen 		    " : Expected %s, but got %s", expected, got);
106*092fa28fSMike Makonnen 		g_fail++;
107*092fa28fSMike Makonnen 	}
108*092fa28fSMike Makonnen 	snprintf(sbuf + len, LINESIZE - len, " %d - %s (%s)",
109*092fa28fSMike Makonnen 	    g_total, g_funcname, g_testdesc);
110*092fa28fSMike Makonnen 	printf(sbuf);
111*092fa28fSMike Makonnen 	if (failed)
112*092fa28fSMike Makonnen 		printf(g_errbuf);
113*092fa28fSMike Makonnen 	printf("\n");
114*092fa28fSMike Makonnen 	fflush(NULL);
115*092fa28fSMike Makonnen 	memset((void *)g_errbuf, 0, LINESIZE);
116*092fa28fSMike Makonnen 	memset((void *)g_testdesc, 0, LINESIZE);
117*092fa28fSMike Makonnen }
118*092fa28fSMike Makonnen 
119*092fa28fSMike Makonnen void
checknum(int expected,int got,int cmp,const char * desc)120*092fa28fSMike Makonnen checknum(int expected, int got, int cmp, const char *desc)
121*092fa28fSMike Makonnen {
122*092fa28fSMike Makonnen 	int  len;
123*092fa28fSMike Makonnen 	int  pass;
124*092fa28fSMike Makonnen 	int  failed;
125*092fa28fSMike Makonnen 	char sbuf[LINESIZE];
126*092fa28fSMike Makonnen 
127*092fa28fSMike Makonnen 	memset((void *)sbuf, 0, LINESIZE);
128*092fa28fSMike Makonnen 	snprintf(g_testdesc, LINESIZE, desc);
129*092fa28fSMike Makonnen 
130*092fa28fSMike Makonnen 	failed = 1;
131*092fa28fSMike Makonnen 	pass = 0;
132*092fa28fSMike Makonnen 	g_total++;
133*092fa28fSMike Makonnen 	switch(cmp) {
134*092fa28fSMike Makonnen 	case 0:
135*092fa28fSMike Makonnen 		pass = (got == expected) ? 1 : 0;
136*092fa28fSMike Makonnen 		break;
137*092fa28fSMike Makonnen 	case 1:
138*092fa28fSMike Makonnen 		pass = (got > expected) ? 1 : 0;
139*092fa28fSMike Makonnen 		break;
140*092fa28fSMike Makonnen 	case -1:
141*092fa28fSMike Makonnen 		pass = (got < expected) ? 1 : 0;
142*092fa28fSMike Makonnen 		break;
143*092fa28fSMike Makonnen 	}
144*092fa28fSMike Makonnen 	if (pass != 0) {
145*092fa28fSMike Makonnen 		len = snprintf(sbuf, LINESIZE, "ok");
146*092fa28fSMike Makonnen 		g_pass++;
147*092fa28fSMike Makonnen 		failed = 0;
148*092fa28fSMike Makonnen 	} else {
149*092fa28fSMike Makonnen 		len = snprintf(sbuf, LINESIZE, "not ok");
150*092fa28fSMike Makonnen 		snprintf(g_errbuf, LINESIZE,
151*092fa28fSMike Makonnen 		    " : Expected %d, but got %d", expected, got);
152*092fa28fSMike Makonnen 		g_fail++;
153*092fa28fSMike Makonnen 	}
154*092fa28fSMike Makonnen 	snprintf(sbuf + len, LINESIZE - len, " %d - %s (%s)",
155*092fa28fSMike Makonnen 	    g_total, g_funcname, g_testdesc);
156*092fa28fSMike Makonnen 	printf(sbuf);
157*092fa28fSMike Makonnen 	if (failed)
158*092fa28fSMike Makonnen 		printf(g_errbuf);
159*092fa28fSMike Makonnen 	printf("\n");
160*092fa28fSMike Makonnen 	fflush(NULL);
161*092fa28fSMike Makonnen 	memset((void *)g_errbuf, 0, LINESIZE);
162*092fa28fSMike Makonnen 	memset((void *)g_testdesc, 0, LINESIZE);
163*092fa28fSMike Makonnen }
164