|  | @@ -33,8 +33,10 @@
 | 
	
		
			
				|  |  |  #include <thread>
 | 
	
		
			
				|  |  |  #include <vector>
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +#include "absl/algorithm/container.h"
 | 
	
		
			
				|  |  |  #include "absl/flags/flag.h"
 | 
	
		
			
				|  |  |  #include "absl/strings/str_split.h"
 | 
	
		
			
				|  |  | +#include "src/core/lib/channel/status_util.h"
 | 
	
		
			
				|  |  |  #include "src/core/lib/gpr/env.h"
 | 
	
		
			
				|  |  |  #include "src/proto/grpc/testing/empty.pb.h"
 | 
	
		
			
				|  |  |  #include "src/proto/grpc/testing/messages.pb.h"
 | 
	
	
		
			
				|  | @@ -55,6 +57,8 @@ ABSL_FLAG(int32_t, stats_port, 50052,
 | 
	
		
			
				|  |  |  ABSL_FLAG(std::string, rpc, "UnaryCall",
 | 
	
		
			
				|  |  |            "a comma separated list of rpc methods.");
 | 
	
		
			
				|  |  |  ABSL_FLAG(std::string, metadata, "", "metadata to send with the RPC.");
 | 
	
		
			
				|  |  | +ABSL_FLAG(std::string, expect_status, "OK",
 | 
	
		
			
				|  |  | +          "RPC status for the test RPC to be considered successful");
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  using grpc::Channel;
 | 
	
		
			
				|  |  |  using grpc::ClientAsyncResponseReader;
 | 
	
	
		
			
				|  | @@ -303,7 +307,7 @@ class TestClient {
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |        }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -      if (!call->status.ok()) {
 | 
	
		
			
				|  |  | +      if (!RpcStatusCheckSuccess(call)) {
 | 
	
		
			
				|  |  |          if (absl::GetFlag(FLAGS_print_response) ||
 | 
	
		
			
				|  |  |              absl::GetFlag(FLAGS_fail_on_failed_rpc)) {
 | 
	
		
			
				|  |  |            std::cout << "RPC failed: " << call->status.error_code() << ": "
 | 
	
	
		
			
				|  | @@ -345,6 +349,13 @@ class TestClient {
 | 
	
		
			
				|  |  |      std::unique_ptr<ClientAsyncResponseReader<SimpleResponse>>
 | 
	
		
			
				|  |  |          simple_response_reader;
 | 
	
		
			
				|  |  |    };
 | 
	
		
			
				|  |  | +  static bool RpcStatusCheckSuccess(AsyncClientCall* call) {
 | 
	
		
			
				|  |  | +    // Determine RPC success based on expected status.
 | 
	
		
			
				|  |  | +    grpc_status_code code;
 | 
	
		
			
				|  |  | +    GPR_ASSERT(grpc_status_code_from_string(
 | 
	
		
			
				|  |  | +        absl::GetFlag(FLAGS_expect_status).c_str(), &code));
 | 
	
		
			
				|  |  | +    return code == static_cast<grpc_status_code>(call->status.error_code());
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |    std::unique_ptr<TestService::Stub> stub_;
 | 
	
		
			
				|  |  |    StatsWatchers* stats_watchers_;
 | 
	
	
		
			
				|  | @@ -538,6 +549,10 @@ void BuildRpcConfigsFromFlags(RpcConfigurationsQueue* rpc_configs_queue) {
 | 
	
		
			
				|  |  |  int main(int argc, char** argv) {
 | 
	
		
			
				|  |  |    grpc::testing::TestEnvironment env(argc, argv);
 | 
	
		
			
				|  |  |    grpc::testing::InitTest(&argc, &argv, true);
 | 
	
		
			
				|  |  | +  // Validate the expect_status flag.
 | 
	
		
			
				|  |  | +  grpc_status_code code;
 | 
	
		
			
				|  |  | +  GPR_ASSERT(grpc_status_code_from_string(
 | 
	
		
			
				|  |  | +      absl::GetFlag(FLAGS_expect_status).c_str(), &code));
 | 
	
		
			
				|  |  |    StatsWatchers stats_watchers;
 | 
	
		
			
				|  |  |    RpcConfigurationsQueue rpc_config_queue;
 | 
	
		
			
				|  |  |  
 |