From 1b4817eaca49c51c37b8301de56f90710d363cb7 Mon Sep 17 00:00:00 2001
From: Jeromy <jeromyj@gmail.com>
Date: Wed, 18 Mar 2015 16:48:06 -0700
Subject: [PATCH] test for pinning semantics

---
 pin_test.go | 38 ++++++++++++++++++++++++++++++++++++++
 1 file changed, 38 insertions(+)

diff --git a/pin_test.go b/pin_test.go
index c8d18f0..12db39b 100644
--- a/pin_test.go
+++ b/pin_test.go
@@ -152,3 +152,41 @@ func TestPinnerBasic(t *testing.T) {
 		t.Fatal("could not find recursively pinned node")
 	}
 }
+
+func TestDuplicateSemantics(t *testing.T) {
+	dstore := dssync.MutexWrap(ds.NewMapDatastore())
+	bstore := blockstore.NewBlockstore(dstore)
+	bserv, err := bs.New(bstore, offline.Exchange(bstore))
+	if err != nil {
+		t.Fatal(err)
+	}
+
+	dserv := mdag.NewDAGService(bserv)
+
+	// TODO does pinner need to share datastore with blockservice?
+	p := NewPinner(dstore, dserv)
+
+	a, _ := randNode()
+	_, err = dserv.Add(a)
+	if err != nil {
+		t.Fatal(err)
+	}
+
+	// pin is recursively
+	err = p.Pin(a, true)
+	if err != nil {
+		t.Fatal(err)
+	}
+
+	// pinning directly should fail
+	err = p.Pin(a, false)
+	if err == nil {
+		t.Fatal("expected direct pin to fail")
+	}
+
+	// pinning recursively again should succeed
+	err = p.Pin(a, true)
+	if err != nil {
+		t.Fatal(err)
+	}
+}
-- 
GitLab