|  | @@ -201,15 +201,24 @@ class Verifier {
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  class TestScenario {
 | 
	
		
			
				|  |  |   public:
 | 
	
		
			
				|  |  | -  TestScenario(bool non_block, const grpc::string& creds_type)
 | 
	
		
			
				|  |  | -      : disable_blocking(non_block), credentials_type(creds_type) {}
 | 
	
		
			
				|  |  | +  TestScenario(bool non_block, const grpc::string& creds_type,
 | 
	
		
			
				|  |  | +               const grpc::string& content)
 | 
	
		
			
				|  |  | +      : disable_blocking(non_block),
 | 
	
		
			
				|  |  | +        credentials_type(creds_type),
 | 
	
		
			
				|  |  | +        message_content(content) {}
 | 
	
		
			
				|  |  | +  void Log() const {
 | 
	
		
			
				|  |  | +    gpr_log(GPR_INFO,
 | 
	
		
			
				|  |  | +            "Scenario: disable_blocking %d, credentials %s, message size %d",
 | 
	
		
			
				|  |  | +            disable_blocking, credentials_type.c_str(), message_content.size());
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  |    bool disable_blocking;
 | 
	
		
			
				|  |  |    const grpc::string credentials_type;
 | 
	
		
			
				|  |  | +  const grpc::string message_content;
 | 
	
		
			
				|  |  |  };
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  class AsyncEnd2endTest : public ::testing::TestWithParam<TestScenario> {
 | 
	
		
			
				|  |  |   protected:
 | 
	
		
			
				|  |  | -  AsyncEnd2endTest() {}
 | 
	
		
			
				|  |  | +  AsyncEnd2endTest() { GetParam().Log(); }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |    void SetUp() GRPC_OVERRIDE {
 | 
	
		
			
				|  |  |      poll_overrider_.reset(new PollingOverrider(!GetParam().disable_blocking));
 | 
	
	
		
			
				|  | @@ -260,7 +269,7 @@ class AsyncEnd2endTest : public ::testing::TestWithParam<TestScenario> {
 | 
	
		
			
				|  |  |        ServerContext srv_ctx;
 | 
	
		
			
				|  |  |        grpc::ServerAsyncResponseWriter<EchoResponse> response_writer(&srv_ctx);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -      send_request.set_message("Hello");
 | 
	
		
			
				|  |  | +      send_request.set_message(GetParam().message_content);
 | 
	
		
			
				|  |  |        std::unique_ptr<ClientAsyncResponseReader<EchoResponse>> response_reader(
 | 
	
		
			
				|  |  |            stub_->AsyncEcho(&cli_ctx, send_request, cq_.get()));
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -315,7 +324,7 @@ TEST_P(AsyncEnd2endTest, AsyncNextRpc) {
 | 
	
		
			
				|  |  |    ServerContext srv_ctx;
 | 
	
		
			
				|  |  |    grpc::ServerAsyncResponseWriter<EchoResponse> response_writer(&srv_ctx);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -  send_request.set_message("Hello");
 | 
	
		
			
				|  |  | +  send_request.set_message(GetParam().message_content);
 | 
	
		
			
				|  |  |    std::unique_ptr<ClientAsyncResponseReader<EchoResponse>> response_reader(
 | 
	
		
			
				|  |  |        stub_->AsyncEcho(&cli_ctx, send_request, cq_.get()));
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -362,7 +371,7 @@ TEST_P(AsyncEnd2endTest, SimpleClientStreaming) {
 | 
	
		
			
				|  |  |    ServerContext srv_ctx;
 | 
	
		
			
				|  |  |    ServerAsyncReader<EchoResponse, EchoRequest> srv_stream(&srv_ctx);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -  send_request.set_message("Hello");
 | 
	
		
			
				|  |  | +  send_request.set_message(GetParam().message_content);
 | 
	
		
			
				|  |  |    std::unique_ptr<ClientAsyncWriter<EchoRequest>> cli_stream(
 | 
	
		
			
				|  |  |        stub_->AsyncRequestStream(&cli_ctx, &recv_response, cq_.get(), tag(1)));
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -418,7 +427,7 @@ TEST_P(AsyncEnd2endTest, SimpleServerStreaming) {
 | 
	
		
			
				|  |  |    ServerContext srv_ctx;
 | 
	
		
			
				|  |  |    ServerAsyncWriter<EchoResponse> srv_stream(&srv_ctx);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -  send_request.set_message("Hello");
 | 
	
		
			
				|  |  | +  send_request.set_message(GetParam().message_content);
 | 
	
		
			
				|  |  |    std::unique_ptr<ClientAsyncReader<EchoResponse>> cli_stream(
 | 
	
		
			
				|  |  |        stub_->AsyncResponseStream(&cli_ctx, send_request, cq_.get(), tag(1)));
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -471,7 +480,7 @@ TEST_P(AsyncEnd2endTest, SimpleBidiStreaming) {
 | 
	
		
			
				|  |  |    ServerContext srv_ctx;
 | 
	
		
			
				|  |  |    ServerAsyncReaderWriter<EchoResponse, EchoRequest> srv_stream(&srv_ctx);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -  send_request.set_message("Hello");
 | 
	
		
			
				|  |  | +  send_request.set_message(GetParam().message_content);
 | 
	
		
			
				|  |  |    std::unique_ptr<ClientAsyncReaderWriter<EchoRequest, EchoResponse>>
 | 
	
		
			
				|  |  |        cli_stream(stub_->AsyncBidiStream(&cli_ctx, cq_.get(), tag(1)));
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -527,7 +536,7 @@ TEST_P(AsyncEnd2endTest, ClientInitialMetadataRpc) {
 | 
	
		
			
				|  |  |    ServerContext srv_ctx;
 | 
	
		
			
				|  |  |    grpc::ServerAsyncResponseWriter<EchoResponse> response_writer(&srv_ctx);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -  send_request.set_message("Hello");
 | 
	
		
			
				|  |  | +  send_request.set_message(GetParam().message_content);
 | 
	
		
			
				|  |  |    std::pair<grpc::string, grpc::string> meta1("key1", "val1");
 | 
	
		
			
				|  |  |    std::pair<grpc::string, grpc::string> meta2("key2", "val2");
 | 
	
		
			
				|  |  |    std::pair<grpc::string, grpc::string> meta3("g.r.d-bin", "xyz");
 | 
	
	
		
			
				|  | @@ -576,7 +585,7 @@ TEST_P(AsyncEnd2endTest, ServerInitialMetadataRpc) {
 | 
	
		
			
				|  |  |    ServerContext srv_ctx;
 | 
	
		
			
				|  |  |    grpc::ServerAsyncResponseWriter<EchoResponse> response_writer(&srv_ctx);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -  send_request.set_message("Hello");
 | 
	
		
			
				|  |  | +  send_request.set_message(GetParam().message_content);
 | 
	
		
			
				|  |  |    std::pair<grpc::string, grpc::string> meta1("key1", "val1");
 | 
	
		
			
				|  |  |    std::pair<grpc::string, grpc::string> meta2("key2", "val2");
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -625,7 +634,7 @@ TEST_P(AsyncEnd2endTest, ServerTrailingMetadataRpc) {
 | 
	
		
			
				|  |  |    ServerContext srv_ctx;
 | 
	
		
			
				|  |  |    grpc::ServerAsyncResponseWriter<EchoResponse> response_writer(&srv_ctx);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -  send_request.set_message("Hello");
 | 
	
		
			
				|  |  | +  send_request.set_message(GetParam().message_content);
 | 
	
		
			
				|  |  |    std::pair<grpc::string, grpc::string> meta1("key1", "val1");
 | 
	
		
			
				|  |  |    std::pair<grpc::string, grpc::string> meta2("key2", "val2");
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -671,7 +680,7 @@ TEST_P(AsyncEnd2endTest, MetadataRpc) {
 | 
	
		
			
				|  |  |    ServerContext srv_ctx;
 | 
	
		
			
				|  |  |    grpc::ServerAsyncResponseWriter<EchoResponse> response_writer(&srv_ctx);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -  send_request.set_message("Hello");
 | 
	
		
			
				|  |  | +  send_request.set_message(GetParam().message_content);
 | 
	
		
			
				|  |  |    std::pair<grpc::string, grpc::string> meta1("key1", "val1");
 | 
	
		
			
				|  |  |    std::pair<grpc::string, grpc::string> meta2(
 | 
	
		
			
				|  |  |        "key2-bin",
 | 
	
	
		
			
				|  | @@ -750,7 +759,7 @@ TEST_P(AsyncEnd2endTest, ServerCheckCancellation) {
 | 
	
		
			
				|  |  |    ServerContext srv_ctx;
 | 
	
		
			
				|  |  |    grpc::ServerAsyncResponseWriter<EchoResponse> response_writer(&srv_ctx);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -  send_request.set_message("Hello");
 | 
	
		
			
				|  |  | +  send_request.set_message(GetParam().message_content);
 | 
	
		
			
				|  |  |    std::unique_ptr<ClientAsyncResponseReader<EchoResponse>> response_reader(
 | 
	
		
			
				|  |  |        stub_->AsyncEcho(&cli_ctx, send_request, cq_.get()));
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -785,7 +794,7 @@ TEST_P(AsyncEnd2endTest, ServerCheckDone) {
 | 
	
		
			
				|  |  |    ServerContext srv_ctx;
 | 
	
		
			
				|  |  |    grpc::ServerAsyncResponseWriter<EchoResponse> response_writer(&srv_ctx);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -  send_request.set_message("Hello");
 | 
	
		
			
				|  |  | +  send_request.set_message(GetParam().message_content);
 | 
	
		
			
				|  |  |    std::unique_ptr<ClientAsyncResponseReader<EchoResponse>> response_reader(
 | 
	
		
			
				|  |  |        stub_->AsyncEcho(&cli_ctx, send_request, cq_.get()));
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -822,7 +831,7 @@ TEST_P(AsyncEnd2endTest, UnimplementedRpc) {
 | 
	
		
			
				|  |  |    Status recv_status;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |    ClientContext cli_ctx;
 | 
	
		
			
				|  |  | -  send_request.set_message("Hello");
 | 
	
		
			
				|  |  | +  send_request.set_message(GetParam().message_content);
 | 
	
		
			
				|  |  |    std::unique_ptr<ClientAsyncResponseReader<EchoResponse>> response_reader(
 | 
	
		
			
				|  |  |        stub->AsyncUnimplemented(&cli_ctx, send_request, cq_.get()));
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -1319,28 +1328,47 @@ TEST_P(AsyncEnd2endServerTryCancelTest, ServerBidiStreamingTryCancelAfter) {
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  std::vector<TestScenario> CreateTestScenarios(bool test_disable_blocking,
 | 
	
		
			
				|  |  | -                                              bool test_secure) {
 | 
	
		
			
				|  |  | +                                              bool test_secure,
 | 
	
		
			
				|  |  | +                                              int test_big_limit) {
 | 
	
		
			
				|  |  |    std::vector<TestScenario> scenarios;
 | 
	
		
			
				|  |  |    std::vector<grpc::string> credentials_types;
 | 
	
		
			
				|  |  | -  if (test_secure) {
 | 
	
		
			
				|  |  | -    credentials_types = GetSecureCredentialsTypeList();
 | 
	
		
			
				|  |  | -  }
 | 
	
		
			
				|  |  | +  std::vector<grpc::string> messages;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |    credentials_types.push_back(kInsecureCredentialsType);
 | 
	
		
			
				|  |  | -  for (auto it = credentials_types.begin(); it != credentials_types.end();
 | 
	
		
			
				|  |  | -       ++it) {
 | 
	
		
			
				|  |  | -    scenarios.push_back(TestScenario(false, *it));
 | 
	
		
			
				|  |  | -    if (test_disable_blocking) {
 | 
	
		
			
				|  |  | -      scenarios.push_back(TestScenario(true, *it));
 | 
	
		
			
				|  |  | +  auto sec_list = GetSecureCredentialsTypeList();
 | 
	
		
			
				|  |  | +  for (auto sec = sec_list.begin(); sec != sec_list.end(); sec++) {
 | 
	
		
			
				|  |  | +    credentials_types.push_back(*sec);
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  messages.push_back("Hello");
 | 
	
		
			
				|  |  | +  for (int sz = 1; sz < test_big_limit; sz *= 2) {
 | 
	
		
			
				|  |  | +    grpc::string big_msg;
 | 
	
		
			
				|  |  | +    for (int i = 0; i < sz * 1024; i++) {
 | 
	
		
			
				|  |  | +      char c = 'a' + (i % 26);
 | 
	
		
			
				|  |  | +      big_msg += c;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +    messages.push_back(big_msg);
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  for (auto cred = credentials_types.begin(); cred != credentials_types.end();
 | 
	
		
			
				|  |  | +       ++cred) {
 | 
	
		
			
				|  |  | +    for (auto msg = messages.begin(); msg != messages.end(); msg++) {
 | 
	
		
			
				|  |  | +      scenarios.push_back(TestScenario(false, *cred, *msg));
 | 
	
		
			
				|  |  | +      if (test_disable_blocking) {
 | 
	
		
			
				|  |  | +        scenarios.push_back(TestScenario(true, *cred, *msg));
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |    }
 | 
	
		
			
				|  |  |    return scenarios;
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  INSTANTIATE_TEST_CASE_P(AsyncEnd2end, AsyncEnd2endTest,
 | 
	
		
			
				|  |  | -                        ::testing::ValuesIn(CreateTestScenarios(true, true)));
 | 
	
		
			
				|  |  | +                        ::testing::ValuesIn(CreateTestScenarios(true, true,
 | 
	
		
			
				|  |  | +                                                                1024)));
 | 
	
		
			
				|  |  |  INSTANTIATE_TEST_CASE_P(AsyncEnd2endServerTryCancel,
 | 
	
		
			
				|  |  |                          AsyncEnd2endServerTryCancelTest,
 | 
	
		
			
				|  |  | -                        ::testing::ValuesIn(CreateTestScenarios(false, false)));
 | 
	
		
			
				|  |  | +                        ::testing::ValuesIn(CreateTestScenarios(false, false,
 | 
	
		
			
				|  |  | +                                                                0)));
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  }  // namespace
 | 
	
		
			
				|  |  |  }  // namespace testing
 |