diff --git a/testing/nettest/CMakeLists.txt b/testing/nettest/CMakeLists.txt index 94fa4557f48..6bbf9575370 100644 --- a/testing/nettest/CMakeLists.txt +++ b/testing/nettest/CMakeLists.txt @@ -77,7 +77,8 @@ if(CONFIG_TESTING_NET_TEST) set(SRCS ${CMAKE_CURRENT_LIST_DIR}/others/test_others.c ${CMAKE_CURRENT_LIST_DIR}/others/test_others_common.c - ${CMAKE_CURRENT_LIST_DIR}/others/test_others_bufpool.c) + ${CMAKE_CURRENT_LIST_DIR}/others/test_others_bufpool.c + ${CMAKE_CURRENT_LIST_DIR}/others/test_others_chksum.c) nuttx_add_application( NAME diff --git a/testing/nettest/Makefile b/testing/nettest/Makefile index 6f10c39106a..3e5f4f22a8b 100644 --- a/testing/nettest/Makefile +++ b/testing/nettest/Makefile @@ -54,7 +54,8 @@ endif ifeq ($(CONFIG_TESTING_NET_OTHERS),y) MAINSRC += others/test_others.c PROGNAME += cmocka_net_others -CSRCS += others/test_others_common.c others/test_others_bufpool.c +CSRCS += others/test_others_common.c others/test_others_bufpool.c \ + others/test_others_chksum.c endif endif diff --git a/testing/nettest/others/test_others.c b/testing/nettest/others/test_others.c index b883840d237..994f1eaf90c 100644 --- a/testing/nettest/others/test_others.c +++ b/testing/nettest/others/test_others.c @@ -39,6 +39,7 @@ int main(int argc, FAR char *argv[]) const struct CMUnitTest others_tests[] = { cmocka_unit_test(test_others_bufpool), + cmocka_unit_test(test_others_chksum), }; return cmocka_run_group_tests(others_tests, test_others_group_setup, diff --git a/testing/nettest/others/test_others.h b/testing/nettest/others/test_others.h index f59024e84eb..621be46a7a3 100644 --- a/testing/nettest/others/test_others.h +++ b/testing/nettest/others/test_others.h @@ -48,5 +48,6 @@ int test_others_group_teardown(FAR void **state); ****************************************************************************/ void test_others_bufpool(FAR void **state); +void test_others_chksum(FAR void **state); #endif /* __APPS_TESTING_NETTEST_OTHERS_TEST_OTHERS_H */ diff --git a/testing/nettest/others/test_others_chksum.c b/testing/nettest/others/test_others_chksum.c new file mode 100644 index 00000000000..74ebeb9b89b --- /dev/null +++ b/testing/nettest/others/test_others_chksum.c @@ -0,0 +1,63 @@ +/**************************************************************************** + * apps/testing/nettest/others/test_others_chksum.c + ****************************************************************************/ + +#include +#include +#include +#include +#include +#include + +#include +#include + +#include "test_others.h" + +/**************************************************************************** + * Public Functions + ****************************************************************************/ + +void test_others_chksum(FAR void **state) +{ + struct iob_s iob1; + struct iob_s iob2; + struct iob_s iob3; + + uint8_t data1[] = {0xaa, 0xbb, 0xcc}; + uint8_t data2[] = {0xdd, 0xee}; + uint8_t data[] = {0xaa, 0xbb, 0xcc, 0xdd, 0xee}; + + uint16_t chained_sum; + uint16_t reference_sum; + + memset(&iob1, 0, sizeof(iob1)); + memset(&iob2, 0, sizeof(iob2)); + memset(&iob3, 0, sizeof(iob3)); + + /* First IOB: odd number of bytes */ + + memcpy(iob1.io_data, data1, sizeof(data1)); + iob1.io_len = sizeof(data1); + iob1.io_offset = 0; + iob1.io_flink = &iob2; + + /* Second IOB: zero-length */ + + iob2.io_data[0] = 0xdd; + iob2.io_len = 0; + iob2.io_offset = 0; + iob2.io_flink = &iob3; + + /* Third IOB: remaining bytes */ + + memcpy(iob3.io_data, data2, sizeof(data2)); + iob3.io_len = sizeof(data2); + iob3.io_offset = 0; + iob3.io_flink = NULL; + + chained_sum = chksum_iob(0, &iob1, 0); + reference_sum = chksum(0, data, sizeof(data)); + + assert_int_equal(chained_sum, reference_sum); +}