lotus/chain/store/splitstore/liveset_test.go

145 lines
2.3 KiB
Go
Raw Normal View History

2020-11-26 16:58:03 +00:00
package splitstore
import (
"os"
"testing"
cid "github.com/ipfs/go-cid"
"github.com/multiformats/go-multihash"
)
2021-02-27 10:50:48 +00:00
func TestLMDBLiveSet(t *testing.T) {
2021-02-28 08:35:27 +00:00
testLiveSet(t, "lmdb")
2021-02-27 10:50:48 +00:00
}
2020-11-26 16:58:03 +00:00
2021-02-27 10:50:48 +00:00
func TestBoltLiveSet(t *testing.T) {
2021-02-28 08:35:27 +00:00
testLiveSet(t, "bolt")
2021-02-27 10:50:48 +00:00
}
2021-02-28 08:35:27 +00:00
func TestBloomLiveSet(t *testing.T) {
testLiveSet(t, "bloom")
}
func testLiveSet(t *testing.T, lsType string) {
2021-02-27 10:50:48 +00:00
t.Helper()
2020-11-26 16:58:03 +00:00
2021-02-27 10:50:48 +00:00
path := "/tmp/liveset-test"
err := os.MkdirAll(path, 0777)
2020-11-26 16:58:03 +00:00
if err != nil {
t.Fatal(err)
}
2021-02-28 08:35:27 +00:00
env, err := NewLiveSetEnv(path, lsType)
2020-11-26 16:58:03 +00:00
if err != nil {
t.Fatal(err)
}
2021-02-27 10:50:48 +00:00
defer env.Close() //nolint:errcheck
2020-11-26 16:58:03 +00:00
2021-02-28 19:46:27 +00:00
hotSet, err := env.NewLiveSet("hot", 0)
2020-11-26 16:58:03 +00:00
if err != nil {
t.Fatal(err)
}
2021-02-28 19:46:27 +00:00
coldSet, err := env.NewLiveSet("cold", 0)
2020-11-26 16:58:03 +00:00
if err != nil {
t.Fatal(err)
}
makeCid := func(key string) cid.Cid {
h, err := multihash.Sum([]byte(key), multihash.SHA2_256, -1)
if err != nil {
t.Fatal(err)
}
return cid.NewCidV1(cid.Raw, h)
}
mustHave := func(s LiveSet, cid cid.Cid) {
has, err := s.Has(cid)
if err != nil {
t.Fatal(err)
}
if !has {
t.Fatal("mark not found")
}
}
mustNotHave := func(s LiveSet, cid cid.Cid) {
has, err := s.Has(cid)
if err != nil {
t.Fatal(err)
}
if has {
t.Fatal("unexpected mark")
}
}
k1 := makeCid("a")
k2 := makeCid("b")
k3 := makeCid("c")
k4 := makeCid("d")
2020-11-26 17:47:54 +00:00
hotSet.Mark(k1) //nolint
hotSet.Mark(k2) //nolint
coldSet.Mark(k3) //nolint
2020-11-26 16:58:03 +00:00
mustHave(hotSet, k1)
mustHave(hotSet, k2)
mustNotHave(hotSet, k3)
mustNotHave(hotSet, k4)
mustNotHave(coldSet, k1)
mustNotHave(coldSet, k2)
mustHave(coldSet, k3)
mustNotHave(coldSet, k4)
// close them and reopen to redo the dance
err = hotSet.Close()
if err != nil {
t.Fatal(err)
}
err = coldSet.Close()
if err != nil {
t.Fatal(err)
}
2021-02-28 19:46:27 +00:00
hotSet, err = env.NewLiveSet("hot", 0)
2020-11-26 16:58:03 +00:00
if err != nil {
t.Fatal(err)
}
2021-02-28 19:46:27 +00:00
coldSet, err = env.NewLiveSet("cold", 0)
2020-11-26 16:58:03 +00:00
if err != nil {
t.Fatal(err)
}
2020-11-26 17:47:54 +00:00
hotSet.Mark(k3) //nolint
hotSet.Mark(k4) //nolint
coldSet.Mark(k1) //nolint
2020-11-26 16:58:03 +00:00
mustNotHave(hotSet, k1)
mustNotHave(hotSet, k2)
mustHave(hotSet, k3)
mustHave(hotSet, k4)
mustHave(coldSet, k1)
mustNotHave(coldSet, k2)
mustNotHave(coldSet, k3)
mustNotHave(coldSet, k4)
err = hotSet.Close()
if err != nil {
t.Fatal(err)
}
err = coldSet.Close()
if err != nil {
t.Fatal(err)
}
}