f536987a7e
- doc: add comment
63 lines
2.5 KiB
Go
63 lines
2.5 KiB
Go
package hostnginx
|
|
|
|
import (
|
|
"bytes"
|
|
"strings"
|
|
"testing"
|
|
)
|
|
|
|
// serverConfiguration 含受管理 upstream 块、8080 被注释、8081 活动的示例配置,供各测试共享。
|
|
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
|
|
}
|
|
}
|
|
`
|
|
|
|
// TestActiveBackendPortReadsExactManagedBlock 验证 ActiveBackendPort 能从示例配置中
|
|
// 精确读取到活动端口 8081。
|
|
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)
|
|
}
|
|
}
|
|
|
|
// TestRenderBackendPortPreservesConfigurationAndSwitchesOneServer 验证 RenderBackendPort
|
|
// 只切换一条服务器行,其余配置保持不变,且渲染结果的活动端口正确。
|
|
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)
|
|
}
|
|
}
|
|
|
|
// TestManagedBlockRejectsAmbiguousOrAlteredInput 验证受管理块在端口双活、端口缺失、
|
|
// 选项被篡改或出现多余行等情况下都会被拒绝。
|
|
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")
|
|
}
|
|
})
|
|
}
|
|
}
|