Go to the documentation of this file.
22 #include <gmock/gmock.h>
23 #include <gtest/gtest.h>
25 #include "absl/status/statusor.h"
26 #include "absl/strings/str_cat.h"
27 #include "absl/strings/string_view.h"
28 #include "absl/types/optional.h"
40 #include "src/proto/grpc/testing/echo.grpc.pb.h"
41 #include "src/proto/grpc/testing/xds/v3/http_connection_manager.grpc.pb.h"
42 #include "src/proto/grpc/testing/xds/v3/http_filter_rbac.grpc.pb.h"
127 retval +=
"FilterPerRouteOverride";
130 retval +=
"BootstrapFromFile";
132 retval +=
"BootstrapFromEnvVar";
134 if (
rbac_action_ == ::envoy::config::rbac::v3::RBAC_Action_ALLOW) {
135 retval +=
"RbacAllow";
136 }
else if (
rbac_action_ == ::envoy::config::rbac::v3::RBAC_Action_DENY) {
137 retval +=
"RbacDeny";
144 return info.param.AsString();
156 ::envoy::config::rbac::v3::RBAC_Action_LOG;
185 using Cluster = ::envoy::config::cluster::v3::Cluster;
187 ::envoy::config::endpoint::v3::ClusterLoadAssignment;
191 http_connection_manager::v3::HttpConnectionManager;
219 :
public grpc::experimental::XdsServerServingStatusNotifierInterface {
222 ServingStatusUpdate
update)
override;
246 return std::make_shared<SecureServerCredentials>(
263 class XdsChannelArgsServerBuilderOption;
265 virtual const char*
Type() = 0;
287 template <
typename RpcService>
305 last_peer_identity_.clear();
306 for (
const auto& entry : peer_identity) {
307 last_peer_identity_.emplace_back(entry.data(), entry.size());
333 return last_peer_identity_;
349 BackendServiceImpl<grpc::testing::EchoTest1Service::Service>*
353 BackendServiceImpl<grpc::testing::EchoTest2Service::Service>*
363 std::shared_ptr<ServerCredentials>
Credentials()
override;
366 const char*
Type()
override {
return "Backend"; }
371 BackendServiceImpl<grpc::testing::EchoTestService::Service>
388 const char*
Type()
override {
return "Balancer"; }
414 const std::string& client_default_listener_resource_name_template) {
416 client_default_listener_resource_name_template;
427 const std::string& client_listener_resource_name_template =
"") {
429 client_listener_resource_name_template};
433 const std::string& server_listener_resource_name_template =
"") {
435 server_listener_resource_name_template;
463 "grpc/server?xds.resource.listening_address=%s";
564 const Listener* listener_to_copy =
nullptr);
573 ::envoy::config::endpoint::v3::HealthStatus::UNKNOWN,
605 ::envoy::type::v3::FractionalPercent::MILLION;
612 ::envoy::config::endpoint::v3::HealthStatus health_status =
613 ::envoy::config::endpoint::v3::HealthStatus::UNKNOWN,
616 health_status, lb_weight);
622 size_t start_index = 0,
size_t stop_index = 0,
623 ::envoy::config::endpoint::v3::HealthStatus health_status =
624 ::envoy::config::endpoint::v3::HealthStatus::UNKNOWN,
635 const EdsResourceArgs&
args,
646 for (
size_t i = 0;
i < num_backends; ++
i) {
653 for (
auto& backend :
backends_) backend->Start();
667 for (
auto& backend :
backends_) backend->Shutdown();
689 size_t stop_index = 0)
const;
700 int xds_resource_does_not_exist_timeout_ms = 0);
707 std::shared_ptr<Channel>
CreateChannel(
int failover_timeout_ms = 0,
709 const char* xds_authority =
"",
722 std::vector<std::pair<std::string, std::string>>
metadata;
753 std::vector<std::pair<std::string, std::string>> rpc_metadata) {
794 template <
typename Stub>
798 switch (rpc_options.
method) {
822 const size_t times = 1,
847 void StartRpc(grpc::testing::EchoTestService::Stub*
stub,
849 RpcOptions().set_timeout_ms(0).set_client_cancel_after_us(
873 grpc::testing::EchoTestService::Stub*
stub,
size_t num_rpcs,
905 size_t stop_index = 0,
906 std::function<
void(
const RpcResult&)> check_status =
nullptr,
907 const WaitForBackendOptions& wait_options = WaitForBackendOptions(),
908 const RpcOptions& rpc_options = RpcOptions());
917 check_status, wait_options, rpc_options);
938 [&]() {
return balancer_->ads_service()->lds_response_state(); },
958 [&]() {
return balancer_->ads_service()->cds_response_state(); },
966 return balancer_->ads_service()->eds_response_state();
975 if (
GetParam().enable_rds_testing()) {
986 if (
GetParam().enable_rds_testing()) {
1024 ceil(p * (1 - p) * 5.00 * 5.00 / error_tolerance / error_tolerance);
1027 " RPCs for percentage=%.3f error_tolerance=%.3f",
1028 num_rpcs, p, error_tolerance);
1037 const char* key_path,
const char* cert_path);
1048 std::unique_ptr<grpc::testing::EchoTestService::Stub>
stub_;
1049 std::unique_ptr<grpc::testing::EchoTest1Service::Stub>
stub1_;
1050 std::unique_ptr<grpc::testing::EchoTest2Service::Stub>
stub2_;
1052 std::vector<std::unique_ptr<BackendServerThread>>
backends_;
@ kHttpFilterConfigInRoute
::envoy::config::rbac::v3::RBAC_Action rbac_action() const
::envoy::type::v3::FractionalPercent::DenominatorType drop_denominator
gpr_setenv("STS_CREDENTIALS", creds_file_name)
static const char kServerName[]
RpcOptions & set_client_cancel_after_us(int rpc_client_cancel_after_us)
void ShutdownAllBackends()
void StartAllServices() override
void SetServerListenerNameAndRouteConfiguration(BalancerServerThread *balancer, Listener listener, int port, const RouteConfiguration &route_config)
virtual void Pack(const HttpConnectionManager &hcm, Listener *listener) const =0
BackendServiceImpl< grpc::testing::EchoTestService::Service > backend_service_
RpcOptions & set_timeout_ms(int rpc_timeout_ms)
std::thread sender_thread_
void RegisterAllServices(ServerBuilder *builder) override
static Status SendRpcMethod(Stub *stub, const RpcOptions &rpc_options, ClientContext *context, EchoRequest &request, EchoResponse *response)
static const char kDefaultServerRouteConfigurationName[]
BootstrapBuilder & SetIgnoreResourceDeletion()
ClusterLoadAssignment BuildEdsResource(const EdsResourceArgs &args, const char *eds_service_name=kDefaultEdsServiceName)
XdsServingStatusNotifier notifier_
std::set< std::string > clients_
void Pack(const HttpConnectionManager &hcm, Listener *listener) const override
BootstrapBuilder & AddAuthority(const std::string &authority, const std::string &servers="", const std::string &client_listener_resource_name_template="")
WaitForBackendOptions & set_timeout_ms(int ms)
@ kBootstrapFromChannelArg
~ScopedExperimentalEnvVar()
::grpc_event_engine::experimental::EventEngine::Listener Listener
std::vector< Locality > locality_list
BalancerServerThread(XdsEnd2endTest *test_obj)
std::unique_ptr< grpc::testing::EchoTest2Service::Stub > stub2_
Status SendRpc(const RpcOptions &rpc_options=RpcOptions(), EchoResponse *response=nullptr)
void WaitOnServingStatusChange(std::string uri, grpc::StatusCode expected_status)
bool use_xds_enabled_server() const
size_t SendRpcsAndCountFailuresWithMessage(const grpc_core::DebugLocation &debug_location, size_t num_rpcs, StatusCode expected_status, absl::string_view expected_message_prefix, const RpcOptions &rpc_options=RpcOptions())
void CreateBackends(size_t num_backends, bool xds_enabled=false)
BackendServiceImpl< grpc::testing::EchoTest2Service::Service > backend_service2_
virtual std::shared_ptr< ServerCredentials > Credentials()
std::unique_ptr< grpc::testing::EchoTest1Service::Stub > stub1_
BootstrapSource bootstrap_source_
void OnServingStatusUpdate(std::string uri, ServingStatusUpdate update) override
void CheckRpcSendOk(const grpc_core::DebugLocation &debug_location, const size_t times=1, const RpcOptions &rpc_options=RpcOptions())
absl::optional< AdsServiceImpl::ResponseState > WaitForLdsNack(const grpc_core::DebugLocation &debug_location, StatusCode expected_status=StatusCode::UNAVAILABLE)
static const char kDefaultLocalityZone[]
absl::optional< AdsServiceImpl::ResponseState > WaitForRdsNack(const grpc_core::DebugLocation &debug_location, StatusCode expected_status=StatusCode::UNAVAILABLE)
std::map< std::string, AuthorityInfo > authorities_
Listener default_listener_
virtual ~HcmAccessor()=default
std::vector< int > GetBackendPorts(size_t start_index=0, size_t stop_index=0) const
void StartRpc(grpc::testing::EchoTestService::Stub *stub, const RpcOptions &rpc_options=RpcOptions().set_timeout_ms(0).set_client_cancel_after_us(1 *1000 *1000))
::envoy::config::route::v3::RouteConfiguration RouteConfiguration
void set_allow_put_requests(bool allow_put_requests)
std::set< std::string > clients()
virtual HttpConnectionManager Unpack(const Listener &listener) const =0
const bool use_xds_enabled_server_
void InitClient(BootstrapBuilder builder=BootstrapBuilder(), std::string lb_expected_authority="", int xds_resource_does_not_exist_timeout_ms=0)
static std::string ReadFile(const char *file_path)
HttpConnectionManager Unpack(const Listener &listener) const override
void IncreaseResponseCount()
const std::vector< std::string > & last_peer_identity()
std::string client_default_listener_resource_name_template_
int client_cancel_after_us
RpcOptions & set_server_sleep_us(int rpc_server_sleep_us)
StatusCode server_expected_error
bool enable_load_reporting() const
void ShutdownAllServices() override
BackendServerThread(XdsEnd2endTest *test_obj, bool use_xds_enabled_server)
XdsServingStatusNotifier * notifier()
void ResetStub(int failover_timeout_ms=0, ChannelArguments *args=nullptr)
constexpr absl::remove_reference_t< T > && move(T &&t) noexcept
BootstrapBuilder & AddCertificateProviderPlugin(const std::string &key, const std::string &name, const std::string &plugin_config="")
XdsTestType & set_rbac_action(::envoy::config::rbac::v3::RBAC_Action action)
A builder class for the creation and startup of grpc::Server instances.
virtual const char * Type()=0
XdsTestType & set_use_xds_credentials()
absl::optional< AdsServiceImpl::ResponseState > WaitForRouteConfigNack(const grpc_core::DebugLocation &debug_location, StatusCode expected_status=StatusCode::UNAVAILABLE)
GPRAPI void gpr_log(const char *file, int line, gpr_log_severity severity, const char *format,...) GPR_PRINT_FORMAT_CHECK(4
XdsTestType & set_enable_rds_testing()
void CreateAndStartBackends(size_t num_backends, bool xds_enabled=false)
std::vector< Endpoint > endpoints
bool enable_rds_testing() const
Listener PopulateServerListenerNameAndPort(const Listener &listener_template, int port)
std::unique_ptr< BalancerServerThread > CreateAndStartBalancer()
::envoy::config::rbac::v3::RBAC_Action rbac_action_
BootstrapBuilder & SetServerListenerResourceNameTemplate(const std::string &server_listener_resource_name_template="")
RpcOptions & set_rpc_method(RpcMethod rpc_method)
void WaitForBackend(const grpc_core::DebugLocation &debug_location, size_t backend_idx, std::function< void(const RpcResult &)> check_status=nullptr, const WaitForBackendOptions &wait_options=WaitForBackendOptions(), const RpcOptions &rpc_options=RpcOptions())
XdsTestType & set_use_v2()
void ShutdownBackend(size_t index)
XdsTestType & set_use_csds_streaming()
::envoy::config::endpoint::v3::ClusterLoadAssignment ClusterLoadAssignment
std::shared_ptr< Channel > channel_
gpr_unsetenv("STS_CREDENTIALS")
void Serve(grpc_core::Mutex *mu, grpc_core::CondVar *cond)
std::string MakeAuthorityText()
static const char kDefaultRouteConfigurationName[]
std::shared_ptr< const grpc::AuthContext > auth_context() const
static const Status & OK
An OK pre-defined instance.
def server(thread_pool, handlers=None, interceptors=None, options=None, maximum_concurrent_rpcs=None, compression=None, xds=False)
void RegisterAllServices(ServerBuilder *builder) override
std::shared_ptr< Channel > CreateChannel(int failover_timeout_ms=0, const char *server_name=kServerName, const char *xds_authority="", ChannelArguments *args=nullptr)
grpc_server_credentials * grpc_fake_transport_security_server_credentials_create()
static const char kCaCertPath[]
absl::optional< AdsServiceImpl::ResponseState > WaitForEdsNack(const grpc_core::DebugLocation &debug_location)
static size_t ComputeIdealNumRpcs(double p, double error_tolerance)
::grpc_event_engine::experimental::EventEngine::Endpoint Endpoint
int grpc_pick_unused_port_or_die(void)
std::shared_ptr< LrsServiceImpl > lrs_service_
std::string MakeXdsServersText(absl::string_view server_uri)
BackendServiceImpl< grpc::testing::EchoTest1Service::Service > * backend_service1()
Status Echo(ServerContext *context, const EchoRequest *request, EchoResponse *response)
GPRAPI gpr_timespec gpr_now(gpr_clock_type clock)
void ResetBackendCounters(size_t start_index=0, size_t stop_index=0)
std::map< std::string, PluginInfo > plugins_
absl::optional< AdsServiceImpl::ResponseState > WaitForCdsNack(const grpc_core::DebugLocation &debug_location, StatusCode expected_status=StatusCode::UNAVAILABLE)
Status Echo2(ServerContext *context, const EchoRequest *request, EchoResponse *response) override
bool SeenBackend(size_t backend_idx, const RpcService rpc_service=SERVICE_ECHO)
Endpoint(int port, ::envoy::config::endpoint::v3::HealthStatus health_status=::envoy::config::endpoint::v3::HealthStatus::UNKNOWN, int lb_weight=1)
AdsServiceImpl * ads_service()
std::map< std::string, uint32_t > drop_categories
void IncreaseRequestCount()
std::string server_listener_resource_name_template_
std::vector< std::unique_ptr< BackendServerThread > > backends_
const std::string sub_zone
::envoy::extensions::filters::network::http_connection_manager::v3::HttpConnectionManager HttpConnectionManager
void StartBackend(size_t index)
ScopedExperimentalEnvVar(const char *env_var)
std::map< std::string, grpc::Status > status_map ABSL_GUARDED_BY(mu_)
EdsResourceArgs(std::vector< Locality > locality_list)
LrsServiceImpl * lrs_service()
XdsTestType & set_bootstrap_source(BootstrapSource bootstrap_source)
HttpFilterConfigLocation filter_config_setup_
virtual void RegisterAllServices(ServerBuilder *builder)=0
std::string client_listener_resource_name_template
RpcOptions & set_server_expected_error(StatusCode code)
static const char kServerCertPath[]
::envoy::config::endpoint::v3::HealthStatus health_status
absl::optional< ResponseState > rds_response_state()
bool use_xds_credentials() const
std::string AsString() const
std::vector< EdsResourceArgs::Endpoint > CreateEndpointsForBackends(size_t start_index=0, size_t stop_index=0, ::envoy::config::endpoint::v3::HealthStatus health_status=::envoy::config::endpoint::v3::HealthStatus::UNKNOWN, int lb_weight=1)
BackendServiceImpl< grpc::testing::EchoTest1Service::Service > backend_service1_
BackendServiceImpl< grpc::testing::EchoTestService::Service > * backend_service()
std::set< std::string > clients_ ABSL_GUARDED_BY(mu_)
::envoy::config::cluster::v3::Cluster Cluster
std::string eds_service_name
static const int kDefaultLocalityPriority
std::unique_ptr< Server > server_
std::vector< ConcurrentRpc > SendConcurrentRpcs(const grpc_core::DebugLocation &debug_location, grpc::testing::EchoTestService::Stub *stub, size_t num_rpcs, const RpcOptions &rpc_options)
const char * Type() override
@ kHttpFilterConfigInListener
EdsResourceArgs::Endpoint CreateEndpoint(size_t backend_idx, ::envoy::config::endpoint::v3::HealthStatus health_status=::envoy::config::endpoint::v3::HealthStatus::UNKNOWN, int lb_weight=1)
absl::optional< ResponseState > lds_response_state()
std::string MakeCertificateProviderText()
void ShutdownAllServices() override
std::vector< PemKeyCertPair > PemKeyCertPairList
Status Echo1(ServerContext *context, const EchoRequest *request, EchoResponse *response) override
grpc_core::Duration elapsed_time
std::unique_ptr< std::thread > thread_
HttpFilterConfigLocation filter_config_setup() const
RpcOptions & set_metadata(std::vector< std::pair< std::string, std::string >> rpc_metadata)
void Pack(const HttpConnectionManager &hcm, Listener *listener) const override
static Timestamp FromTimespecRoundDown(gpr_timespec t)
BootstrapBuilder & SetDefaultServer(const std::string &server)
static const char kDefaultClusterName[]
static const char kDefaultLocalityRegion[]
std::shared_ptr< AdsServiceImpl > ads_service_
BackendServiceImpl< grpc::testing::EchoTest2Service::Service > * backend_service2()
static const ParamType & GetParam()
BootstrapSource bootstrap_source() const
RpcOptions & set_wait_for_ready(bool rpc_wait_for_ready)
bool ignore_resource_deletion_
void StopListeningAndSendGoaways()
bool use_xds_credentials_
bool skip_cancelled_check
EdsResourceArgs::Endpoint MakeNonExistantEndpoint()
std::unique_ptr< grpc::testing::EchoTestService::Stub > stub_
static grpc_core::Timestamp NowFromCycleCounter()
RpcOptions & set_rpc_service(RpcService rpc_service)
static grpc_core::PemKeyCertPairList ReadTlsIdentityPair(const char *key_path, const char *cert_path)
std::string plugin_config
BootstrapBuilder & SetClientDefaultListenerResourceNameTemplate(const std::string &client_default_listener_resource_name_template)
void SetupRpc(ClientContext *context, EchoRequest *request) const
ServerThread(XdsEnd2endTest *test_obj, bool use_xds_enabled_server=false)
std::unique_ptr< BalancerServerThread > balancer_
std::string MakeNodeText()
void CheckRpcSendFailure(const grpc_core::DebugLocation &debug_location, StatusCode expected_status, absl::string_view expected_message_regex, const RpcOptions &rpc_options=RpcOptions())
std::shared_ptr< ServerCredentials > Credentials() override
bool SeenAllBackends(size_t start_index=0, size_t stop_index=0, const RpcService rpc_service=SERVICE_ECHO)
const char * Type() override
Listener default_server_listener_
grpc::ClientContext context
XdsTestType & set_enable_load_reporting()
EdsResourceArgs()=default
static const char kDefaultEdsServiceName[]
XdsEnd2endTest * test_obj_
std::vector< std::pair< std::string, std::string > > metadata
size_t WaitForAllBackends(const grpc_core::DebugLocation &debug_location, size_t start_index=0, size_t stop_index=0, std::function< void(const RpcResult &)> check_status=nullptr, const WaitForBackendOptions &wait_options=WaitForBackendOptions(), const RpcOptions &rpc_options=RpcOptions())
void StartAllServices() override
static const char kRequestMessage[]
RouteConfiguration default_route_config_
virtual void StartAllServices()=0
static std::shared_ptr< ChannelCredentials > CreateTlsFallbackCredentials()
grpc_channel_args xds_channel_args_
RpcOptions & set_server_fail(bool rpc_server_fail)
void SetRouteConfiguration(BalancerServerThread *balancer, const RouteConfiguration &route_config, const Listener *listener_to_copy=nullptr)
absl::optional< AdsServiceImpl::ResponseState > WaitForNack(const grpc_core::DebugLocation &debug_location, std::function< absl::optional< AdsServiceImpl::ResponseState >()> get_state, StatusCode expected_status=StatusCode::UNAVAILABLE)
bool bootstrap_contents_from_env_var_
absl::InlinedVector< grpc_arg, 3 > xds_channel_args_to_add_
Status Echo(ServerContext *context, const EchoRequest *request, EchoResponse *response) override
bool enable_load_reporting_
std::string GetServerListenerName(int port)
absl::optional< XdsClusterResource > update
int xds_drain_grace_time_ms_
WaitForBackendOptions & set_reset_counters(bool enable)
XdsTestType & set_filter_config_setup(HttpFilterConfigLocation setup)
RpcOptions & set_skip_cancelled_check(bool rpc_skip_cancelled_check)
static uv_thread_t thread
static const char kServerKeyPath[]
static const int kDefaultLocalityWeight
bool use_csds_streaming() const
Locality(std::string sub_zone, std::vector< Endpoint > endpoints, int lb_weight=kDefaultLocalityWeight, int priority=kDefaultLocalityPriority)
void SendRpcsUntil(const grpc_core::DebugLocation &debug_location, std::function< bool(const RpcResult &)> continue_predicate, int timeout_ms=5000, const RpcOptions &rpc_options=RpcOptions())
RouteConfiguration default_server_route_config_
BootstrapBuilder & SetV2()
static std::string Name(const ::testing::TestParamInfo< XdsTestType > &info)
HttpConnectionManager Unpack(const Listener &listener) const override
virtual void ShutdownAllServices()=0
absl::optional< AdsServiceImpl::ResponseState > RouteConfigurationResponseState(BalancerServerThread *balancer) const
void SetListenerAndRouteConfiguration(BalancerServerThread *balancer, Listener listener, const RouteConfiguration &route_config, const HcmAccessor &hcm_accessor=ClientHcmAccessor())
grpc
Author(s):
autogenerated on Fri May 16 2025 03:00:58