feat: backend native executor implement
This commit is contained in:
@@ -0,0 +1,55 @@
|
||||
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")
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user