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