|
|
|
@ -37,6 +37,7 @@ |
|
|
|
|
#include "src/core/ext/filters/client_channel/resolver.h" |
|
|
|
|
#include "src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h" |
|
|
|
|
#include "src/core/ext/filters/client_channel/resolver_registry.h" |
|
|
|
|
#include "src/core/ext/filters/client_channel/server_address.h" |
|
|
|
|
#include "src/core/lib/channel/channel_args.h" |
|
|
|
|
#include "src/core/lib/gpr/env.h" |
|
|
|
|
#include "src/core/lib/gpr/host_port.h" |
|
|
|
@ -167,30 +168,26 @@ void OverrideAddressSortingSourceAddrFactory( |
|
|
|
|
address_sorting_override_source_addr_factory_for_testing(factory); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
grpc_lb_addresses* BuildLbAddrInputs(std::vector<TestAddress> test_addrs) { |
|
|
|
|
grpc_lb_addresses* lb_addrs = grpc_lb_addresses_create(0, nullptr); |
|
|
|
|
lb_addrs->addresses = |
|
|
|
|
(grpc_lb_address*)gpr_zalloc(sizeof(grpc_lb_address) * test_addrs.size()); |
|
|
|
|
lb_addrs->num_addresses = test_addrs.size(); |
|
|
|
|
for (size_t i = 0; i < test_addrs.size(); i++) { |
|
|
|
|
lb_addrs->addresses[i].address = |
|
|
|
|
TestAddressToGrpcResolvedAddress(test_addrs[i]); |
|
|
|
|
grpc_core::ServerAddressList BuildLbAddrInputs( |
|
|
|
|
const std::vector<TestAddress>& test_addrs) { |
|
|
|
|
grpc_core::ServerAddressList addresses; |
|
|
|
|
for (const auto& addr : test_addrs) { |
|
|
|
|
addresses.emplace_back(TestAddressToGrpcResolvedAddress(addr), nullptr); |
|
|
|
|
} |
|
|
|
|
return lb_addrs; |
|
|
|
|
return addresses; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void VerifyLbAddrOutputs(grpc_lb_addresses* lb_addrs, |
|
|
|
|
void VerifyLbAddrOutputs(const grpc_core::ServerAddressList addresses, |
|
|
|
|
std::vector<std::string> expected_addrs) { |
|
|
|
|
EXPECT_EQ(lb_addrs->num_addresses, expected_addrs.size()); |
|
|
|
|
for (size_t i = 0; i < lb_addrs->num_addresses; i++) { |
|
|
|
|
EXPECT_EQ(addresses.size(), expected_addrs.size()); |
|
|
|
|
for (size_t i = 0; i < addresses.size(); ++i) { |
|
|
|
|
char* ip_addr_str; |
|
|
|
|
grpc_sockaddr_to_string(&ip_addr_str, &lb_addrs->addresses[i].address, |
|
|
|
|
grpc_sockaddr_to_string(&ip_addr_str, &addresses[i].address(), |
|
|
|
|
false /* normalize */); |
|
|
|
|
EXPECT_EQ(expected_addrs[i], ip_addr_str); |
|
|
|
|
gpr_free(ip_addr_str); |
|
|
|
|
} |
|
|
|
|
grpc_core::ExecCtx exec_ctx; |
|
|
|
|
grpc_lb_addresses_destroy(lb_addrs); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/* We need to run each test case inside of its own
|
|
|
|
@ -212,11 +209,11 @@ TEST_F(AddressSortingTest, TestDepriotizesUnreachableAddresses) { |
|
|
|
|
{ |
|
|
|
|
{"1.2.3.4:443", {"4.3.2.1:443", AF_INET}}, |
|
|
|
|
}); |
|
|
|
|
auto* lb_addrs = BuildLbAddrInputs({ |
|
|
|
|
auto lb_addrs = BuildLbAddrInputs({ |
|
|
|
|
{"1.2.3.4:443", AF_INET}, |
|
|
|
|
{"5.6.7.8:443", AF_INET}, |
|
|
|
|
}); |
|
|
|
|
grpc_cares_wrapper_address_sorting_sort(lb_addrs); |
|
|
|
|
grpc_cares_wrapper_address_sorting_sort(&lb_addrs); |
|
|
|
|
VerifyLbAddrOutputs(lb_addrs, { |
|
|
|
|
"1.2.3.4:443", |
|
|
|
|
"5.6.7.8:443", |
|
|
|
@ -235,7 +232,7 @@ TEST_F(AddressSortingTest, TestDepriotizesUnsupportedDomainIpv6) { |
|
|
|
|
{"[2607:f8b0:400a:801::1002]:443", AF_INET6}, |
|
|
|
|
{"1.2.3.4:443", AF_INET}, |
|
|
|
|
}); |
|
|
|
|
grpc_cares_wrapper_address_sorting_sort(lb_addrs); |
|
|
|
|
grpc_cares_wrapper_address_sorting_sort(&lb_addrs); |
|
|
|
|
VerifyLbAddrOutputs(lb_addrs, { |
|
|
|
|
"1.2.3.4:443", |
|
|
|
|
"[2607:f8b0:400a:801::1002]:443", |
|
|
|
@ -251,11 +248,11 @@ TEST_F(AddressSortingTest, TestDepriotizesUnsupportedDomainIpv4) { |
|
|
|
|
{"1.2.3.4:443", {"4.3.2.1:0", AF_INET}}, |
|
|
|
|
{"[2607:f8b0:400a:801::1002]:443", {"[fec0::1234]:0", AF_INET6}}, |
|
|
|
|
}); |
|
|
|
|
grpc_lb_addresses* lb_addrs = BuildLbAddrInputs({ |
|
|
|
|
auto lb_addrs = BuildLbAddrInputs({ |
|
|
|
|
{"[2607:f8b0:400a:801::1002]:443", AF_INET6}, |
|
|
|
|
{"1.2.3.4:443", AF_INET}, |
|
|
|
|
}); |
|
|
|
|
grpc_cares_wrapper_address_sorting_sort(lb_addrs); |
|
|
|
|
grpc_cares_wrapper_address_sorting_sort(&lb_addrs); |
|
|
|
|
VerifyLbAddrOutputs(lb_addrs, { |
|
|
|
|
"[2607:f8b0:400a:801::1002]:443", |
|
|
|
|
"1.2.3.4:443", |
|
|
|
@ -275,11 +272,11 @@ TEST_F(AddressSortingTest, TestDepriotizesNonMatchingScope) { |
|
|
|
|
{"[fec0::5000]:443", |
|
|
|
|
{"[fec0::5001]:0", AF_INET6}}, // site-local and site-local scope
|
|
|
|
|
}); |
|
|
|
|
grpc_lb_addresses* lb_addrs = BuildLbAddrInputs({ |
|
|
|
|
auto lb_addrs = BuildLbAddrInputs({ |
|
|
|
|
{"[2000:f8b0:400a:801::1002]:443", AF_INET6}, |
|
|
|
|
{"[fec0::5000]:443", AF_INET6}, |
|
|
|
|
}); |
|
|
|
|
grpc_cares_wrapper_address_sorting_sort(lb_addrs); |
|
|
|
|
grpc_cares_wrapper_address_sorting_sort(&lb_addrs); |
|
|
|
|
VerifyLbAddrOutputs(lb_addrs, { |
|
|
|
|
"[fec0::5000]:443", |
|
|
|
|
"[2000:f8b0:400a:801::1002]:443", |
|
|
|
@ -298,11 +295,11 @@ TEST_F(AddressSortingTest, TestUsesLabelFromDefaultTable) { |
|
|
|
|
{"[2001::5001]:443", |
|
|
|
|
{"[2001::5002]:0", AF_INET6}}, // matching labels
|
|
|
|
|
}); |
|
|
|
|
grpc_lb_addresses* lb_addrs = BuildLbAddrInputs({ |
|
|
|
|
auto lb_addrs = BuildLbAddrInputs({ |
|
|
|
|
{"[2002::5001]:443", AF_INET6}, |
|
|
|
|
{"[2001::5001]:443", AF_INET6}, |
|
|
|
|
}); |
|
|
|
|
grpc_cares_wrapper_address_sorting_sort(lb_addrs); |
|
|
|
|
grpc_cares_wrapper_address_sorting_sort(&lb_addrs); |
|
|
|
|
VerifyLbAddrOutputs(lb_addrs, { |
|
|
|
|
"[2001::5001]:443", |
|
|
|
|
"[2002::5001]:443", |
|
|
|
@ -321,11 +318,11 @@ TEST_F(AddressSortingTest, TestUsesLabelFromDefaultTableInputFlipped) { |
|
|
|
|
{"[2001::5001]:443", |
|
|
|
|
{"[2001::5002]:0", AF_INET6}}, // matching labels
|
|
|
|
|
}); |
|
|
|
|
grpc_lb_addresses* lb_addrs = BuildLbAddrInputs({ |
|
|
|
|
auto lb_addrs = BuildLbAddrInputs({ |
|
|
|
|
{"[2001::5001]:443", AF_INET6}, |
|
|
|
|
{"[2002::5001]:443", AF_INET6}, |
|
|
|
|
}); |
|
|
|
|
grpc_cares_wrapper_address_sorting_sort(lb_addrs); |
|
|
|
|
grpc_cares_wrapper_address_sorting_sort(&lb_addrs); |
|
|
|
|
VerifyLbAddrOutputs(lb_addrs, { |
|
|
|
|
"[2001::5001]:443", |
|
|
|
|
"[2002::5001]:443", |
|
|
|
@ -344,11 +341,11 @@ TEST_F(AddressSortingTest, |
|
|
|
|
{"[3ffe::5001]:443", {"[3ffe::5002]:0", AF_INET6}}, |
|
|
|
|
{"1.2.3.4:443", {"5.6.7.8:0", AF_INET}}, |
|
|
|
|
}); |
|
|
|
|
grpc_lb_addresses* lb_addrs = BuildLbAddrInputs({ |
|
|
|
|
auto lb_addrs = BuildLbAddrInputs({ |
|
|
|
|
{"[3ffe::5001]:443", AF_INET6}, |
|
|
|
|
{"1.2.3.4:443", AF_INET}, |
|
|
|
|
}); |
|
|
|
|
grpc_cares_wrapper_address_sorting_sort(lb_addrs); |
|
|
|
|
grpc_cares_wrapper_address_sorting_sort(&lb_addrs); |
|
|
|
|
VerifyLbAddrOutputs( |
|
|
|
|
lb_addrs, { |
|
|
|
|
// The AF_INET address should be IPv4-mapped by the sort,
|
|
|
|
@ -377,11 +374,11 @@ TEST_F(AddressSortingTest, |
|
|
|
|
{"[::1]:443", {"[::1]:0", AF_INET6}}, |
|
|
|
|
{v4_compat_dest, {v4_compat_src, AF_INET6}}, |
|
|
|
|
}); |
|
|
|
|
grpc_lb_addresses* lb_addrs = BuildLbAddrInputs({ |
|
|
|
|
auto lb_addrs = BuildLbAddrInputs({ |
|
|
|
|
{v4_compat_dest, AF_INET6}, |
|
|
|
|
{"[::1]:443", AF_INET6}, |
|
|
|
|
}); |
|
|
|
|
grpc_cares_wrapper_address_sorting_sort(lb_addrs); |
|
|
|
|
grpc_cares_wrapper_address_sorting_sort(&lb_addrs); |
|
|
|
|
VerifyLbAddrOutputs(lb_addrs, { |
|
|
|
|
"[::1]:443", |
|
|
|
|
v4_compat_dest, |
|
|
|
@ -400,11 +397,11 @@ TEST_F(AddressSortingTest, |
|
|
|
|
{"[1234::2]:443", {"[1234::2]:0", AF_INET6}}, |
|
|
|
|
{"[::1]:443", {"[::1]:0", AF_INET6}}, |
|
|
|
|
}); |
|
|
|
|
grpc_lb_addresses* lb_addrs = BuildLbAddrInputs({ |
|
|
|
|
auto lb_addrs = BuildLbAddrInputs({ |
|
|
|
|
{"[1234::2]:443", AF_INET6}, |
|
|
|
|
{"[::1]:443", AF_INET6}, |
|
|
|
|
}); |
|
|
|
|
grpc_cares_wrapper_address_sorting_sort(lb_addrs); |
|
|
|
|
grpc_cares_wrapper_address_sorting_sort(&lb_addrs); |
|
|
|
|
VerifyLbAddrOutputs( |
|
|
|
|
lb_addrs, |
|
|
|
|
{ |
|
|
|
@ -424,11 +421,11 @@ TEST_F(AddressSortingTest, |
|
|
|
|
{"[2001::1234]:443", {"[2001::5678]:0", AF_INET6}}, |
|
|
|
|
{"[2000::5001]:443", {"[2000::5002]:0", AF_INET6}}, |
|
|
|
|
}); |
|
|
|
|
grpc_lb_addresses* lb_addrs = BuildLbAddrInputs({ |
|
|
|
|
auto lb_addrs = BuildLbAddrInputs({ |
|
|
|
|
{"[2001::1234]:443", AF_INET6}, |
|
|
|
|
{"[2000::5001]:443", AF_INET6}, |
|
|
|
|
}); |
|
|
|
|
grpc_cares_wrapper_address_sorting_sort(lb_addrs); |
|
|
|
|
grpc_cares_wrapper_address_sorting_sort(&lb_addrs); |
|
|
|
|
VerifyLbAddrOutputs( |
|
|
|
|
lb_addrs, { |
|
|
|
|
// The 2000::/16 address should match the ::/0 prefix rule
|
|
|
|
@ -448,11 +445,11 @@ TEST_F( |
|
|
|
|
{"[2001::1231]:443", {"[2001::1232]:0", AF_INET6}}, |
|
|
|
|
{"[2000::5001]:443", {"[2000::5002]:0", AF_INET6}}, |
|
|
|
|
}); |
|
|
|
|
grpc_lb_addresses* lb_addrs = BuildLbAddrInputs({ |
|
|
|
|
auto lb_addrs = BuildLbAddrInputs({ |
|
|
|
|
{"[2001::1231]:443", AF_INET6}, |
|
|
|
|
{"[2000::5001]:443", AF_INET6}, |
|
|
|
|
}); |
|
|
|
|
grpc_cares_wrapper_address_sorting_sort(lb_addrs); |
|
|
|
|
grpc_cares_wrapper_address_sorting_sort(&lb_addrs); |
|
|
|
|
VerifyLbAddrOutputs(lb_addrs, { |
|
|
|
|
"[2000::5001]:443", |
|
|
|
|
"[2001::1231]:443", |
|
|
|
@ -469,11 +466,11 @@ TEST_F(AddressSortingTest, |
|
|
|
|
{"[fec0::1234]:443", {"[fec0::5678]:0", AF_INET6}}, |
|
|
|
|
{"[fc00::5001]:443", {"[fc00::5002]:0", AF_INET6}}, |
|
|
|
|
}); |
|
|
|
|
grpc_lb_addresses* lb_addrs = BuildLbAddrInputs({ |
|
|
|
|
auto lb_addrs = BuildLbAddrInputs({ |
|
|
|
|
{"[fec0::1234]:443", AF_INET6}, |
|
|
|
|
{"[fc00::5001]:443", AF_INET6}, |
|
|
|
|
}); |
|
|
|
|
grpc_cares_wrapper_address_sorting_sort(lb_addrs); |
|
|
|
|
grpc_cares_wrapper_address_sorting_sort(&lb_addrs); |
|
|
|
|
VerifyLbAddrOutputs(lb_addrs, { |
|
|
|
|
"[fc00::5001]:443", |
|
|
|
|
"[fec0::1234]:443", |
|
|
|
@ -494,11 +491,11 @@ TEST_F( |
|
|
|
|
{"[::ffff:1.1.1.2]:443", {"[::ffff:1.1.1.3]:0", AF_INET6}}, |
|
|
|
|
{"[1234::2]:443", {"[1234::3]:0", AF_INET6}}, |
|
|
|
|
}); |
|
|
|
|
grpc_lb_addresses* lb_addrs = BuildLbAddrInputs({ |
|
|
|
|
auto lb_addrs = BuildLbAddrInputs({ |
|
|
|
|
{"[::ffff:1.1.1.2]:443", AF_INET6}, |
|
|
|
|
{"[1234::2]:443", AF_INET6}, |
|
|
|
|
}); |
|
|
|
|
grpc_cares_wrapper_address_sorting_sort(lb_addrs); |
|
|
|
|
grpc_cares_wrapper_address_sorting_sort(&lb_addrs); |
|
|
|
|
VerifyLbAddrOutputs(lb_addrs, { |
|
|
|
|
// ::ffff:0:2 should match the v4-mapped
|
|
|
|
|
// precedence entry and be deprioritized.
|
|
|
|
@ -521,11 +518,11 @@ TEST_F(AddressSortingTest, TestPrefersSmallerScope) { |
|
|
|
|
{"[fec0::1234]:443", {"[fec0::5678]:0", AF_INET6}}, |
|
|
|
|
{"[3ffe::5001]:443", {"[3ffe::5002]:0", AF_INET6}}, |
|
|
|
|
}); |
|
|
|
|
grpc_lb_addresses* lb_addrs = BuildLbAddrInputs({ |
|
|
|
|
auto lb_addrs = BuildLbAddrInputs({ |
|
|
|
|
{"[3ffe::5001]:443", AF_INET6}, |
|
|
|
|
{"[fec0::1234]:443", AF_INET6}, |
|
|
|
|
}); |
|
|
|
|
grpc_cares_wrapper_address_sorting_sort(lb_addrs); |
|
|
|
|
grpc_cares_wrapper_address_sorting_sort(&lb_addrs); |
|
|
|
|
VerifyLbAddrOutputs(lb_addrs, { |
|
|
|
|
"[fec0::1234]:443", |
|
|
|
|
"[3ffe::5001]:443", |
|
|
|
@ -546,11 +543,11 @@ TEST_F(AddressSortingTest, TestPrefersLongestMatchingSrcDstPrefix) { |
|
|
|
|
{"[3ffe:1234::]:443", {"[3ffe:1235::]:0", AF_INET6}}, |
|
|
|
|
{"[3ffe:5001::]:443", {"[3ffe:4321::]:0", AF_INET6}}, |
|
|
|
|
}); |
|
|
|
|
grpc_lb_addresses* lb_addrs = BuildLbAddrInputs({ |
|
|
|
|
auto lb_addrs = BuildLbAddrInputs({ |
|
|
|
|
{"[3ffe:5001::]:443", AF_INET6}, |
|
|
|
|
{"[3ffe:1234::]:443", AF_INET6}, |
|
|
|
|
}); |
|
|
|
|
grpc_cares_wrapper_address_sorting_sort(lb_addrs); |
|
|
|
|
grpc_cares_wrapper_address_sorting_sort(&lb_addrs); |
|
|
|
|
VerifyLbAddrOutputs(lb_addrs, { |
|
|
|
|
"[3ffe:1234::]:443", |
|
|
|
|
"[3ffe:5001::]:443", |
|
|
|
@ -567,11 +564,11 @@ TEST_F(AddressSortingTest, |
|
|
|
|
{"[3ffe::1234]:443", {"[3ffe::1235]:0", AF_INET6}}, |
|
|
|
|
{"[3ffe::5001]:443", {"[3ffe::4321]:0", AF_INET6}}, |
|
|
|
|
}); |
|
|
|
|
grpc_lb_addresses* lb_addrs = BuildLbAddrInputs({ |
|
|
|
|
auto lb_addrs = BuildLbAddrInputs({ |
|
|
|
|
{"[3ffe::5001]:443", AF_INET6}, |
|
|
|
|
{"[3ffe::1234]:443", AF_INET6}, |
|
|
|
|
}); |
|
|
|
|
grpc_cares_wrapper_address_sorting_sort(lb_addrs); |
|
|
|
|
grpc_cares_wrapper_address_sorting_sort(&lb_addrs); |
|
|
|
|
VerifyLbAddrOutputs(lb_addrs, { |
|
|
|
|
"[3ffe::1234]:443", |
|
|
|
|
"[3ffe::5001]:443", |
|
|
|
@ -587,11 +584,11 @@ TEST_F(AddressSortingTest, TestPrefersLongestPrefixStressInnerBytePrefix) { |
|
|
|
|
{"[3ffe:8000::]:443", {"[3ffe:C000::]:0", AF_INET6}}, |
|
|
|
|
{"[3ffe:2000::]:443", {"[3ffe:3000::]:0", AF_INET6}}, |
|
|
|
|
}); |
|
|
|
|
grpc_lb_addresses* lb_addrs = BuildLbAddrInputs({ |
|
|
|
|
auto lb_addrs = BuildLbAddrInputs({ |
|
|
|
|
{"[3ffe:8000::]:443", AF_INET6}, |
|
|
|
|
{"[3ffe:2000::]:443", AF_INET6}, |
|
|
|
|
}); |
|
|
|
|
grpc_cares_wrapper_address_sorting_sort(lb_addrs); |
|
|
|
|
grpc_cares_wrapper_address_sorting_sort(&lb_addrs); |
|
|
|
|
VerifyLbAddrOutputs(lb_addrs, { |
|
|
|
|
"[3ffe:2000::]:443", |
|
|
|
|
"[3ffe:8000::]:443", |
|
|
|
@ -607,11 +604,11 @@ TEST_F(AddressSortingTest, TestPrefersLongestPrefixDiffersOnHighestBitOfByte) { |
|
|
|
|
{"[3ffe:6::]:443", {"[3ffe:8::]:0", AF_INET6}}, |
|
|
|
|
{"[3ffe:c::]:443", {"[3ffe:8::]:0", AF_INET6}}, |
|
|
|
|
}); |
|
|
|
|
grpc_lb_addresses* lb_addrs = BuildLbAddrInputs({ |
|
|
|
|
auto lb_addrs = BuildLbAddrInputs({ |
|
|
|
|
{"[3ffe:6::]:443", AF_INET6}, |
|
|
|
|
{"[3ffe:c::]:443", AF_INET6}, |
|
|
|
|
}); |
|
|
|
|
grpc_cares_wrapper_address_sorting_sort(lb_addrs); |
|
|
|
|
grpc_cares_wrapper_address_sorting_sort(&lb_addrs); |
|
|
|
|
VerifyLbAddrOutputs(lb_addrs, { |
|
|
|
|
"[3ffe:c::]:443", |
|
|
|
|
"[3ffe:6::]:443", |
|
|
|
@ -629,11 +626,11 @@ TEST_F(AddressSortingTest, TestPrefersLongestPrefixDiffersByLastBit) { |
|
|
|
|
{"[3ffe:1111:1111:1110::]:443", |
|
|
|
|
{"[3ffe:1111:1111:1111::]:0", AF_INET6}}, |
|
|
|
|
}); |
|
|
|
|
grpc_lb_addresses* lb_addrs = BuildLbAddrInputs({ |
|
|
|
|
auto lb_addrs = BuildLbAddrInputs({ |
|
|
|
|
{"[3ffe:1111:1111:1110::]:443", AF_INET6}, |
|
|
|
|
{"[3ffe:1111:1111:1111::]:443", AF_INET6}, |
|
|
|
|
}); |
|
|
|
|
grpc_cares_wrapper_address_sorting_sort(lb_addrs); |
|
|
|
|
grpc_cares_wrapper_address_sorting_sort(&lb_addrs); |
|
|
|
|
VerifyLbAddrOutputs(lb_addrs, { |
|
|
|
|
"[3ffe:1111:1111:1111::]:443", |
|
|
|
|
"[3ffe:1111:1111:1110::]:443", |
|
|
|
@ -651,11 +648,11 @@ TEST_F(AddressSortingTest, TestStableSort) { |
|
|
|
|
{"[3ffe::1234]:443", {"[3ffe::1236]:0", AF_INET6}}, |
|
|
|
|
{"[3ffe::1235]:443", {"[3ffe::1237]:0", AF_INET6}}, |
|
|
|
|
}); |
|
|
|
|
grpc_lb_addresses* lb_addrs = BuildLbAddrInputs({ |
|
|
|
|
auto lb_addrs = BuildLbAddrInputs({ |
|
|
|
|
{"[3ffe::1234]:443", AF_INET6}, |
|
|
|
|
{"[3ffe::1235]:443", AF_INET6}, |
|
|
|
|
}); |
|
|
|
|
grpc_cares_wrapper_address_sorting_sort(lb_addrs); |
|
|
|
|
grpc_cares_wrapper_address_sorting_sort(&lb_addrs); |
|
|
|
|
VerifyLbAddrOutputs(lb_addrs, { |
|
|
|
|
"[3ffe::1234]:443", |
|
|
|
|
"[3ffe::1235]:443", |
|
|
|
@ -674,14 +671,14 @@ TEST_F(AddressSortingTest, TestStableSortFiveElements) { |
|
|
|
|
{"[3ffe::1234]:443", {"[3ffe::1204]:0", AF_INET6}}, |
|
|
|
|
{"[3ffe::1235]:443", {"[3ffe::1205]:0", AF_INET6}}, |
|
|
|
|
}); |
|
|
|
|
grpc_lb_addresses* lb_addrs = BuildLbAddrInputs({ |
|
|
|
|
auto lb_addrs = BuildLbAddrInputs({ |
|
|
|
|
{"[3ffe::1231]:443", AF_INET6}, |
|
|
|
|
{"[3ffe::1232]:443", AF_INET6}, |
|
|
|
|
{"[3ffe::1233]:443", AF_INET6}, |
|
|
|
|
{"[3ffe::1234]:443", AF_INET6}, |
|
|
|
|
{"[3ffe::1235]:443", AF_INET6}, |
|
|
|
|
}); |
|
|
|
|
grpc_cares_wrapper_address_sorting_sort(lb_addrs); |
|
|
|
|
grpc_cares_wrapper_address_sorting_sort(&lb_addrs); |
|
|
|
|
VerifyLbAddrOutputs(lb_addrs, { |
|
|
|
|
"[3ffe::1231]:443", |
|
|
|
|
"[3ffe::1232]:443", |
|
|
|
@ -695,14 +692,14 @@ TEST_F(AddressSortingTest, TestStableSortNoSrcAddrsExist) { |
|
|
|
|
bool ipv4_supported = true; |
|
|
|
|
bool ipv6_supported = true; |
|
|
|
|
OverrideAddressSortingSourceAddrFactory(ipv4_supported, ipv6_supported, {}); |
|
|
|
|
grpc_lb_addresses* lb_addrs = BuildLbAddrInputs({ |
|
|
|
|
auto lb_addrs = BuildLbAddrInputs({ |
|
|
|
|
{"[3ffe::1231]:443", AF_INET6}, |
|
|
|
|
{"[3ffe::1232]:443", AF_INET6}, |
|
|
|
|
{"[3ffe::1233]:443", AF_INET6}, |
|
|
|
|
{"[3ffe::1234]:443", AF_INET6}, |
|
|
|
|
{"[3ffe::1235]:443", AF_INET6}, |
|
|
|
|
}); |
|
|
|
|
grpc_cares_wrapper_address_sorting_sort(lb_addrs); |
|
|
|
|
grpc_cares_wrapper_address_sorting_sort(&lb_addrs); |
|
|
|
|
VerifyLbAddrOutputs(lb_addrs, { |
|
|
|
|
"[3ffe::1231]:443", |
|
|
|
|
"[3ffe::1232]:443", |
|
|
|
@ -716,11 +713,11 @@ TEST_F(AddressSortingTest, TestStableSortNoSrcAddrsExistWithIpv4) { |
|
|
|
|
bool ipv4_supported = true; |
|
|
|
|
bool ipv6_supported = true; |
|
|
|
|
OverrideAddressSortingSourceAddrFactory(ipv4_supported, ipv6_supported, {}); |
|
|
|
|
grpc_lb_addresses* lb_addrs = BuildLbAddrInputs({ |
|
|
|
|
auto lb_addrs = BuildLbAddrInputs({ |
|
|
|
|
{"[::ffff:5.6.7.8]:443", AF_INET6}, |
|
|
|
|
{"1.2.3.4:443", AF_INET}, |
|
|
|
|
}); |
|
|
|
|
grpc_cares_wrapper_address_sorting_sort(lb_addrs); |
|
|
|
|
grpc_cares_wrapper_address_sorting_sort(&lb_addrs); |
|
|
|
|
VerifyLbAddrOutputs(lb_addrs, { |
|
|
|
|
"[::ffff:5.6.7.8]:443", |
|
|
|
|
"1.2.3.4:443", |
|
|
|
@ -744,11 +741,11 @@ TEST_F(AddressSortingTest, TestStableSortV4CompatAndSiteLocalAddresses) { |
|
|
|
|
{"[fec0::2000]:443", {"[fec0::2001]:0", AF_INET6}}, |
|
|
|
|
{v4_compat_dest, {v4_compat_src, AF_INET6}}, |
|
|
|
|
}); |
|
|
|
|
grpc_lb_addresses* lb_addrs = BuildLbAddrInputs({ |
|
|
|
|
auto lb_addrs = BuildLbAddrInputs({ |
|
|
|
|
{"[fec0::2000]:443", AF_INET6}, |
|
|
|
|
{v4_compat_dest, AF_INET6}, |
|
|
|
|
}); |
|
|
|
|
grpc_cares_wrapper_address_sorting_sort(lb_addrs); |
|
|
|
|
grpc_cares_wrapper_address_sorting_sort(&lb_addrs); |
|
|
|
|
VerifyLbAddrOutputs(lb_addrs, |
|
|
|
|
{ |
|
|
|
|
// The sort should be stable since
|
|
|
|
@ -765,11 +762,11 @@ TEST_F(AddressSortingTest, TestStableSortV4CompatAndSiteLocalAddresses) { |
|
|
|
|
* (whether ipv4 loopback is available or not, an available ipv6 |
|
|
|
|
* loopback should be preferred). */ |
|
|
|
|
TEST_F(AddressSortingTest, TestPrefersIpv6Loopback) { |
|
|
|
|
grpc_lb_addresses* lb_addrs = BuildLbAddrInputs({ |
|
|
|
|
auto lb_addrs = BuildLbAddrInputs({ |
|
|
|
|
{"[::1]:443", AF_INET6}, |
|
|
|
|
{"127.0.0.1:443", AF_INET}, |
|
|
|
|
}); |
|
|
|
|
grpc_cares_wrapper_address_sorting_sort(lb_addrs); |
|
|
|
|
grpc_cares_wrapper_address_sorting_sort(&lb_addrs); |
|
|
|
|
VerifyLbAddrOutputs(lb_addrs, { |
|
|
|
|
"[::1]:443", |
|
|
|
|
"127.0.0.1:443", |
|
|
|
@ -779,11 +776,11 @@ TEST_F(AddressSortingTest, TestPrefersIpv6Loopback) { |
|
|
|
|
/* Flip the order of the inputs above and expect the same output order
|
|
|
|
|
* (try to rule out influence of arbitrary qsort ordering) */ |
|
|
|
|
TEST_F(AddressSortingTest, TestPrefersIpv6LoopbackInputsFlipped) { |
|
|
|
|
grpc_lb_addresses* lb_addrs = BuildLbAddrInputs({ |
|
|
|
|
auto lb_addrs = BuildLbAddrInputs({ |
|
|
|
|
{"127.0.0.1:443", AF_INET}, |
|
|
|
|
{"[::1]:443", AF_INET6}, |
|
|
|
|
}); |
|
|
|
|
grpc_cares_wrapper_address_sorting_sort(lb_addrs); |
|
|
|
|
grpc_cares_wrapper_address_sorting_sort(&lb_addrs); |
|
|
|
|
VerifyLbAddrOutputs(lb_addrs, { |
|
|
|
|
"[::1]:443", |
|
|
|
|
"127.0.0.1:443", |
|
|
|
|