use dagreader in servehttp
verokarhu committed
Sep 28, 2014 at 12:26 UTC
8382c797fcc415802be875a72a929357de49f972
3 files changed
+30
-2
server/http/http.go
+11
-2
@@ -2,6 +2,7 @@ package http
2
3
import (
4
"fmt"
5
+ "io"
6
"net/http"
7
8
"github.com/jbenet/go-ipfs/Godeps/_workspace/src/github.com/gorilla/mux"
@@ -30,11 +31,19 @@ func (i *handler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
31
nd, err := i.ResolvePath(path)
32
if err != nil {
33
w.WriteHeader(http.StatusInternalServerError)
34
+ fmt.Println(err)
35
+ return
36
+ }
37
+
38
+ dr, err := i.NewDagReader(nd)
39
+ if err != nil {
40
+ // TODO: return json object containing the tree data if it's a directory (err == ErrIsDir)
41
+ w.WriteHeader(http.StatusInternalServerError)
42
+ fmt.Println(err)
43
return
44
}
45
36
- // TODO: return json object containing the tree data if it's a folder
37
- w.Write(nd.Data)
46
+ io.Copy(w, dr)
47
}
48
49
func (i *handler) postHandler(w http.ResponseWriter, r *http.Request) {
server/http/http_test.go
+14
@@ -1,6 +1,7 @@
1
package http
2
3
import (
4
+ "bytes"
5
"errors"
6
"io"
7
"io/ioutil"
@@ -25,6 +26,7 @@ func TestServeHTTP(t *testing.T) {
26
tests := []test{
27
{"/", http.StatusInternalServerError, "", ""},
28
{"/hash", http.StatusOK, "", "some fine data"},
29
+ {"/hash2", http.StatusInternalServerError, "", ""},
30
}
31
32
for _, test := range tests {
@@ -74,6 +76,10 @@ func (i *testIpfsHandler) ResolvePath(path string) (*dag.Node, error) {
76
return &dag.Node{Data: []byte("some fine data")}, nil
77
}
78
79
+ if path == "/hash2" {
80
+ return &dag.Node{Data: []byte("data that breaks dagreader")}, nil
81
+ }
82
+
83
return nil, errors.New("")
84
}
85
@@ -92,3 +98,11 @@ func (i *testIpfsHandler) AddNodeToDAG(nd *dag.Node) (u.Key, error) {
98
99
return "", errors.New("")
100
}
101
+
102
+func (i *testIpfsHandler) NewDagReader(nd *dag.Node) (io.Reader, error) {
103
+ if string(nd.Data) != "data that breaks dagreader" {
104
+ return bytes.NewReader(nd.Data), nil
105
+ }
106
+
107
+ return nil, errors.New("")
108
+}
server/http/ipfs.go
+5
@@ -13,6 +13,7 @@ type ipfs interface {
13
ResolvePath(string) (*dag.Node, error)
14
NewDagFromReader(io.Reader) (*dag.Node, error)
15
AddNodeToDAG(nd *dag.Node) (u.Key, error)
16
+ NewDagReader(nd *dag.Node) (io.Reader, error)
17
}
18
19
type ipfsHandler struct {
@@ -30,3 +31,7 @@ func (i *ipfsHandler) NewDagFromReader(r io.Reader) (*dag.Node, error) {
31
func (i *ipfsHandler) AddNodeToDAG(nd *dag.Node) (u.Key, error) {
32
return i.node.DAG.Add(nd)
33
}
34
+
35
+func (i *ipfsHandler) NewDagReader(nd *dag.Node) (io.Reader, error) {
36
+ return dag.NewDagReader(nd, i.node.DAG)
37
+}