mirror of
https://github.com/rclone/rclone.git
synced 2024-12-27 01:19:12 +01:00
61 lines
1.3 KiB
Go
61 lines
1.3 KiB
Go
|
// 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)
|
||
|
}
|
||
|
}
|