github.com/linapex/ethereum-go-chinese@v0.0.0-20190316121929-f8b7a73c3fa1/swarm/api/http/roundtripper_test.go (about) 1 2 //<developer> 3 // <name>linapex 曹一峰</name> 4 // <email>linapex@163.com</email> 5 // <wx>superexc</wx> 6 // <qqgroup>128148617</qqgroup> 7 // <url>https://jsq.ink</url> 8 // <role>pku engineer</role> 9 // <date>2019-03-16 19:16:43</date> 10 //</624450111962877952> 11 12 13 package http 14 15 import ( 16 "io/ioutil" 17 "net" 18 "net/http" 19 "net/http/httptest" 20 "strings" 21 "testing" 22 "time" 23 ) 24 25 func TestRoundTripper(t *testing.T) { 26 serveMux := http.NewServeMux() 27 serveMux.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { 28 if r.Method == "GET" { 29 w.Header().Set("Content-Type", "text/plain") 30 http.ServeContent(w, r, "", time.Unix(0, 0), strings.NewReader(r.RequestURI)) 31 } else { 32 http.Error(w, "Method "+r.Method+" is not supported.", http.StatusMethodNotAllowed) 33 } 34 }) 35 36 srv := httptest.NewServer(serveMux) 37 defer srv.Close() 38 39 host, port, _ := net.SplitHostPort(srv.Listener.Addr().String()) 40 rt := &RoundTripper{Host: host, Port: port} 41 trans := &http.Transport{} 42 trans.RegisterProtocol("bzz", rt) 43 client := &http.Client{Transport: trans} 44 resp, err := client.Get("bzz://COM/PATH“测试” 45 if err != nil { 46 t.Errorf("expected no error, got %v", err) 47 return 48 } 49 50 defer func() { 51 if resp != nil { 52 resp.Body.Close() 53 } 54 }() 55 56 content, err := ioutil.ReadAll(resp.Body) 57 if err != nil { 58 t.Errorf("expected no error, got %v", err) 59 return 60 } 61 if string(content) != "/HTTP/1.1:/test.com/path" { 62 t.Errorf("incorrect response from http server: expected '%v', got '%v'", "/HTTP/1.1:/test.com/path", string(content)) 63 } 64 65 } 66