k3s/pkg/configfilearg/defaultparser_test.go

172 lines
5.2 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 with full path",
args: []string{"/usr/local/bin/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 wrapped commands",
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") },
},
{
name: "Override flag is not returned for wrapped commands with full path",
args: []string{"/usr/local/bin/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)
}
})
}
}