Files
yms-daemon/internal/hostnginx/config_test.go
T

56 lines
2.0 KiB
Go
Raw Normal View History

2026-08-16 01:27:30 +08:00
package hostnginx
import (
"bytes"
"strings"
"testing"
)
const serverConfiguration = `http {
upstream yms-server {
# yms-update managed upstream begin
# server 10.11.1.117:8080 max_fails=1 fail_timeout=2s;
server 10.11.1.117:8081 max_fails=1 fail_timeout=2s;
# yms-update managed upstream end
}
}
`
func TestActiveBackendPortReadsExactManagedBlock(t *testing.T) {
port, err := ActiveBackendPort([]byte(serverConfiguration))
if err != nil || port != 8081 {
t.Fatalf("unexpected active backend port: port=%d err=%v", port, err)
}
}
func TestRenderBackendPortPreservesConfigurationAndSwitchesOneServer(t *testing.T) {
rendered, err := RenderBackendPort([]byte(serverConfiguration), 8080)
if err != nil {
t.Fatalf("render backend port: %v", err)
}
port, err := ActiveBackendPort(rendered)
if err != nil || port != 8080 {
t.Fatalf("unexpected rendered backend port: port=%d err=%v", port, err)
}
if !bytes.Contains(rendered, []byte("server 10.11.1.117:8080 max_fails=1 fail_timeout=2s;")) ||
!bytes.Contains(rendered, []byte("# server 10.11.1.117:8081 max_fails=1 fail_timeout=2s;")) {
t.Fatalf("rendered configuration does not contain exact server lines:\n%s", rendered)
}
}
func TestManagedBlockRejectsAmbiguousOrAlteredInput(t *testing.T) {
tests := map[string]string{
"both active": strings.Replace(serverConfiguration, "# server 10.11.1.117:8080", "server 10.11.1.117:8080", 1),
"missing port": strings.Replace(serverConfiguration, " # server 10.11.1.117:8080 max_fails=1 fail_timeout=2s;\n", "", 1),
"changed option": strings.Replace(serverConfiguration, "max_fails=1", "max_fails=2", 1),
"extra line": strings.Replace(serverConfiguration, managedEnd, "# unexpected\n "+managedEnd, 1),
}
for name, content := range tests {
t.Run(name, func(t *testing.T) {
if _, err := ActiveBackendPort([]byte(content)); err == nil {
t.Fatal("expected altered managed block rejection")
}
})
}
}