github.com/crossplane/upjet@v1.3.0/pkg/migration/kubernetes_test.go (about)

     1  // SPDX-FileCopyrightText: 2023 The Crossplane Authors <https://crossplane.io>
     2  //
     3  // SPDX-License-Identifier: Apache-2.0
     4  
     5  package migration
     6  
     7  import (
     8  	"testing"
     9  
    10  	"github.com/google/go-cmp/cmp"
    11  	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
    12  	"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
    13  	"k8s.io/apimachinery/pkg/runtime"
    14  	"k8s.io/apimachinery/pkg/runtime/schema"
    15  	"k8s.io/client-go/discovery/cached/memory"
    16  	"k8s.io/client-go/dynamic/fake"
    17  	fakeclientset "k8s.io/client-go/kubernetes/fake"
    18  )
    19  
    20  func TestNewKubernetesSource(t *testing.T) {
    21  	type args struct {
    22  		gvks []schema.GroupVersionKind
    23  	}
    24  	type want struct {
    25  		ks  *KubernetesSource
    26  		err error
    27  	}
    28  
    29  	cases := map[string]struct {
    30  		args
    31  		want
    32  	}{
    33  		"Successful": {
    34  			args: args{
    35  				gvks: []schema.GroupVersionKind{
    36  					{
    37  						Group:   "ec2.aws.crossplane.io",
    38  						Version: "v1beta1",
    39  						Kind:    "VPC",
    40  					},
    41  					{
    42  						Group:   "azure.crossplane.io",
    43  						Version: "v1beta1",
    44  						Kind:    "ResourceGroup",
    45  					},
    46  				},
    47  			},
    48  			want: want{
    49  				ks: &KubernetesSource{
    50  					items: []UnstructuredWithMetadata{
    51  						{
    52  							Object: unstructured.Unstructured{
    53  								Object: unstructuredAwsVpc,
    54  							},
    55  							Metadata: Metadata{
    56  								Category: CategoryManaged,
    57  							},
    58  						},
    59  						{
    60  							Object: unstructured.Unstructured{
    61  								Object: unstructuredResourceGroup,
    62  							},
    63  							Metadata: Metadata{
    64  								Category: CategoryManaged,
    65  							},
    66  						},
    67  					},
    68  				},
    69  			},
    70  		},
    71  	}
    72  	for name, tc := range cases {
    73  		t.Run(name, func(t *testing.T) {
    74  			s := runtime.NewScheme()
    75  			r := NewRegistry(s)
    76  			// register a dummy converter for the test GVKs
    77  			r.resourceConverters = map[schema.GroupVersionKind]ResourceConverter{}
    78  			for _, gvk := range tc.args.gvks {
    79  				r.resourceConverters[gvk] = nil
    80  			}
    81  			dynamicClient := fake.NewSimpleDynamicClientWithCustomListKinds(s,
    82  				map[schema.GroupVersionResource]string{
    83  					{
    84  						Group:    "ec2.aws.crossplane.io",
    85  						Version:  "v1beta1",
    86  						Resource: "vpcs",
    87  					}: "VPCList",
    88  					{
    89  						Group:    "azure.crossplane.io",
    90  						Version:  "v1beta1",
    91  						Resource: "resourcegroups",
    92  					}: "ResourceGroupList",
    93  				},
    94  				&unstructured.Unstructured{Object: unstructuredAwsVpc},
    95  				&unstructured.Unstructured{Object: unstructuredResourceGroup})
    96  			client := fakeclientset.NewSimpleClientset(
    97  				&unstructured.Unstructured{Object: unstructuredAwsVpc},
    98  				&unstructured.Unstructured{Object: unstructuredResourceGroup},
    99  			)
   100  			client.Fake.Resources = []*metav1.APIResourceList{
   101  				{
   102  					GroupVersion: "ec2.aws.crossplane.io/v1beta1",
   103  					APIResources: []metav1.APIResource{
   104  						{
   105  							Name: "vpcs",
   106  							Kind: "VPC",
   107  						},
   108  					},
   109  				},
   110  				{
   111  					GroupVersion: "azure.crossplane.io/v1beta1",
   112  					APIResources: []metav1.APIResource{
   113  						{
   114  							Name: "resourcegroups",
   115  							Kind: "ResourceGroup",
   116  						},
   117  					},
   118  				},
   119  			}
   120  
   121  			ks, err := NewKubernetesSource(dynamicClient, memory.NewMemCacheClient(client.Discovery()), WithRegistry(r))
   122  			if diff := cmp.Diff(tc.want.err, err); diff != "" {
   123  				t.Errorf("\nNext(...): -want, +got:\n%s", diff)
   124  			}
   125  			if diff := cmp.Diff(tc.want.ks.items, ks.items); diff != "" {
   126  				t.Errorf("\nNext(...): -want, +got:\n%s", diff)
   127  			}
   128  		})
   129  	}
   130  }