...

Source file src/github.com/linkerd/linkerd2/controller/k8s/test_helper.go

Documentation: github.com/linkerd/linkerd2/controller/k8s

     1  package k8s
     2  
     3  import (
     4  	l5dcrdclient "github.com/linkerd/linkerd2/controller/gen/client/clientset/versioned"
     5  	"github.com/linkerd/linkerd2/pkg/k8s"
     6  	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
     7  	"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
     8  	"k8s.io/apimachinery/pkg/runtime"
     9  	"k8s.io/client-go/kubernetes"
    10  	clientsetscheme "k8s.io/client-go/kubernetes/scheme"
    11  	"k8s.io/client-go/metadata/fake"
    12  	"k8s.io/client-go/testing"
    13  )
    14  
    15  // NewFakeAPI provides a mock Kubernetes API for testing.
    16  func NewFakeAPI(configs ...string) (*API, error) {
    17  	clientSet, _, _, spClientSet, err := k8s.NewFakeClientSets(configs...)
    18  	if err != nil {
    19  		return nil, err
    20  	}
    21  
    22  	return NewFakeClusterScopedAPI(clientSet, spClientSet), nil
    23  }
    24  
    25  // NewFakeAPI provides a mock Kubernetes API for testing.
    26  func NewFakeAPIWithActions(configs ...string) (*API, func() []testing.Action, error) {
    27  	clientSet, _, _, spClientSet, err := k8s.NewFakeClientSets(configs...)
    28  	if err != nil {
    29  		return nil, nil, err
    30  	}
    31  
    32  	return NewFakeClusterScopedAPI(clientSet, spClientSet), clientSet.Actions, nil
    33  }
    34  
    35  // NewFakeAPIWithL5dClient provides a mock Kubernetes API for testing like
    36  // NewFakeAPI, but it also returns the mock client for linkerd CRDs
    37  func NewFakeAPIWithL5dClient(configs ...string) (*API, l5dcrdclient.Interface, error) {
    38  	clientSet, _, _, l5dClientSet, err := k8s.NewFakeClientSets(configs...)
    39  	if err != nil {
    40  		return nil, nil, err
    41  	}
    42  
    43  	return NewFakeClusterScopedAPI(clientSet, l5dClientSet), l5dClientSet, nil
    44  }
    45  
    46  // NewFakeClusterScopedAPI provides a mock Kubernetes API for testing.
    47  func NewFakeClusterScopedAPI(clientSet kubernetes.Interface, l5dClientSet l5dcrdclient.Interface) *API {
    48  	return NewClusterScopedAPI(
    49  		clientSet,
    50  		nil,
    51  		l5dClientSet,
    52  		"fake",
    53  		CJ,
    54  		CM,
    55  		Deploy,
    56  		DS,
    57  		Endpoint,
    58  		Job,
    59  		MWC,
    60  		NS,
    61  		Pod,
    62  		ExtWorkload,
    63  		RC,
    64  		RS,
    65  		SP,
    66  		SS,
    67  		Svc,
    68  		Node,
    69  		ES,
    70  		Srv,
    71  		Secret,
    72  		ExtWorkload,
    73  	)
    74  }
    75  
    76  // NewFakeMetadataAPI provides a mock Kubernetes API for testing.
    77  func NewFakeMetadataAPI(configs []string) (*MetadataAPI, error) {
    78  	sch := runtime.NewScheme()
    79  	metav1.AddMetaToScheme(sch)
    80  
    81  	var objs []runtime.Object
    82  	for _, config := range configs {
    83  		obj, err := k8s.ToRuntimeObject(config)
    84  		if err != nil {
    85  			return nil, err
    86  		}
    87  		objMeta, err := toPartialObjectMetadata(obj)
    88  		if err != nil {
    89  			return nil, err
    90  		}
    91  		objs = append(objs, objMeta)
    92  	}
    93  
    94  	metadataClient := fake.NewSimpleMetadataClient(sch, objs...)
    95  
    96  	return newClusterScopedMetadataAPI(
    97  		metadataClient,
    98  		"fake",
    99  		CJ,
   100  		CM,
   101  		Deploy,
   102  		DS,
   103  		Endpoint,
   104  		Job,
   105  		MWC,
   106  		NS,
   107  		Pod,
   108  		RC,
   109  		RS,
   110  		SP,
   111  		SS,
   112  		Svc,
   113  		Node,
   114  		ES,
   115  		Svc,
   116  	)
   117  }
   118  
   119  func toPartialObjectMetadata(obj runtime.Object) (*metav1.PartialObjectMetadata, error) {
   120  	u := &unstructured.Unstructured{}
   121  	err := clientsetscheme.Scheme.Convert(obj, u, nil)
   122  	if err != nil {
   123  		return nil, err
   124  	}
   125  
   126  	return &metav1.PartialObjectMetadata{
   127  		TypeMeta: metav1.TypeMeta{
   128  			APIVersion: u.GetAPIVersion(),
   129  			Kind:       u.GetKind(),
   130  		},
   131  		ObjectMeta: metav1.ObjectMeta{
   132  			Namespace:       u.GetNamespace(),
   133  			Name:            u.GetName(),
   134  			Annotations:     u.GetAnnotations(),
   135  			Labels:          u.GetLabels(),
   136  			OwnerReferences: u.GetOwnerReferences(),
   137  		},
   138  	}, nil
   139  }
   140  

View as plain text