/* * etimetest.c * * HEADER Testing engineID hashing and timing * * Expected SUCCESSes for all tests: 3 * * Returns: * Number of FAILUREs. * * Test of hash_engineID(). SUCCESSes: 0 * Test of LCD Engine ID and Time List. SUCCESSes: 3 * * FIX Devise a test for {set,get}_enginetime(..., FALSE). */ #include #include #include #ifdef HAVE_STDLIB_H #include #endif #ifdef HAVE_STRING_H #include #endif #ifdef HAVE_NETINET_IN_H #include #endif #include #include #include #include #include #include #include #include static u_int dummy_etime, dummy_eboot; /* For ISENGINEKNOWN(). */ #include extern char *optarg; extern int optind, optopt, opterr; int testcount=0; /* * Globals, &c... */ char *local_progname; #define USAGE "Usage: %s [-h][-s ][-aeH]" #define OPTIONLIST "aehHs:" int doalltests = 0, dohashindex = 0, doetimetest = 0; #define ALLOPTIONS (doalltests + dohashindex + doetimetest) #define LOCAL_MAXBUF (1024 * 8) #define NL "\n" #define OUTPUT(o) fprintf(stdout, "# %s\n", o); #define SUCCESS(s) \ { \ fprintf(stdout, "# Done with %s\n", s); \ } #define FAILED(e, f) \ { \ if (e != SNMPERR_SUCCESS) { \ fprintf(stdout, "not ok: %d - %s\n", ++testcount, f); \ failcount += 1; \ } else { \ fprintf(stdout, "ok: %d - %s\n", ++testcount, f); \ } \ fflush(stdout); \ } #define DETAILINT(s, i) \ fprintf(stdout, "# %s: %d\n", s, i); /* * Global variables. */ int sleeptime = 2; #define BLAT "alk;djf;an riu;alicenmrul;aiknglksajhe1 adcfalcenrco2" /* * Prototypes. */ void usage(FILE * ofp); int test_etime(void); int test_hashindex(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 'a': doalltests = 1; break; case 'e': doetimetest = 1; break; case 'H': dohashindex = 1; break; case 's': sleeptime = atoi(optarg); if (sleeptime < 0) { usage(stderr); exit(1000); } break; 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) { doalltests = 1; } init_snmp("testing"); /* * test stuff. */ rval = sc_init(); FAILED(rval, "sc_init()"); if (dohashindex || doalltests) { failcount += test_hashindex(); } if (doetimetest || doalltests) { failcount += test_etime(); } fprintf(stdout, "1..%d\n", testcount); return 0; } /* end main() */ void usage(FILE * ofp) { fprintf(ofp, USAGE "" NL " -a All tests." NL " -e Exercise the list of enginetimes." NL " -h Help." NL " -H Test hash_engineID()." NL " -s Seconds to pause. (Default: 0.)" 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; test_dosomething_quit: return failcount; } /* end test_dosomething() */ #endif /* EXAMPLE */ /*******************************************************************-o-****** * test_hashindex * * Returns: * Number of failures. * * * Test hash_engineID(). */ int test_hashindex(void) { int /* rval = SNMPERR_SUCCESS, */ failcount = 0; const u_char *s; OUTPUT("Visual spot check of hash index outputs. " "(Success or failure not noted.)"); s = (const u_char *) " A"; fprintf(stdout, "# %s = %d\n", s, hash_engineID(s, strlen((const char *) s))); s = (const u_char *) " BB"; fprintf(stdout, "# %s = %d\n", s, hash_engineID(s, strlen((const char *) s))); s = (const u_char *) " CCC"; fprintf(stdout, "# %s = %d\n", s, hash_engineID(s, strlen((const char *) s))); s = (const u_char *) " DDDD"; fprintf(stdout, "# %s = %d\n", s, hash_engineID(s, strlen((const char *) s))); s = (const u_char *) " EEEEE"; fprintf(stdout, "# %s = %d\n", s, hash_engineID(s, strlen((const char *) s))); s = (const u_char *) BLAT; fprintf(stdout, "# %s = %d\n", s, hash_engineID(s, strlen((const char *) s))); OUTPUT("Visual spot check -- DONE."); return failcount; } /* end test_hashindex() */ /*******************************************************************-o-****** * test_etime * * Returns: * Number of failures. * * Test of LCD Engine ID and Time List. */ int test_etime(void) { int rval = SNMPERR_SUCCESS, failcount = 0; u_int etime, eboot; /* * ------------------------------------ -o- */ OUTPUT("Query of empty list, two set actions."); rval = ISENGINEKNOWN((const u_char *) "A", 1); if (rval == TRUE) { FAILED(SNMPERR_GENERR, "Query of empty list returned TRUE.") } rval = set_enginetime((const u_char *) "BB", 2, 2, 20, TRUE); FAILED(rval, "set_enginetime()"); rval = set_enginetime((const u_char *) "CCC", 3, 31, 90127, TRUE); FAILED(rval, "set_enginetime()"); SUCCESS("Check of empty list, and two additions."); /* * ------------------------------------ -o- */ OUTPUT("Add entries using macros, test for existence with macros."); rval = ENSURE_ENGINE_RECORD((const u_char *) "DDDD", 4); FAILED(rval, "ENSURE_ENGINE_RECORD()"); rval = MAKENEW_ENGINE_RECORD((const u_char *) "EEEEE", 5); if (rval == SNMPERR_SUCCESS) { FAILED(rval, "MAKENEW_ENGINE_RECORD returned success for " "missing record."); } rval = MAKENEW_ENGINE_RECORD((const u_char *) "BB", 2); FAILED(rval, "MAKENEW_ENGINE_RECORD()."); SUCCESS ("Added entries with macros, tested for existence with macros."); /* * ------------------------------------ -o- */ OUTPUT("Dump the list and then sleep."); #ifdef NETSNMP_ENABLE_TESTING_CODE dump_etimelist(); #endif fprintf(stdout, "# Sleeping for %d second%s... ", sleeptime, (sleeptime == 1) ? "" : "s"); sleep(sleeptime); /* * ------------------------------------ -o- */ OUTPUT ("Retrieve data from real/stubbed records, update real/stubbed."); rval = get_enginetime((const u_char *) "BB", 2, &eboot, &etime, TRUE); FAILED(rval, "get_enginetime()."); fprintf(stdout, "# BB = <%d,%d>\n", eboot, etime); if ((etime < 20) || (eboot < 2)) { FAILED(SNMPERR_GENERR, "get_enginetime() returned bad values. (1)"); } rval = get_enginetime((const u_char *) "DDDD", 4, &eboot, &etime, FALSE); FAILED(rval, "get_enginetime()."); fprintf(stdout, "# DDDD = <%d,%d>\n", eboot, etime); if ((etime < sleeptime) || (eboot != 0)) { FAILED(SNMPERR_GENERR, "get_enginetime() returned bad values. (2)"); } rval = set_enginetime((const u_char *) "CCC", 3, 234, 10000, TRUE); FAILED(rval, "set_enginetime()."); rval = set_enginetime((const u_char *) "EEEEE", 5, 9876, 55555, TRUE); FAILED(rval, "set_enginetime()."); SUCCESS("Retrieval and updates."); /* * ------------------------------------ -o- */ OUTPUT("Sleep again, then dump the list one last time."); fprintf(stdout, "# Sleeping for %d second%s...\n", sleeptime, (sleeptime == 1) ? "" : "s"); sleep(sleeptime); #ifdef NETSNMP_ENABLE_TESTING_CODE dump_etimelist(); #endif return failcount; } /* end test_etime() */