drasl/config_test.go

171 lines
5.2 KiB
Go

package main
import (
"github.com/BurntSushi/toml"
"github.com/stretchr/testify/assert"
"os"
"testing"
)
func configTestConfig(stateDirectory string) *Config {
config := testConfig()
config.StateDirectory = stateDirectory
config.DataDirectory = "."
return config
}
func TestConfig(t *testing.T) {
t.Parallel()
sd := Unwrap(os.MkdirTemp("", "tmp"))
defer os.RemoveAll(sd)
config := configTestConfig(sd)
assert.Nil(t, CleanConfig(config))
config = configTestConfig(sd)
config.BaseURL = "https://δρασλ.example.com/"
config.Domain = "δρασλ.example.com"
assert.Nil(t, CleanConfig(config))
assert.Equal(t, "https://xn--mxafwwl.example.com", config.BaseURL)
assert.Equal(t, "xn--mxafwwl.example.com", config.Domain)
config = configTestConfig(sd)
config.BaseURL = ""
assert.NotNil(t, CleanConfig(config))
config = configTestConfig(sd)
config.BaseURL = ":an invalid URL"
assert.NotNil(t, CleanConfig(config))
config = configTestConfig(sd)
config.DefaultPreferredLanguage = "xx"
assert.NotNil(t, CleanConfig(config))
config = configTestConfig(sd)
config.Domain = ""
assert.NotNil(t, CleanConfig(config))
config = configTestConfig(sd)
config.InstanceName = ""
assert.NotNil(t, CleanConfig(config))
config = configTestConfig(sd)
config.ListenAddress = ""
assert.NotNil(t, CleanConfig(config))
config = configTestConfig(sd)
config.DefaultMaxPlayerCount = Constants.MaxPlayerCountUseDefault
assert.NotNil(t, CleanConfig(config))
config = configTestConfig(sd)
config.DefaultMaxPlayerCount = Constants.MaxPlayerCountUnlimited
assert.Nil(t, CleanConfig(config))
// Missing state directory should be ignored
config = configTestConfig(sd)
config.StateDirectory = "/tmp/DraslInvalidStateDirectoryNothingHere"
assert.Nil(t, CleanConfig(config))
config = configTestConfig(sd)
config.RegistrationExistingPlayer.Allow = true
config.ImportExistingPlayer.Allow = true
config.ImportExistingPlayer.Nickname = "Example"
config.ImportExistingPlayer.SessionURL = "https://δρασλ.example.com/"
config.ImportExistingPlayer.AccountURL = "https://drasl.example.com/"
assert.Nil(t, CleanConfig(config))
assert.Equal(t, "https://xn--mxafwwl.example.com", config.ImportExistingPlayer.SessionURL)
assert.Equal(t, "https://drasl.example.com", config.ImportExistingPlayer.AccountURL)
config = configTestConfig(sd)
config.RegistrationExistingPlayer.Allow = true
config.ImportExistingPlayer.Nickname = ""
assert.NotNil(t, CleanConfig(config))
config = configTestConfig(sd)
config.RegistrationExistingPlayer.Allow = true
config.ImportExistingPlayer.SessionURL = ""
assert.NotNil(t, CleanConfig(config))
config = configTestConfig(sd)
config.RegistrationExistingPlayer.Allow = true
config.ImportExistingPlayer.AccountURL = ""
assert.NotNil(t, CleanConfig(config))
config = configTestConfig(sd)
testFallbackAPIServer := FallbackAPIServerConfig{
Nickname: "Nickname",
SessionURL: "https://δρασλ.example.com/",
AccountURL: "https://δρασλ.example.com/",
ServicesURL: "https://δρασλ.example.com/",
SkinDomains: []string{"δρασλ.example.com"},
}
fb := testFallbackAPIServer
config.FallbackAPIServers = []FallbackAPIServerConfig{fb}
assert.Nil(t, CleanConfig(config))
assert.Equal(t, []FallbackAPIServerConfig{{
Nickname: fb.Nickname,
SessionURL: "https://xn--mxafwwl.example.com",
AccountURL: "https://xn--mxafwwl.example.com",
ServicesURL: "https://xn--mxafwwl.example.com",
SkinDomains: []string{"xn--mxafwwl.example.com"},
}}, config.FallbackAPIServers)
fb = testFallbackAPIServer
fb.Nickname = ""
config.FallbackAPIServers = []FallbackAPIServerConfig{fb}
assert.NotNil(t, CleanConfig(config))
fb = testFallbackAPIServer
fb.SessionURL = ""
config.FallbackAPIServers = []FallbackAPIServerConfig{fb}
assert.NotNil(t, CleanConfig(config))
fb = testFallbackAPIServer
fb.SessionURL = ":invalid URL"
config.FallbackAPIServers = []FallbackAPIServerConfig{fb}
assert.NotNil(t, CleanConfig(config))
fb = testFallbackAPIServer
fb.AccountURL = ""
config.FallbackAPIServers = []FallbackAPIServerConfig{fb}
assert.NotNil(t, CleanConfig(config))
fb = testFallbackAPIServer
fb.AccountURL = ":invalid URL"
config.FallbackAPIServers = []FallbackAPIServerConfig{fb}
assert.NotNil(t, CleanConfig(config))
fb = testFallbackAPIServer
fb.ServicesURL = ""
config.FallbackAPIServers = []FallbackAPIServerConfig{fb}
assert.NotNil(t, CleanConfig(config))
fb = testFallbackAPIServer
fb.ServicesURL = ":invalid URL"
config.FallbackAPIServers = []FallbackAPIServerConfig{fb}
assert.NotNil(t, CleanConfig(config))
// Test that TEMPLATE_CONFIG_FILE is valid
var templateConfig Config
_, err := toml.Decode(TEMPLATE_CONFIG_FILE, &templateConfig)
assert.Nil(t, err)
// Test that the example configs are valid
_, deprecations, err := ReadConfig("example/config-example.toml", false)
assert.Empty(t, deprecations)
assert.Nil(t, err)
// The example configs should all be the same
correctBytes, err := os.ReadFile("example/config-example.toml")
assert.Nil(t, err)
configBytes, err := os.ReadFile("example/docker/config/config.toml")
assert.Nil(t, err)
assert.Equal(t, correctBytes, configBytes)
configBytes, err = os.ReadFile("example/docker-caddy/config/config.toml")
assert.Nil(t, err)
assert.Equal(t, correctBytes, configBytes)
}