123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 |
- 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()
- }
|