From c8613b430070c9e3b2a737792db964bb168501f3 Mon Sep 17 00:00:00 2001 From: Kevin Atkinson Date: Thu, 21 Jun 2018 22:45:57 -0400 Subject: [PATCH] Add initial support for identity hashes. License: MIT Signed-off-by: Kevin Atkinson --- core/builder.go | 10 +++-- test/sharness/t0046-id-hash.sh | 74 ++++++++++++++++++++++++++++++++++ 2 files changed, 80 insertions(+), 4 deletions(-) create mode 100755 test/sharness/t0046-id-hash.sh diff --git a/core/builder.go b/core/builder.go index 0b3437dc383..da78b2a17db 100644 --- a/core/builder.go +++ b/core/builder.go @@ -204,18 +204,20 @@ func setupNode(ctx context.Context, n *IpfsNode, cfg *BuildCfg) error { opts.HasBloomFilterSize = 0 } - cbs, err := bstore.CachedBlockstore(ctx, bs, opts) + wbs, err := bstore.CachedBlockstore(ctx, bs, opts) if err != nil { return err } - n.BaseBlocks = cbs + wbs = bstore.NewIdStore(wbs) + + n.BaseBlocks = wbs n.GCLocker = bstore.NewGCLocker() - n.Blockstore = bstore.NewGCBlockstore(cbs, n.GCLocker) + n.Blockstore = bstore.NewGCBlockstore(wbs, n.GCLocker) if conf.Experimental.FilestoreEnabled || conf.Experimental.UrlstoreEnabled { // hash security - n.Filestore = filestore.NewFilestore(cbs, n.Repo.FileManager()) + n.Filestore = filestore.NewFilestore(wbs, n.Repo.FileManager()) n.Blockstore = bstore.NewGCBlockstore(n.Filestore, n.GCLocker) n.Blockstore = &verifbs.VerifBSGC{GCBlockstore: n.Blockstore} } diff --git a/test/sharness/t0046-id-hash.sh b/test/sharness/t0046-id-hash.sh new file mode 100755 index 00000000000..b265200ca11 --- /dev/null +++ b/test/sharness/t0046-id-hash.sh @@ -0,0 +1,74 @@ +#!/usr/bin/env bash + +test_description="Test basic operations with identity hash" + +. lib/test-lib.sh + +test_init_ipfs + +ID_HASH0=z25RnHTQ7DveGAsV6YDSDR8EkWvD +ID_HASH0_CONTENTS=jkD98jkD975hkD8 + +test_expect_success "can fetch random id hash" ' + ipfs cat $ID_HASH0 > expected && + echo $ID_HASH0_CONTENTS > actual && + test_cmp expected actual +' + +test_expect_success "can pin random id hash" ' + ipfs pin add $ID_HASH0 +' + +test_expect_success "ipfs add succeeds with id hash" ' + echo "djkd7jdkd7jkHHG" > junk.txt && + HASH=$(ipfs add -q --hash=id junk.txt) +' + +test_expect_success "content not actually added" ' + ipfs refs local | fgrep -q -v $HASH +' + +test_expect_success "but can fetch it anyway" ' + ipfs cat $HASH > actual && + test_cmp junk.txt actual +' + +test_expect_success "block rm does nothing" ' + ipfs pin rm $HASH && + ipfs block rm $HASH +' + +test_expect_success "can still fetch it" ' + ipfs cat $HASH > actual + test_cmp junk.txt actual +' + +test_expect_success "enable filestore" ' + ipfs config --json Experimental.FilestoreEnabled true +' + +test_expect_success "can fetch random id hash (filestore enabled)" ' + ipfs cat $ID_HASH0 > expected && + echo $ID_HASH0_CONTENTS > actual && + test_cmp expected actual +' + +test_expect_success "can pin random id hash (filestore enabled)" ' + ipfs pin add $ID_HASH0 +' + +test_expect_success "ipfs add succeeds with id hash and --nocopy" ' + echo "djkd7jdkd7jkHHG" > junk.txt && + HASH=$(ipfs add -q --hash=id --nocopy junk.txt) +' + +test_expect_success "content not actually added (filestore enabled)" ' + ipfs refs local | fgrep -q -v $HASH +' + +test_expect_success "but can fetch it anyway (filestore enabled)" ' + ipfs cat $HASH > actual && + test_cmp junk.txt actual +' + +test_done