mirror of
https://github.com/datarhei/core.git
synced 2025-10-05 16:07:07 +08:00
145 lines
2.3 KiB
Go
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)
|
|
}
|