134 lines
3.1 KiB
Go
134 lines
3.1 KiB
Go
|
package peersyncing
|
||
|
|
||
|
import (
|
||
|
"testing"
|
||
|
|
||
|
"github.com/stretchr/testify/suite"
|
||
|
|
||
|
"github.com/status-im/status-go/appdatabase"
|
||
|
"github.com/status-im/status-go/protocol/sqlite"
|
||
|
"github.com/status-im/status-go/t/helpers"
|
||
|
)
|
||
|
|
||
|
func TestPeerSyncingSuite(t *testing.T) {
|
||
|
suite.Run(t, new(PeerSyncingSuite))
|
||
|
}
|
||
|
|
||
|
type PeerSyncingSuite struct {
|
||
|
suite.Suite
|
||
|
p *PeerSyncing
|
||
|
}
|
||
|
|
||
|
func (s *PeerSyncingSuite) SetupTest() {
|
||
|
db, err := helpers.SetupTestMemorySQLDB(appdatabase.DbInitializer{})
|
||
|
s.Require().NoError(err)
|
||
|
|
||
|
err = sqlite.Migrate(db)
|
||
|
s.Require().NoError(err)
|
||
|
|
||
|
s.p = New(Config{Database: db})
|
||
|
}
|
||
|
|
||
|
var testGroupID = []byte("group-id")
|
||
|
|
||
|
func (s *PeerSyncingSuite) TestBasic() {
|
||
|
|
||
|
syncMessage := SyncMessage{
|
||
|
ID: []byte("test-id"),
|
||
|
GroupID: testGroupID,
|
||
|
Type: SyncMessageCommunityType,
|
||
|
Payload: []byte("test"),
|
||
|
Timestamp: 1,
|
||
|
}
|
||
|
|
||
|
s.Require().NoError(s.p.Add(syncMessage))
|
||
|
|
||
|
allMessages, err := s.p.AvailableMessages()
|
||
|
|
||
|
s.Require().NoError(err)
|
||
|
s.Require().Len(allMessages, 1)
|
||
|
|
||
|
byGroupID, err := s.p.AvailableMessagesByGroupID(syncMessage.GroupID, 10)
|
||
|
|
||
|
s.Require().NoError(err)
|
||
|
s.Require().Len(byGroupID, 1)
|
||
|
|
||
|
byGroupID, err = s.p.AvailableMessagesByGroupID([]byte("random-group-id"), 10)
|
||
|
|
||
|
s.Require().NoError(err)
|
||
|
s.Require().Len(byGroupID, 0)
|
||
|
|
||
|
newSyncMessage := SyncMessage{
|
||
|
ID: []byte("test-id-2"),
|
||
|
GroupID: testGroupID,
|
||
|
Type: SyncMessageCommunityType,
|
||
|
Payload: []byte("test-2"),
|
||
|
Timestamp: 2,
|
||
|
}
|
||
|
|
||
|
wantedMessages, err := s.p.OnOffer([]SyncMessage{syncMessage, newSyncMessage})
|
||
|
s.Require().NoError(err)
|
||
|
|
||
|
s.Require().Len(wantedMessages, 1)
|
||
|
s.Require().Equal(newSyncMessage.ID, wantedMessages[0].ID)
|
||
|
}
|
||
|
|
||
|
func (s *PeerSyncingSuite) TestOrderAndLimit() {
|
||
|
|
||
|
syncMessage1 := SyncMessage{
|
||
|
ID: []byte("test-id-1"),
|
||
|
GroupID: testGroupID,
|
||
|
Type: SyncMessageCommunityType,
|
||
|
Payload: []byte("test"),
|
||
|
Timestamp: 1,
|
||
|
}
|
||
|
|
||
|
syncMessage2 := SyncMessage{
|
||
|
ID: []byte("test-id-2"),
|
||
|
GroupID: testGroupID,
|
||
|
Type: SyncMessageCommunityType,
|
||
|
Payload: []byte("test"),
|
||
|
Timestamp: 2,
|
||
|
}
|
||
|
|
||
|
syncMessage3 := SyncMessage{
|
||
|
ID: []byte("test-id-3"),
|
||
|
GroupID: testGroupID,
|
||
|
Type: SyncMessageCommunityType,
|
||
|
Payload: []byte("test"),
|
||
|
Timestamp: 3,
|
||
|
}
|
||
|
|
||
|
syncMessage4 := SyncMessage{
|
||
|
ID: []byte("test-id-4"),
|
||
|
GroupID: testGroupID,
|
||
|
Type: SyncMessageCommunityType,
|
||
|
Payload: []byte("test"),
|
||
|
Timestamp: 4,
|
||
|
}
|
||
|
|
||
|
s.Require().NoError(s.p.Add(syncMessage1))
|
||
|
s.Require().NoError(s.p.Add(syncMessage2))
|
||
|
s.Require().NoError(s.p.Add(syncMessage3))
|
||
|
s.Require().NoError(s.p.Add(syncMessage4))
|
||
|
|
||
|
byGroupID, err := s.p.AvailableMessagesByGroupID(testGroupID, 10)
|
||
|
|
||
|
s.Require().NoError(err)
|
||
|
s.Require().Len(byGroupID, 4)
|
||
|
|
||
|
s.Require().Equal(syncMessage1.ID, byGroupID[3].ID)
|
||
|
s.Require().Equal(syncMessage2.ID, byGroupID[2].ID)
|
||
|
s.Require().Equal(syncMessage3.ID, byGroupID[1].ID)
|
||
|
s.Require().Equal(syncMessage4.ID, byGroupID[0].ID)
|
||
|
|
||
|
byGroupID, err = s.p.AvailableMessagesByGroupID(testGroupID, 3)
|
||
|
|
||
|
s.Require().NoError(err)
|
||
|
s.Require().Len(byGroupID, 3)
|
||
|
|
||
|
s.Require().Equal(syncMessage2.ID, byGroupID[2].ID)
|
||
|
s.Require().Equal(syncMessage3.ID, byGroupID[1].ID)
|
||
|
s.Require().Equal(syncMessage4.ID, byGroupID[0].ID)
|
||
|
}
|