[e2e tests] refactor code for determining local IP address (#34769)

pull/34779/head
Mark D. Roth 1 year ago committed by GitHub
parent 77824d8093
commit 30a24a37d1
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 58
      test/core/transport/chttp2/too_many_pings_test.cc
  2. 21
      test/core/util/resolve_localhost_ip46.cc
  3. 20
      test/core/util/resolve_localhost_ip46.h
  4. 22
      test/cpp/end2end/channelz_service_test.cc
  5. 181
      test/cpp/end2end/client_lb_end2end_test.cc
  6. 14
      test/cpp/end2end/grpclb_end2end_test.cc
  7. 71
      test/cpp/end2end/rls_end2end_test.cc
  8. 11
      test/cpp/end2end/service_config_end2end_test.cc
  9. 9
      test/cpp/end2end/tls_key_export_test.cc
  10. 5
      test/cpp/end2end/xds/xds_cluster_type_end2end_test.cc
  11. 4
      test/cpp/end2end/xds/xds_core_end2end_test.cc
  12. 5
      test/cpp/end2end/xds/xds_csds_end2end_test.cc
  13. 235
      test/cpp/end2end/xds/xds_end2end_test.cc
  14. 13
      test/cpp/end2end/xds/xds_end2end_test_lib.cc
  15. 2
      test/cpp/end2end/xds/xds_end2end_test_lib.h
  16. 5
      test/cpp/end2end/xds/xds_outlier_detection_end2end_test.cc
  17. 7
      test/cpp/end2end/xds/xds_ring_hash_end2end_test.cc

@ -29,7 +29,6 @@
#include "absl/status/status.h"
#include "absl/status/statusor.h"
#include "absl/strings/str_cat.h"
#include "absl/strings/string_view.h"
#include "absl/time/time.h"
#include "gtest/gtest.h"
@ -107,23 +106,6 @@ class TransportCounter {
int TransportCounter::count_ = 0;
class TooManyPings : public ::testing::Test {
protected:
void SetUp() override {
bool localhost_resolves_to_ipv4 = false;
bool localhost_resolves_to_ipv6 = false;
grpc_core::LocalhostResolves(&localhost_resolves_to_ipv4,
&localhost_resolves_to_ipv6);
ipv6_only_ = !localhost_resolves_to_ipv4 && localhost_resolves_to_ipv6;
}
absl::string_view GetLocalIp() const {
return ipv6_only_ ? "[::1]" : "127.0.0.1";
}
bool ipv6_only_;
};
// Perform a simple RPC where the server cancels the request with
// grpc_call_cancel_with_status
grpc_status_code PerformCall(grpc_channel* channel, grpc_server* server,
@ -196,12 +178,12 @@ grpc_status_code PerformCall(grpc_channel* channel, grpc_server* server,
// Test that sending a lot of RPCs that are cancelled by the server doesn't
// result in too many pings due to the pings sent by BDP.
TEST_F(TooManyPings, TestLotsOfServerCancelledRpcsDoesntGiveTooManyPings) {
TEST(TooManyPings, TestLotsOfServerCancelledRpcsDoesntGiveTooManyPings) {
grpc_completion_queue* cq = grpc_completion_queue_create_for_next(nullptr);
// create the server
grpc_server* server = grpc_server_create(nullptr, nullptr);
std::string server_address =
grpc_core::JoinHostPort(GetLocalIp(), grpc_pick_unused_port_or_die());
std::string server_address = grpc_core::JoinHostPort(
grpc_core::LocalIp(), grpc_pick_unused_port_or_die());
grpc_server_register_completion_queue(server, cq, nullptr);
grpc_server_credentials* server_creds =
grpc_insecure_server_credentials_create();
@ -370,7 +352,7 @@ void VerifyChannelDisconnected(grpc_channel* channel,
// necessary.
}
class KeepaliveThrottlingTest : public TooManyPings {
class KeepaliveThrottlingTest : public ::testing::Test {
protected:
// Starts the server and makes sure that the channel is able to get connected.
grpc_server* ServerStart(const char* addr, grpc_completion_queue* cq) {
@ -399,8 +381,8 @@ class KeepaliveThrottlingTest : public TooManyPings {
TEST_F(KeepaliveThrottlingTest, KeepaliveThrottlingMultipleChannels) {
grpc_completion_queue* cq = grpc_completion_queue_create_for_next(nullptr);
std::string server_address =
grpc_core::JoinHostPort(GetLocalIp(), grpc_pick_unused_port_or_die());
std::string server_address = grpc_core::JoinHostPort(
grpc_core::LocalIp(), grpc_pick_unused_port_or_die());
grpc_server* server = ServerStart(server_address.c_str(), cq);
// create two channel with a keepalive ping interval of 1 second.
grpc_arg client_args[] = {
@ -473,10 +455,10 @@ grpc_core::Resolver::Result BuildResolverResult(
TEST_F(KeepaliveThrottlingTest, NewSubchannelsUseUpdatedKeepaliveTime) {
grpc_core::ExecCtx exec_ctx;
grpc_completion_queue* cq = grpc_completion_queue_create_for_next(nullptr);
std::string server_address1 =
grpc_core::JoinHostPort(GetLocalIp(), grpc_pick_unused_port_or_die());
std::string server_address2 =
grpc_core::JoinHostPort(GetLocalIp(), grpc_pick_unused_port_or_die());
std::string server_address1 = grpc_core::JoinHostPort(
grpc_core::LocalIp(), grpc_pick_unused_port_or_die());
std::string server_address2 = grpc_core::JoinHostPort(
grpc_core::LocalIp(), grpc_pick_unused_port_or_die());
grpc_server* server1 = ServerStart(server_address1.c_str(), cq);
grpc_server* server2 = ServerStart(server_address2.c_str(), cq);
// create a single channel with multiple subchannels with a keepalive ping
@ -550,10 +532,10 @@ TEST_F(KeepaliveThrottlingTest, NewSubchannelsUseUpdatedKeepaliveTime) {
TEST_F(KeepaliveThrottlingTest,
ExistingSubchannelsUseNewKeepaliveTimeWhenReconnecting) {
grpc_completion_queue* cq = grpc_completion_queue_create_for_next(nullptr);
std::string server_address1 =
grpc_core::JoinHostPort(GetLocalIp(), grpc_pick_unused_port_or_die());
std::string server_address2 =
grpc_core::JoinHostPort(GetLocalIp(), grpc_pick_unused_port_or_die());
std::string server_address1 = grpc_core::JoinHostPort(
grpc_core::LocalIp(), grpc_pick_unused_port_or_die());
std::string server_address2 = grpc_core::JoinHostPort(
grpc_core::LocalIp(), grpc_pick_unused_port_or_die());
// create a single channel with round robin load balancing policy.
auto response_generator =
grpc_core::MakeRefCounted<grpc_core::FakeResolverResponseGenerator>();
@ -748,12 +730,12 @@ void PerformCallWithResponsePayload(grpc_channel* channel, grpc_server* server,
grpc_byte_buffer_destroy(response_payload_recv);
}
TEST_F(TooManyPings, BdpPingNotSentWithoutReceiveSideActivity) {
TEST(TooManyPings, BdpPingNotSentWithoutReceiveSideActivity) {
TransportCounter::WaitForTransportsToBeDestroyed();
grpc_completion_queue* cq = grpc_completion_queue_create_for_next(nullptr);
// create the server
std::string server_address =
grpc_core::JoinHostPort(GetLocalIp(), grpc_pick_unused_port_or_die());
std::string server_address = grpc_core::JoinHostPort(
grpc_core::LocalIp(), grpc_pick_unused_port_or_die());
grpc_arg server_args[] = {
grpc_channel_arg_integer_create(
const_cast<char*>(
@ -824,12 +806,12 @@ TEST_F(TooManyPings, BdpPingNotSentWithoutReceiveSideActivity) {
grpc_completion_queue_destroy(cq);
}
TEST_F(TooManyPings, TransportsGetCleanedUpOnDisconnect) {
TEST(TooManyPings, TransportsGetCleanedUpOnDisconnect) {
TransportCounter::WaitForTransportsToBeDestroyed();
grpc_completion_queue* cq = grpc_completion_queue_create_for_next(nullptr);
// create the client and server
std::string server_address =
grpc_core::JoinHostPort(GetLocalIp(), grpc_pick_unused_port_or_die());
std::string server_address = grpc_core::JoinHostPort(
grpc_core::LocalIp(), grpc_pick_unused_port_or_die());
grpc_arg server_args[] = {
grpc_channel_arg_integer_create(
const_cast<char*>(

@ -22,6 +22,7 @@
#include <vector>
#include "absl/status/statusor.h"
#include "absl/strings/str_cat.h"
#include <grpc/support/log.h>
#include <grpc/support/sync.h>
@ -59,4 +60,24 @@ void LocalhostResolves(bool* ipv4, bool* ipv6) {
*ipv6 = localhost_to_ipv6;
}
bool RunningWithIPv6Only() {
bool localhost_resolves_to_ipv4 = false;
bool localhost_resolves_to_ipv6 = false;
LocalhostResolves(&localhost_resolves_to_ipv4, &localhost_resolves_to_ipv6);
return !localhost_resolves_to_ipv4 && localhost_resolves_to_ipv6;
}
absl::string_view LocalIp() {
return RunningWithIPv6Only() ? "[::1]" : "127.0.0.1";
}
std::string LocalIpAndPort(int port) {
return absl::StrCat(LocalIp(), ":", port);
}
std::string LocalIpUri(int port) {
return absl::StrCat(
RunningWithIPv6Only() ? "ipv6:%5b::1%5d:" : "ipv4:127.0.0.1:", port);
}
} // namespace grpc_core

@ -19,11 +19,31 @@
#ifndef GRPC_TEST_CORE_UTIL_RESOLVE_LOCALHOST_IP46_H
#define GRPC_TEST_CORE_UTIL_RESOLVE_LOCALHOST_IP46_H
#include <string>
#include "absl/strings/string_view.h"
namespace grpc_core {
// Test whether localhost resolves to ipv4 and/or ipv6
void LocalhostResolves(bool* ipv4, bool* ipv6);
// Returns true if running with IPv6 only, false otherwise.
bool RunningWithIPv6Only();
// Returns the IP address of localhost.
// If RunningWithIPv6Only() is true, returns the IPv6 address;
// otherwise, returns the IPv4 address.
absl::string_view LocalIp();
// Returns LocalIp() with a port.
std::string LocalIpAndPort(int port);
// Returns the URI of the IP address of localhost with the given port.
// If RunningWithIPv6Only() is true, returns the IPv6 address;
// otherwise, returns the IPv4 address.
std::string LocalIpUri(int port);
} // namespace grpc_core
#endif // GRPC_TEST_CORE_UTIL_RESOLVE_LOCALHOST_IP46_H

@ -192,11 +192,6 @@ class ChannelzServerTest : public ::testing::TestWithParam<CredentialsType> {
}
void SetUp() override {
grpc_init();
bool localhost_resolves_to_ipv4 = false;
bool localhost_resolves_to_ipv6 = false;
grpc_core::LocalhostResolves(&localhost_resolves_to_ipv4,
&localhost_resolves_to_ipv6);
ipv6_only_ = !localhost_resolves_to_ipv4 && localhost_resolves_to_ipv6;
// ensure channel server is brought up on all severs we build.
grpc::channelz::experimental::InitChannelzService();
@ -204,8 +199,7 @@ class ChannelzServerTest : public ::testing::TestWithParam<CredentialsType> {
// We set up a proxy server with channelz enabled.
proxy_port_ = grpc_pick_unused_port_or_die();
ServerBuilder proxy_builder;
std::string proxy_server_address =
absl::StrCat(LocalIp(), ":", proxy_port_);
std::string proxy_server_address = grpc_core::LocalIpAndPort(proxy_port_);
proxy_builder.AddListeningPort(proxy_server_address,
GetServerCredentials(GetParam()));
// forces channelz and channel tracing to be enabled.
@ -224,10 +218,6 @@ class ChannelzServerTest : public ::testing::TestWithParam<CredentialsType> {
grpc_shutdown();
}
absl::string_view LocalIp() const {
return ipv6_only_ ? "[::1]" : "127.0.0.1";
}
// Sets the proxy up to have an arbitrary number of backends.
void ConfigureProxy(size_t num_backends) {
backends_.resize(num_backends);
@ -236,7 +226,7 @@ class ChannelzServerTest : public ::testing::TestWithParam<CredentialsType> {
backends_[i].port = grpc_pick_unused_port_or_die();
ServerBuilder backend_builder;
std::string backend_server_address =
absl::StrCat(LocalIp(), ":", backends_[i].port);
grpc_core::LocalIpAndPort(backends_[i].port);
backend_builder.AddListeningPort(backend_server_address,
GetServerCredentials(GetParam()));
backends_[i].service = std::make_unique<TestServiceImpl>();
@ -258,7 +248,8 @@ class ChannelzServerTest : public ::testing::TestWithParam<CredentialsType> {
}
void ResetStubs() {
string target = absl::StrCat("dns:", LocalIp(), ":", proxy_port_);
string target =
absl::StrCat("dns:", grpc_core::LocalIp(), ":", proxy_port_);
ChannelArguments args;
// disable channelz. We only want to focus on proxy to backend outbound.
args.SetInt(GRPC_ARG_ENABLE_CHANNELZ, 0);
@ -269,7 +260,8 @@ class ChannelzServerTest : public ::testing::TestWithParam<CredentialsType> {
}
std::unique_ptr<grpc::testing::EchoTestService::Stub> NewEchoStub() {
string target = absl::StrCat("dns:", LocalIp(), ":", proxy_port_);
string target =
absl::StrCat("dns:", grpc_core::LocalIp(), ":", proxy_port_);
ChannelArguments args;
// disable channelz. We only want to focus on proxy to backend outbound.
args.SetInt(GRPC_ARG_ENABLE_CHANNELZ, 0);
@ -346,8 +338,6 @@ class ChannelzServerTest : public ::testing::TestWithParam<CredentialsType> {
std::unique_ptr<TestServiceImpl> service;
};
bool ipv6_only_;
std::unique_ptr<grpc::channelz::v1::Channelz::Stub> channelz_stub_;
std::unique_ptr<grpc::testing::EchoTestService::Stub> echo_stub_;

@ -204,14 +204,12 @@ class MyTestServiceImpl : public TestServiceImpl {
class FakeResolverResponseGeneratorWrapper {
public:
explicit FakeResolverResponseGeneratorWrapper(bool ipv6_only)
: ipv6_only_(ipv6_only),
response_generator_(grpc_core::MakeRefCounted<
FakeResolverResponseGeneratorWrapper()
: response_generator_(grpc_core::MakeRefCounted<
grpc_core::FakeResolverResponseGenerator>()) {}
FakeResolverResponseGeneratorWrapper(
FakeResolverResponseGeneratorWrapper&& other) noexcept {
ipv6_only_ = other.ipv6_only_;
response_generator_ = std::move(other.response_generator_);
}
@ -220,14 +218,14 @@ class FakeResolverResponseGeneratorWrapper {
const grpc_core::ChannelArgs& per_address_args =
grpc_core::ChannelArgs()) {
grpc_core::ExecCtx exec_ctx;
response_generator_->SetResponseSynchronously(BuildFakeResults(
ipv6_only_, ports, service_config_json, per_address_args));
response_generator_->SetResponseSynchronously(
BuildFakeResults(ports, service_config_json, per_address_args));
}
void SetNextResolutionUponError(const std::vector<int>& ports) {
grpc_core::ExecCtx exec_ctx;
response_generator_->SetReresolutionResponseSynchronously(
BuildFakeResults(ipv6_only_, ports));
BuildFakeResults(ports));
}
void SetFailureOnReresolution() {
@ -246,15 +244,14 @@ class FakeResolverResponseGeneratorWrapper {
private:
static grpc_core::Resolver::Result BuildFakeResults(
bool ipv6_only, const std::vector<int>& ports,
const char* service_config_json = nullptr,
const std::vector<int>& ports, const char* service_config_json = nullptr,
const grpc_core::ChannelArgs& per_address_args =
grpc_core::ChannelArgs()) {
grpc_core::Resolver::Result result;
result.addresses = grpc_core::EndpointAddressesList();
for (const int& port : ports) {
absl::StatusOr<grpc_core::URI> lb_uri = grpc_core::URI::Parse(
absl::StrCat(ipv6_only ? "ipv6:[::1]:" : "ipv4:127.0.0.1:", port));
absl::StatusOr<grpc_core::URI> lb_uri =
grpc_core::URI::Parse(grpc_core::LocalIpUri(port));
GPR_ASSERT(lb_uri.ok());
grpc_resolved_address address;
GPR_ASSERT(grpc_parse_uri(*lb_uri, &address));
@ -271,7 +268,6 @@ class FakeResolverResponseGeneratorWrapper {
return result;
}
bool ipv6_only_ = false;
grpc_core::RefCountedPtr<grpc_core::FakeResolverResponseGenerator>
response_generator_;
};
@ -283,14 +279,7 @@ class ClientLbEnd2endTest : public ::testing::Test {
creds_(new SecureChannelCredentials(
grpc_fake_transport_security_credentials_create())) {}
void SetUp() override {
grpc_init();
bool localhost_resolves_to_ipv4 = false;
bool localhost_resolves_to_ipv6 = false;
grpc_core::LocalhostResolves(&localhost_resolves_to_ipv4,
&localhost_resolves_to_ipv6);
ipv6_only_ = !localhost_resolves_to_ipv4 && localhost_resolves_to_ipv6;
}
void SetUp() override { grpc_init(); }
void TearDown() override {
for (size_t i = 0; i < servers_.size(); ++i) {
@ -331,10 +320,6 @@ class ClientLbEnd2endTest : public ::testing::Test {
return ports;
}
FakeResolverResponseGeneratorWrapper BuildResolverResponseGenerator() {
return FakeResolverResponseGeneratorWrapper(ipv6_only_);
}
std::unique_ptr<grpc::testing::EchoTestService::Stub> BuildStub(
const std::shared_ptr<Channel>& channel) {
return grpc::testing::EchoTestService::NewStub(channel);
@ -623,13 +608,12 @@ class ClientLbEnd2endTest : public ::testing::Test {
const std::string server_host_;
std::vector<std::unique_ptr<ServerData>> servers_;
std::shared_ptr<ChannelCredentials> creds_;
bool ipv6_only_ = false;
};
TEST_F(ClientLbEnd2endTest, ChannelStateConnectingWhenResolving) {
const int kNumServers = 3;
StartServers(kNumServers);
auto response_generator = BuildResolverResponseGenerator();
FakeResolverResponseGeneratorWrapper response_generator;
auto channel = BuildChannel("", response_generator);
auto stub = BuildStub(channel);
// Initial state should be IDLE.
@ -660,7 +644,7 @@ TEST_F(ClientLbEnd2endTest, ChannelIdleness) {
ChannelArguments args;
args.SetInt(GRPC_ARG_CLIENT_IDLE_TIMEOUT_MS,
1000 * grpc_test_slowdown_factor());
auto response_generator = BuildResolverResponseGenerator();
FakeResolverResponseGeneratorWrapper response_generator;
auto channel = BuildChannel("", response_generator, args);
auto stub = BuildStub(channel);
// The initial channel state should be IDLE.
@ -685,7 +669,7 @@ TEST_F(ClientLbEnd2endTest, ChannelIdleness) {
TEST_F(ClientLbEnd2endTest, AuthorityOverrideOnChannel) {
StartServers(1);
// Set authority via channel arg.
auto response_generator = BuildResolverResponseGenerator();
FakeResolverResponseGeneratorWrapper response_generator;
ChannelArguments args;
args.SetString(GRPC_ARG_DEFAULT_AUTHORITY, "foo.example.com");
auto channel = BuildChannel("", response_generator, args);
@ -705,7 +689,7 @@ TEST_F(ClientLbEnd2endTest, AuthorityOverrideOnChannel) {
TEST_F(ClientLbEnd2endTest, AuthorityOverrideFromResolver) {
StartServers(1);
auto response_generator = BuildResolverResponseGenerator();
FakeResolverResponseGeneratorWrapper response_generator;
auto channel = BuildChannel("", response_generator);
auto stub = BuildStub(channel);
// Inject resolver result that sets the per-address authority to a
@ -729,7 +713,7 @@ TEST_F(ClientLbEnd2endTest, AuthorityOverrideFromResolver) {
TEST_F(ClientLbEnd2endTest, AuthorityOverridePrecedence) {
StartServers(1);
// Set authority via channel arg.
auto response_generator = BuildResolverResponseGenerator();
FakeResolverResponseGeneratorWrapper response_generator;
ChannelArguments args;
args.SetString(GRPC_ARG_DEFAULT_AUTHORITY, "foo.example.com");
auto channel = BuildChannel("", response_generator, args);
@ -762,7 +746,7 @@ TEST_F(PickFirstTest, Basic) {
// Start servers and send one RPC per server.
const int kNumServers = 3;
StartServers(kNumServers);
auto response_generator = BuildResolverResponseGenerator();
FakeResolverResponseGeneratorWrapper response_generator;
auto channel = BuildChannel(
"", response_generator); // test that pick first is the default.
auto stub = BuildStub(channel);
@ -787,7 +771,7 @@ TEST_F(PickFirstTest, Basic) {
TEST_F(PickFirstTest, ProcessPending) {
StartServers(1); // Single server
auto response_generator = BuildResolverResponseGenerator();
FakeResolverResponseGeneratorWrapper response_generator;
auto channel = BuildChannel(
"", response_generator); // test that pick first is the default.
auto stub = BuildStub(channel);
@ -798,7 +782,7 @@ TEST_F(PickFirstTest, ProcessPending) {
// target (even if it happened over a different channel, because subchannels
// are globally reused). Progress should happen without any transition from
// this READY state.
auto second_response_generator = BuildResolverResponseGenerator();
FakeResolverResponseGeneratorWrapper second_response_generator;
auto second_channel = BuildChannel("", second_response_generator);
auto second_stub = BuildStub(second_channel);
second_response_generator.SetNextResolution({servers_[0]->port_});
@ -815,7 +799,7 @@ TEST_F(PickFirstTest, SelectsReadyAtStartup) {
grpc_pick_unused_port_or_die()};
CreateServers(2, ports);
StartServer(1);
auto response_generator1 = BuildResolverResponseGenerator();
FakeResolverResponseGeneratorWrapper response_generator1;
auto channel1 = BuildChannel("pick_first", response_generator1, args);
auto stub1 = BuildStub(channel1);
response_generator1.SetNextResolution(ports);
@ -824,7 +808,7 @@ TEST_F(PickFirstTest, SelectsReadyAtStartup) {
// Create a second channel with the same addresses. Its PF instance
// should immediately pick the second subchannel, since it's already
// in READY state.
auto response_generator2 = BuildResolverResponseGenerator();
FakeResolverResponseGeneratorWrapper response_generator2;
auto channel2 = BuildChannel("pick_first", response_generator2, args);
response_generator2.SetNextResolution(ports);
// Check that the channel reports READY without waiting for the
@ -838,7 +822,7 @@ TEST_F(PickFirstTest, BackOffInitialReconnect) {
args.SetInt(GRPC_ARG_INITIAL_RECONNECT_BACKOFF_MS,
kInitialBackOffMs * grpc_test_slowdown_factor());
const std::vector<int> ports = {grpc_pick_unused_port_or_die()};
auto response_generator = BuildResolverResponseGenerator();
FakeResolverResponseGeneratorWrapper response_generator;
auto channel = BuildChannel("pick_first", response_generator, args);
auto stub = BuildStub(channel);
response_generator.SetNextResolution(ports);
@ -876,7 +860,7 @@ TEST_F(PickFirstTest, BackOffMinReconnect) {
args.SetInt(GRPC_ARG_MIN_RECONNECT_BACKOFF_MS,
kMinReconnectBackOffMs * grpc_test_slowdown_factor());
const std::vector<int> ports = {grpc_pick_unused_port_or_die()};
auto response_generator = BuildResolverResponseGenerator();
FakeResolverResponseGeneratorWrapper response_generator;
auto channel = BuildChannel("pick_first", response_generator, args);
auto stub = BuildStub(channel);
response_generator.SetNextResolution(ports);
@ -904,7 +888,7 @@ TEST_F(PickFirstTest, ResetConnectionBackoff) {
args.SetInt(GRPC_ARG_INITIAL_RECONNECT_BACKOFF_MS,
kInitialBackOffMs * grpc_test_slowdown_factor());
const std::vector<int> ports = {grpc_pick_unused_port_or_die()};
auto response_generator = BuildResolverResponseGenerator();
FakeResolverResponseGeneratorWrapper response_generator;
auto channel = BuildChannel("pick_first", response_generator, args);
auto stub = BuildStub(channel);
response_generator.SetNextResolution(ports);
@ -943,7 +927,7 @@ TEST_F(ClientLbEnd2endTest,
const int kInitialBackOffMs = 5000;
args.SetInt(GRPC_ARG_INITIAL_RECONNECT_BACKOFF_MS,
kInitialBackOffMs * grpc_test_slowdown_factor());
auto response_generator = BuildResolverResponseGenerator();
FakeResolverResponseGeneratorWrapper response_generator;
auto channel = BuildChannel("pick_first", response_generator, args);
auto stub = BuildStub(channel);
response_generator.SetNextResolution({port});
@ -983,7 +967,7 @@ TEST_F(PickFirstTest, Updates) {
// Start servers and send one RPC per server.
const int kNumServers = 3;
StartServers(kNumServers);
auto response_generator = BuildResolverResponseGenerator();
FakeResolverResponseGeneratorWrapper response_generator;
auto channel = BuildChannel("pick_first", response_generator);
auto stub = BuildStub(channel);
// Perform one RPC against the first server.
@ -1012,7 +996,7 @@ TEST_F(PickFirstTest, UpdateSuperset) {
// Start servers and send one RPC per server.
const int kNumServers = 3;
StartServers(kNumServers);
auto response_generator = BuildResolverResponseGenerator();
FakeResolverResponseGeneratorWrapper response_generator;
auto channel = BuildChannel("pick_first", response_generator);
auto stub = BuildStub(channel);
@ -1045,7 +1029,7 @@ TEST_F(PickFirstTest, UpdateToUnconnected) {
const int kNumServers = 2;
CreateServers(kNumServers);
StartServer(0);
auto response_generator = BuildResolverResponseGenerator();
FakeResolverResponseGeneratorWrapper response_generator;
auto channel = BuildChannel("pick_first", response_generator);
auto stub = BuildStub(channel);
@ -1080,11 +1064,11 @@ TEST_F(PickFirstTest, GlobalSubchannelPool) {
StartServers(kNumServers);
std::vector<int> ports = GetServersPorts();
// Create two channels that (by default) use the global subchannel pool.
auto response_generator1 = BuildResolverResponseGenerator();
FakeResolverResponseGeneratorWrapper response_generator1;
auto channel1 = BuildChannel("pick_first", response_generator1);
auto stub1 = BuildStub(channel1);
response_generator1.SetNextResolution(ports);
auto response_generator2 = BuildResolverResponseGenerator();
FakeResolverResponseGeneratorWrapper response_generator2;
auto channel2 = BuildChannel("pick_first", response_generator2);
auto stub2 = BuildStub(channel2);
response_generator2.SetNextResolution(ports);
@ -1107,11 +1091,11 @@ TEST_F(PickFirstTest, LocalSubchannelPool) {
// Create two channels that use local subchannel pool.
ChannelArguments args;
args.SetInt(GRPC_ARG_USE_LOCAL_SUBCHANNEL_POOL, 1);
auto response_generator1 = BuildResolverResponseGenerator();
FakeResolverResponseGeneratorWrapper response_generator1;
auto channel1 = BuildChannel("pick_first", response_generator1, args);
auto stub1 = BuildStub(channel1);
response_generator1.SetNextResolution(ports);
auto response_generator2 = BuildResolverResponseGenerator();
FakeResolverResponseGeneratorWrapper response_generator2;
auto channel2 = BuildChannel("pick_first", response_generator2, args);
auto stub2 = BuildStub(channel2);
response_generator2.SetNextResolution(ports);
@ -1130,7 +1114,7 @@ TEST_F(PickFirstTest, ManyUpdates) {
const int kNumUpdates = 1000;
const int kNumServers = 3;
StartServers(kNumServers);
auto response_generator = BuildResolverResponseGenerator();
FakeResolverResponseGeneratorWrapper response_generator;
auto channel = BuildChannel("pick_first", response_generator);
auto stub = BuildStub(channel);
std::vector<int> ports = GetServersPorts();
@ -1159,7 +1143,7 @@ TEST_F(PickFirstTest, ReresolutionNoSelected) {
dead_ports.emplace_back(grpc_pick_unused_port_or_die());
}
}
auto response_generator = BuildResolverResponseGenerator();
FakeResolverResponseGeneratorWrapper response_generator;
auto channel = BuildChannel("pick_first", response_generator);
auto stub = BuildStub(channel);
// The initial resolution only contains dead ports. There won't be any
@ -1190,7 +1174,7 @@ TEST_F(PickFirstTest, ReresolutionNoSelected) {
TEST_F(PickFirstTest, ReconnectWithoutNewResolverResult) {
std::vector<int> ports = {grpc_pick_unused_port_or_die()};
StartServers(1, ports);
auto response_generator = BuildResolverResponseGenerator();
FakeResolverResponseGeneratorWrapper response_generator;
auto channel = BuildChannel("pick_first", response_generator);
auto stub = BuildStub(channel);
response_generator.SetNextResolution(ports);
@ -1209,7 +1193,7 @@ TEST_F(PickFirstTest, ReconnectWithoutNewResolverResultStartsFromTopOfList) {
grpc_pick_unused_port_or_die()};
CreateServers(2, ports);
StartServer(1);
auto response_generator = BuildResolverResponseGenerator();
FakeResolverResponseGeneratorWrapper response_generator;
auto channel = BuildChannel("pick_first", response_generator);
auto stub = BuildStub(channel);
response_generator.SetNextResolution(ports);
@ -1224,7 +1208,7 @@ TEST_F(PickFirstTest, ReconnectWithoutNewResolverResultStartsFromTopOfList) {
}
TEST_F(PickFirstTest, FailsEmptyResolverUpdate) {
auto response_generator = BuildResolverResponseGenerator();
FakeResolverResponseGeneratorWrapper response_generator;
auto channel = BuildChannel("pick_first", response_generator);
auto stub = BuildStub(channel);
gpr_log(GPR_INFO, "****** SENDING INITIAL RESOLVER RESULT *******");
@ -1260,7 +1244,7 @@ TEST_F(PickFirstTest, FailsEmptyResolverUpdate) {
TEST_F(PickFirstTest, CheckStateBeforeStartWatch) {
std::vector<int> ports = {grpc_pick_unused_port_or_die()};
StartServers(1, ports);
auto response_generator = BuildResolverResponseGenerator();
FakeResolverResponseGeneratorWrapper response_generator;
auto channel_1 = BuildChannel("pick_first", response_generator);
auto stub_1 = BuildStub(channel_1);
response_generator.SetNextResolution(ports);
@ -1273,7 +1257,7 @@ TEST_F(PickFirstTest, CheckStateBeforeStartWatch) {
// create a new subchannel and hold a ref to it.
StartServers(1, ports);
gpr_log(GPR_INFO, "****** SERVER RESTARTED *******");
auto response_generator_2 = BuildResolverResponseGenerator();
FakeResolverResponseGeneratorWrapper response_generator_2;
auto channel_2 = BuildChannel("pick_first", response_generator_2);
auto stub_2 = BuildStub(channel_2);
response_generator_2.SetNextResolution(ports);
@ -1302,7 +1286,7 @@ TEST_F(PickFirstTest, IdleOnDisconnect) {
// Start server, send RPC, and make sure channel is READY.
const int kNumServers = 1;
StartServers(kNumServers);
auto response_generator = BuildResolverResponseGenerator();
FakeResolverResponseGeneratorWrapper response_generator;
auto channel =
BuildChannel("", response_generator); // pick_first is the default.
auto stub = BuildStub(channel);
@ -1318,7 +1302,7 @@ TEST_F(PickFirstTest, IdleOnDisconnect) {
}
TEST_F(PickFirstTest, PendingUpdateAndSelectedSubchannelFails) {
auto response_generator = BuildResolverResponseGenerator();
FakeResolverResponseGeneratorWrapper response_generator;
auto channel =
BuildChannel("", response_generator); // pick_first is the default.
auto stub = BuildStub(channel);
@ -1365,7 +1349,7 @@ TEST_F(PickFirstTest, StaysIdleUponEmptyUpdate) {
// Start server, send RPC, and make sure channel is READY.
const int kNumServers = 1;
StartServers(kNumServers);
auto response_generator = BuildResolverResponseGenerator();
FakeResolverResponseGeneratorWrapper response_generator;
auto channel =
BuildChannel("", response_generator); // pick_first is the default.
auto stub = BuildStub(channel);
@ -1399,7 +1383,7 @@ TEST_F(PickFirstTest,
ChannelArguments args;
args.SetInt(GRPC_ARG_INITIAL_RECONNECT_BACKOFF_MS,
1000 * grpc_test_slowdown_factor());
auto response_generator = BuildResolverResponseGenerator();
FakeResolverResponseGeneratorWrapper response_generator;
auto channel = BuildChannel("", response_generator, args);
auto stub = BuildStub(channel);
response_generator.SetNextResolution(ports);
@ -1429,7 +1413,7 @@ TEST_F(RoundRobinTest, Basic) {
// Start servers and send one RPC per server.
const int kNumServers = 3;
StartServers(kNumServers);
auto response_generator = BuildResolverResponseGenerator();
FakeResolverResponseGeneratorWrapper response_generator;
auto channel = BuildChannel("round_robin", response_generator);
auto stub = BuildStub(channel);
response_generator.SetNextResolution(GetServersPorts());
@ -1456,7 +1440,7 @@ TEST_F(RoundRobinTest, Basic) {
TEST_F(RoundRobinTest, ProcessPending) {
StartServers(1); // Single server
auto response_generator = BuildResolverResponseGenerator();
FakeResolverResponseGeneratorWrapper response_generator;
auto channel = BuildChannel("round_robin", response_generator);
auto stub = BuildStub(channel);
response_generator.SetNextResolution({servers_[0]->port_});
@ -1466,7 +1450,7 @@ TEST_F(RoundRobinTest, ProcessPending) {
// target (even if it happened over a different channel, because subchannels
// are globally reused). Progress should happen without any transition from
// this READY state.
auto second_response_generator = BuildResolverResponseGenerator();
FakeResolverResponseGeneratorWrapper second_response_generator;
auto second_channel = BuildChannel("round_robin", second_response_generator);
auto second_stub = BuildStub(second_channel);
second_response_generator.SetNextResolution({servers_[0]->port_});
@ -1477,7 +1461,7 @@ TEST_F(RoundRobinTest, Updates) {
// Start servers.
const int kNumServers = 3;
StartServers(kNumServers);
auto response_generator = BuildResolverResponseGenerator();
FakeResolverResponseGeneratorWrapper response_generator;
auto channel = BuildChannel("round_robin", response_generator);
auto stub = BuildStub(channel);
// Start with a single server.
@ -1552,7 +1536,7 @@ TEST_F(RoundRobinTest, Updates) {
TEST_F(RoundRobinTest, UpdateInError) {
StartServers(2);
auto response_generator = BuildResolverResponseGenerator();
FakeResolverResponseGeneratorWrapper response_generator;
auto channel = BuildChannel("round_robin", response_generator);
auto stub = BuildStub(channel);
// Start with a single server.
@ -1593,7 +1577,7 @@ TEST_F(RoundRobinTest, ManyUpdates) {
// Start servers and send one RPC per server.
const int kNumServers = 3;
StartServers(kNumServers);
auto response_generator = BuildResolverResponseGenerator();
FakeResolverResponseGeneratorWrapper response_generator;
auto channel = BuildChannel("round_robin", response_generator);
auto stub = BuildStub(channel);
std::vector<int> ports = GetServersPorts();
@ -1611,7 +1595,7 @@ TEST_F(RoundRobinTest, ReresolveOnSubchannelConnectionFailure) {
// Start 3 servers.
StartServers(3);
// Create channel.
auto response_generator = BuildResolverResponseGenerator();
FakeResolverResponseGeneratorWrapper response_generator;
auto channel = BuildChannel("round_robin", response_generator);
auto stub = BuildStub(channel);
// Initially, tell the channel about only the first two servers.
@ -1634,7 +1618,7 @@ TEST_F(RoundRobinTest, ReresolveOnSubchannelConnectionFailure) {
}
TEST_F(RoundRobinTest, FailsEmptyResolverUpdate) {
auto response_generator = BuildResolverResponseGenerator();
FakeResolverResponseGeneratorWrapper response_generator;
auto channel = BuildChannel("round_robin", response_generator);
auto stub = BuildStub(channel);
gpr_log(GPR_INFO, "****** SENDING INITIAL RESOLVER RESULT *******");
@ -1671,7 +1655,7 @@ TEST_F(RoundRobinTest, TransientFailure) {
// Start servers and create channel. Channel should go to READY state.
const int kNumServers = 3;
StartServers(kNumServers);
auto response_generator = BuildResolverResponseGenerator();
FakeResolverResponseGeneratorWrapper response_generator;
auto channel = BuildChannel("round_robin", response_generator);
auto stub = BuildStub(channel);
response_generator.SetNextResolution(GetServersPorts());
@ -1692,7 +1676,7 @@ TEST_F(RoundRobinTest, TransientFailure) {
TEST_F(RoundRobinTest, TransientFailureAtStartup) {
// Create channel and return servers that don't exist. Channel should
// quickly transition into TRANSIENT_FAILURE.
auto response_generator = BuildResolverResponseGenerator();
FakeResolverResponseGeneratorWrapper response_generator;
auto channel = BuildChannel("round_robin", response_generator);
auto stub = BuildStub(channel);
response_generator.SetNextResolution({
@ -1718,7 +1702,7 @@ TEST_F(RoundRobinTest, StaysInTransientFailureInSubsequentConnecting) {
// Get port.
const int port = grpc_pick_unused_port_or_die();
// Create channel.
auto response_generator = BuildResolverResponseGenerator();
FakeResolverResponseGeneratorWrapper response_generator;
auto channel = BuildChannel("round_robin", response_generator);
auto stub = BuildStub(channel);
response_generator.SetNextResolution({port});
@ -1756,7 +1740,7 @@ TEST_F(RoundRobinTest, ReportsLatestStatusInTransientFailure) {
const std::vector<int> ports = {grpc_pick_unused_port_or_die(),
grpc_pick_unused_port_or_die()};
// Create channel.
auto response_generator = BuildResolverResponseGenerator();
FakeResolverResponseGeneratorWrapper response_generator;
auto channel = BuildChannel("round_robin", response_generator);
auto stub = BuildStub(channel);
response_generator.SetNextResolution(ports);
@ -1801,7 +1785,7 @@ TEST_F(RoundRobinTest, DoesNotFailRpcsUponDisconnection) {
// Start server.
StartServers(1);
// Create channel.
auto response_generator = BuildResolverResponseGenerator();
FakeResolverResponseGeneratorWrapper response_generator;
auto channel = BuildChannel("round_robin", response_generator);
auto stub = BuildStub(channel);
response_generator.SetNextResolution(GetServersPorts());
@ -1858,7 +1842,7 @@ TEST_F(RoundRobinTest, SingleReconnect) {
const int kNumServers = 3;
StartServers(kNumServers);
const auto ports = GetServersPorts();
auto response_generator = BuildResolverResponseGenerator();
FakeResolverResponseGeneratorWrapper response_generator;
auto channel = BuildChannel("round_robin", response_generator);
auto stub = BuildStub(channel);
response_generator.SetNextResolution(ports);
@ -1915,7 +1899,7 @@ TEST_F(RoundRobinTest, ServersHealthCheckingUnimplementedTreatedAsHealthy) {
args.SetServiceConfigJSON(
"{\"healthCheckConfig\": "
"{\"serviceName\": \"health_check_service_name\"}}");
auto response_generator = BuildResolverResponseGenerator();
FakeResolverResponseGeneratorWrapper response_generator;
auto channel = BuildChannel("round_robin", response_generator, args);
auto stub = BuildStub(channel);
response_generator.SetNextResolution({servers_[0]->port_});
@ -1932,7 +1916,7 @@ TEST_F(RoundRobinTest, HealthChecking) {
args.SetServiceConfigJSON(
"{\"healthCheckConfig\": "
"{\"serviceName\": \"health_check_service_name\"}}");
auto response_generator = BuildResolverResponseGenerator();
FakeResolverResponseGeneratorWrapper response_generator;
auto channel = BuildChannel("round_robin", response_generator, args);
auto stub = BuildStub(channel);
response_generator.SetNextResolution(GetServersPorts());
@ -2028,7 +2012,7 @@ TEST_F(RoundRobinTest, HealthCheckingHandlesSubchannelFailure) {
args.SetServiceConfigJSON(
"{\"healthCheckConfig\": "
"{\"serviceName\": \"health_check_service_name\"}}");
auto response_generator = BuildResolverResponseGenerator();
FakeResolverResponseGeneratorWrapper response_generator;
auto channel = BuildChannel("round_robin", response_generator, args);
auto stub = BuildStub(channel);
response_generator.SetNextResolution(GetServersPorts());
@ -2053,14 +2037,14 @@ TEST_F(RoundRobinTest, WithHealthCheckingInhibitPerChannel) {
args.SetServiceConfigJSON(
"{\"healthCheckConfig\": "
"{\"serviceName\": \"health_check_service_name\"}}");
auto response_generator1 = BuildResolverResponseGenerator();
FakeResolverResponseGeneratorWrapper response_generator1;
auto channel1 = BuildChannel("round_robin", response_generator1, args);
auto stub1 = BuildStub(channel1);
std::vector<int> ports = GetServersPorts();
response_generator1.SetNextResolution(ports);
// Create a channel with health checking enabled but inhibited.
args.SetInt(GRPC_ARG_INHIBIT_HEALTH_CHECKING, 1);
auto response_generator2 = BuildResolverResponseGenerator();
FakeResolverResponseGeneratorWrapper response_generator2;
auto channel2 = BuildChannel("round_robin", response_generator2, args);
auto stub2 = BuildStub(channel2);
response_generator2.SetNextResolution(ports);
@ -2098,7 +2082,7 @@ TEST_F(RoundRobinTest, HealthCheckingServiceNamePerChannel) {
args.SetServiceConfigJSON(
"{\"healthCheckConfig\": "
"{\"serviceName\": \"health_check_service_name\"}}");
auto response_generator1 = BuildResolverResponseGenerator();
FakeResolverResponseGeneratorWrapper response_generator1;
auto channel1 = BuildChannel("round_robin", response_generator1, args);
auto stub1 = BuildStub(channel1);
std::vector<int> ports = GetServersPorts();
@ -2109,7 +2093,7 @@ TEST_F(RoundRobinTest, HealthCheckingServiceNamePerChannel) {
args2.SetServiceConfigJSON(
"{\"healthCheckConfig\": "
"{\"serviceName\": \"health_check_service_name2\"}}");
auto response_generator2 = BuildResolverResponseGenerator();
FakeResolverResponseGeneratorWrapper response_generator2;
auto channel2 = BuildChannel("round_robin", response_generator2, args2);
auto stub2 = BuildStub(channel2);
response_generator2.SetNextResolution(ports);
@ -2149,7 +2133,7 @@ TEST_F(RoundRobinTest,
const char* kServiceConfigJson =
"{\"healthCheckConfig\": "
"{\"serviceName\": \"health_check_service_name\"}}";
auto response_generator = BuildResolverResponseGenerator();
FakeResolverResponseGeneratorWrapper response_generator;
auto channel = BuildChannel("round_robin", response_generator);
auto stub = BuildStub(channel);
std::vector<int> ports = GetServersPorts();
@ -2179,7 +2163,7 @@ TEST_F(RoundRobinTest, HealthCheckingRetryOnStreamEnd) {
args.SetServiceConfigJSON(
"{\"healthCheckConfig\": "
"{\"serviceName\": \"health_check_service_name\"}}");
auto response_generator = BuildResolverResponseGenerator();
FakeResolverResponseGeneratorWrapper response_generator;
auto channel = BuildChannel("round_robin", response_generator, args);
response_generator.SetNextResolution(GetServersPorts());
EXPECT_FALSE(WaitForChannelReady(channel.get()));
@ -2250,7 +2234,7 @@ ClientLbPickArgsTest* ClientLbPickArgsTest::current_test_instance_ = nullptr;
TEST_F(ClientLbPickArgsTest, Basic) {
const int kNumServers = 1;
StartServers(kNumServers);
auto response_generator = BuildResolverResponseGenerator();
FakeResolverResponseGeneratorWrapper response_generator;
auto channel = BuildChannel("test_pick_args_lb", response_generator);
auto stub = BuildStub(channel);
response_generator.SetNextResolution(GetServersPorts());
@ -2431,7 +2415,7 @@ class ClientLbInterceptTrailingMetadataTest : public ClientLbEnd2endTest {
const int kNumServers = 1;
const int kNumRpcs = 10;
StartServers(kNumServers);
auto response_generator = BuildResolverResponseGenerator();
FakeResolverResponseGeneratorWrapper response_generator;
auto channel =
BuildChannel("intercept_trailing_metadata_lb", response_generator);
auto stub = BuildStub(channel);
@ -2480,7 +2464,7 @@ ClientLbInterceptTrailingMetadataTest*
TEST_F(ClientLbInterceptTrailingMetadataTest, StatusOk) {
StartServers(1);
auto response_generator = BuildResolverResponseGenerator();
FakeResolverResponseGeneratorWrapper response_generator;
auto channel =
BuildChannel("intercept_trailing_metadata_lb", response_generator);
auto stub = BuildStub(channel);
@ -2496,7 +2480,7 @@ TEST_F(ClientLbInterceptTrailingMetadataTest, StatusOk) {
TEST_F(ClientLbInterceptTrailingMetadataTest, StatusFailed) {
StartServers(1);
auto response_generator = BuildResolverResponseGenerator();
FakeResolverResponseGeneratorWrapper response_generator;
auto channel =
BuildChannel("intercept_trailing_metadata_lb", response_generator);
auto stub = BuildStub(channel);
@ -2517,7 +2501,7 @@ TEST_F(ClientLbInterceptTrailingMetadataTest, StatusFailed) {
TEST_F(ClientLbInterceptTrailingMetadataTest,
StatusCancelledWithoutStartingRecvTrailingMetadata) {
StartServers(1);
auto response_generator = BuildResolverResponseGenerator();
FakeResolverResponseGeneratorWrapper response_generator;
auto channel =
BuildChannel("intercept_trailing_metadata_lb", response_generator);
response_generator.SetNextResolution(GetServersPorts());
@ -2542,7 +2526,7 @@ TEST_F(ClientLbInterceptTrailingMetadataTest, InterceptsRetriesDisabled) {
const int kNumServers = 1;
const int kNumRpcs = 10;
StartServers(kNumServers);
auto response_generator = BuildResolverResponseGenerator();
FakeResolverResponseGeneratorWrapper response_generator;
ChannelArguments channel_args;
channel_args.SetInt(GRPC_ARG_ENABLE_RETRIES, 0);
auto channel = BuildChannel("intercept_trailing_metadata_lb",
@ -2586,7 +2570,7 @@ TEST_F(ClientLbInterceptTrailingMetadataTest, InterceptsRetriesEnabled) {
" }\n"
" } ]\n"
"}");
auto response_generator = BuildResolverResponseGenerator();
FakeResolverResponseGeneratorWrapper response_generator;
auto channel =
BuildChannel("intercept_trailing_metadata_lb", response_generator, args);
auto stub = BuildStub(channel);
@ -2691,7 +2675,7 @@ TEST_F(ClientLbInterceptTrailingMetadataTest, BackendMetricDataMerge) {
.SetUtilization("foo", 0.99)
.SetUtilization("bar", 0.1)
.Build();
auto response_generator = BuildResolverResponseGenerator();
FakeResolverResponseGeneratorWrapper response_generator;
auto channel =
BuildChannel("intercept_trailing_metadata_lb", response_generator);
auto stub = BuildStub(channel);
@ -2821,7 +2805,7 @@ ClientLbAddressTest* ClientLbAddressTest::current_test_instance_ = nullptr;
TEST_F(ClientLbAddressTest, Basic) {
const int kNumServers = 1;
StartServers(kNumServers);
auto response_generator = BuildResolverResponseGenerator();
FakeResolverResponseGeneratorWrapper response_generator;
auto channel = BuildChannel("address_test_lb", response_generator);
auto stub = BuildStub(channel);
// Addresses returned by the resolver will have attached args.
@ -2834,9 +2818,8 @@ TEST_F(ClientLbAddressTest, Basic) {
// Make sure that the attributes wind up on the subchannels.
std::vector<std::string> expected;
for (const int port : GetServersPorts()) {
expected.emplace_back(
absl::StrCat("addrs=[", ipv6_only_ ? "[::1]:" : "127.0.0.1:", port,
"] args={test_key=test_value}"));
expected.emplace_back(absl::StrCat("addrs=[", grpc_core::LocalIp(), ":",
port, "] args={test_key=test_value}"));
}
EXPECT_EQ(addresses_seen(), expected);
}
@ -2906,7 +2889,7 @@ TEST_F(OobBackendMetricTest, Basic) {
servers_[0]->server_metric_recorder_->SetQps(0.4);
servers_[0]->server_metric_recorder_->SetNamedUtilization(kMetricName, 0.4);
// Start client.
auto response_generator = BuildResolverResponseGenerator();
FakeResolverResponseGeneratorWrapper response_generator;
auto channel = BuildChannel("oob_backend_metric_test_lb", response_generator);
auto stub = BuildStub(channel);
response_generator.SetNextResolution(GetServersPorts());
@ -2993,7 +2976,7 @@ class ControlPlaneStatusRewritingTest : public ClientLbEnd2endTest {
TEST_F(ControlPlaneStatusRewritingTest, RewritesFromLb) {
// Start client.
auto response_generator = BuildResolverResponseGenerator();
FakeResolverResponseGeneratorWrapper response_generator;
auto channel = BuildChannel("fail_lb", response_generator);
auto stub = BuildStub(channel);
response_generator.SetNextResolution(GetServersPorts());
@ -3005,7 +2988,7 @@ TEST_F(ControlPlaneStatusRewritingTest, RewritesFromLb) {
TEST_F(ControlPlaneStatusRewritingTest, RewritesFromResolver) {
// Start client.
auto response_generator = BuildResolverResponseGenerator();
FakeResolverResponseGeneratorWrapper response_generator;
auto channel = BuildChannel("pick_first", response_generator);
auto stub = BuildStub(channel);
grpc_core::Resolver::Result result;
@ -3035,7 +3018,7 @@ TEST_F(ControlPlaneStatusRewritingTest, RewritesFromConfigSelector) {
absl::Status status_;
};
// Start client.
auto response_generator = BuildResolverResponseGenerator();
FakeResolverResponseGeneratorWrapper response_generator;
auto channel = BuildChannel("pick_first", response_generator);
auto stub = BuildStub(channel);
auto config_selector =
@ -3150,7 +3133,7 @@ TEST_F(WeightedRoundRobinTest, CallAndServerMetric) {
servers_[2]->server_metric_recorder_->SetEps(20);
servers_[2]->server_metric_recorder_->SetQps(200);
// Create channel.
auto response_generator = BuildResolverResponseGenerator();
FakeResolverResponseGeneratorWrapper response_generator;
auto channel = BuildChannel("", response_generator);
auto stub = BuildStub(channel);
response_generator.SetNextResolution(GetServersPorts(),
@ -3197,7 +3180,7 @@ TEST_F(WeightedRoundRobinTest, WithOutlierDetection) {
// Create channel.
// Initial blackout period is 0, so that we start seeing traffic in
// the right proportions right away.
auto response_generator = BuildResolverResponseGenerator();
FakeResolverResponseGeneratorWrapper response_generator;
auto channel = BuildChannel("", response_generator);
auto stub = BuildStub(channel);
response_generator.SetNextResolution(
@ -3258,7 +3241,7 @@ TEST_P(WeightedRoundRobinParamTest, Basic) {
servers_[2]->server_metric_recorder_->SetEps(5);
servers_[2]->server_metric_recorder_->SetQps(200);
// Create channel.
auto response_generator = BuildResolverResponseGenerator();
FakeResolverResponseGeneratorWrapper response_generator;
auto channel = BuildChannel("", response_generator);
auto stub = BuildStub(channel);
response_generator.SetNextResolution(GetServersPorts(), GetParam());

@ -389,11 +389,6 @@ class GrpclbEnd2endTest : public ::testing::Test {
static void TearDownTestSuite() { grpc_shutdown(); }
void SetUp() override {
bool localhost_resolves_to_ipv4 = false;
bool localhost_resolves_to_ipv6 = false;
grpc_core::LocalhostResolves(&localhost_resolves_to_ipv4,
&localhost_resolves_to_ipv6);
ipv6_only_ = !localhost_resolves_to_ipv4 && localhost_resolves_to_ipv6;
response_generator_ =
grpc_core::MakeRefCounted<grpc_core::FakeResolverResponseGenerator>();
// Start the backends.
@ -560,8 +555,7 @@ class GrpclbEnd2endTest : public ::testing::Test {
grpc_core::EndpointAddressesList addresses;
for (const auto& addr : address_data) {
absl::StatusOr<grpc_core::URI> lb_uri =
grpc_core::URI::Parse(absl::StrCat(
ipv6_only_ ? "ipv6:[::1]:" : "ipv4:127.0.0.1:", addr.port));
grpc_core::URI::Parse(grpc_core::LocalIpUri(addr.port));
GPR_ASSERT(lb_uri.ok());
grpc_resolved_address address;
GPR_ASSERT(grpc_parse_uri(*lb_uri, &address));
@ -649,8 +643,9 @@ class GrpclbEnd2endTest : public ::testing::Test {
}
for (const int& backend_port : backend_ports) {
auto* server = response.mutable_server_list()->add_servers();
server->set_ip_address(ipv6_only_ ? Ip6ToPackedString("::1")
: Ip4ToPackedString("127.0.0.1"));
server->set_ip_address(grpc_core::RunningWithIPv6Only()
? Ip6ToPackedString("::1")
: Ip4ToPackedString("127.0.0.1"));
server->set_port(backend_port);
static int token_count = 0;
server->set_load_balance_token(
@ -757,7 +752,6 @@ class GrpclbEnd2endTest : public ::testing::Test {
const size_t num_backends_;
const size_t num_balancers_;
const int client_load_reporting_interval_seconds_;
bool ipv6_only_ = false;
std::shared_ptr<Channel> channel_;
std::unique_ptr<grpc::testing::EchoTestService::Stub> stub_;
std::vector<std::unique_ptr<ServerThread<BackendServiceImpl>>> backends_;

@ -174,11 +174,6 @@ class RlsEnd2endTest : public ::testing::Test {
}
void SetUp() override {
bool localhost_resolves_to_ipv4 = false;
bool localhost_resolves_to_ipv6 = false;
grpc_core::LocalhostResolves(&localhost_resolves_to_ipv4,
&localhost_resolves_to_ipv6);
ipv6_only_ = !localhost_resolves_to_ipv4 && localhost_resolves_to_ipv6;
rls_server_ = std::make_unique<ServerThread<RlsServiceImpl>>(
"rls", [](grpc::ServerContext* ctx) {
EXPECT_THAT(ctx->client_metadata(),
@ -228,11 +223,6 @@ class RlsEnd2endTest : public ::testing::Test {
}
}
std::string TargetStringForPort(int port) {
if (ipv6_only_) return absl::StrCat("ipv6:[::1]:", port);
return absl::StrCat("ipv4:127.0.0.1:", port);
}
struct RpcOptions {
int timeout_ms = 2000;
bool wait_for_ready = false;
@ -465,7 +455,6 @@ class RlsEnd2endTest : public ::testing::Test {
bool running_ = false;
};
bool ipv6_only_;
std::vector<std::unique_ptr<ServerThread<MyTestServiceImpl>>> backends_;
std::unique_ptr<ServerThread<RlsServiceImpl>> rls_server_;
std::unique_ptr<FakeResolverResponseGeneratorWrapper>
@ -494,7 +483,7 @@ TEST_F(RlsEnd2endTest, Basic) {
.Build());
rls_server_->service_.SetResponse(
BuildRlsRequest({{kTestKey, kTestValue}}),
BuildRlsResponse({TargetStringForPort(backends_[0]->port_)}));
BuildRlsResponse({grpc_core::LocalIpUri(backends_[0]->port_)}));
CheckRpcSendOk(DEBUG_LOCATION,
RpcOptions().set_metadata({{"key1", kTestValue}}));
EXPECT_EQ(rls_server_->service_.request_count(), 1);
@ -525,7 +514,7 @@ TEST_F(RlsEnd2endTest, DuplicateHeadersAreMerged) {
.Build());
rls_server_->service_.SetResponse(
BuildRlsRequest({{kTestKey, absl::StrCat(kTestValue, ",", kTestValue2)}}),
BuildRlsResponse({TargetStringForPort(backends_[0]->port_)}));
BuildRlsResponse({grpc_core::LocalIpUri(backends_[0]->port_)}));
// Same header present twice in the request. Values should be merged.
CheckRpcSendOk(
DEBUG_LOCATION,
@ -555,7 +544,7 @@ TEST_F(RlsEnd2endTest, SecondHeaderUsed) {
.Build());
rls_server_->service_.SetResponse(
BuildRlsRequest({{kTestKey, kTestValue}}),
BuildRlsResponse({TargetStringForPort(backends_[0]->port_)}));
BuildRlsResponse({grpc_core::LocalIpUri(backends_[0]->port_)}));
CheckRpcSendOk(DEBUG_LOCATION,
RpcOptions().set_metadata({{"key2", kTestValue}}));
EXPECT_EQ(rls_server_->service_.request_count(), 1);
@ -594,7 +583,7 @@ TEST_F(RlsEnd2endTest, MultipleHeaderKeys) {
{kTestKey, kTestValue},
{kTestKey2, kTestValue2},
}),
BuildRlsResponse({TargetStringForPort(backends_[0]->port_)}));
BuildRlsResponse({grpc_core::LocalIpUri(backends_[0]->port_)}));
CheckRpcSendOk(
DEBUG_LOCATION,
RpcOptions().set_metadata({{"key1", kTestValue}, {"key2", kTestValue2}}));
@ -625,7 +614,7 @@ TEST_F(RlsEnd2endTest, NoHeaderMatch) {
.Build());
rls_server_->service_.SetResponse(
BuildRlsRequest({}),
BuildRlsResponse({TargetStringForPort(backends_[0]->port_)}));
BuildRlsResponse({grpc_core::LocalIpUri(backends_[0]->port_)}));
// Request does not have header "key1", so kTestKey will not be added.
CheckRpcSendOk(DEBUG_LOCATION);
EXPECT_EQ(rls_server_->service_.request_count(), 1);
@ -651,7 +640,7 @@ TEST_F(RlsEnd2endTest, WildcardMethod) {
.Build());
rls_server_->service_.SetResponse(
BuildRlsRequest({{kTestKey, kTestValue}}),
BuildRlsResponse({TargetStringForPort(backends_[0]->port_)}));
BuildRlsResponse({grpc_core::LocalIpUri(backends_[0]->port_)}));
CheckRpcSendOk(DEBUG_LOCATION,
RpcOptions().set_metadata({{"key1", kTestValue}}));
EXPECT_EQ(rls_server_->service_.request_count(), 1);
@ -679,7 +668,7 @@ TEST_F(RlsEnd2endTest, NoKeyBuilderForMethod) {
.Build());
rls_server_->service_.SetResponse(
BuildRlsRequest({}),
BuildRlsResponse({TargetStringForPort(backends_[0]->port_)}));
BuildRlsResponse({grpc_core::LocalIpUri(backends_[0]->port_)}));
CheckRpcSendOk(DEBUG_LOCATION);
EXPECT_EQ(rls_server_->service_.request_count(), 1);
EXPECT_EQ(rls_server_->service_.response_count(), 1);
@ -707,7 +696,7 @@ TEST_F(RlsEnd2endTest, HeaderData) {
.Build());
rls_server_->service_.SetResponse(
BuildRlsRequest({{kTestKey, kTestValue}}),
BuildRlsResponse({TargetStringForPort(backends_[0]->port_)},
BuildRlsResponse({grpc_core::LocalIpUri(backends_[0]->port_)},
kHeaderData));
CheckRpcSendOk(DEBUG_LOCATION,
RpcOptions().set_metadata({{"key1", kTestValue}}));
@ -754,7 +743,7 @@ TEST_F(RlsEnd2endTest, ExtraKeysAndConstantKeys) {
{kMethodKey, kMethodValue},
{kConstantKey, kConstantValue},
}),
BuildRlsResponse({TargetStringForPort(backends_[0]->port_)}));
BuildRlsResponse({grpc_core::LocalIpUri(backends_[0]->port_)}));
CheckRpcSendOk(DEBUG_LOCATION,
RpcOptions().set_metadata({{"key1", kTestValue}}));
EXPECT_EQ(rls_server_->service_.request_count(), 1);
@ -783,10 +772,10 @@ TEST_F(RlsEnd2endTest, TwoCacheEntriesWithSameTarget) {
.Build());
rls_server_->service_.SetResponse(
BuildRlsRequest({{kTestKey, kTestValue}}),
BuildRlsResponse({TargetStringForPort(backends_[0]->port_)}));
BuildRlsResponse({grpc_core::LocalIpUri(backends_[0]->port_)}));
rls_server_->service_.SetResponse(
BuildRlsRequest({{kTestKey, kTestValue2}}),
BuildRlsResponse({TargetStringForPort(backends_[0]->port_)}));
BuildRlsResponse({grpc_core::LocalIpUri(backends_[0]->port_)}));
CheckRpcSendOk(DEBUG_LOCATION,
RpcOptions().set_metadata({{"key1", kTestValue}}));
EXPECT_EQ(rls_server_->service_.request_count(), 1);
@ -830,10 +819,10 @@ TEST_F(RlsEnd2endTest, FailedRlsRequestWithoutDefaultTarget) {
const char* kTestValue3 = "test_value_3";
rls_server_->service_.SetResponse(
BuildRlsRequest({{kTestKey, kTestValue2}}),
BuildRlsResponse({TargetStringForPort(backends_[0]->port_)}));
BuildRlsResponse({grpc_core::LocalIpUri(backends_[0]->port_)}));
rls_server_->service_.SetResponse(
BuildRlsRequest({{kTestKey, kTestValue3}}),
BuildRlsResponse({TargetStringForPort(backends_[0]->port_)}));
BuildRlsResponse({grpc_core::LocalIpUri(backends_[0]->port_)}));
CheckRpcSendOk(DEBUG_LOCATION,
RpcOptions().set_metadata({{"key1", kTestValue2}}));
CheckRpcSendOk(DEBUG_LOCATION,
@ -855,7 +844,7 @@ TEST_F(RlsEnd2endTest, FailedRlsRequestWithoutDefaultTarget) {
// Now give the RLS server the right response.
rls_server_->service_.SetResponse(
BuildRlsRequest({{kTestKey, kTestValue}}),
BuildRlsResponse({TargetStringForPort(backends_[0]->port_)}));
BuildRlsResponse({grpc_core::LocalIpUri(backends_[0]->port_)}));
// Sleep long enough for backoff to elapse, then try another RPC.
gpr_sleep_until(grpc_timeout_seconds_to_deadline(3));
CheckRpcSendOk(DEBUG_LOCATION,
@ -882,7 +871,7 @@ TEST_F(RlsEnd2endTest, FailedRlsRequestWithDefaultTarget) {
" }"
"]",
kServiceValue, kMethodValue, kTestKey))
.set_default_target(TargetStringForPort(backends_[0]->port_))
.set_default_target(grpc_core::LocalIpUri(backends_[0]->port_))
.Build());
// Don't give the RLS server a response, so the RLS request will fail.
// The data plane RPC should be sent to the default target.
@ -918,13 +907,13 @@ TEST_F(RlsEnd2endTest, RlsRequestTimeout) {
" }"
"]",
kServiceValue, kMethodValue, kTestKey))
.set_default_target(TargetStringForPort(backends_[1]->port_))
.set_default_target(grpc_core::LocalIpUri(backends_[1]->port_))
.set_lookup_service_timeout(grpc_core::Duration::Seconds(2))
.Build());
// RLS server will send a response, but it's longer than the timeout.
rls_server_->service_.SetResponse(
BuildRlsRequest({{kTestKey, kTestValue}}),
BuildRlsResponse({TargetStringForPort(backends_[0]->port_)}),
BuildRlsResponse({grpc_core::LocalIpUri(backends_[0]->port_)}),
/*response_delay=*/grpc_core::Duration::Seconds(3));
// The data plane RPC should be sent to the default target.
CheckRpcSendOk(DEBUG_LOCATION, RpcOptions().set_timeout_ms(4000).set_metadata(
@ -951,7 +940,7 @@ TEST_F(RlsEnd2endTest, UpdateConfig) {
" }"
"]",
kServiceValue, kMethodValue, kTestKey))
.set_default_target(TargetStringForPort(backends_[0]->port_));
.set_default_target(grpc_core::LocalIpUri(backends_[0]->port_));
SetNextResolution(service_config_builder.Build());
// Don't give the RLS server a response, so the RLS request will fail.
// The data plane RPC should be sent to the default target.
@ -971,7 +960,7 @@ TEST_F(RlsEnd2endTest, UpdateConfig) {
EXPECT_EQ(backends_[1]->service_.request_count(), 0);
// Now update the config to point to a new default target.
service_config_builder.set_default_target(
TargetStringForPort(backends_[1]->port_));
grpc_core::LocalIpUri(backends_[1]->port_));
SetNextResolution(service_config_builder.Build());
// Send another RPC, which should go to the new default target.
// The RLS server will *not* see another request, because the cache
@ -1004,7 +993,7 @@ TEST_F(RlsEnd2endTest, CachedResponse) {
.Build());
rls_server_->service_.SetResponse(
BuildRlsRequest({{kTestKey, kTestValue}}),
BuildRlsResponse({TargetStringForPort(backends_[0]->port_)}));
BuildRlsResponse({grpc_core::LocalIpUri(backends_[0]->port_)}));
// Send two RPCs.
CheckRpcSendOk(DEBUG_LOCATION,
RpcOptions().set_metadata({{"key1", kTestValue}}));
@ -1038,7 +1027,7 @@ TEST_F(RlsEnd2endTest, StaleCacheEntry) {
.Build());
rls_server_->service_.SetResponse(
BuildRlsRequest({{kTestKey, kTestValue}}),
BuildRlsResponse({TargetStringForPort(backends_[0]->port_)}));
BuildRlsResponse({grpc_core::LocalIpUri(backends_[0]->port_)}));
// Send one RPC. RLS server gets a request, and RPC goes to backend.
CheckRpcSendOk(DEBUG_LOCATION,
RpcOptions().set_metadata({{"key1", kTestValue}}));
@ -1051,7 +1040,7 @@ TEST_F(RlsEnd2endTest, StaleCacheEntry) {
rls_server_->service_.SetResponse(
BuildRlsRequest({{kTestKey, kTestValue}},
RouteLookupRequest::REASON_STALE),
BuildRlsResponse({TargetStringForPort(backends_[0]->port_)}));
BuildRlsResponse({grpc_core::LocalIpUri(backends_[0]->port_)}));
// Wait longer than stale age.
gpr_sleep_until(grpc_timeout_seconds_to_deadline(2));
// Send another RPC. This should use the stale value but should
@ -1088,7 +1077,7 @@ TEST_F(RlsEnd2endTest, StaleCacheEntryWithHeaderData) {
.Build());
rls_server_->service_.SetResponse(
BuildRlsRequest({{kTestKey, kTestValue}}),
BuildRlsResponse({TargetStringForPort(backends_[0]->port_)},
BuildRlsResponse({grpc_core::LocalIpUri(backends_[0]->port_)},
kHeaderData));
// Send one RPC. RLS server gets a request, and RPC goes to backend.
CheckRpcSendOk(DEBUG_LOCATION,
@ -1102,7 +1091,7 @@ TEST_F(RlsEnd2endTest, StaleCacheEntryWithHeaderData) {
rls_server_->service_.SetResponse(
BuildRlsRequest({{kTestKey, kTestValue}},
RouteLookupRequest::REASON_STALE, kHeaderData),
BuildRlsResponse({TargetStringForPort(backends_[0]->port_)},
BuildRlsResponse({grpc_core::LocalIpUri(backends_[0]->port_)},
kHeaderData));
// Wait longer than stale age.
gpr_sleep_until(grpc_timeout_seconds_to_deadline(2));
@ -1139,7 +1128,7 @@ TEST_F(RlsEnd2endTest, ExpiredCacheEntry) {
.Build());
rls_server_->service_.SetResponse(
BuildRlsRequest({{kTestKey, kTestValue}}),
BuildRlsResponse({TargetStringForPort(backends_[0]->port_)}));
BuildRlsResponse({grpc_core::LocalIpUri(backends_[0]->port_)}));
// Send one RPC. RLS server gets a request, and RPC goes to backend.
CheckRpcSendOk(DEBUG_LOCATION,
RpcOptions().set_metadata({{"key1", kTestValue}}));
@ -1185,10 +1174,10 @@ TEST_F(RlsEnd2endTest, CacheSizeLimit) {
// Set RLS responses for both kTestValue and kTestValue2.
rls_server_->service_.SetResponse(
BuildRlsRequest({{kTestKey, kTestValue}}),
BuildRlsResponse({TargetStringForPort(backends_[0]->port_)}));
BuildRlsResponse({grpc_core::LocalIpUri(backends_[0]->port_)}));
rls_server_->service_.SetResponse(
BuildRlsRequest({{kTestKey, kTestValue2}}),
BuildRlsResponse({TargetStringForPort(backends_[1]->port_)}));
BuildRlsResponse({grpc_core::LocalIpUri(backends_[1]->port_)}));
// Send an RPC for kTestValue.
// RLS server gets a request, and RPC goes to backend.
CheckRpcSendOk(DEBUG_LOCATION,
@ -1256,7 +1245,7 @@ TEST_F(RlsEnd2endTest, MultipleTargets) {
BuildRlsResponse(
// Second target will report TRANSIENT_FAILURE, but should
// never be used.
{TargetStringForPort(backends_[0]->port_), "invalid_target"}));
{grpc_core::LocalIpUri(backends_[0]->port_), "invalid_target"}));
CheckRpcSendOk(DEBUG_LOCATION,
RpcOptions().set_metadata({{"key1", kTestValue}}));
EXPECT_EQ(rls_server_->service_.request_count(), 1);
@ -1286,7 +1275,7 @@ TEST_F(RlsEnd2endTest, MultipleTargetsFirstInTransientFailure) {
BuildRlsRequest({{kTestKey, kTestValue}}),
BuildRlsResponse(
// First target will report TRANSIENT_FAILURE.
{"invalid_target", TargetStringForPort(backends_[0]->port_)}));
{"invalid_target", grpc_core::LocalIpUri(backends_[0]->port_)}));
CheckRpcSendOk(DEBUG_LOCATION,
RpcOptions().set_metadata({{"key1", kTestValue}}));
EXPECT_EQ(rls_server_->service_.request_count(), 1);
@ -1317,7 +1306,7 @@ TEST_F(RlsEnd2endTest, ConnectivityStateReady) {
BuildRlsRequest({{kTestKey, kTestValue}}),
BuildRlsResponse(
// One target in TRANSIENT_FAILURE, the other in READY.
{"invalid_target", TargetStringForPort(backends_[0]->port_)}));
{"invalid_target", grpc_core::LocalIpUri(backends_[0]->port_)}));
CheckRpcSendOk(DEBUG_LOCATION,
RpcOptions().set_metadata({{"key1", kTestValue}}));
EXPECT_EQ(rls_server_->service_.request_count(), 1);

@ -134,11 +134,6 @@ class ServiceConfigEnd2endTest : public ::testing::Test {
grpc_init();
response_generator_ =
grpc_core::MakeRefCounted<grpc_core::FakeResolverResponseGenerator>();
bool localhost_resolves_to_ipv4 = false;
bool localhost_resolves_to_ipv6 = false;
grpc_core::LocalhostResolves(&localhost_resolves_to_ipv4,
&localhost_resolves_to_ipv6);
ipv6_only_ = !localhost_resolves_to_ipv4 && localhost_resolves_to_ipv6;
}
void TearDown() override {
@ -178,9 +173,8 @@ class ServiceConfigEnd2endTest : public ::testing::Test {
grpc_core::Resolver::Result result;
result.addresses = grpc_core::EndpointAddressesList();
for (const int& port : ports) {
std::string lb_uri_str =
absl::StrCat(ipv6_only_ ? "ipv6:[::1]:" : "ipv4:127.0.0.1:", port);
absl::StatusOr<grpc_core::URI> lb_uri = grpc_core::URI::Parse(lb_uri_str);
absl::StatusOr<grpc_core::URI> lb_uri =
grpc_core::URI::Parse(grpc_core::LocalIpUri(port));
GPR_ASSERT(lb_uri.ok());
grpc_resolved_address address;
GPR_ASSERT(grpc_parse_uri(*lb_uri, &address));
@ -433,7 +427,6 @@ class ServiceConfigEnd2endTest : public ::testing::Test {
return "{\"version\": \"invalid_default\"";
}
bool ipv6_only_ = false;
const std::string server_host_;
std::unique_ptr<grpc::testing::EchoTestService::Stub> stub_;
std::vector<std::unique_ptr<ServerData>> servers_;

@ -195,16 +195,9 @@ class TlsKeyLoggingEnd2EndTest : public ::testing::TestWithParam<TestScenario> {
server_thread_ =
std::thread(&TlsKeyLoggingEnd2EndTest::RunServerLoop, this);
bool localhost_resolves_to_ipv4 = false;
bool localhost_resolves_to_ipv6 = false;
grpc_core::LocalhostResolves(&localhost_resolves_to_ipv4,
&localhost_resolves_to_ipv6);
bool ipv6_only = !localhost_resolves_to_ipv4 && localhost_resolves_to_ipv6;
absl::string_view local_ip = ipv6_only ? "[::1]" : "127.0.0.1";
for (int i = 0; i < GetParam().num_listening_ports(); i++) {
ASSERT_NE(0, ports_[i]);
server_addresses_.push_back(absl::StrCat(local_ip, ":", ports_[i]));
server_addresses_.push_back(grpc_core::LocalIpAndPort(ports_[i]));
// Configure tls credential options for each stub. Each stub connects to
// a separate port on the server.

@ -31,6 +31,7 @@
#include "src/core/lib/gprpp/env.h"
#include "src/core/lib/resolver/endpoint_addresses.h"
#include "src/proto/grpc/testing/xds/v3/aggregate_cluster.grpc.pb.h"
#include "test/core/util/resolve_localhost_ip46.h"
#include "test/cpp/end2end/connection_attempt_injector.h"
#include "test/cpp/end2end/xds/xds_end2end_test_lib.h"
@ -59,8 +60,8 @@ class ClusterTypeTest : public XdsEnd2endTest {
const std::vector<int>& ports) {
grpc_core::EndpointAddressesList addresses;
for (int port : ports) {
absl::StatusOr<grpc_core::URI> lb_uri = grpc_core::URI::Parse(
absl::StrCat(ipv6_only_ ? "ipv6:[::1]:" : "ipv4:127.0.0.1:", port));
absl::StatusOr<grpc_core::URI> lb_uri =
grpc_core::URI::Parse(grpc_core::LocalIpUri(port));
GPR_ASSERT(lb_uri.ok());
grpc_resolved_address address;
GPR_ASSERT(grpc_parse_uri(*lb_uri, &address));

@ -24,6 +24,7 @@
#include "src/core/ext/filters/client_channel/backup_poller.h"
#include "src/core/lib/config/config_vars.h"
#include "test/core/util/resolve_localhost_ip46.h"
#include "test/core/util/scoped_env_var.h"
#include "test/cpp/end2end/xds/xds_end2end_test_lib.h"
@ -1045,8 +1046,7 @@ TEST_P(XdsFederationTest, FederationServer) {
Listener server_listener = default_server_listener_;
server_listener.set_name(absl::StrCat(
"xdstp://xds.example.com/envoy.config.listener.v3.Listener/server/",
ipv6_only_ ? "%5B::1%5D:" : "127.0.0.1:", port,
"?psm_project_id=1234"));
grpc_core::LocalIp(), ":", port, "?psm_project_id=1234"));
server_listener.mutable_address()->mutable_socket_address()->set_port_value(
port);
SetListenerAndRouteConfiguration(authority_balancer_.get(), server_listener,

@ -34,6 +34,7 @@
#include "src/proto/grpc/testing/xds/v3/http_connection_manager.grpc.pb.h"
#include "src/proto/grpc/testing/xds/v3/listener.grpc.pb.h"
#include "src/proto/grpc/testing/xds/v3/route.grpc.pb.h"
#include "test/core/util/resolve_localhost_ip46.h"
#include "test/core/util/test_config.h"
#include "test/cpp/end2end/xds/xds_end2end_test_lib.h"
@ -240,8 +241,8 @@ class ClientStatusDiscoveryServiceTest : public XdsEnd2endTest {
ClientStatusDiscoveryServiceTest() {
admin_server_thread_ = std::make_unique<AdminServerThread>(this);
admin_server_thread_->Start();
std::string admin_server_address = absl::StrCat(
ipv6_only_ ? "[::1]:" : "127.0.0.1:", admin_server_thread_->port());
std::string admin_server_address =
grpc_core::LocalIpAndPort(admin_server_thread_->port());
admin_channel_ = grpc::CreateChannel(
admin_server_address,
std::make_shared<SecureChannelCredentials>(

@ -107,6 +107,7 @@
#include "src/proto/grpc/testing/xds/v3/typed_struct.pb.h"
#include "test/core/util/audit_logging_utils.h"
#include "test/core/util/port.h"
#include "test/core/util/resolve_localhost_ip46.h"
#include "test/core/util/scoped_env_var.h"
#include "test/core/util/test_config.h"
#include "test/cpp/end2end/xds/xds_end2end_test_lib.h"
@ -818,7 +819,7 @@ TEST_P(XdsEnabledServerTest, NonTcpListener) {
balancer_->ads_service()->SetLdsResource(listener);
backends_[0]->Start();
backends_[0]->notifier()->WaitOnServingStatusChange(
absl::StrCat(ipv6_only_ ? "[::1]:" : "127.0.0.1:", backends_[0]->port()),
grpc_core::LocalIpAndPort(backends_[0]->port()),
grpc::StatusCode::FAILED_PRECONDITION);
}
@ -835,7 +836,7 @@ TEST_P(XdsEnabledServerTest, ListenerAddressMismatch) {
default_server_route_config_);
backends_[0]->Start();
backends_[0]->notifier()->WaitOnServingStatusChange(
absl::StrCat(ipv6_only_ ? "[::1]:" : "127.0.0.1:", backends_[0]->port()),
grpc_core::LocalIpAndPort(backends_[0]->port()),
grpc::StatusCode::FAILED_PRECONDITION);
}
@ -916,10 +917,9 @@ class XdsServerSecurityTest : public XdsEnd2endTest {
ChannelArguments args;
// Override target name for host name check
args.SetString(GRPC_SSL_TARGET_NAME_OVERRIDE_ARG,
ipv6_only_ ? "::1" : "127.0.0.1");
std::string(grpc_core::LocalIp()));
args.SetInt(GRPC_ARG_USE_LOCAL_SUBCHANNEL_POOL, 1);
std::string uri = absl::StrCat(
ipv6_only_ ? "ipv6:[::1]:" : "ipv4:127.0.0.1:", backends_[0]->port());
std::string uri = grpc_core::LocalIpUri(backends_[0]->port());
IdentityKeyCertPair key_cert_pair;
key_cert_pair.private_key = ReadFile(kServerKeyPath);
key_cert_pair.certificate_chain = ReadFile(kServerCertPath);
@ -944,10 +944,9 @@ class XdsServerSecurityTest : public XdsEnd2endTest {
ChannelArguments args;
// Override target name for host name check
args.SetString(GRPC_SSL_TARGET_NAME_OVERRIDE_ARG,
ipv6_only_ ? "::1" : "127.0.0.1");
std::string(grpc_core::LocalIp()));
args.SetInt(GRPC_ARG_USE_LOCAL_SUBCHANNEL_POOL, 1);
std::string uri = absl::StrCat(
ipv6_only_ ? "ipv6:[::1]:" : "ipv4:127.0.0.1:", backends_[0]->port());
std::string uri = grpc_core::LocalIpUri(backends_[0]->port());
auto certificate_provider =
std::make_shared<StaticDataCertificateProvider>(ReadFile(kCaCertPath));
grpc::experimental::TlsChannelCredentialsOptions options;
@ -967,13 +966,12 @@ class XdsServerSecurityTest : public XdsEnd2endTest {
ChannelArguments args;
// Override target name for host name check
args.SetString(GRPC_SSL_TARGET_NAME_OVERRIDE_ARG,
ipv6_only_ ? "::1" : "127.0.0.1");
std::string(grpc_core::LocalIp()));
args.SetInt(GRPC_ARG_USE_LOCAL_SUBCHANNEL_POOL, 1);
if (use_put_requests) {
args.SetInt(GRPC_ARG_TEST_ONLY_USE_PUT_REQUESTS, 1);
}
std::string uri = absl::StrCat(
ipv6_only_ ? "ipv6:[::1]:" : "ipv4:127.0.0.1:", backends_[0]->port());
std::string uri = grpc_core::LocalIpUri(backends_[0]->port());
return CreateCustomChannel(uri, InsecureChannelCredentials(), args);
}
@ -1301,16 +1299,16 @@ class XdsEnabledServerStatusNotificationTest : public XdsServerSecurityTest {
Listener listener = default_server_listener_;
listener.clear_address();
listener.set_name(absl::StrCat(
"grpc/server?xds.resource.listening_address=",
ipv6_only_ ? "[::1]:" : "127.0.0.1:", backends_[0]->port()));
"grpc/server?xds.resource.listening_address=", grpc_core::LocalIp(),
":", backends_[0]->port()));
balancer_->ads_service()->SetLdsResource(listener);
}
void UnsetLdsUpdate() {
balancer_->ads_service()->UnsetResource(
kLdsTypeUrl, absl::StrCat("grpc/server?xds.resource.listening_address=",
ipv6_only_ ? "[::1]:" : "127.0.0.1:",
backends_[0]->port()));
kLdsTypeUrl,
absl::StrCat("grpc/server?xds.resource.listening_address=",
grpc_core::LocalIp(), ":", backends_[0]->port()));
}
};
@ -1318,8 +1316,7 @@ TEST_P(XdsEnabledServerStatusNotificationTest, ServingStatus) {
SetValidLdsUpdate();
backends_[0]->Start();
backends_[0]->notifier()->WaitOnServingStatusChange(
absl::StrCat(ipv6_only_ ? "[::1]:" : "127.0.0.1:", backends_[0]->port()),
grpc::StatusCode::OK);
grpc_core::LocalIpAndPort(backends_[0]->port()), grpc::StatusCode::OK);
SendRpc([this]() { return CreateInsecureChannel(); }, {}, {});
}
@ -1327,7 +1324,7 @@ TEST_P(XdsEnabledServerStatusNotificationTest, NotServingStatus) {
SetInvalidLdsUpdate();
backends_[0]->Start();
backends_[0]->notifier()->WaitOnServingStatusChange(
absl::StrCat(ipv6_only_ ? "[::1]:" : "127.0.0.1:", backends_[0]->port()),
grpc_core::LocalIpAndPort(backends_[0]->port()),
grpc::StatusCode::UNAVAILABLE);
SendRpc([this]() { return CreateInsecureChannel(); }, {}, {},
true /* test_expects_failure */);
@ -1337,8 +1334,7 @@ TEST_P(XdsEnabledServerStatusNotificationTest, ErrorUpdateWhenAlreadyServing) {
SetValidLdsUpdate();
backends_[0]->Start();
backends_[0]->notifier()->WaitOnServingStatusChange(
absl::StrCat(ipv6_only_ ? "[::1]:" : "127.0.0.1:", backends_[0]->port()),
grpc::StatusCode::OK);
grpc_core::LocalIpAndPort(backends_[0]->port()), grpc::StatusCode::OK);
SendRpc([this]() { return CreateInsecureChannel(); }, {}, {});
// Invalid update does not lead to a change in the serving status.
SetInvalidLdsUpdate();
@ -1346,8 +1342,7 @@ TEST_P(XdsEnabledServerStatusNotificationTest, ErrorUpdateWhenAlreadyServing) {
SendRpc([this]() { return CreateInsecureChannel(); }, {}, {});
} while (!balancer_->ads_service()->lds_response_state().has_value());
backends_[0]->notifier()->WaitOnServingStatusChange(
absl::StrCat(ipv6_only_ ? "[::1]:" : "127.0.0.1:", backends_[0]->port()),
grpc::StatusCode::OK);
grpc_core::LocalIpAndPort(backends_[0]->port()), grpc::StatusCode::OK);
SendRpc([this]() { return CreateInsecureChannel(); }, {}, {});
}
@ -1356,15 +1351,14 @@ TEST_P(XdsEnabledServerStatusNotificationTest,
SetInvalidLdsUpdate();
backends_[0]->Start();
backends_[0]->notifier()->WaitOnServingStatusChange(
absl::StrCat(ipv6_only_ ? "[::1]:" : "127.0.0.1:", backends_[0]->port()),
grpc_core::LocalIpAndPort(backends_[0]->port()),
grpc::StatusCode::UNAVAILABLE);
SendRpc([this]() { return CreateInsecureChannel(); }, {}, {},
true /* test_expects_failure */);
// Send a valid LDS update to change to serving status
SetValidLdsUpdate();
backends_[0]->notifier()->WaitOnServingStatusChange(
absl::StrCat(ipv6_only_ ? "[::1]:" : "127.0.0.1:", backends_[0]->port()),
grpc::StatusCode::OK);
grpc_core::LocalIpAndPort(backends_[0]->port()), grpc::StatusCode::OK);
SendRpc([this]() { return CreateInsecureChannel(); }, {}, {});
}
@ -1375,13 +1369,12 @@ TEST_P(XdsEnabledServerStatusNotificationTest,
SetValidLdsUpdate();
backends_[0]->Start();
backends_[0]->notifier()->WaitOnServingStatusChange(
absl::StrCat(ipv6_only_ ? "[::1]:" : "127.0.0.1:", backends_[0]->port()),
grpc::StatusCode::OK);
grpc_core::LocalIpAndPort(backends_[0]->port()), grpc::StatusCode::OK);
SendRpc([this]() { return CreateInsecureChannel(); }, {}, {});
// Deleting the resource should result in a non-serving status.
UnsetLdsUpdate();
backends_[0]->notifier()->WaitOnServingStatusChange(
absl::StrCat(ipv6_only_ ? "[::1]:" : "127.0.0.1:", backends_[0]->port()),
grpc_core::LocalIpAndPort(backends_[0]->port()),
grpc::StatusCode::NOT_FOUND);
SendRpc([this]() { return CreateInsecureChannel(); }, {}, {},
true /* test_expects_failure */);
@ -1393,15 +1386,12 @@ TEST_P(XdsEnabledServerStatusNotificationTest, RepeatedServingStatusChanges) {
// Send a valid LDS update to get the server to start listening
SetValidLdsUpdate();
backends_[0]->notifier()->WaitOnServingStatusChange(
absl::StrCat(ipv6_only_ ? "[::1]:" : "127.0.0.1:",
backends_[0]->port()),
grpc::StatusCode::OK);
grpc_core::LocalIpAndPort(backends_[0]->port()), grpc::StatusCode::OK);
SendRpc([this]() { return CreateInsecureChannel(); }, {}, {});
// Deleting the resource will make the server start rejecting connections
UnsetLdsUpdate();
backends_[0]->notifier()->WaitOnServingStatusChange(
absl::StrCat(ipv6_only_ ? "[::1]:" : "127.0.0.1:",
backends_[0]->port()),
grpc_core::LocalIpAndPort(backends_[0]->port()),
grpc::StatusCode::NOT_FOUND);
SendRpc([this]() { return CreateInsecureChannel(); }, {}, {},
true /* test_expects_failure */);
@ -1413,8 +1403,7 @@ TEST_P(XdsEnabledServerStatusNotificationTest, ExistingRpcsOnResourceDeletion) {
SetValidLdsUpdate();
backends_[0]->Start();
backends_[0]->notifier()->WaitOnServingStatusChange(
absl::StrCat(ipv6_only_ ? "[::1]:" : "127.0.0.1:", backends_[0]->port()),
grpc::StatusCode::OK);
grpc_core::LocalIpAndPort(backends_[0]->port()), grpc::StatusCode::OK);
constexpr int kNumChannels = 10;
struct StreamingRpc {
std::shared_ptr<Channel> channel;
@ -1439,7 +1428,7 @@ TEST_P(XdsEnabledServerStatusNotificationTest, ExistingRpcsOnResourceDeletion) {
// Deleting the resource will make the server start rejecting connections
UnsetLdsUpdate();
backends_[0]->notifier()->WaitOnServingStatusChange(
absl::StrCat(ipv6_only_ ? "[::1]:" : "127.0.0.1:", backends_[0]->port()),
grpc_core::LocalIpAndPort(backends_[0]->port()),
grpc::StatusCode::NOT_FOUND);
SendRpc([this]() { return CreateInsecureChannel(); }, {}, {},
true /* test_expects_failure */);
@ -1469,8 +1458,7 @@ TEST_P(XdsEnabledServerStatusNotificationTest,
SetValidLdsUpdate();
backends_[0]->Start();
backends_[0]->notifier()->WaitOnServingStatusChange(
absl::StrCat(ipv6_only_ ? "[::1]:" : "127.0.0.1:", backends_[0]->port()),
grpc::StatusCode::OK);
grpc_core::LocalIpAndPort(backends_[0]->port()), grpc::StatusCode::OK);
constexpr int kNumChannels = 10;
struct StreamingRpc {
std::shared_ptr<Channel> channel;
@ -1654,11 +1642,11 @@ TEST_P(XdsServerFilterChainMatchTest,
GetHttpConnectionManager(listener));
auto* prefix_range =
filter_chain->mutable_filter_chain_match()->add_prefix_ranges();
prefix_range->set_address_prefix(ipv6_only_ ? "::1" : "127.0.0.1");
prefix_range->set_address_prefix(grpc_core::LocalIp());
prefix_range->mutable_prefix_len()->set_value(4);
prefix_range =
filter_chain->mutable_filter_chain_match()->add_prefix_ranges();
prefix_range->set_address_prefix(ipv6_only_ ? "::1" : "127.0.0.1");
prefix_range->set_address_prefix(grpc_core::LocalIp());
prefix_range->mutable_prefix_len()->set_value(16);
filter_chain->mutable_filter_chain_match()->add_server_names("server_name");
// Add filter chain with two prefix ranges (length 8 and 24). Since 24 is
@ -1668,11 +1656,11 @@ TEST_P(XdsServerFilterChainMatchTest,
GetHttpConnectionManager(listener));
prefix_range =
filter_chain->mutable_filter_chain_match()->add_prefix_ranges();
prefix_range->set_address_prefix(ipv6_only_ ? "::1" : "127.0.0.1");
prefix_range->set_address_prefix(grpc_core::LocalIp());
prefix_range->mutable_prefix_len()->set_value(8);
prefix_range =
filter_chain->mutable_filter_chain_match()->add_prefix_ranges();
prefix_range->set_address_prefix(ipv6_only_ ? "::1" : "127.0.0.1");
prefix_range->set_address_prefix(grpc_core::LocalIp());
prefix_range->mutable_prefix_len()->set_value(24);
// Add another filter chain with a non-matching prefix range (with length
// 30)
@ -1744,11 +1732,11 @@ TEST_P(XdsServerFilterChainMatchTest,
GetHttpConnectionManager(listener));
auto* source_prefix_range =
filter_chain->mutable_filter_chain_match()->add_source_prefix_ranges();
source_prefix_range->set_address_prefix(ipv6_only_ ? "::1" : "127.0.0.1");
source_prefix_range->set_address_prefix(grpc_core::LocalIp());
source_prefix_range->mutable_prefix_len()->set_value(4);
source_prefix_range =
filter_chain->mutable_filter_chain_match()->add_source_prefix_ranges();
source_prefix_range->set_address_prefix(ipv6_only_ ? "::1" : "127.0.0.1");
source_prefix_range->set_address_prefix(grpc_core::LocalIp());
source_prefix_range->mutable_prefix_len()->set_value(16);
filter_chain->mutable_filter_chain_match()->add_source_ports(
backends_[0]->port());
@ -1759,11 +1747,11 @@ TEST_P(XdsServerFilterChainMatchTest,
GetHttpConnectionManager(listener));
source_prefix_range =
filter_chain->mutable_filter_chain_match()->add_source_prefix_ranges();
source_prefix_range->set_address_prefix(ipv6_only_ ? "::1" : "127.0.0.1");
source_prefix_range->set_address_prefix(grpc_core::LocalIp());
source_prefix_range->mutable_prefix_len()->set_value(8);
source_prefix_range =
filter_chain->mutable_filter_chain_match()->add_source_prefix_ranges();
source_prefix_range->set_address_prefix(ipv6_only_ ? "::1" : "127.0.0.1");
source_prefix_range->set_address_prefix(grpc_core::LocalIp());
source_prefix_range->mutable_prefix_len()->set_value(24);
// Add another filter chain with a non-matching source prefix range (with
// length 30) and bad source port
@ -1829,8 +1817,7 @@ using XdsServerRdsTest = XdsEnabledServerStatusNotificationTest;
TEST_P(XdsServerRdsTest, Basic) {
backends_[0]->Start();
backends_[0]->notifier()->WaitOnServingStatusChange(
absl::StrCat(ipv6_only_ ? "[::1]:" : "127.0.0.1:", backends_[0]->port()),
grpc::StatusCode::OK);
grpc_core::LocalIpAndPort(backends_[0]->port()), grpc::StatusCode::OK);
SendRpc([this]() { return CreateInsecureChannel(); }, {}, {});
}
@ -1841,8 +1828,7 @@ TEST_P(XdsServerRdsTest, FailsRouteMatchesOtherThanNonForwardingAction) {
backends_[0]->Start();
// The server should be ready to serve but RPCs should fail.
backends_[0]->notifier()->WaitOnServingStatusChange(
absl::StrCat(ipv6_only_ ? "[::1]:" : "127.0.0.1:", backends_[0]->port()),
grpc::StatusCode::OK);
grpc_core::LocalIpAndPort(backends_[0]->port()), grpc::StatusCode::OK);
SendRpc([this]() { return CreateInsecureChannel(); }, {}, {},
true /* test_expects_failure */);
}
@ -1867,8 +1853,7 @@ TEST_P(XdsServerRdsTest, NonInlineRouteConfigurationNonDefaultFilterChain) {
default_server_route_config_);
backends_[0]->Start();
backends_[0]->notifier()->WaitOnServingStatusChange(
absl::StrCat(ipv6_only_ ? "[::1]:" : "127.0.0.1:", backends_[0]->port()),
grpc::StatusCode::OK);
grpc_core::LocalIpAndPort(backends_[0]->port()), grpc::StatusCode::OK);
SendRpc([this]() { return CreateInsecureChannel(); }, {}, {});
}
@ -1890,8 +1875,7 @@ TEST_P(XdsServerRdsTest, NonInlineRouteConfigurationNotAvailable) {
default_server_route_config_);
backends_[0]->Start();
backends_[0]->notifier()->WaitOnServingStatusChange(
absl::StrCat(ipv6_only_ ? "[::1]:" : "127.0.0.1:", backends_[0]->port()),
grpc::StatusCode::OK);
grpc_core::LocalIpAndPort(backends_[0]->port()), grpc::StatusCode::OK);
SendRpc([this]() { return CreateInsecureChannel(); }, {}, {},
true /* test_expects_failure */);
}
@ -1943,8 +1927,7 @@ TEST_P(XdsServerRdsTest, MultipleRouteConfigurations) {
default_server_route_config_);
backends_[0]->Start();
backends_[0]->notifier()->WaitOnServingStatusChange(
absl::StrCat(ipv6_only_ ? "[::1]:" : "127.0.0.1:", backends_[0]->port()),
grpc::StatusCode::OK);
grpc_core::LocalIpAndPort(backends_[0]->port()), grpc::StatusCode::OK);
SendRpc([this]() { return CreateInsecureChannel(); }, {}, {});
}
@ -2010,8 +1993,7 @@ TEST_P(XdsRbacTest, AbsentRbacPolicy) {
SetServerRbacPolicy(RBAC());
backends_[0]->Start();
backends_[0]->notifier()->WaitOnServingStatusChange(
absl::StrCat(ipv6_only_ ? "[::1]:" : "127.0.0.1:", backends_[0]->port()),
grpc::StatusCode::OK);
grpc_core::LocalIpAndPort(backends_[0]->port()), grpc::StatusCode::OK);
// An absent RBAC policy leads to all RPCs being accepted.
SendRpc([this]() { return CreateInsecureChannel(); }, {}, {});
}
@ -2023,8 +2005,7 @@ TEST_P(XdsRbacTest, LogAction) {
SetServerRbacPolicy(rbac);
backends_[0]->Start();
backends_[0]->notifier()->WaitOnServingStatusChange(
absl::StrCat(ipv6_only_ ? "[::1]:" : "127.0.0.1:", backends_[0]->port()),
grpc::StatusCode::OK);
grpc_core::LocalIpAndPort(backends_[0]->port()), grpc::StatusCode::OK);
// A Log action is identical to no rbac policy being configured.
SendRpc([this]() { return CreateInsecureChannel(); }, {}, {});
}
@ -2065,8 +2046,7 @@ TEST_P(XdsRbacTestWithRouteOverrideAlwaysPresent, EmptyRBACPerRouteOverride) {
balancer_.get(), listener, backends_[0]->port(), route_config);
backends_[0]->Start();
backends_[0]->notifier()->WaitOnServingStatusChange(
absl::StrCat(ipv6_only_ ? "[::1]:" : "127.0.0.1:", backends_[0]->port()),
grpc::StatusCode::OK);
grpc_core::LocalIpAndPort(backends_[0]->port()), grpc::StatusCode::OK);
SendRpc([this]() { return CreateInsecureChannel(); }, {}, {});
}
@ -2107,8 +2087,7 @@ TEST_P(XdsRbacTestWithRouteOverrideAlwaysPresent,
balancer_.get(), listener, backends_[0]->port(), route_config);
backends_[0]->Start();
backends_[0]->notifier()->WaitOnServingStatusChange(
absl::StrCat(ipv6_only_ ? "[::1]:" : "127.0.0.1:", backends_[0]->port()),
grpc::StatusCode::OK);
grpc_core::LocalIpAndPort(backends_[0]->port()), grpc::StatusCode::OK);
SendRpc([this]() { return CreateInsecureChannel(); }, {}, {});
}
@ -2121,8 +2100,7 @@ TEST_P(XdsRbacTestWithActionPermutations, EmptyRbacPolicy) {
SetServerRbacPolicy(rbac);
backends_[0]->Start();
backends_[0]->notifier()->WaitOnServingStatusChange(
absl::StrCat(ipv6_only_ ? "[::1]:" : "127.0.0.1:", backends_[0]->port()),
grpc::StatusCode::OK);
grpc_core::LocalIpAndPort(backends_[0]->port()), grpc::StatusCode::OK);
// An empty RBAC policy leads to all RPCs being rejected.
SendRpc(
[this]() { return CreateInsecureChannel(); }, {}, {},
@ -2141,8 +2119,7 @@ TEST_P(XdsRbacTestWithActionPermutations, AnyPermissionAnyPrincipal) {
SetServerRbacPolicy(rbac);
backends_[0]->Start();
backends_[0]->notifier()->WaitOnServingStatusChange(
absl::StrCat(ipv6_only_ ? "[::1]:" : "127.0.0.1:", backends_[0]->port()),
grpc::StatusCode::OK);
grpc_core::LocalIpAndPort(backends_[0]->port()), grpc::StatusCode::OK);
SendRpc([this]() { return CreateInsecureChannel(); }, {}, {},
/*test_expects_failure=*/GetParam().rbac_action() == RBAC_Action_DENY,
grpc::StatusCode::PERMISSION_DENIED);
@ -2164,8 +2141,7 @@ TEST_P(XdsRbacTestWithActionPermutations, MultipleRbacPolicies) {
{always_allow, rbac, always_allow});
backends_[0]->Start();
backends_[0]->notifier()->WaitOnServingStatusChange(
absl::StrCat(ipv6_only_ ? "[::1]:" : "127.0.0.1:", backends_[0]->port()),
grpc::StatusCode::OK);
grpc_core::LocalIpAndPort(backends_[0]->port()), grpc::StatusCode::OK);
SendRpc([this]() { return CreateInsecureChannel(); }, {}, {},
/*test_expects_failure=*/GetParam().rbac_action() == RBAC_Action_DENY,
grpc::StatusCode::PERMISSION_DENIED);
@ -2185,8 +2161,7 @@ TEST_P(XdsRbacTestWithActionPermutations, MethodPostPermissionAnyPrincipal) {
backends_[0]->set_allow_put_requests(true);
backends_[0]->Start();
backends_[0]->notifier()->WaitOnServingStatusChange(
absl::StrCat(ipv6_only_ ? "[::1]:" : "127.0.0.1:", backends_[0]->port()),
grpc::StatusCode::OK);
grpc_core::LocalIpAndPort(backends_[0]->port()), grpc::StatusCode::OK);
// All RPCs use POST method by default
SendRpc([this]() { return CreateInsecureChannel(); }, {}, {},
/*test_expects_failure=*/GetParam().rbac_action() == RBAC_Action_DENY,
@ -2211,8 +2186,7 @@ TEST_P(XdsRbacTestWithActionPermutations, MethodGetPermissionAnyPrincipal) {
SetServerRbacPolicy(rbac);
backends_[0]->Start();
backends_[0]->notifier()->WaitOnServingStatusChange(
absl::StrCat(ipv6_only_ ? "[::1]:" : "127.0.0.1:", backends_[0]->port()),
grpc::StatusCode::OK);
grpc_core::LocalIpAndPort(backends_[0]->port()), grpc::StatusCode::OK);
// Test that an RPC with a POST method gets rejected
SendRpc(
[this]() { return CreateInsecureChannel(); }, {}, {},
@ -2236,8 +2210,7 @@ TEST_P(XdsRbacTestWithActionPermutations, MethodPutPermissionAnyPrincipal) {
backends_[0]->set_allow_put_requests(true);
backends_[0]->Start();
backends_[0]->notifier()->WaitOnServingStatusChange(
absl::StrCat(ipv6_only_ ? "[::1]:" : "127.0.0.1:", backends_[0]->port()),
grpc::StatusCode::OK);
grpc_core::LocalIpAndPort(backends_[0]->port()), grpc::StatusCode::OK);
// Test that an RPC with a POST method gets rejected
SendRpc(
[this]() { return CreateInsecureChannel(); }, {}, {},
@ -2263,8 +2236,7 @@ TEST_P(XdsRbacTestWithActionPermutations, UrlPathPermissionAnyPrincipal) {
SetServerRbacPolicy(rbac);
backends_[0]->Start();
backends_[0]->notifier()->WaitOnServingStatusChange(
absl::StrCat(ipv6_only_ ? "[::1]:" : "127.0.0.1:", backends_[0]->port()),
grpc::StatusCode::OK);
grpc_core::LocalIpAndPort(backends_[0]->port()), grpc::StatusCode::OK);
SendRpc([this]() { return CreateInsecureChannel(); }, {}, {},
/*test_expects_failure=*/GetParam().rbac_action() == RBAC_Action_DENY,
grpc::StatusCode::PERMISSION_DENIED);
@ -2289,23 +2261,25 @@ TEST_P(XdsRbacTestWithActionPermutations, DestinationIpPermissionAnyPrincipal) {
rules->set_action(GetParam().rbac_action());
Policy policy;
auto* range = policy.add_permissions()->mutable_destination_ip();
range->set_address_prefix(ipv6_only_ ? "::1" : "127.0.0.1");
range->mutable_prefix_len()->set_value(ipv6_only_ ? 128 : 32);
range->set_address_prefix(grpc_core::LocalIp());
range->mutable_prefix_len()->set_value(grpc_core::RunningWithIPv6Only() ? 128
: 32);
policy.add_principals()->set_any(true);
(*rules->mutable_policies())["policy"] = policy;
SetServerRbacPolicy(rbac);
backends_[0]->Start();
backends_[0]->notifier()->WaitOnServingStatusChange(
absl::StrCat(ipv6_only_ ? "[::1]:" : "127.0.0.1:", backends_[0]->port()),
grpc::StatusCode::OK);
grpc_core::LocalIpAndPort(backends_[0]->port()), grpc::StatusCode::OK);
SendRpc([this]() { return CreateInsecureChannel(); }, {}, {},
/*test_expects_failure=*/GetParam().rbac_action() == RBAC_Action_DENY,
grpc::StatusCode::PERMISSION_DENIED);
// Change the policy itself for a negative test where there is no match.
policy.clear_permissions();
range = policy.add_permissions()->mutable_destination_ip();
range->set_address_prefix(ipv6_only_ ? "::2" : "127.0.0.2");
range->mutable_prefix_len()->set_value(ipv6_only_ ? 128 : 32);
range->set_address_prefix(grpc_core::RunningWithIPv6Only() ? "::2"
: "127.0.0.2");
range->mutable_prefix_len()->set_value(grpc_core::RunningWithIPv6Only() ? 128
: 32);
(*rules->mutable_policies())["policy"] = policy;
SetServerRbacPolicy(rbac);
SendRpc(
@ -2326,8 +2300,7 @@ TEST_P(XdsRbacTestWithActionPermutations,
SetServerRbacPolicy(rbac);
backends_[0]->Start();
backends_[0]->notifier()->WaitOnServingStatusChange(
absl::StrCat(ipv6_only_ ? "[::1]:" : "127.0.0.1:", backends_[0]->port()),
grpc::StatusCode::OK);
grpc_core::LocalIpAndPort(backends_[0]->port()), grpc::StatusCode::OK);
SendRpc([this]() { return CreateInsecureChannel(); }, {}, {},
/*test_expects_failure=*/GetParam().rbac_action() == RBAC_Action_DENY,
grpc::StatusCode::PERMISSION_DENIED);
@ -2353,8 +2326,7 @@ TEST_P(XdsRbacTestWithActionPermutations, MetadataPermissionAnyPrincipal) {
SetServerRbacPolicy(rbac);
backends_[0]->Start();
backends_[0]->notifier()->WaitOnServingStatusChange(
absl::StrCat(ipv6_only_ ? "[::1]:" : "127.0.0.1:", backends_[0]->port()),
grpc::StatusCode::OK);
grpc_core::LocalIpAndPort(backends_[0]->port()), grpc::StatusCode::OK);
SendRpc(
[this]() { return CreateInsecureChannel(); }, {}, {},
/*test_expects_failure=*/GetParam().rbac_action() == RBAC_Action_ALLOW,
@ -2381,8 +2353,7 @@ TEST_P(XdsRbacTestWithActionPermutations, ReqServerNamePermissionAnyPrincipal) {
SetServerRbacPolicy(rbac);
backends_[0]->Start();
backends_[0]->notifier()->WaitOnServingStatusChange(
absl::StrCat(ipv6_only_ ? "[::1]:" : "127.0.0.1:", backends_[0]->port()),
grpc::StatusCode::OK);
grpc_core::LocalIpAndPort(backends_[0]->port()), grpc::StatusCode::OK);
SendRpc(
[this]() { return CreateInsecureChannel(); }, {}, {},
/*test_expects_failure=*/GetParam().rbac_action() == RBAC_Action_ALLOW,
@ -2410,8 +2381,7 @@ TEST_P(XdsRbacTestWithActionPermutations, NotRulePermissionAnyPrincipal) {
SetServerRbacPolicy(rbac);
backends_[0]->Start();
backends_[0]->notifier()->WaitOnServingStatusChange(
absl::StrCat(ipv6_only_ ? "[::1]:" : "127.0.0.1:", backends_[0]->port()),
grpc::StatusCode::OK);
grpc_core::LocalIpAndPort(backends_[0]->port()), grpc::StatusCode::OK);
SendRpc([this]() { return CreateInsecureChannel(); }, {}, {},
/*test_expects_failure=*/GetParam().rbac_action() == RBAC_Action_DENY,
grpc::StatusCode::PERMISSION_DENIED);
@ -2439,8 +2409,7 @@ TEST_P(XdsRbacTestWithActionPermutations, AndRulePermissionAnyPrincipal) {
SetServerRbacPolicy(rbac);
backends_[0]->Start();
backends_[0]->notifier()->WaitOnServingStatusChange(
absl::StrCat(ipv6_only_ ? "[::1]:" : "127.0.0.1:", backends_[0]->port()),
grpc::StatusCode::OK);
grpc_core::LocalIpAndPort(backends_[0]->port()), grpc::StatusCode::OK);
SendRpc([this]() { return CreateInsecureChannel(); }, {}, {},
/*test_expects_failure=*/GetParam().rbac_action() == RBAC_Action_DENY,
grpc::StatusCode::PERMISSION_DENIED);
@ -2468,8 +2437,7 @@ TEST_P(XdsRbacTestWithActionPermutations, OrRulePermissionAnyPrincipal) {
SetServerRbacPolicy(rbac);
backends_[0]->Start();
backends_[0]->notifier()->WaitOnServingStatusChange(
absl::StrCat(ipv6_only_ ? "[::1]:" : "127.0.0.1:", backends_[0]->port()),
grpc::StatusCode::OK);
grpc_core::LocalIpAndPort(backends_[0]->port()), grpc::StatusCode::OK);
SendRpc([this]() { return CreateInsecureChannel(); }, {}, {},
/*test_expects_failure=*/GetParam().rbac_action() == RBAC_Action_DENY,
grpc::StatusCode::PERMISSION_DENIED);
@ -2498,8 +2466,7 @@ TEST_P(XdsRbacTestWithActionPermutations, AnyPermissionMethodPostPrincipal) {
backends_[0]->set_allow_put_requests(true);
backends_[0]->Start();
backends_[0]->notifier()->WaitOnServingStatusChange(
absl::StrCat(ipv6_only_ ? "[::1]:" : "127.0.0.1:", backends_[0]->port()),
grpc::StatusCode::OK);
grpc_core::LocalIpAndPort(backends_[0]->port()), grpc::StatusCode::OK);
// All RPCs use POST method by default
SendRpc([this]() { return CreateInsecureChannel(); }, {}, {},
/*test_expects_failure=*/GetParam().rbac_action() == RBAC_Action_DENY,
@ -2524,8 +2491,7 @@ TEST_P(XdsRbacTestWithActionPermutations, AnyPermissionMethodGetPrincipal) {
SetServerRbacPolicy(rbac);
backends_[0]->Start();
backends_[0]->notifier()->WaitOnServingStatusChange(
absl::StrCat(ipv6_only_ ? "[::1]:" : "127.0.0.1:", backends_[0]->port()),
grpc::StatusCode::OK);
grpc_core::LocalIpAndPort(backends_[0]->port()), grpc::StatusCode::OK);
// Test that an RPC with a POST method gets rejected
SendRpc(
[this]() { return CreateInsecureChannel(); }, {}, {},
@ -2549,8 +2515,7 @@ TEST_P(XdsRbacTestWithActionPermutations, AnyPermissionMethodPutPrincipal) {
backends_[0]->set_allow_put_requests(true);
backends_[0]->Start();
backends_[0]->notifier()->WaitOnServingStatusChange(
absl::StrCat(ipv6_only_ ? "[::1]:" : "127.0.0.1:", backends_[0]->port()),
grpc::StatusCode::OK);
grpc_core::LocalIpAndPort(backends_[0]->port()), grpc::StatusCode::OK);
// Test that an RPC with a PUT method gets accepted
SendRpc(
[this]() { return CreateInsecureChannel(/*use_put_requests=*/true); }, {},
@ -2576,8 +2541,7 @@ TEST_P(XdsRbacTestWithActionPermutations, AnyPermissionUrlPathPrincipal) {
SetServerRbacPolicy(rbac);
backends_[0]->Start();
backends_[0]->notifier()->WaitOnServingStatusChange(
absl::StrCat(ipv6_only_ ? "[::1]:" : "127.0.0.1:", backends_[0]->port()),
grpc::StatusCode::OK);
grpc_core::LocalIpAndPort(backends_[0]->port()), grpc::StatusCode::OK);
SendRpc([this]() { return CreateInsecureChannel(); }, {}, {},
/*test_expects_failure=*/GetParam().rbac_action() == RBAC_Action_DENY,
grpc::StatusCode::PERMISSION_DENIED);
@ -2603,23 +2567,25 @@ TEST_P(XdsRbacTestWithActionPermutations,
rules->set_action(GetParam().rbac_action());
Policy policy;
auto* range = policy.add_principals()->mutable_direct_remote_ip();
range->set_address_prefix(ipv6_only_ ? "::1" : "127.0.0.1");
range->mutable_prefix_len()->set_value(ipv6_only_ ? 128 : 32);
range->set_address_prefix(grpc_core::LocalIp());
range->mutable_prefix_len()->set_value(grpc_core::RunningWithIPv6Only() ? 128
: 32);
policy.add_permissions()->set_any(true);
(*rules->mutable_policies())["policy"] = policy;
SetServerRbacPolicy(rbac);
backends_[0]->Start();
backends_[0]->notifier()->WaitOnServingStatusChange(
absl::StrCat(ipv6_only_ ? "[::1]:" : "127.0.0.1:", backends_[0]->port()),
grpc::StatusCode::OK);
grpc_core::LocalIpAndPort(backends_[0]->port()), grpc::StatusCode::OK);
SendRpc([this]() { return CreateInsecureChannel(); }, {}, {},
/*test_expects_failure=*/GetParam().rbac_action() == RBAC_Action_DENY,
grpc::StatusCode::PERMISSION_DENIED);
// Change the policy itself for a negative test where there is no match.
policy.clear_principals();
range = policy.add_principals()->mutable_direct_remote_ip();
range->set_address_prefix(ipv6_only_ ? "::2" : "127.0.0.2");
range->mutable_prefix_len()->set_value(ipv6_only_ ? 128 : 32);
range->set_address_prefix(grpc_core::RunningWithIPv6Only() ? "::2"
: "127.0.0.2");
range->mutable_prefix_len()->set_value(grpc_core::RunningWithIPv6Only() ? 128
: 32);
(*rules->mutable_policies())["policy"] = policy;
SetServerRbacPolicy(rbac);
SendRpc(
@ -2634,23 +2600,25 @@ TEST_P(XdsRbacTestWithActionPermutations, AnyPermissionRemoteIpPrincipal) {
rules->set_action(GetParam().rbac_action());
Policy policy;
auto* range = policy.add_principals()->mutable_remote_ip();
range->set_address_prefix(ipv6_only_ ? "::1" : "127.0.0.1");
range->mutable_prefix_len()->set_value(ipv6_only_ ? 128 : 32);
range->set_address_prefix(grpc_core::LocalIp());
range->mutable_prefix_len()->set_value(grpc_core::RunningWithIPv6Only() ? 128
: 32);
policy.add_permissions()->set_any(true);
(*rules->mutable_policies())["policy"] = policy;
SetServerRbacPolicy(rbac);
backends_[0]->Start();
backends_[0]->notifier()->WaitOnServingStatusChange(
absl::StrCat(ipv6_only_ ? "[::1]:" : "127.0.0.1:", backends_[0]->port()),
grpc::StatusCode::OK);
grpc_core::LocalIpAndPort(backends_[0]->port()), grpc::StatusCode::OK);
SendRpc([this]() { return CreateInsecureChannel(); }, {}, {},
/*test_expects_failure=*/GetParam().rbac_action() == RBAC_Action_DENY,
grpc::StatusCode::PERMISSION_DENIED);
// Change the policy itself for a negative test where there is no match.
policy.clear_principals();
range = policy.add_principals()->mutable_remote_ip();
range->set_address_prefix(ipv6_only_ ? "::2" : "127.0.0.2");
range->mutable_prefix_len()->set_value(ipv6_only_ ? 128 : 32);
range->set_address_prefix(grpc_core::RunningWithIPv6Only() ? "::2"
: "127.0.0.2");
range->mutable_prefix_len()->set_value(grpc_core::RunningWithIPv6Only() ? 128
: 32);
(*rules->mutable_policies())["policy"] = policy;
SetServerRbacPolicy(rbac);
SendRpc(
@ -2688,8 +2656,7 @@ TEST_P(XdsRbacTestWithActionPermutations, AnyPermissionAuthenticatedPrincipal) {
SetServerRbacPolicy(listener, rbac);
backends_[0]->Start();
backends_[0]->notifier()->WaitOnServingStatusChange(
absl::StrCat(ipv6_only_ ? "[::1]:" : "127.0.0.1:", backends_[0]->port()),
grpc::StatusCode::OK);
grpc_core::LocalIpAndPort(backends_[0]->port()), grpc::StatusCode::OK);
SendRpc([this]() { return CreateMtlsChannel(); },
server_authenticated_identity_, client_authenticated_identity_,
/*test_expects_failure=*/GetParam().rbac_action() == RBAC_Action_DENY,
@ -2707,8 +2674,7 @@ TEST_P(XdsRbacTestWithActionPermutations, AnyPermissionMetadataPrincipal) {
SetServerRbacPolicy(rbac);
backends_[0]->Start();
backends_[0]->notifier()->WaitOnServingStatusChange(
absl::StrCat(ipv6_only_ ? "[::1]:" : "127.0.0.1:", backends_[0]->port()),
grpc::StatusCode::OK);
grpc_core::LocalIpAndPort(backends_[0]->port()), grpc::StatusCode::OK);
SendRpc(
[this]() { return CreateInsecureChannel(); }, {}, {},
/*test_expects_failure=*/GetParam().rbac_action() == RBAC_Action_ALLOW,
@ -2738,8 +2704,7 @@ TEST_P(XdsRbacTestWithActionPermutations, AnyPermissionNotIdPrincipal) {
SetServerRbacPolicy(rbac);
backends_[0]->Start();
backends_[0]->notifier()->WaitOnServingStatusChange(
absl::StrCat(ipv6_only_ ? "[::1]:" : "127.0.0.1:", backends_[0]->port()),
grpc::StatusCode::OK);
grpc_core::LocalIpAndPort(backends_[0]->port()), grpc::StatusCode::OK);
SendRpc([this]() { return CreateInsecureChannel(); }, {}, {},
/*test_expects_failure=*/GetParam().rbac_action() == RBAC_Action_DENY,
grpc::StatusCode::PERMISSION_DENIED);
@ -2768,8 +2733,7 @@ TEST_P(XdsRbacTestWithActionPermutations, AnyPermissionAndIdPrincipal) {
SetServerRbacPolicy(rbac);
backends_[0]->Start();
backends_[0]->notifier()->WaitOnServingStatusChange(
absl::StrCat(ipv6_only_ ? "[::1]:" : "127.0.0.1:", backends_[0]->port()),
grpc::StatusCode::OK);
grpc_core::LocalIpAndPort(backends_[0]->port()), grpc::StatusCode::OK);
SendRpc([this]() { return CreateInsecureChannel(); }, {}, {},
/*test_expects_failure=*/GetParam().rbac_action() == RBAC_Action_DENY,
grpc::StatusCode::PERMISSION_DENIED);
@ -2799,8 +2763,7 @@ TEST_P(XdsRbacTestWithActionPermutations, AnyPermissionOrIdPrincipal) {
SetServerRbacPolicy(rbac);
backends_[0]->Start();
backends_[0]->notifier()->WaitOnServingStatusChange(
absl::StrCat(ipv6_only_ ? "[::1]:" : "127.0.0.1:", backends_[0]->port()),
grpc::StatusCode::OK);
grpc_core::LocalIpAndPort(backends_[0]->port()), grpc::StatusCode::OK);
SendRpc([this]() { return CreateInsecureChannel(); }, {}, {},
/*test_expects_failure=*/GetParam().rbac_action() == RBAC_Action_DENY,
grpc::StatusCode::PERMISSION_DENIED);
@ -2832,8 +2795,7 @@ TEST_P(XdsRbacTestWithActionPermutations,
SetServerRbacPolicy(rbac);
backends_[0]->Start();
backends_[0]->notifier()->WaitOnServingStatusChange(
absl::StrCat(ipv6_only_ ? "[::1]:" : "127.0.0.1:", backends_[0]->port()),
grpc::StatusCode::OK);
grpc_core::LocalIpAndPort(backends_[0]->port()), grpc::StatusCode::OK);
// An empty RBAC policy leads to all RPCs being rejected.
SendRpc(
[this]() { return CreateInsecureChannel(); }, {}, {},
@ -2875,8 +2837,7 @@ TEST_P(XdsRbacTestWithActionPermutations,
{always_allow, rbac, always_allow});
backends_[0]->Start();
backends_[0]->notifier()->WaitOnServingStatusChange(
absl::StrCat(ipv6_only_ ? "[::1]:" : "127.0.0.1:", backends_[0]->port()),
grpc::StatusCode::OK);
grpc_core::LocalIpAndPort(backends_[0]->port()), grpc::StatusCode::OK);
SendRpc([this]() { return CreateInsecureChannel(); }, {}, {},
/*test_expects_failure=*/GetParam().rbac_action() == RBAC_Action_DENY,
grpc::StatusCode::PERMISSION_DENIED);
@ -2922,8 +2883,7 @@ TEST_P(XdsRbacTestWithActionPermutations, MultipleRbacPoliciesWithAuditOnDeny) {
{always_allow, rbac, always_allow});
backends_[0]->Start();
backends_[0]->notifier()->WaitOnServingStatusChange(
absl::StrCat(ipv6_only_ ? "[::1]:" : "127.0.0.1:", backends_[0]->port()),
grpc::StatusCode::OK);
grpc_core::LocalIpAndPort(backends_[0]->port()), grpc::StatusCode::OK);
SendRpc([this]() { return CreateInsecureChannel(); }, {}, {},
/*test_expects_failure=*/GetParam().rbac_action() == RBAC_Action_DENY,
grpc::StatusCode::PERMISSION_DENIED);
@ -2971,8 +2931,7 @@ TEST_P(XdsRbacTestWithActionPermutations,
{always_allow, rbac, always_allow});
backends_[0]->Start();
backends_[0]->notifier()->WaitOnServingStatusChange(
absl::StrCat(ipv6_only_ ? "[::1]:" : "127.0.0.1:", backends_[0]->port()),
grpc::StatusCode::OK);
grpc_core::LocalIpAndPort(backends_[0]->port()), grpc::StatusCode::OK);
SendRpc([this]() { return CreateInsecureChannel(); }, {}, {},
/*test_expects_failure=*/GetParam().rbac_action() == RBAC_Action_DENY,
grpc::StatusCode::PERMISSION_DENIED);
@ -3021,8 +2980,7 @@ TEST_P(XdsRbacTestWithActionAndAuditConditionPermutations,
SetServerRbacPolicy(rbac);
backends_[0]->Start();
backends_[0]->notifier()->WaitOnServingStatusChange(
absl::StrCat(ipv6_only_ ? "[::1]:" : "127.0.0.1:", backends_[0]->port()),
grpc::StatusCode::OK);
grpc_core::LocalIpAndPort(backends_[0]->port()), grpc::StatusCode::OK);
SendRpc([this]() { return CreateInsecureChannel(); }, {}, {},
/*test_expects_failure=*/GetParam().rbac_action() == RBAC_Action_DENY,
grpc::StatusCode::PERMISSION_DENIED);
@ -3054,8 +3012,7 @@ TEST_P(XdsRbacTestWithActionAndAuditConditionPermutations, MultipleLoggers) {
SetServerRbacPolicy(rbac);
backends_[0]->Start();
backends_[0]->notifier()->WaitOnServingStatusChange(
absl::StrCat(ipv6_only_ ? "[::1]:" : "127.0.0.1:", backends_[0]->port()),
grpc::StatusCode::OK);
grpc_core::LocalIpAndPort(backends_[0]->port()), grpc::StatusCode::OK);
auto action = GetParam().rbac_action();
SendRpc([this]() { return CreateInsecureChannel(); }, {}, {},
/*test_expects_failure=*/action == RBAC_Action_DENY,

@ -464,11 +464,6 @@ const char XdsEnd2endTest::kServerKeyPath[] =
const char XdsEnd2endTest::kRequestMessage[] = "Live long and prosper.";
XdsEnd2endTest::XdsEnd2endTest() : balancer_(CreateAndStartBalancer()) {
bool localhost_resolves_to_ipv4 = false;
bool localhost_resolves_to_ipv6 = false;
grpc_core::LocalhostResolves(&localhost_resolves_to_ipv4,
&localhost_resolves_to_ipv6);
ipv6_only_ = !localhost_resolves_to_ipv4 && localhost_resolves_to_ipv6;
// Initialize default xDS resources.
// Construct LDS resource.
default_listener_.set_name(kServerName);
@ -510,7 +505,7 @@ XdsEnd2endTest::XdsEnd2endTest() : balancer_(CreateAndStartBalancer()) {
// Construct a default server-side Listener resource
default_server_listener_.mutable_address()
->mutable_socket_address()
->set_address(ipv6_only_ ? "::1" : "127.0.0.1");
->set_address(grpc_core::LocalIp());
default_server_listener_.mutable_default_filter_chain()
->add_filters()
->mutable_typed_config()
@ -541,7 +536,7 @@ XdsEnd2endTest::CreateAndStartBalancer() {
std::string XdsEnd2endTest::GetServerListenerName(int port) {
return absl::StrCat("grpc/server?xds.resource.listening_address=",
ipv6_only_ ? "[::1]:" : "127.0.0.1:", port);
grpc_core::LocalIp(), ":", port);
}
Listener XdsEnd2endTest::PopulateServerListenerNameAndPort(
@ -654,13 +649,13 @@ ClusterLoadAssignment XdsEnd2endTest::BuildEdsResource(
auto* endpoint_proto = lb_endpoints->mutable_endpoint();
auto* socket_address =
endpoint_proto->mutable_address()->mutable_socket_address();
socket_address->set_address(ipv6_only_ ? "::1" : "127.0.0.1");
socket_address->set_address(grpc_core::LocalIp());
socket_address->set_port_value(endpoint.port);
for (int port : endpoint.additional_ports) {
socket_address = endpoint_proto->add_additional_addresses()
->mutable_address()
->mutable_socket_address();
socket_address->set_address(ipv6_only_ ? "::1" : "127.0.0.1");
socket_address->set_address(grpc_core::LocalIp());
socket_address->set_port_value(port);
}
}

@ -1107,8 +1107,6 @@ class XdsEnd2endTest : public ::testing::TestWithParam<XdsTestType> {
// credentials for XdsCredentials.
static std::shared_ptr<ChannelCredentials> CreateTlsFallbackCredentials();
bool ipv6_only_ = false;
std::unique_ptr<BalancerServerThread> balancer_;
std::shared_ptr<Channel> channel_;

@ -26,6 +26,7 @@
#include "src/proto/grpc/testing/xds/v3/fault.grpc.pb.h"
#include "src/proto/grpc/testing/xds/v3/outlier_detection.grpc.pb.h"
#include "src/proto/grpc/testing/xds/v3/router.grpc.pb.h"
#include "test/core/util/resolve_localhost_ip46.h"
#include "test/cpp/end2end/xds/xds_end2end_test_lib.h"
namespace grpc {
@ -35,8 +36,8 @@ namespace {
class OutlierDetectionTest : public XdsEnd2endTest {
protected:
std::string CreateMetadataValueThatHashesToBackend(int index) {
return absl::StrCat(ipv6_only_ ? "[::1]" : "127.0.0.1", ":",
backends_[index]->port(), "_0");
return absl::StrCat(grpc_core::LocalIp(), ":", backends_[index]->port(),
"_0");
}
};

@ -32,6 +32,7 @@
#include "src/core/lib/gprpp/env.h"
#include "src/proto/grpc/testing/xds/v3/aggregate_cluster.grpc.pb.h"
#include "src/proto/grpc/testing/xds/v3/cluster.grpc.pb.h"
#include "test/core/util/resolve_localhost_ip46.h"
#include "test/cpp/end2end/connection_attempt_injector.h"
#include "test/cpp/end2end/xds/xds_end2end_test_lib.h"
@ -66,8 +67,8 @@ class RingHashTest : public XdsEnd2endTest {
const std::vector<int>& ports) {
grpc_core::EndpointAddressesList addresses;
for (int port : ports) {
absl::StatusOr<grpc_core::URI> lb_uri = grpc_core::URI::Parse(
absl::StrCat(ipv6_only_ ? "ipv6:[::1]:" : "ipv4:127.0.0.1:", port));
absl::StatusOr<grpc_core::URI> lb_uri =
grpc_core::URI::Parse(grpc_core::LocalIpUri(port));
GPR_ASSERT(lb_uri.ok());
grpc_resolved_address address;
GPR_ASSERT(grpc_parse_uri(*lb_uri, &address));
@ -77,7 +78,7 @@ class RingHashTest : public XdsEnd2endTest {
}
std::string CreateMetadataValueThatHashesToBackendPort(int port) {
return absl::StrCat(ipv6_only_ ? "[::1]" : "127.0.0.1", ":", port, "_0");
return absl::StrCat(grpc_core::LocalIp(), ":", port, "_0");
}
std::string CreateMetadataValueThatHashesToBackend(int index) {

Loading…
Cancel
Save