diff options
Diffstat (limited to 'src/scvpp/tests/scvpp_test.c')
-rw-r--r-- | src/scvpp/tests/scvpp_test.c | 127 |
1 files changed, 112 insertions, 15 deletions
diff --git a/src/scvpp/tests/scvpp_test.c b/src/scvpp/tests/scvpp_test.c index 81938f0..adc2b55 100644 --- a/src/scvpp/tests/scvpp_test.c +++ b/src/scvpp/tests/scvpp_test.c @@ -20,35 +20,132 @@ #include <cmocka.h> #include "sc_vpp_comm.h" +#include "sc_vpp_interface.h" +#include "sc_vpp_ip.h" +#include "sc_vpp_v3po.h" +//TODO Check with future function get_interface_state +static void test_enable_disable(void **state) +{ + int rc; + + rc = interface_enable("tap0", 1); + assert_int_equal(rc, 0); + + rc = interface_enable("tap0", 0); + assert_int_equal(rc, 0); +} -static int -scvpp_test_setup(void **state) +//TODO would need to make sure tap0 is index 1 +//TODO delete eventually because get_interface_id will not be extern +static void test_name2index(void **state) { - //sc_vpp_connect - return 0; + int rc; + const char iface_name[] = "tap0"; + sw_interface_details_query_t query = {0}; + sw_interface_details_query_set_name(&query, iface_name); + + rc = get_interface_id(&query); + assert_int_equal(rc, 1); + + assert_string_equal(iface_name, query.sw_interface_details.interface_name); + assert_int_equal(query.sw_interface_details.sw_if_index, 1); } -static int -scvpp_test_teardown(void **state) +static void test_add_ipv4(void **state) { - //sc_vpp_disconnect - return 0; + const char ip_q[VPP_IP4_ADDRESS_STRING_LEN] = "192.168.100.144"; + char ip_r[VPP_IP4_ADDRESS_STRING_LEN]; + u8 prefix_q = 24; + u8 prefix_r; + int rc; + + //add ipv4 on tap0 + rc = ipv46_config_add_remove("tap0", ip_q, prefix_q, false, true); + assert_int_equal(rc, 0); + + rc = ipv46_address_dump("tap0", ip_r, &prefix_r, false); + assert_int_equal(rc, 0); + + assert_string_equal(ip_q, ip_r); + assert_int_equal(prefix_q, prefix_r); } -static void -scvpp_interface_test(void **state) +static void test_remove_ipv4(void **state) { - //call interface functions + const char ip_q[VPP_IP4_ADDRESS_STRING_LEN] = "192.168.100.144"; + char ip_r[VPP_IP4_ADDRESS_STRING_LEN]; + u8 prefix_q = 24; + u8 prefix_r; + int rc; + + //add ipv4 on tap0 + rc = ipv46_config_add_remove("tap0", ip_q, prefix_q, false, true); + assert_int_equal(rc, 0); + + //remove ipv4 on tap0 + rc = ipv46_config_add_remove("tap0", ip_q, prefix_q, false, false); + assert_int_equal(rc, 0); + + //dump ipv4 + rc = ipv46_address_dump("tap0", ip_r, &prefix_r, false); + assert_int_equal(rc, 0); + + assert_string_equal(ip_r, "0.0.0.0"); } +static void test_sc_ntoa(void **state) +{ + u8 buf[4] = {192, 168, 100, 44}; + char *res; -int -main() + res = sc_ntoa(buf); + assert_string_equal(res, "192.168.100.44"); +} + +static void test_create_tapv2(void **state) { + tapv2_create_t query = {0}; + int rc; + + query.id = 1; + query.use_random_mac = 1; + + rc = create_tapv2(&query); + assert_int_equal(rc, 0); + + //TODO dump_tav2 and compare values + + rc = delete_tapv2("tap1"); + assert_int_equal(rc, 0); +} + +int main() +{ + tapv2_create_t query = {0}; const struct CMUnitTest tests[] = { - cmocka_unit_test_setup_teardown(scvpp_interface_test, scvpp_test_setup, scvpp_test_teardown), + cmocka_unit_test_setup_teardown(test_enable_disable, NULL, NULL), + cmocka_unit_test_setup_teardown(test_name2index, NULL, NULL), + cmocka_unit_test_setup_teardown(test_add_ipv4, NULL, NULL), + cmocka_unit_test_setup_teardown(test_remove_ipv4, NULL, NULL), + cmocka_unit_test_setup_teardown(test_sc_ntoa, NULL, NULL), + cmocka_unit_test_setup_teardown(test_create_tapv2, NULL, NULL), }; - return cmocka_run_group_tests(tests, NULL, NULL); + if (sc_connect_vpp() != 0) + fprintf(stderr, "Error connecting to VPP\n"); + + /* Create interface tap0 to test several functions */ + query.id = 0; + query.use_random_mac = 1; + if (create_tapv2(&query) != 0) + fprintf(stderr, "Error creating tap0\n"); + + cmocka_run_group_tests(tests, NULL, NULL); + + /* Delete tap0 */ + if (delete_tapv2("tap0") != 0) + fprintf(stderr, "Failed deleting tap0\n"); + + return sc_disconnect_vpp(); } |