package offline import ( "context" "testing" blocks "github.com/ipfs/go-block-format" cid "github.com/ipfs/go-cid" ds "github.com/ipfs/go-datastore" ds_sync "github.com/ipfs/go-datastore/sync" blockstore "github.com/ipfs/go-ipfs-blockstore" blocksutil "github.com/ipfs/go-ipfs-blocksutil" u "github.com/ipfs/go-ipfs-util" ) func TestBlockReturnsErr(t *testing.T) { off := Exchange(bstore()) c := cid.NewCidV0(u.Hash([]byte("foo"))) _, err := off.GetBlock(context.Background(), c) if err != nil { return // as desired } t.Fail() } func TestHasBlockReturnsNil(t *testing.T) { store := bstore() ex := Exchange(store) block := blocks.NewBlock([]byte("data")) err := ex.HasBlock(block) if err != nil { t.Fail() } if _, err := store.Get(block.Cid()); err != nil { t.Fatal(err) } } func TestGetBlocks(t *testing.T) { store := bstore() ex := Exchange(store) g := blocksutil.NewBlockGenerator() expected := g.Blocks(2) for _, b := range expected { if err := ex.HasBlock(b); err != nil { t.Fail() } } request := func() []cid.Cid { var ks []cid.Cid for _, b := range expected { ks = append(ks, b.Cid()) } return ks }() received, err := ex.GetBlocks(context.Background(), request) if err != nil { t.Fatal(err) } var count int for range received { count++ } if len(expected) != count { t.Fail() } } func bstore() blockstore.Blockstore { return blockstore.NewBlockstore(ds_sync.MutexWrap(ds.NewMapDatastore())) }