github.com/verrazzano/verrazzano@v1.7.0/application-operator/controllers/webhooks/multicluster_validation_test.go (about) 1 // Copyright (c) 2021, 2022, 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 webhooks 5 6 import ( 7 "encoding/json" 8 9 appopclustersapi "github.com/verrazzano/verrazzano/application-operator/apis/clusters/v1alpha1" 10 "github.com/verrazzano/verrazzano/application-operator/constants" 11 clustersapi "github.com/verrazzano/verrazzano/cluster-operator/apis/clusters/v1alpha1" 12 admissionv1 "k8s.io/api/admission/v1" 13 corev1 "k8s.io/api/core/v1" 14 netv1 "k8s.io/api/networking/v1" 15 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" 16 "k8s.io/apimachinery/pkg/runtime" 17 "k8s.io/apimachinery/pkg/runtime/schema" 18 "sigs.k8s.io/controller-runtime/pkg/webhook/admission" 19 ) 20 21 var testManagedCluster = clustersapi.VerrazzanoManagedCluster{ 22 ObjectMeta: metav1.ObjectMeta{ 23 Name: "test-managed-cluster-name", 24 Namespace: constants.VerrazzanoMultiClusterNamespace, 25 }, 26 Spec: clustersapi.VerrazzanoManagedClusterSpec{ 27 CASecret: "test-secret", 28 ManagedClusterManifestSecret: "test-cluster-manifest-secret", 29 ServiceAccount: "test-service-account", 30 }, 31 } 32 33 var testProject = appopclustersapi.VerrazzanoProject{ 34 ObjectMeta: metav1.ObjectMeta{ 35 Name: "test", 36 Namespace: constants.VerrazzanoMultiClusterNamespace, 37 }, 38 Spec: appopclustersapi.VerrazzanoProjectSpec{ 39 Placement: appopclustersapi.Placement{ 40 Clusters: []appopclustersapi.Cluster{{Name: "test-managed-cluster-name"}}, 41 }, 42 Template: appopclustersapi.ProjectTemplate{ 43 Namespaces: []appopclustersapi.NamespaceTemplate{ 44 { 45 Metadata: metav1.ObjectMeta{ 46 Name: "newNS1", 47 }, 48 }, 49 }, 50 }, 51 }, 52 } 53 54 var testNetworkPolicy = appopclustersapi.VerrazzanoProject{ 55 ObjectMeta: metav1.ObjectMeta{ 56 Name: "test", 57 Namespace: constants.VerrazzanoMultiClusterNamespace, 58 }, 59 Spec: appopclustersapi.VerrazzanoProjectSpec{ 60 Placement: appopclustersapi.Placement{ 61 Clusters: []appopclustersapi.Cluster{{Name: "test-managed-cluster-name"}}, 62 }, 63 Template: appopclustersapi.ProjectTemplate{ 64 Namespaces: []appopclustersapi.NamespaceTemplate{ 65 { 66 Metadata: metav1.ObjectMeta{ 67 Name: "ns1", 68 }, 69 }, 70 }, 71 NetworkPolicies: []appopclustersapi.NetworkPolicyTemplate{ 72 { 73 Metadata: metav1.ObjectMeta{ 74 Namespace: "ns1", 75 Name: "net1", 76 }, 77 Spec: netv1.NetworkPolicySpec{}, 78 }}, 79 }, 80 }, 81 } 82 83 // newAdmissionRequest creates a new admissionRequest with the provided operation and object. 84 // This is a test utility function used by other multi-cluster resource validation tests. 85 func newAdmissionRequest(op admissionv1.Operation, obj interface{}) admission.Request { 86 raw := runtime.RawExtension{} 87 bytes, _ := json.Marshal(obj) 88 raw.Raw = bytes 89 req := admission.Request{ 90 AdmissionRequest: admissionv1.AdmissionRequest{ 91 Operation: op, Object: raw}} 92 return req 93 } 94 95 // newScheme creates a new scheme that includes this package's object for use by client 96 // This is a test utility function used by other multi-cluster resource validation tests. 97 func newScheme() *runtime.Scheme { 98 scheme := runtime.NewScheme() 99 _ = appopclustersapi.AddToScheme(scheme) 100 scheme.AddKnownTypes(schema.GroupVersion{ 101 Version: "v1", 102 }, &corev1.Secret{}, &corev1.SecretList{}) 103 _ = clustersapi.AddToScheme(scheme) 104 return scheme 105 }