X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=test%2Fext%2Fvapi_c_test.c;h=51fc572746f2209296f4625527ca81343ae75d67;hb=2dbee9361e74d03727a8b618ba80a5e28c006011;hp=725f5c304073781f09b2ff5f32e78fe3f1d96606;hpb=e63325e3ca03c847963863446345e6c80a2c0cfd;p=vpp.git diff --git a/test/ext/vapi_c_test.c b/test/ext/vapi_c_test.c index 725f5c30407..51fc572746f 100644 --- a/test/ext/vapi_c_test.c +++ b/test/ext/vapi_c_test.c @@ -29,6 +29,9 @@ #include #include +#include +#include + DEFINE_VAPI_MSG_IDS_VPE_API_JSON; DEFINE_VAPI_MSG_IDS_INTERFACE_API_JSON; DEFINE_VAPI_MSG_IDS_L2_API_JSON; @@ -359,14 +362,11 @@ show_version_cb (vapi_ctx_t ctx, void *caller_ctx, { ck_assert_int_eq (VAPI_OK, rv); ck_assert_int_eq (true, is_last); - ck_assert_str_eq ("vpe", (char *) vl_api_from_api_string (&p->program)); + ck_assert_str_eq ("vpe", (char *) p->program); printf ("show_version_reply: program: `%s', version: `%s', build directory: " - "`%s', build date: `%s'\n", - vl_api_from_api_string (&p->program), - vl_api_from_api_string (&p->version), - vl_api_from_api_string (&p->build_directory), - vl_api_from_api_string (&p->build_date)); + "`%s', build date: `%s'\n", p->program, p->version, p->build_directory, + p->build_date); ++*(int *) caller_ctx; return VAPI_OK; } @@ -514,7 +514,7 @@ sw_interface_dump_cb (struct vapi_ctx_s *ctx, void *callback_ctx, { ck_assert (NULL != reply); printf ("Interface dump entry: [%u]: %s\n", reply->sw_if_index, - reply->interface_name.buf); + reply->interface_name); size_t i = 0; for (i = 0; i < dctx->num_ifs; ++i) { @@ -802,9 +802,7 @@ generic_cb (vapi_ctx_t ctx, void *callback_ctx, vapi_msg_id_t id, void *msg) ck_assert_int_eq (id, vapi_msg_id_show_version_reply); ck_assert_ptr_ne (NULL, msg); vapi_msg_show_version_reply *reply = msg; - ck_assert_str_eq ("vpe", - (char *) vl_api_from_api_string (&reply-> - payload.program)); + ck_assert_str_eq ("vpe", (char *) reply->payload.program); return VAPI_OK; } @@ -916,6 +914,66 @@ START_TEST (test_unsupported) END_TEST; +START_TEST (test_api_strings) +{ + printf ("--- Invalid api strings ---\n"); + + /* test string 'TEST' + * size = 5 + * length = 4 + */ + const char str[] = "TEST"; + u8 *vec_str = 0, *vstr = 0; + char *cstr; + + vapi_msg_sw_interface_dump *dump = + malloc (sizeof (vapi_msg_sw_interface_dump) + strlen (str)); + clib_mem_init (0, 1 << 20); + + vl_api_c_string_to_api_string (str, &dump->payload.name_filter); + /* Assert nul terminator NOT present */ + ck_assert_int_eq (vl_api_string_len (&dump->payload.name_filter), + strlen (str)); + + cstr = vl_api_from_api_to_new_c_string (&dump->payload.name_filter); + ck_assert_ptr_ne (cstr, NULL); + /* Assert nul terminator present */ + ck_assert_int_eq (vec_len (cstr), sizeof (str)); + ck_assert_int_eq (strlen (str), strlen (cstr)); + vec_free (cstr); + + vstr = vl_api_from_api_to_new_vec (&dump->payload.name_filter); + ck_assert_ptr_ne (vstr, NULL); + /* Assert nul terminator NOT present */ + ck_assert_int_eq (vec_len (vstr), strlen (str)); + vec_free (vstr); + + /* vector conaining NON nul terminated string 'TEST' */ + vec_add (vec_str, str, strlen (str)); + clib_memset (dump->payload.name_filter.buf, 0, strlen (str)); + dump->payload.name_filter.length = 0; + + vl_api_vec_to_api_string (vec_str, &dump->payload.name_filter); + /* Assert nul terminator NOT present */ + ck_assert_int_eq (vl_api_string_len (&dump->payload.name_filter), + vec_len (vec_str)); + + cstr = vl_api_from_api_to_new_c_string (&dump->payload.name_filter); + ck_assert_ptr_ne (cstr, NULL); + /* Assert nul terminator present */ + ck_assert_int_eq (vec_len (cstr), sizeof (str)); + ck_assert_int_eq (strlen (str), strlen (cstr)); + vec_free (cstr); + + vstr = vl_api_from_api_to_new_vec (&dump->payload.name_filter); + ck_assert_ptr_ne (vstr, NULL); + /* Assert nul terminator NOT present */ + ck_assert_int_eq (vec_len (vstr), strlen (str)); + vec_free (vstr); +} + +END_TEST; + Suite * test_suite (void) { @@ -962,6 +1020,10 @@ test_suite (void) tcase_add_test (tc_unsupported, test_unsupported); suite_add_tcase (s, tc_unsupported); + TCase *tc_dynamic = tcase_create ("Dynamic message size"); + tcase_add_test (tc_dynamic, test_api_strings); + suite_add_tcase (s, tc_dynamic); + return s; }