offline_test.go 1.45 KB
Newer Older
Jeromy's avatar
Jeromy committed
1
package offline
2 3

import (
4
	"context"
5 6
	"testing"

7 8 9 10 11 12 13
	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"
14 15 16
)

func TestBlockReturnsErr(t *testing.T) {
17
	off := Exchange(bstore())
18 19
	c := cid.NewCidV0(u.Hash([]byte("foo")))
	_, err := off.GetBlock(context.Background(), c)
20 21 22 23 24 25 26
	if err != nil {
		return // as desired
	}
	t.Fail()
}

func TestHasBlockReturnsNil(t *testing.T) {
27 28
	store := bstore()
	ex := Exchange(store)
29
	block := blocks.NewBlock([]byte("data"))
30

31
	err := ex.HasBlock(block)
32
	if err != nil {
33 34 35
		t.Fail()
	}

36
	if _, err := store.Get(block.Cid()); err != nil {
37 38 39 40 41 42 43 44 45 46 47 48
		t.Fatal(err)
	}
}

func TestGetBlocks(t *testing.T) {
	store := bstore()
	ex := Exchange(store)
	g := blocksutil.NewBlockGenerator()

	expected := g.Blocks(2)

	for _, b := range expected {
49
		if err := ex.HasBlock(b); err != nil {
50 51
			t.Fail()
		}
52
	}
53

54 55
	request := func() []cid.Cid {
		var ks []cid.Cid
56 57

		for _, b := range expected {
58
			ks = append(ks, b.Cid())
59 60 61 62 63 64 65 66 67 68
		}
		return ks
	}()

	received, err := ex.GetBlocks(context.Background(), request)
	if err != nil {
		t.Fatal(err)
	}

	var count int
69
	for range received {
70 71 72 73 74 75 76 77 78
		count++
	}
	if len(expected) != count {
		t.Fail()
	}
}

func bstore() blockstore.Blockstore {
	return blockstore.NewBlockstore(ds_sync.MutexWrap(ds.NewMapDatastore()))
79
}