|  | @@ -618,11 +618,17 @@ class GrpclbEnd2endTest : public ::testing::Test {
 | 
	
		
			
				|  |  |    }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |    Status SendRpc(EchoResponse* response = nullptr, int timeout_ms = 1000,
 | 
	
		
			
				|  |  | -                 bool wait_for_ready = false) {
 | 
	
		
			
				|  |  | +                 bool wait_for_ready = false,
 | 
	
		
			
				|  |  | +                 const Status& expected_status = Status::OK) {
 | 
	
		
			
				|  |  |      const bool local_response = (response == nullptr);
 | 
	
		
			
				|  |  |      if (local_response) response = new EchoResponse;
 | 
	
		
			
				|  |  |      EchoRequest request;
 | 
	
		
			
				|  |  |      request.set_message(kRequestMessage_);
 | 
	
		
			
				|  |  | +    if (!expected_status.ok()) {
 | 
	
		
			
				|  |  | +      auto* error = request.mutable_param()->mutable_expected_error();
 | 
	
		
			
				|  |  | +      error->set_code(expected_status.error_code());
 | 
	
		
			
				|  |  | +      error->set_error_message(expected_status.error_message());
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  |      ClientContext context;
 | 
	
		
			
				|  |  |      context.set_deadline(grpc_timeout_milliseconds_to_deadline(timeout_ms));
 | 
	
		
			
				|  |  |      if (wait_for_ready) context.set_wait_for_ready(true);
 | 
	
	
		
			
				|  | @@ -751,6 +757,22 @@ TEST_F(SingleBalancerTest, Vanilla) {
 | 
	
		
			
				|  |  |    EXPECT_EQ("grpclb", channel_->GetLoadBalancingPolicyName());
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +TEST_F(SingleBalancerTest, ReturnServerStatus) {
 | 
	
		
			
				|  |  | +  SetNextResolutionAllBalancers();
 | 
	
		
			
				|  |  | +  ScheduleResponseForBalancer(
 | 
	
		
			
				|  |  | +      0, BalancerServiceImpl::BuildResponseForBackends(GetBackendPorts(), {}),
 | 
	
		
			
				|  |  | +      0);
 | 
	
		
			
				|  |  | +  // We need to wait for all backends to come online.
 | 
	
		
			
				|  |  | +  WaitForAllBackends();
 | 
	
		
			
				|  |  | +  // Send a request that the backend will fail, and make sure we get
 | 
	
		
			
				|  |  | +  // back the right status.
 | 
	
		
			
				|  |  | +  Status expected(StatusCode::INVALID_ARGUMENT, "He's dead, Jim!");
 | 
	
		
			
				|  |  | +  Status actual = SendRpc(/*response=*/nullptr, /*timeout_ms=*/1000,
 | 
	
		
			
				|  |  | +                          /*wait_for_ready=*/false, expected);
 | 
	
		
			
				|  |  | +  EXPECT_EQ(actual.error_code(), expected.error_code());
 | 
	
		
			
				|  |  | +  EXPECT_EQ(actual.error_message(), expected.error_message());
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  TEST_F(SingleBalancerTest, SelectGrpclbWithMigrationServiceConfig) {
 | 
	
		
			
				|  |  |    SetNextResolutionAllBalancers(
 | 
	
		
			
				|  |  |        "{\n"
 |