22 #include "absl/memory/memory.h"
23 #include "absl/strings/ascii.h"
24 #include "absl/strings/match.h"
25 #include "absl/strings/str_format.h"
48 #include "src/proto/grpc/testing/duplicate/echo_duplicate.grpc.pb.h"
49 #include "src/proto/grpc/testing/echo.grpc.pb.h"
57 #ifdef GRPC_POSIX_SOCKET_EV
59 #endif // GRPC_POSIX_SOCKET_EV
61 #include <gtest/gtest.h>
63 using grpc::testing::EchoRequest;
64 using grpc::testing::EchoResponse;
66 using std::chrono::system_clock;
74 const std::string kIpv4MappedIpv6(
"ipv6:%5B::ffff:127.0.0.1%5D:");
76 return addr.substr(0, kIpv4.size()) == kIpv4 ||
77 addr.substr(0, kIpv4MappedIpv6.size()) == kIpv4MappedIpv6 ||
78 addr.substr(0, kIpv6.size()) == kIpv6;
81 const int kClientChannelBackupPollIntervalMs = 200;
83 const char kTestCredsPluginErrorMsg[] =
"Could not find plugin metadata.";
85 const char kFakeToken[] =
"fake_token";
86 const char kFakeSelector[] =
"fake_selector";
87 const char kExpectedFakeCredsDebugString[] =
88 "SecureCallCredentials{GoogleIAMCredentials{Token:present,"
89 "AuthoritySelector:fake_selector}}";
91 const char kWrongToken[] =
"wrong_token";
92 const char kWrongSelector[] =
"wrong_selector";
93 const char kExpectedWrongCredsDebugString[] =
94 "SecureCallCredentials{GoogleIAMCredentials{Token:present,"
95 "AuthoritySelector:wrong_selector}}";
97 const char kFakeToken1[] =
"fake_token1";
98 const char kFakeSelector1[] =
"fake_selector1";
99 const char kExpectedFakeCreds1DebugString[] =
100 "SecureCallCredentials{GoogleIAMCredentials{Token:present,"
101 "AuthoritySelector:fake_selector1}}";
103 const char kFakeToken2[] =
"fake_token2";
104 const char kFakeSelector2[] =
"fake_selector2";
105 const char kExpectedFakeCreds2DebugString[] =
106 "SecureCallCredentials{GoogleIAMCredentials{Token:present,"
107 "AuthoritySelector:fake_selector2}}";
109 const char kExpectedAuthMetadataPluginKeyFailureCredsDebugString[] =
110 "SecureCallCredentials{TestMetadataCredentials{key:TestPluginMetadata,"
111 "value:Does not matter, will fail the key is invalid.}}";
112 const char kExpectedAuthMetadataPluginValueFailureCredsDebugString[] =
113 "SecureCallCredentials{TestMetadataCredentials{key:test-plugin-metadata,"
114 "value:With illegal \n value.}}";
115 const char kExpectedAuthMetadataPluginWithDeadlineCredsDebugString[] =
116 "SecureCallCredentials{TestMetadataCredentials{key:meta_key,value:Does not "
118 const char kExpectedNonBlockingAuthMetadataPluginFailureCredsDebugString[] =
119 "SecureCallCredentials{TestMetadataCredentials{key:test-plugin-metadata,"
120 "value:Does not matter, will fail anyway (see 3rd param)}}";
122 kExpectedNonBlockingAuthMetadataPluginAndProcessorSuccessCredsDebugString
123 [] =
"SecureCallCredentials{TestMetadataCredentials{key:test-plugin-"
124 "metadata,value:Dr Jekyll}}";
126 kExpectedNonBlockingAuthMetadataPluginAndProcessorFailureCredsDebugString
127 [] =
"SecureCallCredentials{TestMetadataCredentials{key:test-plugin-"
128 "metadata,value:Mr Hyde}}";
129 const char kExpectedBlockingAuthMetadataPluginFailureCredsDebugString[] =
130 "SecureCallCredentials{TestMetadataCredentials{key:test-plugin-metadata,"
131 "value:Does not matter, will fail anyway (see 3rd param)}}";
132 const char kExpectedCompositeCallCredsDebugString[] =
133 "SecureCallCredentials{CompositeCallCredentials{TestMetadataCredentials{"
134 "key:call-creds-key1,value:call-creds-val1},TestMetadataCredentials{key:"
135 "call-creds-key2,value:call-creds-val2}}}";
137 class TestMetadataCredentialsPlugin :
public MetadataCredentialsPlugin {
144 bool is_blocking,
bool is_successful,
152 bool IsBlocking()
const override {
return is_blocking_; }
157 std::multimap<std::string, std::string>*
metadata)
override {
189 "TestPluginMetadata";
191 "test-plugin-metadata";
193 class TestAuthMetadataProcessor :
public AuthMetadataProcessor {
197 explicit TestAuthMetadataProcessor(
bool is_blocking)
200 std::shared_ptr<CallCredentials> GetCompatibleClientCreds() {
202 std::unique_ptr<MetadataCredentialsPlugin>(
203 new TestMetadataCredentialsPlugin(
208 std::shared_ptr<CallCredentials> GetIncompatibleClientCreds() {
210 std::unique_ptr<MetadataCredentialsPlugin>(
211 new TestMetadataCredentialsPlugin(
217 bool IsBlocking()
const override {
return is_blocking_; }
219 Status Process(
const InputMetadata& auth_metadata, AuthContext*
context,
220 OutputMetadata* consumed_auth_metadata,
221 OutputMetadata* response_metadata)
override {
228 string_ref auth_md_value = auth_md->second;
232 consumed_auth_metadata->insert(std::make_pair(
233 string(auth_md->first.data(), auth_md->first.length()),
234 string(auth_md->second.data(), auth_md->second.length())));
238 string(
"Invalid principal: ") +
239 string(auth_md_value.data(), auth_md_value.length()));
251 class Proxy :
public grpc::testing::EchoTestService::Service {
253 explicit Proxy(
const std::shared_ptr<Channel>&
channel)
254 :
stub_(grpc::testing::EchoTestService::NewStub(
channel)) {}
256 Status Echo(ServerContext* server_context,
const EchoRequest*
request,
258 std::unique_ptr<ClientContext> client_context =
264 std::unique_ptr<grpc::testing::EchoTestService::Stub>
stub_;
267 class TestServiceImplDupPkg
268 :
public grpc::testing::duplicate::EchoTestService::Service {
270 Status Echo(ServerContext* ,
const EchoRequest* ,
272 response->set_message(
"no package");
295 static std::string Name(const ::testing::TestParamInfo<TestScenario>& info) {
296 return info.param.AsString();
310 if (
inproc_) retval +=
"Inproc";
313 retval +=
"Insecure";
317 retval += creds_type;
342 void StartServer(
const std::shared_ptr<AuthMetadataProcessor>& processor) {
347 BuildAndStartServer(processor);
350 void RestartServer(
const std::shared_ptr<AuthMetadataProcessor>& processor) {
353 BuildAndStartServer(processor);
357 void BuildAndStartServer(
358 const std::shared_ptr<AuthMetadataProcessor>& processor) {
360 ConfigureServerBuilder(&
builder);
364 server_creds->SetAuthMetadataProcessor(processor);
368 std::unique_ptr<experimental::ServerInterceptorFactoryInterface>>
371 creators.reserve(20);
372 for (
auto i = 0;
i < 20;
i++) {
373 creators.push_back(absl::make_unique<PhonyInterceptorFactory>());
386 builder.SetSyncServerOption(ServerBuilder::SyncServerOption::NUM_CQS, 4);
388 ServerBuilder::SyncServerOption::CQ_TIMEOUT_MSEC, 10);
394 virtual void ConfigureServerBuilder(ServerBuilder*
builder) {
401 std::unique_ptr<experimental::ClientInterceptorFactoryInterface>>
402 interceptor_creators = {}) {
404 StartServer(std::shared_ptr<AuthMetadataProcessor>());
407 ChannelArguments
args;
418 channel_creds,
args);
430 args, interceptor_creators.empty()
439 std::unique_ptr<experimental::ClientInterceptorFactoryInterface>>
440 interceptor_creators = {}) {
441 ResetChannel(
std::move(interceptor_creators));
445 std::ostringstream proxyaddr;
446 proxyaddr <<
"localhost:" <<
port;
451 builder.SetSyncServerOption(ServerBuilder::SyncServerOption::NUM_CQS, 4);
453 ServerBuilder::SyncServerOption::CQ_TIMEOUT_MSEC, 10);
467 std::unique_ptr<grpc::testing::EchoTestService::Stub>
stub_;
481 void SendRpc(grpc::testing::EchoTestService::Stub*
stub,
int num_rpcs,
482 bool with_binary_metadata) {
485 request.set_message(
"Hello hello hello hello");
487 for (
int i = 0;
i < num_rpcs; ++
i) {
489 if (with_binary_metadata) {
490 char bytes[8] = {
'\0',
'\1',
'\2',
'\3',
491 '\4',
'\5',
'\6',
static_cast<char>(
i)};
503 class End2endServerTryCancelTest :
public End2endTest {
518 void TestRequestStreamServerCancel(
520 RestartServer(std::shared_ptr<AuthMetadataProcessor>());
532 int num_msgs_sent = 0;
533 while (num_msgs_sent < num_msgs_to_send) {
551 switch (server_try_cancel) {
558 EXPECT_LE(num_msgs_sent, num_msgs_to_send);
564 EXPECT_EQ(num_msgs_sent, num_msgs_to_send);
596 void TestResponseStreamServerCancel(
598 RestartServer(std::shared_ptr<AuthMetadataProcessor>());
611 int num_msgs_read = 0;
628 switch (server_try_cancel) {
679 RestartServer(std::shared_ptr<AuthMetadataProcessor>());
691 int num_msgs_read = 0;
692 int num_msgs_sent = 0;
693 while (num_msgs_sent < num_messages) {
717 switch (server_try_cancel) {
753 TEST_P(End2endServerTryCancelTest, RequestEchoServerCancel) {
767 TEST_P(End2endServerTryCancelTest, RequestStreamServerCancelBeforeReads) {
772 TEST_P(End2endServerTryCancelTest, RequestStreamServerCancelDuringRead) {
778 TEST_P(End2endServerTryCancelTest, RequestStreamServerCancelAfterReads) {
783 TEST_P(End2endServerTryCancelTest, ResponseStreamServerCancelBefore) {
788 TEST_P(End2endServerTryCancelTest, ResponseStreamServerCancelDuring) {
794 TEST_P(End2endServerTryCancelTest, ResponseStreamServerCancelAfter) {
799 TEST_P(End2endServerTryCancelTest, BidiStreamServerCancelBefore) {
805 TEST_P(End2endServerTryCancelTest, BidiStreamServerCancelDuring) {
811 TEST_P(End2endServerTryCancelTest, BidiStreamServerCancelAfter) {
815 TEST_P(End2endTest, SimpleRpcWithCustomUserAgentPrefix) {
817 if (GetParam().
inproc()) {
824 request.set_message(
"Hello hello hello hello");
825 request.mutable_param()->set_echo_metadata(
true);
838 TEST_P(End2endTest, MultipleRpcsWithVariedBinaryMetadataValue) {
840 std::vector<std::thread>
threads;
842 for (
int i = 0;
i < 10; ++
i) {
845 for (
int i = 0;
i < 10; ++
i) {
850 TEST_P(End2endTest, MultipleRpcs) {
852 std::vector<std::thread>
threads;
854 for (
int i = 0;
i < 10; ++
i) {
857 for (
int i = 0;
i < 10; ++
i) {
862 TEST_P(End2endTest, ManyStubs) {
864 ChannelTestPeer peer(
channel_.get());
865 int registered_calls_pre = peer.registered_calls();
866 int registration_attempts_pre = peer.registration_attempts();
867 for (
int i = 0;
i < 1000; ++
i) {
868 grpc::testing::EchoTestService::NewStub(
channel_);
870 EXPECT_EQ(peer.registered_calls(), registered_calls_pre);
871 EXPECT_GT(peer.registration_attempts(), registration_attempts_pre);
874 TEST_P(End2endTest, EmptyBinaryMetadata) {
878 request.set_message(
"Hello hello hello hello");
886 TEST_P(End2endTest, AuthoritySeenOnServerSide) {
889 request.mutable_param()->set_echo_host_from_authority_header(
true);
891 request.set_message(
"Live long and prosper.");
898 }
else if (GetParam().
inproc()) {
906 TEST_P(End2endTest, ReconnectChannel) {
907 if (GetParam().
inproc()) {
910 int poller_slowdown_factor = 1;
913 #ifdef GRPC_POSIX_SOCKET_EV
915 if (0 == strcmp(poller.get(),
"poll")) {
916 poller_slowdown_factor = 2;
918 #endif // GRPC_POSIX_SOCKET_EV
921 RestartServer(std::shared_ptr<AuthMetadataProcessor>());
927 poller_slowdown_factor *
933 TEST_P(End2endTest, RequestStreamOneRequest) {
949 TEST_P(End2endTest, RequestStreamOneRequestWithCoalescingApi) {
964 TEST_P(End2endTest, RequestStreamTwoRequests) {
980 TEST_P(End2endTest, RequestStreamTwoRequestsWithWriteThrough) {
996 TEST_P(End2endTest, RequestStreamTwoRequestsWithCoalescingApi) {
1012 TEST_P(End2endTest, ResponseStream) {
1030 TEST_P(End2endTest, ResponseStreamWithCoalescingApi) {
1051 TEST_P(End2endTest, ResponseStreamWithEverythingCoalesced) {
1072 TEST_P(End2endTest, BidiStream) {
1096 TEST_P(End2endTest, BidiStreamWithCoalescingApi) {
1131 TEST_P(End2endTest, BidiStreamWithEverythingCoalesced) {
1156 TEST_P(End2endTest, DiffPackageServices) {
1167 std::unique_ptr<grpc::testing::duplicate::EchoTestService::Stub> dup_pkg_stub(
1168 grpc::testing::duplicate::EchoTestService::NewStub(
channel_));
1169 ClientContext context2;
1175 template <
class ServiceType>
1176 void CancelRpc(ClientContext*
context,
int delay_us, ServiceType*
service) {
1179 while (!
service->signal_client()) {
1184 TEST_P(End2endTest, CancelRpcBeforeStart) {
1199 TEST_P(End2endTest, CancelRpcAfterStart) {
1205 request.mutable_param()->set_server_notify_client_when_started(
true);
1206 request.mutable_param()->set_skip_cancelled_check(
true);
1212 if (!GetParam().callback_server()) {
1213 service_.ClientWaitUntilRpcStarted();
1220 if (!GetParam().callback_server()) {
1235 TEST_P(End2endTest, ClientCancelsRequestStream) {
1258 TEST_P(End2endTest, ClientCancelsResponseStream) {
1293 TEST_P(End2endTest, ClientCancelsBidi) {
1331 TEST_P(End2endTest, RpcMaxMessageSize) {
1336 request.mutable_param()->set_server_die(
true);
1343 void ReaderThreadFunc(ClientReaderWriter<EchoRequest, EchoResponse>*
stream,
1353 TEST_P(End2endTest, SimultaneousReadWritesDone) {
1362 reader_thread.join();
1368 if (GetParam().
inproc()) {
1394 TEST_P(End2endTest, ChannelStateTimeout) {
1409 for (
int i = 0;
i < 10;
i++) {
1416 TEST_P(End2endTest, ChannelStateOnLameChannel) {
1427 for (
int i = 0;
i < 10; ++
i) {
1435 TEST_P(End2endTest, NonExistingService) {
1437 std::unique_ptr<grpc::testing::UnimplementedEchoService::Stub>
stub;
1438 stub = grpc::testing::UnimplementedEchoService::NewStub(
channel_);
1452 TEST_P(End2endTest, BinaryTrailerTest) {
1458 request.mutable_param()->set_echo_metadata(
true);
1459 DebugInfo* info =
request.mutable_param()->mutable_debug_info();
1460 info->add_stack_entries(
"stack_entry_1");
1461 info->add_stack_entries(
"stack_entry_2");
1462 info->add_stack_entries(
"stack_entry_3");
1463 info->set_detail(
"detailed debug info");
1464 std::string expected_string = info->SerializeAsString();
1474 DebugInfo returned_info;
1478 TEST_P(End2endTest, ExpectErrorTest) {
1481 std::vector<ErrorStatus> expected_status;
1482 expected_status.emplace_back();
1483 expected_status.back().set_code(13);
1486 expected_status.emplace_back();
1487 expected_status.back().set_code(13);
1488 expected_status.back().set_error_message(
"text error message");
1489 expected_status.back().set_binary_error_details(
"text error details");
1491 expected_status.emplace_back();
1492 expected_status.back().set_code(13);
1493 expected_status.back().set_error_message(
"text error message");
1494 expected_status.back().set_binary_error_details(
1495 "\x0\x1\x2\x3\x4\x5\x6\x8\x9\xA\xB");
1497 for (
auto iter = expected_status.begin();
iter != expected_status.end();
1503 auto*
error =
request.mutable_param()->mutable_expected_error();
1505 error->set_error_message(
iter->error_message());
1506 error->set_binary_error_details(
iter->binary_error_details());
1526 class ProxyEnd2endTest :
public End2endTest {
1530 TEST_P(ProxyEnd2endTest, SimpleRpc) {
1535 TEST_P(ProxyEnd2endTest, SimpleRpcWithEmptyMessages) {
1545 TEST_P(ProxyEnd2endTest, MultipleRpcs) {
1547 std::vector<std::thread>
threads;
1549 for (
int i = 0;
i < 10; ++
i) {
1552 for (
int i = 0;
i < 10; ++
i) {
1558 TEST_P(ProxyEnd2endTest, RpcDeadlineExpires) {
1563 request.mutable_param()->set_skip_cancelled_check(
true);
1572 request.mutable_param()->set_server_sleep_us(40 * 1000);
1583 TEST_P(ProxyEnd2endTest, RpcLongDeadline) {
1599 TEST_P(ProxyEnd2endTest, EchoDeadline) {
1604 request.mutable_param()->set_echo_deadline(
true);
1624 TEST_P(ProxyEnd2endTest, EchoDeadlineForNoDeadlineRpc) {
1629 request.mutable_param()->set_echo_deadline(
true);
1639 TEST_P(ProxyEnd2endTest, UnimplementedRpc) {
1654 TEST_P(ProxyEnd2endTest, ClientCancelsRpc) {
1659 const int kCancelDelayUs = 10 * 1000;
1660 request.mutable_param()->set_client_cancel_after_us(kCancelDelayUs);
1682 cancel_thread.join();
1688 TEST_P(ProxyEnd2endTest, ServerCancelsRpc) {
1693 request.mutable_param()->set_server_cancel_after_us(1000);
1702 TEST_P(ProxyEnd2endTest, HugeResponse) {
1706 request.set_message(
"huge response");
1707 const size_t kResponseSize = 1024 * (1024 + 10);
1708 request.mutable_param()->set_response_message_length(kResponseSize);
1719 TEST_P(ProxyEnd2endTest, Peer) {
1721 if (GetParam().
inproc()) {
1728 request.mutable_param()->set_echo_peer(
true);
1739 class SecureEnd2endTest :
public End2endTest {
1741 SecureEnd2endTest() {
1747 TEST_P(SecureEnd2endTest, SimpleRpcWithHost) {
1763 bool MetadataContains(
1764 const std::multimap<grpc::string_ref, grpc::string_ref>&
metadata,
1768 for (std::multimap<grpc::string_ref, grpc::string_ref>::const_iterator
iter =
1778 TEST_P(SecureEnd2endTest, BlockingAuthMetadataPluginAndProcessorSuccess) {
1779 auto* processor =
new TestAuthMetadataProcessor(
true);
1780 StartServer(std::shared_ptr<AuthMetadataProcessor>(processor));
1787 request.mutable_param()->set_echo_metadata(
true);
1788 request.mutable_param()->set_expected_client_identity(
1790 request.mutable_param()->set_expected_transport_security_type(
1803 TEST_P(SecureEnd2endTest, BlockingAuthMetadataPluginAndProcessorFailure) {
1804 auto* processor =
new TestAuthMetadataProcessor(
true);
1805 StartServer(std::shared_ptr<AuthMetadataProcessor>(processor));
1818 TEST_P(SecureEnd2endTest, SetPerCallCredentials) {
1823 std::shared_ptr<CallCredentials> creds =
1827 request.mutable_param()->set_echo_metadata(
true);
1839 kExpectedFakeCredsDebugString);
1842 class CredentialsInterceptor :
public experimental::Interceptor {
1844 explicit CredentialsInterceptor(experimental::ClientRpcInfo* info)
1847 void Intercept(experimental::InterceptorBatchMethods* methods)
override {
1848 if (methods->QueryInterceptionHookPoint(
1850 std::shared_ptr<CallCredentials> creds =
1852 info_->client_context()->set_credentials(creds);
1858 experimental::ClientRpcInfo*
info_ =
nullptr;
1861 class CredentialsInterceptorFactory
1862 :
public experimental::ClientInterceptorFactoryInterface {
1863 CredentialsInterceptor* CreateClientInterceptor(
1864 experimental::ClientRpcInfo* info)
override {
1865 return new CredentialsInterceptor(info);
1869 TEST_P(SecureEnd2endTest, CallCredentialsInterception) {
1873 std::vector<std::unique_ptr<experimental::ClientInterceptorFactoryInterface>>
1874 interceptor_creators;
1875 interceptor_creators.push_back(
1876 absl::make_unique<CredentialsInterceptorFactory>());
1877 ResetStub(
std::move(interceptor_creators));
1883 request.mutable_param()->set_echo_metadata(
true);
1895 kExpectedFakeCredsDebugString);
1898 TEST_P(SecureEnd2endTest, CallCredentialsInterceptionWithSetCredentials) {
1902 std::vector<std::unique_ptr<experimental::ClientInterceptorFactoryInterface>>
1903 interceptor_creators;
1904 interceptor_creators.push_back(
1905 absl::make_unique<CredentialsInterceptorFactory>());
1906 ResetStub(
std::move(interceptor_creators));
1910 std::shared_ptr<CallCredentials> creds1 =
1915 kExpectedWrongCredsDebugString);
1917 request.mutable_param()->set_echo_metadata(
true);
1929 kExpectedFakeCredsDebugString);
1932 TEST_P(SecureEnd2endTest, OverridePerCallCredentials) {
1937 std::shared_ptr<CallCredentials> creds1 =
1942 kExpectedFakeCreds1DebugString);
1943 std::shared_ptr<CallCredentials> creds2 =
1948 request.mutable_param()->set_echo_metadata(
true);
1964 kExpectedFakeCreds2DebugString);
1969 TEST_P(SecureEnd2endTest, AuthMetadataPluginKeyFailure) {
1975 std::unique_ptr<MetadataCredentialsPlugin>(
1976 new TestMetadataCredentialsPlugin(
1978 "Does not matter, will fail the key is invalid.",
false,
true,
1986 kExpectedAuthMetadataPluginKeyFailureCredsDebugString);
1989 TEST_P(SecureEnd2endTest, AuthMetadataPluginValueFailure) {
1995 std::unique_ptr<MetadataCredentialsPlugin>(
1996 new TestMetadataCredentialsPlugin(
1998 "With illegal \n value.",
false,
true, 0))));
2005 kExpectedAuthMetadataPluginValueFailureCredsDebugString);
2008 TEST_P(SecureEnd2endTest, AuthMetadataPluginWithDeadline) {
2011 request.mutable_param()->set_skip_cancelled_check(
true);
2014 const int delay = 100;
2019 std::unique_ptr<MetadataCredentialsPlugin>(
2020 new TestMetadataCredentialsPlugin(
"meta_key",
"Does not matter",
true,
2030 kExpectedAuthMetadataPluginWithDeadlineCredsDebugString);
2033 TEST_P(SecureEnd2endTest, AuthMetadataPluginWithCancel) {
2036 request.mutable_param()->set_skip_cancelled_check(
true);
2039 const int delay = 100;
2041 std::unique_ptr<MetadataCredentialsPlugin>(
2042 new TestMetadataCredentialsPlugin(
"meta_key",
"Does not matter",
true,
2056 cancel_thread.join();
2058 kExpectedAuthMetadataPluginWithDeadlineCredsDebugString);
2061 TEST_P(SecureEnd2endTest, NonBlockingAuthMetadataPluginFailure) {
2067 std::unique_ptr<MetadataCredentialsPlugin>(
2068 new TestMetadataCredentialsPlugin(
2070 "Does not matter, will fail anyway (see 3rd param)",
false,
false,
2078 std::string(
"Getting metadata from plugin failed with error: ") +
2079 kTestCredsPluginErrorMsg);
2081 kExpectedNonBlockingAuthMetadataPluginFailureCredsDebugString);
2084 TEST_P(SecureEnd2endTest, NonBlockingAuthMetadataPluginAndProcessorSuccess) {
2085 auto* processor =
new TestAuthMetadataProcessor(
false);
2086 StartServer(std::shared_ptr<AuthMetadataProcessor>(processor));
2093 request.mutable_param()->set_echo_metadata(
true);
2094 request.mutable_param()->set_expected_client_identity(
2096 request.mutable_param()->set_expected_transport_security_type(
2109 kExpectedNonBlockingAuthMetadataPluginAndProcessorSuccessCredsDebugString);
2112 TEST_P(SecureEnd2endTest, NonBlockingAuthMetadataPluginAndProcessorFailure) {
2113 auto* processor =
new TestAuthMetadataProcessor(
false);
2114 StartServer(std::shared_ptr<AuthMetadataProcessor>(processor));
2127 kExpectedNonBlockingAuthMetadataPluginAndProcessorFailureCredsDebugString);
2130 TEST_P(SecureEnd2endTest, BlockingAuthMetadataPluginFailure) {
2136 std::unique_ptr<MetadataCredentialsPlugin>(
2137 new TestMetadataCredentialsPlugin(
2139 "Does not matter, will fail anyway (see 3rd param)",
true,
false,
2147 std::string(
"Getting metadata from plugin failed with error: ") +
2148 kTestCredsPluginErrorMsg);
2150 kExpectedBlockingAuthMetadataPluginFailureCredsDebugString);
2153 TEST_P(SecureEnd2endTest, CompositeCallCreds) {
2158 const char kMetadataKey1[] =
"call-creds-key1";
2159 const char kMetadataKey2[] =
"call-creds-key2";
2160 const char kMetadataVal1[] =
"call-creds-val1";
2161 const char kMetadataVal2[] =
"call-creds-val2";
2165 std::unique_ptr<MetadataCredentialsPlugin>(
2166 new TestMetadataCredentialsPlugin(kMetadataKey1, kMetadataVal1,
2169 std::unique_ptr<MetadataCredentialsPlugin>(
2170 new TestMetadataCredentialsPlugin(kMetadataKey2, kMetadataVal2,
2173 request.mutable_param()->set_echo_metadata(
true);
2178 kMetadataKey1, kMetadataVal1));
2180 kMetadataKey2, kMetadataVal2));
2182 kExpectedCompositeCallCredsDebugString);
2185 TEST_P(SecureEnd2endTest, ClientAuthContext) {
2190 request.mutable_param()->set_check_auth_context(
2192 request.mutable_param()->set_expected_transport_security_type(
2200 std::vector<grpc::string_ref> tst =
2201 auth_ctx->FindPropertyValues(
"transport_security_type");
2205 EXPECT_EQ(
"x509_subject_alternative_name",
2206 auth_ctx->GetPeerIdentityPropertyName());
2207 EXPECT_EQ(4u, auth_ctx->GetPeerIdentity().size());
2210 ToString(auth_ctx->GetPeerIdentity()[1]));
2216 class ResourceQuotaEnd2endTest :
public End2endTest {
2218 ResourceQuotaEnd2endTest()
2221 void ConfigureServerBuilder(ServerBuilder*
builder)
override {
2247 bool test_callback_server) {
2249 std::vector<std::string> credentials_types;
2252 kClientChannelBackupPollIntervalMs);
2253 #if TARGET_OS_IPHONE
2262 auto insec_ok = [] {
2268 if (test_insecure && insec_ok()) {
2274 for (
const auto& cred : credentials_types) {
2275 scenarios.emplace_back(
false,
false,
false, cred,
false);
2276 scenarios.emplace_back(
true,
false,
false, cred,
false);
2277 if (test_callback_server) {
2280 scenarios.emplace_back(
false,
false,
false, cred,
true);
2281 scenarios.emplace_back(
true,
false,
false, cred,
true);
2284 scenarios.emplace_back(
false,
true,
false, cred,
false);
2285 scenarios.emplace_back(
true,
true,
false, cred,
false);
2288 if (test_inproc && insec_ok()) {
2291 if (test_callback_server) {
2301 End2end, End2endTest,
2303 &TestScenario::Name);
2306 End2endServerTryCancel, End2endServerTryCancelTest,
2308 &TestScenario::Name);
2311 ProxyEnd2end, ProxyEnd2endTest,
2313 &TestScenario::Name);
2316 SecureEnd2end, SecureEnd2endTest,
2318 &TestScenario::Name);
2321 ResourceQuotaEnd2end, ResourceQuotaEnd2endTest,
2323 &TestScenario::Name);