mirror of
https://github.com/ipfs/kubo.git
synced 2025-09-14 09:57:12 +08:00
109 lines
2.6 KiB
Go
109 lines
2.6 KiB
Go
package http
|
|
|
|
import (
|
|
"bytes"
|
|
"errors"
|
|
"io"
|
|
"io/ioutil"
|
|
"net/http"
|
|
"net/http/httptest"
|
|
"strings"
|
|
"testing"
|
|
|
|
dag "github.com/jbenet/go-ipfs/merkledag"
|
|
u "github.com/jbenet/go-ipfs/util"
|
|
)
|
|
|
|
type test struct {
|
|
url string
|
|
code int
|
|
reqbody string
|
|
respbody string
|
|
}
|
|
|
|
func TestServeHTTP(t *testing.T) {
|
|
testhandler := &handler{&testIpfsHandler{}}
|
|
tests := []test{
|
|
{"/ipfs/", http.StatusInternalServerError, "", ""},
|
|
{"/ipfs/hash", http.StatusOK, "", "some fine data"},
|
|
{"/ipfs/hash2", http.StatusInternalServerError, "", ""},
|
|
}
|
|
|
|
for _, test := range tests {
|
|
req, _ := http.NewRequest("GET", test.url, nil)
|
|
resp := httptest.NewRecorder()
|
|
testhandler.ServeHTTP(resp, req)
|
|
|
|
if resp.Code != test.code {
|
|
t.Error("expected status code", test.code, "received", resp.Code)
|
|
}
|
|
|
|
if resp.Body.String() != test.respbody {
|
|
t.Error("expected body:", test.respbody)
|
|
t.Error("received body:", resp.Body)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestPostHandler(t *testing.T) {
|
|
testhandler := &handler{&testIpfsHandler{}}
|
|
tests := []test{
|
|
{"/ifps/", http.StatusInternalServerError, "", ""},
|
|
{"/ipfs/", http.StatusInternalServerError, "something that causes an error in adding to DAG", ""},
|
|
{"/ipfs/", http.StatusCreated, "some fine data", "jSQBpNSebeYbPBjs1vp"},
|
|
}
|
|
|
|
for _, test := range tests {
|
|
req, _ := http.NewRequest("POST", test.url, strings.NewReader(test.reqbody))
|
|
resp := httptest.NewRecorder()
|
|
testhandler.postHandler(resp, req)
|
|
|
|
if resp.Code != test.code {
|
|
t.Error("expected status code", test.code, "received", resp.Code)
|
|
}
|
|
|
|
if resp.Body.String() != test.respbody {
|
|
t.Error("expected body:", test.respbody)
|
|
t.Error("received body:", resp.Body)
|
|
}
|
|
}
|
|
}
|
|
|
|
type testIpfsHandler struct{}
|
|
|
|
func (i *testIpfsHandler) ResolvePath(path string) (*dag.Node, error) {
|
|
if path == "/hash" {
|
|
return &dag.Node{Data: []byte("some fine data")}, nil
|
|
}
|
|
|
|
if path == "/hash2" {
|
|
return &dag.Node{Data: []byte("data that breaks dagreader")}, nil
|
|
}
|
|
|
|
return nil, errors.New("")
|
|
}
|
|
|
|
func (i *testIpfsHandler) NewDagFromReader(r io.Reader) (*dag.Node, error) {
|
|
if data, err := ioutil.ReadAll(r); err == nil {
|
|
return &dag.Node{Data: data}, nil
|
|
}
|
|
|
|
return nil, errors.New("")
|
|
}
|
|
|
|
func (i *testIpfsHandler) AddNodeToDAG(nd *dag.Node) (u.Key, error) {
|
|
if len(nd.Data) != 0 && string(nd.Data) != "something that causes an error in adding to DAG" {
|
|
return u.Key(nd.Data), nil
|
|
}
|
|
|
|
return "", errors.New("")
|
|
}
|
|
|
|
func (i *testIpfsHandler) NewDagReader(nd *dag.Node) (io.Reader, error) {
|
|
if string(nd.Data) != "data that breaks dagreader" {
|
|
return bytes.NewReader(nd.Data), nil
|
|
}
|
|
|
|
return nil, errors.New("")
|
|
}
|