From 9854683daa796e0a78cbe8d3c83de898d20e9f03 Mon Sep 17 00:00:00 2001
From: Jakub Sztandera <kubuxu@protonmail.ch>
Date: Mon, 10 Oct 2016 10:58:48 -0400
Subject: [PATCH] test: check if NewWriteThrough is not calling Has

License: MIT
Signed-off-by: Jakub Sztandera <kubuxu@protonmail.ch>
---
 blocks/blocksutil/block_generator.go |  6 ++--
 blockservice/blockservice.go         |  2 +-
 blockservice/blockservice_test.go    | 44 ++++++++++++++++++++++++++++
 3 files changed, 48 insertions(+), 4 deletions(-)
 create mode 100644 blockservice/blockservice_test.go

diff --git a/blocks/blocksutil/block_generator.go b/blocks/blocksutil/block_generator.go
index d70f79470..438eac1a5 100644
--- a/blocks/blocksutil/block_generator.go
+++ b/blocks/blocksutil/block_generator.go
@@ -10,13 +10,13 @@ type BlockGenerator struct {
 	seq int
 }
 
-func (bg *BlockGenerator) Next() blocks.Block {
+func (bg *BlockGenerator) Next() *blocks.BasicBlock {
 	bg.seq++
 	return blocks.NewBlock([]byte(string(bg.seq)))
 }
 
-func (bg *BlockGenerator) Blocks(n int) []blocks.Block {
-	blocks := make([]blocks.Block, 0)
+func (bg *BlockGenerator) Blocks(n int) []*blocks.BasicBlock {
+	blocks := make([]*blocks.BasicBlock, 0)
 	for i := 0; i < n; i++ {
 		b := bg.Next()
 		blocks = append(blocks, b)
diff --git a/blockservice/blockservice.go b/blockservice/blockservice.go
index 8ecec71f9..d4461b66d 100644
--- a/blockservice/blockservice.go
+++ b/blockservice/blockservice.go
@@ -4,6 +4,7 @@
 package blockservice
 
 import (
+	"context"
 	"errors"
 	"fmt"
 
@@ -11,7 +12,6 @@ import (
 	"github.com/ipfs/go-ipfs/blocks/blockstore"
 	exchange "github.com/ipfs/go-ipfs/exchange"
 
-	context "context"
 	logging "gx/ipfs/QmSpJByNKFX1sCsHBEp3R73FL4NF6FnQTEGyNAXHm2GS52/go-log"
 	cid "gx/ipfs/QmakyCk6Vnn16WEKjbkxieZmM2YLTzkFWizbmGowoYPjro/go-cid"
 )
diff --git a/blockservice/blockservice_test.go b/blockservice/blockservice_test.go
new file mode 100644
index 000000000..82244c1cd
--- /dev/null
+++ b/blockservice/blockservice_test.go
@@ -0,0 +1,44 @@
+package blockservice
+
+import (
+	"testing"
+
+	"github.com/ipfs/go-ipfs/blocks/blockstore"
+	butil "github.com/ipfs/go-ipfs/blocks/blocksutil"
+	offline "github.com/ipfs/go-ipfs/exchange/offline"
+
+	cid "gx/ipfs/QmakyCk6Vnn16WEKjbkxieZmM2YLTzkFWizbmGowoYPjro/go-cid"
+	ds "gx/ipfs/QmbzuUusHqaLLoNTDEVLcSF6vZDHZDLPC7p4bztRvvkXxU/go-datastore"
+	dssync "gx/ipfs/QmbzuUusHqaLLoNTDEVLcSF6vZDHZDLPC7p4bztRvvkXxU/go-datastore/sync"
+)
+
+func TestWriteThroughWorks(t *testing.T) {
+	dstore := dssync.MutexWrap(ds.NewMapDatastore())
+	bstore := HasFailingBlockstore{
+		blockstore.NewBlockstore(dstore),
+		t,
+		true,
+	}
+	exch := offline.Exchange(bstore)
+	bserv := NewWriteThrough(bstore, exch)
+	bgen := butil.NewBlockGenerator()
+
+	bserv.AddBlock(bgen.Next())
+}
+
+var _ blockstore.GCBlockstore = (*HasFailingBlockstore)(nil)
+
+type HasFailingBlockstore struct {
+	blockstore.GCBlockstore
+	t    *testing.T
+	Fail bool
+}
+
+func (bs HasFailingBlockstore) Has(k *cid.Cid) (bool, error) {
+	if bs.Fail {
+		bs.t.Fatal("Has shouldn't be called")
+		return false, nil
+	}
+	return bs.GCBlockstore.Has(k)
+
+}
-- 
GitLab