Make http2 interop tests always pass, and instead give a report

pull/4263/head
Carl Mastrangelo 9 years ago
parent b67ef24d77
commit 3c7862478d
  1. 15
      tools/http2_interop/http2interop_test.go
  2. 44
      tools/http2_interop/testsuite.go
  3. 3
      tools/run_tests/run_interop_tests.py

@ -3,6 +3,7 @@ package http2interop
import (
"crypto/tls"
"crypto/x509"
"encoding/json"
"flag"
"fmt"
"io/ioutil"
@ -68,6 +69,7 @@ func (ctx *HTTP2InteropCtx) Close() error {
}
func TestClientShortSettings(t *testing.T) {
defer Report(t)()
if *testCase != "framing" {
t.SkipNow()
}
@ -79,6 +81,7 @@ func TestClientShortSettings(t *testing.T) {
}
func TestShortPreface(t *testing.T) {
defer Report(t)()
if *testCase != "framing" {
t.SkipNow()
}
@ -90,6 +93,7 @@ func TestShortPreface(t *testing.T) {
}
func TestUnknownFrameType(t *testing.T) {
defer Report(t)()
if *testCase != "framing" {
t.SkipNow()
}
@ -100,6 +104,7 @@ func TestUnknownFrameType(t *testing.T) {
}
func TestClientPrefaceWithStreamId(t *testing.T) {
defer Report(t)()
if *testCase != "framing" {
t.SkipNow()
}
@ -109,6 +114,7 @@ func TestClientPrefaceWithStreamId(t *testing.T) {
}
func TestTLSApplicationProtocol(t *testing.T) {
defer Report(t)()
if *testCase != "tls" {
t.SkipNow()
}
@ -118,6 +124,7 @@ func TestTLSApplicationProtocol(t *testing.T) {
}
func TestTLSMaxVersion(t *testing.T) {
defer Report(t)()
if *testCase != "tls" {
t.SkipNow()
}
@ -129,6 +136,7 @@ func TestTLSMaxVersion(t *testing.T) {
}
func TestTLSBadCipherSuites(t *testing.T) {
defer Report(t)()
if *testCase != "tls" {
t.SkipNow()
}
@ -151,5 +159,10 @@ func matchError(t *testing.T, err error, matches ...string) {
func TestMain(m *testing.M) {
flag.Parse()
os.Exit(m.Run())
m.Run()
if err := json.NewEncoder(os.Stderr).Encode(&allCaseInfos); err != nil {
fmt.Println("Failed to encode", err)
}
// Always pass
os.Exit(0)
}

@ -0,0 +1,44 @@
package http2interop
import (
"runtime"
"strings"
"sync"
"testing"
)
// When a test is skipped or fails, runtime.Goexit() is called which destroys the callstack.
// This means the name of the test case is lost, so we need to grab a copy of pc before.
func Report(t testing.TB) func() {
pc, _, _, ok := runtime.Caller(1)
if !ok {
t.Fatal("Can't get caller info")
}
return func() {
fn := runtime.FuncForPC(pc)
fullName := fn.Name()
name := strings.Split(fullName, ".")[1]
allCaseInfos.lock.Lock()
defer allCaseInfos.lock.Unlock()
allCaseInfos.Cases = append(allCaseInfos.Cases, &caseInfo{
Name: name,
Passed: !t.Failed(),
Skipped: t.Skipped(),
})
}
}
type caseInfo struct {
Name string `json:"name"`
Passed bool `json:"passed"`
Skipped bool `json:"skipped"`
}
type caseInfos struct {
lock sync.Mutex
Cases []*caseInfo `json:"cases"`
}
var (
allCaseInfos = caseInfos{}
)

@ -661,9 +661,6 @@ try:
if args.http2_interop:
for test_case in _HTTP2_TEST_CASES:
if server_name == "go":
# TODO(carl-mastrangelo): Reenable after https://github.com/grpc/grpc-go/issues/434
continue
test_job = cloud_to_cloud_jobspec(http2Interop,
test_case,
server_name,

Loading…
Cancel
Save