diff --git a/server/http/http.go b/server/http/http.go index 9ba2b3a60..c8061b195 100644 --- a/server/http/http.go +++ b/server/http/http.go @@ -4,9 +4,10 @@ import ( "net/http" "github.com/gorilla/mux" + mh "github.com/jbenet/go-ipfs/Godeps/_workspace/src/github.com/jbenet/go-multihash" core "github.com/jbenet/go-ipfs/core" "github.com/jbenet/go-ipfs/importer" - mh "github.com/jbenet/go-multihash" + merkledag "github.com/jbenet/go-ipfs/merkledag" ) type ipfsHandler struct { @@ -26,7 +27,7 @@ func Serve(address string, node *core.IpfsNode) error { func (i *ipfsHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { path := r.URL.Path - nd, err := i.node.Resolver.ResolvePath(path) + nd, err := resolvePath(path, i.node) if err != nil { w.WriteHeader(http.StatusInternalServerError) return @@ -53,3 +54,7 @@ func ipfsPostHandler(w http.ResponseWriter, r *http.Request, node *core.IpfsNode w.WriteHeader(http.StatusCreated) w.Write([]byte(mh.Multihash(k).B58String())) } + +var resolvePath = func(path string, node *core.IpfsNode) (*merkledag.Node, error) { + return node.Resolver.ResolvePath(path) +} diff --git a/server/http/http_test.go b/server/http/http_test.go new file mode 100644 index 000000000..83f8db0d1 --- /dev/null +++ b/server/http/http_test.go @@ -0,0 +1,51 @@ +package http + +import ( + "errors" + "net/http" + "net/http/httptest" + "testing" + + core "github.com/jbenet/go-ipfs/core" + merkledag "github.com/jbenet/go-ipfs/merkledag" +) + +type getTest struct { + url string + code int + body string +} + +func setup() { + resolvePath = func(path string, node *core.IpfsNode) (*merkledag.Node, error) { + if path == "/QmUxtEgtan9M7acwc8SXF3MGpgpD9Ya8ViLNGEXQ6n9vfA" { + return &merkledag.Node{Data: []byte("some fine data")}, nil + } + + return nil, errors.New("") + } +} + +func TestServeHTTP(t *testing.T) { + setup() + testhandler := &ipfsHandler{} + tests := []getTest{ + {"/", http.StatusInternalServerError, ""}, + {"/QmUxtEgtan9M7acwc8SXF3MGpgpD9Ya8ViLNGEXQ6n9vfA", http.StatusOK, "some fine data"}, + } + + 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.body { + t.Error("expected body:", test.body) + t.Error("received body:", resp.Body) + } + } +}