aboutsummaryrefslogtreecommitdiffhomepage
path: root/tools
diff options
context:
space:
mode:
authorGravatar Craig Tiller <craig.tiller@gmail.com>2015-11-13 13:44:40 +0000
committerGravatar Craig Tiller <craig.tiller@gmail.com>2015-11-13 13:44:40 +0000
commit860f484f43841d14df61cfeda6ca5e637ed99d19 (patch)
treeb2470444ffb18fdb0ae7bb90db52626181f28224 /tools
parent61ead3e061f685f87e284bf41f7ed1cb44f347b4 (diff)
parentbd50ed8057aa9823a0fd4d0b6d5b1722c199a70d (diff)
Merge branch 'new_op' into better-profile
Diffstat (limited to 'tools')
-rwxr-xr-xtools/http2_interop/http2_interop.testbin0 -> 6210464 bytes
-rw-r--r--tools/http2_interop/http2interop.go137
-rw-r--r--tools/http2_interop/http2interop_test.go95
-rwxr-xr-xtools/jenkins/build_docker_and_run_tests.sh1
-rwxr-xr-xtools/jenkins/build_interop_image.sh1
-rw-r--r--tools/jenkins/grpc_interop_http2/Dockerfile36
-rwxr-xr-xtools/jenkins/grpc_interop_http2/build_interop.sh42
-rwxr-xr-xtools/run_tests/dockerjob.py2
-rwxr-xr-xtools/run_tests/jobset.py71
-rwxr-xr-xtools/run_tests/post_tests_c.sh12
-rw-r--r--tools/run_tests/report_utils.py215
-rwxr-xr-xtools/run_tests/run_interop_tests.py191
-rwxr-xr-xtools/run_tests/run_tests.py75
-rw-r--r--tools/run_tests/sources_and_headers.json797
-rw-r--r--tools/run_tests/tests.json830
15 files changed, 2230 insertions, 275 deletions
diff --git a/tools/http2_interop/http2_interop.test b/tools/http2_interop/http2_interop.test
new file mode 100755
index 0000000000..0700763dc3
--- /dev/null
+++ b/tools/http2_interop/http2_interop.test
Binary files differ
diff --git a/tools/http2_interop/http2interop.go b/tools/http2_interop/http2interop.go
index f1bca7fe13..8585a044e5 100644
--- a/tools/http2_interop/http2interop.go
+++ b/tools/http2_interop/http2interop.go
@@ -2,15 +2,38 @@ package http2interop
import (
"crypto/tls"
+ "crypto/x509"
"fmt"
"io"
- "log"
+ "net"
+ "testing"
+ "time"
)
const (
Preface = "PRI * HTTP/2.0\r\n\r\nSM\r\n\r\n"
)
+var (
+ defaultTimeout = 1 * time.Second
+)
+
+type HTTP2InteropCtx struct {
+ // Inputs
+ ServerHost string
+ ServerPort int
+ UseTLS bool
+ UseTestCa bool
+ ServerHostnameOverride string
+
+ T *testing.T
+
+ // Derived
+ serverSpec string
+ authority string
+ rootCAs *x509.CertPool
+}
+
func parseFrame(r io.Reader) (Frame, error) {
fh := FrameHeader{}
if err := fh.Parse(r); err != nil {
@@ -49,22 +72,8 @@ func streamFrame(w io.Writer, f Frame) error {
return nil
}
-func getHttp2Conn(addr string) (*tls.Conn, error) {
- config := &tls.Config{
- InsecureSkipVerify: true,
- NextProtos: []string{"h2"},
- }
-
- conn, err := tls.Dial("tcp", addr, config)
- if err != nil {
- return nil, err
- }
-
- return conn, nil
-}
-
-func testClientShortSettings(addr string, length int) error {
- c, err := getHttp2Conn(addr)
+func testClientShortSettings(ctx *HTTP2InteropCtx, length int) error {
+ c, err := connect(ctx)
if err != nil {
return err
}
@@ -82,22 +91,22 @@ func testClientShortSettings(addr string, length int) error {
Data: make([]byte, length),
}
if err := streamFrame(c, sf); err != nil {
+ ctx.T.Log("Unable to stream frame", sf)
return err
}
for {
- frame, err := parseFrame(c)
- if err != nil {
+ if _, err := parseFrame(c); err != nil {
+ ctx.T.Log("Unable to parse frame")
return err
}
- log.Println(frame)
}
return nil
}
-func testClientPrefaceWithStreamId(addr string) error {
- c, err := getHttp2Conn(addr)
+func testClientPrefaceWithStreamId(ctx *HTTP2InteropCtx) error {
+ c, err := connect(ctx)
if err != nil {
return err
}
@@ -119,18 +128,16 @@ func testClientPrefaceWithStreamId(addr string) error {
}
for {
- frame, err := parseFrame(c)
- if err != nil {
+ if _, err := parseFrame(c); err != nil {
return err
}
- log.Println(frame)
}
return nil
}
-func testUnknownFrameType(addr string) error {
- c, err := getHttp2Conn(addr)
+func testUnknownFrameType(ctx *HTTP2InteropCtx) error {
+ c, err := connect(ctx)
if err != nil {
return err
}
@@ -143,6 +150,7 @@ func testUnknownFrameType(addr string) error {
// Send some settings, which are part of the client preface
sf := &SettingsFrame{}
if err := streamFrame(c, sf); err != nil {
+ ctx.T.Log("Unable to stream frame", sf)
return err
}
@@ -154,6 +162,7 @@ func testUnknownFrameType(addr string) error {
},
}
if err := streamFrame(c, fh); err != nil {
+ ctx.T.Log("Unable to stream frame", fh)
return err
}
}
@@ -162,12 +171,14 @@ func testUnknownFrameType(addr string) error {
Data: []byte("01234567"),
}
if err := streamFrame(c, pf); err != nil {
+ ctx.T.Log("Unable to stream frame", sf)
return err
}
for {
frame, err := parseFrame(c)
if err != nil {
+ ctx.T.Log("Unable to parse frame")
return err
}
if npf, ok := frame.(*PingFrame); !ok {
@@ -183,8 +194,8 @@ func testUnknownFrameType(addr string) error {
return nil
}
-func testShortPreface(addr string, prefacePrefix string) error {
- c, err := getHttp2Conn(addr)
+func testShortPreface(ctx *HTTP2InteropCtx, prefacePrefix string) error {
+ c, err := connect(ctx)
if err != nil {
return err
}
@@ -201,17 +212,15 @@ func testShortPreface(addr string, prefacePrefix string) error {
return err
}
-func testTLSMaxVersion(addr string, version uint16) error {
- config := &tls.Config{
- InsecureSkipVerify: true,
- NextProtos: []string{"h2"},
- MaxVersion: version,
- }
- conn, err := tls.Dial("tcp", addr, config)
+func testTLSMaxVersion(ctx *HTTP2InteropCtx, version uint16) error {
+ config := buildTlsConfig(ctx)
+ config.MaxVersion = version
+ conn, err := connectWithTls(ctx, config)
if err != nil {
return err
}
defer conn.Close()
+ conn.SetDeadline(time.Now().Add(defaultTimeout))
buf := make([]byte, 256)
if n, err := conn.Read(buf); err != nil {
@@ -223,16 +232,15 @@ func testTLSMaxVersion(addr string, version uint16) error {
return nil
}
-func testTLSApplicationProtocol(addr string) error {
- config := &tls.Config{
- InsecureSkipVerify: true,
- NextProtos: []string{"h2c"},
- }
- conn, err := tls.Dial("tcp", addr, config)
+func testTLSApplicationProtocol(ctx *HTTP2InteropCtx) error {
+ config := buildTlsConfig(ctx)
+ config.NextProtos = []string{"h2c"}
+ conn, err := connectWithTls(ctx, config)
if err != nil {
return err
}
defer conn.Close()
+ conn.SetDeadline(time.Now().Add(defaultTimeout))
buf := make([]byte, 256)
if n, err := conn.Read(buf); err != nil {
@@ -243,3 +251,48 @@ func testTLSApplicationProtocol(addr string) error {
}
return nil
}
+
+func connect(ctx *HTTP2InteropCtx) (net.Conn, error) {
+ var conn net.Conn
+ var err error
+ if !ctx.UseTLS {
+ conn, err = connectWithoutTls(ctx)
+ } else {
+ config := buildTlsConfig(ctx)
+ conn, err = connectWithTls(ctx, config)
+ }
+ if err != nil {
+ return nil, err
+ }
+ conn.SetDeadline(time.Now().Add(defaultTimeout))
+
+ return conn, nil
+}
+
+func buildTlsConfig(ctx *HTTP2InteropCtx) *tls.Config {
+ return &tls.Config{
+ RootCAs: ctx.rootCAs,
+ NextProtos: []string{"h2"},
+ ServerName: ctx.authority,
+ MinVersion: tls.VersionTLS12,
+ // TODO(carl-mastrangelo): remove this once all test certificates have been updated.
+ InsecureSkipVerify: true,
+ }
+}
+
+func connectWithoutTls(ctx *HTTP2InteropCtx) (net.Conn, error) {
+ conn, err := net.DialTimeout("tcp", ctx.serverSpec, defaultTimeout)
+ if err != nil {
+ return nil, err
+ }
+ return conn, nil
+}
+
+func connectWithTls(ctx *HTTP2InteropCtx, config *tls.Config) (*tls.Conn, error) {
+ conn, err := connectWithoutTls(ctx)
+ if err != nil {
+ return nil, err
+ }
+
+ return tls.Client(conn, config), nil
+}
diff --git a/tools/http2_interop/http2interop_test.go b/tools/http2_interop/http2interop_test.go
index 3b687c035e..dc2960048f 100644
--- a/tools/http2_interop/http2interop_test.go
+++ b/tools/http2_interop/http2interop_test.go
@@ -2,46 +2,117 @@ package http2interop
import (
"crypto/tls"
+ "crypto/x509"
+ "strings"
"flag"
+ "fmt"
"io"
+ "io/ioutil"
"os"
+ "strconv"
"testing"
)
var (
- serverSpec = flag.String("spec", ":50051", "The server spec to test")
+ serverHost = flag.String("server_host", "", "The host to test")
+ serverPort = flag.Int("server_port", 443, "The port to test")
+ useTls = flag.Bool("use_tls", true, "Should TLS tests be run")
+ // TODO: implement
+ testCase = flag.String("test_case", "", "What test cases to run")
+
+ // The rest of these are unused, but present to fulfill the client interface
+ serverHostOverride = flag.String("server_host_override", "", "Unused")
+ useTestCa = flag.Bool("use_test_ca", false, "Unused")
+ defaultServiceAccount = flag.String("default_service_account", "", "Unused")
+ oauthScope = flag.String("oauth_scope", "", "Unused")
+ serviceAccountKeyFile = flag.String("service_account_key_file", "", "Unused")
)
+func InteropCtx(t *testing.T) *HTTP2InteropCtx {
+ ctx := &HTTP2InteropCtx{
+ ServerHost: *serverHost,
+ ServerPort: *serverPort,
+ ServerHostnameOverride: *serverHostOverride,
+ UseTLS: *useTls,
+ UseTestCa: *useTestCa,
+ T: t,
+ }
+
+ ctx.serverSpec = ctx.ServerHost
+ if ctx.ServerPort != -1 {
+ ctx.serverSpec += ":" + strconv.Itoa(ctx.ServerPort)
+ }
+ if ctx.ServerHostnameOverride == "" {
+ ctx.authority = ctx.ServerHost
+ } else {
+ ctx.authority = ctx.ServerHostnameOverride
+ }
+
+ if ctx.UseTestCa {
+ // It would be odd if useTestCa was true, but not useTls. meh
+ certData, err := ioutil.ReadFile("src/core/tsi/test_creds/ca.pem")
+ if err != nil {
+ t.Fatal(err)
+ }
+
+ ctx.rootCAs = x509.NewCertPool()
+ if !ctx.rootCAs.AppendCertsFromPEM(certData) {
+ t.Fatal(fmt.Errorf("Unable to parse pem data"))
+ }
+ }
+
+ return ctx
+}
+
+func (ctx *HTTP2InteropCtx) Close() error {
+ // currently a noop
+ return nil
+}
+
func TestShortPreface(t *testing.T) {
+ ctx := InteropCtx(t)
for i := 0; i < len(Preface)-1; i++ {
- if err := testShortPreface(*serverSpec, Preface[:i]+"X"); err != io.EOF {
+ if err := testShortPreface(ctx, Preface[:i]+"X"); err != io.EOF {
t.Error("Expected an EOF but was", err)
}
}
}
func TestUnknownFrameType(t *testing.T) {
- if err := testUnknownFrameType(*serverSpec); err != nil {
+ ctx := InteropCtx(t)
+ if err := testUnknownFrameType(ctx); err != nil {
t.Fatal(err)
}
}
func TestTLSApplicationProtocol(t *testing.T) {
- if err := testTLSApplicationProtocol(*serverSpec); err != io.EOF {
- t.Fatal("Expected an EOF but was", err)
- }
+ ctx := InteropCtx(t)
+ err := testTLSApplicationProtocol(ctx);
+ matchError(t, err, "EOF")
}
func TestTLSMaxVersion(t *testing.T) {
- if err := testTLSMaxVersion(*serverSpec, tls.VersionTLS11); err != io.EOF {
- t.Fatal("Expected an EOF but was", err)
- }
+ ctx := InteropCtx(t)
+ err := testTLSMaxVersion(ctx, tls.VersionTLS11);
+ matchError(t, err, "EOF", "server selected unsupported protocol")
}
func TestClientPrefaceWithStreamId(t *testing.T) {
- if err := testClientPrefaceWithStreamId(*serverSpec); err != io.EOF {
- t.Fatal("Expected an EOF but was", err)
- }
+ ctx := InteropCtx(t)
+ err := testClientPrefaceWithStreamId(ctx)
+ matchError(t, err, "EOF")
+}
+
+func matchError(t *testing.T, err error, matches ... string) {
+ if err == nil {
+ t.Fatal("Expected an error")
+ }
+ for _, s := range matches {
+ if strings.Contains(err.Error(), s) {
+ return
+ }
+ }
+ t.Fatalf("Error %v not in %+v", err, matches)
}
func TestMain(m *testing.M) {
diff --git a/tools/jenkins/build_docker_and_run_tests.sh b/tools/jenkins/build_docker_and_run_tests.sh
index 5bb2b6b188..b44c380533 100755
--- a/tools/jenkins/build_docker_and_run_tests.sh
+++ b/tools/jenkins/build_docker_and_run_tests.sh
@@ -63,6 +63,7 @@ docker run \
-e "arch=$arch" \
-e CCACHE_DIR=/tmp/ccache \
-e XDG_CACHE_HOME=/tmp/xdg-cache-home \
+ -e THIS_IS_REALLY_NEEDED='see https://github.com/docker/docker/issues/14203 for why docker is awful' \
-i $TTY_FLAG \
-v "$git_root:/var/local/jenkins/grpc" \
-v /tmp/ccache:/tmp/ccache \
diff --git a/tools/jenkins/build_interop_image.sh b/tools/jenkins/build_interop_image.sh
index 5dfa242513..d0c5470ed6 100755
--- a/tools/jenkins/build_interop_image.sh
+++ b/tools/jenkins/build_interop_image.sh
@@ -84,6 +84,7 @@ CONTAINER_NAME="build_${BASE_NAME}_$(uuidgen)"
# Prepare image for interop tests, commit it on success.
(docker run \
-e CCACHE_DIR=/tmp/ccache \
+ -e THIS_IS_REALLY_NEEDED='see https://github.com/docker/docker/issues/14203 for why docker is awful' \
-i $TTY_FLAG \
$MOUNT_ARGS \
$BUILD_INTEROP_DOCKER_EXTRA_ARGS \
diff --git a/tools/jenkins/grpc_interop_http2/Dockerfile b/tools/jenkins/grpc_interop_http2/Dockerfile
new file mode 100644
index 0000000000..bb60f09f24
--- /dev/null
+++ b/tools/jenkins/grpc_interop_http2/Dockerfile
@@ -0,0 +1,36 @@
+# 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.
+
+FROM golang:1.4
+
+# Using login shell removes Go from path, so we add it.
+RUN ln -s /usr/src/go/bin/go /usr/local/bin
+
+# Define the default command.
+CMD ["bash"]
diff --git a/tools/jenkins/grpc_interop_http2/build_interop.sh b/tools/jenkins/grpc_interop_http2/build_interop.sh
new file mode 100755
index 0000000000..46ddaf929a
--- /dev/null
+++ b/tools/jenkins/grpc_interop_http2/build_interop.sh
@@ -0,0 +1,42 @@
+#!/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.
+#
+# Builds http2 interop client in a base image.
+set -e
+
+mkdir -p /var/local/git
+git clone --recursive /var/local/jenkins/grpc /var/local/git/grpc
+
+# copy service account keys if available
+cp -r /var/local/jenkins/service_account $HOME || true
+
+# compile the tests
+(cd /var/local/git/grpc/tools/http2_interop && go test -c)
+
diff --git a/tools/run_tests/dockerjob.py b/tools/run_tests/dockerjob.py
index 1d67fe3033..7d64222ba0 100755
--- a/tools/run_tests/dockerjob.py
+++ b/tools/run_tests/dockerjob.py
@@ -101,7 +101,7 @@ class DockerJob:
def __init__(self, spec):
self._spec = spec
- self._job = jobset.Job(spec, bin_hash=None, newline_on_success=True, travis=True, add_env={}, xml_report=None)
+ self._job = jobset.Job(spec, bin_hash=None, newline_on_success=True, travis=True, add_env={})
self._container_name = spec.container_name
def mapped_port(self, port):
diff --git a/tools/run_tests/jobset.py b/tools/run_tests/jobset.py
index a8ff9f613f..88d95027e2 100755
--- a/tools/run_tests/jobset.py
+++ b/tools/run_tests/jobset.py
@@ -34,15 +34,14 @@ import multiprocessing
import os
import platform
import signal
-import string
import subprocess
import sys
import tempfile
import time
-import xml.etree.cElementTree as ET
_DEFAULT_MAX_JOBS = 16 * multiprocessing.cpu_count()
+_MAX_RESULT_SIZE = 8192
# setup a signal handler so that signal.pause registers 'something'
@@ -130,14 +129,6 @@ def which(filename):
raise Exception('%s not found' % filename)
-def _filter_stdout(stdout):
- """Filters out nonprintable and XML-illegal characters from stdout."""
- # keep whitespaces but remove formfeed and vertical tab characters
- # that make XML report unparseable.
- return filter(lambda x: x in string.printable and x != '\f' and x != '\v',
- stdout.decode(errors='ignore'))
-
-
class JobSpec(object):
"""Specifies what to run for a job."""
@@ -190,14 +181,12 @@ class JobResult(object):
class Job(object):
"""Manages one job."""
- def __init__(self, spec, bin_hash, newline_on_success, travis, add_env, xml_report):
+ def __init__(self, spec, bin_hash, newline_on_success, travis, add_env):
self._spec = spec
self._bin_hash = bin_hash
self._newline_on_success = newline_on_success
self._travis = travis
self._add_env = add_env.copy()
- self._xml_test = ET.SubElement(xml_report, 'testcase',
- name=self._spec.shortname) if xml_report is not None else None
self._retries = 0
self._timeout_retries = 0
self._suppress_failure_message = False
@@ -214,30 +203,33 @@ class Job(object):
env.update(self._spec.environ)
env.update(self._add_env)
self._start = time.time()
- self._process = subprocess.Popen(args=self._spec.cmdline,
- stderr=subprocess.STDOUT,
- stdout=self._tempfile,
- cwd=self._spec.cwd,
- shell=self._spec.shell,
- env=env)
+ try_start = lambda: subprocess.Popen(args=self._spec.cmdline,
+ stderr=subprocess.STDOUT,
+ stdout=self._tempfile,
+ cwd=self._spec.cwd,
+ shell=self._spec.shell,
+ env=env)
+ delay = 0.3
+ for i in range(0, 4):
+ try:
+ self._process = try_start()
+ break
+ except OSError:
+ message('WARNING', 'Failed to start %s, retrying in %f seconds' % (self._spec.shortname, delay))
+ time.sleep(delay)
+ delay *= 2
+ else:
+ self._process = try_start()
self._state = _RUNNING
def state(self, update_cache):
"""Poll current state of the job. Prints messages at completion."""
+ self._tempfile.seek(0)
+ stdout = self._tempfile.read()
+ self.result.message = stdout[-_MAX_RESULT_SIZE:]
if self._state == _RUNNING and self._process.poll() is not None:
elapsed = time.time() - self._start
- self._tempfile.seek(0)
- stdout = self._tempfile.read()
- filtered_stdout = _filter_stdout(stdout)
- # TODO: looks like jenkins master is slow because parsing the junit results XMLs is not
- # implemented efficiently. This is an experiment to workaround the issue by making sure
- # results.xml file is small enough.
- filtered_stdout = filtered_stdout[-128:]
- self.result.message = filtered_stdout
self.result.elapsed_time = elapsed
- if self._xml_test is not None:
- self._xml_test.set('time', str(elapsed))
- ET.SubElement(self._xml_test, 'system-out').text = filtered_stdout
if self._process.returncode != 0:
if self._retries < self._spec.flake_retries:
message('FLAKE', '%s [ret=%d, pid=%d]' % (
@@ -256,8 +248,6 @@ class Job(object):
self.result.state = 'FAILED'
self.result.num_failures += 1
self.result.returncode = self._process.returncode
- if self._xml_test is not None:
- ET.SubElement(self._xml_test, 'failure', message='Failure')
else:
self._state = _SUCCESS
message('PASSED', '%s [time=%.1fsec; retries=%d;%d]' % (
@@ -267,10 +257,6 @@ class Job(object):
if self._bin_hash:
update_cache.finished(self._spec.identity(), self._bin_hash)
elif self._state == _RUNNING and time.time() - self._start > self._spec.timeout_seconds:
- self._tempfile.seek(0)
- stdout = self._tempfile.read()
- filtered_stdout = _filter_stdout(stdout)
- self.result.message = filtered_stdout
if self._timeout_retries < self._spec.timeout_retries:
message('TIMEOUT_FLAKE', self._spec.shortname, stdout, do_newline=True)
self._timeout_retries += 1
@@ -285,9 +271,6 @@ class Job(object):
self.kill()
self.result.state = 'TIMEOUT'
self.result.num_failures += 1
- if self._xml_test is not None:
- ET.SubElement(self._xml_test, 'system-out').text = filtered_stdout
- ET.SubElement(self._xml_test, 'error', message='Timeout')
return self._state
def kill(self):
@@ -305,7 +288,7 @@ class Jobset(object):
"""Manages one run of jobs."""
def __init__(self, check_cancelled, maxjobs, newline_on_success, travis,
- stop_on_failure, add_env, cache, xml_report):
+ stop_on_failure, add_env, cache):
self._running = set()
self._check_cancelled = check_cancelled
self._cancelled = False
@@ -317,7 +300,6 @@ class Jobset(object):
self._cache = cache
self._stop_on_failure = stop_on_failure
self._hashes = {}
- self._xml_report = xml_report
self._add_env = add_env
self.resultset = {}
@@ -349,8 +331,7 @@ class Jobset(object):
bin_hash,
self._newline_on_success,
self._travis,
- self._add_env,
- self._xml_report)
+ self._add_env)
self._running.add(job)
self.resultset[job.GetSpec().shortname] = []
return True
@@ -424,13 +405,11 @@ def run(cmdlines,
infinite_runs=False,
stop_on_failure=False,
cache=None,
- xml_report=None,
add_env={}):
js = Jobset(check_cancelled,
maxjobs if maxjobs is not None else _DEFAULT_MAX_JOBS,
newline_on_success, travis, stop_on_failure, add_env,
- cache if cache is not None else NoCache(),
- xml_report)
+ cache if cache is not None else NoCache())
for cmdline in cmdlines:
if not js.start(cmdline):
break
diff --git a/tools/run_tests/post_tests_c.sh b/tools/run_tests/post_tests_c.sh
index f2f3ce9432..4409526dab 100755
--- a/tools/run_tests/post_tests_c.sh
+++ b/tools/run_tests/post_tests_c.sh
@@ -34,8 +34,12 @@ if [ "$CONFIG" != "gcov" ] ; then exit ; fi
root=$(readlink -f $(dirname $0)/../..)
out=$root/reports/c_cxx_coverage
-tmp=$(mktemp)
+tmp1=$(mktemp)
+tmp2=$(mktemp)
cd $root
-lcov --capture --directory . --output-file $tmp
-genhtml $tmp --output-directory $out
-rm $tmp
+lcov --capture --directory . --output-file $tmp1
+lcov --extract $tmp1 "$root/src/*" "$root/include/*" --output-file $tmp2
+genhtml $tmp2 --output-directory $out
+rm $tmp2
+rm $tmp1
+
diff --git a/tools/run_tests/report_utils.py b/tools/run_tests/report_utils.py
new file mode 100644
index 0000000000..bb9eca4254
--- /dev/null
+++ b/tools/run_tests/report_utils.py
@@ -0,0 +1,215 @@
+# 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.
+
+"""Generate XML and HTML test reports."""
+
+import os
+import string
+import xml.etree.cElementTree as ET
+
+
+def _filter_msg(msg, output_format):
+ """Filters out nonprintable and illegal characters from the message."""
+ if output_format in ['XML', 'HTML']:
+ # keep whitespaces but remove formfeed and vertical tab characters
+ # that make XML report unparseable.
+ filtered_msg = filter(
+ lambda x: x in string.printable and x != '\f' and x != '\v',
+ msg.decode(errors='ignore'))
+ if output_format == 'HTML':
+ filtered_msg = filtered_msg.replace('"', '&quot;')
+ return filtered_msg
+ else:
+ return msg
+
+
+def render_xml_report(resultset, xml_report):
+ """Generate JUnit-like XML report."""
+ root = ET.Element('testsuites')
+ testsuite = ET.SubElement(root, 'testsuite', id='1', package='grpc',
+ name='tests')
+ for shortname, results in resultset.iteritems():
+ for result in results:
+ xml_test = ET.SubElement(testsuite, 'testcase', name=shortname)
+ if result.elapsed_time:
+ xml_test.set('time', str(result.elapsed_time))
+ ET.SubElement(xml_test, 'system-out').text = _filter_msg(result.message,
+ 'XML')
+ if result.state == 'FAILED':
+ ET.SubElement(xml_test, 'failure', message='Failure')
+ elif result.state == 'TIMEOUT':
+ ET.SubElement(xml_test, 'error', message='Timeout')
+ tree = ET.ElementTree(root)
+ tree.write(xml_report, encoding='UTF-8')
+
+
+# TODO(adelez): Use mako template.
+def fill_one_test_result(shortname, resultset, html_str):
+ if shortname in resultset:
+ # Because interop tests does not have runs_per_test flag, each test is run
+ # once. So there should only be one element for each result.
+ result = resultset[shortname][0]
+ if result.state == 'PASSED':
+ html_str = '%s<td bgcolor=\"green\">PASS</td>\n' % html_str
+ else:
+ tooltip = ''
+ if result.returncode > 0 or result.message:
+ if result.returncode > 0:
+ tooltip = 'returncode: %d ' % result.returncode
+ if result.message:
+ escaped_msg = _filter_msg(result.message, 'HTML')
+ tooltip = '%smessage: %s' % (tooltip, escaped_msg)
+ if result.state == 'FAILED':
+ html_str = '%s<td bgcolor=\"red\">' % html_str
+ if tooltip:
+ html_str = ('%s<a href=\"#\" data-toggle=\"tooltip\" '
+ 'data-placement=\"auto\" title=\"%s\">FAIL</a></td>\n' %
+ (html_str, tooltip))
+ else:
+ html_str = '%sFAIL</td>\n' % html_str
+ elif result.state == 'TIMEOUT':
+ html_str = '%s<td bgcolor=\"yellow\">' % html_str
+ if tooltip:
+ html_str = ('%s<a href=\"#\" data-toggle=\"tooltip\" '
+ 'data-placement=\"auto\" title=\"%s\">TIMEOUT</a></td>\n'
+ % (html_str, tooltip))
+ else:
+ html_str = '%sTIMEOUT</td>\n' % html_str
+ else:
+ html_str = '%s<td bgcolor=\"magenta\">Not implemented</td>\n' % html_str
+
+ return html_str
+
+
+def render_html_report(client_langs, server_langs, test_cases, auth_test_cases,
+ http2_cases, resultset, num_failures, cloud_to_prod,
+ http2_interop):
+ """Generate html report."""
+ sorted_test_cases = sorted(test_cases)
+ sorted_auth_test_cases = sorted(auth_test_cases)
+ sorted_http2_cases = sorted(http2_cases)
+ sorted_client_langs = sorted(client_langs)
+ sorted_server_langs = sorted(server_langs)
+ html_str = ('<!DOCTYPE html>\n'
+ '<html lang=\"en\">\n'
+ '<head><title>Interop Test Result</title></head>\n'
+ '<body>\n')
+ if num_failures > 1:
+ html_str = (
+ '%s<p><h2><font color=\"red\">%d tests failed!</font></h2></p>\n' %
+ (html_str, num_failures))
+ elif num_failures:
+ html_str = (
+ '%s<p><h2><font color=\"red\">%d test failed!</font></h2></p>\n' %
+ (html_str, num_failures))
+ else:
+ html_str = (
+ '%s<p><h2><font color=\"green\">All tests passed!</font></h2></p>\n' %
+ html_str)
+ if cloud_to_prod:
+ # Each column header is the client language.
+ html_str = ('%s<h2>Cloud to Prod</h2>\n'
+ '<table style=\"width:100%%\" border=\"1\">\n'
+ '<tr bgcolor=\"#00BFFF\">\n'
+ '<th>Client languages &#9658;</th>\n') % html_str
+ for client_lang in sorted_client_langs:
+ html_str = '%s<th>%s\n' % (html_str, client_lang)
+ html_str = '%s</tr>\n' % html_str
+ for test_case in sorted_test_cases + sorted_auth_test_cases:
+ html_str = '%s<tr><td><b>%s</b></td>\n' % (html_str, test_case)
+ for client_lang in sorted_client_langs:
+ if not test_case in sorted_auth_test_cases:
+ shortname = 'cloud_to_prod:%s:%s' % (client_lang, test_case)
+ else:
+ shortname = 'cloud_to_prod_auth:%s:%s' % (client_lang, test_case)
+ html_str = fill_one_test_result(shortname, resultset, html_str)
+ html_str = '%s</tr>\n' % html_str
+ html_str = '%s</table>\n' % html_str
+ if http2_interop:
+ # Each column header is the server language.
+ html_str = ('%s<h2>HTTP/2 Interop</h2>\n'
+ '<table style=\"width:100%%\" border=\"1\">\n'
+ '<tr bgcolor=\"#00BFFF\">\n'
+ '<th>Servers &#9658;<br/>'
+ 'Test Cases &#9660;</th>\n') % html_str
+ for server_lang in sorted_server_langs:
+ html_str = '%s<th>%s\n' % (html_str, server_lang)
+ if cloud_to_prod:
+ html_str = '%s<th>%s\n' % (html_str, "prod")
+ html_str = '%s</tr>\n' % html_str
+ for test_case in sorted_http2_cases:
+ html_str = '%s<tr><td><b>%s</b></td>\n' % (html_str, test_case)
+ # Fill up the cells with test result.
+ for server_lang in sorted_server_langs:
+ shortname = 'cloud_to_cloud:%s:%s_server:%s' % (
+ "http2", server_lang, test_case)
+ html_str = fill_one_test_result(shortname, resultset, html_str)
+ if cloud_to_prod:
+ shortname = 'cloud_to_prod:%s:%s' % ("http2", test_case)
+ html_str = fill_one_test_result(shortname, resultset, html_str)
+ html_str = '%s</tr>\n' % html_str
+ html_str = '%s</table>\n' % html_str
+ if server_langs:
+ for test_case in sorted_test_cases:
+ # Each column header is the client language.
+ html_str = ('%s<h2>%s</h2>\n'
+ '<table style=\"width:100%%\" border=\"1\">\n'
+ '<tr bgcolor=\"#00BFFF\">\n'
+ '<th>Client languages &#9658;<br/>'
+ 'Server languages &#9660;</th>\n') % (html_str, test_case)
+ for client_lang in sorted_client_langs:
+ html_str = '%s<th>%s\n' % (html_str, client_lang)
+ html_str = '%s</tr>\n' % html_str
+ # Each row head is the server language.
+ for server_lang in sorted_server_langs:
+ html_str = '%s<tr><td><b>%s</b></td>\n' % (html_str, server_lang)
+ # Fill up the cells with test result.
+ for client_lang in sorted_client_langs:
+ shortname = 'cloud_to_cloud:%s:%s_server:%s' % (
+ client_lang, server_lang, test_case)
+ html_str = fill_one_test_result(shortname, resultset, html_str)
+ html_str = '%s</tr>\n' % html_str
+ html_str = '%s</table>\n' % html_str
+
+ html_str = ('%s\n'
+ '<script>\n'
+ '$(document).ready(function(){'
+ '$(\'[data-toggle=\"tooltip\"]\').tooltip();\n'
+ '});\n'
+ '</script>\n'
+ '</body>\n'
+ '</html>') % html_str
+
+ # Write to reports/index.html as set up in Jenkins plugin.
+ html_report_dir = 'reports'
+ if not os.path.exists(html_report_dir):
+ os.mkdir(html_report_dir)
+ html_file_path = os.path.join(html_report_dir, 'index.html')
+ with open(html_file_path, 'w') as f:
+ f.write(html_str)
diff --git a/tools/run_tests/run_interop_tests.py b/tools/run_tests/run_interop_tests.py
index 729f962bb1..1686942b0a 100755
--- a/tools/run_tests/run_interop_tests.py
+++ b/tools/run_tests/run_interop_tests.py
@@ -33,10 +33,10 @@
import argparse
import dockerjob
import itertools
-import xml.etree.cElementTree as ET
import jobset
import multiprocessing
import os
+import report_utils
import subprocess
import sys
import tempfile
@@ -159,6 +159,31 @@ class GoLanguage:
return 'go'
+class Http2Client:
+ """Represents the HTTP/2 Interop Test
+
+ This pretends to be a language in order to be built and run, but really it
+ isn't.
+ """
+ def __init__(self):
+ self.client_cwd = None
+ self.safename = str(self)
+
+ def client_args(self):
+ return ['tools/http2_interop/http2_interop.test']
+
+ def cloud_to_prod_env(self):
+ return {}
+
+ def global_env(self):
+ return {}
+
+ def unimplemented_test_cases(self):
+ return _TEST_CASES
+
+ def __str__(self):
+ return 'http2'
+
class NodeLanguage:
def __init__(self):
@@ -281,6 +306,7 @@ _TEST_CASES = ['large_unary', 'empty_unary', 'ping_pong',
_AUTH_TEST_CASES = ['compute_engine_creds', 'jwt_token_creds',
'oauth2_auth_token', 'per_rpc_creds']
+_HTTP2_TEST_CASES = ["tls"]
def docker_run_cmdline(cmdline, image, docker_args=[], cwd=None, environ=None):
"""Wraps given cmdline array to create 'docker run' cmdline from it."""
@@ -439,6 +465,7 @@ def server_jobspec(language, docker_image):
environ=environ,
docker_args=['-p', str(_DEFAULT_SERVER_PORT),
'--name', container_name])
+
server_job = jobset.JobSpec(
cmdline=docker_cmdline,
environ=environ,
@@ -471,126 +498,6 @@ def build_interop_image_jobspec(language, tag=None):
return build_job
-# TODO(adelez): Use mako template.
-def fill_one_test_result(shortname, resultset, html_str):
- if shortname in resultset:
- # Because interop tests does not have runs_per_test flag, each test is run
- # once. So there should only be one element for each result.
- result = resultset[shortname][0]
- if result.state == 'PASSED':
- html_str = '%s<td bgcolor=\"green\">PASS</td>\n' % html_str
- else:
- tooltip = ''
- if result.returncode > 0 or result.message:
- if result.returncode > 0:
- tooltip = 'returncode: %d ' % result.returncode
- if result.message:
- escaped_msg = result.message.replace('"', '&quot;')
- tooltip = '%smessage: %s' % (tooltip, escaped_msg)
- if result.state == 'FAILED':
- html_str = '%s<td bgcolor=\"red\">' % html_str
- if tooltip:
- html_str = ('%s<a href=\"#\" data-toggle=\"tooltip\" '
- 'data-placement=\"auto\" title=\"%s\">FAIL</a></td>\n' %
- (html_str, tooltip))
- else:
- html_str = '%sFAIL</td>\n' % html_str
- elif result.state == 'TIMEOUT':
- html_str = '%s<td bgcolor=\"yellow\">' % html_str
- if tooltip:
- html_str = ('%s<a href=\"#\" data-toggle=\"tooltip\" '
- 'data-placement=\"auto\" title=\"%s\">TIMEOUT</a></td>\n'
- % (html_str, tooltip))
- else:
- html_str = '%sTIMEOUT</td>\n' % html_str
- else:
- html_str = '%s<td bgcolor=\"magenta\">Not implemented</td>\n' % html_str
-
- return html_str
-
-
-def render_html_report(client_langs, server_langs, resultset,
- num_failures):
- """Generate html report."""
- sorted_test_cases = sorted(_TEST_CASES)
- sorted_auth_test_cases = sorted(_AUTH_TEST_CASES)
- sorted_client_langs = sorted(client_langs)
- sorted_server_langs = sorted(server_langs)
- html_str = ('<!DOCTYPE html>\n'
- '<html lang=\"en\">\n'
- '<head><title>Interop Test Result</title></head>\n'
- '<body>\n')
- if num_failures > 1:
- html_str = (
- '%s<p><h2><font color=\"red\">%d tests failed!</font></h2></p>\n' %
- (html_str, num_failures))
- elif num_failures:
- html_str = (
- '%s<p><h2><font color=\"red\">%d test failed!</font></h2></p>\n' %
- (html_str, num_failures))
- else:
- html_str = (
- '%s<p><h2><font color=\"green\">All tests passed!</font></h2></p>\n' %
- html_str)
- if args.cloud_to_prod_auth or args.cloud_to_prod:
- # Each column header is the client language.
- html_str = ('%s<h2>Cloud to Prod</h2>\n'
- '<table style=\"width:100%%\" border=\"1\">\n'
- '<tr bgcolor=\"#00BFFF\">\n'
- '<th>Client languages &#9658;</th>\n') % html_str
- for client_lang in sorted_client_langs:
- html_str = '%s<th>%s\n' % (html_str, client_lang)
- html_str = '%s</tr>\n' % html_str
- for test_case in sorted_test_cases + sorted_auth_test_cases:
- html_str = '%s<tr><td><b>%s</b></td>\n' % (html_str, test_case)
- for client_lang in sorted_client_langs:
- if not test_case in sorted_auth_test_cases:
- shortname = 'cloud_to_prod:%s:%s' % (client_lang, test_case)
- else:
- shortname = 'cloud_to_prod_auth:%s:%s' % (client_lang, test_case)
- html_str = fill_one_test_result(shortname, resultset, html_str)
- html_str = '%s</tr>\n' % html_str
- html_str = '%s</table>\n' % html_str
- if servers:
- for test_case in sorted_test_cases:
- # Each column header is the client language.
- html_str = ('%s<h2>%s</h2>\n'
- '<table style=\"width:100%%\" border=\"1\">\n'
- '<tr bgcolor=\"#00BFFF\">\n'
- '<th>Client languages &#9658;<br/>'
- 'Server languages &#9660;</th>\n') % (html_str, test_case)
- for client_lang in sorted_client_langs:
- html_str = '%s<th>%s\n' % (html_str, client_lang)
- html_str = '%s</tr>\n' % html_str
- # Each row head is the server language.
- for server_lang in sorted_server_langs:
- html_str = '%s<tr><td><b>%s</b></td>\n' % (html_str, server_lang)
- # Fill up the cells with test result.
- for client_lang in sorted_client_langs:
- shortname = 'cloud_to_cloud:%s:%s_server:%s' % (
- client_lang, server_lang, test_case)
- html_str = fill_one_test_result(shortname, resultset, html_str)
- html_str = '%s</tr>\n' % html_str
- html_str = '%s</table>\n' % html_str
-
- html_str = ('%s\n'
- '<script>\n'
- '$(document).ready(function(){'
- '$(\'[data-toggle=\"tooltip\"]\').tooltip();\n'
- '});\n'
- '</script>\n'
- '</body>\n'
- '</html>') % html_str
-
- # Write to reports/index.html as set up in Jenkins plugin.
- html_report_dir = 'reports'
- if not os.path.exists(html_report_dir):
- os.mkdir(html_report_dir)
- html_file_path = os.path.join(html_report_dir, 'index.html')
- with open(html_file_path, 'w') as f:
- f.write(html_str)
-
-
argp = argparse.ArgumentParser(description='Run interop tests.')
argp.add_argument('-l', '--language',
choices=['all'] + sorted(_LANGUAGES),
@@ -636,6 +543,12 @@ argp.add_argument('--allow_flakes',
action='store_const',
const=True,
help='Allow flaky tests to show as passing (re-runs failed tests up to five times)')
+argp.add_argument('--http2_interop',
+ default=False,
+ action='store_const',
+ const=True,
+ help='Enable HTTP/2 interop tests')
+
args = argp.parse_args()
servers = set(s for s in itertools.chain.from_iterable(_SERVERS
@@ -659,12 +572,16 @@ languages = set(_LANGUAGES[l]
for l in itertools.chain.from_iterable(
_LANGUAGES.iterkeys() if x == 'all' else [x]
for x in args.language))
+
+http2Interop = Http2Client() if args.http2_interop else None
docker_images={}
if args.use_docker:
# languages for which to build docker images
languages_to_build = set(_LANGUAGES[k] for k in set([str(l) for l in languages] +
[s for s in servers]))
+ if args.http2_interop:
+ languages_to_build.add(http2Interop)
build_jobs = []
for l in languages_to_build:
@@ -706,6 +623,13 @@ try:
test_job = cloud_to_prod_jobspec(language, test_case,
docker_image=docker_images.get(str(language)))
jobs.append(test_job)
+
+ if args.http2_interop:
+ for test_case in _HTTP2_TEST_CASES:
+ test_job = cloud_to_prod_jobspec(http2Interop, test_case,
+ docker_image=docker_images.get(str(http2Interop)))
+ jobs.append(test_job)
+
if args.cloud_to_prod_auth:
for language in languages:
@@ -733,6 +657,16 @@ try:
server_port,
docker_image=docker_images.get(str(language)))
jobs.append(test_job)
+
+ if args.http2_interop:
+ for test_case in _HTTP2_TEST_CASES:
+ test_job = cloud_to_cloud_jobspec(http2Interop,
+ test_case,
+ server_name,
+ server_host,
+ server_port,
+ docker_image=docker_images.get(str(http2Interop)))
+ jobs.append(test_job)
if not jobs:
print 'No jobs to run.'
@@ -740,22 +674,19 @@ try:
dockerjob.remove_image(image, skip_nonexistent=True)
sys.exit(1)
- root = ET.Element('testsuites')
- testsuite = ET.SubElement(root, 'testsuite', id='1', package='grpc', name='tests')
-
num_failures, resultset = jobset.run(jobs, newline_on_success=True,
- maxjobs=args.jobs, xml_report=testsuite)
+ maxjobs=args.jobs)
if num_failures:
jobset.message('FAILED', 'Some tests failed', do_newline=True)
else:
jobset.message('SUCCESS', 'All tests passed', do_newline=True)
- tree = ET.ElementTree(root)
- tree.write('report.xml', encoding='UTF-8')
+ report_utils.render_xml_report(resultset, 'report.xml')
- # Generate HTML report.
- render_html_report(set([str(l) for l in languages]), servers,
- resultset, num_failures)
+ report_utils.render_html_report(
+ set([str(l) for l in languages]), servers, _TEST_CASES, _AUTH_TEST_CASES,
+ _HTTP2_TEST_CASES, resultset, num_failures,
+ args.cloud_to_prod_auth or args.cloud_to_prod, args.http2_interop)
finally:
# Check if servers are still running.
diff --git a/tools/run_tests/run_tests.py b/tools/run_tests/run_tests.py
index 4232637c7f..85c73d6fbd 100755
--- a/tools/run_tests/run_tests.py
+++ b/tools/run_tests/run_tests.py
@@ -46,10 +46,10 @@ import sys
import tempfile
import traceback
import time
-import xml.etree.cElementTree as ET
import urllib2
import jobset
+import report_utils
import watch_dirs
ROOT = os.path.abspath(os.path.join(os.path.dirname(sys.argv[0]), '../..'))
@@ -147,9 +147,9 @@ class CLanguage(object):
self.platform = platform_string()
self.test_lang = test_lang
- def test_specs(self, config, travis):
+ def test_specs(self, config, args):
out = []
- binaries = get_c_tests(travis, self.test_lang)
+ binaries = get_c_tests(args.travis, self.test_lang)
for target in binaries:
if config.build_config in target['exclude_configs']:
continue
@@ -160,11 +160,16 @@ class CLanguage(object):
binary = 'bins/%s/%s' % (config.build_config, target['name'])
if os.path.isfile(binary):
out.append(config.job_spec([binary], [binary]))
- else:
+ elif args.regex == '.*' or platform_string() == 'windows':
print '\nWARNING: binary not found, skipping', binary
return sorted(out)
- def make_targets(self):
+ def make_targets(self, test_regex):
+ if platform_string() != 'windows' and test_regex != '.*':
+ # use the regex to minimize the number of things to build
+ return [target['name']
+ for target in get_c_tests(False, self.test_lang)
+ if re.search(test_regex, target['name'])]
if platform_string() == 'windows':
# don't build tools on windows just yet
return ['buildtests_%s' % self.make_target]
@@ -196,7 +201,7 @@ class CLanguage(object):
class NodeLanguage(object):
- def test_specs(self, config, travis):
+ def test_specs(self, config, args):
return [config.job_spec(['tools/run_tests/run_node.sh'], None,
environ=_FORCE_ENVIRON_FOR_WRAPPERS)]
@@ -204,7 +209,7 @@ class NodeLanguage(object):
# Default to 1 week cache expiration
return [['tools/run_tests/pre_build_node.sh']]
- def make_targets(self):
+ def make_targets(self, test_regex):
return []
def build_steps(self):
@@ -225,14 +230,14 @@ class NodeLanguage(object):
class PhpLanguage(object):
- def test_specs(self, config, travis):
+ def test_specs(self, config, args):
return [config.job_spec(['src/php/bin/run_tests.sh'], None,
environ=_FORCE_ENVIRON_FOR_WRAPPERS)]
def pre_build_steps(self):
return []
- def make_targets(self):
+ def make_targets(self, test_regex):
return ['static_c', 'shared_c']
def build_steps(self):
@@ -257,7 +262,7 @@ class PythonLanguage(object):
self._build_python_versions = ['2.7']
self._has_python_versions = []
- def test_specs(self, config, travis):
+ def test_specs(self, config, args):
environment = dict(_FORCE_ENVIRON_FOR_WRAPPERS)
environment['PYVER'] = '2.7'
return [config.job_spec(
@@ -271,7 +276,7 @@ class PythonLanguage(object):
def pre_build_steps(self):
return []
- def make_targets(self):
+ def make_targets(self, test_regex):
return ['static_c', 'grpc_python_plugin', 'shared_c']
def build_steps(self):
@@ -303,14 +308,14 @@ class PythonLanguage(object):
class RubyLanguage(object):
- def test_specs(self, config, travis):
+ def test_specs(self, config, args):
return [config.job_spec(['tools/run_tests/run_ruby.sh'], None,
environ=_FORCE_ENVIRON_FOR_WRAPPERS)]
def pre_build_steps(self):
return [['tools/run_tests/pre_build_ruby.sh']]
- def make_targets(self):
+ def make_targets(self, test_regex):
return ['static_c']
def build_steps(self):
@@ -333,7 +338,7 @@ class CSharpLanguage(object):
def __init__(self):
self.platform = platform_string()
- def test_specs(self, config, travis):
+ def test_specs(self, config, args):
assemblies = ['Grpc.Core.Tests',
'Grpc.Examples.Tests',
'Grpc.HealthCheck.Tests',
@@ -361,7 +366,7 @@ class CSharpLanguage(object):
else:
return [['tools/run_tests/pre_build_csharp.sh']]
- def make_targets(self):
+ def make_targets(self, test_regex):
# For Windows, this target doesn't really build anything,
# everything is build by buildall script later.
if self.platform == 'windows':
@@ -390,14 +395,14 @@ class CSharpLanguage(object):
class ObjCLanguage(object):
- def test_specs(self, config, travis):
+ def test_specs(self, config, args):
return [config.job_spec(['src/objective-c/tests/run_tests.sh'], None,
environ=_FORCE_ENVIRON_FOR_WRAPPERS)]
def pre_build_steps(self):
return []
- def make_targets(self):
+ def make_targets(self, test_regex):
return ['grpc_objective_c_plugin', 'interop_server']
def build_steps(self):
@@ -418,14 +423,14 @@ class ObjCLanguage(object):
class Sanity(object):
- def test_specs(self, config, travis):
+ def test_specs(self, config, args):
return [config.job_spec(['tools/run_tests/run_sanity.sh'], None),
config.job_spec(['tools/run_tests/check_sources_and_headers.py'], None)]
def pre_build_steps(self):
return []
- def make_targets(self):
+ def make_targets(self, test_regex):
return ['run_dep_checks']
def build_steps(self):
@@ -446,13 +451,13 @@ class Sanity(object):
class Build(object):
- def test_specs(self, config, travis):
+ def test_specs(self, config, args):
return []
def pre_build_steps(self):
return []
- def make_targets(self):
+ def make_targets(self, test_regex):
return ['static']
def build_steps(self):
@@ -662,7 +667,7 @@ make_targets = {}
for l in languages:
makefile = l.makefile_name()
make_targets[makefile] = make_targets.get(makefile, set()).union(
- set(l.make_targets()))
+ set(l.make_targets(args.regex)))
build_steps = list(set(
jobset.JobSpec(cmdline, environ={'CONFIG': cfg}, flake_retries=5)
@@ -830,12 +835,12 @@ def _calculate_num_runs_failures(list_of_results):
return num_runs, num_failures
def _build_and_run(
- check_cancelled, newline_on_success, travis, cache, xml_report=None):
+ check_cancelled, newline_on_success, cache, xml_report=None):
"""Do one pass of building & running tests."""
# build latest sequentially
num_failures, _ = jobset.run(
build_steps, maxjobs=1, stop_on_failure=True,
- newline_on_success=newline_on_success, travis=travis)
+ newline_on_success=newline_on_success, travis=args.travis)
if num_failures:
return 1
@@ -844,17 +849,18 @@ def _build_and_run(
for _ in range(0, args.antagonists)]
port_server_port = 32767
_start_port_server(port_server_port)
+ resultset = None
try:
infinite_runs = runs_per_test == 0
one_run = set(
spec
for config in run_configs
for language in languages
- for spec in language.test_specs(config, args.travis)
+ for spec in language.test_specs(config, args)
if re.search(args.regex, spec.shortname))
# When running on travis, we want out test runs to be as similar as possible
# for reproducibility purposes.
- if travis:
+ if args.travis:
massaged_one_run = sorted(one_run, key=lambda x: x.shortname)
else:
# whereas otherwise, we want to shuffle things up to give all tests a
@@ -867,15 +873,11 @@ def _build_and_run(
else itertools.repeat(massaged_one_run, runs_per_test))
all_runs = itertools.chain.from_iterable(runs_sequence)
- root = ET.Element('testsuites') if xml_report else None
- testsuite = ET.SubElement(root, 'testsuite', id='1', package='grpc', name='tests') if xml_report else None
-
number_failures, resultset = jobset.run(
- all_runs, check_cancelled, newline_on_success=newline_on_success,
- travis=travis, infinite_runs=infinite_runs, maxjobs=args.jobs,
+ all_runs, check_cancelled, newline_on_success=newline_on_success,
+ travis=args.travis, infinite_runs=infinite_runs, maxjobs=args.jobs,
stop_on_failure=args.stop_on_failure,
cache=cache if not xml_report else None,
- xml_report=testsuite,
add_env={'GRPC_TEST_PORT_SERVER': 'localhost:%d' % port_server_port})
if resultset:
for k, v in resultset.iteritems():
@@ -893,13 +895,12 @@ def _build_and_run(
finally:
for antagonist in antagonists:
antagonist.kill()
- if xml_report:
- tree = ET.ElementTree(root)
- tree.write(xml_report, encoding='UTF-8')
+ if xml_report and resultset:
+ report_utils.render_xml_report(resultset, xml_report)
number_failures, _ = jobset.run(
post_tests_steps, maxjobs=1, stop_on_failure=True,
- newline_on_success=newline_on_success, travis=travis)
+ newline_on_success=newline_on_success, travis=args.travis)
if number_failures:
return 3
@@ -920,7 +921,6 @@ if forever:
previous_success = success
success = _build_and_run(check_cancelled=have_files_changed,
newline_on_success=False,
- travis=args.travis,
cache=test_cache) == 0
if not previous_success and success:
jobset.message('SUCCESS',
@@ -932,7 +932,6 @@ if forever:
else:
result = _build_and_run(check_cancelled=lambda: False,
newline_on_success=args.newline_on_success,
- travis=args.travis,
cache=test_cache,
xml_report=args.xml_report)
if result == 0:
diff --git a/tools/run_tests/sources_and_headers.json b/tools/run_tests/sources_and_headers.json
index 787b067acc..d3493bbe2c 100644
--- a/tools/run_tests/sources_and_headers.json
+++ b/tools/run_tests/sources_and_headers.json
@@ -1580,6 +1580,23 @@
"grpc",
"grpc++",
"grpc++_test_util",
+ "grpc_test_util",
+ "qps"
+ ],
+ "headers": [],
+ "language": "c++",
+ "name": "secure_sync_unary_ping_pong_test",
+ "src": [
+ "test/cpp/qps/secure_sync_unary_ping_pong_test.cc"
+ ]
+ },
+ {
+ "deps": [
+ "gpr",
+ "gpr_test_util",
+ "grpc",
+ "grpc++",
+ "grpc++_test_util",
"grpc_test_util"
],
"headers": [],
@@ -1875,6 +1892,21 @@
"deps": [
"end2end_certs",
"end2end_fixture_h2_compress",
+ "end2end_test_cancel_with_status",
+ "gpr",
+ "gpr_test_util",
+ "grpc",
+ "grpc_test_util"
+ ],
+ "headers": [],
+ "language": "c",
+ "name": "h2_compress_cancel_with_status_test",
+ "src": []
+ },
+ {
+ "deps": [
+ "end2end_certs",
+ "end2end_fixture_h2_compress",
"end2end_test_census_simple_request",
"gpr",
"gpr_test_util",
@@ -2070,6 +2102,21 @@
"deps": [
"end2end_certs",
"end2end_fixture_h2_compress",
+ "end2end_test_negative_deadline",
+ "gpr",
+ "gpr_test_util",
+ "grpc",
+ "grpc_test_util"
+ ],
+ "headers": [],
+ "language": "c",
+ "name": "h2_compress_negative_deadline_test",
+ "src": []
+ },
+ {
+ "deps": [
+ "end2end_certs",
+ "end2end_fixture_h2_compress",
"end2end_test_no_op",
"gpr",
"gpr_test_util",
@@ -2370,6 +2417,21 @@
"deps": [
"end2end_certs",
"end2end_fixture_h2_fakesec",
+ "end2end_test_cancel_with_status",
+ "gpr",
+ "gpr_test_util",
+ "grpc",
+ "grpc_test_util"
+ ],
+ "headers": [],
+ "language": "c",
+ "name": "h2_fakesec_cancel_with_status_test",
+ "src": []
+ },
+ {
+ "deps": [
+ "end2end_certs",
+ "end2end_fixture_h2_fakesec",
"end2end_test_census_simple_request",
"gpr",
"gpr_test_util",
@@ -2565,6 +2627,21 @@
"deps": [
"end2end_certs",
"end2end_fixture_h2_fakesec",
+ "end2end_test_negative_deadline",
+ "gpr",
+ "gpr_test_util",
+ "grpc",
+ "grpc_test_util"
+ ],
+ "headers": [],
+ "language": "c",
+ "name": "h2_fakesec_negative_deadline_test",
+ "src": []
+ },
+ {
+ "deps": [
+ "end2end_certs",
+ "end2end_fixture_h2_fakesec",
"end2end_test_no_op",
"gpr",
"gpr_test_util",
@@ -2865,6 +2942,21 @@
"deps": [
"end2end_certs",
"end2end_fixture_h2_full",
+ "end2end_test_cancel_with_status",
+ "gpr",
+ "gpr_test_util",
+ "grpc",
+ "grpc_test_util"
+ ],
+ "headers": [],
+ "language": "c",
+ "name": "h2_full_cancel_with_status_test",
+ "src": []
+ },
+ {
+ "deps": [
+ "end2end_certs",
+ "end2end_fixture_h2_full",
"end2end_test_census_simple_request",
"gpr",
"gpr_test_util",
@@ -3060,6 +3152,21 @@
"deps": [
"end2end_certs",
"end2end_fixture_h2_full",
+ "end2end_test_negative_deadline",
+ "gpr",
+ "gpr_test_util",
+ "grpc",
+ "grpc_test_util"
+ ],
+ "headers": [],
+ "language": "c",
+ "name": "h2_full_negative_deadline_test",
+ "src": []
+ },
+ {
+ "deps": [
+ "end2end_certs",
+ "end2end_fixture_h2_full",
"end2end_test_no_op",
"gpr",
"gpr_test_util",
@@ -3360,6 +3467,21 @@
"deps": [
"end2end_certs",
"end2end_fixture_h2_full+poll",
+ "end2end_test_cancel_with_status",
+ "gpr",
+ "gpr_test_util",
+ "grpc",
+ "grpc_test_util"
+ ],
+ "headers": [],
+ "language": "c",
+ "name": "h2_full+poll_cancel_with_status_test",
+ "src": []
+ },
+ {
+ "deps": [
+ "end2end_certs",
+ "end2end_fixture_h2_full+poll",
"end2end_test_census_simple_request",
"gpr",
"gpr_test_util",
@@ -3555,6 +3677,21 @@
"deps": [
"end2end_certs",
"end2end_fixture_h2_full+poll",
+ "end2end_test_negative_deadline",
+ "gpr",
+ "gpr_test_util",
+ "grpc",
+ "grpc_test_util"
+ ],
+ "headers": [],
+ "language": "c",
+ "name": "h2_full+poll_negative_deadline_test",
+ "src": []
+ },
+ {
+ "deps": [
+ "end2end_certs",
+ "end2end_fixture_h2_full+poll",
"end2end_test_no_op",
"gpr",
"gpr_test_util",
@@ -3855,6 +3992,21 @@
"deps": [
"end2end_certs",
"end2end_fixture_h2_oauth2",
+ "end2end_test_cancel_with_status",
+ "gpr",
+ "gpr_test_util",
+ "grpc",
+ "grpc_test_util"
+ ],
+ "headers": [],
+ "language": "c",
+ "name": "h2_oauth2_cancel_with_status_test",
+ "src": []
+ },
+ {
+ "deps": [
+ "end2end_certs",
+ "end2end_fixture_h2_oauth2",
"end2end_test_census_simple_request",
"gpr",
"gpr_test_util",
@@ -4050,6 +4202,21 @@
"deps": [
"end2end_certs",
"end2end_fixture_h2_oauth2",
+ "end2end_test_negative_deadline",
+ "gpr",
+ "gpr_test_util",
+ "grpc",
+ "grpc_test_util"
+ ],
+ "headers": [],
+ "language": "c",
+ "name": "h2_oauth2_negative_deadline_test",
+ "src": []
+ },
+ {
+ "deps": [
+ "end2end_certs",
+ "end2end_fixture_h2_oauth2",
"end2end_test_no_op",
"gpr",
"gpr_test_util",
@@ -4350,6 +4517,21 @@
"deps": [
"end2end_certs",
"end2end_fixture_h2_proxy",
+ "end2end_test_cancel_with_status",
+ "gpr",
+ "gpr_test_util",
+ "grpc",
+ "grpc_test_util"
+ ],
+ "headers": [],
+ "language": "c",
+ "name": "h2_proxy_cancel_with_status_test",
+ "src": []
+ },
+ {
+ "deps": [
+ "end2end_certs",
+ "end2end_fixture_h2_proxy",
"end2end_test_census_simple_request",
"gpr",
"gpr_test_util",
@@ -4500,6 +4682,21 @@
"deps": [
"end2end_certs",
"end2end_fixture_h2_proxy",
+ "end2end_test_negative_deadline",
+ "gpr",
+ "gpr_test_util",
+ "grpc",
+ "grpc_test_util"
+ ],
+ "headers": [],
+ "language": "c",
+ "name": "h2_proxy_negative_deadline_test",
+ "src": []
+ },
+ {
+ "deps": [
+ "end2end_certs",
+ "end2end_fixture_h2_proxy",
"end2end_test_no_op",
"gpr",
"gpr_test_util",
@@ -4785,6 +4982,21 @@
"deps": [
"end2end_certs",
"end2end_fixture_h2_sockpair",
+ "end2end_test_cancel_with_status",
+ "gpr",
+ "gpr_test_util",
+ "grpc",
+ "grpc_test_util"
+ ],
+ "headers": [],
+ "language": "c",
+ "name": "h2_sockpair_cancel_with_status_test",
+ "src": []
+ },
+ {
+ "deps": [
+ "end2end_certs",
+ "end2end_fixture_h2_sockpair",
"end2end_test_census_simple_request",
"gpr",
"gpr_test_util",
@@ -4935,6 +5147,21 @@
"deps": [
"end2end_certs",
"end2end_fixture_h2_sockpair",
+ "end2end_test_negative_deadline",
+ "gpr",
+ "gpr_test_util",
+ "grpc",
+ "grpc_test_util"
+ ],
+ "headers": [],
+ "language": "c",
+ "name": "h2_sockpair_negative_deadline_test",
+ "src": []
+ },
+ {
+ "deps": [
+ "end2end_certs",
+ "end2end_fixture_h2_sockpair",
"end2end_test_no_op",
"gpr",
"gpr_test_util",
@@ -5220,6 +5447,21 @@
"deps": [
"end2end_certs",
"end2end_fixture_h2_sockpair+trace",
+ "end2end_test_cancel_with_status",
+ "gpr",
+ "gpr_test_util",
+ "grpc",
+ "grpc_test_util"
+ ],
+ "headers": [],
+ "language": "c",
+ "name": "h2_sockpair+trace_cancel_with_status_test",
+ "src": []
+ },
+ {
+ "deps": [
+ "end2end_certs",
+ "end2end_fixture_h2_sockpair+trace",
"end2end_test_census_simple_request",
"gpr",
"gpr_test_util",
@@ -5370,6 +5612,21 @@
"deps": [
"end2end_certs",
"end2end_fixture_h2_sockpair+trace",
+ "end2end_test_negative_deadline",
+ "gpr",
+ "gpr_test_util",
+ "grpc",
+ "grpc_test_util"
+ ],
+ "headers": [],
+ "language": "c",
+ "name": "h2_sockpair+trace_negative_deadline_test",
+ "src": []
+ },
+ {
+ "deps": [
+ "end2end_certs",
+ "end2end_fixture_h2_sockpair+trace",
"end2end_test_no_op",
"gpr",
"gpr_test_util",
@@ -5655,6 +5912,21 @@
"deps": [
"end2end_certs",
"end2end_fixture_h2_sockpair_1byte",
+ "end2end_test_cancel_with_status",
+ "gpr",
+ "gpr_test_util",
+ "grpc",
+ "grpc_test_util"
+ ],
+ "headers": [],
+ "language": "c",
+ "name": "h2_sockpair_1byte_cancel_with_status_test",
+ "src": []
+ },
+ {
+ "deps": [
+ "end2end_certs",
+ "end2end_fixture_h2_sockpair_1byte",
"end2end_test_census_simple_request",
"gpr",
"gpr_test_util",
@@ -5805,6 +6077,21 @@
"deps": [
"end2end_certs",
"end2end_fixture_h2_sockpair_1byte",
+ "end2end_test_negative_deadline",
+ "gpr",
+ "gpr_test_util",
+ "grpc",
+ "grpc_test_util"
+ ],
+ "headers": [],
+ "language": "c",
+ "name": "h2_sockpair_1byte_negative_deadline_test",
+ "src": []
+ },
+ {
+ "deps": [
+ "end2end_certs",
+ "end2end_fixture_h2_sockpair_1byte",
"end2end_test_no_op",
"gpr",
"gpr_test_util",
@@ -6090,6 +6377,21 @@
"deps": [
"end2end_certs",
"end2end_fixture_h2_ssl",
+ "end2end_test_cancel_with_status",
+ "gpr",
+ "gpr_test_util",
+ "grpc",
+ "grpc_test_util"
+ ],
+ "headers": [],
+ "language": "c",
+ "name": "h2_ssl_cancel_with_status_test",
+ "src": []
+ },
+ {
+ "deps": [
+ "end2end_certs",
+ "end2end_fixture_h2_ssl",
"end2end_test_census_simple_request",
"gpr",
"gpr_test_util",
@@ -6285,6 +6587,21 @@
"deps": [
"end2end_certs",
"end2end_fixture_h2_ssl",
+ "end2end_test_negative_deadline",
+ "gpr",
+ "gpr_test_util",
+ "grpc",
+ "grpc_test_util"
+ ],
+ "headers": [],
+ "language": "c",
+ "name": "h2_ssl_negative_deadline_test",
+ "src": []
+ },
+ {
+ "deps": [
+ "end2end_certs",
+ "end2end_fixture_h2_ssl",
"end2end_test_no_op",
"gpr",
"gpr_test_util",
@@ -6585,6 +6902,21 @@
"deps": [
"end2end_certs",
"end2end_fixture_h2_ssl+poll",
+ "end2end_test_cancel_with_status",
+ "gpr",
+ "gpr_test_util",
+ "grpc",
+ "grpc_test_util"
+ ],
+ "headers": [],
+ "language": "c",
+ "name": "h2_ssl+poll_cancel_with_status_test",
+ "src": []
+ },
+ {
+ "deps": [
+ "end2end_certs",
+ "end2end_fixture_h2_ssl+poll",
"end2end_test_census_simple_request",
"gpr",
"gpr_test_util",
@@ -6780,6 +7112,21 @@
"deps": [
"end2end_certs",
"end2end_fixture_h2_ssl+poll",
+ "end2end_test_negative_deadline",
+ "gpr",
+ "gpr_test_util",
+ "grpc",
+ "grpc_test_util"
+ ],
+ "headers": [],
+ "language": "c",
+ "name": "h2_ssl+poll_negative_deadline_test",
+ "src": []
+ },
+ {
+ "deps": [
+ "end2end_certs",
+ "end2end_fixture_h2_ssl+poll",
"end2end_test_no_op",
"gpr",
"gpr_test_util",
@@ -7080,6 +7427,21 @@
"deps": [
"end2end_certs",
"end2end_fixture_h2_ssl_proxy",
+ "end2end_test_cancel_with_status",
+ "gpr",
+ "gpr_test_util",
+ "grpc",
+ "grpc_test_util"
+ ],
+ "headers": [],
+ "language": "c",
+ "name": "h2_ssl_proxy_cancel_with_status_test",
+ "src": []
+ },
+ {
+ "deps": [
+ "end2end_certs",
+ "end2end_fixture_h2_ssl_proxy",
"end2end_test_census_simple_request",
"gpr",
"gpr_test_util",
@@ -7230,6 +7592,21 @@
"deps": [
"end2end_certs",
"end2end_fixture_h2_ssl_proxy",
+ "end2end_test_negative_deadline",
+ "gpr",
+ "gpr_test_util",
+ "grpc",
+ "grpc_test_util"
+ ],
+ "headers": [],
+ "language": "c",
+ "name": "h2_ssl_proxy_negative_deadline_test",
+ "src": []
+ },
+ {
+ "deps": [
+ "end2end_certs",
+ "end2end_fixture_h2_ssl_proxy",
"end2end_test_no_op",
"gpr",
"gpr_test_util",
@@ -7515,6 +7892,21 @@
"deps": [
"end2end_certs",
"end2end_fixture_h2_uchannel",
+ "end2end_test_cancel_with_status",
+ "gpr",
+ "gpr_test_util",
+ "grpc",
+ "grpc_test_util"
+ ],
+ "headers": [],
+ "language": "c",
+ "name": "h2_uchannel_cancel_with_status_test",
+ "src": []
+ },
+ {
+ "deps": [
+ "end2end_certs",
+ "end2end_fixture_h2_uchannel",
"end2end_test_census_simple_request",
"gpr",
"gpr_test_util",
@@ -7710,6 +8102,21 @@
"deps": [
"end2end_certs",
"end2end_fixture_h2_uchannel",
+ "end2end_test_negative_deadline",
+ "gpr",
+ "gpr_test_util",
+ "grpc",
+ "grpc_test_util"
+ ],
+ "headers": [],
+ "language": "c",
+ "name": "h2_uchannel_negative_deadline_test",
+ "src": []
+ },
+ {
+ "deps": [
+ "end2end_certs",
+ "end2end_fixture_h2_uchannel",
"end2end_test_no_op",
"gpr",
"gpr_test_util",
@@ -8010,6 +8417,21 @@
"deps": [
"end2end_certs",
"end2end_fixture_h2_uds",
+ "end2end_test_cancel_with_status",
+ "gpr",
+ "gpr_test_util",
+ "grpc",
+ "grpc_test_util"
+ ],
+ "headers": [],
+ "language": "c",
+ "name": "h2_uds_cancel_with_status_test",
+ "src": []
+ },
+ {
+ "deps": [
+ "end2end_certs",
+ "end2end_fixture_h2_uds",
"end2end_test_census_simple_request",
"gpr",
"gpr_test_util",
@@ -8190,6 +8612,21 @@
"deps": [
"end2end_certs",
"end2end_fixture_h2_uds",
+ "end2end_test_negative_deadline",
+ "gpr",
+ "gpr_test_util",
+ "grpc",
+ "grpc_test_util"
+ ],
+ "headers": [],
+ "language": "c",
+ "name": "h2_uds_negative_deadline_test",
+ "src": []
+ },
+ {
+ "deps": [
+ "end2end_certs",
+ "end2end_fixture_h2_uds",
"end2end_test_no_op",
"gpr",
"gpr_test_util",
@@ -8490,6 +8927,21 @@
"deps": [
"end2end_certs",
"end2end_fixture_h2_uds+poll",
+ "end2end_test_cancel_with_status",
+ "gpr",
+ "gpr_test_util",
+ "grpc",
+ "grpc_test_util"
+ ],
+ "headers": [],
+ "language": "c",
+ "name": "h2_uds+poll_cancel_with_status_test",
+ "src": []
+ },
+ {
+ "deps": [
+ "end2end_certs",
+ "end2end_fixture_h2_uds+poll",
"end2end_test_census_simple_request",
"gpr",
"gpr_test_util",
@@ -8670,6 +9122,21 @@
"deps": [
"end2end_certs",
"end2end_fixture_h2_uds+poll",
+ "end2end_test_negative_deadline",
+ "gpr",
+ "gpr_test_util",
+ "grpc",
+ "grpc_test_util"
+ ],
+ "headers": [],
+ "language": "c",
+ "name": "h2_uds+poll_negative_deadline_test",
+ "src": []
+ },
+ {
+ "deps": [
+ "end2end_certs",
+ "end2end_fixture_h2_uds+poll",
"end2end_test_no_op",
"gpr",
"gpr_test_util",
@@ -8947,6 +9414,20 @@
{
"deps": [
"end2end_fixture_h2_compress",
+ "end2end_test_cancel_with_status",
+ "gpr",
+ "gpr_test_util",
+ "grpc_test_util_unsecure",
+ "grpc_unsecure"
+ ],
+ "headers": [],
+ "language": "c",
+ "name": "h2_compress_cancel_with_status_nosec_test",
+ "src": []
+ },
+ {
+ "deps": [
+ "end2end_fixture_h2_compress",
"end2end_test_census_simple_request",
"gpr",
"gpr_test_util",
@@ -9129,6 +9610,20 @@
{
"deps": [
"end2end_fixture_h2_compress",
+ "end2end_test_negative_deadline",
+ "gpr",
+ "gpr_test_util",
+ "grpc_test_util_unsecure",
+ "grpc_unsecure"
+ ],
+ "headers": [],
+ "language": "c",
+ "name": "h2_compress_negative_deadline_nosec_test",
+ "src": []
+ },
+ {
+ "deps": [
+ "end2end_fixture_h2_compress",
"end2end_test_no_op",
"gpr",
"gpr_test_util",
@@ -9395,6 +9890,20 @@
{
"deps": [
"end2end_fixture_h2_full",
+ "end2end_test_cancel_with_status",
+ "gpr",
+ "gpr_test_util",
+ "grpc_test_util_unsecure",
+ "grpc_unsecure"
+ ],
+ "headers": [],
+ "language": "c",
+ "name": "h2_full_cancel_with_status_nosec_test",
+ "src": []
+ },
+ {
+ "deps": [
+ "end2end_fixture_h2_full",
"end2end_test_census_simple_request",
"gpr",
"gpr_test_util",
@@ -9577,6 +10086,20 @@
{
"deps": [
"end2end_fixture_h2_full",
+ "end2end_test_negative_deadline",
+ "gpr",
+ "gpr_test_util",
+ "grpc_test_util_unsecure",
+ "grpc_unsecure"
+ ],
+ "headers": [],
+ "language": "c",
+ "name": "h2_full_negative_deadline_nosec_test",
+ "src": []
+ },
+ {
+ "deps": [
+ "end2end_fixture_h2_full",
"end2end_test_no_op",
"gpr",
"gpr_test_util",
@@ -9843,6 +10366,20 @@
{
"deps": [
"end2end_fixture_h2_full+poll",
+ "end2end_test_cancel_with_status",
+ "gpr",
+ "gpr_test_util",
+ "grpc_test_util_unsecure",
+ "grpc_unsecure"
+ ],
+ "headers": [],
+ "language": "c",
+ "name": "h2_full+poll_cancel_with_status_nosec_test",
+ "src": []
+ },
+ {
+ "deps": [
+ "end2end_fixture_h2_full+poll",
"end2end_test_census_simple_request",
"gpr",
"gpr_test_util",
@@ -10025,6 +10562,20 @@
{
"deps": [
"end2end_fixture_h2_full+poll",
+ "end2end_test_negative_deadline",
+ "gpr",
+ "gpr_test_util",
+ "grpc_test_util_unsecure",
+ "grpc_unsecure"
+ ],
+ "headers": [],
+ "language": "c",
+ "name": "h2_full+poll_negative_deadline_nosec_test",
+ "src": []
+ },
+ {
+ "deps": [
+ "end2end_fixture_h2_full+poll",
"end2end_test_no_op",
"gpr",
"gpr_test_util",
@@ -10291,6 +10842,20 @@
{
"deps": [
"end2end_fixture_h2_proxy",
+ "end2end_test_cancel_with_status",
+ "gpr",
+ "gpr_test_util",
+ "grpc_test_util_unsecure",
+ "grpc_unsecure"
+ ],
+ "headers": [],
+ "language": "c",
+ "name": "h2_proxy_cancel_with_status_nosec_test",
+ "src": []
+ },
+ {
+ "deps": [
+ "end2end_fixture_h2_proxy",
"end2end_test_census_simple_request",
"gpr",
"gpr_test_util",
@@ -10431,6 +10996,20 @@
{
"deps": [
"end2end_fixture_h2_proxy",
+ "end2end_test_negative_deadline",
+ "gpr",
+ "gpr_test_util",
+ "grpc_test_util_unsecure",
+ "grpc_unsecure"
+ ],
+ "headers": [],
+ "language": "c",
+ "name": "h2_proxy_negative_deadline_nosec_test",
+ "src": []
+ },
+ {
+ "deps": [
+ "end2end_fixture_h2_proxy",
"end2end_test_no_op",
"gpr",
"gpr_test_util",
@@ -10683,6 +11262,20 @@
{
"deps": [
"end2end_fixture_h2_sockpair",
+ "end2end_test_cancel_with_status",
+ "gpr",
+ "gpr_test_util",
+ "grpc_test_util_unsecure",
+ "grpc_unsecure"
+ ],
+ "headers": [],
+ "language": "c",
+ "name": "h2_sockpair_cancel_with_status_nosec_test",
+ "src": []
+ },
+ {
+ "deps": [
+ "end2end_fixture_h2_sockpair",
"end2end_test_census_simple_request",
"gpr",
"gpr_test_util",
@@ -10823,6 +11416,20 @@
{
"deps": [
"end2end_fixture_h2_sockpair",
+ "end2end_test_negative_deadline",
+ "gpr",
+ "gpr_test_util",
+ "grpc_test_util_unsecure",
+ "grpc_unsecure"
+ ],
+ "headers": [],
+ "language": "c",
+ "name": "h2_sockpair_negative_deadline_nosec_test",
+ "src": []
+ },
+ {
+ "deps": [
+ "end2end_fixture_h2_sockpair",
"end2end_test_no_op",
"gpr",
"gpr_test_util",
@@ -11075,6 +11682,20 @@
{
"deps": [
"end2end_fixture_h2_sockpair+trace",
+ "end2end_test_cancel_with_status",
+ "gpr",
+ "gpr_test_util",
+ "grpc_test_util_unsecure",
+ "grpc_unsecure"
+ ],
+ "headers": [],
+ "language": "c",
+ "name": "h2_sockpair+trace_cancel_with_status_nosec_test",
+ "src": []
+ },
+ {
+ "deps": [
+ "end2end_fixture_h2_sockpair+trace",
"end2end_test_census_simple_request",
"gpr",
"gpr_test_util",
@@ -11215,6 +11836,20 @@
{
"deps": [
"end2end_fixture_h2_sockpair+trace",
+ "end2end_test_negative_deadline",
+ "gpr",
+ "gpr_test_util",
+ "grpc_test_util_unsecure",
+ "grpc_unsecure"
+ ],
+ "headers": [],
+ "language": "c",
+ "name": "h2_sockpair+trace_negative_deadline_nosec_test",
+ "src": []
+ },
+ {
+ "deps": [
+ "end2end_fixture_h2_sockpair+trace",
"end2end_test_no_op",
"gpr",
"gpr_test_util",
@@ -11467,6 +12102,20 @@
{
"deps": [
"end2end_fixture_h2_sockpair_1byte",
+ "end2end_test_cancel_with_status",
+ "gpr",
+ "gpr_test_util",
+ "grpc_test_util_unsecure",
+ "grpc_unsecure"
+ ],
+ "headers": [],
+ "language": "c",
+ "name": "h2_sockpair_1byte_cancel_with_status_nosec_test",
+ "src": []
+ },
+ {
+ "deps": [
+ "end2end_fixture_h2_sockpair_1byte",
"end2end_test_census_simple_request",
"gpr",
"gpr_test_util",
@@ -11607,6 +12256,20 @@
{
"deps": [
"end2end_fixture_h2_sockpair_1byte",
+ "end2end_test_negative_deadline",
+ "gpr",
+ "gpr_test_util",
+ "grpc_test_util_unsecure",
+ "grpc_unsecure"
+ ],
+ "headers": [],
+ "language": "c",
+ "name": "h2_sockpair_1byte_negative_deadline_nosec_test",
+ "src": []
+ },
+ {
+ "deps": [
+ "end2end_fixture_h2_sockpair_1byte",
"end2end_test_no_op",
"gpr",
"gpr_test_util",
@@ -11859,6 +12522,20 @@
{
"deps": [
"end2end_fixture_h2_uchannel",
+ "end2end_test_cancel_with_status",
+ "gpr",
+ "gpr_test_util",
+ "grpc_test_util_unsecure",
+ "grpc_unsecure"
+ ],
+ "headers": [],
+ "language": "c",
+ "name": "h2_uchannel_cancel_with_status_nosec_test",
+ "src": []
+ },
+ {
+ "deps": [
+ "end2end_fixture_h2_uchannel",
"end2end_test_census_simple_request",
"gpr",
"gpr_test_util",
@@ -12041,6 +12718,20 @@
{
"deps": [
"end2end_fixture_h2_uchannel",
+ "end2end_test_negative_deadline",
+ "gpr",
+ "gpr_test_util",
+ "grpc_test_util_unsecure",
+ "grpc_unsecure"
+ ],
+ "headers": [],
+ "language": "c",
+ "name": "h2_uchannel_negative_deadline_nosec_test",
+ "src": []
+ },
+ {
+ "deps": [
+ "end2end_fixture_h2_uchannel",
"end2end_test_no_op",
"gpr",
"gpr_test_util",
@@ -12307,6 +12998,20 @@
{
"deps": [
"end2end_fixture_h2_uds",
+ "end2end_test_cancel_with_status",
+ "gpr",
+ "gpr_test_util",
+ "grpc_test_util_unsecure",
+ "grpc_unsecure"
+ ],
+ "headers": [],
+ "language": "c",
+ "name": "h2_uds_cancel_with_status_nosec_test",
+ "src": []
+ },
+ {
+ "deps": [
+ "end2end_fixture_h2_uds",
"end2end_test_census_simple_request",
"gpr",
"gpr_test_util",
@@ -12475,6 +13180,20 @@
{
"deps": [
"end2end_fixture_h2_uds",
+ "end2end_test_negative_deadline",
+ "gpr",
+ "gpr_test_util",
+ "grpc_test_util_unsecure",
+ "grpc_unsecure"
+ ],
+ "headers": [],
+ "language": "c",
+ "name": "h2_uds_negative_deadline_nosec_test",
+ "src": []
+ },
+ {
+ "deps": [
+ "end2end_fixture_h2_uds",
"end2end_test_no_op",
"gpr",
"gpr_test_util",
@@ -12741,6 +13460,20 @@
{
"deps": [
"end2end_fixture_h2_uds+poll",
+ "end2end_test_cancel_with_status",
+ "gpr",
+ "gpr_test_util",
+ "grpc_test_util_unsecure",
+ "grpc_unsecure"
+ ],
+ "headers": [],
+ "language": "c",
+ "name": "h2_uds+poll_cancel_with_status_nosec_test",
+ "src": []
+ },
+ {
+ "deps": [
+ "end2end_fixture_h2_uds+poll",
"end2end_test_census_simple_request",
"gpr",
"gpr_test_util",
@@ -12909,6 +13642,20 @@
{
"deps": [
"end2end_fixture_h2_uds+poll",
+ "end2end_test_negative_deadline",
+ "gpr",
+ "gpr_test_util",
+ "grpc_test_util_unsecure",
+ "grpc_unsecure"
+ ],
+ "headers": [],
+ "language": "c",
+ "name": "h2_uds+poll_negative_deadline_nosec_test",
+ "src": []
+ },
+ {
+ "deps": [
+ "end2end_fixture_h2_uds+poll",
"end2end_test_no_op",
"gpr",
"gpr_test_util",
@@ -14641,8 +15388,16 @@
"test/cpp/qps/stats.h",
"test/cpp/qps/timer.h",
"test/cpp/util/benchmark_config.h",
- "test/proto/qpstest.grpc.pb.h",
- "test/proto/qpstest.pb.h"
+ "test/proto/benchmarks/control.grpc.pb.h",
+ "test/proto/benchmarks/control.pb.h",
+ "test/proto/benchmarks/payloads.grpc.pb.h",
+ "test/proto/benchmarks/payloads.pb.h",
+ "test/proto/benchmarks/services.grpc.pb.h",
+ "test/proto/benchmarks/services.pb.h",
+ "test/proto/benchmarks/stats.grpc.pb.h",
+ "test/proto/benchmarks/stats.pb.h",
+ "test/proto/messages.grpc.pb.h",
+ "test/proto/messages.pb.h"
],
"language": "c++",
"name": "qps",
@@ -15107,6 +15862,25 @@
"test/core/end2end/tests/cancel_test_helpers.h"
],
"language": "c",
+ "name": "end2end_test_cancel_with_status",
+ "src": [
+ "test/core/end2end/end2end_tests.h",
+ "test/core/end2end/tests/cancel_test_helpers.h",
+ "test/core/end2end/tests/cancel_with_status.c"
+ ]
+ },
+ {
+ "deps": [
+ "gpr",
+ "gpr_test_util",
+ "grpc_test_util_unsecure",
+ "grpc_unsecure"
+ ],
+ "headers": [
+ "test/core/end2end/end2end_tests.h",
+ "test/core/end2end/tests/cancel_test_helpers.h"
+ ],
+ "language": "c",
"name": "end2end_test_census_simple_request",
"src": [
"test/core/end2end/end2end_tests.h",
@@ -15354,6 +16128,25 @@
"test/core/end2end/tests/cancel_test_helpers.h"
],
"language": "c",
+ "name": "end2end_test_negative_deadline",
+ "src": [
+ "test/core/end2end/end2end_tests.h",
+ "test/core/end2end/tests/cancel_test_helpers.h",
+ "test/core/end2end/tests/negative_deadline.c"
+ ]
+ },
+ {
+ "deps": [
+ "gpr",
+ "gpr_test_util",
+ "grpc_test_util_unsecure",
+ "grpc_unsecure"
+ ],
+ "headers": [
+ "test/core/end2end/end2end_tests.h",
+ "test/core/end2end/tests/cancel_test_helpers.h"
+ ],
+ "language": "c",
"name": "end2end_test_no_op",
"src": [
"test/core/end2end/end2end_tests.h",
diff --git a/tools/run_tests/tests.json b/tools/run_tests/tests.json
index 8b7cbb91d7..00ef157e98 100644
--- a/tools/run_tests/tests.json
+++ b/tools/run_tests/tests.json
@@ -1524,6 +1524,22 @@
"exclude_configs": [],
"flaky": false,
"language": "c++",
+ "name": "secure_sync_unary_ping_pong_test",
+ "platforms": [
+ "linux",
+ "mac",
+ "posix"
+ ]
+ },
+ {
+ "ci_platforms": [
+ "linux",
+ "mac",
+ "posix"
+ ],
+ "exclude_configs": [],
+ "flaky": false,
+ "language": "c++",
"name": "server_crash_test",
"platforms": [
"linux",
@@ -1787,6 +1803,24 @@
"exclude_configs": [],
"flaky": false,
"language": "c",
+ "name": "h2_compress_cancel_with_status_test",
+ "platforms": [
+ "linux",
+ "mac",
+ "posix",
+ "windows"
+ ]
+ },
+ {
+ "ci_platforms": [
+ "linux",
+ "mac",
+ "posix",
+ "windows"
+ ],
+ "exclude_configs": [],
+ "flaky": false,
+ "language": "c",
"name": "h2_compress_census_simple_request_test",
"platforms": [
"linux",
@@ -2021,6 +2055,24 @@
"exclude_configs": [],
"flaky": false,
"language": "c",
+ "name": "h2_compress_negative_deadline_test",
+ "platforms": [
+ "linux",
+ "mac",
+ "posix",
+ "windows"
+ ]
+ },
+ {
+ "ci_platforms": [
+ "linux",
+ "mac",
+ "posix",
+ "windows"
+ ],
+ "exclude_configs": [],
+ "flaky": false,
+ "language": "c",
"name": "h2_compress_no_op_test",
"platforms": [
"linux",
@@ -2372,6 +2424,23 @@
"exclude_configs": [],
"flaky": false,
"language": "c",
+ "name": "h2_fakesec_cancel_with_status_test",
+ "platforms": [
+ "linux",
+ "mac",
+ "posix",
+ "windows"
+ ]
+ },
+ {
+ "ci_platforms": [
+ "linux",
+ "posix",
+ "windows"
+ ],
+ "exclude_configs": [],
+ "flaky": false,
+ "language": "c",
"name": "h2_fakesec_census_simple_request_test",
"platforms": [
"linux",
@@ -2593,6 +2662,23 @@
"exclude_configs": [],
"flaky": false,
"language": "c",
+ "name": "h2_fakesec_negative_deadline_test",
+ "platforms": [
+ "linux",
+ "mac",
+ "posix",
+ "windows"
+ ]
+ },
+ {
+ "ci_platforms": [
+ "linux",
+ "posix",
+ "windows"
+ ],
+ "exclude_configs": [],
+ "flaky": false,
+ "language": "c",
"name": "h2_fakesec_no_op_test",
"platforms": [
"linux",
@@ -2942,6 +3028,24 @@
"exclude_configs": [],
"flaky": false,
"language": "c",
+ "name": "h2_full_cancel_with_status_test",
+ "platforms": [
+ "linux",
+ "mac",
+ "posix",
+ "windows"
+ ]
+ },
+ {
+ "ci_platforms": [
+ "linux",
+ "mac",
+ "posix",
+ "windows"
+ ],
+ "exclude_configs": [],
+ "flaky": false,
+ "language": "c",
"name": "h2_full_census_simple_request_test",
"platforms": [
"linux",
@@ -3176,6 +3280,24 @@
"exclude_configs": [],
"flaky": false,
"language": "c",
+ "name": "h2_full_negative_deadline_test",
+ "platforms": [
+ "linux",
+ "mac",
+ "posix",
+ "windows"
+ ]
+ },
+ {
+ "ci_platforms": [
+ "linux",
+ "mac",
+ "posix",
+ "windows"
+ ],
+ "exclude_configs": [],
+ "flaky": false,
+ "language": "c",
"name": "h2_full_no_op_test",
"platforms": [
"linux",
@@ -3485,6 +3607,18 @@
"exclude_configs": [],
"flaky": false,
"language": "c",
+ "name": "h2_full+poll_cancel_with_status_test",
+ "platforms": [
+ "linux"
+ ]
+ },
+ {
+ "ci_platforms": [
+ "linux"
+ ],
+ "exclude_configs": [],
+ "flaky": false,
+ "language": "c",
"name": "h2_full+poll_census_simple_request_test",
"platforms": [
"linux"
@@ -3641,6 +3775,18 @@
"exclude_configs": [],
"flaky": false,
"language": "c",
+ "name": "h2_full+poll_negative_deadline_test",
+ "platforms": [
+ "linux"
+ ]
+ },
+ {
+ "ci_platforms": [
+ "linux"
+ ],
+ "exclude_configs": [],
+ "flaky": false,
+ "language": "c",
"name": "h2_full+poll_no_op_test",
"platforms": [
"linux"
@@ -3923,6 +4069,23 @@
"exclude_configs": [],
"flaky": false,
"language": "c",
+ "name": "h2_oauth2_cancel_with_status_test",
+ "platforms": [
+ "linux",
+ "mac",
+ "posix",
+ "windows"
+ ]
+ },
+ {
+ "ci_platforms": [
+ "linux",
+ "posix",
+ "windows"
+ ],
+ "exclude_configs": [],
+ "flaky": false,
+ "language": "c",
"name": "h2_oauth2_census_simple_request_test",
"platforms": [
"linux",
@@ -4144,6 +4307,23 @@
"exclude_configs": [],
"flaky": false,
"language": "c",
+ "name": "h2_oauth2_negative_deadline_test",
+ "platforms": [
+ "linux",
+ "mac",
+ "posix",
+ "windows"
+ ]
+ },
+ {
+ "ci_platforms": [
+ "linux",
+ "posix",
+ "windows"
+ ],
+ "exclude_configs": [],
+ "flaky": false,
+ "language": "c",
"name": "h2_oauth2_no_op_test",
"platforms": [
"linux",
@@ -4484,6 +4664,23 @@
"exclude_configs": [],
"flaky": false,
"language": "c",
+ "name": "h2_proxy_cancel_with_status_test",
+ "platforms": [
+ "linux",
+ "mac",
+ "posix",
+ "windows"
+ ]
+ },
+ {
+ "ci_platforms": [
+ "linux",
+ "posix",
+ "windows"
+ ],
+ "exclude_configs": [],
+ "flaky": false,
+ "language": "c",
"name": "h2_proxy_census_simple_request_test",
"platforms": [
"linux",
@@ -4654,6 +4851,23 @@
"exclude_configs": [],
"flaky": false,
"language": "c",
+ "name": "h2_proxy_negative_deadline_test",
+ "platforms": [
+ "linux",
+ "mac",
+ "posix",
+ "windows"
+ ]
+ },
+ {
+ "ci_platforms": [
+ "linux",
+ "posix",
+ "windows"
+ ],
+ "exclude_configs": [],
+ "flaky": false,
+ "language": "c",
"name": "h2_proxy_no_op_test",
"platforms": [
"linux",
@@ -4977,6 +5191,23 @@
"exclude_configs": [],
"flaky": false,
"language": "c",
+ "name": "h2_sockpair_cancel_with_status_test",
+ "platforms": [
+ "linux",
+ "mac",
+ "posix",
+ "windows"
+ ]
+ },
+ {
+ "ci_platforms": [
+ "linux",
+ "posix",
+ "windows"
+ ],
+ "exclude_configs": [],
+ "flaky": false,
+ "language": "c",
"name": "h2_sockpair_census_simple_request_test",
"platforms": [
"linux",
@@ -5147,6 +5378,23 @@
"exclude_configs": [],
"flaky": false,
"language": "c",
+ "name": "h2_sockpair_negative_deadline_test",
+ "platforms": [
+ "linux",
+ "mac",
+ "posix",
+ "windows"
+ ]
+ },
+ {
+ "ci_platforms": [
+ "linux",
+ "posix",
+ "windows"
+ ],
+ "exclude_configs": [],
+ "flaky": false,
+ "language": "c",
"name": "h2_sockpair_no_op_test",
"platforms": [
"linux",
@@ -5479,6 +5727,24 @@
"exclude_configs": [],
"flaky": false,
"language": "c",
+ "name": "h2_sockpair+trace_cancel_with_status_test",
+ "platforms": [
+ "linux",
+ "mac",
+ "posix",
+ "windows"
+ ]
+ },
+ {
+ "ci_platforms": [
+ "linux",
+ "mac",
+ "posix",
+ "windows"
+ ],
+ "exclude_configs": [],
+ "flaky": false,
+ "language": "c",
"name": "h2_sockpair+trace_census_simple_request_test",
"platforms": [
"linux",
@@ -5659,6 +5925,24 @@
"exclude_configs": [],
"flaky": false,
"language": "c",
+ "name": "h2_sockpair+trace_negative_deadline_test",
+ "platforms": [
+ "linux",
+ "mac",
+ "posix",
+ "windows"
+ ]
+ },
+ {
+ "ci_platforms": [
+ "linux",
+ "mac",
+ "posix",
+ "windows"
+ ],
+ "exclude_configs": [],
+ "flaky": false,
+ "language": "c",
"name": "h2_sockpair+trace_no_op_test",
"platforms": [
"linux",
@@ -5992,6 +6276,23 @@
"exclude_configs": [],
"flaky": false,
"language": "c",
+ "name": "h2_sockpair_1byte_cancel_with_status_test",
+ "platforms": [
+ "linux",
+ "mac",
+ "posix",
+ "windows"
+ ]
+ },
+ {
+ "ci_platforms": [
+ "linux",
+ "posix",
+ "windows"
+ ],
+ "exclude_configs": [],
+ "flaky": false,
+ "language": "c",
"name": "h2_sockpair_1byte_census_simple_request_test",
"platforms": [
"linux",
@@ -6162,6 +6463,23 @@
"exclude_configs": [],
"flaky": false,
"language": "c",
+ "name": "h2_sockpair_1byte_negative_deadline_test",
+ "platforms": [
+ "linux",
+ "mac",
+ "posix",
+ "windows"
+ ]
+ },
+ {
+ "ci_platforms": [
+ "linux",
+ "posix",
+ "windows"
+ ],
+ "exclude_configs": [],
+ "flaky": false,
+ "language": "c",
"name": "h2_sockpair_1byte_no_op_test",
"platforms": [
"linux",
@@ -6494,6 +6812,24 @@
"exclude_configs": [],
"flaky": false,
"language": "c",
+ "name": "h2_ssl_cancel_with_status_test",
+ "platforms": [
+ "linux",
+ "mac",
+ "posix",
+ "windows"
+ ]
+ },
+ {
+ "ci_platforms": [
+ "linux",
+ "mac",
+ "posix",
+ "windows"
+ ],
+ "exclude_configs": [],
+ "flaky": false,
+ "language": "c",
"name": "h2_ssl_census_simple_request_test",
"platforms": [
"linux",
@@ -6728,6 +7064,24 @@
"exclude_configs": [],
"flaky": false,
"language": "c",
+ "name": "h2_ssl_negative_deadline_test",
+ "platforms": [
+ "linux",
+ "mac",
+ "posix",
+ "windows"
+ ]
+ },
+ {
+ "ci_platforms": [
+ "linux",
+ "mac",
+ "posix",
+ "windows"
+ ],
+ "exclude_configs": [],
+ "flaky": false,
+ "language": "c",
"name": "h2_ssl_no_op_test",
"platforms": [
"linux",
@@ -7037,6 +7391,18 @@
"exclude_configs": [],
"flaky": false,
"language": "c",
+ "name": "h2_ssl+poll_cancel_with_status_test",
+ "platforms": [
+ "linux"
+ ]
+ },
+ {
+ "ci_platforms": [
+ "linux"
+ ],
+ "exclude_configs": [],
+ "flaky": false,
+ "language": "c",
"name": "h2_ssl+poll_census_simple_request_test",
"platforms": [
"linux"
@@ -7193,6 +7559,18 @@
"exclude_configs": [],
"flaky": false,
"language": "c",
+ "name": "h2_ssl+poll_negative_deadline_test",
+ "platforms": [
+ "linux"
+ ]
+ },
+ {
+ "ci_platforms": [
+ "linux"
+ ],
+ "exclude_configs": [],
+ "flaky": false,
+ "language": "c",
"name": "h2_ssl+poll_no_op_test",
"platforms": [
"linux"
@@ -7475,6 +7853,23 @@
"exclude_configs": [],
"flaky": false,
"language": "c",
+ "name": "h2_ssl_proxy_cancel_with_status_test",
+ "platforms": [
+ "linux",
+ "mac",
+ "posix",
+ "windows"
+ ]
+ },
+ {
+ "ci_platforms": [
+ "linux",
+ "posix",
+ "windows"
+ ],
+ "exclude_configs": [],
+ "flaky": false,
+ "language": "c",
"name": "h2_ssl_proxy_census_simple_request_test",
"platforms": [
"linux",
@@ -7645,6 +8040,23 @@
"exclude_configs": [],
"flaky": false,
"language": "c",
+ "name": "h2_ssl_proxy_negative_deadline_test",
+ "platforms": [
+ "linux",
+ "mac",
+ "posix",
+ "windows"
+ ]
+ },
+ {
+ "ci_platforms": [
+ "linux",
+ "posix",
+ "windows"
+ ],
+ "exclude_configs": [],
+ "flaky": false,
+ "language": "c",
"name": "h2_ssl_proxy_no_op_test",
"platforms": [
"linux",
@@ -7977,6 +8389,24 @@
"exclude_configs": [],
"flaky": false,
"language": "c",
+ "name": "h2_uchannel_cancel_with_status_test",
+ "platforms": [
+ "linux",
+ "mac",
+ "posix",
+ "windows"
+ ]
+ },
+ {
+ "ci_platforms": [
+ "linux",
+ "mac",
+ "posix",
+ "windows"
+ ],
+ "exclude_configs": [],
+ "flaky": false,
+ "language": "c",
"name": "h2_uchannel_census_simple_request_test",
"platforms": [
"linux",
@@ -8211,6 +8641,24 @@
"exclude_configs": [],
"flaky": false,
"language": "c",
+ "name": "h2_uchannel_negative_deadline_test",
+ "platforms": [
+ "linux",
+ "mac",
+ "posix",
+ "windows"
+ ]
+ },
+ {
+ "ci_platforms": [
+ "linux",
+ "mac",
+ "posix",
+ "windows"
+ ],
+ "exclude_configs": [],
+ "flaky": false,
+ "language": "c",
"name": "h2_uchannel_no_op_test",
"platforms": [
"linux",
@@ -8554,6 +9002,22 @@
"exclude_configs": [],
"flaky": false,
"language": "c",
+ "name": "h2_uds_cancel_with_status_test",
+ "platforms": [
+ "linux",
+ "mac",
+ "posix"
+ ]
+ },
+ {
+ "ci_platforms": [
+ "linux",
+ "mac",
+ "posix"
+ ],
+ "exclude_configs": [],
+ "flaky": false,
+ "language": "c",
"name": "h2_uds_census_simple_request_test",
"platforms": [
"linux",
@@ -8746,6 +9210,22 @@
"exclude_configs": [],
"flaky": false,
"language": "c",
+ "name": "h2_uds_negative_deadline_test",
+ "platforms": [
+ "linux",
+ "mac",
+ "posix"
+ ]
+ },
+ {
+ "ci_platforms": [
+ "linux",
+ "mac",
+ "posix"
+ ],
+ "exclude_configs": [],
+ "flaky": false,
+ "language": "c",
"name": "h2_uds_no_op_test",
"platforms": [
"linux",
@@ -9032,6 +9512,18 @@
"exclude_configs": [],
"flaky": false,
"language": "c",
+ "name": "h2_uds+poll_cancel_with_status_test",
+ "platforms": [
+ "linux"
+ ]
+ },
+ {
+ "ci_platforms": [
+ "linux"
+ ],
+ "exclude_configs": [],
+ "flaky": false,
+ "language": "c",
"name": "h2_uds+poll_census_simple_request_test",
"platforms": [
"linux"
@@ -9176,6 +9668,18 @@
"exclude_configs": [],
"flaky": false,
"language": "c",
+ "name": "h2_uds+poll_negative_deadline_test",
+ "platforms": [
+ "linux"
+ ]
+ },
+ {
+ "ci_platforms": [
+ "linux"
+ ],
+ "exclude_configs": [],
+ "flaky": false,
+ "language": "c",
"name": "h2_uds+poll_no_op_test",
"platforms": [
"linux"
@@ -9449,6 +9953,24 @@
"exclude_configs": [],
"flaky": false,
"language": "c",
+ "name": "h2_compress_cancel_with_status_nosec_test",
+ "platforms": [
+ "linux",
+ "mac",
+ "posix",
+ "windows"
+ ]
+ },
+ {
+ "ci_platforms": [
+ "linux",
+ "mac",
+ "posix",
+ "windows"
+ ],
+ "exclude_configs": [],
+ "flaky": false,
+ "language": "c",
"name": "h2_compress_census_simple_request_nosec_test",
"platforms": [
"linux",
@@ -9683,6 +10205,24 @@
"exclude_configs": [],
"flaky": false,
"language": "c",
+ "name": "h2_compress_negative_deadline_nosec_test",
+ "platforms": [
+ "linux",
+ "mac",
+ "posix",
+ "windows"
+ ]
+ },
+ {
+ "ci_platforms": [
+ "linux",
+ "mac",
+ "posix",
+ "windows"
+ ],
+ "exclude_configs": [],
+ "flaky": false,
+ "language": "c",
"name": "h2_compress_no_op_nosec_test",
"platforms": [
"linux",
@@ -10025,6 +10565,24 @@
"exclude_configs": [],
"flaky": false,
"language": "c",
+ "name": "h2_full_cancel_with_status_nosec_test",
+ "platforms": [
+ "linux",
+ "mac",
+ "posix",
+ "windows"
+ ]
+ },
+ {
+ "ci_platforms": [
+ "linux",
+ "mac",
+ "posix",
+ "windows"
+ ],
+ "exclude_configs": [],
+ "flaky": false,
+ "language": "c",
"name": "h2_full_census_simple_request_nosec_test",
"platforms": [
"linux",
@@ -10259,6 +10817,24 @@
"exclude_configs": [],
"flaky": false,
"language": "c",
+ "name": "h2_full_negative_deadline_nosec_test",
+ "platforms": [
+ "linux",
+ "mac",
+ "posix",
+ "windows"
+ ]
+ },
+ {
+ "ci_platforms": [
+ "linux",
+ "mac",
+ "posix",
+ "windows"
+ ],
+ "exclude_configs": [],
+ "flaky": false,
+ "language": "c",
"name": "h2_full_no_op_nosec_test",
"platforms": [
"linux",
@@ -10556,6 +11132,18 @@
"exclude_configs": [],
"flaky": false,
"language": "c",
+ "name": "h2_full+poll_cancel_with_status_nosec_test",
+ "platforms": [
+ "linux"
+ ]
+ },
+ {
+ "ci_platforms": [
+ "linux"
+ ],
+ "exclude_configs": [],
+ "flaky": false,
+ "language": "c",
"name": "h2_full+poll_census_simple_request_nosec_test",
"platforms": [
"linux"
@@ -10712,6 +11300,18 @@
"exclude_configs": [],
"flaky": false,
"language": "c",
+ "name": "h2_full+poll_negative_deadline_nosec_test",
+ "platforms": [
+ "linux"
+ ]
+ },
+ {
+ "ci_platforms": [
+ "linux"
+ ],
+ "exclude_configs": [],
+ "flaky": false,
+ "language": "c",
"name": "h2_full+poll_no_op_nosec_test",
"platforms": [
"linux"
@@ -10977,6 +11577,23 @@
"exclude_configs": [],
"flaky": false,
"language": "c",
+ "name": "h2_proxy_cancel_with_status_nosec_test",
+ "platforms": [
+ "linux",
+ "mac",
+ "posix",
+ "windows"
+ ]
+ },
+ {
+ "ci_platforms": [
+ "linux",
+ "posix",
+ "windows"
+ ],
+ "exclude_configs": [],
+ "flaky": false,
+ "language": "c",
"name": "h2_proxy_census_simple_request_nosec_test",
"platforms": [
"linux",
@@ -11147,6 +11764,23 @@
"exclude_configs": [],
"flaky": false,
"language": "c",
+ "name": "h2_proxy_negative_deadline_nosec_test",
+ "platforms": [
+ "linux",
+ "mac",
+ "posix",
+ "windows"
+ ]
+ },
+ {
+ "ci_platforms": [
+ "linux",
+ "posix",
+ "windows"
+ ],
+ "exclude_configs": [],
+ "flaky": false,
+ "language": "c",
"name": "h2_proxy_no_op_nosec_test",
"platforms": [
"linux",
@@ -11453,6 +12087,23 @@
"exclude_configs": [],
"flaky": false,
"language": "c",
+ "name": "h2_sockpair_cancel_with_status_nosec_test",
+ "platforms": [
+ "linux",
+ "mac",
+ "posix",
+ "windows"
+ ]
+ },
+ {
+ "ci_platforms": [
+ "linux",
+ "posix",
+ "windows"
+ ],
+ "exclude_configs": [],
+ "flaky": false,
+ "language": "c",
"name": "h2_sockpair_census_simple_request_nosec_test",
"platforms": [
"linux",
@@ -11623,6 +12274,23 @@
"exclude_configs": [],
"flaky": false,
"language": "c",
+ "name": "h2_sockpair_negative_deadline_nosec_test",
+ "platforms": [
+ "linux",
+ "mac",
+ "posix",
+ "windows"
+ ]
+ },
+ {
+ "ci_platforms": [
+ "linux",
+ "posix",
+ "windows"
+ ],
+ "exclude_configs": [],
+ "flaky": false,
+ "language": "c",
"name": "h2_sockpair_no_op_nosec_test",
"platforms": [
"linux",
@@ -11937,6 +12605,24 @@
"exclude_configs": [],
"flaky": false,
"language": "c",
+ "name": "h2_sockpair+trace_cancel_with_status_nosec_test",
+ "platforms": [
+ "linux",
+ "mac",
+ "posix",
+ "windows"
+ ]
+ },
+ {
+ "ci_platforms": [
+ "linux",
+ "mac",
+ "posix",
+ "windows"
+ ],
+ "exclude_configs": [],
+ "flaky": false,
+ "language": "c",
"name": "h2_sockpair+trace_census_simple_request_nosec_test",
"platforms": [
"linux",
@@ -12117,6 +12803,24 @@
"exclude_configs": [],
"flaky": false,
"language": "c",
+ "name": "h2_sockpair+trace_negative_deadline_nosec_test",
+ "platforms": [
+ "linux",
+ "mac",
+ "posix",
+ "windows"
+ ]
+ },
+ {
+ "ci_platforms": [
+ "linux",
+ "mac",
+ "posix",
+ "windows"
+ ],
+ "exclude_configs": [],
+ "flaky": false,
+ "language": "c",
"name": "h2_sockpair+trace_no_op_nosec_test",
"platforms": [
"linux",
@@ -12433,6 +13137,23 @@
"exclude_configs": [],
"flaky": false,
"language": "c",
+ "name": "h2_sockpair_1byte_cancel_with_status_nosec_test",
+ "platforms": [
+ "linux",
+ "mac",
+ "posix",
+ "windows"
+ ]
+ },
+ {
+ "ci_platforms": [
+ "linux",
+ "posix",
+ "windows"
+ ],
+ "exclude_configs": [],
+ "flaky": false,
+ "language": "c",
"name": "h2_sockpair_1byte_census_simple_request_nosec_test",
"platforms": [
"linux",
@@ -12603,6 +13324,23 @@
"exclude_configs": [],
"flaky": false,
"language": "c",
+ "name": "h2_sockpair_1byte_negative_deadline_nosec_test",
+ "platforms": [
+ "linux",
+ "mac",
+ "posix",
+ "windows"
+ ]
+ },
+ {
+ "ci_platforms": [
+ "linux",
+ "posix",
+ "windows"
+ ],
+ "exclude_configs": [],
+ "flaky": false,
+ "language": "c",
"name": "h2_sockpair_1byte_no_op_nosec_test",
"platforms": [
"linux",
@@ -12917,6 +13655,24 @@
"exclude_configs": [],
"flaky": false,
"language": "c",
+ "name": "h2_uchannel_cancel_with_status_nosec_test",
+ "platforms": [
+ "linux",
+ "mac",
+ "posix",
+ "windows"
+ ]
+ },
+ {
+ "ci_platforms": [
+ "linux",
+ "mac",
+ "posix",
+ "windows"
+ ],
+ "exclude_configs": [],
+ "flaky": false,
+ "language": "c",
"name": "h2_uchannel_census_simple_request_nosec_test",
"platforms": [
"linux",
@@ -13151,6 +13907,24 @@
"exclude_configs": [],
"flaky": false,
"language": "c",
+ "name": "h2_uchannel_negative_deadline_nosec_test",
+ "platforms": [
+ "linux",
+ "mac",
+ "posix",
+ "windows"
+ ]
+ },
+ {
+ "ci_platforms": [
+ "linux",
+ "mac",
+ "posix",
+ "windows"
+ ],
+ "exclude_configs": [],
+ "flaky": false,
+ "language": "c",
"name": "h2_uchannel_no_op_nosec_test",
"platforms": [
"linux",
@@ -13478,6 +14252,22 @@
"exclude_configs": [],
"flaky": false,
"language": "c",
+ "name": "h2_uds_cancel_with_status_nosec_test",
+ "platforms": [
+ "linux",
+ "mac",
+ "posix"
+ ]
+ },
+ {
+ "ci_platforms": [
+ "linux",
+ "mac",
+ "posix"
+ ],
+ "exclude_configs": [],
+ "flaky": false,
+ "language": "c",
"name": "h2_uds_census_simple_request_nosec_test",
"platforms": [
"linux",
@@ -13670,6 +14460,22 @@
"exclude_configs": [],
"flaky": false,
"language": "c",
+ "name": "h2_uds_negative_deadline_nosec_test",
+ "platforms": [
+ "linux",
+ "mac",
+ "posix"
+ ]
+ },
+ {
+ "ci_platforms": [
+ "linux",
+ "mac",
+ "posix"
+ ],
+ "exclude_configs": [],
+ "flaky": false,
+ "language": "c",
"name": "h2_uds_no_op_nosec_test",
"platforms": [
"linux",
@@ -13944,6 +14750,18 @@
"exclude_configs": [],
"flaky": false,
"language": "c",
+ "name": "h2_uds+poll_cancel_with_status_nosec_test",
+ "platforms": [
+ "linux"
+ ]
+ },
+ {
+ "ci_platforms": [
+ "linux"
+ ],
+ "exclude_configs": [],
+ "flaky": false,
+ "language": "c",
"name": "h2_uds+poll_census_simple_request_nosec_test",
"platforms": [
"linux"
@@ -14088,6 +14906,18 @@
"exclude_configs": [],
"flaky": false,
"language": "c",
+ "name": "h2_uds+poll_negative_deadline_nosec_test",
+ "platforms": [
+ "linux"
+ ]
+ },
+ {
+ "ci_platforms": [
+ "linux"
+ ],
+ "exclude_configs": [],
+ "flaky": false,
+ "language": "c",
"name": "h2_uds+poll_no_op_nosec_test",
"platforms": [
"linux"