111 lines
2.3 KiB
Go
111 lines
2.3 KiB
Go
// SPDX-License-Identifier: Apache-2.0
|
|
// Copyright Authors of K9s
|
|
|
|
package data_test
|
|
|
|
import (
|
|
"log/slog"
|
|
"os"
|
|
"strings"
|
|
"testing"
|
|
|
|
"github.com/derailed/k9s/internal/config/data"
|
|
"github.com/derailed/k9s/internal/config/mock"
|
|
"github.com/stretchr/testify/assert"
|
|
"gopkg.in/yaml.v3"
|
|
"k8s.io/cli-runtime/pkg/genericclioptions"
|
|
)
|
|
|
|
func init() {
|
|
slog.SetDefault(slog.New(slog.DiscardHandler))
|
|
}
|
|
|
|
func TestDirLoad(t *testing.T) {
|
|
uu := map[string]struct {
|
|
dir string
|
|
flags *genericclioptions.ConfigFlags
|
|
err error
|
|
cfg *data.Config
|
|
}{
|
|
"happy-cl-1-ct-1": {
|
|
dir: "testdata/data/k9s",
|
|
flags: makeFlags("cl-1", "ct-1-1"),
|
|
cfg: mustLoadConfig("testdata/configs/ct-1-1.yaml"),
|
|
},
|
|
|
|
"happy-cl-1-ct2": {
|
|
dir: "testdata/data/k9s",
|
|
flags: makeFlags("cl-1", "ct-1-2"),
|
|
cfg: mustLoadConfig("testdata/configs/ct-1-2.yaml"),
|
|
},
|
|
|
|
"happy-cl-2": {
|
|
dir: "testdata/data/k9s",
|
|
flags: makeFlags("cl-2", "ct-2-1"),
|
|
cfg: mustLoadConfig("testdata/configs/ct-2-1.yaml"),
|
|
},
|
|
|
|
"toast": {
|
|
dir: "/tmp/data/k9s",
|
|
flags: makeFlags("cl-test", "ct-test-1"),
|
|
cfg: mustLoadConfig("testdata/configs/def_ct.yaml"),
|
|
},
|
|
|
|
"non-sanitized-path": {
|
|
dir: "/tmp/data/k9s",
|
|
flags: makeFlags("arn:aws:eks:eu-central-1:xxx:cluster/fred-blee", "fred-blee"),
|
|
cfg: mustLoadConfig("testdata/configs/aws_ct.yaml"),
|
|
},
|
|
}
|
|
|
|
for k := range uu {
|
|
u := uu[k]
|
|
t.Run(k, func(t *testing.T) {
|
|
assert.NotNil(t, u.cfg, "test config must not be nil")
|
|
if u.cfg == nil {
|
|
return
|
|
}
|
|
|
|
ks := mock.NewMockKubeSettings(u.flags)
|
|
if strings.Index(u.dir, "/tmp") == 0 {
|
|
assert.NoError(t, mock.EnsureDir(u.dir))
|
|
}
|
|
|
|
d := data.NewDir(u.dir)
|
|
ct, err := ks.CurrentContext()
|
|
assert.NoError(t, err)
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
cfg, err := d.Load(*u.flags.Context, ct)
|
|
assert.Equal(t, u.err, err)
|
|
if u.err == nil {
|
|
assert.Equal(t, u.cfg, cfg)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
// Helpers...
|
|
|
|
func makeFlags(cl, ct string) *genericclioptions.ConfigFlags {
|
|
return &genericclioptions.ConfigFlags{
|
|
ClusterName: &cl,
|
|
Context: &ct,
|
|
}
|
|
}
|
|
|
|
func mustLoadConfig(cfg string) *data.Config {
|
|
bb, err := os.ReadFile(cfg)
|
|
if err != nil {
|
|
return nil
|
|
}
|
|
var ct data.Config
|
|
if err = yaml.Unmarshal(bb, &ct); err != nil {
|
|
return nil
|
|
}
|
|
|
|
return &ct
|
|
}
|