package main_test /* Reverse proxy chunked encoding test To use this test file, set default site in your zoraxypointing to http://localhost:8088 and then start the backend server and test script below. */ import ( "bytes" "fmt" "io" "io/ioutil" "net/http" "testing" ) const ( backendResponse = "I am the backend" backendStatus = 404 backendURL string = "http://localhost" ) func TestReverseProxy(t *testing.T) { getReq, _ := http.NewRequest("GET", backendURL, nil) getReq.Host = "localhost" res, err := http.DefaultClient.Do(getReq) if err != nil { t.Fatalf("Get: %v", err) } if g, e := res.StatusCode, backendStatus; g != e { t.Errorf("got res.StatusCode %d; expected %d", g, e) } if g, e := res.Header.Get("X-Foo"), "bar"; g != e { t.Errorf("got X-Foo %q; expected %q", g, e) } if g, e := len(res.Header["Set-Cookie"]), 1; g != e { t.Fatalf("got %d SetCookies, want %d", g, e) } if cookie := res.Cookies()[0]; cookie.Name != "flavor" { t.Errorf("unexpected cookie %q", cookie.Name) } bodyBytes, _ := ioutil.ReadAll(res.Body) if g, e := string(bodyBytes), backendResponse; g != e { t.Errorf("got body %q; expected %q", g, e) } } func TestChunkedTransfer(t *testing.T) { // Test chunked encoding request chunkedReq, _ := http.NewRequest("POST", backendURL, bytes.NewBufferString("")) chunkedReq.Host = "localhost" chunkedReq.TransferEncoding = []string{"chunked"} chunkedRes, err := http.DefaultClient.Do(chunkedReq) if err != nil { t.Fatalf("Chunked POST: %v", err) } if g, e := chunkedRes.StatusCode, 200; g != e { t.Errorf("got chunkedRes.StatusCode %d; expected %d", g, e) } // Read the response body in chunks and print to STDOUT buf := make([]byte, 1024) for { n, err := chunkedRes.Body.Read(buf) if n > 0 { // Print the chunk to STDOUT fmt.Print(string(buf[:n])) } if err != nil { if err != io.EOF { t.Fatalf("Error reading response body: %v", err) } break } } chunkedRes.Body.Close() }