X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fvppinfra%2Ftest_maplog.c;h=b51f7f51b25ee982de436b223b521a6f1d990db2;hb=627fb6a16d8e7430e84aa664cb2b8f89a5688fab;hp=c49ebd6885e5deee0be566ee1194e8aac42d0030;hpb=04fee31f265b1d8b602bf336ef1df6c917cf18b2;p=vpp.git diff --git a/src/vppinfra/test_maplog.c b/src/vppinfra/test_maplog.c index c49ebd6885e..b51f7f51b25 100644 --- a/src/vppinfra/test_maplog.c +++ b/src/vppinfra/test_maplog.c @@ -23,6 +23,12 @@ typedef struct u64 junk[7]; } test_entry_t; +typedef enum +{ + TEST_NORMAL, + TEST_CIRCULAR, +} test_type_t; + static void process_maplog_records (clib_maplog_header_t * h, test_entry_t * e, u64 records_this_file) @@ -38,6 +44,9 @@ process_maplog_records (clib_maplog_header_t * h, while (records_this_file--) { + /* Padding at the end of a damaged log? */ + if (e->serial_number == 0ULL) + break; fformat (stdout, "%4lld ", e->serial_number); if (++i == 8) { @@ -46,7 +55,7 @@ process_maplog_records (clib_maplog_header_t * h, } e++; } - fformat (stdout, "--------------\n"); + fformat (stdout, "\n--------------\n"); } int @@ -55,10 +64,22 @@ test_maplog_main (unformat_input_t * input) clib_maplog_main_t *mm = &maplog_main; clib_maplog_init_args_t _a, *a = &_a; int rv; - int i; + int i, limit; test_entry_t *t; + int noclose = 0; + test_type_t which = TEST_NORMAL; - memset (a, 0, sizeof (*a)); + while (unformat_check_input (input) != UNFORMAT_END_OF_INPUT) + { + if (unformat (input, "noclose")) + noclose = 1; + else if (unformat (input, "circular")) + which = TEST_CIRCULAR; + else + clib_warning ("unknown input '%U'", format_unformat_error, input); + } + + clib_memset (a, 0, sizeof (*a)); a->mm = mm; a->file_basename = "/tmp/maplog_test"; a->file_size_in_bytes = 4096; @@ -67,6 +88,7 @@ test_maplog_main (unformat_input_t * input) a->application_major_version = 1; a->application_minor_version = 0; a->application_patch_version = 0; + a->maplog_is_circular = (which == TEST_CIRCULAR) ? 1 : 0; rv = clib_maplog_init (a); @@ -76,13 +98,18 @@ test_maplog_main (unformat_input_t * input) exit (1); } - for (i = 0; i < 64 * 5; i++) + limit = (which == TEST_CIRCULAR) ? (64 + 2) : 64 * 5; + + for (i = 0; i < limit; i++) { t = clib_maplog_get_entry (mm); - t->serial_number = i; + t->serial_number = i + 1; } - clib_maplog_close (mm); + if (noclose) + clib_memset (mm, 0, sizeof (*mm)); + else + clib_maplog_close (mm); clib_maplog_process ("/tmp/maplog_test", process_maplog_records); @@ -96,6 +123,8 @@ main (int argc, char *argv[]) unformat_input_t i; int ret; + clib_mem_init (0, 64ULL << 20); + unformat_init_command_line (&i, argv); ret = test_maplog_main (&i); unformat_free (&i);