diff --git a/.gitignore b/.gitignore index 89bd1003f71..f5ca501db26 100644 --- a/.gitignore +++ b/.gitignore @@ -33,3 +33,6 @@ coverage # Makefile's cache cache.mk + +# Temporary test reports +report.xml diff --git a/src/python/grpcio/MANIFEST.in b/src/python/grpcio/MANIFEST.in index 498b55f20ab..9583dc7768d 100644 --- a/src/python/grpcio/MANIFEST.in +++ b/src/python/grpcio/MANIFEST.in @@ -1,2 +1,3 @@ graft grpc include commands.py +include requirements.txt diff --git a/src/python/requirements.txt b/src/python/grpcio/requirements.txt similarity index 100% rename from src/python/requirements.txt rename to src/python/grpcio/requirements.txt diff --git a/src/python/grpcio_test/MANIFEST.in b/src/python/grpcio_test/MANIFEST.in index 66bb3c6f170..c9327307dc5 100644 --- a/src/python/grpcio_test/MANIFEST.in +++ b/src/python/grpcio_test/MANIFEST.in @@ -1,3 +1,4 @@ graft grpc_interop graft grpc_test include commands.py +include requirements.txt diff --git a/src/python/grpcio_test/commands.py b/src/python/grpcio_test/commands.py index 24d6241c433..c796d94c76a 100644 --- a/src/python/grpcio_test/commands.py +++ b/src/python/grpcio_test/commands.py @@ -52,4 +52,6 @@ class RunTests(setuptools.Command): # We import here to ensure that setup.py has had a chance to install the # relevant package eggs first. import pytest - pytest.main(self.pytest_args) + result = pytest.main(self.pytest_args) + if result != 0: + raise SystemExit(result) diff --git a/src/python/grpcio_test/requirements.txt b/src/python/grpcio_test/requirements.txt new file mode 100644 index 00000000000..856198def57 --- /dev/null +++ b/src/python/grpcio_test/requirements.txt @@ -0,0 +1,5 @@ +pytest>=2.6 +pytest-cov>=2.0 +pytest-xdist>=1.11 +oauth2client>=1.4.7 +grpcio>=0.10.0a0 diff --git a/src/python/grpcio_test/setup.py b/src/python/grpcio_test/setup.py index 798710393d7..925c32720fe 100644 --- a/src/python/grpcio_test/setup.py +++ b/src/python/grpcio_test/setup.py @@ -52,21 +52,28 @@ _PACKAGE_DATA = { 'credentials/server1.pem',] } -_INSTALL_REQUIRES = ['oauth2client>=1.4.7', 'grpcio>=0.10.0a0'] +_SETUP_REQUIRES = ( + 'pytest>=2.6', + 'pytest-cov>=2.0', + 'pytest-xdist>=1.11', +) + +_INSTALL_REQUIRES = ( + 'oauth2client>=1.4.7', + 'grpcio>=0.10.0a0', +) + +_COMMAND_CLASS = { + 'test': commands.RunTests +} setuptools.setup( name='grpcio_test', - version='0.0.1', + version='0.10.0a0', packages=_PACKAGES, package_dir=_PACKAGE_DIRECTORIES, package_data=_PACKAGE_DATA, - install_requires=_INSTALL_REQUIRES, - setup_requires=( - 'pytest>=2.6', - 'pytest-cov>=2.0', - 'pytest-xdist>=1.11', - ), - cmdclass={ - 'test': commands.RunTests - } + install_requires=_INSTALL_REQUIRES + _SETUP_REQUIRES, + setup_requires=_SETUP_REQUIRES, + cmdclass=_COMMAND_CLASS ) diff --git a/tools/run_tests/build_python.sh b/tools/run_tests/build_python.sh index 265a542e3a6..203c8b77209 100755 --- a/tools/run_tests/build_python.sh +++ b/tools/run_tests/build_python.sh @@ -33,7 +33,9 @@ set -ex # change to grpc repo root cd $(dirname $0)/../.. -root=`pwd` +ROOT=`pwd` +GRPCIO=$ROOT/src/python/grpcio +GRPCIO_TEST=$ROOT/src/python/grpcio_test make_virtualenv() { virtualenv_name="python"$1"_virtual_environment" @@ -42,9 +44,16 @@ make_virtualenv() { # Build the entire virtual environment virtualenv -p `which "python"$1` $virtualenv_name source $virtualenv_name/bin/activate - pip install -r src/python/requirements.txt - CFLAGS="-I$root/include -std=c89" LDFLAGS=-L$root/libs/$CONFIG GRPC_PYTHON_BUILD_WITH_CYTHON=1 pip install src/python/grpcio - pip install src/python/grpcio_test + + # Install grpcio + cd $GRPCIO + pip install -r requirements.txt + CFLAGS="-I$ROOT/include -std=c89" LDFLAGS=-L$ROOT/libs/$CONFIG GRPC_PYTHON_BUILD_WITH_CYTHON=1 pip install $GRPCIO + + # Install grpcio_test + cd $GRPCIO_TEST + pip install -r requirements.txt + pip install $GRPCIO_TEST else source $virtualenv_name/bin/activate # Uninstall and re-install the packages we care about. Don't use @@ -53,12 +62,12 @@ make_virtualenv() { # dependency upgrades. (yes | pip uninstall grpcio) || true (yes | pip uninstall grpcio_test) || true - (CFLAGS="-I$root/include -std=c89" LDFLAGS=-L$root/libs/$CONFIG GRPC_PYTHON_BUILD_WITH_CYTHON=1 pip install src/python/grpcio) || ( + (CFLAGS="-I$ROOT/include -std=c89" LDFLAGS=-L$ROOT/libs/$CONFIG GRPC_PYTHON_BUILD_WITH_CYTHON=1 pip install $GRPCIO) || ( # Fall back to rebuilding the entire environment rm -rf $virtualenv_name make_virtualenv $1 ) - pip install src/python/grpcio_test + pip install $GRPCIO_TEST fi } diff --git a/tools/run_tests/python_tests.json b/tools/run_tests/python_tests.json deleted file mode 100755 index 426b93fe3a6..00000000000 --- a/tools/run_tests/python_tests.json +++ /dev/null @@ -1,122 +0,0 @@ -[ - { - "module": "grpc_test._adapter._c_test", - "pythonVersions": [ - "2.7" - ] - }, - { - "module": "grpc_test._adapter._low_test", - "pythonVersions": [ - "2.7" - ] - }, - { - "module": "grpc_test._adapter._intermediary_low_test", - "pythonVersions": [ - "2.7" - ] - }, - { - "module": "grpc_test._adapter._links_test", - "pythonVersions": [ - "2.7" - ] - }, - { - "module": "grpc_test._adapter._lonely_rear_link_test", - "pythonVersions": [ - "2.7" - ] - }, - { - "module": "grpc_test._adapter._blocking_invocation_inline_service_test", - "pythonVersions": [ - "2.7" - ] - }, - { - "module": "grpc_test._adapter._event_invocation_synchronous_event_service_test", - "pythonVersions": [ - "2.7" - ] - }, - { - "module": "grpc_test._adapter._future_invocation_asynchronous_event_service_test", - "pythonVersions": [ - "2.7" - ] - }, - { - "module": "grpc_test._links._lonely_invocation_link_test", - "pythonVersions": [ - "2.7" - ] - }, - { - "module": "grpc_test._links._transmission_test", - "pythonVersions": [ - "2.7" - ] - }, - { - "module": "grpc_test.early_adopter.implementations_test", - "pythonVersions": [ - "2.7" - ] - }, - { - "module": "grpc_test.framework.base.implementations_test", - "pythonVersions": [ - "2.7" - ] - }, - { - "module": "grpc_test.framework.face.blocking_invocation_inline_service_test", - "pythonVersions": [ - "2.7" - ] - }, - { - "module": "grpc_test.framework.face.event_invocation_synchronous_event_service_test", - "pythonVersions": [ - "2.7" - ] - }, - { - "module": "grpc_test.framework.face.future_invocation_asynchronous_event_service_test", - "pythonVersions": [ - "2.7" - ] - }, - { - "module": "grpc_test.framework.foundation._later_test", - "pythonVersions": [ - "2.7" - ] - }, - { - "module": "grpc_test.framework.foundation._logging_pool_test", - "pythonVersions": [ - "2.7" - ] - }, - { - "module": "grpc_interop._insecure_interop_test", - "pythonVersions": [ - "2.7" - ] - }, - { - "module": "grpc_interop._secure_interop_test", - "pythonVersions": [ - "2.7" - ] - }, - { - "file": "test/compiler/python_plugin_test.py", - "pythonVersions": [ - "2.7" - ] - } -] diff --git a/tools/run_tests/run_python.sh b/tools/run_tests/run_python.sh index 4959c0241c6..5ffd4460b94 100755 --- a/tools/run_tests/run_python.sh +++ b/tools/run_tests/run_python.sh @@ -33,8 +33,9 @@ set -ex # change to grpc repo root cd $(dirname $0)/../.. -root=`pwd` -export LD_LIBRARY_PATH=$root/libs/$CONFIG -export DYLD_LIBRARY_PATH=$root/libs/$CONFIG +ROOT=`pwd` +GRPCIO_TEST=$ROOT/src/python/grpcio_test +export LD_LIBRARY_PATH=$ROOT/libs/$CONFIG +export DYLD_LIBRARY_PATH=$ROOT/libs/$CONFIG source "python"$PYVER"_virtual_environment"/bin/activate -"python"$PYVER -B $* +"python"$PYVER $GRPCIO_TEST/setup.py test -a "-n8 --cov=grpc --junitxml=./report.xml" diff --git a/tools/run_tests/run_tests.py b/tools/run_tests/run_tests.py index 50d88e66de0..fa749498d2f 100755 --- a/tools/run_tests/run_tests.py +++ b/tools/run_tests/run_tests.py @@ -187,40 +187,18 @@ class PhpLanguage(object): class PythonLanguage(object): def __init__(self): - with open('tools/run_tests/python_tests.json') as f: - self._tests = json.load(f) - self._build_python_versions = set([ - python_version - for test in self._tests - for python_version in test['pythonVersions']]) + self._build_python_versions = ['2.7'] self._has_python_versions = [] def test_specs(self, config, travis): - job_specifications = [] - for test in self._tests: - command = None - short_name = None - if 'module' in test: - command = ['tools/run_tests/run_python.sh', '-m', test['module']] - short_name = test['module'] - elif 'file' in test: - command = ['tools/run_tests/run_python.sh', test['file']] - short_name = test['file'] - else: - raise ValueError('expected input to be a module or file to run ' - 'unittests from') - for python_version in test['pythonVersions']: - if python_version in self._has_python_versions: - environment = dict(_FORCE_ENVIRON_FOR_WRAPPERS) - environment['PYVER'] = python_version - job_specifications.append(config.job_spec( - command, None, environ=environment, shortname=short_name)) - else: - jobset.message( - 'WARNING', - 'Could not find Python {}; skipping test'.format(python_version), - '{}\n'.format(command), do_newline=True) - return job_specifications + environment = dict(_FORCE_ENVIRON_FOR_WRAPPERS) + environment['PYVER'] = '2.7' + return [config.job_spec( + ['tools/run_tests/run_python.sh'], + None, + environ=environment, + shortname='py.test', + )] def make_targets(self): return ['static_c', 'grpc_python_plugin', 'shared_c']