linkerd2/pkg/k8s/test_helper.go

41 lines
1.3 KiB
Go

package k8s
import (
"strings"
spclient "github.com/linkerd/linkerd2/controller/gen/client/clientset/versioned"
spfake "github.com/linkerd/linkerd2/controller/gen/client/clientset/versioned/fake"
spscheme "github.com/linkerd/linkerd2/controller/gen/client/clientset/versioned/scheme"
"k8s.io/apimachinery/pkg/runtime"
"k8s.io/client-go/kubernetes"
"k8s.io/client-go/kubernetes/fake"
"k8s.io/client-go/kubernetes/scheme"
)
// NewFakeClientSets provides a mock Kubernetes ClientSet for testing.
func NewFakeClientSets(configs ...string) (kubernetes.Interface, spclient.Interface, error) {
objs := []runtime.Object{}
spObjs := []runtime.Object{}
for _, config := range configs {
obj, err := ToRuntimeObject(config)
if err != nil {
return nil, nil, err
}
if strings.ToLower(obj.GetObjectKind().GroupVersionKind().Kind) == ServiceProfile {
spObjs = append(spObjs, obj)
} else {
objs = append(objs, obj)
}
}
return fake.NewSimpleClientset(objs...), spfake.NewSimpleClientset(spObjs...), nil
}
// ToRuntimeObject deserializes Kubernetes YAML into a Runtime Object
func ToRuntimeObject(config string) (runtime.Object, error) {
spscheme.AddToScheme(scheme.Scheme)
decode := scheme.Codecs.UniversalDeserializer().Decode
obj, _, err := decode([]byte(config), nil, nil)
return obj, err
}