clean up some code, update cbor package, and add tests
License: MIT Signed-off-by: Jeromy <why@ipfs.io>
Jeromy committed
Oct 27, 2016 at 15:49 UTC
f7d3f61673e0ac183649b0a0aca8477fb8506f32
4 files changed
+78
-43
core/commands/dag/dag.go
+16
-36
@@ -10,7 +10,7 @@ import (
10
11
node "gx/ipfs/QmU7bFWQ793qmvNy7outdCaMfSDNk8uqhx4VNrxYj5fj5g/go-ipld-node"
12
cid "gx/ipfs/QmXfiyr2RWEXpVDdaYnD2HNiBk6UBddsvEP4RPfXb6nGqY/go-cid"
13
- ipldcbor "gx/ipfs/QmYRzW9YDHVNCDbfFzbS7TEXAG1swE1yjq1basZ5WnJYH4/go-ipld-cbor"
13
+ ipldcbor "gx/ipfs/QmY7L2aEa1rHjkSSbXJB8oC7825JTpUUvDygmM2JPQeqhr/go-ipld-cbor"
14
)
15
16
var DagCmd = &cmds.Command{
@@ -37,8 +37,8 @@ var DagPutCmd = &cmds.Command{
37
cmds.FileArg("object data", true, false, "The object to put").EnableStdin(),
38
},
39
Options: []cmds.Option{
40
- cmds.StringOption("format", "f", "Format that the object will be.").Default("cbor"),
41
- cmds.StringOption("input-enc", "Format that the object will be.").Default("json"),
40
+ cmds.StringOption("format", "f", "Format that the object will be added as.").Default("cbor"),
41
+ cmds.StringOption("input-enc", "Format that the input object will be.").Default("json"),
42
},
43
Run: func(req cmds.Request, res cmds.Response) {
44
n, err := req.InvocContext().GetNode()
@@ -55,17 +55,10 @@ var DagPutCmd = &cmds.Command{
55
56
ienc, _, _ := req.Option("input-enc").String()
57
format, _, _ := req.Option("format").String()
58
- _ = format
58
+
59
switch ienc {
60
case "json":
61
- var obj map[string]interface{}
62
- err := json.NewDecoder(fi).Decode(&obj)
63
- if err != nil {
64
- res.SetError(err, cmds.ErrNormal)
65
- return
66
- }
67
-
68
- nd, err := convertJsonToType(obj, format)
61
+ nd, err := convertJsonToType(fi, format)
62
if err != nil {
63
res.SetError(err, cmds.ErrNormal)
64
return
@@ -79,29 +72,9 @@ var DagPutCmd = &cmds.Command{
72
73
res.SetOutput(&OutputObject{Cid: c})
74
return
82
- /*
83
- case "btc":
84
- data, err := ioutil.ReadAll(fi)
85
- if err != nil {
86
- res.SetError(err, cmds.ErrNormal)
87
- return
88
- }
89
-
90
- blk, err := ipldbtc.DecodeBlock(data)
91
- if err != nil {
92
- res.SetError(err, cmds.ErrNormal)
93
- return
94
- }
95
-
96
- c, err := n.DAG.Add(blk)
97
- if err != nil {
98
- res.SetError(err, cmds.ErrNormal)
99
- return
100
- }
101
-
102
- res.SetOutput(&OutputObject{Cid: c})
103
- return
104
- */
75
+ default:
76
+ res.SetError(fmt.Errorf("unrecognized input encoding: %s", ienc), cmds.ErrNormal)
77
+ return
78
}
79
},
80
Type: OutputObject{},
@@ -147,7 +120,13 @@ var DagGetCmd = &cmds.Command{
120
},
121
}
122
150
-func convertJsonToType(obj map[string]interface{}, format string) (node.Node, error) {
123
+func convertJsonToType(r io.Reader, format string) (node.Node, error) {
124
+ var obj map[string]interface{}
125
+ err := json.NewDecoder(r).Decode(&obj)
126
+ if err != nil {
127
+ return nil, err
128
+ }
129
+
130
switch format {
131
case "cbor", "dag-cbor":
132
return convertJsonToCbor(obj)
@@ -166,6 +145,7 @@ func convertJsonToCbor(from map[string]interface{}) (*ipldcbor.Node, error) {
145
146
return ipldcbor.WrapMap(out)
147
}
148
+
149
func convertMapSIToCbor(from map[string]interface{}) (map[interface{}]interface{}, error) {
150
to := make(map[interface{}]interface{})
151
for k, v := range from {
merkledag/merkledag.go
+1
-5
@@ -14,7 +14,7 @@ import (
14
logging "gx/ipfs/QmSpJByNKFX1sCsHBEp3R73FL4NF6FnQTEGyNAXHm2GS52/go-log"
15
node "gx/ipfs/QmU7bFWQ793qmvNy7outdCaMfSDNk8uqhx4VNrxYj5fj5g/go-ipld-node"
16
cid "gx/ipfs/QmXfiyr2RWEXpVDdaYnD2HNiBk6UBddsvEP4RPfXb6nGqY/go-cid"
17
- ipldcbor "gx/ipfs/QmYRzW9YDHVNCDbfFzbS7TEXAG1swE1yjq1basZ5WnJYH4/go-ipld-cbor"
17
+ ipldcbor "gx/ipfs/QmY7L2aEa1rHjkSSbXJB8oC7825JTpUUvDygmM2JPQeqhr/go-ipld-cbor"
18
)
19
20
var log = logging.Logger("merkledag")
@@ -108,10 +108,6 @@ func decodeBlock(b blocks.Block) (node.Node, error) {
108
return NewRawNode(b.RawData()), nil
109
case cid.CBOR:
110
return ipldcbor.Decode(b.RawData())
111
- /*
112
- case cid.Bitcoin:
113
- return ipldbtc.DecodeBlock(b.RawData())
114
- */
111
default:
112
return nil, fmt.Errorf("unrecognized object type: %s", c.Type())
113
}
package.json
+2
-2
@@ -278,9 +278,9 @@
278
},
279
{
280
"author": "whyrusleeping",
281
- "hash": "QmYRzW9YDHVNCDbfFzbS7TEXAG1swE1yjq1basZ5WnJYH4",
281
+ "hash": "QmY7L2aEa1rHjkSSbXJB8oC7825JTpUUvDygmM2JPQeqhr",
282
"name": "go-ipld-cbor",
283
- "version": "0.2.1"
283
+ "version": "0.2.2"
284
}
285
],
286
"gxVersion": "0.4.0",
test/sharness/t0053-dag.sh
new
+59
@@ -0,0 +1,59 @@
1
+#!/bin/sh
2
+#
3
+# Copyright (c) 2016 Jeromy Johnson
4
+# MIT Licensed; see the LICENSE file in this repository.
5
+#
6
+
7
+test_description="Test dag command"
8
+
9
+. lib/test-lib.sh
10
+
11
+test_init_ipfs
12
+
13
+test_expect_success "make a few test files" '
14
+ echo "foo" > file1 &&
15
+ echo "bar" > file2 &&
16
+ echo "baz" > file3 &&
17
+ echo "qux" > file4 &&
18
+ HASH1=$(ipfs add -q file1) &&
19
+ HASH2=$(ipfs add -q file2) &&
20
+ HASH3=$(ipfs add -q file3) &&
21
+ HASH4=$(ipfs add -q file4)
22
+'
23
+
24
+test_expect_success "make an ipld object in json" '
25
+ printf "{\"hello\":\"world\",\"cats\":[{\"/\":\"%s\"},{\"water\":{\"/\":\"%s\"}}],\"magic\":{\"/\":\"%s\"}}" $HASH1 $HASH2 $HASH3 > ipld_object
26
+'
27
+
28
+test_dag_cmd() {
29
+ test_expect_success "can add an ipld object" '
30
+ IPLDHASH=$(cat ipld_object | ipfs dag put)
31
+ '
32
+
33
+ test_expect_success "output looks correct" '
34
+ EXPHASH="zdpuApvChR5xM7ttbQmpmtna7wcShHi4gPyxUcWbB7nh8K7cN"
35
+ test $EXPHASH = $IPLDHASH
36
+ '
37
+
38
+ test_expect_success "various path traversals work" '
39
+ ipfs cat $IPLDHASH/cats/0 > out1 &&
40
+ ipfs cat $IPLDHASH/cats/1/water > out2 &&
41
+ ipfs cat $IPLDHASH/magic > out3
42
+ '
43
+
44
+ test_expect_success "outputs look correct" '
45
+ test_cmp file1 out1 &&
46
+ test_cmp file2 out2 &&
47
+ test_cmp file3 out3
48
+ '
49
+}
50
+
51
+# should work offline
52
+test_dag_cmd
53
+
54
+# should work online
55
+test_launch_ipfs_daemon
56
+test_dag_cmd
57
+test_kill_ipfs_daemon
58
+
59
+test_done