diff options
Diffstat (limited to 'testing/fulltests/snmpv3/T050etimetest_capp.c')
-rw-r--r-- | testing/fulltests/snmpv3/T050etimetest_capp.c | 420 |
1 files changed, 420 insertions, 0 deletions
diff --git a/testing/fulltests/snmpv3/T050etimetest_capp.c b/testing/fulltests/snmpv3/T050etimetest_capp.c new file mode 100644 index 0000000..53951aa --- /dev/null +++ b/testing/fulltests/snmpv3/T050etimetest_capp.c @@ -0,0 +1,420 @@ +/* + * 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 <net-snmp/net-snmp-config.h> + +#include <stdio.h> +#include <sys/types.h> +#ifdef HAVE_STDLIB_H +#include <stdlib.h> +#endif +#ifdef HAVE_STRING_H +#include <string.h> +#endif + +#ifdef HAVE_NETINET_IN_H +#include <netinet/in.h> +#endif + +#include <unistd.h> + +#include <net-snmp/library/asn1.h> +#include <net-snmp/library/snmp_api.h> +#include <net-snmp/library/scapi.h> +#include <net-snmp/library/tools.h> +#include <net-snmp/library/lcd_time.h> +#include <net-snmp/library/snmp_debug.h> +#include <net-snmp/library/callback.h> + +static u_int dummy_etime, dummy_eboot; /* For ISENGINEKNOWN(). */ + + +#include <stdlib.h> + +extern char *optarg; +extern int optind, optopt, opterr; + +int testcount=0; + +/* + * Globals, &c... + */ +char *local_progname; + +#define USAGE "Usage: %s [-h][-s <seconds>][-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> 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() */ |