k9s/internal/dao/utils_test.go

79 lines
1.8 KiB
Go

// SPDX-License-Identifier: Apache-2.0
// Copyright Authors of K9s
package dao_test
import (
"encoding/json"
"fmt"
"os"
"path"
"strings"
"github.com/derailed/k9s/internal/client"
"github.com/derailed/k9s/internal/dao"
"github.com/derailed/k9s/internal/watch"
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
"k8s.io/apimachinery/pkg/labels"
"k8s.io/apimachinery/pkg/runtime"
"k8s.io/client-go/informers"
)
type testFactory struct {
inventory map[string]map[*client.GVR][]runtime.Object
}
func makeFactory() dao.Factory {
return &testFactory{
inventory: map[string]map[*client.GVR][]runtime.Object{
"kube-system": {
client.SecGVR: {
load("secret"),
},
},
},
}
}
var _ dao.Factory = &testFactory{}
func (*testFactory) Client() client.Connection {
return nil
}
func (f *testFactory) Get(gvr *client.GVR, fqn string, _ bool, _ labels.Selector) (runtime.Object, error) {
ns, po := path.Split(fqn)
ns = strings.Trim(ns, "/")
for _, o := range f.inventory[ns][gvr] {
if o.(*unstructured.Unstructured).GetName() == po {
return o, nil
}
}
return nil, nil
}
func (f *testFactory) List(gvr *client.GVR, ns string, _ bool, _ labels.Selector) ([]runtime.Object, error) {
return f.inventory[ns][gvr], nil
}
func (*testFactory) ForResource(string, *client.GVR) (informers.GenericInformer, error) {
return nil, nil
}
func (*testFactory) CanForResource(string, *client.GVR, []string) (informers.GenericInformer, error) {
return nil, nil
}
func (*testFactory) WaitForCacheSync() {}
func (*testFactory) Forwarders() watch.Forwarders {
return nil
}
func (*testFactory) DeleteForwarder(string) {}
func load(n string) *unstructured.Unstructured {
raw, _ := os.ReadFile(fmt.Sprintf("testdata/%s.json", n))
var o unstructured.Unstructured
_ = json.Unmarshal(raw, &o)
return &o
}