p.getErrorHandler()(rw, req, fmt.Errorf("backend tried to switch protocol %q when %q was requested", resUpType, reqUpType))
return
}
+
+ copyHeader(res.Header, rw.Header())
+
hj, ok := rw.(http.Hijacker)
if !ok {
p.getErrorHandler()(rw, req, fmt.Errorf("can't switch protocols using non-Hijacker ResponseWriter type %T", rw))
rproxy := NewSingleHostReverseProxy(backURL)
rproxy.ErrorLog = log.New(ioutil.Discard, "", 0) // quiet for tests
- frontendProxy := httptest.NewServer(rproxy)
+ handler := http.HandlerFunc(func(rw http.ResponseWriter, req *http.Request) {
+ rw.Header().Set("X-Header", "X-Value")
+ rproxy.ServeHTTP(rw, req)
+ })
+
+ frontendProxy := httptest.NewServer(handler)
defer frontendProxy.Close()
req, _ := http.NewRequest("GET", frontendProxy.URL, nil)
if res.StatusCode != 101 {
t.Fatalf("status = %v; want 101", res.Status)
}
+
+ got := res.Header.Get("X-Header")
+ want := "X-Value"
+ if got != want {
+ t.Errorf("Header(XHeader) = %q; want %q", got, want)
+ }
+
if upgradeType(res.Header) != "websocket" {
t.Fatalf("not websocket upgrade; got %#v", res.Header)
}
if !bs.Scan() {
t.Fatalf("Scan: %v", bs.Err())
}
- got := bs.Text()
- want := `backend got "Hello"`
+ got = bs.Text()
+ want = `backend got "Hello"`
if got != want {
t.Errorf("got %#q, want %#q", got, want)
}