Очередь job получила lease и fencing, телеметрия и прогресс deploy сохраняются, ревизия пишет manifest входов. Обновление префиксов не переписывает неизменённый снимок, большие наборы идут через COPY, а устаревшая ревизия не попадает в deploy. Бандл ноды кэшируется, prune и постановка job больше не держат горячий путь. Co-authored-by: Cursor <[email protected]>
50 lines
2.3 KiB
Go
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)
|
|
}
|
|
}
|
|
}
|