mirror of
https://github.com/datarhei/core.git
synced 2025-10-04 23:53:12 +08:00
648 lines
13 KiB
Go
648 lines
13 KiB
Go
package store
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/datarhei/core/v16/restream/app"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func TestAddProcessCommand(t *testing.T) {
|
|
s, err := createStore()
|
|
require.NoError(t, err)
|
|
|
|
config := &app.Config{
|
|
ID: "foobar",
|
|
LimitCPU: 1,
|
|
LimitMemory: 1,
|
|
}
|
|
|
|
err = s.applyCommand(Command{
|
|
Operation: OpAddProcess,
|
|
Data: CommandAddProcess{
|
|
Config: config,
|
|
},
|
|
})
|
|
require.NoError(t, err)
|
|
require.NotEmpty(t, s.data.Process)
|
|
|
|
p, ok := s.data.Process["foobar@"]
|
|
require.True(t, ok)
|
|
|
|
require.NotZero(t, p.CreatedAt)
|
|
require.NotZero(t, p.UpdatedAt)
|
|
require.NotNil(t, p.Config)
|
|
require.True(t, p.Config.Equal(config))
|
|
require.NotNil(t, p.Metadata)
|
|
}
|
|
|
|
func TestAddProcess(t *testing.T) {
|
|
s, err := createStore()
|
|
require.NoError(t, err)
|
|
|
|
config := &app.Config{
|
|
ID: "foobar",
|
|
}
|
|
|
|
err = s.addProcess(CommandAddProcess{
|
|
Config: config,
|
|
})
|
|
require.Error(t, err)
|
|
require.Empty(t, s.data.Process)
|
|
|
|
config = &app.Config{
|
|
ID: "foobar",
|
|
LimitCPU: 1,
|
|
LimitMemory: 1,
|
|
}
|
|
|
|
err = s.addProcess(CommandAddProcess{
|
|
Config: config,
|
|
})
|
|
require.NoError(t, err)
|
|
require.Equal(t, 1, len(s.data.Process))
|
|
|
|
config = &app.Config{
|
|
ID: "foobar",
|
|
LimitCPU: 1,
|
|
LimitMemory: 1,
|
|
}
|
|
|
|
err = s.addProcess(CommandAddProcess{
|
|
Config: config,
|
|
})
|
|
require.Error(t, err)
|
|
require.Equal(t, 1, len(s.data.Process))
|
|
|
|
config = &app.Config{
|
|
ID: "foobar",
|
|
Domain: "barfoo",
|
|
LimitCPU: 1,
|
|
LimitMemory: 1,
|
|
}
|
|
|
|
err = s.addProcess(CommandAddProcess{
|
|
Config: config,
|
|
})
|
|
require.NoError(t, err)
|
|
require.Equal(t, 2, len(s.data.Process))
|
|
}
|
|
|
|
func TestRemoveProcessCommand(t *testing.T) {
|
|
s, err := createStore()
|
|
require.NoError(t, err)
|
|
|
|
config := &app.Config{
|
|
ID: "foobar",
|
|
LimitCPU: 1,
|
|
LimitMemory: 1,
|
|
}
|
|
|
|
err = s.applyCommand(Command{
|
|
Operation: OpAddProcess,
|
|
Data: CommandAddProcess{
|
|
Config: config,
|
|
},
|
|
})
|
|
require.NoError(t, err)
|
|
require.NotEmpty(t, s.data.Process)
|
|
|
|
err = s.applyCommand(Command{
|
|
Operation: OpRemoveProcess,
|
|
Data: CommandRemoveProcess{
|
|
ID: config.ProcessID(),
|
|
},
|
|
})
|
|
require.NoError(t, err)
|
|
require.Empty(t, s.data.Process)
|
|
|
|
err = s.applyCommand(Command{
|
|
Operation: OpRemoveProcess,
|
|
Data: CommandRemoveProcess{
|
|
ID: config.ProcessID(),
|
|
},
|
|
})
|
|
require.Error(t, err)
|
|
}
|
|
|
|
func TestRemoveProcess(t *testing.T) {
|
|
s, err := createStore()
|
|
require.NoError(t, err)
|
|
|
|
config1 := &app.Config{
|
|
ID: "foobar",
|
|
LimitCPU: 1,
|
|
LimitMemory: 1,
|
|
}
|
|
|
|
config2 := &app.Config{
|
|
ID: "foobar",
|
|
Domain: "barfoo",
|
|
LimitCPU: 1,
|
|
LimitMemory: 1,
|
|
}
|
|
|
|
err = s.removeProcess(CommandRemoveProcess{
|
|
ID: config1.ProcessID(),
|
|
})
|
|
require.Error(t, err)
|
|
|
|
err = s.removeProcess(CommandRemoveProcess{
|
|
ID: config2.ProcessID(),
|
|
})
|
|
require.Error(t, err)
|
|
|
|
err = s.addProcess(CommandAddProcess{
|
|
Config: config1,
|
|
})
|
|
require.NoError(t, err)
|
|
require.Equal(t, 1, len(s.data.Process))
|
|
|
|
err = s.addProcess(CommandAddProcess{
|
|
Config: config2,
|
|
})
|
|
require.NoError(t, err)
|
|
require.Equal(t, 2, len(s.data.Process))
|
|
|
|
err = s.removeProcess(CommandRemoveProcess{
|
|
ID: config1.ProcessID(),
|
|
})
|
|
require.NoError(t, err)
|
|
require.Equal(t, 1, len(s.data.Process))
|
|
|
|
err = s.removeProcess(CommandRemoveProcess{
|
|
ID: config2.ProcessID(),
|
|
})
|
|
require.NoError(t, err)
|
|
require.Empty(t, s.data.Process)
|
|
}
|
|
|
|
func TestUpdateProcessCommand(t *testing.T) {
|
|
s, err := createStore()
|
|
require.NoError(t, err)
|
|
|
|
config := &app.Config{
|
|
ID: "foobar",
|
|
LimitCPU: 1,
|
|
LimitMemory: 1,
|
|
}
|
|
|
|
pid := config.ProcessID()
|
|
|
|
err = s.applyCommand(Command{
|
|
Operation: OpAddProcess,
|
|
Data: CommandAddProcess{
|
|
Config: config,
|
|
},
|
|
})
|
|
require.NoError(t, err)
|
|
require.NotEmpty(t, s.data.Process)
|
|
|
|
config = &app.Config{
|
|
ID: "foobaz",
|
|
LimitCPU: 1,
|
|
LimitMemory: 1,
|
|
}
|
|
|
|
err = s.applyCommand(Command{
|
|
Operation: OpUpdateProcess,
|
|
Data: CommandUpdateProcess{
|
|
ID: pid,
|
|
Config: config,
|
|
},
|
|
})
|
|
require.NoError(t, err)
|
|
require.NotEmpty(t, s.data.Process)
|
|
}
|
|
|
|
func TestUpdateProcess(t *testing.T) {
|
|
s, err := createStore()
|
|
require.NoError(t, err)
|
|
|
|
config1 := &app.Config{
|
|
ID: "foobar",
|
|
LimitCPU: 1,
|
|
LimitMemory: 1,
|
|
}
|
|
|
|
config2 := &app.Config{
|
|
ID: "fooboz",
|
|
LimitCPU: 1,
|
|
LimitMemory: 1,
|
|
}
|
|
|
|
err = s.addProcess(CommandAddProcess{
|
|
Config: config1,
|
|
})
|
|
require.NoError(t, err)
|
|
require.Equal(t, 1, len(s.data.Process))
|
|
|
|
err = s.addProcess(CommandAddProcess{
|
|
Config: config2,
|
|
})
|
|
require.NoError(t, err)
|
|
require.Equal(t, 2, len(s.data.Process))
|
|
|
|
config := &app.Config{
|
|
ID: "foobaz",
|
|
LimitCPU: 1,
|
|
LimitMemory: 1,
|
|
}
|
|
|
|
err = s.updateProcess(CommandUpdateProcess{
|
|
ID: config.ProcessID(),
|
|
Config: config,
|
|
})
|
|
require.Error(t, err)
|
|
|
|
config.ID = "fooboz"
|
|
|
|
err = s.updateProcess(CommandUpdateProcess{
|
|
ID: config1.ProcessID(),
|
|
Config: config,
|
|
})
|
|
require.Error(t, err)
|
|
|
|
config.ID = "foobaz"
|
|
config.LimitCPU = 0
|
|
|
|
err = s.updateProcess(CommandUpdateProcess{
|
|
ID: config1.ProcessID(),
|
|
Config: config,
|
|
})
|
|
require.Error(t, err)
|
|
|
|
config.LimitCPU = 1
|
|
|
|
err = s.updateProcess(CommandUpdateProcess{
|
|
ID: config1.ProcessID(),
|
|
Config: config,
|
|
})
|
|
require.NoError(t, err)
|
|
require.Equal(t, 2, len(s.data.Process))
|
|
|
|
err = s.updateProcess(CommandUpdateProcess{
|
|
ID: config.ProcessID(),
|
|
Config: config,
|
|
})
|
|
require.NoError(t, err)
|
|
require.Equal(t, 2, len(s.data.Process))
|
|
|
|
config3 := &app.Config{
|
|
ID: config.ID,
|
|
LimitCPU: 1,
|
|
LimitMemory: 2,
|
|
}
|
|
|
|
err = s.updateProcess(CommandUpdateProcess{
|
|
ID: config.ProcessID(),
|
|
Config: config3,
|
|
})
|
|
require.NoError(t, err)
|
|
require.Equal(t, 2, len(s.data.Process))
|
|
|
|
_, _, err = s.ProcessGet(config1.ProcessID())
|
|
require.Error(t, err)
|
|
|
|
_, _, err = s.ProcessGet(config2.ProcessID())
|
|
require.NoError(t, err)
|
|
|
|
_, _, err = s.ProcessGet(config.ProcessID())
|
|
require.NoError(t, err)
|
|
}
|
|
|
|
func TestSetProcessOrderCommand(t *testing.T) {
|
|
s, err := createStore()
|
|
require.NoError(t, err)
|
|
|
|
config := &app.Config{
|
|
ID: "foobar",
|
|
LimitCPU: 1,
|
|
LimitMemory: 1,
|
|
}
|
|
|
|
err = s.applyCommand(Command{
|
|
Operation: OpAddProcess,
|
|
Data: CommandAddProcess{
|
|
Config: config,
|
|
},
|
|
})
|
|
require.NoError(t, err)
|
|
require.NotEmpty(t, s.data.Process)
|
|
|
|
p, _, err := s.ProcessGet(config.ProcessID())
|
|
require.NoError(t, err)
|
|
require.Equal(t, "stop", p.Order)
|
|
|
|
err = s.applyCommand(Command{
|
|
Operation: OpSetProcessOrder,
|
|
Data: CommandSetProcessOrder{
|
|
ID: config.ProcessID(),
|
|
Order: "start",
|
|
},
|
|
})
|
|
require.NoError(t, err)
|
|
|
|
p, _, err = s.ProcessGet(config.ProcessID())
|
|
require.NoError(t, err)
|
|
require.Equal(t, "start", p.Order)
|
|
}
|
|
|
|
func TestSetProcessOrder(t *testing.T) {
|
|
s, err := createStore()
|
|
require.NoError(t, err)
|
|
|
|
config := &app.Config{
|
|
ID: "foobar",
|
|
LimitCPU: 1,
|
|
LimitMemory: 1,
|
|
}
|
|
|
|
err = s.setProcessOrder(CommandSetProcessOrder{
|
|
ID: config.ProcessID(),
|
|
Order: "start",
|
|
})
|
|
require.Error(t, err)
|
|
|
|
err = s.addProcess(CommandAddProcess{
|
|
Config: config,
|
|
})
|
|
require.NoError(t, err)
|
|
require.Equal(t, 1, len(s.data.Process))
|
|
|
|
err = s.setProcessOrder(CommandSetProcessOrder{
|
|
ID: config.ProcessID(),
|
|
Order: "start",
|
|
})
|
|
require.NoError(t, err)
|
|
|
|
err = s.setProcessOrder(CommandSetProcessOrder{
|
|
ID: config.ProcessID(),
|
|
Order: "stop",
|
|
})
|
|
require.NoError(t, err)
|
|
|
|
p, _, err := s.ProcessGet(config.ProcessID())
|
|
require.NoError(t, err)
|
|
require.Equal(t, "stop", p.Order)
|
|
|
|
err = s.setProcessOrder(CommandSetProcessOrder{
|
|
ID: config.ProcessID(),
|
|
Order: "start",
|
|
})
|
|
require.NoError(t, err)
|
|
|
|
p, _, err = s.ProcessGet(config.ProcessID())
|
|
require.NoError(t, err)
|
|
require.Equal(t, "start", p.Order)
|
|
}
|
|
|
|
func TestSetProcessMetadataCommand(t *testing.T) {
|
|
s, err := createStore()
|
|
require.NoError(t, err)
|
|
|
|
config := &app.Config{
|
|
ID: "foobar",
|
|
LimitCPU: 1,
|
|
LimitMemory: 1,
|
|
}
|
|
|
|
err = s.applyCommand(Command{
|
|
Operation: OpAddProcess,
|
|
Data: CommandAddProcess{
|
|
Config: config,
|
|
},
|
|
})
|
|
require.NoError(t, err)
|
|
require.NotEmpty(t, s.data.Process)
|
|
|
|
p, _, err := s.ProcessGet(config.ProcessID())
|
|
require.NoError(t, err)
|
|
require.Empty(t, p.Metadata)
|
|
|
|
metadata := "bar"
|
|
|
|
err = s.applyCommand(Command{
|
|
Operation: OpSetProcessMetadata,
|
|
Data: CommandSetProcessMetadata{
|
|
ID: config.ProcessID(),
|
|
Key: "foo",
|
|
Data: metadata,
|
|
},
|
|
})
|
|
require.NoError(t, err)
|
|
|
|
p, _, err = s.ProcessGet(config.ProcessID())
|
|
require.NoError(t, err)
|
|
|
|
require.NotEmpty(t, p.Metadata)
|
|
require.Equal(t, 1, len(p.Metadata))
|
|
require.Equal(t, "bar", p.Metadata["foo"])
|
|
}
|
|
|
|
func TestSetProcessMetadata(t *testing.T) {
|
|
s, err := createStore()
|
|
require.NoError(t, err)
|
|
|
|
config := &app.Config{
|
|
ID: "foobar",
|
|
LimitCPU: 1,
|
|
LimitMemory: 1,
|
|
}
|
|
|
|
err = s.setProcessMetadata(CommandSetProcessMetadata{
|
|
ID: config.ProcessID(),
|
|
Key: "foo",
|
|
Data: "bar",
|
|
})
|
|
require.Error(t, err)
|
|
|
|
err = s.addProcess(CommandAddProcess{
|
|
Config: config,
|
|
})
|
|
require.NoError(t, err)
|
|
require.Equal(t, 1, len(s.data.Process))
|
|
|
|
err = s.setProcessMetadata(CommandSetProcessMetadata{
|
|
ID: config.ProcessID(),
|
|
Key: "foo",
|
|
Data: "bar",
|
|
})
|
|
require.NoError(t, err)
|
|
|
|
err = s.setProcessMetadata(CommandSetProcessMetadata{
|
|
ID: config.ProcessID(),
|
|
Key: "faa",
|
|
Data: "boz",
|
|
})
|
|
require.NoError(t, err)
|
|
|
|
p, _, err := s.ProcessGet(config.ProcessID())
|
|
require.NoError(t, err)
|
|
|
|
require.NotEmpty(t, p.Metadata)
|
|
require.Equal(t, 2, len(p.Metadata))
|
|
require.Equal(t, "bar", p.Metadata["foo"])
|
|
require.Equal(t, "boz", p.Metadata["faa"])
|
|
|
|
err = s.setProcessMetadata(CommandSetProcessMetadata{
|
|
ID: config.ProcessID(),
|
|
Key: "faa",
|
|
Data: nil,
|
|
})
|
|
require.NoError(t, err)
|
|
|
|
p, _, err = s.ProcessGet(config.ProcessID())
|
|
require.NoError(t, err)
|
|
|
|
require.NotEmpty(t, p.Metadata)
|
|
require.Equal(t, 1, len(p.Metadata))
|
|
require.Equal(t, "bar", p.Metadata["foo"])
|
|
|
|
err = s.setProcessMetadata(CommandSetProcessMetadata{
|
|
ID: config.ProcessID(),
|
|
Key: "foo",
|
|
Data: "bor",
|
|
})
|
|
require.NoError(t, err)
|
|
|
|
p, _, err = s.ProcessGet(config.ProcessID())
|
|
require.NoError(t, err)
|
|
|
|
require.NotEmpty(t, p.Metadata)
|
|
require.Equal(t, 1, len(p.Metadata))
|
|
require.Equal(t, "bor", p.Metadata["foo"])
|
|
}
|
|
|
|
func TestSetProcessErrorCommand(t *testing.T) {
|
|
s, err := createStore()
|
|
require.NoError(t, err)
|
|
|
|
config := &app.Config{
|
|
ID: "foobar",
|
|
LimitCPU: 1,
|
|
LimitMemory: 1,
|
|
}
|
|
|
|
err = s.applyCommand(Command{
|
|
Operation: OpAddProcess,
|
|
Data: CommandAddProcess{
|
|
Config: config,
|
|
},
|
|
})
|
|
require.NoError(t, err)
|
|
require.NotEmpty(t, s.data.Process)
|
|
|
|
p, _, err := s.ProcessGet(config.ProcessID())
|
|
require.NoError(t, err)
|
|
require.Equal(t, "", p.Error)
|
|
|
|
err = s.applyCommand(Command{
|
|
Operation: OpSetProcessError,
|
|
Data: CommandSetProcessError{
|
|
ID: config.ProcessID(),
|
|
Error: "foobar",
|
|
},
|
|
})
|
|
require.NoError(t, err)
|
|
|
|
p, _, err = s.ProcessGet(config.ProcessID())
|
|
require.NoError(t, err)
|
|
require.Equal(t, "foobar", p.Error)
|
|
}
|
|
|
|
func TestSetProcessError(t *testing.T) {
|
|
s, err := createStore()
|
|
require.NoError(t, err)
|
|
|
|
config := &app.Config{
|
|
ID: "foobar",
|
|
LimitCPU: 1,
|
|
LimitMemory: 1,
|
|
}
|
|
|
|
err = s.setProcessError(CommandSetProcessError{
|
|
ID: config.ProcessID(),
|
|
Error: "foobar",
|
|
})
|
|
require.Error(t, err)
|
|
|
|
err = s.addProcess(CommandAddProcess{
|
|
Config: config,
|
|
})
|
|
require.NoError(t, err)
|
|
require.Equal(t, 1, len(s.data.Process))
|
|
|
|
err = s.setProcessError(CommandSetProcessError{
|
|
ID: config.ProcessID(),
|
|
Error: "foobar",
|
|
})
|
|
require.NoError(t, err)
|
|
|
|
err = s.setProcessError(CommandSetProcessError{
|
|
ID: config.ProcessID(),
|
|
Error: "",
|
|
})
|
|
require.NoError(t, err)
|
|
|
|
p, _, err := s.ProcessGet(config.ProcessID())
|
|
require.NoError(t, err)
|
|
require.Equal(t, "", p.Error)
|
|
|
|
err = s.setProcessError(CommandSetProcessError{
|
|
ID: config.ProcessID(),
|
|
Error: "foobar",
|
|
})
|
|
require.NoError(t, err)
|
|
|
|
p, _, err = s.ProcessGet(config.ProcessID())
|
|
require.NoError(t, err)
|
|
require.Equal(t, "foobar", p.Error)
|
|
}
|
|
|
|
func TestSetProcessNodeMapCommand(t *testing.T) {
|
|
s, err := createStore()
|
|
require.NoError(t, err)
|
|
|
|
m1 := map[string]string{
|
|
"key": "value1",
|
|
}
|
|
|
|
err = s.applyCommand(Command{
|
|
Operation: OpSetProcessNodeMap,
|
|
Data: CommandSetProcessNodeMap{
|
|
Map: m1,
|
|
},
|
|
})
|
|
require.NoError(t, err)
|
|
require.Equal(t, m1, s.data.ProcessNodeMap)
|
|
}
|
|
|
|
func TestSetProcessNodeMap(t *testing.T) {
|
|
s, err := createStore()
|
|
require.NoError(t, err)
|
|
|
|
m1 := map[string]string{
|
|
"key": "value1",
|
|
}
|
|
|
|
err = s.setProcessNodeMap(CommandSetProcessNodeMap{
|
|
Map: m1,
|
|
})
|
|
require.NoError(t, err)
|
|
require.Equal(t, m1, s.data.ProcessNodeMap)
|
|
|
|
m2 := map[string]string{
|
|
"key": "value2",
|
|
}
|
|
|
|
err = s.setProcessNodeMap(CommandSetProcessNodeMap{
|
|
Map: m2,
|
|
})
|
|
require.NoError(t, err)
|
|
require.Equal(t, m2, s.data.ProcessNodeMap)
|
|
|
|
m := s.ProcessGetNodeMap()
|
|
require.Equal(t, m2, m)
|
|
}
|