From bc355148564d11701a4da228d71ea6285df99126 Mon Sep 17 00:00:00 2001 From: lixiumei Date: Wed, 25 Aug 2021 01:24:06 +0000 Subject: [PATCH] Add datatag table test --- include/neu_datatag_table.h | 7 ++ tests/CMakeLists.txt | 9 ++ tests/datatag_table_test.cc | 172 ++++++++++++++++++++++++++++++++++++ 3 files changed, 188 insertions(+) create mode 100644 tests/datatag_table_test.cc diff --git a/include/neu_datatag_table.h b/include/neu_datatag_table.h index b5b83cf7..a97bbc9e 100644 --- a/include/neu_datatag_table.h +++ b/include/neu_datatag_table.h @@ -20,6 +20,10 @@ #ifndef __DATATAG_TABLE_H__ #define __DATATAG_TABLE_H__ +#ifdef __cplusplus +extern "C" { +#endif + #include "neu_types.h" typedef uint32_t datatag_id_t; @@ -33,4 +37,7 @@ int neu_datatag_tbl_update(neu_datatag_table_t *, datatag_id_t, neu_datatag_t *); datatag_id_t neu_datatag_tbl_add(neu_datatag_table_t *, neu_datatag_t *); +#ifdef __cplusplus +} +#endif #endif //__DATATAG_TABLE_H__ diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 4f551021..e7f55eca 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -29,8 +29,17 @@ target_include_directories(modbus_point_test PRIVATE ) target_link_libraries(modbus_point_test neuron-base gtest_main gtest pthread) +add_executable(datatag_table_test datatag_table_test.cc ${CMAKE_SOURCE_DIR}/src/core/neu_datatag_table.c) +target_include_directories(datatag_table_test PRIVATE + ${CMAKE_SOURCE_DIR}/src + ${CMAKE_SOURCE_DIR}/include +) +target_link_libraries(datatag_table_test nng neuron-base gtest_main gtest pthread jansson) + include(GoogleTest) gtest_discover_tests(json_test) gtest_discover_tests(api_json_test) gtest_discover_tests(variable_test) gtest_discover_tests(modbus_point_test) +gtest_discover_tests(datatag_table_test) + diff --git a/tests/datatag_table_test.cc b/tests/datatag_table_test.cc new file mode 100644 index 00000000..982ab2e3 --- /dev/null +++ b/tests/datatag_table_test.cc @@ -0,0 +1,172 @@ +#include +#include "neu_datatag_table.h" +#include "neu_types.h" +#include "pthread.h" +#include + +#define NUM_DatatagTable_Modify 100 + +TEST(DatatageTableTest,DatatagTableAdd) +{ + neu_datatag_table_t *datatag_table = neu_datatag_tbl_create(); + neu_address_t address_t; + neu_datatag_t datatag_t_1 = {123,NEU_ATTRIBUTETYPE_READ,NEU_DATATYPE_BYTE,address_t}; + neu_datatag_t datatag_t_2 = {456,NEU_ATTRIBUTETYPE_WRITE,NEU_DATATYPE_WORD,address_t}; + neu_datatag_t datatag_t_3 = {789,NEU_ATTRIBUTETYPE_SUBSCRIBE,NEU_DATATYPE_UWORD,address_t}; + + datatag_id_t datatag_add_1,datatag_add_2,datatag_add_3; + neu_datatag_t *datatag_get_1 = NULL; + neu_datatag_t *datatag_get_2 = NULL; + neu_datatag_t *datatag_get_3 = NULL; + + datatag_add_1 = neu_datatag_tbl_add(datatag_table, &datatag_t_1); + datatag_add_2 = neu_datatag_tbl_add(datatag_table, &datatag_t_2); + datatag_add_3 = neu_datatag_tbl_add(datatag_table, &datatag_t_3); + + datatag_get_1 = neu_datatag_tbl_get(datatag_table, datatag_add_1); + datatag_get_2 = neu_datatag_tbl_get(datatag_table, datatag_add_2); + datatag_get_3 = neu_datatag_tbl_get(datatag_table, datatag_add_3); + + EXPECT_EQ(datatag_get_1->id,datatag_t_1.id); + EXPECT_EQ(datatag_get_1->dataType,datatag_t_1.dataType); + EXPECT_EQ(datatag_get_1->type,datatag_t_1.type); + + EXPECT_EQ(datatag_get_2->id,datatag_t_2.id); + EXPECT_EQ(datatag_get_2->dataType,datatag_t_2.dataType); + EXPECT_EQ(datatag_get_2->type,datatag_t_2.type); + + EXPECT_EQ(datatag_get_3->id,datatag_t_3.id); + EXPECT_EQ(datatag_get_3->dataType,datatag_t_3.dataType); + EXPECT_EQ(datatag_get_3->type,datatag_t_3.type); + + neu_datatag_tbl_destroy(datatag_table); +} + +TEST(DatatageTableTest,DatatagTableRemove) +{ + neu_datatag_table_t *datatag_table = neu_datatag_tbl_create(); + neu_address_t address_t; + neu_datatag_t datatag_t_1 = {123,NEU_ATTRIBUTETYPE_READ,NEU_DATATYPE_BYTE,address_t}; + neu_datatag_t datatag_t_2 = {456,NEU_ATTRIBUTETYPE_WRITE,NEU_DATATYPE_WORD,address_t}; + neu_datatag_t datatag_t_3 = {789,NEU_ATTRIBUTETYPE_SUBSCRIBE,NEU_DATATYPE_UWORD,address_t}; + + datatag_id_t datatag_add_1,datatag_add_2,datatag_add_3; + neu_datatag_t *datatag_get_1 = NULL; + neu_datatag_t *datatag_get_2 = NULL; + neu_datatag_t *datatag_get_3 = NULL; + + datatag_add_1 = neu_datatag_tbl_add(datatag_table, &datatag_t_1); + datatag_add_2 = neu_datatag_tbl_add(datatag_table, &datatag_t_2); + datatag_add_3 = neu_datatag_tbl_add(datatag_table, &datatag_t_3); + + EXPECT_EQ(0,neu_datatag_tbl_remove(datatag_table, datatag_add_1)); + + datatag_get_1 = neu_datatag_tbl_get(datatag_table, datatag_add_1); + datatag_get_2 = neu_datatag_tbl_get(datatag_table, datatag_add_2); + datatag_get_3 = neu_datatag_tbl_get(datatag_table, datatag_add_3); + + EXPECT_EQ(NULL,datatag_get_1); + + EXPECT_EQ(datatag_get_2->id,datatag_t_2.id); + EXPECT_EQ(datatag_get_2->dataType,datatag_t_2.dataType); + EXPECT_EQ(datatag_get_2->type,datatag_t_2.type); + + EXPECT_EQ(datatag_get_3->id,datatag_t_3.id); + EXPECT_EQ(datatag_get_3->dataType,datatag_t_3.dataType); + EXPECT_EQ(datatag_get_3->type,datatag_t_3.type); + + neu_datatag_tbl_destroy(datatag_table); +} + +TEST(DatatageTableTest,DatatagTableUpdate) +{ + neu_datatag_table_t *datatag_table = neu_datatag_tbl_create(); + neu_address_t address_t; + neu_datatag_t datatag_t = {123,NEU_ATTRIBUTETYPE_READ,NEU_DATATYPE_BYTE,address_t}; + + datatag_id_t datatag_add; + neu_datatag_t *datatag_get = NULL; + + datatag_add = neu_datatag_tbl_add(datatag_table, &datatag_t); + datatag_t.id = 456; + EXPECT_EQ(0,neu_datatag_tbl_update(datatag_table,datatag_add,&datatag_t)); + datatag_get = neu_datatag_tbl_get(datatag_table, datatag_add); + + EXPECT_EQ(456,datatag_get->id); + + neu_datatag_tbl_destroy(datatag_table); +} + +void * datatag_table_thread(void * arg) +{ + neu_datatag_table_t *datatag_table = (neu_datatag_table_t *)arg; + neu_address_t address_t; + neu_datatag_t datatag_t_1 = {123,NEU_ATTRIBUTETYPE_READ,NEU_DATATYPE_BYTE,address_t}; + neu_datatag_t datatag_t_2 = {456,NEU_ATTRIBUTETYPE_WRITE,NEU_DATATYPE_WORD,address_t}; + neu_datatag_t datatag_t_3 = {789,NEU_ATTRIBUTETYPE_SUBSCRIBE,NEU_DATATYPE_UWORD,address_t}; + + datatag_id_t datatag_add_1,datatag_add_2,datatag_add_3,datatag_add_4; + neu_datatag_t *datatag_get_1 = NULL; + neu_datatag_t *datatag_get_2 = NULL; + neu_datatag_t *datatag_get_3 = NULL; + + for(int i = 0; i < NUM_DatatagTable_Modify; ++i ) + { + datatag_add_1 = neu_datatag_tbl_add(datatag_table, &datatag_t_1); + datatag_add_2 = neu_datatag_tbl_add(datatag_table, &datatag_t_2); + datatag_add_3 = neu_datatag_tbl_add(datatag_table, &datatag_t_3); + + EXPECT_EQ(0,neu_datatag_tbl_remove(datatag_table, datatag_add_1)); + + datatag_get_1 = neu_datatag_tbl_get(datatag_table, datatag_add_1); + datatag_get_2 = neu_datatag_tbl_get(datatag_table, datatag_add_2); + datatag_get_3 = neu_datatag_tbl_get(datatag_table, datatag_add_3); + + datatag_t_2.id = 123; + datatag_t_3.type = NEU_ATTRIBUTETYPE_WRITE; + EXPECT_EQ(0,neu_datatag_tbl_update(datatag_table,datatag_add_2,&datatag_t_2)); + EXPECT_EQ(0,neu_datatag_tbl_update(datatag_table,datatag_add_3,&datatag_t_3)); + + datatag_get_1 = neu_datatag_tbl_get(datatag_table, datatag_add_1); + datatag_get_2 = neu_datatag_tbl_get(datatag_table, datatag_add_2); + datatag_get_3 = neu_datatag_tbl_get(datatag_table, datatag_add_3); + + EXPECT_EQ(NULL,datatag_get_1); + + EXPECT_EQ(datatag_get_2->id,123); + EXPECT_EQ(datatag_get_2->dataType,datatag_t_2.dataType); + EXPECT_EQ(datatag_get_2->type,datatag_t_2.type); + + EXPECT_EQ(datatag_get_3->id,datatag_t_3.id); + EXPECT_EQ(datatag_get_3->dataType,datatag_t_3.dataType); + EXPECT_EQ(datatag_get_3->type,NEU_ATTRIBUTETYPE_WRITE); + + } + return 0; +} + + +TEST(DatatageTableTest,DatatagTablePthread) +{ + pthread_t tids[2]; + int ret1,ret2; + neu_datatag_table_t *datatag_table = neu_datatag_tbl_create(); + + ret1 = pthread_create(&tids[0],NULL,datatag_table_thread,(void*)datatag_table); + ret2 = pthread_create(&tids[1],NULL,datatag_table_thread,(void*)datatag_table); + + pthread_join(tids[0],NULL); + pthread_join(tids[1],NULL); + + EXPECT_EQ(0,ret1); + EXPECT_EQ(0,ret2); + + neu_datatag_tbl_destroy(datatag_table); +} + +int main(int argc, char **argv) +{ + testing::InitGoogleTest(&argc, argv); + return RUN_ALL_TESTS(); +} +