aboutsummaryrefslogtreecommitdiffhomepage
path: root/tools/run_tests
diff options
context:
space:
mode:
Diffstat (limited to 'tools/run_tests')
-rwxr-xr-xtools/run_tests/antagonist.py34
-rwxr-xr-xtools/run_tests/prepare_travis.sh28
-rwxr-xr-xtools/run_tests/run_python.sh1
-rwxr-xr-xtools/run_tests/run_tests.py56
-rw-r--r--tools/run_tests/tests.json18
5 files changed, 118 insertions, 19 deletions
diff --git a/tools/run_tests/antagonist.py b/tools/run_tests/antagonist.py
new file mode 100755
index 0000000000..111839ccf9
--- /dev/null
+++ b/tools/run_tests/antagonist.py
@@ -0,0 +1,34 @@
+#!/usr/bin/env python
+# Copyright 2015, Google Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above
+# copyright notice, this list of conditions and the following disclaimer
+# in the documentation and/or other materials provided with the
+# distribution.
+# * Neither the name of Google Inc. nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+"""This is used by run_tests.py to create cpu load on a machine"""
+
+while True:
+ pass
diff --git a/tools/run_tests/prepare_travis.sh b/tools/run_tests/prepare_travis.sh
index a8ddc578d5..34a058f2a8 100755
--- a/tools/run_tests/prepare_travis.sh
+++ b/tools/run_tests/prepare_travis.sh
@@ -1,4 +1,32 @@
#!/bin/bash
+# Copyright 2015, Google Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above
+# copyright notice, this list of conditions and the following disclaimer
+# in the documentation and/or other materials provided with the
+# distribution.
+# * Neither the name of Google Inc. nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
cd `dirname $0`/../..
grpc_dir=`pwd`
diff --git a/tools/run_tests/run_python.sh b/tools/run_tests/run_python.sh
index f0e091f47a..cab08f9358 100755
--- a/tools/run_tests/run_python.sh
+++ b/tools/run_tests/run_python.sh
@@ -35,5 +35,6 @@ cd $(dirname $0)/../..
root=`pwd`
export LD_LIBRARY_PATH=$root/libs/$CONFIG
+export DYLD_LIBRARY_PATH=$root/libs/$CONFIG
source python2.7_virtual_environment/bin/activate
python2.7 -B $*
diff --git a/tools/run_tests/run_tests.py b/tools/run_tests/run_tests.py
index 41f53a434a..3a344693c1 100755
--- a/tools/run_tests/run_tests.py
+++ b/tools/run_tests/run_tests.py
@@ -40,6 +40,7 @@ import re
import sys
import time
import platform
+import subprocess
import jobset
import watch_dirs
@@ -61,7 +62,7 @@ class SimpleConfig(object):
self.environ = environ
self.environ['CONFIG'] = config
- def job_spec(self, cmdline, hash_targets, shortname=None):
+ def job_spec(self, cmdline, hash_targets, shortname=None, environ={}):
"""Construct a jobset.JobSpec for a test under this config
Args:
@@ -73,9 +74,12 @@ class SimpleConfig(object):
-- if used, all artifacts needed to run the test must
be listed
"""
+ actual_environ = self.environ.copy()
+ for k, v in environ.iteritems():
+ actual_environ[k] = v
return jobset.JobSpec(cmdline=cmdline,
shortname=shortname,
- environ=self.environ,
+ environ=actual_environ,
hash_targets=hash_targets
if self.allow_hashing else None)
@@ -143,7 +147,8 @@ class CLanguage(object):
class NodeLanguage(object):
def test_specs(self, config, travis):
- return [config.job_spec(['tools/run_tests/run_node.sh'], None)]
+ return [config.job_spec(['tools/run_tests/run_node.sh'], None,
+ environ={'GRPC_TRACE': 'surface,batch'})]
def make_targets(self):
return ['static_c']
@@ -161,7 +166,8 @@ class NodeLanguage(object):
class PhpLanguage(object):
def test_specs(self, config, travis):
- return [config.job_spec(['src/php/bin/run_tests.sh'], None)]
+ return [config.job_spec(['src/php/bin/run_tests.sh'], None,
+ environ={'GRPC_TRACE': 'surface,batch'})]
def make_targets(self):
return ['static_c']
@@ -184,15 +190,17 @@ class PythonLanguage(object):
def test_specs(self, config, travis):
modules = [config.job_spec(['tools/run_tests/run_python.sh', '-m',
- test['module']],
- None,
+ test['module']],
+ None,
+ environ={'GRPC_TRACE': 'surface,batch'},
shortname=test['module'])
for test in self._tests if 'module' in test]
files = [config.job_spec(['tools/run_tests/run_python.sh',
- test['file']],
- None,
+ test['file']],
+ None,
+ environ={'GRPC_TRACE': 'surface,batch'},
shortname=test['file'])
- for test in self._tests if 'file' in test]
+ for test in self._tests if 'file' in test]
return files + modules
def make_targets(self):
@@ -211,7 +219,8 @@ class PythonLanguage(object):
class RubyLanguage(object):
def test_specs(self, config, travis):
- return [config.job_spec(['tools/run_tests/run_ruby.sh'], None)]
+ return [config.job_spec(['tools/run_tests/run_ruby.sh'], None,
+ environ={'GRPC_TRACE': 'surface,batch'})]
def make_targets(self):
return ['run_dep_checks']
@@ -232,7 +241,8 @@ class CSharpLanguage(object):
'Grpc.Examples.Tests',
'Grpc.IntegrationTesting']
return [config.job_spec(['tools/run_tests/run_csharp.sh', assembly],
- None, shortname=assembly)
+ None, shortname=assembly,
+ environ={'GRPC_TRACE': 'surface,batch'})
for assembly in assemblies ]
def make_targets(self):
@@ -341,6 +351,7 @@ argp.add_argument('-l', '--language',
choices=sorted(_LANGUAGES.keys()),
nargs='+',
default=sorted(_LANGUAGES.keys()))
+argp.add_argument('-a', '--antagonists', default=0, type=int)
args = argp.parse_args()
# grab config
@@ -435,14 +446,21 @@ def _build_and_run(check_cancelled, newline_on_success, travis, cache):
newline_on_success=newline_on_success, travis=travis):
return 1
- # run all the tests
- all_runs = itertools.chain.from_iterable(
- itertools.repeat(one_run, runs_per_test))
- if not jobset.run(all_runs, check_cancelled,
- newline_on_success=newline_on_success, travis=travis,
- maxjobs=min(args.jobs, min(c.maxjobs for c in run_configs)),
- cache=cache):
- return 2
+ # start antagonists
+ antagonists = [subprocess.Popen(['tools/run_tests/antagonist.py'])
+ for _ in range(0, args.antagonists)]
+ try:
+ # run all the tests
+ all_runs = itertools.chain.from_iterable(
+ itertools.repeat(one_run, runs_per_test))
+ if not jobset.run(all_runs, check_cancelled,
+ newline_on_success=newline_on_success, travis=travis,
+ maxjobs=min(args.jobs, min(c.maxjobs for c in run_configs)),
+ cache=cache):
+ return 2
+ finally:
+ for antagonist in antagonists:
+ antagonist.kill()
return 0
diff --git a/tools/run_tests/tests.json b/tools/run_tests/tests.json
index c4438e53b5..3340dd0e23 100644
--- a/tools/run_tests/tests.json
+++ b/tools/run_tests/tests.json
@@ -644,6 +644,15 @@
{
"flaky": false,
"language": "c++",
+ "name": "client_crash_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
+ },
+ {
+ "flaky": false,
+ "language": "c++",
"name": "credentials_test",
"platforms": [
"windows",
@@ -698,6 +707,15 @@
{
"flaky": false,
"language": "c++",
+ "name": "server_crash_test",
+ "platforms": [
+ "windows",
+ "posix"
+ ]
+ },
+ {
+ "flaky": false,
+ "language": "c++",
"name": "status_test",
"platforms": [
"windows",