|
|
|
@ -18,7 +18,6 @@ |
|
|
|
|
|
|
|
|
|
#include <grpc/grpc.h> |
|
|
|
|
#include <grpc/support/alloc.h> |
|
|
|
|
#include <grpc/support/host_port.h> |
|
|
|
|
#include <grpc/support/log.h> |
|
|
|
|
#include <grpc/support/string_util.h> |
|
|
|
|
#include <grpc/support/sync.h> |
|
|
|
@ -32,7 +31,7 @@ |
|
|
|
|
#include <sys/types.h> |
|
|
|
|
#include <vector> |
|
|
|
|
|
|
|
|
|
#include <address_sorting.h> |
|
|
|
|
#include <address_sorting/address_sorting.h> |
|
|
|
|
#include "test/cpp/util/subprocess.h" |
|
|
|
|
#include "test/cpp/util/test_config.h" |
|
|
|
|
|
|
|
|
@ -42,6 +41,7 @@ |
|
|
|
|
#include "src/core/ext/filters/client_channel/resolver_registry.h" |
|
|
|
|
#include "src/core/lib/channel/channel_args.h" |
|
|
|
|
#include "src/core/lib/gpr/env.h" |
|
|
|
|
#include "src/core/lib/gpr/host_port.h" |
|
|
|
|
#include "src/core/lib/gpr/string.h" |
|
|
|
|
#include "src/core/lib/iomgr/combiner.h" |
|
|
|
|
#include "src/core/lib/iomgr/executor.h" |
|
|
|
@ -205,7 +205,7 @@ TEST(AddressSortingTest, TestDepriotizesUnreachableAddresses) { |
|
|
|
|
{"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_test_only_address_sorting_sort(lb_addrs); |
|
|
|
|
VerifyLbAddrOutputs(lb_addrs, { |
|
|
|
|
"1.2.3.4:443", |
|
|
|
|
"5.6.7.8:443", |
|
|
|
@ -224,7 +224,7 @@ TEST(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_test_only_address_sorting_sort(lb_addrs); |
|
|
|
|
VerifyLbAddrOutputs(lb_addrs, { |
|
|
|
|
"1.2.3.4:443", |
|
|
|
|
"[2607:f8b0:400a:801::1002]:443", |
|
|
|
@ -244,7 +244,7 @@ TEST(AddressSortingTest, TestDepriotizesUnsupportedDomainIpv4) { |
|
|
|
|
{"[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_test_only_address_sorting_sort(lb_addrs); |
|
|
|
|
VerifyLbAddrOutputs(lb_addrs, { |
|
|
|
|
"[2607:f8b0:400a:801::1002]:443", |
|
|
|
|
"1.2.3.4:443", |
|
|
|
@ -268,7 +268,7 @@ TEST(AddressSortingTest, TestDepriotizesNonMatchingScope) { |
|
|
|
|
{"[2000:f8b0:400a:801::1002]:443", AF_INET6}, |
|
|
|
|
{"[fec0::5000]:443", AF_INET6}, |
|
|
|
|
}); |
|
|
|
|
grpc_cares_wrapper_address_sorting_sort(lb_addrs); |
|
|
|
|
grpc_cares_wrapper_test_only_address_sorting_sort(lb_addrs); |
|
|
|
|
VerifyLbAddrOutputs(lb_addrs, { |
|
|
|
|
"[fec0::5000]:443", |
|
|
|
|
"[2000:f8b0:400a:801::1002]:443", |
|
|
|
@ -291,7 +291,7 @@ TEST(AddressSortingTest, TestUsesLabelFromDefaultTable) { |
|
|
|
|
{"[2002::5001]:443", AF_INET6}, |
|
|
|
|
{"[2001::5001]:443", AF_INET6}, |
|
|
|
|
}); |
|
|
|
|
grpc_cares_wrapper_address_sorting_sort(lb_addrs); |
|
|
|
|
grpc_cares_wrapper_test_only_address_sorting_sort(lb_addrs); |
|
|
|
|
VerifyLbAddrOutputs(lb_addrs, { |
|
|
|
|
"[2001::5001]:443", |
|
|
|
|
"[2002::5001]:443", |
|
|
|
@ -314,7 +314,7 @@ TEST(AddressSortingTest, |
|
|
|
|
{"[3ffe::5001]:443", AF_INET6}, |
|
|
|
|
{"1.2.3.4:443", AF_INET}, |
|
|
|
|
}); |
|
|
|
|
grpc_cares_wrapper_address_sorting_sort(lb_addrs); |
|
|
|
|
grpc_cares_wrapper_test_only_address_sorting_sort(lb_addrs); |
|
|
|
|
VerifyLbAddrOutputs( |
|
|
|
|
lb_addrs, { |
|
|
|
|
// The AF_INET address should be IPv4-mapped by the sort,
|
|
|
|
@ -347,7 +347,7 @@ TEST(AddressSortingTest, |
|
|
|
|
{v4_compat_dest, AF_INET6}, |
|
|
|
|
{"[::1]:443", AF_INET6}, |
|
|
|
|
}); |
|
|
|
|
grpc_cares_wrapper_address_sorting_sort(lb_addrs); |
|
|
|
|
grpc_cares_wrapper_test_only_address_sorting_sort(lb_addrs); |
|
|
|
|
VerifyLbAddrOutputs(lb_addrs, { |
|
|
|
|
"[::1]:443", |
|
|
|
|
v4_compat_dest, |
|
|
|
@ -370,7 +370,7 @@ TEST(AddressSortingTest, |
|
|
|
|
{"[1234::2]:443", AF_INET6}, |
|
|
|
|
{"[::1]:443", AF_INET6}, |
|
|
|
|
}); |
|
|
|
|
grpc_cares_wrapper_address_sorting_sort(lb_addrs); |
|
|
|
|
grpc_cares_wrapper_test_only_address_sorting_sort(lb_addrs); |
|
|
|
|
VerifyLbAddrOutputs( |
|
|
|
|
lb_addrs, |
|
|
|
|
{ |
|
|
|
@ -394,7 +394,7 @@ TEST(AddressSortingTest, |
|
|
|
|
{"[2001::1234]:443", AF_INET6}, |
|
|
|
|
{"[2000::5001]:443", AF_INET6}, |
|
|
|
|
}); |
|
|
|
|
grpc_cares_wrapper_address_sorting_sort(lb_addrs); |
|
|
|
|
grpc_cares_wrapper_test_only_address_sorting_sort(lb_addrs); |
|
|
|
|
VerifyLbAddrOutputs( |
|
|
|
|
lb_addrs, { |
|
|
|
|
// The 2000::/16 address should match the ::/0 prefix rule
|
|
|
|
@ -418,7 +418,7 @@ TEST( |
|
|
|
|
{"[2001::1231]:443", AF_INET6}, |
|
|
|
|
{"[2000::5001]:443", AF_INET6}, |
|
|
|
|
}); |
|
|
|
|
grpc_cares_wrapper_address_sorting_sort(lb_addrs); |
|
|
|
|
grpc_cares_wrapper_test_only_address_sorting_sort(lb_addrs); |
|
|
|
|
VerifyLbAddrOutputs(lb_addrs, { |
|
|
|
|
"[2000::5001]:443", |
|
|
|
|
"[2001::1231]:443", |
|
|
|
@ -439,7 +439,7 @@ TEST(AddressSortingTest, |
|
|
|
|
{"[fec0::1234]:443", AF_INET6}, |
|
|
|
|
{"[fc00::5001]:443", AF_INET6}, |
|
|
|
|
}); |
|
|
|
|
grpc_cares_wrapper_address_sorting_sort(lb_addrs); |
|
|
|
|
grpc_cares_wrapper_test_only_address_sorting_sort(lb_addrs); |
|
|
|
|
VerifyLbAddrOutputs(lb_addrs, { |
|
|
|
|
"[fc00::5001]:443", |
|
|
|
|
"[fec0::1234]:443", |
|
|
|
@ -461,7 +461,7 @@ TEST( |
|
|
|
|
{"[::ffff:0.0.0.2]:443", AF_INET6}, |
|
|
|
|
{"[1234::2]:443", AF_INET6}, |
|
|
|
|
}); |
|
|
|
|
grpc_cares_wrapper_address_sorting_sort(lb_addrs); |
|
|
|
|
grpc_cares_wrapper_test_only_address_sorting_sort(lb_addrs); |
|
|
|
|
VerifyLbAddrOutputs(lb_addrs, { |
|
|
|
|
// ::ffff:0:2 should match the v4-mapped
|
|
|
|
|
// precedence entry and be deprioritized.
|
|
|
|
@ -488,7 +488,7 @@ TEST(AddressSortingTest, TestPrefersSmallerScope) { |
|
|
|
|
{"[3ffe::5001]:443", AF_INET6}, |
|
|
|
|
{"[fec0::1234]:443", AF_INET6}, |
|
|
|
|
}); |
|
|
|
|
grpc_cares_wrapper_address_sorting_sort(lb_addrs); |
|
|
|
|
grpc_cares_wrapper_test_only_address_sorting_sort(lb_addrs); |
|
|
|
|
VerifyLbAddrOutputs(lb_addrs, { |
|
|
|
|
"[fec0::1234]:443", |
|
|
|
|
"[3ffe::5001]:443", |
|
|
|
@ -513,7 +513,7 @@ TEST(AddressSortingTest, TestPrefersLongestMatchingSrcDstPrefix) { |
|
|
|
|
{"[3ffe:5001::]:443", AF_INET6}, |
|
|
|
|
{"[3ffe:1234::]:443", AF_INET6}, |
|
|
|
|
}); |
|
|
|
|
grpc_cares_wrapper_address_sorting_sort(lb_addrs); |
|
|
|
|
grpc_cares_wrapper_test_only_address_sorting_sort(lb_addrs); |
|
|
|
|
VerifyLbAddrOutputs(lb_addrs, { |
|
|
|
|
"[3ffe:1234::]:443", |
|
|
|
|
"[3ffe:5001::]:443", |
|
|
|
@ -534,7 +534,7 @@ TEST(AddressSortingTest, |
|
|
|
|
{"[3ffe::5001]:443", AF_INET6}, |
|
|
|
|
{"[3ffe::1234]:443", AF_INET6}, |
|
|
|
|
}); |
|
|
|
|
grpc_cares_wrapper_address_sorting_sort(lb_addrs); |
|
|
|
|
grpc_cares_wrapper_test_only_address_sorting_sort(lb_addrs); |
|
|
|
|
VerifyLbAddrOutputs(lb_addrs, { |
|
|
|
|
"[3ffe::1234]:443", |
|
|
|
|
"[3ffe::5001]:443", |
|
|
|
@ -554,7 +554,7 @@ TEST(AddressSortingTest, TestPrefersLongestPrefixStressInnerBytePrefix) { |
|
|
|
|
{"[3ffe:8000::]:443", AF_INET6}, |
|
|
|
|
{"[3ffe:2000::]:443", AF_INET6}, |
|
|
|
|
}); |
|
|
|
|
grpc_cares_wrapper_address_sorting_sort(lb_addrs); |
|
|
|
|
grpc_cares_wrapper_test_only_address_sorting_sort(lb_addrs); |
|
|
|
|
VerifyLbAddrOutputs(lb_addrs, { |
|
|
|
|
"[3ffe:2000::]:443", |
|
|
|
|
"[3ffe:8000::]:443", |
|
|
|
@ -574,7 +574,7 @@ TEST(AddressSortingTest, TestPrefersLongestPrefixDiffersOnHighestBitOfByte) { |
|
|
|
|
{"[3ffe:6::]:443", AF_INET6}, |
|
|
|
|
{"[3ffe:c::]:443", AF_INET6}, |
|
|
|
|
}); |
|
|
|
|
grpc_cares_wrapper_address_sorting_sort(lb_addrs); |
|
|
|
|
grpc_cares_wrapper_test_only_address_sorting_sort(lb_addrs); |
|
|
|
|
VerifyLbAddrOutputs(lb_addrs, { |
|
|
|
|
"[3ffe:c::]:443", |
|
|
|
|
"[3ffe:6::]:443", |
|
|
|
@ -596,7 +596,7 @@ TEST(AddressSortingTest, TestPrefersLongestPrefixDiffersByLastBit) { |
|
|
|
|
{"[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_test_only_address_sorting_sort(lb_addrs); |
|
|
|
|
VerifyLbAddrOutputs(lb_addrs, { |
|
|
|
|
"[3ffe:1111:1111:1111::]:443", |
|
|
|
|
"[3ffe:1111:1111:1110::]:443", |
|
|
|
@ -618,7 +618,7 @@ TEST(AddressSortingTest, TestStableSort) { |
|
|
|
|
{"[3ffe::1234]:443", AF_INET6}, |
|
|
|
|
{"[3ffe::1235]:443", AF_INET6}, |
|
|
|
|
}); |
|
|
|
|
grpc_cares_wrapper_address_sorting_sort(lb_addrs); |
|
|
|
|
grpc_cares_wrapper_test_only_address_sorting_sort(lb_addrs); |
|
|
|
|
VerifyLbAddrOutputs(lb_addrs, { |
|
|
|
|
"[3ffe::1234]:443", |
|
|
|
|
"[3ffe::1235]:443", |
|
|
|
@ -644,7 +644,7 @@ TEST(AddressSortingTest, TestStableSortFiveElements) { |
|
|
|
|
{"[3ffe::1234]:443", AF_INET6}, |
|
|
|
|
{"[3ffe::1235]:443", AF_INET6}, |
|
|
|
|
}); |
|
|
|
|
grpc_cares_wrapper_address_sorting_sort(lb_addrs); |
|
|
|
|
grpc_cares_wrapper_test_only_address_sorting_sort(lb_addrs); |
|
|
|
|
VerifyLbAddrOutputs(lb_addrs, { |
|
|
|
|
"[3ffe::1231]:443", |
|
|
|
|
"[3ffe::1232]:443", |
|
|
|
@ -665,7 +665,7 @@ TEST(AddressSortingTest, TestStableSortNoSrcAddrsExist) { |
|
|
|
|
{"[3ffe::1234]:443", AF_INET6}, |
|
|
|
|
{"[3ffe::1235]:443", AF_INET6}, |
|
|
|
|
}); |
|
|
|
|
grpc_cares_wrapper_address_sorting_sort(lb_addrs); |
|
|
|
|
grpc_cares_wrapper_test_only_address_sorting_sort(lb_addrs); |
|
|
|
|
VerifyLbAddrOutputs(lb_addrs, { |
|
|
|
|
"[3ffe::1231]:443", |
|
|
|
|
"[3ffe::1232]:443", |
|
|
|
@ -683,7 +683,7 @@ TEST(AddressSortingTest, TestStableSortNoSrcAddrsExistWithIpv4) { |
|
|
|
|
{"[::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_test_only_address_sorting_sort(lb_addrs); |
|
|
|
|
VerifyLbAddrOutputs(lb_addrs, { |
|
|
|
|
"[::ffff:5.6.7.8]:443", |
|
|
|
|
"1.2.3.4:443", |
|
|
|
@ -711,7 +711,7 @@ TEST(AddressSortingTest, TestStableSortV4CompatAndSiteLocalAddresses) { |
|
|
|
|
{"[fec0::2000]:443", AF_INET6}, |
|
|
|
|
{v4_compat_dest, AF_INET6}, |
|
|
|
|
}); |
|
|
|
|
grpc_cares_wrapper_address_sorting_sort(lb_addrs); |
|
|
|
|
grpc_cares_wrapper_test_only_address_sorting_sort(lb_addrs); |
|
|
|
|
VerifyLbAddrOutputs(lb_addrs, |
|
|
|
|
{ |
|
|
|
|
// The sort should be stable since
|
|
|
|
|