go-waku/waku/persistence/store_test.go

87 lines
2.7 KiB
Go
Raw Normal View History

2021-10-21 13:14:14 +00:00
package persistence
import (
"database/sql"
"testing"
"time"
2021-10-21 13:14:14 +00:00
_ "github.com/mattn/go-sqlite3" // Blank import to register the sqlite3 driver
"github.com/status-im/go-waku/tests"
2021-10-21 13:14:14 +00:00
"github.com/status-im/go-waku/waku/v2/protocol/pb"
2022-05-06 19:29:31 +00:00
"github.com/status-im/go-waku/waku/v2/utils"
2021-10-21 13:14:14 +00:00
"github.com/stretchr/testify/require"
2022-05-27 13:25:06 +00:00
"go.uber.org/zap"
2021-10-21 13:14:14 +00:00
)
func NewMock() *sql.DB {
db, err := sql.Open("sqlite3", ":memory:")
if err != nil {
2022-05-27 13:25:06 +00:00
utils.Logger().Fatal("opening a stub database connection", zap.Error(err))
2021-10-21 13:14:14 +00:00
}
return db
}
func createIndex(digest []byte, receiverTime int64) *pb.Index {
return &pb.Index{
Digest: digest,
ReceiverTime: receiverTime,
SenderTime: 1.0,
}
}
2021-10-21 13:14:14 +00:00
func TestDbStore(t *testing.T) {
db := NewMock()
option := WithDB(db)
2022-05-27 13:25:06 +00:00
store, err := NewDBStore(utils.Logger().Sugar(), option)
2021-10-21 13:14:14 +00:00
require.NoError(t, err)
res, err := store.GetAll()
require.NoError(t, err)
require.Empty(t, res)
err = store.Put(
createIndex([]byte("digest"), 1),
2021-10-21 13:14:14 +00:00
"test",
tests.CreateWakuMessage("test", 1),
2021-10-21 13:14:14 +00:00
)
require.NoError(t, err)
res, err = store.GetAll()
require.NoError(t, err)
require.NotEmpty(t, res)
}
func TestStoreRetention(t *testing.T) {
db := NewMock()
2022-05-27 13:25:06 +00:00
store, err := NewDBStore(utils.Logger().Sugar(), WithDB(db), WithRetentionPolicy(5, 20*time.Second))
require.NoError(t, err)
insertTime := time.Now()
_ = store.Put(createIndex([]byte{1}, insertTime.Add(-70*time.Second).UnixNano()), "test", tests.CreateWakuMessage("test", 1))
_ = store.Put(createIndex([]byte{2}, insertTime.Add(-60*time.Second).UnixNano()), "test", tests.CreateWakuMessage("test", 2))
_ = store.Put(createIndex([]byte{3}, insertTime.Add(-50*time.Second).UnixNano()), "test", tests.CreateWakuMessage("test", 3))
_ = store.Put(createIndex([]byte{4}, insertTime.Add(-40*time.Second).UnixNano()), "test", tests.CreateWakuMessage("test", 4))
_ = store.Put(createIndex([]byte{5}, insertTime.Add(-30*time.Second).UnixNano()), "test", tests.CreateWakuMessage("test", 5))
dbResults, err := store.GetAll()
require.NoError(t, err)
require.Len(t, dbResults, 5)
_ = store.Put(createIndex([]byte{6}, insertTime.Add(-20*time.Second).UnixNano()), "test", tests.CreateWakuMessage("test", 6))
_ = store.Put(createIndex([]byte{7}, insertTime.Add(-10*time.Second).UnixNano()), "test", tests.CreateWakuMessage("test", 7))
// This step simulates starting go-waku again from scratch
2022-05-27 13:25:06 +00:00
store, err = NewDBStore(utils.Logger().Sugar(), WithDB(db), WithRetentionPolicy(5, 40*time.Second))
require.NoError(t, err)
dbResults, err = store.GetAll()
require.NoError(t, err)
require.Len(t, dbResults, 3)
require.Equal(t, []byte{5}, dbResults[0].ID)
require.Equal(t, []byte{6}, dbResults[1].ID)
require.Equal(t, []byte{7}, dbResults[2].ID)
}