linkerd2/controller/k8s/test_helper.go

104 lines
1.9 KiB
Go

package k8s
import (
"github.com/linkerd/linkerd2/pkg/k8s"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
"k8s.io/apimachinery/pkg/runtime"
clientsetscheme "k8s.io/client-go/kubernetes/scheme"
"k8s.io/client-go/metadata/fake"
)
// NewFakeAPI provides a mock Kubernetes API for testing.
func NewFakeAPI(configs ...string) (*API, error) {
clientSet, _, _, spClientSet, err := k8s.NewFakeClientSets(configs...)
if err != nil {
return nil, err
}
return NewClusterScopedAPI(
clientSet,
nil,
spClientSet,
CJ,
CM,
Deploy,
DS,
Endpoint,
Job,
MWC,
NS,
Pod,
RC,
RS,
SP,
SS,
Svc,
Node,
ES,
Srv,
), nil
}
// NewFakeMetadataAPI provides a mock Kubernetes API for testing.
func NewFakeMetadataAPI(configs []string) (*MetadataAPI, error) {
sch := clientsetscheme.Scheme
metav1.AddMetaToScheme(sch)
var objs []runtime.Object
for _, config := range configs {
obj, err := k8s.ToRuntimeObject(config)
if err != nil {
return nil, err
}
objMeta, err := toPartialObjectMetadata(obj)
if err != nil {
return nil, err
}
objs = append(objs, objMeta)
}
metadataClient := fake.NewSimpleMetadataClient(sch, objs...)
return newClusterScopedMetadataAPI(
metadataClient,
CJ,
CM,
Deploy,
DS,
Endpoint,
Job,
MWC,
NS,
Pod,
RC,
RS,
SP,
SS,
Svc,
Node,
ES,
Svc,
)
}
func toPartialObjectMetadata(obj runtime.Object) (*metav1.PartialObjectMetadata, error) {
u := &unstructured.Unstructured{}
err := clientsetscheme.Scheme.Convert(obj, u, nil)
if err != nil {
return nil, err
}
return &metav1.PartialObjectMetadata{
TypeMeta: metav1.TypeMeta{
APIVersion: u.GetAPIVersion(),
Kind: u.GetKind(),
},
ObjectMeta: metav1.ObjectMeta{
Namespace: u.GetNamespace(),
Name: u.GetName(),
OwnerReferences: u.GetOwnerReferences(),
},
}, nil
}