mirror of
https://github.com/datarhei/core.git
synced 2025-10-06 16:37:04 +08:00

- rebrand group to domain - move IAM to the API (rest and graph) for enforcing "process:" rules - add abstraction layer for restream store in order to decouple internal format from format on disk - move playout handler into restreamHandler - remove user from restream interface - add TaskID type that includes the process id and its domain
185 lines
3.7 KiB
Go
185 lines
3.7 KiB
Go
package json
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/datarhei/core/v16/io/fs"
|
|
"github.com/datarhei/core/v16/restream/app"
|
|
"github.com/datarhei/core/v16/restream/store"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func getFS(t *testing.T) fs.Filesystem {
|
|
fs, err := fs.NewRootedDiskFilesystem(fs.RootedDiskConfig{
|
|
Root: ".",
|
|
})
|
|
require.NoError(t, err)
|
|
|
|
info, err := fs.Stat("./fixtures/v4_empty.json")
|
|
require.NoError(t, err)
|
|
require.Equal(t, "/fixtures/v4_empty.json", info.Name())
|
|
|
|
return fs
|
|
}
|
|
|
|
func TestNew(t *testing.T) {
|
|
store, err := New(Config{
|
|
Filesystem: getFS(t),
|
|
})
|
|
require.NoError(t, err)
|
|
require.NotEmpty(t, store)
|
|
}
|
|
|
|
func TestStoreLoad(t *testing.T) {
|
|
memfs, err := fs.NewMemFilesystem(fs.MemConfig{})
|
|
require.NoError(t, err)
|
|
|
|
jsonstore, err := New(Config{
|
|
Filesystem: memfs,
|
|
Filepath: "./db.json",
|
|
})
|
|
require.NoError(t, err)
|
|
|
|
data := store.NewData()
|
|
|
|
data.Process[""] = make(map[string]store.Process)
|
|
p := store.Process{
|
|
Process: &app.Process{
|
|
ID: "foobar",
|
|
Owner: "me",
|
|
Domain: "",
|
|
Reference: "ref",
|
|
Config: &app.Config{
|
|
ID: "foobar",
|
|
Reference: "ref",
|
|
Owner: "me",
|
|
Domain: "",
|
|
FFVersion: "5.1.3",
|
|
Input: []app.ConfigIO{},
|
|
Output: []app.ConfigIO{},
|
|
Options: []string{
|
|
"42",
|
|
},
|
|
Reconnect: true,
|
|
ReconnectDelay: 14,
|
|
Autostart: true,
|
|
StaleTimeout: 1,
|
|
LimitCPU: 2,
|
|
LimitMemory: 3,
|
|
LimitWaitFor: 4,
|
|
},
|
|
CreatedAt: 0,
|
|
UpdatedAt: 0,
|
|
Order: "stop",
|
|
},
|
|
Metadata: map[string]interface{}{
|
|
"some": "data",
|
|
},
|
|
}
|
|
data.Process[""]["foobar"] = p
|
|
|
|
data.Process["domain"] = make(map[string]store.Process)
|
|
p = store.Process{
|
|
Process: &app.Process{
|
|
ID: "foobaz",
|
|
Owner: "you",
|
|
Domain: "domain",
|
|
Reference: "refref",
|
|
Config: &app.Config{
|
|
ID: "foobaz",
|
|
Reference: "refref",
|
|
Owner: "you",
|
|
Domain: "domain",
|
|
FFVersion: "5.1.4",
|
|
Input: []app.ConfigIO{},
|
|
Output: []app.ConfigIO{},
|
|
Options: []string{
|
|
"47",
|
|
},
|
|
Reconnect: true,
|
|
ReconnectDelay: 24,
|
|
Autostart: true,
|
|
StaleTimeout: 21,
|
|
LimitCPU: 22,
|
|
LimitMemory: 23,
|
|
LimitWaitFor: 24,
|
|
},
|
|
CreatedAt: 0,
|
|
UpdatedAt: 0,
|
|
Order: "stop",
|
|
},
|
|
Metadata: map[string]interface{}{
|
|
"some-more": "data",
|
|
},
|
|
}
|
|
data.Process["domain"]["foobaz"] = p
|
|
|
|
data.Metadata["foo"] = "bar"
|
|
|
|
err = jsonstore.Store(data)
|
|
require.NoError(t, err)
|
|
|
|
d, err := jsonstore.Load()
|
|
require.NoError(t, err)
|
|
|
|
require.Equal(t, data, d)
|
|
}
|
|
|
|
func TestLoad(t *testing.T) {
|
|
store, err := New(Config{
|
|
Filesystem: getFS(t),
|
|
Filepath: "./fixtures/v4_empty.json",
|
|
})
|
|
require.NoError(t, err)
|
|
|
|
_, err = store.Load()
|
|
require.NoError(t, err)
|
|
}
|
|
|
|
func TestLoadFailed(t *testing.T) {
|
|
store, err := New(Config{
|
|
Filesystem: getFS(t),
|
|
Filepath: "./fixtures/v4_invalid.json",
|
|
})
|
|
require.NoError(t, err)
|
|
|
|
_, err = store.Load()
|
|
require.Error(t, err)
|
|
}
|
|
|
|
func TestIsEmpty(t *testing.T) {
|
|
store, err := New(Config{
|
|
Filesystem: getFS(t),
|
|
Filepath: "./fixtures/v4_empty.json",
|
|
})
|
|
require.NoError(t, err)
|
|
|
|
data, err := store.Load()
|
|
require.NoError(t, err)
|
|
require.Equal(t, true, len(data.Process) == 0)
|
|
}
|
|
|
|
func TestNotExists(t *testing.T) {
|
|
store, err := New(Config{
|
|
Filesystem: getFS(t),
|
|
Filepath: "./fixtures/v4_notexist.json",
|
|
})
|
|
require.NoError(t, err)
|
|
|
|
data, err := store.Load()
|
|
require.NoError(t, err)
|
|
require.Equal(t, true, len(data.Process) == 0)
|
|
}
|
|
|
|
func TestInvalidVersion(t *testing.T) {
|
|
store, err := New(Config{
|
|
Filesystem: getFS(t),
|
|
Filepath: "./fixtures/v3_empty.json",
|
|
})
|
|
require.NoError(t, err)
|
|
|
|
data, err := store.Load()
|
|
require.Error(t, err)
|
|
require.Equal(t, true, len(data.Process) == 0)
|
|
}
|