#include #include #include "stream_table.h" #define INIT_ADDR_V4(name, src_addr_str, src_port_num, dst_addr_str, dst_port_num) \ struct stream_addr name; \ memset(&name, 0, sizeof(name)); \ (name).addr_type = STREAM_ADDR_TYPE_V4; \ (name).addr_v4.src_port = htons((src_port_num)); \ (name).addr_v4.dst_port = htons((dst_port_num)); \ inet_pton(AF_INET, (src_addr_str), &(name).addr_v4.src_addr); \ inet_pton(AF_INET, (dst_addr_str), &(name).addr_v4.dst_addr); #define INIT_ADDR_V6(name, src_addr_str, src_port_num, dst_addr_str, dst_port_num) \ struct stream_addr name; \ memset(&name, 0, sizeof(name)); \ (name).addr_type = STREAM_ADDR_TYPE_V6; \ (name).addr_v6.src_port = htons((src_port_num)); \ (name).addr_v6.dst_port = htons((dst_port_num)); \ inet_pton(AF_INET6, (src_addr_str), &(name).addr_v6.src_addr); \ inet_pton(AF_INET6, (dst_addr_str), &(name).addr_v6.dst_addr); TEST(STREAM_TABLE, TEST) { INIT_ADDR_V4(addr1, "1.2.3.4", 1234, "4.3.2.1", 4321); INIT_ADDR_V6(addr2, "2:3:4::5", 2345, "5:4:3::2", 5342); struct stream_addr addr3; char *val_hello = strdup("HELLO"); char *val_world = strdup("WORLD"); struct stream_node *node = NULL; // TEST Create struct stream_table *table = stream_table_create(); EXPECT_TRUE(table != nullptr); // TEST Insert EXPECT_TRUE(stream_table_insert(table, 1, &addr1, val_hello, free) == 0); EXPECT_TRUE(stream_table_insert(table, 1, &addr1, val_hello, free) == -1); EXPECT_TRUE(stream_table_insert(table, 2, &addr2, val_world, free) == 0); EXPECT_TRUE(stream_table_insert(table, 2, &addr2, val_world, free) == -1); // TEST Search node = stream_table_search_by_streamid(table, 1); EXPECT_TRUE(node != nullptr); EXPECT_STREQ((const char *)node->val_data, "HELLO"); node = stream_table_search_by_streamid(table, 2); EXPECT_TRUE(node != nullptr); EXPECT_STREQ((const char *)node->val_data, "WORLD"); node = stream_table_search_by_streamid(table, 3); EXPECT_TRUE(node == nullptr); node = stream_table_search_by_streamaddr(table, &addr1); EXPECT_TRUE(node != nullptr); EXPECT_STREQ((const char *)node->val_data, "HELLO"); node = stream_table_search_by_streamaddr(table, &addr2); EXPECT_TRUE(node != nullptr); EXPECT_STREQ((const char *)node->val_data, "WORLD"); node = stream_table_search_by_streamaddr(table, &addr3); EXPECT_TRUE(node == nullptr); // TEST Delete stream_table_delete_by_streamid(table, 1); node = stream_table_search_by_streamid(table, 1); EXPECT_TRUE(node == nullptr); node = stream_table_search_by_streamaddr(table, &addr1); EXPECT_TRUE(node == nullptr); stream_table_delete_by_streamaddr(table, &addr2); node = stream_table_search_by_streamid(table, 2); EXPECT_TRUE(node == nullptr); node = stream_table_search_by_streamaddr(table, &addr1); EXPECT_TRUE(node == nullptr); // TEST Destory stream_table_destory(table); } int main(int argc, char **argv) { ::testing::InitGoogleTest(&argc, argv); return RUN_ALL_TESTS(); }