OSDN Git Service

libgo: Update to weekly.2011-11-01.
[pf3gnuchains/gcc-fork.git] / libgo / go / http / reverseproxy_test.go
1 // Copyright 2011 The Go Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style
3 // license that can be found in the LICENSE file.
4
5 // Reverse proxy tests.
6
7 package http_test
8
9 import (
10         . "http"
11         "http/httptest"
12         "io/ioutil"
13         "testing"
14         "url"
15 )
16
17 func TestReverseProxy(t *testing.T) {
18         const backendResponse = "I am the backend"
19         const backendStatus = 404
20         backend := httptest.NewServer(HandlerFunc(func(w ResponseWriter, r *Request) {
21                 if len(r.TransferEncoding) > 0 {
22                         t.Errorf("backend got unexpected TransferEncoding: %v", r.TransferEncoding)
23                 }
24                 if r.Header.Get("X-Forwarded-For") == "" {
25                         t.Errorf("didn't get X-Forwarded-For header")
26                 }
27                 if c := r.Header.Get("Connection"); c != "" {
28                         t.Errorf("handler got Connection header value %q", c)
29                 }
30                 if g, e := r.Host, "some-name"; g != e {
31                         t.Errorf("backend got Host header %q, want %q", g, e)
32                 }
33                 w.Header().Set("X-Foo", "bar")
34                 SetCookie(w, &Cookie{Name: "flavor", Value: "chocolateChip"})
35                 w.WriteHeader(backendStatus)
36                 w.Write([]byte(backendResponse))
37         }))
38         defer backend.Close()
39         backendURL, err := url.Parse(backend.URL)
40         if err != nil {
41                 t.Fatal(err)
42         }
43         proxyHandler := NewSingleHostReverseProxy(backendURL)
44         frontend := httptest.NewServer(proxyHandler)
45         defer frontend.Close()
46
47         getReq, _ := NewRequest("GET", frontend.URL, nil)
48         getReq.Host = "some-name"
49         getReq.Header.Set("Connection", "close")
50         getReq.Close = true
51         res, err := DefaultClient.Do(getReq)
52         if err != nil {
53                 t.Fatalf("Get: %v", err)
54         }
55         if g, e := res.StatusCode, backendStatus; g != e {
56                 t.Errorf("got res.StatusCode %d; expected %d", g, e)
57         }
58         if g, e := res.Header.Get("X-Foo"), "bar"; g != e {
59                 t.Errorf("got X-Foo %q; expected %q", g, e)
60         }
61         if g, e := len(res.Header["Set-Cookie"]), 1; g != e {
62                 t.Fatalf("got %d SetCookies, want %d", g, e)
63         }
64         if cookie := res.Cookies()[0]; cookie.Name != "flavor" {
65                 t.Errorf("unexpected cookie %q", cookie.Name)
66         }
67         bodyBytes, _ := ioutil.ReadAll(res.Body)
68         if g, e := string(bodyBytes), backendResponse; g != e {
69                 t.Errorf("got body %q; expected %q", g, e)
70         }
71 }