mirror of
https://github.com/unmojang/drasl.git
synced 2025-08-03 19:06:04 -04:00
171 lines
5.2 KiB
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 := FallbackAPIServer{
|
|
Nickname: "Nickname",
|
|
SessionURL: "https://δρασλ.example.com/",
|
|
AccountURL: "https://δρασλ.example.com/",
|
|
ServicesURL: "https://δρασλ.example.com/",
|
|
SkinDomains: []string{"δρασλ.example.com"},
|
|
}
|
|
fb := testFallbackAPIServer
|
|
config.FallbackAPIServers = []FallbackAPIServer{fb}
|
|
assert.Nil(t, CleanConfig(config))
|
|
|
|
assert.Equal(t, []FallbackAPIServer{{
|
|
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 = []FallbackAPIServer{fb}
|
|
assert.NotNil(t, CleanConfig(config))
|
|
|
|
fb = testFallbackAPIServer
|
|
fb.SessionURL = ""
|
|
config.FallbackAPIServers = []FallbackAPIServer{fb}
|
|
assert.NotNil(t, CleanConfig(config))
|
|
|
|
fb = testFallbackAPIServer
|
|
fb.SessionURL = ":invalid URL"
|
|
config.FallbackAPIServers = []FallbackAPIServer{fb}
|
|
assert.NotNil(t, CleanConfig(config))
|
|
|
|
fb = testFallbackAPIServer
|
|
fb.AccountURL = ""
|
|
config.FallbackAPIServers = []FallbackAPIServer{fb}
|
|
assert.NotNil(t, CleanConfig(config))
|
|
|
|
fb = testFallbackAPIServer
|
|
fb.AccountURL = ":invalid URL"
|
|
config.FallbackAPIServers = []FallbackAPIServer{fb}
|
|
assert.NotNil(t, CleanConfig(config))
|
|
|
|
fb = testFallbackAPIServer
|
|
fb.ServicesURL = ""
|
|
config.FallbackAPIServers = []FallbackAPIServer{fb}
|
|
assert.NotNil(t, CleanConfig(config))
|
|
|
|
fb = testFallbackAPIServer
|
|
fb.ServicesURL = ":invalid URL"
|
|
config.FallbackAPIServers = []FallbackAPIServer{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)
|
|
}
|