core/unittest/ebpf/BPFMapTraitsUnittest.cpp (109 lines of code) (raw):
#include "ebpf/driver/BPFMapTraits.h"
#include "unittest/Unittest.h"
namespace logtail {
namespace ebpf {
class BPFMapTraitsUnittest : public ::testing::Test {
public:
void TestAddr4MapTraits();
void TestAddr6MapTraits();
void TestPortMapTraits();
void TestStringPrefixMapTraits();
void TestStringPostfixMapTraits();
void TestIntMapTraits();
protected:
void SetUp() override {}
void TearDown() override {}
};
void BPFMapTraitsUnittest::TestAddr4MapTraits() {
// 测试 Addr4Map 的特征
APSARA_TEST_EQUAL_DESC(
sizeof(BPFMapTraits<Addr4Map>::outter_key_type), sizeof(uint32_t), "Addr4Map outer key size should be 4 bytes");
APSARA_TEST_EQUAL_DESC(
sizeof(BPFMapTraits<Addr4Map>::inner_key_type), 8UL, "Addr4Map inner key size should be 8 bytes");
APSARA_TEST_EQUAL_DESC(
sizeof(BPFMapTraits<Addr4Map>::inner_val_type), sizeof(uint8_t), "Addr4Map inner value size should be 1 byte");
APSARA_TEST_EQUAL_DESC(BPFMapTraits<Addr4Map>::outter_map_type,
BPF_MAP_TYPE_ARRAY_OF_MAPS,
"Addr4Map outer map type should be ARRAY_OF_MAPS");
APSARA_TEST_EQUAL_DESC(
BPFMapTraits<Addr4Map>::inner_map_type, BPF_MAP_TYPE_LPM_TRIE, "Addr4Map inner map type should be LPM_TRIE");
APSARA_TEST_EQUAL_DESC(
BPFMapTraits<Addr4Map>::map_flag, BPF_F_NO_PREALLOC, "Addr4Map map flag should be NO_PREALLOC");
}
void BPFMapTraitsUnittest::TestAddr6MapTraits() {
// 测试 Addr6Map 的特征
APSARA_TEST_EQUAL_DESC(
sizeof(BPFMapTraits<Addr6Map>::outter_key_type), sizeof(uint32_t), "Addr6Map outer key size should be 4 bytes");
APSARA_TEST_EQUAL_DESC(
sizeof(BPFMapTraits<Addr6Map>::inner_key_type), 20UL, "Addr6Map inner key size should be 20 bytes");
APSARA_TEST_EQUAL_DESC(
sizeof(BPFMapTraits<Addr6Map>::inner_val_type), sizeof(uint8_t), "Addr6Map inner value size should be 1 byte");
APSARA_TEST_EQUAL_DESC(BPFMapTraits<Addr6Map>::outter_map_type,
BPF_MAP_TYPE_ARRAY_OF_MAPS,
"Addr6Map outer map type should be ARRAY_OF_MAPS");
APSARA_TEST_EQUAL_DESC(
BPFMapTraits<Addr6Map>::inner_map_type, BPF_MAP_TYPE_LPM_TRIE, "Addr6Map inner map type should be LPM_TRIE");
APSARA_TEST_EQUAL_DESC(
BPFMapTraits<Addr6Map>::map_flag, BPF_F_NO_PREALLOC, "Addr6Map map flag should be NO_PREALLOC");
}
void BPFMapTraitsUnittest::TestPortMapTraits() {
// 测试 PortMap 的特征
APSARA_TEST_EQUAL_DESC(
sizeof(BPFMapTraits<PortMap>::outter_key_type), sizeof(uint32_t), "PortMap outer key size should be 4 bytes");
APSARA_TEST_EQUAL_DESC(
sizeof(BPFMapTraits<PortMap>::inner_key_type), sizeof(uint32_t), "PortMap inner key size should be 4 bytes");
APSARA_TEST_EQUAL_DESC(
sizeof(BPFMapTraits<PortMap>::inner_val_type), sizeof(uint8_t), "PortMap inner value size should be 1 byte");
APSARA_TEST_EQUAL_DESC(BPFMapTraits<PortMap>::outter_map_type,
BPF_MAP_TYPE_ARRAY_OF_MAPS,
"PortMap outer map type should be ARRAY_OF_MAPS");
APSARA_TEST_EQUAL_DESC(
BPFMapTraits<PortMap>::inner_map_type, BPF_MAP_TYPE_HASH, "PortMap inner map type should be HASH");
APSARA_TEST_EQUAL_DESC(BPFMapTraits<PortMap>::map_flag, -1, "PortMap map flag should be -1");
}
void BPFMapTraitsUnittest::TestStringPrefixMapTraits() {
// 测试 StringPrefixMap 的特征
APSARA_TEST_EQUAL_DESC(sizeof(BPFMapTraits<StringPrefixMap>::outter_key_type),
sizeof(uint32_t),
"StringPrefixMap outer key size should be 4 bytes");
APSARA_TEST_EQUAL_DESC(BPFMapTraits<StringPrefixMap>::outter_map_type,
BPF_MAP_TYPE_ARRAY_OF_MAPS,
"StringPrefixMap outer map type should be ARRAY_OF_MAPS");
APSARA_TEST_EQUAL_DESC(BPFMapTraits<StringPrefixMap>::inner_map_type,
BPF_MAP_TYPE_LPM_TRIE,
"StringPrefixMap inner map type should be LPM_TRIE");
APSARA_TEST_EQUAL_DESC(
BPFMapTraits<StringPrefixMap>::map_flag, BPF_F_NO_PREALLOC, "StringPrefixMap map flag should be NO_PREALLOC");
}
void BPFMapTraitsUnittest::TestStringPostfixMapTraits() {
// 测试 StringPostfixMap 的特征
APSARA_TEST_EQUAL_DESC(sizeof(BPFMapTraits<StringPostfixMap>::outter_key_type),
sizeof(uint32_t),
"StringPostfixMap outer key size should be 4 bytes");
APSARA_TEST_EQUAL_DESC(BPFMapTraits<StringPostfixMap>::outter_map_type,
BPF_MAP_TYPE_ARRAY_OF_MAPS,
"StringPostfixMap outer map type should be ARRAY_OF_MAPS");
APSARA_TEST_EQUAL_DESC(BPFMapTraits<StringPostfixMap>::inner_map_type,
BPF_MAP_TYPE_LPM_TRIE,
"StringPostfixMap inner map type should be LPM_TRIE");
APSARA_TEST_EQUAL_DESC(
BPFMapTraits<StringPostfixMap>::map_flag, BPF_F_NO_PREALLOC, "StringPostfixMap map flag should be NO_PREALLOC");
}
void BPFMapTraitsUnittest::TestIntMapTraits() {
// 测试 IntMap 的特征
APSARA_TEST_EQUAL_DESC(
sizeof(BPFMapTraits<IntMap>::outter_key_type), sizeof(uint32_t), "IntMap outer key size should be 4 bytes");
APSARA_TEST_EQUAL_DESC(
sizeof(BPFMapTraits<IntMap>::inner_key_type), sizeof(uint32_t), "IntMap inner key size should be 4 bytes");
APSARA_TEST_EQUAL_DESC(
sizeof(BPFMapTraits<IntMap>::inner_val_type), sizeof(uint8_t), "IntMap inner value size should be 1 byte");
APSARA_TEST_EQUAL_DESC(BPFMapTraits<IntMap>::outter_map_type,
BPF_MAP_TYPE_ARRAY_OF_MAPS,
"IntMap outer map type should be ARRAY_OF_MAPS");
APSARA_TEST_EQUAL_DESC(
BPFMapTraits<IntMap>::inner_map_type, BPF_MAP_TYPE_HASH, "IntMap inner map type should be HASH");
APSARA_TEST_EQUAL_DESC(BPFMapTraits<IntMap>::map_flag, -1, "IntMap map flag should be -1");
}
UNIT_TEST_CASE(BPFMapTraitsUnittest, TestAddr4MapTraits);
UNIT_TEST_CASE(BPFMapTraitsUnittest, TestAddr6MapTraits);
UNIT_TEST_CASE(BPFMapTraitsUnittest, TestPortMapTraits);
UNIT_TEST_CASE(BPFMapTraitsUnittest, TestStringPrefixMapTraits);
UNIT_TEST_CASE(BPFMapTraitsUnittest, TestStringPostfixMapTraits);
UNIT_TEST_CASE(BPFMapTraitsUnittest, TestIntMapTraits);
} // namespace ebpf
} // namespace logtail
UNIT_TEST_MAIN