X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fvppinfra%2Ftest_maplog.c;h=b51f7f51b25ee982de436b223b521a6f1d990db2;hb=bb5d22d;hp=fb9fb0cc543c60a01748ed3099b70b7afb678b0e;hpb=e9d9170b5546c3c5e768ba3ed26a525a16501c6e;p=vpp.git diff --git a/src/vppinfra/test_maplog.c b/src/vppinfra/test_maplog.c index fb9fb0cc543..b51f7f51b25 100644 --- a/src/vppinfra/test_maplog.c +++ b/src/vppinfra/test_maplog.c @@ -23,15 +23,74 @@ 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) +{ + static int print_header; + int i = 0; + + if (print_header == 0) + { + print_header = 1; + fformat (stdout, "%U", format_maplog_header, h, 1 /* verbose */ ); + } + + 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) + { + fformat (stdout, "\n"); + i = 0; + } + e++; + } + fformat (stdout, "\n--------------\n"); +} + int 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; + + 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); + } - rv = clib_maplog_init (mm, "/tmp/maplog_test", 4096, sizeof (test_entry_t)); + clib_memset (a, 0, sizeof (*a)); + a->mm = mm; + a->file_basename = "/tmp/maplog_test"; + a->file_size_in_bytes = 4096; + a->record_size_in_bytes = sizeof (test_entry_t); + a->application_id = 1; + 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); if (rv) { @@ -39,13 +98,20 @@ 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); return 0; } @@ -57,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);