提交 f7d3f616 作者: Jeromy

clean up some code, update cbor package, and add tests

License: MIT
Signed-off-by: 's avatarJeromy <why@ipfs.io>
上级 6b797f10
...@@ -10,7 +10,7 @@ import ( ...@@ -10,7 +10,7 @@ import (
node "gx/ipfs/QmU7bFWQ793qmvNy7outdCaMfSDNk8uqhx4VNrxYj5fj5g/go-ipld-node" node "gx/ipfs/QmU7bFWQ793qmvNy7outdCaMfSDNk8uqhx4VNrxYj5fj5g/go-ipld-node"
cid "gx/ipfs/QmXfiyr2RWEXpVDdaYnD2HNiBk6UBddsvEP4RPfXb6nGqY/go-cid" cid "gx/ipfs/QmXfiyr2RWEXpVDdaYnD2HNiBk6UBddsvEP4RPfXb6nGqY/go-cid"
ipldcbor "gx/ipfs/QmYRzW9YDHVNCDbfFzbS7TEXAG1swE1yjq1basZ5WnJYH4/go-ipld-cbor" ipldcbor "gx/ipfs/QmY7L2aEa1rHjkSSbXJB8oC7825JTpUUvDygmM2JPQeqhr/go-ipld-cbor"
) )
var DagCmd = &cmds.Command{ var DagCmd = &cmds.Command{
...@@ -37,8 +37,8 @@ var DagPutCmd = &cmds.Command{ ...@@ -37,8 +37,8 @@ var DagPutCmd = &cmds.Command{
cmds.FileArg("object data", true, false, "The object to put").EnableStdin(), cmds.FileArg("object data", true, false, "The object to put").EnableStdin(),
}, },
Options: []cmds.Option{ Options: []cmds.Option{
cmds.StringOption("format", "f", "Format that the object will be.").Default("cbor"), cmds.StringOption("format", "f", "Format that the object will be added as.").Default("cbor"),
cmds.StringOption("input-enc", "Format that the object will be.").Default("json"), cmds.StringOption("input-enc", "Format that the input object will be.").Default("json"),
}, },
Run: func(req cmds.Request, res cmds.Response) { Run: func(req cmds.Request, res cmds.Response) {
n, err := req.InvocContext().GetNode() n, err := req.InvocContext().GetNode()
...@@ -55,17 +55,10 @@ var DagPutCmd = &cmds.Command{ ...@@ -55,17 +55,10 @@ var DagPutCmd = &cmds.Command{
ienc, _, _ := req.Option("input-enc").String() ienc, _, _ := req.Option("input-enc").String()
format, _, _ := req.Option("format").String() format, _, _ := req.Option("format").String()
_ = format
switch ienc { switch ienc {
case "json": case "json":
var obj map[string]interface{} nd, err := convertJsonToType(fi, format)
err := json.NewDecoder(fi).Decode(&obj)
if err != nil {
res.SetError(err, cmds.ErrNormal)
return
}
nd, err := convertJsonToType(obj, format)
if err != nil { if err != nil {
res.SetError(err, cmds.ErrNormal) res.SetError(err, cmds.ErrNormal)
return return
...@@ -79,29 +72,9 @@ var DagPutCmd = &cmds.Command{ ...@@ -79,29 +72,9 @@ var DagPutCmd = &cmds.Command{
res.SetOutput(&OutputObject{Cid: c}) res.SetOutput(&OutputObject{Cid: c})
return return
/* default:
case "btc": res.SetError(fmt.Errorf("unrecognized input encoding: %s", ienc), cmds.ErrNormal)
data, err := ioutil.ReadAll(fi) return
if err != nil {
res.SetError(err, cmds.ErrNormal)
return
}
blk, err := ipldbtc.DecodeBlock(data)
if err != nil {
res.SetError(err, cmds.ErrNormal)
return
}
c, err := n.DAG.Add(blk)
if err != nil {
res.SetError(err, cmds.ErrNormal)
return
}
res.SetOutput(&OutputObject{Cid: c})
return
*/
} }
}, },
Type: OutputObject{}, Type: OutputObject{},
...@@ -147,7 +120,13 @@ var DagGetCmd = &cmds.Command{ ...@@ -147,7 +120,13 @@ var DagGetCmd = &cmds.Command{
}, },
} }
func convertJsonToType(obj map[string]interface{}, format string) (node.Node, error) { func convertJsonToType(r io.Reader, format string) (node.Node, error) {
var obj map[string]interface{}
err := json.NewDecoder(r).Decode(&obj)
if err != nil {
return nil, err
}
switch format { switch format {
case "cbor", "dag-cbor": case "cbor", "dag-cbor":
return convertJsonToCbor(obj) return convertJsonToCbor(obj)
...@@ -166,6 +145,7 @@ func convertJsonToCbor(from map[string]interface{}) (*ipldcbor.Node, error) { ...@@ -166,6 +145,7 @@ func convertJsonToCbor(from map[string]interface{}) (*ipldcbor.Node, error) {
return ipldcbor.WrapMap(out) return ipldcbor.WrapMap(out)
} }
func convertMapSIToCbor(from map[string]interface{}) (map[interface{}]interface{}, error) { func convertMapSIToCbor(from map[string]interface{}) (map[interface{}]interface{}, error) {
to := make(map[interface{}]interface{}) to := make(map[interface{}]interface{})
for k, v := range from { for k, v := range from {
......
...@@ -14,7 +14,7 @@ import ( ...@@ -14,7 +14,7 @@ import (
logging "gx/ipfs/QmSpJByNKFX1sCsHBEp3R73FL4NF6FnQTEGyNAXHm2GS52/go-log" logging "gx/ipfs/QmSpJByNKFX1sCsHBEp3R73FL4NF6FnQTEGyNAXHm2GS52/go-log"
node "gx/ipfs/QmU7bFWQ793qmvNy7outdCaMfSDNk8uqhx4VNrxYj5fj5g/go-ipld-node" node "gx/ipfs/QmU7bFWQ793qmvNy7outdCaMfSDNk8uqhx4VNrxYj5fj5g/go-ipld-node"
cid "gx/ipfs/QmXfiyr2RWEXpVDdaYnD2HNiBk6UBddsvEP4RPfXb6nGqY/go-cid" cid "gx/ipfs/QmXfiyr2RWEXpVDdaYnD2HNiBk6UBddsvEP4RPfXb6nGqY/go-cid"
ipldcbor "gx/ipfs/QmYRzW9YDHVNCDbfFzbS7TEXAG1swE1yjq1basZ5WnJYH4/go-ipld-cbor" ipldcbor "gx/ipfs/QmY7L2aEa1rHjkSSbXJB8oC7825JTpUUvDygmM2JPQeqhr/go-ipld-cbor"
) )
var log = logging.Logger("merkledag") var log = logging.Logger("merkledag")
...@@ -108,10 +108,6 @@ func decodeBlock(b blocks.Block) (node.Node, error) { ...@@ -108,10 +108,6 @@ func decodeBlock(b blocks.Block) (node.Node, error) {
return NewRawNode(b.RawData()), nil return NewRawNode(b.RawData()), nil
case cid.CBOR: case cid.CBOR:
return ipldcbor.Decode(b.RawData()) return ipldcbor.Decode(b.RawData())
/*
case cid.Bitcoin:
return ipldbtc.DecodeBlock(b.RawData())
*/
default: default:
return nil, fmt.Errorf("unrecognized object type: %s", c.Type()) return nil, fmt.Errorf("unrecognized object type: %s", c.Type())
} }
......
...@@ -278,9 +278,9 @@ ...@@ -278,9 +278,9 @@
}, },
{ {
"author": "whyrusleeping", "author": "whyrusleeping",
"hash": "QmYRzW9YDHVNCDbfFzbS7TEXAG1swE1yjq1basZ5WnJYH4", "hash": "QmY7L2aEa1rHjkSSbXJB8oC7825JTpUUvDygmM2JPQeqhr",
"name": "go-ipld-cbor", "name": "go-ipld-cbor",
"version": "0.2.1" "version": "0.2.2"
} }
], ],
"gxVersion": "0.4.0", "gxVersion": "0.4.0",
......
#!/bin/sh
#
# Copyright (c) 2016 Jeromy Johnson
# MIT Licensed; see the LICENSE file in this repository.
#
test_description="Test dag command"
. lib/test-lib.sh
test_init_ipfs
test_expect_success "make a few test files" '
echo "foo" > file1 &&
echo "bar" > file2 &&
echo "baz" > file3 &&
echo "qux" > file4 &&
HASH1=$(ipfs add -q file1) &&
HASH2=$(ipfs add -q file2) &&
HASH3=$(ipfs add -q file3) &&
HASH4=$(ipfs add -q file4)
'
test_expect_success "make an ipld object in json" '
printf "{\"hello\":\"world\",\"cats\":[{\"/\":\"%s\"},{\"water\":{\"/\":\"%s\"}}],\"magic\":{\"/\":\"%s\"}}" $HASH1 $HASH2 $HASH3 > ipld_object
'
test_dag_cmd() {
test_expect_success "can add an ipld object" '
IPLDHASH=$(cat ipld_object | ipfs dag put)
'
test_expect_success "output looks correct" '
EXPHASH="zdpuApvChR5xM7ttbQmpmtna7wcShHi4gPyxUcWbB7nh8K7cN"
test $EXPHASH = $IPLDHASH
'
test_expect_success "various path traversals work" '
ipfs cat $IPLDHASH/cats/0 > out1 &&
ipfs cat $IPLDHASH/cats/1/water > out2 &&
ipfs cat $IPLDHASH/magic > out3
'
test_expect_success "outputs look correct" '
test_cmp file1 out1 &&
test_cmp file2 out2 &&
test_cmp file3 out3
'
}
# should work offline
test_dag_cmd
# should work online
test_launch_ipfs_daemon
test_dag_cmd
test_kill_ipfs_daemon
test_done
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论