mirror of
https://github.com/anyproto/any-sync.git
synced 2025-06-07 21:47:02 +09:00
101 lines
2.3 KiB
Go
101 lines
2.3 KiB
Go
package badgerfilestore
|
|
|
|
import (
|
|
"context"
|
|
"github.com/dgraph-io/badger/v3"
|
|
blocks "github.com/ipfs/go-block-format"
|
|
"github.com/ipfs/go-cid"
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/require"
|
|
"os"
|
|
"testing"
|
|
"time"
|
|
)
|
|
|
|
var ctx = context.Background()
|
|
|
|
func TestBadgerStorage_Add(t *testing.T) {
|
|
tmpDir, err := os.MkdirTemp("", "badgerfilestore_*")
|
|
require.NoError(t, err)
|
|
defer os.RemoveAll(tmpDir)
|
|
db, err := badger.Open(badger.DefaultOptions(tmpDir))
|
|
require.NoError(t, err)
|
|
defer db.Close()
|
|
|
|
s := NewBadgerStorage(db)
|
|
bs := []blocks.Block{
|
|
blocks.NewBlock([]byte("1")),
|
|
blocks.NewBlock([]byte("2")),
|
|
blocks.NewBlock([]byte("3")),
|
|
}
|
|
assert.NoError(t, s.Add(ctx, bs))
|
|
|
|
}
|
|
|
|
func TestBadgerStorage_Get(t *testing.T) {
|
|
tmpDir, err := os.MkdirTemp("", "badgerfilestore_*")
|
|
require.NoError(t, err)
|
|
defer os.RemoveAll(tmpDir)
|
|
db, err := badger.Open(badger.DefaultOptions(tmpDir))
|
|
require.NoError(t, err)
|
|
defer db.Close()
|
|
|
|
s := NewBadgerStorage(db)
|
|
bs := []blocks.Block{
|
|
blocks.NewBlock([]byte("1")),
|
|
blocks.NewBlock([]byte("2")),
|
|
blocks.NewBlock([]byte("3")),
|
|
}
|
|
require.NoError(t, s.Add(ctx, bs))
|
|
|
|
cids := make([]cid.Cid, 0, len(bs))
|
|
for _, b := range bs {
|
|
cids = append(cids, b.Cid())
|
|
}
|
|
cids = append(cids, blocks.NewBlock([]byte("4")).Cid())
|
|
|
|
b, err := s.Get(ctx, bs[0].Cid())
|
|
require.NoError(t, err)
|
|
assert.Equal(t, bs[0].RawData(), b.RawData())
|
|
|
|
ecids, err := s.ExistsCids(ctx, cids)
|
|
require.NoError(t, err)
|
|
assert.Len(t, ecids, 3)
|
|
}
|
|
|
|
func TestBadgerStorage_GetMany(t *testing.T) {
|
|
tmpDir, err := os.MkdirTemp("", "badgerfilestore_*")
|
|
require.NoError(t, err)
|
|
defer os.RemoveAll(tmpDir)
|
|
db, err := badger.Open(badger.DefaultOptions(tmpDir))
|
|
require.NoError(t, err)
|
|
defer db.Close()
|
|
|
|
s := NewBadgerStorage(db)
|
|
bs := []blocks.Block{
|
|
blocks.NewBlock([]byte("1")),
|
|
blocks.NewBlock([]byte("2")),
|
|
blocks.NewBlock([]byte("3")),
|
|
}
|
|
require.NoError(t, s.Add(ctx, bs))
|
|
|
|
cids := make([]cid.Cid, 0, len(bs))
|
|
for _, b := range bs {
|
|
cids = append(cids, b.Cid())
|
|
}
|
|
|
|
res := s.GetMany(ctx, cids)
|
|
var resB []blocks.Block
|
|
for i := 0; i < len(bs); i++ {
|
|
select {
|
|
case b := <-res:
|
|
resB = append(resB, b)
|
|
case <-time.After(time.Second):
|
|
t.Error("timeout")
|
|
return
|
|
}
|
|
}
|
|
assert.Len(t, resB, 3)
|
|
_, ok := <-res
|
|
assert.False(t, ok)
|
|
}
|