/*
 * misctest.c
 *
 * Expected SUCCESSes for all tests:	0
 *
 * Returns:
 *	Number of FAILUREs.
 *
 * Test of dump_snmpEngineID().			SUCCESSes:  0
 */

static char *rcsid = "$Id: misctest.c 8676 2008-01-17 23:11:17Z ispringer $";	/* */

#include <config.h>

#include <stdio.h>
#ifdef HAVE_NETINET_IN_H
#include <netinet/in.h>
#endif

#include "asn1.h"
#include "snmp_api.h"
#include "tools.h"
#include "transform_oids.h"
#include "callback.h"

#include <stdlib.h>

extern char     *optarg;
extern int      optind, optopt, opterr;



/*
 * Globals, &c...
 */
char *local_progname;

#define USAGE	"Usage: %s [-h][-1a]"
#define OPTIONLIST	"1ah"

int	doalltests	= 0,
	dodumpseid	= 0;

#define	ALLOPTIONS	(doalltests + dodumpseid)



#define LOCAL_MAXBUF	(1024 * 8)
#define NL		"\n"

#define OUTPUT(o)	fprintf(stdout, "\n\n%s\n\n", o);

#define SUCCESS(s)					\
{							\
	if (!failcount)					\
		fprintf(stdout, "\nSUCCESS: %s\n", s);	\
}

#define FAILED(e, f)					\
{							\
	if (e != SNMPERR_SUCCESS) {			\
		fprintf(stdout, "\nFAILED: %s\n", f);	\
		failcount += 1;				\
	}						\
}




#define IDBLAT_4	"00010203"

#define IDVIOLATE1	"8000000300deedcafe"

#define IDIPv4		"80000003010a090807"
#define IDIPv6		"8000000302100f0e0d0c0b0a090807060504030201"
#define IDMAC		"8000000303ffeeddccbbaa"

#define IDTEXT		"8000000304"
#define PRINTABLE	"Let this be printable."

#define IDOCTETS_7	"80000003050001020304050607"

#define IDLOCAL_11	"8000000306000102030405060708090a0b"

#define IDIPv4_EXTRA3	"80000003010a090807010203"

#define ID_NUMSTRINGS		10




/*
 * Prototypes.
 */
void	usage(FILE *ofp);

int	test_dumpseid(void);





int
main(int argc, char **argv)
{
	int		 rval		= SNMPERR_SUCCESS,
			 failcount	= 0;
	char		 ch;

	local_progname = argv[0];

	/*
	 * Parse.
	 */
	while ( (ch = getopt(argc, argv, OPTIONLIST)) != EOF )
	{
		switch(ch) {
		case '1':	dodumpseid = 1;	break;
		case 'a':	doalltests = 1;		break;
		case 'h':
			rval = 0;
		default:
			usage(stdout);
			exit(rval);
		}

		argc -= 1; argv += 1;
                if (optarg) { argc -= 1; argv += 1; optarg = NULL; }
		optind = 1;
	}  /* endwhile getopt */

	if ((argc > 1)) {
		usage(stdout);
		exit(1000);

	} else if ( ALLOPTIONS != 1 ) {
		usage(stdout);
		exit(1000);
	}


	/*
	 * Test stuff.
	 */
	if (dodumpseid || doalltests) {
		failcount += test_dumpseid();
	}


	/*
	 * Cleanup.
	 */
	return failcount;

} /* end main() */





void
usage(FILE *ofp)
{
	fprintf(ofp,

	USAGE								
	""							NL
	"	-1		Test dump_snmpEngineID()."	NL
	"	-a		All tests."			NL
	"	-h		Help."				NL
	""							NL
		, local_progname);

}  /* end usage() */




#ifdef EXAMPLE
/*******************************************************************-o-******
 * test_dosomething
 *
 * Returns:
 *	Number of failures.
 *
 *
 * Test template.
 */
int
test_dosomething(void)
{
	int		rval = SNMPERR_SUCCESS,
			failcount = 0;

EM0(1, "UNIMPLEMENTED");	/* EM(1); /* */

test_dosomething_quit:
	return failcount;

}  /* end test_dosomething() */
#endif /* EXAMPLE */




/*******************************************************************-o-******
 * test_dumpseid
 *
 * Returns:
 *	Number of failures.
 *
 * Test dump_snmpEngineID().
 */
int
test_dumpseid(void)
{
	int		 /* rval = SNMPERR_SUCCESS, */
			 failcount = 0,
			 tlen,
			 count = 0;

	char		 buf[SNMP_MAXBUF],
			*s, *t,
			*ris,
			*rawid_set[ID_NUMSTRINGS+1] = {
				IDBLAT_4,
				IDVIOLATE1,
				IDIPv4,
				IDIPv6,
				IDMAC,
				IDTEXT,
				IDOCTETS_7,
				IDLOCAL_11,
				IDIPv4_EXTRA3,
				NULL
			};

	OUTPUT(	"Test of dump_snmpEngineID.  "
		"(Does not report failure or success.)");


	while ( (ris = rawid_set[count++]) ) {
		tlen = hex_to_binary2(ris, strlen(ris), &t);

		if (ris == IDTEXT) {
			memset(buf, 0, SNMP_MAXBUF);
			memcpy(buf, t, tlen);
			tlen += sprintf(buf+tlen, "%s", PRINTABLE);

			SNMP_FREE(t);
			t = buf;
		}

#ifdef SNMP_TESTING_CODE
		s = dump_snmpEngineID(t, &tlen);
		printf("%s    (len=%d)\n", s, tlen);
#endif

		SNMP_FREE(s);
		if (t != buf) {
			SNMP_FREE(t);
		}
	}


	return failcount;

}  /* end test_dumpseid() */
