github.com/linapex/ethereum-go-chinese@v0.0.0-20190316121929-f8b7a73c3fa1/swarm/api/http/response_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 //</624450111870603264> 11 12 13 package http 14 15 import ( 16 "encoding/json" 17 "io/ioutil" 18 "net/http" 19 "strings" 20 "testing" 21 22 "golang.org/x/net/html" 23 ) 24 25 func TestError(t *testing.T) { 26 srv := NewTestSwarmServer(t, serverFunc, nil) 27 defer srv.Close() 28 29 var resp *http.Response 30 var respbody []byte 31 32 url := srv.URL + "/this_should_fail_as_no_bzz_protocol_present" 33 resp, err := http.Get(url) 34 35 if err != nil { 36 t.Fatalf("Request failed: %v", err) 37 } 38 defer resp.Body.Close() 39 respbody, err = ioutil.ReadAll(resp.Body) 40 41 if resp.StatusCode != 404 && !strings.Contains(string(respbody), "Invalid URI "/this_should_fail_as_no_bzz_protocol_present": unknown scheme") { 42 t.Fatalf("Response body does not match, expected: %v, to contain: %v; received code %d, expected code: %d", string(respbody), "Invalid bzz URI: unknown scheme", 400, resp.StatusCode) 43 } 44 45 _, err = html.Parse(strings.NewReader(string(respbody))) 46 if err != nil { 47 t.Fatalf("HTML validation failed for error page returned!") 48 } 49 } 50 51 func Test404Page(t *testing.T) { 52 srv := NewTestSwarmServer(t, serverFunc, nil) 53 defer srv.Close() 54 55 var resp *http.Response 56 var respbody []byte 57 58 url := srv.URL + "/bzz:/1234567890123456789012345678901234567890123456789012345678901234" 59 resp, err := http.Get(url) 60 61 if err != nil { 62 t.Fatalf("Request failed: %v", err) 63 } 64 defer resp.Body.Close() 65 respbody, err = ioutil.ReadAll(resp.Body) 66 67 if resp.StatusCode != 404 || !strings.Contains(string(respbody), "404") { 68 t.Fatalf("Invalid Status Code received, expected 404, got %d", resp.StatusCode) 69 } 70 71 _, err = html.Parse(strings.NewReader(string(respbody))) 72 if err != nil { 73 t.Fatalf("HTML validation failed for error page returned!") 74 } 75 } 76 77 func Test500Page(t *testing.T) { 78 srv := NewTestSwarmServer(t, serverFunc, nil) 79 defer srv.Close() 80 81 var resp *http.Response 82 var respbody []byte 83 84 url := srv.URL + "/bzz:/thisShouldFailWith500Code" 85 resp, err := http.Get(url) 86 87 if err != nil { 88 t.Fatalf("Request failed: %v", err) 89 } 90 defer resp.Body.Close() 91 respbody, err = ioutil.ReadAll(resp.Body) 92 93 if resp.StatusCode != 404 { 94 t.Fatalf("Invalid Status Code received, expected 404, got %d", resp.StatusCode) 95 } 96 97 _, err = html.Parse(strings.NewReader(string(respbody))) 98 if err != nil { 99 t.Fatalf("HTML validation failed for error page returned!") 100 } 101 } 102 func Test500PageWith0xHashPrefix(t *testing.T) { 103 srv := NewTestSwarmServer(t, serverFunc, nil) 104 defer srv.Close() 105 106 var resp *http.Response 107 var respbody []byte 108 109 url := srv.URL + "/bzz:/0xthisShouldFailWith500CodeAndAHelpfulMessage" 110 resp, err := http.Get(url) 111 112 if err != nil { 113 t.Fatalf("Request failed: %v", err) 114 } 115 defer resp.Body.Close() 116 respbody, err = ioutil.ReadAll(resp.Body) 117 118 if resp.StatusCode != 404 { 119 t.Fatalf("Invalid Status Code received, expected 404, got %d", resp.StatusCode) 120 } 121 122 if !strings.Contains(string(respbody), "The requested hash seems to be prefixed with") { 123 t.Fatalf("Did not receive the expected error message") 124 } 125 126 _, err = html.Parse(strings.NewReader(string(respbody))) 127 if err != nil { 128 t.Fatalf("HTML validation failed for error page returned!") 129 } 130 } 131 132 func TestJsonResponse(t *testing.T) { 133 srv := NewTestSwarmServer(t, serverFunc, nil) 134 defer srv.Close() 135 136 var resp *http.Response 137 var respbody []byte 138 139 url := srv.URL + "/bzz:/thisShouldFailWith500Code/" 140 req, err := http.NewRequest("GET", url, nil) 141 if err != nil { 142 t.Fatalf("Request failed: %v", err) 143 } 144 req.Header.Set("Accept", "application/json") 145 resp, err = http.DefaultClient.Do(req) 146 if err != nil { 147 t.Fatalf("Request failed: %v", err) 148 } 149 150 defer resp.Body.Close() 151 respbody, err = ioutil.ReadAll(resp.Body) 152 153 if resp.StatusCode != 404 { 154 t.Fatalf("Invalid Status Code received, expected 404, got %d", resp.StatusCode) 155 } 156 157 if !isJSON(string(respbody)) { 158 t.Fatalf("Expected response to be JSON, received invalid JSON: %s", string(respbody)) 159 } 160 161 } 162 163 func isJSON(s string) bool { 164 var js map[string]interface{} 165 return json.Unmarshal([]byte(s), &js) == nil 166 } 167