22 #include <gtest/gtest.h>
24 #include "absl/memory/memory.h"
39 #include "src/proto/grpc/testing/echo.grpc.pb.h"
47 #ifdef GRPC_POSIX_SOCKET
63 kAsyncCQClientStreaming,
64 kAsyncCQServerStreaming,
65 kAsyncCQBidiStreaming,
68 enum class ChannelType {
74 class HijackingInterceptor :
public experimental::Interceptor {
76 explicit HijackingInterceptor(experimental::ClientRpcInfo* info) {
79 EXPECT_EQ(strcmp(
"/grpc.testing.EchoTestService/Echo", info->method()), 0);
80 EXPECT_EQ(info->suffix_for_stats(),
nullptr);
84 void Intercept(experimental::InterceptorBatchMethods* methods)
override {
86 if (methods->QueryInterceptionHookPoint(
88 auto*
map = methods->GetSendInitialMetadata();
96 if (methods->QueryInterceptionHookPoint(
99 auto*
buffer = methods->GetSerializedSendMessage();
100 auto copied_buffer = *
buffer;
102 SerializationTraits<EchoRequest>::Deserialize(&copied_buffer, &
req)
106 if (methods->QueryInterceptionHookPoint(
110 if (methods->QueryInterceptionHookPoint(
112 auto*
map = methods->GetRecvInitialMetadata();
116 if (methods->QueryInterceptionHookPoint(
119 static_cast<EchoResponse*
>(methods->GetRecvMessage());
123 resp->set_message(
"Hello");
125 if (methods->QueryInterceptionHookPoint(
127 auto*
map = methods->GetRecvTrailingMetadata();
130 for (
const auto&
pair : *
map) {
131 found =
pair.first.starts_with(
"testkey") &&
132 pair.second.starts_with(
"testvalue");
136 auto*
status = methods->GetRecvStatus();
139 if (methods->QueryInterceptionHookPoint(
141 auto*
map = methods->GetRecvInitialMetadata();
145 if (methods->QueryInterceptionHookPoint(
149 static_cast<EchoResponse*
>(methods->GetRecvMessage());
150 resp->set_message(
"Hello1");
152 if (methods->QueryInterceptionHookPoint(
154 auto*
map = methods->GetRecvTrailingMetadata();
157 map->insert(std::make_pair(
"testkey",
"testvalue"));
158 auto*
status = methods->GetRecvStatus();
172 class HijackingInterceptorFactory
173 :
public experimental::ClientInterceptorFactoryInterface {
175 experimental::Interceptor* CreateClientInterceptor(
176 experimental::ClientRpcInfo* info)
override {
177 return new HijackingInterceptor(info);
181 class HijackingInterceptorMakesAnotherCall :
public experimental::Interceptor {
183 explicit HijackingInterceptorMakesAnotherCall(
184 experimental::ClientRpcInfo* info) {
187 EXPECT_EQ(strcmp(
"/grpc.testing.EchoTestService/Echo", info->method()), 0);
188 EXPECT_EQ(strcmp(
"TestSuffixForStats", info->suffix_for_stats()), 0);
191 void Intercept(experimental::InterceptorBatchMethods* methods)
override {
192 if (methods->QueryInterceptionHookPoint(
194 auto*
map = methods->GetSendInitialMetadata();
203 if (methods->QueryInterceptionHookPoint(
206 auto*
buffer = methods->GetSerializedSendMessage();
207 auto copied_buffer = *
buffer;
209 SerializationTraits<EchoRequest>::Deserialize(&copied_buffer, &
req)
213 stub_ = grpc::testing::EchoTestService::NewStub(
214 methods->GetInterceptedChannel());
228 if (methods->QueryInterceptionHookPoint(
232 if (methods->QueryInterceptionHookPoint(
234 auto*
map = methods->GetRecvInitialMetadata();
238 if (methods->QueryInterceptionHookPoint(
241 static_cast<EchoResponse*
>(methods->GetRecvMessage());
246 if (methods->QueryInterceptionHookPoint(
248 auto*
map = methods->GetRecvTrailingMetadata();
251 for (
const auto&
pair : *
map) {
252 found =
pair.first.starts_with(
"testkey") &&
253 pair.second.starts_with(
"testvalue");
257 auto*
status = methods->GetRecvStatus();
260 if (methods->QueryInterceptionHookPoint(
262 auto*
map = methods->GetRecvInitialMetadata();
266 if (methods->QueryInterceptionHookPoint(
270 static_cast<EchoResponse*
>(methods->GetRecvMessage());
273 if (methods->QueryInterceptionHookPoint(
275 auto*
map = methods->GetRecvTrailingMetadata();
278 map->insert(std::make_pair(
"testkey",
"testvalue"));
279 auto*
status = methods->GetRecvStatus();
287 experimental::ClientRpcInfo*
info_;
292 std::unique_ptr<grpc::testing::EchoTestService::Stub>
stub_;
295 class HijackingInterceptorMakesAnotherCallFactory
296 :
public experimental::ClientInterceptorFactoryInterface {
298 experimental::Interceptor* CreateClientInterceptor(
299 experimental::ClientRpcInfo* info)
override {
300 return new HijackingInterceptorMakesAnotherCall(info);
304 class BidiStreamingRpcHijackingInterceptor :
public experimental::Interceptor {
306 explicit BidiStreamingRpcHijackingInterceptor(
307 experimental::ClientRpcInfo* info) {
309 EXPECT_EQ(info->suffix_for_stats(),
nullptr);
312 void Intercept(experimental::InterceptorBatchMethods* methods)
override {
314 if (methods->QueryInterceptionHookPoint(
316 CheckMetadata(*methods->GetSendInitialMetadata(),
"testkey",
"testvalue");
319 if (methods->QueryInterceptionHookPoint(
322 auto*
buffer = methods->GetSerializedSendMessage();
323 auto copied_buffer = *
buffer;
325 SerializationTraits<EchoRequest>::Deserialize(&copied_buffer, &
req)
330 if (methods->QueryInterceptionHookPoint(
334 if (methods->QueryInterceptionHookPoint(
336 CheckMetadata(*methods->GetRecvTrailingMetadata(),
"testkey",
338 auto*
status = methods->GetRecvStatus();
341 if (methods->QueryInterceptionHookPoint(
344 static_cast<EchoResponse*
>(methods->GetRecvMessage());
347 if (methods->QueryInterceptionHookPoint(
349 EXPECT_EQ(
static_cast<EchoResponse*
>(methods->GetRecvMessage())
354 if (methods->QueryInterceptionHookPoint(
356 auto*
map = methods->GetRecvTrailingMetadata();
359 map->insert(std::make_pair(
"testkey",
"testvalue"));
360 auto*
status = methods->GetRecvStatus();
371 experimental::ClientRpcInfo*
info_;
375 class ClientStreamingRpcHijackingInterceptor
376 :
public experimental::Interceptor {
378 explicit ClientStreamingRpcHijackingInterceptor(
379 experimental::ClientRpcInfo* info) {
382 strcmp(
"/grpc.testing.EchoTestService/RequestStream", info->method()),
384 EXPECT_EQ(strcmp(
"TestSuffixForStats", info->suffix_for_stats()), 0);
386 void Intercept(experimental::InterceptorBatchMethods* methods)
override {
388 if (methods->QueryInterceptionHookPoint(
392 if (methods->QueryInterceptionHookPoint(
395 methods->FailHijackedSendMessage();
398 if (methods->QueryInterceptionHookPoint(
403 if (methods->QueryInterceptionHookPoint(
405 auto*
status = methods->GetRecvStatus();
418 experimental::ClientRpcInfo*
info_;
425 class ClientStreamingRpcHijackingInterceptorFactory
426 :
public experimental::ClientInterceptorFactoryInterface {
428 experimental::Interceptor* CreateClientInterceptor(
429 experimental::ClientRpcInfo* info)
override {
430 return new ClientStreamingRpcHijackingInterceptor(info);
434 class ServerStreamingRpcHijackingInterceptor
435 :
public experimental::Interceptor {
437 explicit ServerStreamingRpcHijackingInterceptor(
438 experimental::ClientRpcInfo* info) {
441 EXPECT_EQ(info->suffix_for_stats(),
nullptr);
444 void Intercept(experimental::InterceptorBatchMethods* methods)
override {
446 if (methods->QueryInterceptionHookPoint(
448 auto*
map = methods->GetSendInitialMetadata();
456 if (methods->QueryInterceptionHookPoint(
459 auto*
buffer = methods->GetSerializedSendMessage();
460 auto copied_buffer = *
buffer;
462 SerializationTraits<EchoRequest>::Deserialize(&copied_buffer, &
req)
466 if (methods->QueryInterceptionHookPoint(
470 if (methods->QueryInterceptionHookPoint(
472 auto*
map = methods->GetRecvTrailingMetadata();
475 for (
const auto&
pair : *
map) {
476 found =
pair.first.starts_with(
"testkey") &&
477 pair.second.starts_with(
"testvalue");
481 auto*
status = methods->GetRecvStatus();
484 if (methods->QueryInterceptionHookPoint(
487 methods->FailHijackedRecvMessage();
490 static_cast<EchoResponse*
>(methods->GetRecvMessage());
491 resp->set_message(
"Hello");
493 if (methods->QueryInterceptionHookPoint(
499 if (methods->QueryInterceptionHookPoint(
501 auto*
map = methods->GetRecvTrailingMetadata();
504 map->insert(std::make_pair(
"testkey",
"testvalue"));
505 auto*
status = methods->GetRecvStatus();
518 experimental::ClientRpcInfo*
info_;
525 class ServerStreamingRpcHijackingInterceptorFactory
526 :
public experimental::ClientInterceptorFactoryInterface {
528 experimental::Interceptor* CreateClientInterceptor(
529 experimental::ClientRpcInfo* info)
override {
530 return new ServerStreamingRpcHijackingInterceptor(info);
534 class BidiStreamingRpcHijackingInterceptorFactory
535 :
public experimental::ClientInterceptorFactoryInterface {
537 experimental::Interceptor* CreateClientInterceptor(
538 experimental::ClientRpcInfo* info)
override {
539 return new BidiStreamingRpcHijackingInterceptor(info);
547 class LoggingInterceptor :
public experimental::Interceptor {
549 explicit LoggingInterceptor(experimental::ClientRpcInfo* ) {
558 void Intercept(experimental::InterceptorBatchMethods* methods)
override {
559 if (methods->QueryInterceptionHookPoint(
561 auto*
map = methods->GetSendInitialMetadata();
570 if (methods->QueryInterceptionHookPoint(
573 auto* send_msg = methods->GetSendMessage();
574 if (send_msg ==
nullptr) {
577 auto*
buffer = methods->GetSerializedSendMessage();
578 auto copied_buffer = *
buffer;
581 SerializationTraits<EchoRequest>::Deserialize(&copied_buffer, &
req)
586 static_cast<const EchoRequest*
>(send_msg)->
message().
find(
"Hello"),
589 auto*
buffer = methods->GetSerializedSendMessage();
590 auto copied_buffer = *
buffer;
592 SerializationTraits<EchoRequest>::Deserialize(&copied_buffer, &
req)
597 if (methods->QueryInterceptionHookPoint(
602 if (methods->QueryInterceptionHookPoint(
604 auto*
map = methods->GetRecvInitialMetadata();
609 if (methods->QueryInterceptionHookPoint(
612 static_cast<EchoResponse*
>(methods->GetRecvMessage());
613 if (
resp !=
nullptr) {
618 if (methods->QueryInterceptionHookPoint(
620 auto*
map = methods->GetRecvTrailingMetadata();
623 for (
const auto&
pair : *
map) {
624 found =
pair.first.starts_with(
"testkey") &&
625 pair.second.starts_with(
"testvalue");
629 auto*
status = methods->GetRecvStatus();
636 static void VerifyCall(RPCType
type) {
638 case RPCType::kSyncUnary:
639 case RPCType::kAsyncCQUnary:
642 case RPCType::kSyncClientStreaming:
643 case RPCType::kAsyncCQClientStreaming:
644 VerifyClientStreamingCall();
646 case RPCType::kSyncServerStreaming:
647 case RPCType::kAsyncCQServerStreaming:
648 VerifyServerStreamingCall();
650 case RPCType::kSyncBidiStreaming:
651 case RPCType::kAsyncCQBidiStreaming:
652 VerifyBidiStreamingCall();
657 static void VerifyCallCommon() {
664 static void VerifyUnaryCall() {
670 static void VerifyClientStreamingCall() {
676 static void VerifyServerStreamingCall() {
682 static void VerifyBidiStreamingCall() {
704 class LoggingInterceptorFactory
705 :
public experimental::ClientInterceptorFactoryInterface {
707 experimental::Interceptor* CreateClientInterceptor(
708 experimental::ClientRpcInfo* info)
override {
709 return new LoggingInterceptor(info);
715 explicit TestScenario(
const ChannelType& channel_type,
716 const RPCType& rpc_type)
721 RPCType rpc_type()
const {
return rpc_type_; }
730 std::vector<RPCType> rpc_types;
731 rpc_types.emplace_back(RPCType::kSyncUnary);
732 rpc_types.emplace_back(RPCType::kSyncClientStreaming);
733 rpc_types.emplace_back(RPCType::kSyncServerStreaming);
734 rpc_types.emplace_back(RPCType::kSyncBidiStreaming);
735 rpc_types.emplace_back(RPCType::kAsyncCQUnary);
736 rpc_types.emplace_back(RPCType::kAsyncCQServerStreaming);
737 for (
const auto& rpc_type : rpc_types) {
738 scenarios.emplace_back(ChannelType::kHttpChannel, rpc_type);
740 #ifdef GRPC_POSIX_SOCKET
741 scenarios.emplace_back(ChannelType::kFdChannel, rpc_type);
747 class ParameterizedClientInterceptorsEnd2endTest
750 ParameterizedClientInterceptorsEnd2endTest() {
753 if (GetParam().channel_type() == ChannelType::kHttpChannel) {
759 #ifdef GRPC_POSIX_SOCKET
760 else if (GetParam().channel_type() == ChannelType::kFdChannel) {
772 AddInsecureChannelFromFd(
server_.get(),
sv_[1]);
777 ~ParameterizedClientInterceptorsEnd2endTest()
override {
781 std::shared_ptr<grpc::Channel> CreateClientChannel(
782 std::vector<std::unique_ptr<
785 if (GetParam().channel_type() == ChannelType::kHttpChannel) {
790 #ifdef GRPC_POSIX_SOCKET
791 else if (GetParam().channel_type() == ChannelType::kFdChannel) {
792 return experimental::CreateCustomInsecureChannelWithInterceptorsFromFd(
799 void SendRPC(
const std::shared_ptr<Channel>&
channel) {
800 switch (GetParam().rpc_type()) {
801 case RPCType::kSyncUnary:
804 case RPCType::kSyncClientStreaming:
807 case RPCType::kSyncServerStreaming:
810 case RPCType::kSyncBidiStreaming:
813 case RPCType::kAsyncCQUnary:
816 case RPCType::kAsyncCQClientStreaming:
819 case RPCType::kAsyncCQServerStreaming:
822 case RPCType::kAsyncCQBidiStreaming:
834 TEST_P(ParameterizedClientInterceptorsEnd2endTest,
835 ClientInterceptorLoggingTest) {
836 ChannelArguments
args;
838 std::vector<std::unique_ptr<experimental::ClientInterceptorFactoryInterface>>
840 creators.push_back(absl::make_unique<LoggingInterceptorFactory>());
842 for (
auto i = 0;
i < 20;
i++) {
843 creators.push_back(absl::make_unique<PhonyInterceptorFactory>());
847 LoggingInterceptor::VerifyCall(GetParam().rpc_type());
853 ParameterizedClientInterceptorsEnd2endTest,
856 class ClientInterceptorsEnd2endTest
859 ClientInterceptorsEnd2endTest() {
869 ~ClientInterceptorsEnd2endTest()
override {
server_->Shutdown(); }
873 std::unique_ptr<Server>
server_;
876 TEST_F(ClientInterceptorsEnd2endTest,
877 LameChannelClientInterceptorHijackingTest) {
878 ChannelArguments
args;
879 std::vector<std::unique_ptr<experimental::ClientInterceptorFactoryInterface>>
881 creators.push_back(absl::make_unique<HijackingInterceptorFactory>());
887 TEST_F(ClientInterceptorsEnd2endTest, ClientInterceptorHijackingTest) {
888 ChannelArguments
args;
890 std::vector<std::unique_ptr<experimental::ClientInterceptorFactoryInterface>>
893 creators.reserve(20);
894 for (
auto i = 0;
i < 20;
i++) {
895 creators.push_back(absl::make_unique<PhonyInterceptorFactory>());
897 creators.push_back(absl::make_unique<HijackingInterceptorFactory>());
899 for (
auto i = 0;
i < 20;
i++) {
900 creators.push_back(absl::make_unique<PhonyInterceptorFactory>());
909 TEST_F(ClientInterceptorsEnd2endTest, ClientInterceptorLogThenHijackTest) {
910 ChannelArguments
args;
911 std::vector<std::unique_ptr<experimental::ClientInterceptorFactoryInterface>>
913 creators.push_back(absl::make_unique<LoggingInterceptorFactory>());
914 creators.push_back(absl::make_unique<HijackingInterceptorFactory>());
918 LoggingInterceptor::VerifyUnaryCall();
921 TEST_F(ClientInterceptorsEnd2endTest,
922 ClientInterceptorHijackingMakesAnotherCallTest) {
923 ChannelArguments
args;
925 std::vector<std::unique_ptr<experimental::ClientInterceptorFactoryInterface>>
929 for (
auto i = 0;
i < 5;
i++) {
930 creators.push_back(absl::make_unique<PhonyInterceptorFactory>());
933 std::unique_ptr<experimental::ClientInterceptorFactoryInterface>(
934 new HijackingInterceptorMakesAnotherCallFactory()));
936 for (
auto i = 0;
i < 7;
i++) {
937 creators.push_back(absl::make_unique<PhonyInterceptorFactory>());
939 auto channel =
server_->experimental().InProcessChannelWithInterceptors(
950 ClientInterceptorsCallbackEnd2endTest() {
960 ~ClientInterceptorsCallbackEnd2endTest()
override {
server_->Shutdown(); }
964 std::unique_ptr<Server>
server_;
967 TEST_F(ClientInterceptorsCallbackEnd2endTest,
968 ClientInterceptorLoggingTestWithCallback) {
969 ChannelArguments
args;
971 std::vector<std::unique_ptr<experimental::ClientInterceptorFactoryInterface>>
973 creators.push_back(absl::make_unique<LoggingInterceptorFactory>());
975 for (
auto i = 0;
i < 20;
i++) {
976 creators.push_back(absl::make_unique<PhonyInterceptorFactory>());
978 auto channel =
server_->experimental().InProcessChannelWithInterceptors(
981 LoggingInterceptor::VerifyUnaryCall();
986 TEST_F(ClientInterceptorsCallbackEnd2endTest,
987 ClientInterceptorHijackingTestWithCallback) {
988 ChannelArguments
args;
990 std::vector<std::unique_ptr<experimental::ClientInterceptorFactoryInterface>>
992 creators.push_back(absl::make_unique<LoggingInterceptorFactory>());
994 for (
auto i = 0;
i < 20;
i++) {
995 creators.push_back(absl::make_unique<PhonyInterceptorFactory>());
997 creators.push_back(absl::make_unique<HijackingInterceptorFactory>());
998 auto channel =
server_->experimental().InProcessChannelWithInterceptors(
1001 LoggingInterceptor::VerifyUnaryCall();
1006 TEST_F(ClientInterceptorsCallbackEnd2endTest,
1007 ClientInterceptorFactoryAllowsNullptrReturn) {
1008 ChannelArguments
args;
1010 std::vector<std::unique_ptr<experimental::ClientInterceptorFactoryInterface>>
1012 creators.push_back(absl::make_unique<LoggingInterceptorFactory>());
1014 for (
auto i = 0;
i < 20;
i++) {
1015 creators.push_back(absl::make_unique<PhonyInterceptorFactory>());
1016 creators.push_back(absl::make_unique<NullInterceptorFactory>());
1018 auto channel =
server_->experimental().InProcessChannelWithInterceptors(
1021 LoggingInterceptor::VerifyUnaryCall();
1026 class ClientInterceptorsStreamingEnd2endTest :
public ::testing::Test {
1028 ClientInterceptorsStreamingEnd2endTest() {
1038 ~ClientInterceptorsStreamingEnd2endTest()
override {
server_->Shutdown(); }
1041 EchoTestServiceStreamingImpl
service_;
1042 std::unique_ptr<Server>
server_;
1045 TEST_F(ClientInterceptorsStreamingEnd2endTest, ClientStreamingTest) {
1046 ChannelArguments
args;
1048 std::vector<std::unique_ptr<experimental::ClientInterceptorFactoryInterface>>
1050 creators.push_back(absl::make_unique<LoggingInterceptorFactory>());
1052 for (
auto i = 0;
i < 20;
i++) {
1053 creators.push_back(absl::make_unique<PhonyInterceptorFactory>());
1058 LoggingInterceptor::VerifyClientStreamingCall();
1063 TEST_F(ClientInterceptorsStreamingEnd2endTest, ServerStreamingTest) {
1064 ChannelArguments
args;
1066 std::vector<std::unique_ptr<experimental::ClientInterceptorFactoryInterface>>
1068 creators.push_back(absl::make_unique<LoggingInterceptorFactory>());
1070 for (
auto i = 0;
i < 20;
i++) {
1071 creators.push_back(absl::make_unique<PhonyInterceptorFactory>());
1076 LoggingInterceptor::VerifyServerStreamingCall();
1081 TEST_F(ClientInterceptorsStreamingEnd2endTest, ClientStreamingHijackingTest) {
1082 ChannelArguments
args;
1083 std::vector<std::unique_ptr<experimental::ClientInterceptorFactoryInterface>>
1086 absl::make_unique<ClientStreamingRpcHijackingInterceptorFactory>());
1090 auto stub = grpc::testing::EchoTestService::NewStub(
1091 channel, StubOptions(
"TestSuffixForStats"));
1095 req.mutable_param()->set_echo_metadata(
true);
1096 req.set_message(
"Hello");
1097 string expected_resp =
"";
1099 for (
int i = 0;
i < 10;
i++) {
1101 expected_resp +=
"Hello";
1107 EXPECT_TRUE(ClientStreamingRpcHijackingInterceptor::GotFailedSend());
1110 TEST_F(ClientInterceptorsStreamingEnd2endTest, ServerStreamingHijackingTest) {
1111 ChannelArguments
args;
1113 std::vector<std::unique_ptr<experimental::ClientInterceptorFactoryInterface>>
1116 absl::make_unique<ServerStreamingRpcHijackingInterceptorFactory>());
1120 EXPECT_TRUE(ServerStreamingRpcHijackingInterceptor::GotFailedMessage());
1123 TEST_F(ClientInterceptorsStreamingEnd2endTest,
1124 AsyncCQServerStreamingHijackingTest) {
1125 ChannelArguments
args;
1127 std::vector<std::unique_ptr<experimental::ClientInterceptorFactoryInterface>>
1130 absl::make_unique<ServerStreamingRpcHijackingInterceptorFactory>());
1134 EXPECT_TRUE(ServerStreamingRpcHijackingInterceptor::GotFailedMessage());
1137 TEST_F(ClientInterceptorsStreamingEnd2endTest, BidiStreamingHijackingTest) {
1138 ChannelArguments
args;
1140 std::vector<std::unique_ptr<experimental::ClientInterceptorFactoryInterface>>
1143 absl::make_unique<BidiStreamingRpcHijackingInterceptorFactory>());
1149 TEST_F(ClientInterceptorsStreamingEnd2endTest, BidiStreamingTest) {
1150 ChannelArguments
args;
1152 std::vector<std::unique_ptr<experimental::ClientInterceptorFactoryInterface>>
1154 creators.push_back(absl::make_unique<LoggingInterceptorFactory>());
1156 for (
auto i = 0;
i < 20;
i++) {
1157 creators.push_back(absl::make_unique<PhonyInterceptorFactory>());
1162 LoggingInterceptor::VerifyBidiStreamingCall();
1169 ClientGlobalInterceptorEnd2endTest() {
1179 ~ClientGlobalInterceptorEnd2endTest()
override {
server_->Shutdown(); }
1183 std::unique_ptr<Server>
server_;
1186 TEST_F(ClientGlobalInterceptorEnd2endTest, PhonyGlobalInterceptor) {
1192 ChannelArguments
args;
1194 std::vector<std::unique_ptr<experimental::ClientInterceptorFactoryInterface>>
1197 creators.reserve(20);
1198 for (
auto i = 0;
i < 20;
i++) {
1199 creators.push_back(absl::make_unique<PhonyInterceptorFactory>());
1209 TEST_F(ClientGlobalInterceptorEnd2endTest, LoggingGlobalInterceptor) {
1213 LoggingInterceptorFactory global_factory;
1215 ChannelArguments
args;
1217 std::vector<std::unique_ptr<experimental::ClientInterceptorFactoryInterface>>
1220 creators.reserve(20);
1221 for (
auto i = 0;
i < 20;
i++) {
1222 creators.push_back(absl::make_unique<PhonyInterceptorFactory>());
1227 LoggingInterceptor::VerifyUnaryCall();
1233 TEST_F(ClientGlobalInterceptorEnd2endTest, HijackingGlobalInterceptor) {
1237 HijackingInterceptorFactory global_factory;
1239 ChannelArguments
args;
1241 std::vector<std::unique_ptr<experimental::ClientInterceptorFactoryInterface>>
1244 creators.reserve(20);
1245 for (
auto i = 0;
i < 20;
i++) {
1246 creators.push_back(absl::make_unique<PhonyInterceptorFactory>());