Add two scenarios in interop test
diff --git a/test/cpp/interop/client.cc b/test/cpp/interop/client.cc
index 42d16f2..fc59907 100644
--- a/test/cpp/interop/client.cc
+++ b/test/cpp/interop/client.cc
@@ -62,6 +62,8 @@
               " streaming with slow client consumer; "
               "half_duplex : half-duplex streaming; "
               "ping_pong : full-duplex streaming; "
+              "cancel_after_begin : cancel stream after starting it; "
+              "cancel_after_first_response: cancel on first response; "
               "service_account_creds : large_unary with service_account auth; "
               "compute_engine_creds: large_unary with compute engine auth; "
               "jwt_token_creds: large_unary with JWT token auth; "
@@ -97,6 +99,10 @@
     client.DoHalfDuplex();
   } else if (FLAGS_test_case == "ping_pong") {
     client.DoPingPong();
+  } else if (FLAGS_test_case == "cancel_after_begin") {
+    client.DoCancelAfterBegin();
+  } else if (FLAGS_test_case == "cancel_after_first_response") {
+    client.DoCancelAfterFirstResponse();
   } else if (FLAGS_test_case == "service_account_creds") {
     grpc::string json_key = GetServiceAccountJsonKey();
     client.DoServiceAccountCreds(json_key, FLAGS_oauth_scope);
@@ -113,6 +119,8 @@
     client.DoResponseStreaming();
     client.DoHalfDuplex();
     client.DoPingPong();
+    client.DoCancelAfterBegin();
+    client.DoCancelAfterFirstResponse();
     // service_account_creds and jwt_token_creds can only run with ssl.
     if (FLAGS_enable_ssl) {
       grpc::string json_key = GetServiceAccountJsonKey();
@@ -125,6 +133,7 @@
         GPR_ERROR,
         "Unsupported test case %s. Valid options are all|empty_unary|"
         "large_unary|client_streaming|server_streaming|half_duplex|ping_pong|"
+        "cancel_after_begin|cancel_after_first_response|"
         "service_account_creds|compute_engine_creds|jwt_token_creds",
         FLAGS_test_case.c_str());
     ret = 1;
diff --git a/test/cpp/interop/interop_client.cc b/test/cpp/interop/interop_client.cc
index 7f5757d..874510e 100644
--- a/test/cpp/interop/interop_client.cc
+++ b/test/cpp/interop/interop_client.cc
@@ -307,5 +307,49 @@
   gpr_log(GPR_INFO, "Ping pong streaming done.");
 }
 
+void InteropClient::DoCancelAfterBegin() {
+  gpr_log(GPR_INFO, "Sending request steaming rpc ...");
+  std::unique_ptr<TestService::Stub> stub(TestService::NewStub(channel_));
+
+  ClientContext context;
+  StreamingInputCallRequest request;
+  StreamingInputCallResponse response;
+
+  std::unique_ptr<ClientWriter<StreamingInputCallRequest>> stream(
+      stub->StreamingInputCall(&context, &response));
+
+  gpr_log(GPR_INFO, "Trying to cancel...");
+  context.TryCancel();
+  Status s = stream->Finish();
+  GPR_ASSERT(s.code() == StatusCode::CANCELLED);
+  gpr_log(GPR_INFO, "Canceling streaming done.");
+}
+
+void InteropClient::DoCancelAfterFirstResponse() {
+  gpr_log(GPR_INFO, "Sending Ping Pong streaming rpc ...");
+  std::unique_ptr<TestService::Stub> stub(TestService::NewStub(channel_));
+
+  ClientContext context;
+  std::unique_ptr<ClientReaderWriter<StreamingOutputCallRequest,
+                                     StreamingOutputCallResponse>>
+      stream(stub->FullDuplexCall(&context));
+
+  StreamingOutputCallRequest request;
+  request.set_response_type(PayloadType::COMPRESSABLE);
+  ResponseParameters* response_parameter = request.add_response_parameters();
+  response_parameter->set_size(31415);
+  request.mutable_payload()->set_body(grpc::string(27182, '\0'));
+  StreamingOutputCallResponse response;
+  GPR_ASSERT(stream->Write(request));
+  GPR_ASSERT(stream->Read(&response));
+  GPR_ASSERT(response.payload().has_body());
+  GPR_ASSERT(response.payload().body() == grpc::string(31415, '\0'));
+  gpr_log(GPR_INFO, "Trying to cancel...");
+  context.TryCancel();
+
+  Status s = stream->Finish();
+  gpr_log(GPR_INFO, "Canceling pingpong streaming done.");
+}
+
 }  // namespace testing
 }  // namespace grpc
diff --git a/test/cpp/interop/interop_client.h b/test/cpp/interop/interop_client.h
index 3161f7f..d9c895d 100644
--- a/test/cpp/interop/interop_client.h
+++ b/test/cpp/interop/interop_client.h
@@ -57,6 +57,8 @@
   void DoRequestStreaming();
   void DoResponseStreaming();
   void DoResponseStreamingWithSlowConsumer();
+  void DoCancelAfterBegin();
+  void DoCancelAfterFirstResponse();
   // Auth tests.
   // username is a string containing the user email
   void DoJwtTokenCreds(const grpc::string& username);