2022-05-13 13:26:45 -04:00
|
|
|
package config
|
|
|
|
|
|
|
|
|
|
import (
|
2023-02-01 10:09:20 -05:00
|
|
|
"strings"
|
2022-05-13 13:26:45 -04:00
|
|
|
"testing"
|
|
|
|
|
|
2023-02-01 10:09:20 -05:00
|
|
|
"github.com/datarhei/core/v16/config/vars"
|
|
|
|
|
"github.com/datarhei/core/v16/io/fs"
|
|
|
|
|
|
2022-10-10 10:19:45 -04:00
|
|
|
"github.com/stretchr/testify/require"
|
2022-05-13 13:26:45 -04:00
|
|
|
)
|
|
|
|
|
|
|
|
|
|
func TestConfigCopy(t *testing.T) {
|
2023-02-01 10:09:20 -05:00
|
|
|
fs, _ := fs.NewMemFilesystem(fs.MemConfig{})
|
|
|
|
|
config1 := New(fs)
|
2022-05-13 13:26:45 -04:00
|
|
|
|
|
|
|
|
config1.Version = 42
|
|
|
|
|
config1.DB.Dir = "foo"
|
|
|
|
|
|
2022-10-10 10:19:45 -04:00
|
|
|
val1, _ := config1.Get("version")
|
|
|
|
|
val2, _ := config1.Get("db.dir")
|
|
|
|
|
val3, _ := config1.Get("host.name")
|
2022-05-13 13:26:45 -04:00
|
|
|
|
2022-10-10 10:19:45 -04:00
|
|
|
require.Equal(t, "42", val1)
|
|
|
|
|
require.Equal(t, "foo", val2)
|
|
|
|
|
require.Equal(t, "(empty)", val3)
|
2022-05-13 13:26:45 -04:00
|
|
|
|
2022-10-10 10:19:45 -04:00
|
|
|
config1.Set("host.name", "foo.com")
|
|
|
|
|
val3, _ = config1.Get("host.name")
|
|
|
|
|
require.Equal(t, "foo.com", val3)
|
2022-05-13 13:26:45 -04:00
|
|
|
|
2022-10-10 10:19:45 -04:00
|
|
|
config2 := config1.Clone()
|
2022-05-13 13:26:45 -04:00
|
|
|
|
2022-10-10 10:19:45 -04:00
|
|
|
require.Equal(t, int64(42), config2.Version)
|
|
|
|
|
require.Equal(t, "foo", config2.DB.Dir)
|
|
|
|
|
require.Equal(t, []string{"foo.com"}, config2.Host.Name)
|
2022-05-13 13:26:45 -04:00
|
|
|
|
2022-10-10 10:19:45 -04:00
|
|
|
config1.Set("version", "77")
|
2022-05-13 13:26:45 -04:00
|
|
|
|
2022-10-10 10:19:45 -04:00
|
|
|
require.Equal(t, int64(77), config1.Version)
|
|
|
|
|
require.Equal(t, int64(42), config2.Version)
|
2022-05-13 13:26:45 -04:00
|
|
|
|
2022-10-10 10:19:45 -04:00
|
|
|
config1.Set("db.dir", "bar")
|
2022-05-13 13:26:45 -04:00
|
|
|
|
2022-10-10 10:19:45 -04:00
|
|
|
require.Equal(t, "bar", config1.DB.Dir)
|
|
|
|
|
require.Equal(t, "foo", config2.DB.Dir)
|
2022-05-13 13:26:45 -04:00
|
|
|
|
|
|
|
|
config2.DB.Dir = "baz"
|
|
|
|
|
|
2022-10-10 10:19:45 -04:00
|
|
|
require.Equal(t, "bar", config1.DB.Dir)
|
|
|
|
|
require.Equal(t, "baz", config2.DB.Dir)
|
2022-05-13 13:26:45 -04:00
|
|
|
|
|
|
|
|
config1.Host.Name[0] = "bar.com"
|
|
|
|
|
|
2022-10-10 10:19:45 -04:00
|
|
|
require.Equal(t, []string{"bar.com"}, config1.Host.Name)
|
|
|
|
|
require.Equal(t, []string{"foo.com"}, config2.Host.Name)
|
2022-05-13 13:26:45 -04:00
|
|
|
}
|
2023-02-01 10:09:20 -05:00
|
|
|
|
2026-04-17 15:26:11 -04:00
|
|
|
// TestConfigCopyWebRTC is a regression test for Clone() silently dropping the
|
|
|
|
|
// WebRTC Data section. The first live M2 deploy surfaced this: env vars bound
|
|
|
|
|
// correctly onto the original Config, but Core handed the clone to app/api, so
|
|
|
|
|
// cfg.WebRTC.Enable was always the zero value and the subsystem was skipped.
|
|
|
|
|
func TestConfigCopyWebRTC(t *testing.T) {
|
|
|
|
|
fs, _ := fs.NewMemFilesystem(fs.MemConfig{})
|
|
|
|
|
config1 := New(fs)
|
|
|
|
|
|
|
|
|
|
config1.WebRTC.Enable = true
|
|
|
|
|
config1.WebRTC.PublicIP = "10.0.0.25"
|
|
|
|
|
config1.WebRTC.NAT1To1IPs = []string{"10.0.0.25", "203.0.113.10"}
|
|
|
|
|
config1.WebRTC.UDPMuxPort = 45000
|
|
|
|
|
|
|
|
|
|
config2 := config1.Clone()
|
|
|
|
|
|
|
|
|
|
require.Equal(t, true, config2.WebRTC.Enable)
|
|
|
|
|
require.Equal(t, "10.0.0.25", config2.WebRTC.PublicIP)
|
|
|
|
|
require.Equal(t, []string{"10.0.0.25", "203.0.113.10"}, config2.WebRTC.NAT1To1IPs)
|
|
|
|
|
require.Equal(t, 45000, config2.WebRTC.UDPMuxPort)
|
|
|
|
|
|
|
|
|
|
// NAT1To1IPs is a slice — mutating the clone must not affect the
|
|
|
|
|
// source, which is what every other section guarantees via
|
|
|
|
|
// copy.Slice. Same contract for WebRTC.
|
|
|
|
|
config2.WebRTC.NAT1To1IPs[0] = "mutated"
|
|
|
|
|
require.Equal(t, "10.0.0.25", config1.WebRTC.NAT1To1IPs[0])
|
|
|
|
|
}
|
|
|
|
|
|
2023-02-01 10:09:20 -05:00
|
|
|
func TestValidateDefault(t *testing.T) {
|
2023-02-21 06:57:33 -05:00
|
|
|
fs, err := fs.NewMemFilesystem(fs.MemConfig{})
|
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
|
2023-02-01 10:09:20 -05:00
|
|
|
size, fresh, err := fs.WriteFileReader("./mime.types", strings.NewReader("xxxxx"))
|
|
|
|
|
require.Equal(t, int64(5), size)
|
|
|
|
|
require.Equal(t, true, fresh)
|
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
|
2023-02-21 06:57:33 -05:00
|
|
|
_, _, err = fs.WriteFileReader("/bin/ffmpeg", strings.NewReader("xxxxx"))
|
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
|
2023-02-01 10:09:20 -05:00
|
|
|
cfg := New(fs)
|
|
|
|
|
|
|
|
|
|
cfg.Validate(true)
|
|
|
|
|
|
|
|
|
|
errors := []string{}
|
|
|
|
|
cfg.Messages(func(level string, v vars.Variable, message string) {
|
|
|
|
|
if level == "error" {
|
|
|
|
|
errors = append(errors, message)
|
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
require.Equal(t, 0, len(cfg.Overrides()))
|
|
|
|
|
require.Equal(t, false, cfg.HasErrors(), errors)
|
|
|
|
|
}
|