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 }