void test_IgnoreIPv6Fields(void) { #ifdef ISC_PLATFORM_WANTIPV6 const struct in6_addr address = { 0x20, 0x01, 0x0d, 0xb8, 0x85, 0xa3, 0x08, 0xd3, 0x13, 0x19, 0x8a, 0x2e, 0x03, 0x70, 0x73, 0x34 }; sockaddr_u input1, input2; input1.sa6.sin6_family = AF_INET6; input1.sa6.sin6_addr = address; input1.sa6.sin6_flowinfo = 30L; // This value differs from input2. SET_PORT(&input1, NTP_PORT); input2.sa6.sin6_family = AF_INET6; input2.sa6.sin6_addr = address; input2.sa6.sin6_flowinfo = 10L; // This value differs from input1. SET_PORT(&input2, NTP_PORT); TEST_ASSERT_EQUAL(sock_hash(&input1), sock_hash(&input2)); #else TEST_IGNORE_MESSAGE("IPV6 disabled in build, skipping."); #endif /* ISC_PLATFORM_HAVEIPV6 */ }
TEST(socktoa, HashEqual) { sockaddr_u input1 = CreateSockaddr4("192.00.2.2", 123); sockaddr_u input2 = CreateSockaddr4("192.0.2.2", 123); TEST_ASSERT_TRUE(IsEqualS(&input1, &input2)); TEST_ASSERT_EQUAL(sock_hash(&input1), sock_hash(&input2)); }
void test_HashEqual(void) { sockaddr_u input1 = CreateSockaddr4("192.00.2.2", 123); sockaddr_u input2 = CreateSockaddr4("192.0.2.2", 123); TEST_ASSERT_TRUE(IsEqual(input1, input2)); TEST_ASSERT_EQUAL(sock_hash(&input1), sock_hash(&input2)); }
TEST_F(socktoaTest, HashEqual) { sockaddr_u input1 = CreateSockaddr4("192.00.2.2", 123); sockaddr_u input2 = CreateSockaddr4("192.0.2.2", 123); ASSERT_TRUE(IsEqual(input1, input2)); EXPECT_EQ(sock_hash(&input1), sock_hash(&input2)); }
TEST(socktoa, HashNotEqual) { /* These two addresses should not generate the same hash. */ sockaddr_u input1 = CreateSockaddr4("192.0.2.1", 123); sockaddr_u input2 = CreateSockaddr4("192.0.2.2", 123); TEST_ASSERT_TRUE(IsDiffS(&input1, &input2)); TEST_ASSERT_NOT_EQUAL(sock_hash(&input1), sock_hash(&input2)); }
TEST_F(socktoaTest, HashNotEqual) { /* These two addresses should not generate the same hash. */ sockaddr_u input1 = CreateSockaddr4("192.0.2.1", 123); sockaddr_u input2 = CreateSockaddr4("192.0.2.2", 123); ASSERT_FALSE(IsEqual(input1, input2)); EXPECT_NE(sock_hash(&input1), sock_hash(&input2)); }
void test_HashNotEqual(void) { /* These two addresses should not generate the same hash. */ sockaddr_u input1 = CreateSockaddr4("192.0.2.1", 123); sockaddr_u input2 = CreateSockaddr4("192.0.2.2", 123); TEST_ASSERT_FALSE(IsEqual(input1, input2)); TEST_ASSERT_FALSE(sock_hash(&input1) == sock_hash(&input2)); }
void test_HashNotEqual(void) { /* These two addresses should not generate the same hash. */ sockaddr_u input1 = CreateSockaddr4("192.0.2.1", 123); sockaddr_u input2 = CreateSockaddr4("192.0.2.2", 123); TEST_ASSERT_FALSE(IsEqual(input1, input2)); //TODO : EXPECT_NE(sock_hash(&input1), sock_hash(&input2)); //Damir's suggestion below: TEST_ASSERT_FALSE(sock_hash(&input1) == sock_hash(&input2)); //NOTE: sock_hash returns u_short, so you can compare it with == //for complex structures you have to write an additional function like bool compare(a,b) }
struct sock *sock_create(int family, int type, int protocol) { int ret; struct sock *new_sk; const struct net_family *nfamily; const struct net_family_type *nftype; const struct net_sock *nsock; nfamily = net_family_lookup(family); if (nfamily == NULL) { return err_ptr(EAFNOSUPPORT); } nftype = net_family_type_lookup(nfamily, type); if (nftype == NULL) { return err_ptr(EPROTOTYPE); } nsock = net_sock_lookup(family, type, protocol); if (nsock == NULL) { return err_ptr(EPROTONOSUPPORT); } new_sk = sock_alloc(nftype->ops, nsock->ops); if (new_sk == NULL) { return err_ptr(ENOMEM); } sock_init(new_sk, family, type, nsock->protocol, nftype->ops, nsock->ops, nfamily->out_ops != NULL ? *nfamily->out_ops : NULL); assert(new_sk->f_ops != NULL); ret = new_sk->f_ops->init(new_sk); if (ret != 0) { sock_release(new_sk); return err_ptr(-ret); } assert(new_sk->p_ops != NULL); if (new_sk->p_ops->init != NULL) { ret = new_sk->p_ops->init(new_sk); if (ret != 0) { sock_close(new_sk); return err_ptr(-ret); } } sock_hash(new_sk); return new_sk; }
TEST(socktoa, IgnoreIPv6Fields) { const struct in6_addr address = {{{ 0x20, 0x01, 0x0d, 0xb8, 0x85, 0xa3, 0x08, 0xd3, 0x13, 0x19, 0x8a, 0x2e, 0x03, 0x70, 0x73, 0x34 }}}; sockaddr_u input1, input2; input1.sa6.sin6_family = AF_INET6; input1.sa6.sin6_addr = address; input1.sa6.sin6_flowinfo = 30L; // This value differs from input2. SET_PORT(&input1, NTP_PORT); input2.sa6.sin6_family = AF_INET6; input2.sa6.sin6_addr = address; input2.sa6.sin6_flowinfo = 10L; // This value differs from input1. SET_PORT(&input2, NTP_PORT); TEST_ASSERT_EQUAL(sock_hash(&input1), sock_hash(&input2)); }