mirror of
https://git.vectorsigma.ru/public/k3s.git
synced 2026-08-04 12:29:32 +00:00
External CLI actions cannot short-circuit on --help or --version, so we
cannot skip loading the config file if these flags are present when
running these wrapped commands. The behavior of just returning the
override flag name instead of the requested flag value was breaking
data-dir lookup when running wrapped commands.
Signed-off-by: Brad Davidson <brad.davidson@rancher.com>
(cherry picked from commit ff5c633fe7)
Signed-off-by: Brad Davidson <brad.davidson@rancher.com>
152 lines
4.5 KiB
Go
152 lines
4.5 KiB
Go
package configfilearg
|
|
|
|
import (
|
|
"os"
|
|
"reflect"
|
|
"testing"
|
|
)
|
|
|
|
func Test_UnitMustParse(t *testing.T) {
|
|
tests := []struct {
|
|
name string
|
|
args []string
|
|
config string
|
|
want []string
|
|
}{
|
|
{
|
|
name: "Basic server",
|
|
args: []string{"k3s", "server"},
|
|
|
|
want: []string{"k3s", "server"},
|
|
},
|
|
{
|
|
name: "Server with known flags",
|
|
args: []string{"k3s", "server", "-t 12345", "--write-kubeconfig-mode 644"},
|
|
|
|
want: []string{"k3s", "server", "-t 12345", "--write-kubeconfig-mode 644"},
|
|
},
|
|
{
|
|
name: "Server with known flags and config with known and unknown flags",
|
|
args: []string{"k3s", "server", "--write-kubeconfig-mode 644"},
|
|
config: "./testdata/defaultdata.yaml",
|
|
want: []string{"k3s", "server", "--token=12345", "--node-label=DEAFBEEF",
|
|
"--etcd-s3=true", "--etcd-s3-bucket=my-backup", "--kubelet-arg=max-pods=999", "--write-kubeconfig-mode 644"},
|
|
},
|
|
{
|
|
name: "Basic etcd-snapshot",
|
|
args: []string{"k3s", "etcd-snapshot", "save"},
|
|
|
|
want: []string{"k3s", "etcd-snapshot", "save"},
|
|
},
|
|
{
|
|
name: "Etcd-snapshot with known flags",
|
|
args: []string{"k3s", "etcd-snapshot", "save", "--s3=true"},
|
|
|
|
want: []string{"k3s", "etcd-snapshot", "save", "--s3=true"},
|
|
},
|
|
{
|
|
name: "Etcd-snapshot with config with known and unknown flags",
|
|
args: []string{"k3s", "etcd-snapshot", "save"},
|
|
config: "./testdata/defaultdata.yaml",
|
|
want: []string{"k3s", "etcd-snapshot", "save", "--etcd-s3=true", "--etcd-s3-bucket=my-backup"},
|
|
},
|
|
{
|
|
name: "Agent with known flags",
|
|
args: []string{"k3s", "agent", "--token=12345"},
|
|
|
|
want: []string{"k3s", "agent", "--token=12345"},
|
|
},
|
|
{
|
|
name: "Agent with config with known and unknown flags, flags are not skipped",
|
|
args: []string{"k3s", "agent"},
|
|
config: "./testdata/defaultdata.yaml",
|
|
want: []string{"k3s", "agent", "--token=12345", "--node-label=DEAFBEEF",
|
|
"--etcd-s3=true", "--etcd-s3-bucket=my-backup", "--notaflag=true", "--kubelet-arg=max-pods=999"},
|
|
},
|
|
}
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
DefaultParser.DefaultConfig = tt.config
|
|
if got := MustParse(tt.args); !reflect.DeepEqual(got, tt.want) {
|
|
t.Errorf("MustParse() = %+v\nWant = %+v", got, tt.want)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
func Test_UnitMustFindString(t *testing.T) {
|
|
tests := []struct {
|
|
name string
|
|
args []string
|
|
target string
|
|
setup func() error // Optional, delete if unused
|
|
teardown func() error // Optional, delete if unused
|
|
want string
|
|
}{
|
|
{
|
|
name: "Target not found in config file",
|
|
args: []string{"k3s", "--foo", "bar"},
|
|
target: "token",
|
|
|
|
want: "",
|
|
|
|
setup: func() error { return os.Setenv("K3S_CONFIG_FILE", "./testdata/data.yaml") },
|
|
teardown: func() error { return os.Unsetenv("K3S_CONFIG_FILE") },
|
|
},
|
|
{
|
|
name: "Target found in config file",
|
|
args: []string{"k3s", "--foo", "bar"},
|
|
target: "token",
|
|
|
|
want: "12345",
|
|
|
|
setup: func() error { return os.Setenv("K3S_CONFIG_FILE", "./testdata/defaultdata.yaml") },
|
|
teardown: func() error { return os.Unsetenv("K3S_CONFIG_FILE") },
|
|
},
|
|
{
|
|
name: "Override flag is returned if found",
|
|
args: []string{"k3s", "--foo", "bar", "--version"},
|
|
target: "token",
|
|
|
|
want: "--version",
|
|
|
|
setup: func() error { return os.Setenv("K3S_CONFIG_FILE", "./testdata/defaultdata.yaml") },
|
|
teardown: func() error { return os.Unsetenv("K3S_CONFIG_FILE") },
|
|
},
|
|
{
|
|
name: "Override flag is not returned for specific subcommands",
|
|
args: []string{"k3s", "ctr", "--foo", "bar", "--version"},
|
|
target: "token",
|
|
|
|
want: "12345",
|
|
|
|
setup: func() error { return os.Setenv("K3S_CONFIG_FILE", "./testdata/defaultdata.yaml") },
|
|
teardown: func() error { return os.Unsetenv("K3S_CONFIG_FILE") },
|
|
},
|
|
{
|
|
name: "Override flag is not returned for specific subcommands",
|
|
args: []string{"kubectl", "--foo", "bar", "--help"},
|
|
target: "token",
|
|
|
|
want: "12345",
|
|
|
|
setup: func() error { return os.Setenv("K3S_CONFIG_FILE", "./testdata/defaultdata.yaml") },
|
|
teardown: func() error { return os.Unsetenv("K3S_CONFIG_FILE") },
|
|
},
|
|
}
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
defer tt.teardown()
|
|
if err := tt.setup(); err != nil {
|
|
t.Errorf("Setup for MustFindString() failed = %v", err)
|
|
return
|
|
}
|
|
got := MustFindString(tt.args, tt.target, "crictl", "ctr", "kubectl")
|
|
t.Logf("MustFindString(%+v, %+v) = %s", tt.args, tt.target, got)
|
|
if got != tt.want {
|
|
t.Errorf("MustFindString() = %+v\nWant = %+v", got, tt.want)
|
|
}
|
|
})
|
|
}
|
|
}
|