X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=test%2Fext%2Fvapi_cpp_test.cpp;h=284b211eb8135db5b0cfbd01b9631b24b03b3929;hb=61717cc38;hp=14c35d5beddd60f1ecd477502a4e101e5bfda0fa;hpb=dc15be2ca7c51772b00e4c5548934a35aa7e4add;p=vpp.git diff --git a/test/ext/vapi_cpp_test.cpp b/test/ext/vapi_cpp_test.cpp index 14c35d5bedd..284b211eb81 100644 --- a/test/ext/vapi_cpp_test.cpp +++ b/test/ext/vapi_cpp_test.cpp @@ -24,12 +24,10 @@ #include #include #include -#include #include DEFINE_VAPI_MSG_IDS_VPE_API_JSON; DEFINE_VAPI_MSG_IDS_INTERFACE_API_JSON; -DEFINE_VAPI_MSG_IDS_STATS_API_JSON; DEFINE_VAPI_MSG_IDS_FAKE_API_JSON; static char *app_name = nullptr; @@ -37,6 +35,13 @@ static char *api_prefix = nullptr; static const int max_outstanding_requests = 32; static const int response_queue_size = 32; +#define WAIT_FOR_RESPONSE(param, ret) \ + do \ + { \ + ret = con.wait_for_response (param); \ + } \ + while (ret == VAPI_EAGAIN) + using namespace vapi; void verify_show_version_reply (const Show_version_reply &r) @@ -68,7 +73,7 @@ START_TEST (test_show_version_1) Show_version sv (con); vapi_error_e rv = sv.execute (); ck_assert_int_eq (VAPI_OK, rv); - rv = con.wait_for_response (sv); + WAIT_FOR_RESPONSE (sv, rv); ck_assert_int_eq (VAPI_OK, rv); auto &r = sv.get_response (); verify_show_version_reply (r); @@ -122,7 +127,8 @@ START_TEST (test_loopbacks_1) memcpy (p.mac_address, mac_addresses[i], sizeof (p.mac_address)); auto e = cl.execute (); ck_assert_int_eq (VAPI_OK, e); - vapi_error_e rv = con.wait_for_response (cl); + vapi_error_e rv; + WAIT_FOR_RESPONSE (cl, rv); ck_assert_int_eq (VAPI_OK, rv); auto &rp = cl.get_response ().get_payload (); ck_assert_int_eq (0, rp.retval); @@ -142,10 +148,10 @@ START_TEST (test_loopbacks_1) Sw_interface_dump d (con); auto &p = d.get_request ().get_payload (); p.name_filter_valid = 0; - memset (p.name_filter, 0, sizeof (p.name_filter)); + memset (p.name_filter.buf, 0, p.name_filter.length); auto rv = d.execute (); ck_assert_int_eq (VAPI_OK, rv); - rv = con.wait_for_response (d); + WAIT_FOR_RESPONSE (d, rv); ck_assert_int_eq (VAPI_OK, rv); auto &rs = d.get_result_set (); for (auto &r : rs) @@ -172,7 +178,7 @@ START_TEST (test_loopbacks_1) dl.get_request ().get_payload ().sw_if_index = sw_if_indexes[i]; auto rv = dl.execute (); ck_assert_int_eq (VAPI_OK, rv); - rv = con.wait_for_response (dl); + WAIT_FOR_RESPONSE (dl, rv); ck_assert_int_eq (VAPI_OK, rv); auto &response = dl.get_response (); auto rp = response.get_payload (); @@ -184,10 +190,10 @@ START_TEST (test_loopbacks_1) Sw_interface_dump d (con); auto &p = d.get_request ().get_payload (); p.name_filter_valid = 0; - memset (p.name_filter, 0, sizeof (p.name_filter)); + memset (p.name_filter.buf, 0, p.name_filter.length); auto rv = d.execute (); ck_assert_int_eq (VAPI_OK, rv); - rv = con.wait_for_response (d); + WAIT_FOR_RESPONSE (d, rv); ck_assert_int_eq (VAPI_OK, rv); auto &rs = d.get_result_set (); for (auto &r : rs) @@ -302,10 +308,10 @@ START_TEST (test_loopbacks_2) Sw_interface_dump d (con, std::ref (swdcb)); auto &p = d.get_request ().get_payload (); p.name_filter_valid = 0; - memset (p.name_filter, 0, sizeof (p.name_filter)); + memset (p.name_filter.buf, 0, p.name_filter.length); auto rv = d.execute (); ck_assert_int_eq (VAPI_OK, rv); - rv = con.wait_for_response (d); + WAIT_FOR_RESPONSE (d, rv); ck_assert_int_eq (VAPI_OK, rv); ck_assert_int_ne (0, swdcb.called); std::array dcbs; @@ -331,10 +337,10 @@ START_TEST (test_loopbacks_2) Sw_interface_dump d (con); auto &p = d.get_request ().get_payload (); p.name_filter_valid = 0; - memset (p.name_filter, 0, sizeof (p.name_filter)); + memset (p.name_filter.buf, 0, p.name_filter.length); auto rv = d.execute (); ck_assert_int_eq (VAPI_OK, rv); - rv = con.wait_for_response (d); + WAIT_FOR_RESPONSE (d, rv); ck_assert_int_eq (VAPI_OK, rv); auto &rs = d.get_result_set (); for (auto &r : rs) @@ -350,152 +356,6 @@ START_TEST (test_loopbacks_2) END_TEST; -START_TEST (test_stats_1) -{ - printf ("--- Receive single stats by waiting for response ---\n"); - Want_stats ws (con); - auto &payload = ws.get_request ().get_payload (); - payload.enable_disable = 1; - payload.pid = getpid (); - auto rv = ws.execute (); - ck_assert_int_eq (VAPI_OK, rv); - Event_registration sc (con); - rv = con.wait_for_response (sc); - ck_assert_int_eq (VAPI_OK, rv); - auto &rs = sc.get_result_set (); - int count = 0; - for (auto &r : rs) - { - printf ("simple counters: first_sw_if_index=%u\n", - r.get_payload ().first_sw_if_index); - ++count; - } - ck_assert_int_ne (0, count); -} - -END_TEST; - -struct Vnet_interface_simple_counters_cb -{ - Vnet_interface_simple_counters_cb () : called{0} {}; - int called; - vapi_error_e - operator() (Event_registration &e) - { - ++called; - auto &rs = e.get_result_set (); - int count = 0; - for (auto &r : rs) - { - printf ("simple counters: first_sw_if_index=%u\n", - r.get_payload ().first_sw_if_index); - ++count; - } - ck_assert_int_ne (0, count); - return VAPI_OK; - } -}; - -START_TEST (test_stats_2) -{ - printf ("--- Receive single stats by getting a callback ---\n"); - Want_stats ws (con); - auto &payload = ws.get_request ().get_payload (); - payload.enable_disable = 1; - payload.pid = getpid (); - auto rv = ws.execute (); - ck_assert_int_eq (VAPI_OK, rv); - Vnet_interface_simple_counters_cb cb; - Event_registration sc (con, std::ref (cb)); - rv = con.wait_for_response (sc); - ck_assert_int_eq (VAPI_OK, rv); - ck_assert_int_ne (0, cb.called); -} - -END_TEST; - -struct Vnet_interface_simple_counters_2_cb -{ - Vnet_interface_simple_counters_2_cb () : called{0}, total{0} {}; - int called; - int total; - vapi_error_e - operator() (Event_registration &e) - { - ++called; - auto &rs = e.get_result_set (); - int count = 0; - for (auto &r : rs) - { - printf ("simple counters: first_sw_if_index=%u\n", - r.get_payload ().first_sw_if_index); - ++count; - } - rs.free_all_responses (); - ck_assert_int_ne (0, count); - total += count; - return VAPI_OK; - } -}; - -START_TEST (test_stats_3) -{ - printf ( - "--- Receive single stats by getting a callback - clear results ---\n"); - Want_stats ws (con); - auto &payload = ws.get_request ().get_payload (); - payload.enable_disable = 1; - payload.pid = getpid (); - auto rv = ws.execute (); - ck_assert_int_eq (VAPI_OK, rv); - Vnet_interface_simple_counters_2_cb cb; - Event_registration sc (con, std::ref (cb)); - for (int i = 0; i < 5; ++i) - { - rv = con.wait_for_response (sc); - } - ck_assert_int_eq (VAPI_OK, rv); - ck_assert_int_eq (5, cb.called); - ck_assert_int_eq (5, cb.total); -} - -END_TEST; - -START_TEST (test_stats_4) -{ - printf ("--- Receive multiple stats by waiting for response ---\n"); - Want_stats ws (con); - auto &payload = ws.get_request ().get_payload (); - payload.enable_disable = 1; - payload.pid = getpid (); - auto rv = ws.execute (); - ck_assert_int_eq (VAPI_OK, rv); - Event_registration sc (con); - Event_registration cc (con); - rv = con.wait_for_response (sc); - ck_assert_int_eq (VAPI_OK, rv); - rv = con.wait_for_response (cc); - ck_assert_int_eq (VAPI_OK, rv); - int count = 0; - for (auto &r : sc.get_result_set ()) - { - printf ("simple counters: first_sw_if_index=%u\n", - r.get_payload ().first_sw_if_index); - ++count; - } - ck_assert_int_ne (0, count); - count = 0; - for (auto &r : cc.get_result_set ()) - { - printf ("combined counters: first_sw_if_index=%u\n", - r.get_payload ().first_sw_if_index); - ++count; - } - ck_assert_int_ne (0, count); -} - -END_TEST; - START_TEST (test_unsupported) { printf ("--- Unsupported messages ---\n"); @@ -548,10 +408,6 @@ Suite *test_suite (void) tcase_add_test (tc_cpp_api, test_show_version_2); tcase_add_test (tc_cpp_api, test_loopbacks_1); tcase_add_test (tc_cpp_api, test_loopbacks_2); - tcase_add_test (tc_cpp_api, test_stats_1); - tcase_add_test (tc_cpp_api, test_stats_2); - tcase_add_test (tc_cpp_api, test_stats_3); - tcase_add_test (tc_cpp_api, test_stats_4); tcase_add_test (tc_cpp_api, test_unsupported); suite_add_tcase (s, tc_cpp_api);