aboutsummaryrefslogtreecommitdiffstats
path: root/swarm/api/http/response_test.go
diff options
context:
space:
mode:
authorElad <theman@elad.im>2018-08-07 17:56:55 +0800
committerBalint Gabor <balint.g@gmail.com>2018-08-07 17:56:55 +0800
commit93fe16b0a5162a158ee74d9f398107f31074a8f1 (patch)
tree5838389dd827c05e380c85a4e0dae04189bf07c6 /swarm/api/http/response_test.go
parent64a4e89504b683074077b54518633b76c59ab507 (diff)
downloaddexon-93fe16b0a5162a158ee74d9f398107f31074a8f1.tar
dexon-93fe16b0a5162a158ee74d9f398107f31074a8f1.tar.gz
dexon-93fe16b0a5162a158ee74d9f398107f31074a8f1.tar.bz2
dexon-93fe16b0a5162a158ee74d9f398107f31074a8f1.tar.lz
dexon-93fe16b0a5162a158ee74d9f398107f31074a8f1.tar.xz
dexon-93fe16b0a5162a158ee74d9f398107f31074a8f1.tar.zst
dexon-93fe16b0a5162a158ee74d9f398107f31074a8f1.zip
swarm/api/http: refactored http package (#17309)
Diffstat (limited to 'swarm/api/http/response_test.go')
-rw-r--r--swarm/api/http/response_test.go172
1 files changed, 172 insertions, 0 deletions
diff --git a/swarm/api/http/response_test.go b/swarm/api/http/response_test.go
new file mode 100644
index 000000000..2e24bda6d
--- /dev/null
+++ b/swarm/api/http/response_test.go
@@ -0,0 +1,172 @@
+// Copyright 2017 The go-ethereum Authors
+// This file is part of the go-ethereum library.
+//
+// The go-ethereum library is free software: you can redistribute it and/or modify
+// it under the terms of the GNU Lesser General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// The go-ethereum library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public License
+// along with the go-ethereum library. If not, see <http://www.gnu.org/licenses/>.
+
+package http
+
+import (
+ "encoding/json"
+ "io/ioutil"
+ "net/http"
+ "strings"
+ "testing"
+
+ "golang.org/x/net/html"
+
+ "github.com/ethereum/go-ethereum/swarm/testutil"
+)
+
+func TestError(t *testing.T) {
+ srv := testutil.NewTestSwarmServer(t, serverFunc)
+ defer srv.Close()
+
+ var resp *http.Response
+ var respbody []byte
+
+ url := srv.URL + "/this_should_fail_as_no_bzz_protocol_present"
+ resp, err := http.Get(url)
+
+ if err != nil {
+ t.Fatalf("Request failed: %v", err)
+ }
+ defer resp.Body.Close()
+ respbody, err = ioutil.ReadAll(resp.Body)
+
+ if resp.StatusCode != 404 && !strings.Contains(string(respbody), "Invalid URI &#34;/this_should_fail_as_no_bzz_protocol_present&#34;: unknown scheme") {
+ 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)
+ }
+
+ _, err = html.Parse(strings.NewReader(string(respbody)))
+ if err != nil {
+ t.Fatalf("HTML validation failed for error page returned!")
+ }
+}
+
+func Test404Page(t *testing.T) {
+ srv := testutil.NewTestSwarmServer(t, serverFunc)
+ defer srv.Close()
+
+ var resp *http.Response
+ var respbody []byte
+
+ url := srv.URL + "/bzz:/1234567890123456789012345678901234567890123456789012345678901234"
+ resp, err := http.Get(url)
+
+ if err != nil {
+ t.Fatalf("Request failed: %v", err)
+ }
+ defer resp.Body.Close()
+ respbody, err = ioutil.ReadAll(resp.Body)
+
+ if resp.StatusCode != 404 || !strings.Contains(string(respbody), "404") {
+ t.Fatalf("Invalid Status Code received, expected 404, got %d", resp.StatusCode)
+ }
+
+ _, err = html.Parse(strings.NewReader(string(respbody)))
+ if err != nil {
+ t.Fatalf("HTML validation failed for error page returned!")
+ }
+}
+
+func Test500Page(t *testing.T) {
+ srv := testutil.NewTestSwarmServer(t, serverFunc)
+ defer srv.Close()
+
+ var resp *http.Response
+ var respbody []byte
+
+ url := srv.URL + "/bzz:/thisShouldFailWith500Code"
+ resp, err := http.Get(url)
+
+ if err != nil {
+ t.Fatalf("Request failed: %v", err)
+ }
+ defer resp.Body.Close()
+ respbody, err = ioutil.ReadAll(resp.Body)
+
+ if resp.StatusCode != 404 {
+ t.Fatalf("Invalid Status Code received, expected 404, got %d", resp.StatusCode)
+ }
+
+ _, err = html.Parse(strings.NewReader(string(respbody)))
+ if err != nil {
+ t.Fatalf("HTML validation failed for error page returned!")
+ }
+}
+func Test500PageWith0xHashPrefix(t *testing.T) {
+ srv := testutil.NewTestSwarmServer(t, serverFunc)
+ defer srv.Close()
+
+ var resp *http.Response
+ var respbody []byte
+
+ url := srv.URL + "/bzz:/0xthisShouldFailWith500CodeAndAHelpfulMessage"
+ resp, err := http.Get(url)
+
+ if err != nil {
+ t.Fatalf("Request failed: %v", err)
+ }
+ defer resp.Body.Close()
+ respbody, err = ioutil.ReadAll(resp.Body)
+
+ if resp.StatusCode != 404 {
+ t.Fatalf("Invalid Status Code received, expected 404, got %d", resp.StatusCode)
+ }
+
+ if !strings.Contains(string(respbody), "The requested hash seems to be prefixed with") {
+ t.Fatalf("Did not receive the expected error message")
+ }
+
+ _, err = html.Parse(strings.NewReader(string(respbody)))
+ if err != nil {
+ t.Fatalf("HTML validation failed for error page returned!")
+ }
+}
+
+func TestJsonResponse(t *testing.T) {
+ srv := testutil.NewTestSwarmServer(t, serverFunc)
+ defer srv.Close()
+
+ var resp *http.Response
+ var respbody []byte
+
+ url := srv.URL + "/bzz:/thisShouldFailWith500Code/"
+ req, err := http.NewRequest("GET", url, nil)
+ if err != nil {
+ t.Fatalf("Request failed: %v", err)
+ }
+ req.Header.Set("Accept", "application/json")
+ resp, err = http.DefaultClient.Do(req)
+ if err != nil {
+ t.Fatalf("Request failed: %v", err)
+ }
+
+ defer resp.Body.Close()
+ respbody, err = ioutil.ReadAll(resp.Body)
+
+ if resp.StatusCode != 404 {
+ t.Fatalf("Invalid Status Code received, expected 404, got %d", resp.StatusCode)
+ }
+
+ if !isJSON(string(respbody)) {
+ t.Fatalf("Expected response to be JSON, received invalid JSON: %s", string(respbody))
+ }
+
+}
+
+func isJSON(s string) bool {
+ var js map[string]interface{}
+ return json.Unmarshal([]byte(s), &js) == nil
+}