unittest/meta/TestMetaKeyHasher.cpp (100 lines of code) (raw):
#include "MetaKeyHasher.h"
#include <gtest/gtest.h>
#include <memory>
using namespace saimeta;
TEST(MetaKeyHasher, operator_eq_route_entry)
{
sai_route_entry_t ra;
sai_route_entry_t rb;
memset(&ra, 0, sizeof(ra));
memset(&rb, 0, sizeof(ra));
sai_object_meta_key_t ma = { .objecttype = SAI_OBJECT_TYPE_ROUTE_ENTRY, .objectkey = { .key = { .route_entry = ra } } };
sai_object_meta_key_t mb = { .objecttype = SAI_OBJECT_TYPE_ROUTE_ENTRY, .objectkey = { .key = { .route_entry = rb } } };
MetaKeyHasher mh;
EXPECT_TRUE(mh.operator()(ma, mb));
}
TEST(MetaKeyHasher, operator_eq_nat_entry)
{
sai_nat_entry_t ra;
sai_nat_entry_t rb;
memset(&ra, 0, sizeof(ra));
memset(&rb, 0, sizeof(ra));
sai_object_meta_key_t ma = { .objecttype = SAI_OBJECT_TYPE_NAT_ENTRY, .objectkey = { .key = { .nat_entry = ra } } };
sai_object_meta_key_t mb = { .objecttype = SAI_OBJECT_TYPE_NAT_ENTRY, .objectkey = { .key = { .nat_entry = rb } } };
MetaKeyHasher mh;
EXPECT_TRUE(mh.operator()(ma, mb));
}
TEST(MetaKeyHasher, operator_eq_inseg_entry)
{
sai_inseg_entry_t ra;
sai_inseg_entry_t rb;
memset(&ra, 0, sizeof(ra));
memset(&rb, 0, sizeof(ra));
sai_object_meta_key_t ma = { .objecttype = SAI_OBJECT_TYPE_INSEG_ENTRY, .objectkey = { .key = { .inseg_entry = ra } } };
sai_object_meta_key_t mb = { .objecttype = SAI_OBJECT_TYPE_INSEG_ENTRY, .objectkey = { .key = { .inseg_entry = rb } } };
MetaKeyHasher mh;
EXPECT_TRUE(mh.operator()(ma, mb));
}
TEST(MetaKeyHasher, operator_eq)
{
sai_object_meta_key_t ma;
sai_object_meta_key_t mb;
memset(&ma, 0, sizeof(ma));
memset(&mb, 0, sizeof(mb));
ma.objecttype = SAI_OBJECT_TYPE_ROUTE_ENTRY;
mb.objecttype = SAI_OBJECT_TYPE_INSEG_ENTRY;
MetaKeyHasher mh;
EXPECT_FALSE(mh.operator()(ma, mb));
}
TEST(MetaKeyHasher, operator_hash)
{
sai_object_meta_key_t ma;
memset(&ma, 0, sizeof(ma));
MetaKeyHasher mh;
ma.objecttype = SAI_OBJECT_TYPE_NAT_ENTRY;
EXPECT_EQ(mh.operator()(ma), 0);
ma.objecttype = SAI_OBJECT_TYPE_INSEG_ENTRY;
EXPECT_EQ(mh.operator()(ma), 0);
ma.objecttype = SAI_OBJECT_TYPE_IPMC_ENTRY;
EXPECT_EQ(mh.operator()(ma), 0);
ma.objecttype = SAI_OBJECT_TYPE_L2MC_ENTRY;
EXPECT_EQ(mh.operator()(ma), 0);
ma.objecttype = SAI_OBJECT_TYPE_IPMC_ENTRY;
ma.objectkey.key.ipmc_entry.destination.addr_family = SAI_IP_ADDR_FAMILY_IPV6;
ma.objectkey.key.ipmc_entry.source.addr_family = SAI_IP_ADDR_FAMILY_IPV6;
EXPECT_EQ(mh.operator()(ma), 0);
ma.objecttype = SAI_OBJECT_TYPE_L2MC_ENTRY;
ma.objectkey.key.l2mc_entry.destination.addr_family = SAI_IP_ADDR_FAMILY_IPV6;
ma.objectkey.key.l2mc_entry.source.addr_family = SAI_IP_ADDR_FAMILY_IPV6;
EXPECT_EQ(mh.operator()(ma), 0);
}
TEST(MetaKeyHasher, operator_eq_l2mc)
{
sai_object_meta_key_t ma;
sai_object_meta_key_t mb;
memset(&ma, 0, sizeof(ma));
memset(&mb, 0, sizeof(mb));
ma.objecttype = SAI_OBJECT_TYPE_L2MC_ENTRY;
mb.objecttype = SAI_OBJECT_TYPE_L2MC_ENTRY;
ma.objectkey.key.l2mc_entry.destination.addr_family = SAI_IP_ADDR_FAMILY_IPV6;
ma.objectkey.key.l2mc_entry.source.addr_family = SAI_IP_ADDR_FAMILY_IPV6;
mb.objectkey.key.l2mc_entry.destination.addr_family = SAI_IP_ADDR_FAMILY_IPV6;
mb.objectkey.key.l2mc_entry.source.addr_family = SAI_IP_ADDR_FAMILY_IPV6;
MetaKeyHasher mh;
EXPECT_TRUE(mh.operator()(ma, mb));
}
TEST(MetaKeyHasher, operator_eq_ipck)
{
sai_object_meta_key_t ma;
sai_object_meta_key_t mb;
memset(&ma, 0, sizeof(ma));
memset(&mb, 0, sizeof(mb));
ma.objecttype = SAI_OBJECT_TYPE_IPMC_ENTRY;
mb.objecttype = SAI_OBJECT_TYPE_IPMC_ENTRY;
ma.objectkey.key.ipmc_entry.destination.addr_family = SAI_IP_ADDR_FAMILY_IPV6;
ma.objectkey.key.ipmc_entry.source.addr_family = SAI_IP_ADDR_FAMILY_IPV6;
mb.objectkey.key.ipmc_entry.destination.addr_family = SAI_IP_ADDR_FAMILY_IPV6;
mb.objectkey.key.ipmc_entry.source.addr_family = SAI_IP_ADDR_FAMILY_IPV6;
MetaKeyHasher mh;
EXPECT_TRUE(mh.operator()(ma, mb));
}