-
Notifications
You must be signed in to change notification settings - Fork 38
/
Copy pathunverifiedblockstore_test.go
47 lines (39 loc) · 1.88 KB
/
unverifiedblockstore_test.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
package unverifiedblockstore
import (
"bytes"
"io"
"testing"
"github.com/ipld/go-ipld-prime"
cidlink "github.com/ipld/go-ipld-prime/linking/cid"
"github.com/stretchr/testify/require"
"go.opentelemetry.io/otel/trace"
"github.com/ipfs/go-graphsync/testutil"
)
func TestVerifyBlockPresent(t *testing.T) {
blocksWritten := make(map[ipld.Link][]byte)
lsys := testutil.NewTestStore(blocksWritten)
unverifiedBlockStore := New(lsys.StorageWriteOpener)
block := testutil.GenerateBlocksOfSize(1, 100)[0]
reader, err := lsys.StorageReadOpener(ipld.LinkContext{}, cidlink.Link{Cid: block.Cid()})
require.Nil(t, reader)
require.Error(t, err, "block should not be loadable till it's verified and stored")
data, err := unverifiedBlockStore.VerifyBlock(cidlink.Link{Cid: block.Cid()}, ipld.LinkContext{})
require.Nil(t, data)
require.Error(t, err, "block should not be verifiable till it's added as an unverifiable block")
unverifiedBlockStore.AddUnverifiedBlock(trace.Link{}, cidlink.Link{Cid: block.Cid()}, block.RawData())
reader, err = lsys.StorageReadOpener(ipld.LinkContext{}, cidlink.Link{Cid: block.Cid()})
require.Nil(t, reader)
require.Error(t, err, "block should not be loadable till it's verified")
data, err = unverifiedBlockStore.VerifyBlock(cidlink.Link{Cid: block.Cid()}, ipld.LinkContext{})
require.NoError(t, err)
require.Equal(t, block.RawData(), data, "block should be returned on verification if added")
reader, err = lsys.StorageReadOpener(ipld.LinkContext{}, cidlink.Link{Cid: block.Cid()})
require.NoError(t, err)
var buffer bytes.Buffer
_, err = io.Copy(&buffer, reader)
require.NoError(t, err)
require.Equal(t, block.RawData(), buffer.Bytes(), "block should be stored and loadable after verification")
data, err = unverifiedBlockStore.VerifyBlock(cidlink.Link{Cid: block.Cid()}, ipld.LinkContext{})
require.Nil(t, data)
require.Error(t, err, "block cannot be verified twice")
}