|  | @@ -233,7 +233,11 @@ class RPCTest(unittest.TestCase):
 | 
	
		
			
				|  |  |              ('test', 'SuccessfulUnaryRequestFutureUnaryResponse'),))
 | 
	
		
			
				|  |  |      response = response_future.result()
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +    self.assertIsInstance(response_future, grpc.Future)
 | 
	
		
			
				|  |  | +    self.assertIsInstance(response_future, grpc.Call)
 | 
	
		
			
				|  |  |      self.assertEqual(expected_response, response)
 | 
	
		
			
				|  |  | +    self.assertIsNone(response_future.exception())
 | 
	
		
			
				|  |  | +    self.assertIsNone(response_future.traceback())
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |    def testSuccessfulUnaryRequestStreamResponse(self):
 | 
	
		
			
				|  |  |      request = b'\x37\x58'
 | 
	
	
		
			
				|  | @@ -287,6 +291,8 @@ class RPCTest(unittest.TestCase):
 | 
	
		
			
				|  |  |      response = response_future.result()
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      self.assertEqual(expected_response, response)
 | 
	
		
			
				|  |  | +    self.assertIsNone(response_future.exception())
 | 
	
		
			
				|  |  | +    self.assertIsNone(response_future.traceback())
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |    def testSuccessfulStreamRequestStreamResponse(self):
 | 
	
		
			
				|  |  |      requests = tuple(b'\x77\x58' for _ in range(test_constants.STREAM_LENGTH))
 | 
	
	
		
			
				|  | @@ -459,6 +465,10 @@ class RPCTest(unittest.TestCase):
 | 
	
		
			
				|  |  |      self.assertTrue(response_future.cancelled())
 | 
	
		
			
				|  |  |      with self.assertRaises(grpc.FutureCancelledError):
 | 
	
		
			
				|  |  |        response_future.result()
 | 
	
		
			
				|  |  | +    with self.assertRaises(grpc.FutureCancelledError):
 | 
	
		
			
				|  |  | +      response_future.exception()
 | 
	
		
			
				|  |  | +    with self.assertRaises(grpc.FutureCancelledError):
 | 
	
		
			
				|  |  | +      response_future.traceback()
 | 
	
		
			
				|  |  |      self.assertIs(grpc.StatusCode.CANCELLED, response_future.code())
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |    def testCancelledUnaryRequestStreamResponse(self):
 | 
	
	
		
			
				|  | @@ -495,6 +505,10 @@ class RPCTest(unittest.TestCase):
 | 
	
		
			
				|  |  |      self.assertTrue(response_future.cancelled())
 | 
	
		
			
				|  |  |      with self.assertRaises(grpc.FutureCancelledError):
 | 
	
		
			
				|  |  |        response_future.result()
 | 
	
		
			
				|  |  | +    with self.assertRaises(grpc.FutureCancelledError):
 | 
	
		
			
				|  |  | +      response_future.exception()
 | 
	
		
			
				|  |  | +    with self.assertRaises(grpc.FutureCancelledError):
 | 
	
		
			
				|  |  | +      response_future.traceback()
 | 
	
		
			
				|  |  |      self.assertIsNotNone(response_future.initial_metadata())
 | 
	
		
			
				|  |  |      self.assertIs(grpc.StatusCode.CANCELLED, response_future.code())
 | 
	
		
			
				|  |  |      self.assertIsNotNone(response_future.details())
 | 
	
	
		
			
				|  | @@ -528,6 +542,7 @@ class RPCTest(unittest.TestCase):
 | 
	
		
			
				|  |  |              request, timeout=test_constants.SHORT_TIMEOUT,
 | 
	
		
			
				|  |  |              metadata=(('test', 'ExpiredUnaryRequestBlockingUnaryResponse'),))
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +    self.assertIsInstance(exception_context.exception, grpc.Call)
 | 
	
		
			
				|  |  |      self.assertIsNotNone(exception_context.exception.initial_metadata())
 | 
	
		
			
				|  |  |      self.assertIs(
 | 
	
		
			
				|  |  |          grpc.StatusCode.DEADLINE_EXCEEDED, exception_context.exception.code())
 | 
	
	
		
			
				|  | @@ -556,6 +571,7 @@ class RPCTest(unittest.TestCase):
 | 
	
		
			
				|  |  |      self.assertIs(
 | 
	
		
			
				|  |  |          grpc.StatusCode.DEADLINE_EXCEEDED, exception_context.exception.code())
 | 
	
		
			
				|  |  |      self.assertIsInstance(response_future.exception(), grpc.RpcError)
 | 
	
		
			
				|  |  | +    self.assertIsNotNone(response_future.traceback())
 | 
	
		
			
				|  |  |      self.assertIs(
 | 
	
		
			
				|  |  |          grpc.StatusCode.DEADLINE_EXCEEDED, response_future.exception().code())
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -585,6 +601,8 @@ class RPCTest(unittest.TestCase):
 | 
	
		
			
				|  |  |              request_iterator, timeout=test_constants.SHORT_TIMEOUT,
 | 
	
		
			
				|  |  |              metadata=(('test', 'ExpiredStreamRequestBlockingUnaryResponse'),))
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +    self.assertIsInstance(exception_context.exception, grpc.RpcError)
 | 
	
		
			
				|  |  | +    self.assertIsInstance(exception_context.exception, grpc.Call)
 | 
	
		
			
				|  |  |      self.assertIsNotNone(exception_context.exception.initial_metadata())
 | 
	
		
			
				|  |  |      self.assertIs(
 | 
	
		
			
				|  |  |          grpc.StatusCode.DEADLINE_EXCEEDED, exception_context.exception.code())
 | 
	
	
		
			
				|  | @@ -601,6 +619,8 @@ class RPCTest(unittest.TestCase):
 | 
	
		
			
				|  |  |        response_future = multi_callable.future(
 | 
	
		
			
				|  |  |            request_iterator, timeout=test_constants.SHORT_TIMEOUT,
 | 
	
		
			
				|  |  |            metadata=(('test', 'ExpiredStreamRequestFutureUnaryResponse'),))
 | 
	
		
			
				|  |  | +      with self.assertRaises(grpc.FutureTimeoutError):
 | 
	
		
			
				|  |  | +        response_future.result(timeout=test_constants.SHORT_TIMEOUT / 2.0)
 | 
	
		
			
				|  |  |        response_future.add_done_callback(callback)
 | 
	
		
			
				|  |  |        value_passed_to_callback = callback.value()
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -610,6 +630,7 @@ class RPCTest(unittest.TestCase):
 | 
	
		
			
				|  |  |      self.assertIs(
 | 
	
		
			
				|  |  |          grpc.StatusCode.DEADLINE_EXCEEDED, exception_context.exception.code())
 | 
	
		
			
				|  |  |      self.assertIsInstance(response_future.exception(), grpc.RpcError)
 | 
	
		
			
				|  |  | +    self.assertIsNotNone(response_future.traceback())
 | 
	
		
			
				|  |  |      self.assertIs(response_future, value_passed_to_callback)
 | 
	
		
			
				|  |  |      self.assertIsNotNone(response_future.initial_metadata())
 | 
	
		
			
				|  |  |      self.assertIs(grpc.StatusCode.DEADLINE_EXCEEDED, response_future.code())
 | 
	
	
		
			
				|  | @@ -656,11 +677,14 @@ class RPCTest(unittest.TestCase):
 | 
	
		
			
				|  |  |        response_future.add_done_callback(callback)
 | 
	
		
			
				|  |  |        value_passed_to_callback = callback.value()
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +    self.assertIsInstance(response_future, grpc.Future)
 | 
	
		
			
				|  |  | +    self.assertIsInstance(response_future, grpc.Call)
 | 
	
		
			
				|  |  |      with self.assertRaises(grpc.RpcError) as exception_context:
 | 
	
		
			
				|  |  |        response_future.result()
 | 
	
		
			
				|  |  |      self.assertIs(
 | 
	
		
			
				|  |  |          grpc.StatusCode.UNKNOWN, exception_context.exception.code())
 | 
	
		
			
				|  |  |      self.assertIsInstance(response_future.exception(), grpc.RpcError)
 | 
	
		
			
				|  |  | +    self.assertIsNotNone(response_future.traceback())
 | 
	
		
			
				|  |  |      self.assertIs(grpc.StatusCode.UNKNOWN, response_future.exception().code())
 | 
	
		
			
				|  |  |      self.assertIs(response_future, value_passed_to_callback)
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -709,6 +733,7 @@ class RPCTest(unittest.TestCase):
 | 
	
		
			
				|  |  |      self.assertIs(
 | 
	
		
			
				|  |  |          grpc.StatusCode.UNKNOWN, exception_context.exception.code())
 | 
	
		
			
				|  |  |      self.assertIsInstance(response_future.exception(), grpc.RpcError)
 | 
	
		
			
				|  |  | +    self.assertIsNotNone(response_future.traceback())
 | 
	
		
			
				|  |  |      self.assertIs(response_future, value_passed_to_callback)
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |    def testFailedStreamRequestStreamResponse(self):
 |