Files
core/cluster/store/store_test.go
2024-04-24 15:42:11 +02:00

145 lines
2.3 KiB
Go

package store
import (
"testing"
"github.com/datarhei/core/v16/encoding/json"
"github.com/hashicorp/raft"
"github.com/stretchr/testify/require"
)
func createStore() (*store, error) {
si, err := NewStore(Config{
Logger: nil,
})
if err != nil {
return nil, err
}
s := si.(*store)
return s, nil
}
func TestCreateStore(t *testing.T) {
s, err := createStore()
require.NoError(t, err)
require.NotNil(t, s.data.Process)
require.NotNil(t, s.data.ProcessNodeMap)
require.NotNil(t, s.data.Users.Users)
require.NotNil(t, s.data.Policies.Policies)
require.NotNil(t, s.data.Locks)
require.NotNil(t, s.data.KVS)
}
func TestApplyCommand(t *testing.T) {
s, err := createStore()
require.NoError(t, err)
err = s.applyCommand(Command{
Operation: "unknown",
Data: nil,
})
require.Error(t, err)
}
func TestApply(t *testing.T) {
s, err := createStore()
require.NoError(t, err)
entry := &raft.Log{
Index: 1,
Term: 1,
Type: raft.LogCommand,
Data: []byte("123"),
}
res := s.Apply(entry)
require.NotNil(t, res)
cmd := Command{
Operation: "unknown",
Data: nil,
}
data, err := json.Marshal(&cmd)
require.NoError(t, err)
require.NotEmpty(t, data)
entry.Data = data
res = s.Apply(entry)
require.NotNil(t, res)
cmd = Command{
Operation: OpSetProcessNodeMap,
Data: CommandSetProcessNodeMap{
Map: nil,
},
}
data, err = json.Marshal(&cmd)
require.NoError(t, err)
require.NotEmpty(t, data)
entry.Data = data
res = s.Apply(entry)
require.Nil(t, res)
}
func TestApplyWithCallback(t *testing.T) {
s, err := createStore()
require.NoError(t, err)
var op Operation
s.OnApply(func(o Operation) {
op = o
})
cmd := Command{
Operation: OpSetProcessNodeMap,
Data: CommandSetProcessNodeMap{
Map: nil,
},
}
data, err := json.Marshal(&cmd)
require.NoError(t, err)
require.NotEmpty(t, data)
entry := &raft.Log{
Index: 1,
Term: 1,
Type: raft.LogCommand,
Data: data,
}
res := s.Apply(entry)
require.Nil(t, res)
require.Equal(t, OpSetProcessNodeMap, op)
}
func TestSnapshot(t *testing.T) {
s, err := createStore()
require.NoError(t, err)
snapshot, err := s.Snapshot()
require.NoError(t, err)
sshot := snapshot.(*fsmSnapshot)
data, err := json.Marshal(s.data)
require.NoError(t, err)
require.Equal(t, data, sshot.data)
snapshot.Release()
require.Equal(t, []byte(nil), sshot.data)
}