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  }