Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(5)

Unified Diff: third_party/grpc/tools/http2_interop/http2interop_test.go

Issue 1932353002: Initial checkin of gRPC to third_party/ Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « third_party/grpc/tools/http2_interop/http2interop.go ('k') | third_party/grpc/tools/http2_interop/ping.go » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: third_party/grpc/tools/http2_interop/http2interop_test.go
diff --git a/third_party/grpc/tools/http2_interop/http2interop_test.go b/third_party/grpc/tools/http2_interop/http2interop_test.go
new file mode 100644
index 0000000000000000000000000000000000000000..fb314da1964a099a4d9c855339439148d3e3db69
--- /dev/null
+++ b/third_party/grpc/tools/http2_interop/http2interop_test.go
@@ -0,0 +1,183 @@
+package http2interop
+
+import (
+ "crypto/tls"
+ "crypto/x509"
+ "encoding/json"
+ "flag"
+ "fmt"
+ "io/ioutil"
+ "os"
+ "strconv"
+ "strings"
+ "testing"
+)
+
+var (
+ 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")
+ testCase = flag.String("test_case", "", "What test cases to run (tls, framing)")
+
+ // 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 TestSoonClientShortSettings(t *testing.T) {
+ defer Report(t)
+ if *testCase != "framing" {
+ t.SkipNow()
+ }
+ ctx := InteropCtx(t)
+ for i := 1; i <= 5; i++ {
+ err := testClientShortSettings(ctx, i)
+ matchError(t, err, "EOF")
+ }
+}
+
+func TestSoonShortPreface(t *testing.T) {
+ defer Report(t)
+ if *testCase != "framing" {
+ t.SkipNow()
+ }
+ ctx := InteropCtx(t)
+ for i := 0; i < len(Preface)-1; i++ {
+ err := testShortPreface(ctx, Preface[:i]+"X")
+ matchError(t, err, "EOF")
+ }
+}
+
+func TestSoonUnknownFrameType(t *testing.T) {
+ defer Report(t)
+ if *testCase != "framing" {
+ t.SkipNow()
+ }
+ ctx := InteropCtx(t)
+ if err := testUnknownFrameType(ctx); err != nil {
+ t.Fatal(err)
+ }
+}
+
+func TestSoonClientPrefaceWithStreamId(t *testing.T) {
+ defer Report(t)
+ if *testCase != "framing" {
+ t.SkipNow()
+ }
+ ctx := InteropCtx(t)
+ err := testClientPrefaceWithStreamId(ctx)
+ matchError(t, err, "EOF")
+}
+
+func TestSoonTLSApplicationProtocol(t *testing.T) {
+ defer Report(t)
+ if *testCase != "tls" {
+ t.SkipNow()
+ }
+ ctx := InteropCtx(t)
+ err := testTLSApplicationProtocol(ctx)
+ matchError(t, err, "EOF", "broken pipe")
+}
+
+func TestSoonTLSMaxVersion(t *testing.T) {
+ defer Report(t)
+ if *testCase != "tls" {
+ t.SkipNow()
+ }
+ ctx := InteropCtx(t)
+ err := testTLSMaxVersion(ctx, tls.VersionTLS11)
+ // TODO(carl-mastrangelo): maybe this should be some other error. If the server picks
+ // the wrong protocol version, thats bad too.
+ matchError(t, err, "EOF", "server selected unsupported protocol")
+}
+
+func TestSoonTLSBadCipherSuites(t *testing.T) {
+ defer Report(t)
+ if *testCase != "tls" {
+ t.SkipNow()
+ }
+ ctx := InteropCtx(t)
+ err := testTLSBadCipherSuites(ctx)
+ matchError(t, err, "EOF", "Got goaway frame")
+}
+
+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) {
+ flag.Parse()
+ m.Run()
+ var fatal bool
+ var any bool
+ for _, ci := range allCaseInfos.Cases {
+ if ci.Skipped {
+ continue
+ }
+ any = true
+ if !ci.Passed && ci.Fatal {
+ fatal = true
+ }
+ }
+
+ if err := json.NewEncoder(os.Stderr).Encode(&allCaseInfos); err != nil {
+ fmt.Println("Failed to encode", err)
+ }
+ var code int
+ if !any || fatal {
+ code = 1
+ }
+ os.Exit(code)
+}
« no previous file with comments | « third_party/grpc/tools/http2_interop/http2interop.go ('k') | third_party/grpc/tools/http2_interop/ping.go » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698