github.com/verrazzano/verrazzano@v1.7.1/cluster-operator/internal/capi/cluster_test.go (about) 1 // Copyright (c) 2023, Oracle and/or its affiliates. 2 // Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl. 3 4 package capi 5 6 import ( 7 "context" 8 "testing" 9 10 "github.com/stretchr/testify/assert" 11 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" 12 "k8s.io/apimachinery/pkg/runtime" 13 "k8s.io/apimachinery/pkg/types" 14 "sigs.k8s.io/cluster-api/api/v1beta1" 15 "sigs.k8s.io/controller-runtime/pkg/client/fake" 16 ) 17 18 const ( 19 clusterName = "test-cluster" 20 clusterClassName = "test-cluster-class" 21 testNamespace = "test-namespace" 22 ) 23 24 func TestGetClusterClassFromCluster(t *testing.T) { 25 a := assert.New(t) 26 ctx := context.TODO() 27 scheme := runtime.NewScheme() 28 _ = v1beta1.AddToScheme(scheme) 29 cluster := newCAPIClusterWithClassReference(clusterName, clusterClassName, testNamespace) 30 clusterClass := newCAPIClusterClass(clusterClassName, testNamespace) 31 fakeClient := fake.NewClientBuilder().WithScheme(scheme).WithObjects(cluster, clusterClass).Build() 32 33 retrievedCluster := &v1beta1.Cluster{} 34 err := fakeClient.Get(ctx, types.NamespacedName{Name: clusterName, Namespace: testNamespace}, retrievedCluster) 35 a.NoError(err) 36 37 // Get the ClusterClass associated with the Cluster 38 retrievedClusterClass, err := GetClusterClassFromCluster(ctx, fakeClient, retrievedCluster) 39 a.NoError(err) 40 a.Equal(clusterClass, retrievedClusterClass) 41 42 // Shouldn't work if the CAPI Cluster has no reference to a ClusterClass 43 fakeClient = fake.NewClientBuilder().WithScheme(scheme).WithObjects(newCAPICluster(clusterName, testNamespace)).Build() 44 err = fakeClient.Get(ctx, types.NamespacedName{Name: clusterName, Namespace: testNamespace}, retrievedCluster) 45 a.NoError(err) 46 retrievedClusterClass, err = GetClusterClassFromCluster(ctx, fakeClient, retrievedCluster) 47 a.Error(err) 48 a.Nil(retrievedClusterClass) 49 } 50 51 func newCAPICluster(name, namespace string) *v1beta1.Cluster { 52 cluster := v1beta1.Cluster{ 53 TypeMeta: metav1.TypeMeta{ 54 Kind: "Cluster", 55 APIVersion: "cluster.x-k8s.io/v1beta1", 56 }, 57 ObjectMeta: metav1.ObjectMeta{ 58 Name: name, 59 Namespace: namespace, 60 }, 61 } 62 return &cluster 63 } 64 65 func newCAPIClusterWithClassReference(name, className, namespace string) *v1beta1.Cluster { 66 cluster := v1beta1.Cluster{ 67 TypeMeta: metav1.TypeMeta{ 68 Kind: "Cluster", 69 APIVersion: "cluster.x-k8s.io/v1beta1", 70 }, 71 ObjectMeta: metav1.ObjectMeta{ 72 Name: name, 73 Namespace: namespace, 74 }, 75 Spec: v1beta1.ClusterSpec{ 76 Topology: &v1beta1.Topology{ 77 Class: className, 78 }, 79 }, 80 } 81 return &cluster 82 } 83 84 func newCAPIClusterClass(name, namespace string) *v1beta1.ClusterClass { 85 clusterClass := v1beta1.ClusterClass{ 86 TypeMeta: metav1.TypeMeta{ 87 Kind: "ClusterClass", 88 APIVersion: "cluster.x-k8s.io/v1beta1", 89 }, 90 ObjectMeta: metav1.ObjectMeta{ 91 Name: name, 92 Namespace: namespace, 93 }, 94 } 95 return &clusterClass 96 }