Files
EvoBGP/cmd/evobgp-agent/main_test.go
T
DenozordecandCursor f8e0520817 feat(httpapi): harden control plane and speed up prefix refresh
Очередь job получила lease и fencing, телеметрия и прогресс deploy сохраняются, ревизия пишет manifest входов. Обновление префиксов не переписывает неизменённый снимок, большие наборы идут через COPY, а устаревшая ревизия не попадает в deploy. Бандл ноды кэшируется, prune и постановка job больше не держат горячий путь.

Co-authored-by: Cursor <[email protected]>
2026-11-02 17:23:59 +07:00

50 lines
2.3 KiB
Go

package main
import (
"flag"
"io"
"reflect"
"testing"
"time"
)
func TestAgentFlagsBeforeAndAfterCommand(t *testing.T) {
for _, tc := range []struct {
name string
args []string
want []string
socket, listen string
every time.Duration
}{
{"legacy flags first", []string{"-socket=/custom/bird.ctl", "-watch-interval=45s", "watch"}, []string{"watch"}, "/custom/bird.ctl", "", 45 * time.Second},
{"compose command first", []string{"watch", "-socket=/run/bird/bird.ctl", "-watch-interval=30s"}, []string{"watch"}, "/run/bird/bird.ctl", "", 30 * time.Second},
{"serve", []string{"serve", "-listen=127.0.0.1:9999"}, []string{"serve"}, "", "127.0.0.1:9999", time.Minute},
{"mixed", []string{"-socket=/first", "watch", "-watch-interval=5s"}, []string{"watch"}, "/first", "", 5 * time.Second},
{"parse check", []string{"parse-check", "bird.conf"}, []string{"parse-check", "bird.conf"}, "", "", time.Minute},
{"global delimiter", []string{"--", "parse-check", "-bird.conf"}, []string{"parse-check", "-bird.conf"}, "", "", time.Minute},
{"flags then delimiter", []string{"-socket=/first", "--", "parse-check", "-bird.conf"}, []string{"parse-check", "-bird.conf"}, "/first", "", time.Minute},
{"delimiter as value", []string{"-socket", "--", "watch", "-watch-interval=5s"}, []string{"watch"}, "--", "", 5 * time.Second},
} {
t.Run(tc.name, func(t *testing.T) {
fs := flag.NewFlagSet("agent", flag.ContinueOnError)
fs.SetOutput(io.Discard)
socket := fs.String("socket", "", "")
listen := fs.String("listen", "", "")
every := fs.Duration("watch-interval", time.Minute, "")
args, err := parseAgentArgs(fs, tc.args)
if err != nil || !reflect.DeepEqual(args, tc.want) || *socket != tc.socket || *listen != tc.listen || *every != tc.every {
t.Fatalf("args=%v socket=%s listen=%s every=%s err=%v", args, *socket, *listen, *every, err)
}
})
}
}
func TestAgentRejectsIgnoredFlagsAndUnexpectedArguments(t *testing.T) {
for _, argv := range [][]string{{"watch", "-unknown=1"}, {"serve", "-unknown=1"}, {"watch", "unused"}, {"serve", "unused"}, {"configure", "unused"}} {
fs := flag.NewFlagSet("agent", flag.ContinueOnError)
fs.SetOutput(io.Discard)
if _, err := parseAgentArgs(fs, argv); err == nil {
t.Fatalf("ignored argv: %v", argv)
}
}
}