mirror of
https://codeberg.org/Codeberg/pages-server.git
synced 2025-04-24 13:56:57 +00:00
167 lines
4.5 KiB
Go
167 lines
4.5 KiB
Go
package config
|
|
|
|
import (
|
|
"os"
|
|
"testing"
|
|
|
|
"github.com/pelletier/go-toml/v2"
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/urfave/cli/v2"
|
|
|
|
cmd "codeberg.org/codeberg/pages/cli"
|
|
)
|
|
|
|
func runApp(t *testing.T, fn func(*cli.Context) error, args []string) {
|
|
app := cmd.CreatePagesApp()
|
|
app.Action = fn
|
|
|
|
// os.Args always contains the binary name
|
|
args = append([]string{"testing"}, args...)
|
|
|
|
err := app.Run(args)
|
|
assert.NoError(t, err)
|
|
}
|
|
|
|
func TestReadConfigShouldReturnEmptyConfigWhenConfigArgEmpty(t *testing.T) {
|
|
runApp(
|
|
t,
|
|
func(ctx *cli.Context) error {
|
|
cfg, err := ReadConfig(ctx)
|
|
assert.Equal(t, &Config{}, cfg)
|
|
|
|
return err
|
|
},
|
|
[]string{},
|
|
)
|
|
}
|
|
|
|
func TestReadConfigShouldReturnConfigFromFileWhenConfigArgPresent(t *testing.T) {
|
|
runApp(
|
|
t,
|
|
func(ctx *cli.Context) error {
|
|
content, err := os.ReadFile("assets/test_config.toml")
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
expectedConfig := &Config{}
|
|
err = toml.Unmarshal(content, expectedConfig)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
cfg, err := ReadConfig(ctx)
|
|
assert.Equal(t, expectedConfig, cfg)
|
|
|
|
return err
|
|
},
|
|
[]string{"--config-file", "assets/test_config.toml"},
|
|
)
|
|
}
|
|
|
|
func TestMergeServerConfigShouldAddDefaultBlacklistedPathsToBlacklistedPaths(t *testing.T) {
|
|
runApp(
|
|
t,
|
|
func(ctx *cli.Context) error {
|
|
cfg := &ServerConfig{}
|
|
mergeServerConfig(ctx, cfg)
|
|
|
|
expected := ALWAYS_BLACKLISTED_PATHS
|
|
assert.Equal(t, expected, cfg.BlacklistedPaths)
|
|
|
|
return nil
|
|
},
|
|
[]string{},
|
|
)
|
|
}
|
|
|
|
func TestMergeServerConfigShouldReplaceAllExistingValuesGivenAllArgsExist(t *testing.T) {
|
|
runApp(
|
|
t,
|
|
func(ctx *cli.Context) error {
|
|
cfg := &ServerConfig{
|
|
Host: "original",
|
|
Port: 8080,
|
|
HttpPort: 80,
|
|
HttpServerEnabled: false,
|
|
MainDomain: "original",
|
|
RawDomain: "original",
|
|
AllowedCorsDomains: []string{"original"},
|
|
BlacklistedPaths: []string{"original"},
|
|
}
|
|
|
|
mergeServerConfig(ctx, cfg)
|
|
|
|
expectedConfig := &ServerConfig{
|
|
Host: "changed",
|
|
Port: 8443,
|
|
HttpPort: 443,
|
|
HttpServerEnabled: true,
|
|
MainDomain: "changed",
|
|
RawDomain: "changed",
|
|
AllowedCorsDomains: []string{"changed"},
|
|
BlacklistedPaths: append([]string{"changed"}, ALWAYS_BLACKLISTED_PATHS...),
|
|
}
|
|
|
|
assert.Equal(t, expectedConfig, cfg)
|
|
|
|
return nil
|
|
},
|
|
[]string{
|
|
"--pages-domain", "changed",
|
|
"--raw-domain", "changed",
|
|
"--allowed-cors-domains", "changed",
|
|
"--blacklisted-paths", "changed",
|
|
"--host", "changed",
|
|
"--port", "8443",
|
|
"--http-port", "443",
|
|
"--enable-http-server",
|
|
},
|
|
)
|
|
}
|
|
|
|
func TestMergeServerConfigShouldReplaceOnlyOneValueExistingValueGivenOnlyOneArgExists(t *testing.T) {
|
|
type testValuePair struct {
|
|
args []string
|
|
callback func(*ServerConfig)
|
|
}
|
|
testValuePairs := []testValuePair{
|
|
{args: []string{"--host", "changed"}, callback: func(sc *ServerConfig) { sc.Host = "changed" }},
|
|
{args: []string{"--port", "8443"}, callback: func(sc *ServerConfig) { sc.Port = 8443 }},
|
|
{args: []string{"--http-port", "443"}, callback: func(sc *ServerConfig) { sc.HttpPort = 443 }},
|
|
{args: []string{"--enable-http-server"}, callback: func(sc *ServerConfig) { sc.HttpServerEnabled = true }},
|
|
{args: []string{"--pages-domain", "changed"}, callback: func(sc *ServerConfig) { sc.MainDomain = "changed" }},
|
|
{args: []string{"--raw-domain", "changed"}, callback: func(sc *ServerConfig) { sc.RawDomain = "changed" }},
|
|
{args: []string{"--allowed-cors-domains", "changed"}, callback: func(sc *ServerConfig) { sc.AllowedCorsDomains = []string{"changed", "changed"} }}, // don't ask why, the cli lib always adds two strings when running all tests and one when running a single test
|
|
{args: []string{"--blacklisted-paths", "changed"}, callback: func(sc *ServerConfig) { sc.BlacklistedPaths = []string{"changed", "changed"} }}, // same here
|
|
}
|
|
|
|
for _, pair := range testValuePairs {
|
|
runApp(
|
|
t,
|
|
func(ctx *cli.Context) error {
|
|
cfg := ServerConfig{
|
|
Host: "original",
|
|
Port: 8080,
|
|
HttpPort: 80,
|
|
HttpServerEnabled: false,
|
|
MainDomain: "original",
|
|
RawDomain: "original",
|
|
AllowedCorsDomains: []string{"original"},
|
|
BlacklistedPaths: []string{"original"},
|
|
}
|
|
|
|
expectedConfig := cfg
|
|
pair.callback(&expectedConfig)
|
|
expectedConfig.BlacklistedPaths = append(expectedConfig.BlacklistedPaths, ALWAYS_BLACKLISTED_PATHS...)
|
|
|
|
mergeServerConfig(ctx, &cfg)
|
|
|
|
assert.Equal(t, expectedConfig, cfg)
|
|
|
|
return nil
|
|
},
|
|
pair.args,
|
|
)
|
|
}
|
|
}
|