56 lines
2.0 KiB
Go
56 lines
2.0 KiB
Go
|
|
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")
|
||
|
|
}
|
||
|
|
})
|
||
|
|
}
|
||
|
|
}
|