@cryptotaxi247 / kubo / commits / f7d3f6167

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