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