go-waku/waku/v2/protocol/store/waku_resume_test.go

176 lines
5.6 KiB
Go
Raw Normal View History

package store
import (
"context"
"testing"
"github.com/libp2p/go-libp2p"
2022-10-19 19:39:32 +00:00
"github.com/libp2p/go-libp2p/core/peer"
"github.com/libp2p/go-libp2p/core/peerstore"
"github.com/stretchr/testify/require"
"github.com/waku-org/go-waku/tests"
"github.com/waku-org/go-waku/waku/v2/protocol"
"github.com/waku-org/go-waku/waku/v2/protocol/pb"
2023-05-05 09:49:15 +00:00
"github.com/waku-org/go-waku/waku/v2/protocol/relay"
2022-12-09 03:08:04 +00:00
"github.com/waku-org/go-waku/waku/v2/timesource"
"github.com/waku-org/go-waku/waku/v2/utils"
)
func TestFindLastSeenMessage(t *testing.T) {
now := utils.GetUnixEpoch()
msg1 := protocol.NewEnvelope(tests.CreateWakuMessage("1", now+1), utils.GetUnixEpoch(), "test")
msg2 := protocol.NewEnvelope(tests.CreateWakuMessage("2", now+2), utils.GetUnixEpoch(), "test")
msg3 := protocol.NewEnvelope(tests.CreateWakuMessage("3", now+3), utils.GetUnixEpoch(), "test")
msg4 := protocol.NewEnvelope(tests.CreateWakuMessage("4", now+4), utils.GetUnixEpoch(), "test")
msg5 := protocol.NewEnvelope(tests.CreateWakuMessage("5", now+5), utils.GetUnixEpoch(), "test")
s := NewWakuStore(MemoryDB(t), nil, timesource.NewDefaultClock(), utils.Logger())
_ = s.storeMessage(msg1)
_ = s.storeMessage(msg3)
_ = s.storeMessage(msg5)
_ = s.storeMessage(msg2)
_ = s.storeMessage(msg4)
lastSeen, err := s.findLastSeen()
require.NoError(t, err)
require.Equal(t, msg5.Message().Timestamp, lastSeen)
}
func TestResume(t *testing.T) {
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
2022-03-22 13:12:58 +00:00
host1, err := libp2p.New(libp2p.DefaultTransports, libp2p.ListenAddrStrings("/ip4/0.0.0.0/tcp/0"))
require.NoError(t, err)
s1 := NewWakuStore(MemoryDB(t), nil, timesource.NewDefaultClock(), utils.Logger())
2023-04-17 00:04:12 +00:00
s1.SetHost(host1)
2023-05-05 09:49:15 +00:00
err = s1.Start(ctx, relay.NoopSubscription())
2022-12-09 03:08:04 +00:00
require.NoError(t, err)
defer s1.Stop()
now := utils.GetUnixEpoch()
for i := 0; i < 10; i++ {
var contentTopic = "1"
if i%2 == 0 {
contentTopic = "2"
}
wakuMessage := tests.CreateWakuMessage(contentTopic, now+int64(i+1))
msg := protocol.NewEnvelope(wakuMessage, utils.GetUnixEpoch(), "test")
_ = s1.storeMessage(msg)
}
2022-03-22 13:12:58 +00:00
host2, err := libp2p.New(libp2p.DefaultTransports, libp2p.ListenAddrStrings("/ip4/0.0.0.0/tcp/0"))
require.NoError(t, err)
s2 := NewWakuStore(MemoryDB(t), nil, timesource.NewDefaultClock(), utils.Logger())
2023-04-17 00:04:12 +00:00
s2.SetHost(host2)
2023-05-05 09:49:15 +00:00
err = s2.Start(ctx, relay.NoopSubscription())
2022-12-09 03:08:04 +00:00
require.NoError(t, err)
defer s2.Stop()
host2.Peerstore().AddAddr(host1.ID(), tests.GetHostAddress(host1), peerstore.PermanentAddrTTL)
2023-02-16 16:17:52 +00:00
err = host2.Peerstore().AddProtocols(host1.ID(), StoreID_v20beta4)
require.NoError(t, err)
msgCount, err := s2.Resume(ctx, "test", []peer.ID{host1.ID()})
require.NoError(t, err)
require.Equal(t, 10, msgCount)
allMsgs, err := s2.msgProvider.GetAll()
require.NoError(t, err)
require.Len(t, allMsgs, 10)
// Test duplication
msgCount, err = s2.Resume(ctx, "test", []peer.ID{host1.ID()})
require.NoError(t, err)
require.Equal(t, 0, msgCount)
}
func TestResumeWithListOfPeers(t *testing.T) {
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
// Host that does not support store protocol
2022-03-22 13:12:58 +00:00
invalidHost, err := libp2p.New(libp2p.DefaultTransports, libp2p.ListenAddrStrings("/ip4/0.0.0.0/tcp/0"))
require.NoError(t, err)
2022-03-22 13:12:58 +00:00
host1, err := libp2p.New(libp2p.DefaultTransports, libp2p.ListenAddrStrings("/ip4/0.0.0.0/tcp/0"))
require.NoError(t, err)
s1 := NewWakuStore(MemoryDB(t), nil, timesource.NewDefaultClock(), utils.Logger())
2023-04-17 00:04:12 +00:00
s1.SetHost(host1)
2023-05-05 09:49:15 +00:00
err = s1.Start(ctx, relay.NoopSubscription())
2022-12-09 03:08:04 +00:00
require.NoError(t, err)
defer s1.Stop()
msg0 := &pb.WakuMessage{Payload: []byte{1, 2, 3}, ContentTopic: "2", Version: 0, Timestamp: utils.GetUnixEpoch()}
_ = s1.storeMessage(protocol.NewEnvelope(msg0, utils.GetUnixEpoch(), "test"))
2022-03-22 13:12:58 +00:00
host2, err := libp2p.New(libp2p.DefaultTransports, libp2p.ListenAddrStrings("/ip4/0.0.0.0/tcp/0"))
require.NoError(t, err)
s2 := NewWakuStore(MemoryDB(t), nil, timesource.NewDefaultClock(), utils.Logger())
2023-04-17 00:04:12 +00:00
s2.SetHost(host2)
2023-05-05 09:49:15 +00:00
err = s2.Start(ctx, relay.NoopSubscription())
2022-12-09 03:08:04 +00:00
require.NoError(t, err)
defer s2.Stop()
host2.Peerstore().AddAddr(host1.ID(), tests.GetHostAddress(host1), peerstore.PermanentAddrTTL)
2023-02-16 16:17:52 +00:00
err = host2.Peerstore().AddProtocols(host1.ID(), StoreID_v20beta4)
require.NoError(t, err)
msgCount, err := s2.Resume(ctx, "test", []peer.ID{invalidHost.ID(), host1.ID()})
require.NoError(t, err)
require.Equal(t, 1, msgCount)
allMsgs, err := s2.msgProvider.GetAll()
require.NoError(t, err)
require.Len(t, allMsgs, 1)
}
func TestResumeWithoutSpecifyingPeer(t *testing.T) {
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
2022-03-22 13:12:58 +00:00
host1, err := libp2p.New(libp2p.DefaultTransports, libp2p.ListenAddrStrings("/ip4/0.0.0.0/tcp/0"))
require.NoError(t, err)
s1 := NewWakuStore(MemoryDB(t), nil, timesource.NewDefaultClock(), utils.Logger())
2023-04-17 00:04:12 +00:00
s1.SetHost(host1)
2023-05-05 09:49:15 +00:00
err = s1.Start(ctx, relay.NoopSubscription())
2022-12-09 03:08:04 +00:00
require.NoError(t, err)
defer s1.Stop()
msg0 := &pb.WakuMessage{Payload: []byte{1, 2, 3}, ContentTopic: "2", Version: 0, Timestamp: 0}
_ = s1.storeMessage(protocol.NewEnvelope(msg0, utils.GetUnixEpoch(), "test"))
2022-03-22 13:12:58 +00:00
host2, err := libp2p.New(libp2p.DefaultTransports, libp2p.ListenAddrStrings("/ip4/0.0.0.0/tcp/0"))
require.NoError(t, err)
s2 := NewWakuStore(MemoryDB(t), nil, timesource.NewDefaultClock(), utils.Logger())
2023-04-17 00:04:12 +00:00
s2.SetHost(host2)
2023-05-05 09:49:15 +00:00
err = s2.Start(ctx, relay.NoopSubscription())
2022-12-09 03:08:04 +00:00
require.NoError(t, err)
defer s2.Stop()
host2.Peerstore().AddAddr(host1.ID(), tests.GetHostAddress(host1), peerstore.PermanentAddrTTL)
2023-02-16 16:17:52 +00:00
err = host2.Peerstore().AddProtocols(host1.ID(), StoreID_v20beta4)
require.NoError(t, err)
2022-11-25 20:54:11 +00:00
_, err = s2.Resume(ctx, "test", []peer.ID{})
require.Error(t, err)
}