310 lines
6.4 KiB
Go
310 lines
6.4 KiB
Go
// SPDX-License-Identifier: Apache-2.0
|
|
// Copyright Authors of K9s
|
|
|
|
package client_test
|
|
|
|
import (
|
|
"errors"
|
|
"os"
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/derailed/k9s/internal/client"
|
|
"github.com/rs/zerolog"
|
|
"github.com/stretchr/testify/assert"
|
|
"k8s.io/cli-runtime/pkg/genericclioptions"
|
|
)
|
|
|
|
func init() {
|
|
zerolog.SetGlobalLevel(zerolog.FatalLevel)
|
|
}
|
|
|
|
func TestCallTimeout(t *testing.T) {
|
|
uu := map[string]struct {
|
|
t string
|
|
e time.Duration
|
|
}{
|
|
"custom": {
|
|
t: "1m",
|
|
e: 1 * time.Minute,
|
|
},
|
|
"default": {
|
|
e: 15 * time.Second,
|
|
},
|
|
}
|
|
|
|
for k := range uu {
|
|
u := uu[k]
|
|
t.Run(k, func(t *testing.T) {
|
|
flags := genericclioptions.NewConfigFlags(false)
|
|
flags.Timeout = &u.t
|
|
cfg := client.NewConfig(flags)
|
|
assert.Equal(t, u.e, cfg.CallTimeout())
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestConfigCurrentContext(t *testing.T) {
|
|
var kubeConfig = "./testdata/config"
|
|
|
|
uu := map[string]struct {
|
|
context string
|
|
e string
|
|
}{
|
|
"default": {
|
|
e: "fred",
|
|
},
|
|
"custom": {
|
|
context: "blee",
|
|
e: "blee",
|
|
},
|
|
}
|
|
|
|
for k := range uu {
|
|
u := uu[k]
|
|
t.Run(k, func(t *testing.T) {
|
|
flags := genericclioptions.NewConfigFlags(false)
|
|
flags.KubeConfig = &kubeConfig
|
|
if u.context != "" {
|
|
flags.Context = &u.context
|
|
}
|
|
cfg := client.NewConfig(flags)
|
|
ctx, err := cfg.CurrentContextName()
|
|
assert.Nil(t, err)
|
|
assert.Equal(t, u.e, ctx)
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestConfigCurrentCluster(t *testing.T) {
|
|
name, kubeConfig := "blee", "./testdata/config"
|
|
uu := map[string]struct {
|
|
flags *genericclioptions.ConfigFlags
|
|
cluster string
|
|
}{
|
|
"default": {
|
|
flags: &genericclioptions.ConfigFlags{
|
|
KubeConfig: &kubeConfig,
|
|
},
|
|
cluster: "zorg",
|
|
},
|
|
"custom": {
|
|
flags: &genericclioptions.ConfigFlags{
|
|
KubeConfig: &kubeConfig,
|
|
Context: &name,
|
|
},
|
|
cluster: "blee",
|
|
},
|
|
}
|
|
|
|
for k := range uu {
|
|
u := uu[k]
|
|
t.Run(k, func(t *testing.T) {
|
|
cfg := client.NewConfig(u.flags)
|
|
ct, err := cfg.CurrentClusterName()
|
|
assert.Nil(t, err)
|
|
assert.Equal(t, u.cluster, ct)
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestConfigCurrentUser(t *testing.T) {
|
|
name, kubeConfig := "blee", "./testdata/config"
|
|
uu := map[string]struct {
|
|
flags *genericclioptions.ConfigFlags
|
|
user string
|
|
}{
|
|
"default": {
|
|
flags: &genericclioptions.ConfigFlags{KubeConfig: &kubeConfig},
|
|
user: "fred",
|
|
},
|
|
"custom": {
|
|
flags: &genericclioptions.ConfigFlags{KubeConfig: &kubeConfig, AuthInfoName: &name},
|
|
user: "blee",
|
|
},
|
|
}
|
|
|
|
for k := range uu {
|
|
u := uu[k]
|
|
t.Run(k, func(t *testing.T) {
|
|
cfg := client.NewConfig(u.flags)
|
|
ctx, err := cfg.CurrentUserName()
|
|
assert.Nil(t, err)
|
|
assert.Equal(t, u.user, ctx)
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestConfigCurrentNamespace(t *testing.T) {
|
|
kubeConfig := "./testdata/config"
|
|
bleeNS, bleeCTX := "blee", "blee"
|
|
uu := map[string]struct {
|
|
flags *genericclioptions.ConfigFlags
|
|
namespace string
|
|
}{
|
|
"default": {
|
|
flags: &genericclioptions.ConfigFlags{KubeConfig: &kubeConfig},
|
|
namespace: "",
|
|
},
|
|
"withContext": {
|
|
flags: &genericclioptions.ConfigFlags{KubeConfig: &kubeConfig, Context: &bleeCTX},
|
|
namespace: "zorg",
|
|
},
|
|
"withNS": {
|
|
flags: &genericclioptions.ConfigFlags{KubeConfig: &kubeConfig, Namespace: &bleeNS},
|
|
namespace: "blee",
|
|
},
|
|
}
|
|
|
|
for k := range uu {
|
|
u := uu[k]
|
|
t.Run(k, func(t *testing.T) {
|
|
cfg := client.NewConfig(u.flags)
|
|
ns, err := cfg.CurrentNamespaceName()
|
|
if ns != "" {
|
|
assert.Nil(t, err)
|
|
}
|
|
assert.Equal(t, u.namespace, ns)
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestConfigGetContext(t *testing.T) {
|
|
kubeConfig := "./testdata/config"
|
|
uu := map[string]struct {
|
|
cluster string
|
|
err error
|
|
}{
|
|
"default": {
|
|
cluster: "blee",
|
|
},
|
|
"custom": {
|
|
cluster: "bozo",
|
|
err: errors.New(`getcontext - invalid context specified: "bozo"`),
|
|
},
|
|
}
|
|
|
|
flags := &genericclioptions.ConfigFlags{KubeConfig: &kubeConfig}
|
|
cfg := client.NewConfig(flags)
|
|
for k := range uu {
|
|
u := uu[k]
|
|
t.Run(k, func(t *testing.T) {
|
|
ctx, err := cfg.GetContext(u.cluster)
|
|
if err != nil {
|
|
assert.Equal(t, u.err, err)
|
|
} else {
|
|
assert.NotNil(t, ctx)
|
|
assert.Equal(t, u.cluster, ctx.Cluster)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestConfigSwitchContext(t *testing.T) {
|
|
cluster, kubeConfig := "duh", "./testdata/config"
|
|
flags := genericclioptions.ConfigFlags{
|
|
KubeConfig: &kubeConfig,
|
|
Context: &cluster,
|
|
}
|
|
|
|
cfg := client.NewConfig(&flags)
|
|
err := cfg.SwitchContext("blee")
|
|
assert.Nil(t, err)
|
|
ctx, err := cfg.CurrentContextName()
|
|
assert.Nil(t, err)
|
|
assert.Equal(t, "blee", ctx)
|
|
}
|
|
|
|
func TestConfigAccess(t *testing.T) {
|
|
context, kubeConfig := "duh", "./testdata/config"
|
|
flags := genericclioptions.ConfigFlags{
|
|
KubeConfig: &kubeConfig,
|
|
Context: &context,
|
|
}
|
|
|
|
cfg := client.NewConfig(&flags)
|
|
acc, err := cfg.ConfigAccess()
|
|
assert.Nil(t, err)
|
|
assert.True(t, len(acc.GetDefaultFilename()) > 0)
|
|
}
|
|
|
|
func TestConfigContextNames(t *testing.T) {
|
|
cluster, kubeConfig := "duh", "./testdata/config"
|
|
flags := genericclioptions.ConfigFlags{
|
|
KubeConfig: &kubeConfig,
|
|
Context: &cluster,
|
|
}
|
|
|
|
cfg := client.NewConfig(&flags)
|
|
cc, err := cfg.ContextNames()
|
|
assert.Nil(t, err)
|
|
assert.Equal(t, 3, len(cc))
|
|
}
|
|
|
|
func TestConfigContexts(t *testing.T) {
|
|
context, kubeConfig := "duh", "./testdata/config"
|
|
flags := genericclioptions.ConfigFlags{
|
|
KubeConfig: &kubeConfig,
|
|
Context: &context,
|
|
}
|
|
|
|
cfg := client.NewConfig(&flags)
|
|
cc, err := cfg.Contexts()
|
|
assert.Nil(t, err)
|
|
assert.Equal(t, 3, len(cc))
|
|
}
|
|
|
|
func TestConfigDelContext(t *testing.T) {
|
|
assert.NoError(t, cp("./testdata/config.2", "./testdata/config.1"))
|
|
|
|
context, kubeConfig := "duh", "./testdata/config.1"
|
|
flags := genericclioptions.ConfigFlags{
|
|
KubeConfig: &kubeConfig,
|
|
Context: &context,
|
|
}
|
|
|
|
cfg := client.NewConfig(&flags)
|
|
err := cfg.DelContext("fred")
|
|
assert.NoError(t, err)
|
|
|
|
cc, err := cfg.ContextNames()
|
|
assert.NoError(t, err)
|
|
assert.Equal(t, 1, len(cc))
|
|
_, ok := cc["blee"]
|
|
assert.True(t, ok)
|
|
}
|
|
|
|
func TestConfigRestConfig(t *testing.T) {
|
|
kubeConfig := "./testdata/config"
|
|
flags := genericclioptions.ConfigFlags{
|
|
KubeConfig: &kubeConfig,
|
|
}
|
|
|
|
cfg := client.NewConfig(&flags)
|
|
rc, err := cfg.RESTConfig()
|
|
assert.Nil(t, err)
|
|
assert.Equal(t, "https://localhost:3002", rc.Host)
|
|
}
|
|
|
|
func TestConfigBadConfig(t *testing.T) {
|
|
kubeConfig := "./testdata/bork_config"
|
|
flags := genericclioptions.ConfigFlags{
|
|
KubeConfig: &kubeConfig,
|
|
}
|
|
|
|
cfg := client.NewConfig(&flags)
|
|
_, err := cfg.RESTConfig()
|
|
assert.NotNil(t, err)
|
|
}
|
|
|
|
// Helpers...
|
|
|
|
func cp(src string, dst string) error {
|
|
data, err := os.ReadFile(src)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
return os.WriteFile(dst, data, 0600)
|
|
}
|