Files
mvds/store/messagestore_sqlite_test.go
Dean Eigenmann 748b61123f feature/mdf (#76)
* 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
2019-11-05 17:32:23 +01:00

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
}