OSDN Git Service

Hulk did something
[bytom/vapor.git] / vendor / golang.org / x / net / http2 / go19_test.go
diff --git a/vendor/golang.org/x/net/http2/go19_test.go b/vendor/golang.org/x/net/http2/go19_test.go
new file mode 100644 (file)
index 0000000..1675d24
--- /dev/null
@@ -0,0 +1,60 @@
+// Copyright 2017 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// +build go1.9
+
+package http2
+
+import (
+       "context"
+       "net/http"
+       "reflect"
+       "testing"
+       "time"
+)
+
+func TestServerGracefulShutdown(t *testing.T) {
+       var st *serverTester
+       handlerDone := make(chan struct{})
+       st = newServerTester(t, func(w http.ResponseWriter, r *http.Request) {
+               defer close(handlerDone)
+               go st.ts.Config.Shutdown(context.Background())
+
+               ga := st.wantGoAway()
+               if ga.ErrCode != ErrCodeNo {
+                       t.Errorf("GOAWAY error = %v; want ErrCodeNo", ga.ErrCode)
+               }
+               if ga.LastStreamID != 1 {
+                       t.Errorf("GOAWAY LastStreamID = %v; want 1", ga.LastStreamID)
+               }
+
+               w.Header().Set("x-foo", "bar")
+       })
+       defer st.Close()
+
+       st.greet()
+       st.bodylessReq1()
+
+       select {
+       case <-handlerDone:
+       case <-time.After(5 * time.Second):
+               t.Fatalf("server did not shutdown?")
+       }
+       hf := st.wantHeaders()
+       goth := st.decodeHeader(hf.HeaderBlockFragment())
+       wanth := [][2]string{
+               {":status", "200"},
+               {"x-foo", "bar"},
+               {"content-type", "text/plain; charset=utf-8"},
+               {"content-length", "0"},
+       }
+       if !reflect.DeepEqual(goth, wanth) {
+               t.Errorf("Got headers %v; want %v", goth, wanth)
+       }
+
+       n, err := st.cc.Read([]byte{0})
+       if n != 0 || err == nil {
+               t.Errorf("Read = %v, %v; want 0, non-nil", n, err)
+       }
+}