@ -32,8 +32,10 @@ import contextlib
import errno
import itertools
import os
import shutil
import subprocess
import sys
import tempfile
import time
import unittest
@ -55,8 +57,8 @@ DOES_NOT_MATTER_DELAY = 0
NO_DELAY = 0
LONG_DELAY = 1
# Assigned in __main__ .
_build_mode = None
# Build mode environment variable set by tools/run_tests/run_tests.py .
_build_mode = os . environ [ ' CONFIG ' ]
class _ServicerMethods ( object ) :
@ -227,24 +229,26 @@ class PythonPluginTest(unittest.TestCase):
protoc_command = ' protoc '
# Ensure that the output directory exists.
outdir = ' ../../gens/test/compiler/python '
try :
os . makedirs ( outdir )
except OSError as exception :
if exception . errno != errno . EEXIST :
raise
self . outdir = tempfile . mkdtemp ( )
# Invoke protoc with the plugin.
cmd = [
protoc_command ,
' --plugin=protoc-gen-python-grpc= %s ' % protoc_plugin_filename ,
' -I %s ' % os . path . dirname ( test_proto_filename ) ,
' --python_out= %s ' % outdir ,
' --python-grpc_out= %s ' % outdir ,
' --python_out= %s ' % self . outdir ,
' --python-grpc_out= %s ' % self . outdir ,
os . path . basename ( test_proto_filename ) ,
]
subprocess . call ( ' ' . join ( cmd ) , shell = True )
sys . path . append ( outdir )
sys . path . append ( self . outdir )
def tearDown ( self ) :
try :
shutil . rmtree ( self . outdir )
except OSError as exc :
if exc . errno != errno . ENOENT :
raise
# TODO(atash): Figure out which of theses tests is hanging flakily with small
# probability.
@ -296,6 +300,8 @@ class PythonPluginTest(unittest.TestCase):
with self . assertRaises ( exceptions . ExpirationError ) :
response_future . result ( )
@unittest . skip ( ' TODO(atash,nathaniel): figure out why this flakily hangs '
' forever and fix. ' )
def testUnaryCallAsyncCancelled ( self ) :
import test_pb2 # pylint: disable=g-import-not-at-top
request = test_pb2 . SimpleRequest ( response_size = 13 )
@ -325,6 +331,8 @@ class PythonPluginTest(unittest.TestCase):
expected_response , response = check
self . assertEqual ( expected_response , response )
@unittest . skip ( ' TODO(atash,nathaniel): figure out why this flakily hangs '
' forever and fix. ' )
def testStreamingOutputCallExpired ( self ) :
import test_pb2 # pylint: disable=g-import-not-at-top
request = StreamingOutputRequest ( test_pb2 )
@ -335,6 +343,8 @@ class PythonPluginTest(unittest.TestCase):
with self . assertRaises ( exceptions . ExpirationError ) :
list ( responses )
@unittest . skip ( ' TODO(atash,nathaniel): figure out why this flakily hangs '
' forever and fix. ' )
def testStreamingOutputCallCancelled ( self ) :
import test_pb2 # pylint: disable=g-import-not-at-top
request = StreamingOutputRequest ( test_pb2 )
@ -359,6 +369,8 @@ class PythonPluginTest(unittest.TestCase):
with self . assertRaises ( exceptions . ServicerError ) :
next ( responses )
@unittest . skip ( ' TODO(atash,nathaniel): figure out why this flakily hangs '
' forever and fix. ' )
def testStreamingInputCall ( self ) :
import test_pb2 # pylint: disable=g-import-not-at-top
with _CreateService ( test_pb2 , NO_DELAY ) as ( servicer , stub , unused_server ) :
@ -426,6 +438,8 @@ class PythonPluginTest(unittest.TestCase):
expected_response , response = check
self . assertEqual ( expected_response , response )
@unittest . skip ( ' TODO(atash,nathaniel): figure out why this flakily hangs '
' forever and fix. ' )
def testFullDuplexCallExpired ( self ) :
import test_pb2 # pylint: disable=g-import-not-at-top
request = FullDuplexRequest ( test_pb2 )
@ -436,6 +450,8 @@ class PythonPluginTest(unittest.TestCase):
with self . assertRaises ( exceptions . ExpirationError ) :
list ( responses )
@unittest . skip ( ' TODO(atash,nathaniel): figure out why this flakily hangs '
' forever and fix. ' )
def testFullDuplexCallCancelled ( self ) :
import test_pb2 # pylint: disable=g-import-not-at-top
with _CreateService ( test_pb2 , NO_DELAY ) as ( servicer , stub , unused_server ) :
@ -459,6 +475,8 @@ class PythonPluginTest(unittest.TestCase):
with self . assertRaises ( exceptions . ServicerError ) :
next ( responses )
@unittest . skip ( ' TODO(atash,nathaniel): figure out why this flakily hangs '
' forever and fix. ' )
def testHalfDuplexCall ( self ) :
import test_pb2 # pylint: disable=g-import-not-at-top
with _CreateService ( test_pb2 , DOES_NOT_MATTER_DELAY ) as (
@ -502,14 +520,4 @@ class PythonPluginTest(unittest.TestCase):
if __name__ == ' __main__ ' :
os . chdir ( os . path . dirname ( sys . argv [ 0 ] ) )
parser = argparse . ArgumentParser (
description = ' Run Python compiler plugin test. ' )
parser . add_argument (
' --build_mode ' , dest = ' build_mode ' , type = str , default = ' dbg ' ,
help = ' The build mode of the targets to test, e.g. " dbg " , " opt " , " asan " , '
' etc. ' )
parser . add_argument ( ' --port ' , dest = ' port ' , type = int , default = 0 )
args , remainder = parser . parse_known_args ( )
_build_mode = args . build_mode
sys . argv [ 1 : ] = remainder
unittest . main ( )