From bc84ffafe30916adca1db07da9729c034cc45dff Mon Sep 17 00:00:00 2001 From: Henry Date: Sat, 7 Mar 2015 14:01:54 +0100 Subject: [PATCH 1/2] enable stdin input for ipfs object put --- core/commands/object.go | 33 +++++++++++++++++++++------------ 1 file changed, 21 insertions(+), 12 deletions(-) diff --git a/core/commands/object.go b/core/commands/object.go index 23707c211..80b6f73a6 100644 --- a/core/commands/object.go +++ b/core/commands/object.go @@ -35,11 +35,11 @@ var ObjectCmd = &cmds.Command{ 'ipfs object' is a plumbing command used to manipulate DAG objects directly.`, Synopsis: ` -ipfs object get - Get the DAG node named by -ipfs object put - Stores input, outputs its key -ipfs object data - Outputs raw bytes in an object -ipfs object links - Outputs links pointed to by object -ipfs object stat - Outputs statistics of object +ipfs object get - Get the DAG node named by +ipfs object put - Stores input, outputs its key +ipfs object data - Outputs raw bytes in an object +ipfs object links - Outputs links pointed to by object +ipfs object stat - Outputs statistics of object `, }, @@ -274,16 +274,18 @@ It reads from stdin, and the output is a base58 encoded multihash. 'ipfs object put' is a plumbing command for storing DAG nodes. It reads from stdin, and the output is a base58 encoded multihash. -Data should be in the format specified by . - may be one of the following: +Data should be in the format specified by the --inputenc flag. +--inputenc may be one of the following: * "protobuf" - * "json" + * "json" (default) `, }, Arguments: []cmds.Argument{ - cmds.FileArg("data", true, false, "Data to be stored as a DAG object"), - cmds.StringArg("encoding", true, false, "Encoding type of , either \"protobuf\" or \"json\""), + cmds.FileArg("data", true, false, "Data to be stored as a DAG object").EnableStdin(), + }, + Options: []cmds.Option{ + cmds.StringOption("inputenc", "Encoding type of input data, either \"protobuf\" or \"json\""), }, Run: func(req cmds.Request, res cmds.Response) { n, err := req.Context().GetNode() @@ -298,9 +300,16 @@ Data should be in the format specified by . return } - encoding := req.Arguments()[0] + inputenc, found, err := req.Option("inputenc").String() + if err != nil { + res.SetError(err, cmds.ErrNormal) + return + } + if !found { + inputenc = "json" + } - output, err := objectPut(n, input, encoding) + output, err := objectPut(n, input, inputenc) if err != nil { errType := cmds.ErrNormal if err == ErrUnknownObjectEnc { From 2a0cd6d3d35ebc0aed9046f98f9b11dff5198131 Mon Sep 17 00:00:00 2001 From: Henry Date: Sat, 7 Mar 2015 13:25:55 +0100 Subject: [PATCH 2/2] object: added sharness tests for get, put and stat --- .../t0051-object-data/expected_getOut | 4 + test/sharness/t0051-object-data/testPut.json | 3 + test/sharness/t0051-object-data/testPut.pb | 2 + test/sharness/t0051-object.sh | 86 +++++++++++++++++++ 4 files changed, 95 insertions(+) create mode 100644 test/sharness/t0051-object-data/expected_getOut create mode 100644 test/sharness/t0051-object-data/testPut.json create mode 100644 test/sharness/t0051-object-data/testPut.pb create mode 100755 test/sharness/t0051-object.sh diff --git a/test/sharness/t0051-object-data/expected_getOut b/test/sharness/t0051-object-data/expected_getOut new file mode 100644 index 000000000..d4f1d9263 --- /dev/null +++ b/test/sharness/t0051-object-data/expected_getOut @@ -0,0 +1,4 @@ +{ + "Links": [], + "Data": "\u0008\u0002\u0012\nHello Mars\u0018\n" +} \ No newline at end of file diff --git a/test/sharness/t0051-object-data/testPut.json b/test/sharness/t0051-object-data/testPut.json new file mode 100644 index 000000000..c97f4ec0b --- /dev/null +++ b/test/sharness/t0051-object-data/testPut.json @@ -0,0 +1,3 @@ +{ + "Data": "test json for sharness test" +} diff --git a/test/sharness/t0051-object-data/testPut.pb b/test/sharness/t0051-object-data/testPut.pb new file mode 100644 index 000000000..20c2ca777 --- /dev/null +++ b/test/sharness/t0051-object-data/testPut.pb @@ -0,0 +1,2 @@ + +test json for sharness test \ No newline at end of file diff --git a/test/sharness/t0051-object.sh b/test/sharness/t0051-object.sh new file mode 100755 index 000000000..37a025d60 --- /dev/null +++ b/test/sharness/t0051-object.sh @@ -0,0 +1,86 @@ +#!/bin/sh +# +# Copyright (c) 2015 Henry Bubert +# MIT Licensed; see the LICENSE file in this repository. +# + +test_description="Test object command" + +. lib/test-lib.sh + +test_init_ipfs + +test_expect_success "'ipfs add testData' succeeds" ' + printf "Hello Mars" >expected_in && + ipfs add expected_in >actual_Addout +' + +test_expect_success "'ipfs add testData' output looks good" ' + HASH="QmWkHFpYBZ9mpPRreRbMhhYWXfUhBAue3JkbbpFqwowSRb" && + echo "added $HASH expected_in" >expected_Addout && + test_cmp expected_Addout actual_Addout +' + +test_expect_success "'ipfs object get' succeeds" ' + ipfs object get $HASH >actual_getOut +' + +test_expect_success "'ipfs object get' output looks good" ' + test_cmp ../t0051-object-data/expected_getOut actual_getOut +' + +test_expect_success "'ipfs object stat' succeeds" ' + ipfs object stat $HASH >actual_stat +' + +test_expect_success "'ipfs object get' output looks good" ' +echo "NumLinks: 0" >> expected_stat && +echo "BlockSize: 18" >> expected_stat && +echo "LinksSize: 2" >> expected_stat && +echo "DataSize: 16" >> expected_stat && +echo "CumulativeSize: 18" >> expected_stat && + test_cmp expected_stat actual_stat +' + +test_expect_success "'ipfs object put file.json' succeeds" ' + ipfs object put ../t0051-object-data/testPut.json > actual_putOut +' + +test_expect_success "'ipfs object put file.json' output looks good" ' + HASH="QmUTSAdDi2xsNkDtLqjFgQDMEn5di3Ab9eqbrt4gaiNbUD" && + printf "added $HASH" > expected_putOut && + test_cmp expected_putOut actual_putOut +' + +test_expect_success "'ipfs object put file.pb' succeeds" ' + ipfs object put --inputenc=protobuf ../t0051-object-data/testPut.pb > actual_putOut +' + +test_expect_success "'ipfs object put file.pb' output looks good" ' + HASH="QmUTSAdDi2xsNkDtLqjFgQDMEn5di3Ab9eqbrt4gaiNbUD" && + printf "added $HASH" > expected_putOut && + test_cmp expected_putOut actual_putOut +' + +test_expect_success "'ipfs object put' from stdin succeeds" ' + cat ../t0051-object-data/testPut.json | ipfs object put > actual_putStdinOut +' + +test_expect_success "'ipfs object put' from stdin output looks good" ' + HASH="QmUTSAdDi2xsNkDtLqjFgQDMEn5di3Ab9eqbrt4gaiNbUD" && + printf "added $HASH" > expected_putStdinOut && + test_cmp expected_putStdinOut actual_putStdinOut +' + +test_expect_success "'ipfs object put' from stdin (pb) succeeds" ' + cat ../t0051-object-data/testPut.pb | ipfs object put --inputenc=protobuf > actual_putPbStdinOut +' + +test_expect_success "'ipfs object put' from stdin (pb) output looks good" ' + HASH="QmUTSAdDi2xsNkDtLqjFgQDMEn5di3Ab9eqbrt4gaiNbUD" && + printf "added $HASH" > expected_putStdinOut && + test_cmp expected_putStdinOut actual_putPbStdinOut +' + + +test_done