This repository has been archived on 2025-09-14. You can view files and clone it, but cannot push or open issues or pull requests.
Files
tango-tsg-service-chaining-…/common/test/gtest_stream_table.cpp
2023-01-10 16:30:42 +08:00

84 lines
3.3 KiB
C++

#include <gtest/gtest.h>
#include <arpa/inet.h>
#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();
}