mirror of
https://github.com/vacp2p/mvds.git
synced 2026-01-08 19:48:03 -05:00
* protobuf * do not send ack when not required * remove from state if no ack required * different send modes * fix * updated * retransmit fix * updated * fixed * renamed to ephemeral * repeated * gen * resolution * cleanup * rough dependency code * todo * removed * only stores if ephemeral * started implementing the algo * simplified * updated * we never store ephemeral messages so we did not need * adds parents * new schema * tx to insert * err * removed old * fixed * changed log * test persistence of parents * removed * rename * ignoring * Update store/messagestore_sqlite.go Co-Authored-By: Adam Babik <adam@status.im> * Update node/node.go Co-Authored-By: Adam Babik <adam@status.im> * Update node/node.go Co-Authored-By: Adam Babik <adam@status.im> * Update node/node.go Co-Authored-By: Adam Babik <adam@status.im> * more fixes * Update store/messagestore_sqlite.go Co-Authored-By: Adam Babik <adam@status.im> * more fixes * using refs * Update node/node.go Co-Authored-By: Adam Babik <adam@status.im> * finished * Update store/messagestore_sqlite.go Co-Authored-By: Adam Babik <adam@status.im> * Update 1572372377_initial_schema.down.sql * desc + refactor * started refactoring resolution * Update README.md * rewrote resolve * mutex * todo * fixes * sql impl * added test * log * updates * updated * little bug * fix * added test * first changes from @adambabik * moved * fixed test, started eventual ones * fixed eventually test * mock install * consistent test * mock * fix lint * Update dependency/tracker_sqlite.go Co-Authored-By: Adam Babik <adam@status.im> * fix
105 lines
2.6 KiB
Go
105 lines
2.6 KiB
Go
package store
|
|
|
|
import (
|
|
"io/ioutil"
|
|
"math/rand"
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/vacp2p/mvds/state"
|
|
|
|
"github.com/stretchr/testify/require"
|
|
"github.com/vacp2p/mvds/persistenceutil"
|
|
"github.com/vacp2p/mvds/protobuf"
|
|
"github.com/vacp2p/mvds/store/migrations"
|
|
)
|
|
|
|
func TestPersistentMessageStore(t *testing.T) {
|
|
tmpFile, err := ioutil.TempFile("", "")
|
|
require.NoError(t, err)
|
|
db, err := persistenceutil.Open(tmpFile.Name(), "", persistenceutil.MigrationConfig{
|
|
AssetNames: migrations.AssetNames(),
|
|
AssetGetter: migrations.Asset,
|
|
})
|
|
require.NoError(t, err)
|
|
p := NewPersistentMessageStore(db)
|
|
|
|
now := time.Now().Unix()
|
|
message := protobuf.Message{
|
|
GroupId: []byte{0x01},
|
|
Timestamp: now,
|
|
Body: []byte{0xaa, 0xbb, 0xcc},
|
|
Metadata: &protobuf.Metadata{Ephemeral: false, Parents: [][]byte{{0xaa, 0xbb, 0xcc}}},
|
|
}
|
|
|
|
err = p.Add(&message)
|
|
require.NoError(t, err)
|
|
// Adding the same message twice is not allowed.
|
|
err = p.Add(&message)
|
|
require.EqualError(t, err, "UNIQUE constraint failed: mvds_messages.id")
|
|
// Verify if saved.
|
|
exists, err := p.Has(message.ID())
|
|
require.NoError(t, err)
|
|
require.True(t, exists)
|
|
recvMessage, err := p.Get(message.ID())
|
|
require.NoError(t, err)
|
|
require.Equal(t, message, *recvMessage)
|
|
|
|
// Verify methods against non existing message.
|
|
recvMessage, err = p.Get(state.MessageID{0xff})
|
|
require.EqualError(t, err, "sql: no rows in result set")
|
|
require.Nil(t, recvMessage)
|
|
exists, err = p.Has(state.MessageID{0xff})
|
|
require.NoError(t, err)
|
|
require.False(t, exists)
|
|
}
|
|
|
|
func TestPersistentMessageStore_GetMessagesWithoutChildren(t *testing.T) {
|
|
tmpFile, err := ioutil.TempFile("", "")
|
|
require.NoError(t, err)
|
|
db, err := persistenceutil.Open(tmpFile.Name(), "", persistenceutil.MigrationConfig{
|
|
AssetNames: migrations.AssetNames(),
|
|
AssetGetter: migrations.Asset,
|
|
})
|
|
|
|
require.NoError(t, err)
|
|
p := NewPersistentMessageStore(db)
|
|
|
|
group := groupId()
|
|
|
|
now := time.Now().Unix()
|
|
msg := &protobuf.Message{
|
|
GroupId: group[:],
|
|
Timestamp: now,
|
|
Body: []byte{0xaa, 0xbb, 0xcc},
|
|
Metadata: &protobuf.Metadata{Ephemeral: false, Parents: [][]byte{}},
|
|
}
|
|
|
|
err = p.Add(msg)
|
|
require.NoError(t, err)
|
|
|
|
id := msg.ID()
|
|
|
|
child := &protobuf.Message{
|
|
GroupId: group[:],
|
|
Timestamp: now,
|
|
Body: []byte{0xaa, 0xcc},
|
|
Metadata: &protobuf.Metadata{Ephemeral: false, Parents: [][]byte{id[:]}},
|
|
}
|
|
|
|
err = p.Add(child)
|
|
require.NoError(t, err)
|
|
|
|
msgs, err := p.GetMessagesWithoutChildren(group)
|
|
require.NoError(t, err)
|
|
|
|
if msgs[0] != child.ID() {
|
|
t.Errorf("not same \n expected %v \n actual: %v", msgs[0], child.ID())
|
|
}
|
|
}
|
|
|
|
func groupId() (id state.GroupID) {
|
|
_, _ = rand.Read(id[:])
|
|
return id
|
|
}
|