From cabe958b3baf60e008e7d84911ce9d96c8f15051 Mon Sep 17 00:00:00 2001 From: Jamison Tsai Date: Fri, 15 Nov 2024 23:30:52 +1100 Subject: [PATCH 01/66] add kubebuilders validations for name length to be <= 63 --- api/v1alpha1/multiclusterservice_types.go | 1 + api/v1alpha1/serviceexport_types.go | 1 + api/v1alpha1/serviceimport_types.go | 1 + api/v1alpha1/trafficmanagerbackend_types.go | 1 + api/v1alpha1/trafficmanagerprofile_types.go | 1 + 5 files changed, 5 insertions(+) diff --git a/api/v1alpha1/multiclusterservice_types.go b/api/v1alpha1/multiclusterservice_types.go index 6b721475..718b8a78 100644 --- a/api/v1alpha1/multiclusterservice_types.go +++ b/api/v1alpha1/multiclusterservice_types.go @@ -63,6 +63,7 @@ const ( // +kubebuilder:printcolumn:JSONPath=`.metadata.creationTimestamp`,name="Age",type=date // MultiClusterService is the Schema for creating north-south L4 load balancer to consume services across clusters. +// +kubebuilder:validation:XValidation:rule="size(self.metadata.name) < 64",message="metadata.name max length is 63" type MultiClusterService struct { metav1.TypeMeta `json:",inline"` // +optional diff --git a/api/v1alpha1/serviceexport_types.go b/api/v1alpha1/serviceexport_types.go index a3f90a92..205165b4 100644 --- a/api/v1alpha1/serviceexport_types.go +++ b/api/v1alpha1/serviceexport_types.go @@ -41,6 +41,7 @@ type ServiceExportStatus struct { // +kubebuilder:printcolumn:JSONPath=`.metadata.creationTimestamp`,name="Age",type=date // ServiceExport declares that the associated service should be exported to other clusters. +// +kubebuilder:validation:XValidation:rule="size(self.metadata.name) < 64",message="metadata.name max length is 63" type ServiceExport struct { metav1.TypeMeta `json:",inline"` // +optional diff --git a/api/v1alpha1/serviceimport_types.go b/api/v1alpha1/serviceimport_types.go index 4d6aba1e..041066e6 100644 --- a/api/v1alpha1/serviceimport_types.go +++ b/api/v1alpha1/serviceimport_types.go @@ -16,6 +16,7 @@ import ( // +kubebuilder:subresource:status // ServiceImport describes a service imported from clusters in a ClusterSet. +// +kubebuilder:validation:XValidation:rule="size(self.metadata.name) < 64",message="metadata.name max length is 63" type ServiceImport struct { metav1.TypeMeta `json:",inline"` // +optional diff --git a/api/v1alpha1/trafficmanagerbackend_types.go b/api/v1alpha1/trafficmanagerbackend_types.go index bc66070a..22278792 100644 --- a/api/v1alpha1/trafficmanagerbackend_types.go +++ b/api/v1alpha1/trafficmanagerbackend_types.go @@ -18,6 +18,7 @@ const ( // A backend contains one or more endpoints. Therefore, the controller may create multiple endpoints under the Traffic // Manager Profile. // https://learn.microsoft.com/en-us/azure/traffic-manager/traffic-manager-endpoint-types +// +kubebuilder:validation:XValidation:rule="size(self.metadata.name) < 64",message="metadata.name max length is 63" type TrafficManagerBackend struct { metav1.TypeMeta `json:",inline"` // +optional diff --git a/api/v1alpha1/trafficmanagerprofile_types.go b/api/v1alpha1/trafficmanagerprofile_types.go index 52e9f175..f970b3cb 100644 --- a/api/v1alpha1/trafficmanagerprofile_types.go +++ b/api/v1alpha1/trafficmanagerprofile_types.go @@ -17,6 +17,7 @@ const ( // TrafficManagerProfile is used to manage a simple Azure Traffic Manager Profile using cloud native way. // https://learn.microsoft.com/en-us/azure/traffic-manager/traffic-manager-overview +// +kubebuilder:validation:XValidation:rule="size(self.metadata.name) < 64",message="metadata.name max length is 63" type TrafficManagerProfile struct { metav1.TypeMeta `json:",inline"` // +optional From d7110d4d2fdff1b475dbf6e5ea33325e540e3325 Mon Sep 17 00:00:00 2001 From: Jamison Tsai Date: Wed, 20 Nov 2024 10:00:57 +1100 Subject: [PATCH 02/66] add validation tests for member cluster service --- ....fleet.azure.com_multiclusterservices.yaml | 3 + ...orking.fleet.azure.com_serviceexports.yaml | 3 + ...orking.fleet.azure.com_serviceimports.yaml | 3 + ...leet.azure.com_trafficmanagerbackends.yaml | 3 + ...leet.azure.com_trafficmanagerprofiles.yaml | 3 + config/rbac/role.yaml | 3 + .../api_validation_integration_test.go | 185 +++++++++++++++ test/apis/v1alpha1/suite_test.go | 88 +++++++ test/e2e/resource_validation_test.go | 214 ++++++++++++++++++ 9 files changed, 505 insertions(+) create mode 100644 test/apis/v1alpha1/api_validation_integration_test.go create mode 100644 test/apis/v1alpha1/suite_test.go create mode 100644 test/e2e/resource_validation_test.go diff --git a/config/crd/bases/networking.fleet.azure.com_multiclusterservices.yaml b/config/crd/bases/networking.fleet.azure.com_multiclusterservices.yaml index 6ea56e54..8e95b845 100644 --- a/config/crd/bases/networking.fleet.azure.com_multiclusterservices.yaml +++ b/config/crd/bases/networking.fleet.azure.com_multiclusterservices.yaml @@ -210,6 +210,9 @@ spec: required: - spec type: object + x-kubernetes-validations: + - message: metadata.name max length is 63 + rule: size(self.metadata.name) < 64 served: true storage: true subresources: diff --git a/config/crd/bases/networking.fleet.azure.com_serviceexports.yaml b/config/crd/bases/networking.fleet.azure.com_serviceexports.yaml index a361fc92..a84d4caf 100644 --- a/config/crd/bases/networking.fleet.azure.com_serviceexports.yaml +++ b/config/crd/bases/networking.fleet.azure.com_serviceexports.yaml @@ -115,6 +115,9 @@ spec: x-kubernetes-list-type: map type: object type: object + x-kubernetes-validations: + - message: metadata.name max length is 63 + rule: size(self.metadata.name) < 64 served: true storage: true subresources: diff --git a/config/crd/bases/networking.fleet.azure.com_serviceimports.yaml b/config/crd/bases/networking.fleet.azure.com_serviceimports.yaml index c240ef6c..0c939371 100644 --- a/config/crd/bases/networking.fleet.azure.com_serviceimports.yaml +++ b/config/crd/bases/networking.fleet.azure.com_serviceimports.yaml @@ -156,6 +156,9 @@ spec: type: string type: object type: object + x-kubernetes-validations: + - message: metadata.name max length is 63 + rule: size(self.metadata.name) < 64 served: true storage: true subresources: diff --git a/config/crd/bases/networking.fleet.azure.com_trafficmanagerbackends.yaml b/config/crd/bases/networking.fleet.azure.com_trafficmanagerbackends.yaml index 13700b2a..cd5ffcad 100644 --- a/config/crd/bases/networking.fleet.azure.com_trafficmanagerbackends.yaml +++ b/config/crd/bases/networking.fleet.azure.com_trafficmanagerbackends.yaml @@ -203,6 +203,9 @@ spec: required: - spec type: object + x-kubernetes-validations: + - message: metadata.name max length is 63 + rule: size(self.metadata.name) < 64 served: true storage: true subresources: diff --git a/config/crd/bases/networking.fleet.azure.com_trafficmanagerprofiles.yaml b/config/crd/bases/networking.fleet.azure.com_trafficmanagerprofiles.yaml index 0a157cea..9d5f6956 100644 --- a/config/crd/bases/networking.fleet.azure.com_trafficmanagerprofiles.yaml +++ b/config/crd/bases/networking.fleet.azure.com_trafficmanagerprofiles.yaml @@ -186,6 +186,9 @@ spec: required: - spec type: object + x-kubernetes-validations: + - message: metadata.name max length is 63 + rule: size(self.metadata.name) < 64 served: true storage: true subresources: diff --git a/config/rbac/role.yaml b/config/rbac/role.yaml index 3318d032..3d134d88 100644 --- a/config/rbac/role.yaml +++ b/config/rbac/role.yaml @@ -63,6 +63,7 @@ rules: - multiclusterservices - serviceexports - serviceimports + - trafficmanagerbackends - trafficmanagerprofiles verbs: - create @@ -86,6 +87,7 @@ rules: - multiclusterservices/status - serviceexports/status - serviceimports/status + - trafficmanagerbackends/status - trafficmanagerprofiles/status verbs: - get @@ -96,6 +98,7 @@ rules: resources: - multiclusterservices/finalizers - serviceimports/finalizers + - trafficmanagerbackends/finalizers - trafficmanagerprofiles/finalizers verbs: - get diff --git a/test/apis/v1alpha1/api_validation_integration_test.go b/test/apis/v1alpha1/api_validation_integration_test.go new file mode 100644 index 00000000..54eea1ac --- /dev/null +++ b/test/apis/v1alpha1/api_validation_integration_test.go @@ -0,0 +1,185 @@ +package v1alpha1 + +import ( + "errors" + "fmt" + "reflect" + + . "github.com/onsi/ginkgo/v2" + . "github.com/onsi/gomega" + k8serrors "k8s.io/apimachinery/pkg/api/errors" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + + v1alpha1 "go.goms.io/fleet-networking/api/v1alpha1" +) + +var _ = Describe("Test cluster v1 API validation", func() { + Context("Test MemberClusterService API validation - invalid cases", func() { + It("should deny creating API with invalid name size", func() { + var name = "abcdef-123456789-123456789-123456789-123456789-123456789-123456789-123456789" + // Create the API. + memberClusterServiceName := &v1alpha1.MultiClusterService{ + ObjectMeta: metav1.ObjectMeta{ + Name: name, + }, + Spec: v1alpha1.MultiClusterServiceSpec{ + ServiceImport: v1alpha1.ServiceImportRef{ + Name: "service-import-1", + }, + }, + } + By(fmt.Sprintf("expecting denial of CREATE API %s", name)) + var err = hubClient.Create(ctx, memberClusterServiceName) + var statusErr *k8serrors.StatusError + Expect(errors.As(err, &statusErr)).To(BeTrue(), fmt.Sprintf("Create API call produced error %s. Error type wanted is %s.", reflect.TypeOf(err), reflect.TypeOf(&k8serrors.StatusError{}))) + Expect(statusErr.Status().Message).Should(ContainSubstring("metadata.name max length is 63")) + }) + + It("should deny creating API with invalid name starting with non-alphanumeric character", func() { + var name = "-abcdef-123456789-123456789-123456789-123456789-123456789" + // Create the API. + memberClusterServiceName := &v1alpha1.MultiClusterService{ + ObjectMeta: metav1.ObjectMeta{ + Name: name, + }, + Spec: v1alpha1.MultiClusterServiceSpec{ + ServiceImport: v1alpha1.ServiceImportRef{ + Name: "service-import-name", + }, + }, + } + By(fmt.Sprintf("expecting denial of CREATE API %s", name)) + err := hubClient.Create(ctx, memberClusterServiceName) + var statusErr *k8serrors.StatusError + Expect(errors.As(err, &statusErr)).To(BeTrue(), fmt.Sprintf("Create API call produced error %s. Error type wanted is %s.", reflect.TypeOf(err), reflect.TypeOf(&k8serrors.StatusError{}))) + Expect(statusErr.Status().Message).Should(ContainSubstring("a lowercase RFC 1123 subdomain")) + }) + + It("should deny creating API with invalid name ending with non-alphanumeric character", func() { + var name = "abcdef-123456789-123456789-123456789-123456789-123456789-" + // Create the API. + memberClusterServiceName := &v1alpha1.MultiClusterService{ + ObjectMeta: metav1.ObjectMeta{ + Name: name, + }, + Spec: v1alpha1.MultiClusterServiceSpec{ + ServiceImport: v1alpha1.ServiceImportRef{ + Name: "service-import-name", + }, + }, + } + By(fmt.Sprintf("expecting denial of CREATE API %s", name)) + err := hubClient.Create(ctx, memberClusterServiceName) + var statusErr *k8serrors.StatusError + Expect(errors.As(err, &statusErr)).To(BeTrue(), fmt.Sprintf("Create API call produced error %s. Error type wanted is %s.", reflect.TypeOf(err), reflect.TypeOf(&k8serrors.StatusError{}))) + Expect(statusErr.Status().Message).Should(ContainSubstring("a lowercase RFC 1123 subdomain")) + }) + + It("should deny creating API with invalid name containing character that is not alphanumeric and not -", func() { + var name = "a_bcdef-123456789-123456789-123456789-123456789-123456789-123456789-123456789" + // Create the API. + memberClusterServiceName := &v1alpha1.MultiClusterService{ + ObjectMeta: metav1.ObjectMeta{ + Name: name, + }, + Spec: v1alpha1.MultiClusterServiceSpec{ + ServiceImport: v1alpha1.ServiceImportRef{ + Name: "service-import-name", + }, + }, + } + By(fmt.Sprintf("expecting denial of CREATE API %s", name)) + err := hubClient.Create(ctx, memberClusterServiceName) + var statusErr *k8serrors.StatusError + Expect(errors.As(err, &statusErr)).To(BeTrue(), fmt.Sprintf("Create API call produced error %s. Error type wanted is %s.", reflect.TypeOf(err), reflect.TypeOf(&k8serrors.StatusError{}))) + Expect(statusErr.Status().Message).Should(ContainSubstring("a lowercase RFC 1123 subdomain")) + }) + }) + + Context("Test Member Cluster Service creation API validation - valid cases", func() { + It("should allow creating API with valid name size", func() { + var name = "abc-123456789-123456789-123456789-123456789-123456789-123456789" + // Create the API. + memberClusterServiceName := &v1alpha1.MultiClusterService{ + ObjectMeta: metav1.ObjectMeta{ + Name: name, + }, + Spec: v1alpha1.MultiClusterServiceSpec{ + ServiceImport: v1alpha1.ServiceImportRef{ + Name: "service-import-name", + }, + }, + } + Expect(hubClient.Create(ctx, memberClusterServiceName)).Should(Succeed()) + Expect(hubClient.Delete(ctx, memberClusterServiceName)).Should(Succeed()) + }) + + It("should allow creating API with valid name starting with alphabet character", func() { + var name = "abc-123456789" + // Create the API. + memberClusterServiceName := &v1alpha1.MultiClusterService{ + ObjectMeta: metav1.ObjectMeta{ + Name: name, + }, + Spec: v1alpha1.MultiClusterServiceSpec{ + ServiceImport: v1alpha1.ServiceImportRef{ + Name: "service-import-name", + }, + }, + } + Expect(hubClient.Create(ctx, memberClusterServiceName)).Should(Succeed()) + Expect(hubClient.Delete(ctx, memberClusterServiceName)).Should(Succeed()) + }) + + It("should allow creating API with valid name starting with numeric character", func() { + var name = "123-123456789" + // Create the API. + memberClusterServiceName := &v1alpha1.MultiClusterService{ + ObjectMeta: metav1.ObjectMeta{ + Name: name, + }, + Spec: v1alpha1.MultiClusterServiceSpec{ + ServiceImport: v1alpha1.ServiceImportRef{ + Name: "service-import-name", + }, + }, + } + Expect(hubClient.Create(ctx, memberClusterServiceName)).Should(Succeed()) + Expect(hubClient.Delete(ctx, memberClusterServiceName)).Should(Succeed()) + }) + + It("should allow creating API with valid name ending with alphabet character", func() { + var name = "123456789-abc" + // Create the API. + memberClusterServiceName := &v1alpha1.MultiClusterService{ + ObjectMeta: metav1.ObjectMeta{ + Name: name, + }, + Spec: v1alpha1.MultiClusterServiceSpec{ + ServiceImport: v1alpha1.ServiceImportRef{ + Name: "service-import-name", + }, + }, + } + Expect(hubClient.Create(ctx, memberClusterServiceName)).Should(Succeed()) + Expect(hubClient.Delete(ctx, memberClusterServiceName)).Should(Succeed()) + }) + + It("should allow creating API with valid name ending with numeric character", func() { + var name = "123456789-123" + // Create the API. + memberClusterServiceName := &v1alpha1.MultiClusterService{ + ObjectMeta: metav1.ObjectMeta{ + Name: name, + }, + Spec: v1alpha1.MultiClusterServiceSpec{ + ServiceImport: v1alpha1.ServiceImportRef{ + Name: "service-import-name", + }, + }, + } + Expect(hubClient.Create(ctx, memberClusterServiceName)).Should(Succeed()) + Expect(hubClient.Delete(ctx, memberClusterServiceName)).Should(Succeed()) + }) + }) +}) diff --git a/test/apis/v1alpha1/suite_test.go b/test/apis/v1alpha1/suite_test.go new file mode 100644 index 00000000..a4b18feb --- /dev/null +++ b/test/apis/v1alpha1/suite_test.go @@ -0,0 +1,88 @@ +package v1alpha1 + +import ( + "context" + "flag" + "path/filepath" + "testing" + + . "github.com/onsi/ginkgo/v2" + . "github.com/onsi/gomega" + "k8s.io/client-go/kubernetes/scheme" + "k8s.io/klog/v2" + "k8s.io/klog/v2/textlogger" + ctrl "sigs.k8s.io/controller-runtime" + "sigs.k8s.io/controller-runtime/pkg/client" + "sigs.k8s.io/controller-runtime/pkg/envtest" + metricsserver "sigs.k8s.io/controller-runtime/pkg/metrics/server" + + v1alpha1 "go.goms.io/fleet-networking/api/v1alpha1" +) + +var ( + hubTestEnv *envtest.Environment + hubClient client.Client + ctx context.Context + cancel context.CancelFunc +) + +func TestAPIs(t *testing.T) { + RegisterFailHandler(Fail) + + RunSpecs(t, "ClusterResourcePlacement Controller Suite") +} + +var _ = BeforeSuite(func() { + By("Setup klog") + fs := flag.NewFlagSet("klog", flag.ContinueOnError) + klog.InitFlags(fs) + Expect(fs.Parse([]string{"--v", "5", "-add_dir_header", "true"})).Should(Succeed()) + + ctx, cancel = context.WithCancel(context.TODO()) + + By("bootstrap the test environment") + // Start the cluster. + hubTestEnv = &envtest.Environment{ + CRDDirectoryPaths: []string{ + filepath.Join("..", "..", "..", "..", "config", "crd", "bases"), + }, + ErrorIfCRDPathMissing: true, + } + hubCfg, err := hubTestEnv.Start() + Expect(err).NotTo(HaveOccurred()) + Expect(hubCfg).NotTo(BeNil()) + + Expect(v1alpha1.AddToScheme(scheme.Scheme)).Should(Succeed()) + + klog.InitFlags(flag.CommandLine) + flag.Parse() + // Create the hub controller manager. + hubCtrlMgr, err := ctrl.NewManager(hubCfg, ctrl.Options{ + Scheme: scheme.Scheme, + Metrics: metricsserver.Options{ + BindAddress: "0", + }, + Logger: textlogger.NewLogger(textlogger.NewConfig(textlogger.Verbosity(4))), + }) + Expect(err).NotTo(HaveOccurred()) + + // Set up the client. + // The client must be one with cache (i.e. configured by the controller manager) to make + // use of the cache indexes. + hubClient = hubCtrlMgr.GetClient() + Expect(hubClient).NotTo(BeNil()) + + go func() { + defer GinkgoRecover() + err = hubCtrlMgr.Start(ctx) + Expect(err).ToNot(HaveOccurred(), "failed to start manager for hub") + }() +}) + +var _ = AfterSuite(func() { + defer klog.Flush() + cancel() + + By("tearing down the test environment") + Expect(hubTestEnv.Stop()).Should(Succeed()) +}) diff --git a/test/e2e/resource_validation_test.go b/test/e2e/resource_validation_test.go new file mode 100644 index 00000000..fab0ee5e --- /dev/null +++ b/test/e2e/resource_validation_test.go @@ -0,0 +1,214 @@ +/* +Copyright (c) Microsoft Corporation. +Licensed under the MIT license. +*/ +package e2e + +import ( + "errors" + "fmt" + + "k8s.io/apimachinery/pkg/types" + + "reflect" + + rbacv1 "k8s.io/api/rbac/v1" + k8serrors "k8s.io/apimachinery/pkg/api/errors" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" +) + +var _ = Describe("Resource validation tests for Member Cluster", func() { + It("should deny creating API with invalid name size", func() { + var name = "abcdef-123456789-123456789-123456789-123456789-123456789-123456789-123456789" + // Create the API. + memberClusterName := ServiceExport{ + ObjectMeta: metav1.ObjectMeta{ + Name: name, + }, + } + By(fmt.Sprintf("expecting denial of CREATE API %s", name)) + err := hubClient.Create(ctx, memberClusterName) + var statusErr *k8serrors.StatusError + Expect(errors.As(err, &statusErr)).To(BeTrue(), fmt.Sprintf("Create API call produced error %s. Error type wanted is %s.", reflect.TypeOf(err), reflect.TypeOf(&k8serrors.StatusError{}))) + Expect(statusErr.Status().Message).Should(ContainSubstring("metadata.name max length is 63")) + }) + + It("should allow creating API with valid name size", func() { + var name = "abc-123456789-123456789-123456789-123456789-123456789-123456789" + // Create the API. + memberClusterName := &clusterv1beta1.MemberCluster{ + ObjectMeta: metav1.ObjectMeta{ + Name: name, + }, + Spec: clusterv1beta1.MemberClusterSpec{ + Identity: rbacv1.Subject{ + Name: "fleet-member-agent-cluster-1", + Kind: "ServiceAccount", + Namespace: "fleet-system", + APIGroup: "", + }, + }, + } + Expect(impersonateHubClient.Create(ctx, memberClusterName)).Should(Succeed()) + Expect(impersonateHubClient.Get(ctx, types.NamespacedName{Name: memberClusterName.Name}, memberClusterName)).Should(Succeed()) + Expect(impersonateHubClient.Delete(ctx, memberClusterName)).Should(Succeed()) + ensureMemberClusterAndRelatedResourcesDeletion(name) + }) + + It("should deny creating API with invalid name starting with non-alphanumeric character", func() { + var name = "-abcdef-123456789-123456789-123456789-123456789-123456789" + // Create the API. + memberClusterName := &clusterv1beta1.MemberCluster{ + ObjectMeta: metav1.ObjectMeta{ + Name: name, + }, + Spec: clusterv1beta1.MemberClusterSpec{ + Identity: rbacv1.Subject{ + Name: "fleet-member-agent-cluster-1", + Kind: "ServiceAccount", + Namespace: "fleet-system", + APIGroup: "", + }, + }, + } + By(fmt.Sprintf("expecting denial of CREATE API %s", name)) + err := hubClient.Create(ctx, memberClusterName) + var statusErr *k8serrors.StatusError + Expect(errors.As(err, &statusErr)).To(BeTrue(), fmt.Sprintf("Create API call produced error %s. Error type wanted is %s.", reflect.TypeOf(err), reflect.TypeOf(&k8serrors.StatusError{}))) + Expect(statusErr.Status().Message).Should(ContainSubstring("a lowercase RFC 1123 subdomain must consist of lower case alphanumeric characters, '-' or '.', and must start and end with an alphanumeric character (e.g. 'example.com', regex used for validation is '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*')")) + }) + + It("should allow creating API with valid name starting with alphabet character", func() { + var name = "abc-123456789" + // Create the API. + memberClusterName := &clusterv1beta1.MemberCluster{ + ObjectMeta: metav1.ObjectMeta{ + Name: name, + }, + Spec: clusterv1beta1.MemberClusterSpec{ + Identity: rbacv1.Subject{ + Name: "fleet-member-agent-cluster-1", + Kind: "ServiceAccount", + Namespace: "fleet-system", + APIGroup: "", + }, + }, + } + Expect(impersonateHubClient.Create(ctx, memberClusterName)).Should(Succeed()) + Expect(impersonateHubClient.Get(ctx, types.NamespacedName{Name: memberClusterName.Name}, memberClusterName)).Should(Succeed()) + Expect(impersonateHubClient.Delete(ctx, memberClusterName)).Should(Succeed()) + ensureMemberClusterAndRelatedResourcesDeletion(name) + }) + + It("should allow creating API with valid name starting with numeric character", func() { + var name = "123-123456789" + // Create the API. + memberClusterName := &clusterv1beta1.MemberCluster{ + ObjectMeta: metav1.ObjectMeta{ + Name: name, + }, + Spec: clusterv1beta1.MemberClusterSpec{ + Identity: rbacv1.Subject{ + Name: "fleet-member-agent-cluster-1", + Kind: "ServiceAccount", + Namespace: "fleet-system", + APIGroup: "", + }, + }, + } + Expect(impersonateHubClient.Create(ctx, memberClusterName)).Should(Succeed()) + Expect(impersonateHubClient.Get(ctx, types.NamespacedName{Name: memberClusterName.Name}, memberClusterName)).Should(Succeed()) + Expect(impersonateHubClient.Delete(ctx, memberClusterName)).Should(Succeed()) + ensureMemberClusterAndRelatedResourcesDeletion(name) + }) + + It("should deny creating API with invalid name ending with non-alphanumeric character", func() { + var name = "abcdef-123456789-123456789-123456789-123456789-123456789-" + // Create the API. + memberClusterName := &clusterv1beta1.MemberCluster{ + ObjectMeta: metav1.ObjectMeta{ + Name: name, + }, + Spec: clusterv1beta1.MemberClusterSpec{ + Identity: rbacv1.Subject{ + Name: "fleet-member-agent-cluster-1", + Kind: "ServiceAccount", + Namespace: "fleet-system", + APIGroup: "", + }, + }, + } + By(fmt.Sprintf("expecting denial of CREATE API %s", name)) + err := hubClient.Create(ctx, memberClusterName) + var statusErr *k8serrors.StatusError + Expect(errors.As(err, &statusErr)).To(BeTrue(), fmt.Sprintf("Create API call produced error %s. Error type wanted is %s.", reflect.TypeOf(err), reflect.TypeOf(&k8serrors.StatusError{}))) + Expect(statusErr.Status().Message).Should(ContainSubstring("a lowercase RFC 1123 subdomain must consist of lower case alphanumeric characters, '-' or '.', and must start and end with an alphanumeric character (e.g. 'example.com', regex used for validation is '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*')")) + }) + + It("should allow creating API with valid name ending with alphabet character", func() { + var name = "123456789-abc" + // Create the API. + memberClusterName := &clusterv1beta1.MemberCluster{ + ObjectMeta: metav1.ObjectMeta{ + Name: name, + }, + Spec: clusterv1beta1.MemberClusterSpec{ + Identity: rbacv1.Subject{ + Name: "fleet-member-agent-cluster-1", + Kind: "ServiceAccount", + Namespace: "fleet-system", + APIGroup: "", + }, + }, + } + Expect(impersonateHubClient.Create(ctx, memberClusterName)).Should(Succeed()) + Expect(impersonateHubClient.Get(ctx, types.NamespacedName{Name: memberClusterName.Name}, memberClusterName)).Should(Succeed()) + Expect(impersonateHubClient.Delete(ctx, memberClusterName)).Should(Succeed()) + ensureMemberClusterAndRelatedResourcesDeletion(name) + }) + + It("should allow creating API with valid name ending with numeric character", func() { + var name = "123456789-123" + // Create the API. + memberClusterName := &clusterv1beta1.MemberCluster{ + ObjectMeta: metav1.ObjectMeta{ + Name: name, + }, + Spec: clusterv1beta1.MemberClusterSpec{ + Identity: rbacv1.Subject{ + Name: "fleet-member-agent-cluster-1", + Kind: "ServiceAccount", + Namespace: "fleet-system", + APIGroup: "", + }, + }, + } + Expect(impersonateHubClient.Create(ctx, memberClusterName)).Should(Succeed()) + Expect(impersonateHubClient.Get(ctx, types.NamespacedName{Name: memberClusterName.Name}, memberClusterName)).Should(Succeed()) + Expect(impersonateHubClient.Delete(ctx, memberClusterName)).Should(Succeed()) + ensureMemberClusterAndRelatedResourcesDeletion(name) + }) + + It("should deny creating API with invalid name containing character that is not alphanumeric and not -", func() { + var name = "a_bcdef-123456789-123456789-123456789-123456789-123456789-123456789-123456789" + // Create the API. + memberClusterName := &clusterv1beta1.MemberCluster{ + ObjectMeta: metav1.ObjectMeta{ + Name: name, + }, + Spec: clusterv1beta1.MemberClusterSpec{ + Identity: rbacv1.Subject{ + Name: "fleet-member-agent-cluster-1", + Kind: "ServiceAccount", + Namespace: "fleet-system", + APIGroup: "", + }, + }, + } + By(fmt.Sprintf("expecting denial of CREATE API %s", name)) + err := hubClient.Create(ctx, memberClusterName) + var statusErr *k8serrors.StatusError + Expect(errors.As(err, &statusErr)).To(BeTrue(), fmt.Sprintf("Create API call produced error %s. Error type wanted is %s.", reflect.TypeOf(err), reflect.TypeOf(&k8serrors.StatusError{}))) + Expect(statusErr.Status().Message).Should(ContainSubstring("a lowercase RFC 1123 subdomain must consist of lower case alphanumeric characters, '-' or '.', and must start and end with an alphanumeric character (e.g. 'example.com', regex used for validation is '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*')")) + }) +}) From 72bcdd709d57b569f0663f320c10396c729fe93c Mon Sep 17 00:00:00 2001 From: Jamison Tsai Date: Wed, 20 Nov 2024 10:19:53 +1100 Subject: [PATCH 03/66] delete e2e test file --- test/e2e/resource_validation_test.go | 214 --------------------------- 1 file changed, 214 deletions(-) delete mode 100644 test/e2e/resource_validation_test.go diff --git a/test/e2e/resource_validation_test.go b/test/e2e/resource_validation_test.go deleted file mode 100644 index fab0ee5e..00000000 --- a/test/e2e/resource_validation_test.go +++ /dev/null @@ -1,214 +0,0 @@ -/* -Copyright (c) Microsoft Corporation. -Licensed under the MIT license. -*/ -package e2e - -import ( - "errors" - "fmt" - - "k8s.io/apimachinery/pkg/types" - - "reflect" - - rbacv1 "k8s.io/api/rbac/v1" - k8serrors "k8s.io/apimachinery/pkg/api/errors" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" -) - -var _ = Describe("Resource validation tests for Member Cluster", func() { - It("should deny creating API with invalid name size", func() { - var name = "abcdef-123456789-123456789-123456789-123456789-123456789-123456789-123456789" - // Create the API. - memberClusterName := ServiceExport{ - ObjectMeta: metav1.ObjectMeta{ - Name: name, - }, - } - By(fmt.Sprintf("expecting denial of CREATE API %s", name)) - err := hubClient.Create(ctx, memberClusterName) - var statusErr *k8serrors.StatusError - Expect(errors.As(err, &statusErr)).To(BeTrue(), fmt.Sprintf("Create API call produced error %s. Error type wanted is %s.", reflect.TypeOf(err), reflect.TypeOf(&k8serrors.StatusError{}))) - Expect(statusErr.Status().Message).Should(ContainSubstring("metadata.name max length is 63")) - }) - - It("should allow creating API with valid name size", func() { - var name = "abc-123456789-123456789-123456789-123456789-123456789-123456789" - // Create the API. - memberClusterName := &clusterv1beta1.MemberCluster{ - ObjectMeta: metav1.ObjectMeta{ - Name: name, - }, - Spec: clusterv1beta1.MemberClusterSpec{ - Identity: rbacv1.Subject{ - Name: "fleet-member-agent-cluster-1", - Kind: "ServiceAccount", - Namespace: "fleet-system", - APIGroup: "", - }, - }, - } - Expect(impersonateHubClient.Create(ctx, memberClusterName)).Should(Succeed()) - Expect(impersonateHubClient.Get(ctx, types.NamespacedName{Name: memberClusterName.Name}, memberClusterName)).Should(Succeed()) - Expect(impersonateHubClient.Delete(ctx, memberClusterName)).Should(Succeed()) - ensureMemberClusterAndRelatedResourcesDeletion(name) - }) - - It("should deny creating API with invalid name starting with non-alphanumeric character", func() { - var name = "-abcdef-123456789-123456789-123456789-123456789-123456789" - // Create the API. - memberClusterName := &clusterv1beta1.MemberCluster{ - ObjectMeta: metav1.ObjectMeta{ - Name: name, - }, - Spec: clusterv1beta1.MemberClusterSpec{ - Identity: rbacv1.Subject{ - Name: "fleet-member-agent-cluster-1", - Kind: "ServiceAccount", - Namespace: "fleet-system", - APIGroup: "", - }, - }, - } - By(fmt.Sprintf("expecting denial of CREATE API %s", name)) - err := hubClient.Create(ctx, memberClusterName) - var statusErr *k8serrors.StatusError - Expect(errors.As(err, &statusErr)).To(BeTrue(), fmt.Sprintf("Create API call produced error %s. Error type wanted is %s.", reflect.TypeOf(err), reflect.TypeOf(&k8serrors.StatusError{}))) - Expect(statusErr.Status().Message).Should(ContainSubstring("a lowercase RFC 1123 subdomain must consist of lower case alphanumeric characters, '-' or '.', and must start and end with an alphanumeric character (e.g. 'example.com', regex used for validation is '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*')")) - }) - - It("should allow creating API with valid name starting with alphabet character", func() { - var name = "abc-123456789" - // Create the API. - memberClusterName := &clusterv1beta1.MemberCluster{ - ObjectMeta: metav1.ObjectMeta{ - Name: name, - }, - Spec: clusterv1beta1.MemberClusterSpec{ - Identity: rbacv1.Subject{ - Name: "fleet-member-agent-cluster-1", - Kind: "ServiceAccount", - Namespace: "fleet-system", - APIGroup: "", - }, - }, - } - Expect(impersonateHubClient.Create(ctx, memberClusterName)).Should(Succeed()) - Expect(impersonateHubClient.Get(ctx, types.NamespacedName{Name: memberClusterName.Name}, memberClusterName)).Should(Succeed()) - Expect(impersonateHubClient.Delete(ctx, memberClusterName)).Should(Succeed()) - ensureMemberClusterAndRelatedResourcesDeletion(name) - }) - - It("should allow creating API with valid name starting with numeric character", func() { - var name = "123-123456789" - // Create the API. - memberClusterName := &clusterv1beta1.MemberCluster{ - ObjectMeta: metav1.ObjectMeta{ - Name: name, - }, - Spec: clusterv1beta1.MemberClusterSpec{ - Identity: rbacv1.Subject{ - Name: "fleet-member-agent-cluster-1", - Kind: "ServiceAccount", - Namespace: "fleet-system", - APIGroup: "", - }, - }, - } - Expect(impersonateHubClient.Create(ctx, memberClusterName)).Should(Succeed()) - Expect(impersonateHubClient.Get(ctx, types.NamespacedName{Name: memberClusterName.Name}, memberClusterName)).Should(Succeed()) - Expect(impersonateHubClient.Delete(ctx, memberClusterName)).Should(Succeed()) - ensureMemberClusterAndRelatedResourcesDeletion(name) - }) - - It("should deny creating API with invalid name ending with non-alphanumeric character", func() { - var name = "abcdef-123456789-123456789-123456789-123456789-123456789-" - // Create the API. - memberClusterName := &clusterv1beta1.MemberCluster{ - ObjectMeta: metav1.ObjectMeta{ - Name: name, - }, - Spec: clusterv1beta1.MemberClusterSpec{ - Identity: rbacv1.Subject{ - Name: "fleet-member-agent-cluster-1", - Kind: "ServiceAccount", - Namespace: "fleet-system", - APIGroup: "", - }, - }, - } - By(fmt.Sprintf("expecting denial of CREATE API %s", name)) - err := hubClient.Create(ctx, memberClusterName) - var statusErr *k8serrors.StatusError - Expect(errors.As(err, &statusErr)).To(BeTrue(), fmt.Sprintf("Create API call produced error %s. Error type wanted is %s.", reflect.TypeOf(err), reflect.TypeOf(&k8serrors.StatusError{}))) - Expect(statusErr.Status().Message).Should(ContainSubstring("a lowercase RFC 1123 subdomain must consist of lower case alphanumeric characters, '-' or '.', and must start and end with an alphanumeric character (e.g. 'example.com', regex used for validation is '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*')")) - }) - - It("should allow creating API with valid name ending with alphabet character", func() { - var name = "123456789-abc" - // Create the API. - memberClusterName := &clusterv1beta1.MemberCluster{ - ObjectMeta: metav1.ObjectMeta{ - Name: name, - }, - Spec: clusterv1beta1.MemberClusterSpec{ - Identity: rbacv1.Subject{ - Name: "fleet-member-agent-cluster-1", - Kind: "ServiceAccount", - Namespace: "fleet-system", - APIGroup: "", - }, - }, - } - Expect(impersonateHubClient.Create(ctx, memberClusterName)).Should(Succeed()) - Expect(impersonateHubClient.Get(ctx, types.NamespacedName{Name: memberClusterName.Name}, memberClusterName)).Should(Succeed()) - Expect(impersonateHubClient.Delete(ctx, memberClusterName)).Should(Succeed()) - ensureMemberClusterAndRelatedResourcesDeletion(name) - }) - - It("should allow creating API with valid name ending with numeric character", func() { - var name = "123456789-123" - // Create the API. - memberClusterName := &clusterv1beta1.MemberCluster{ - ObjectMeta: metav1.ObjectMeta{ - Name: name, - }, - Spec: clusterv1beta1.MemberClusterSpec{ - Identity: rbacv1.Subject{ - Name: "fleet-member-agent-cluster-1", - Kind: "ServiceAccount", - Namespace: "fleet-system", - APIGroup: "", - }, - }, - } - Expect(impersonateHubClient.Create(ctx, memberClusterName)).Should(Succeed()) - Expect(impersonateHubClient.Get(ctx, types.NamespacedName{Name: memberClusterName.Name}, memberClusterName)).Should(Succeed()) - Expect(impersonateHubClient.Delete(ctx, memberClusterName)).Should(Succeed()) - ensureMemberClusterAndRelatedResourcesDeletion(name) - }) - - It("should deny creating API with invalid name containing character that is not alphanumeric and not -", func() { - var name = "a_bcdef-123456789-123456789-123456789-123456789-123456789-123456789-123456789" - // Create the API. - memberClusterName := &clusterv1beta1.MemberCluster{ - ObjectMeta: metav1.ObjectMeta{ - Name: name, - }, - Spec: clusterv1beta1.MemberClusterSpec{ - Identity: rbacv1.Subject{ - Name: "fleet-member-agent-cluster-1", - Kind: "ServiceAccount", - Namespace: "fleet-system", - APIGroup: "", - }, - }, - } - By(fmt.Sprintf("expecting denial of CREATE API %s", name)) - err := hubClient.Create(ctx, memberClusterName) - var statusErr *k8serrors.StatusError - Expect(errors.As(err, &statusErr)).To(BeTrue(), fmt.Sprintf("Create API call produced error %s. Error type wanted is %s.", reflect.TypeOf(err), reflect.TypeOf(&k8serrors.StatusError{}))) - Expect(statusErr.Status().Message).Should(ContainSubstring("a lowercase RFC 1123 subdomain must consist of lower case alphanumeric characters, '-' or '.', and must start and end with an alphanumeric character (e.g. 'example.com', regex used for validation is '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*')")) - }) -}) From cd5ab5f703a337dc7358c07a91d943dd05cd23ec Mon Sep 17 00:00:00 2001 From: Jamison Tsai Date: Wed, 20 Nov 2024 10:52:05 +1100 Subject: [PATCH 04/66] add tests for service export --- .../api_validation_integration_test.go | 124 ++++++++++++++++++ 1 file changed, 124 insertions(+) diff --git a/test/apis/v1alpha1/api_validation_integration_test.go b/test/apis/v1alpha1/api_validation_integration_test.go index 54eea1ac..41d862e0 100644 --- a/test/apis/v1alpha1/api_validation_integration_test.go +++ b/test/apis/v1alpha1/api_validation_integration_test.go @@ -182,4 +182,128 @@ var _ = Describe("Test cluster v1 API validation", func() { Expect(hubClient.Delete(ctx, memberClusterServiceName)).Should(Succeed()) }) }) + + Context("Test ServiceExport API validation - invalid cases", func() { + It("should deny creating API with invalid name size", func() { + var name = "abcdef-123456789-123456789-123456789-123456789-123456789-123456789-123456789" + // Create the API. + serviceExportName := &v1alpha1.ServiceExport{ + ObjectMeta: metav1.ObjectMeta{ + Name: name, + }, + } + By(fmt.Sprintf("expecting denial of CREATE API %s", name)) + var err = hubClient.Create(ctx, serviceExportName) + var statusErr *k8serrors.StatusError + Expect(errors.As(err, &statusErr)).To(BeTrue(), fmt.Sprintf("Create API call produced error %s. Error type wanted is %s.", reflect.TypeOf(err), reflect.TypeOf(&k8serrors.StatusError{}))) + Expect(statusErr.Status().Message).Should(ContainSubstring("metadata.name max length is 63")) + }) + + It("should deny creating API with invalid name starting with non-alphanumeric character", func() { + var name = "-abcdef-123456789-123456789-123456789-123456789-123456789" + // Create the API. + serviceExportName := &v1alpha1.ServiceExport{ + ObjectMeta: metav1.ObjectMeta{ + Name: name, + }, + } + By(fmt.Sprintf("expecting denial of CREATE API %s", name)) + var err = hubClient.Create(ctx, serviceExportName) + var statusErr *k8serrors.StatusError + Expect(errors.As(err, &statusErr)).To(BeTrue(), fmt.Sprintf("Create API call produced error %s. Error type wanted is %s.", reflect.TypeOf(err), reflect.TypeOf(&k8serrors.StatusError{}))) + Expect(statusErr.Status().Message).Should(ContainSubstring("metadata.name max length is 63")) + }) + + It("should deny creating API with invalid name ending with non-alphanumeric character", func() { + var name = "abcdef-123456789-123456789-123456789-123456789-123456789-" + // Create the API. + serviceExportName := &v1alpha1.ServiceExport{ + ObjectMeta: metav1.ObjectMeta{ + Name: name, + }, + } + By(fmt.Sprintf("expecting denial of CREATE API %s", name)) + var err = hubClient.Create(ctx, serviceExportName) + var statusErr *k8serrors.StatusError + Expect(errors.As(err, &statusErr)).To(BeTrue(), fmt.Sprintf("Create API call produced error %s. Error type wanted is %s.", reflect.TypeOf(err), reflect.TypeOf(&k8serrors.StatusError{}))) + Expect(statusErr.Status().Message).Should(ContainSubstring("metadata.name max length is 63")) + }) + + It("should deny creating API with invalid name containing character that is not alphanumeric and not -", func() { + var name = "a_bcdef-123456789-123456789-123456789-123456789-123456789-123456789-123456789" + // Create the API. + serviceExportName := &v1alpha1.ServiceExport{ + ObjectMeta: metav1.ObjectMeta{ + Name: name, + }, + } + By(fmt.Sprintf("expecting denial of CREATE API %s", name)) + var err = hubClient.Create(ctx, serviceExportName) + var statusErr *k8serrors.StatusError + Expect(errors.As(err, &statusErr)).To(BeTrue(), fmt.Sprintf("Create API call produced error %s. Error type wanted is %s.", reflect.TypeOf(err), reflect.TypeOf(&k8serrors.StatusError{}))) + Expect(statusErr.Status().Message).Should(ContainSubstring("metadata.name max length is 63")) + }) + }) + + Context("Test ServiceExport API validation - valid cases", func() { + It("should allow creating API with valid name size", func() { + var name = "abc-123456789-123456789-123456789-123456789-123456789-123456789" + // Create the API. + serviceExportName := &v1alpha1.ServiceExport{ + ObjectMeta: metav1.ObjectMeta{ + Name: name, + }, + } + Expect(hubClient.Create(ctx, serviceExportName)).Should(Succeed()) + Expect(hubClient.Delete(ctx, serviceExportName)).Should(Succeed()) + }) + + It("should allow creating API with valid name starting with alphabet character", func() { + var name = "abc-123456789" + // Create the API. + serviceExportName := &v1alpha1.ServiceExport{ + ObjectMeta: metav1.ObjectMeta{ + Name: name, + }, + } + Expect(hubClient.Create(ctx, serviceExportName)).Should(Succeed()) + Expect(hubClient.Delete(ctx, serviceExportName)).Should(Succeed()) + }) + + It("should allow creating API with valid name starting with numeric character", func() { + var name = "123-123456789" + // Create the API. + serviceExportName := &v1alpha1.ServiceExport{ + ObjectMeta: metav1.ObjectMeta{ + Name: name, + }, + } + Expect(hubClient.Create(ctx, serviceExportName)).Should(Succeed()) + Expect(hubClient.Delete(ctx, serviceExportName)).Should(Succeed()) + }) + + It("should allow creating API with valid name ending with alphabet character", func() { + var name = "123456789-abc" + // Create the API. + serviceExportName := &v1alpha1.ServiceExport{ + ObjectMeta: metav1.ObjectMeta{ + Name: name, + }, + } + Expect(hubClient.Create(ctx, serviceExportName)).Should(Succeed()) + Expect(hubClient.Delete(ctx, serviceExportName)).Should(Succeed()) + }) + + It("should allow creating API with valid name ending with numeric character", func() { + var name = "123456789-123" + // Create the API. + serviceExportName := &v1alpha1.ServiceExport{ + ObjectMeta: metav1.ObjectMeta{ + Name: name, + }, + } + Expect(hubClient.Create(ctx, serviceExportName)).Should(Succeed()) + Expect(hubClient.Delete(ctx, serviceExportName)).Should(Succeed()) + }) + }) }) From 8907ad1ea7b8e2621b245a8a932088bc598c903a Mon Sep 17 00:00:00 2001 From: Jamison Tsai Date: Wed, 20 Nov 2024 11:30:20 +1100 Subject: [PATCH 05/66] add service import tests --- .../api_validation_integration_test.go | 124 ++++++++++++++++++ 1 file changed, 124 insertions(+) diff --git a/test/apis/v1alpha1/api_validation_integration_test.go b/test/apis/v1alpha1/api_validation_integration_test.go index 41d862e0..065e9083 100644 --- a/test/apis/v1alpha1/api_validation_integration_test.go +++ b/test/apis/v1alpha1/api_validation_integration_test.go @@ -306,4 +306,128 @@ var _ = Describe("Test cluster v1 API validation", func() { Expect(hubClient.Delete(ctx, serviceExportName)).Should(Succeed()) }) }) + + Context("Test ServiceImport API validation - invalid cases", func() { + It("should deny creating API with invalid name size", func() { + var name = "abcdef-123456789-123456789-123456789-123456789-123456789-123456789-123456789" + // Create the API. + serviceImportName := &v1alpha1.ServiceImport{ + ObjectMeta: metav1.ObjectMeta{ + Name: name, + }, + } + By(fmt.Sprintf("expecting denial of CREATE API %s", name)) + var err = hubClient.Create(ctx, serviceImportName) + var statusErr *k8serrors.StatusError + Expect(errors.As(err, &statusErr)).To(BeTrue(), fmt.Sprintf("Create API call produced error %s. Error type wanted is %s.", reflect.TypeOf(err), reflect.TypeOf(&k8serrors.StatusError{}))) + Expect(statusErr.Status().Message).Should(ContainSubstring("metadata.name max length is 63")) + }) + + It("should deny creating API with invalid name starting with non-alphanumeric character", func() { + var name = "-abcdef-123456789-123456789-123456789-123456789-123456789" + // Create the API. + serviceImportName := &v1alpha1.ServiceImport{ + ObjectMeta: metav1.ObjectMeta{ + Name: name, + }, + } + By(fmt.Sprintf("expecting denial of CREATE API %s", name)) + var err = hubClient.Create(ctx, serviceImportName) + var statusErr *k8serrors.StatusError + Expect(errors.As(err, &statusErr)).To(BeTrue(), fmt.Sprintf("Create API call produced error %s. Error type wanted is %s.", reflect.TypeOf(err), reflect.TypeOf(&k8serrors.StatusError{}))) + Expect(statusErr.Status().Message).Should(ContainSubstring("metadata.name max length is 63")) + }) + + It("should deny creating API with invalid name ending with non-alphanumeric character", func() { + var name = "abcdef-123456789-123456789-123456789-123456789-123456789-" + // Create the API. + serviceImportName := &v1alpha1.ServiceImport{ + ObjectMeta: metav1.ObjectMeta{ + Name: name, + }, + } + By(fmt.Sprintf("expecting denial of CREATE API %s", name)) + var err = hubClient.Create(ctx, serviceImportName) + var statusErr *k8serrors.StatusError + Expect(errors.As(err, &statusErr)).To(BeTrue(), fmt.Sprintf("Create API call produced error %s. Error type wanted is %s.", reflect.TypeOf(err), reflect.TypeOf(&k8serrors.StatusError{}))) + Expect(statusErr.Status().Message).Should(ContainSubstring("metadata.name max length is 63")) + }) + + It("should deny creating API with invalid name containing character that is not alphanumeric and not -", func() { + var name = "a_bcdef-123456789-123456789-123456789-123456789-123456789-123456789-123456789" + // Create the API. + serviceImportName := &v1alpha1.ServiceImport{ + ObjectMeta: metav1.ObjectMeta{ + Name: name, + }, + } + By(fmt.Sprintf("expecting denial of CREATE API %s", name)) + var err = hubClient.Create(ctx, serviceImportName) + var statusErr *k8serrors.StatusError + Expect(errors.As(err, &statusErr)).To(BeTrue(), fmt.Sprintf("Create API call produced error %s. Error type wanted is %s.", reflect.TypeOf(err), reflect.TypeOf(&k8serrors.StatusError{}))) + Expect(statusErr.Status().Message).Should(ContainSubstring("metadata.name max length is 63")) + }) + }) + + Context("Test ServiceImport API validation - valid cases", func() { + It("should allow creating API with valid name size", func() { + var name = "abc-123456789-123456789-123456789-123456789-123456789-123456789" + // Create the API. + serviceImportName := &v1alpha1.ServiceImport{ + ObjectMeta: metav1.ObjectMeta{ + Name: name, + }, + } + Expect(hubClient.Create(ctx, serviceImportName)).Should(Succeed()) + Expect(hubClient.Delete(ctx, serviceImportName)).Should(Succeed()) + }) + + It("should allow creating API with valid name starting with alphabet character", func() { + var name = "abc-123456789" + // Create the API. + serviceImportName := &v1alpha1.ServiceImport{ + ObjectMeta: metav1.ObjectMeta{ + Name: name, + }, + } + Expect(hubClient.Create(ctx, serviceImportName)).Should(Succeed()) + Expect(hubClient.Delete(ctx, serviceImportName)).Should(Succeed()) + }) + + It("should allow creating API with valid name starting with numeric character", func() { + var name = "123-123456789" + // Create the API. + serviceImportName := &v1alpha1.ServiceImport{ + ObjectMeta: metav1.ObjectMeta{ + Name: name, + }, + } + Expect(hubClient.Create(ctx, serviceImportName)).Should(Succeed()) + Expect(hubClient.Delete(ctx, serviceImportName)).Should(Succeed()) + }) + + It("should allow creating API with valid name ending with alphabet character", func() { + var name = "123456789-abc" + // Create the API. + serviceImportName := &v1alpha1.ServiceImport{ + ObjectMeta: metav1.ObjectMeta{ + Name: name, + }, + } + Expect(hubClient.Create(ctx, serviceImportName)).Should(Succeed()) + Expect(hubClient.Delete(ctx, serviceImportName)).Should(Succeed()) + }) + + It("should allow creating API with valid name ending with numeric character", func() { + var name = "123456789-123" + // Create the API. + serviceImportName := &v1alpha1.ServiceImport{ + ObjectMeta: metav1.ObjectMeta{ + Name: name, + }, + } + Expect(hubClient.Create(ctx, serviceImportName)).Should(Succeed()) + Expect(hubClient.Delete(ctx, serviceImportName)).Should(Succeed()) + }) + }) }) From c73065508ef393dc7f035d6ed57ca7971e6a7858 Mon Sep 17 00:00:00 2001 From: Jamison Tsai Date: Wed, 20 Nov 2024 11:56:52 +1100 Subject: [PATCH 06/66] add tests for service import and traffic manager profile/backend --- .../api_validation_integration_test.go | 347 ++++++++++++++++++ 1 file changed, 347 insertions(+) diff --git a/test/apis/v1alpha1/api_validation_integration_test.go b/test/apis/v1alpha1/api_validation_integration_test.go index 065e9083..5ad46e91 100644 --- a/test/apis/v1alpha1/api_validation_integration_test.go +++ b/test/apis/v1alpha1/api_validation_integration_test.go @@ -430,4 +430,351 @@ var _ = Describe("Test cluster v1 API validation", func() { Expect(hubClient.Delete(ctx, serviceImportName)).Should(Succeed()) }) }) + + Context("Test TrafficManagerProfile API validation - invalid cases", func() { + It("should deny creating API with invalid name size", func() { + var name = "abcdef-123456789-123456789-123456789-123456789-123456789-123456789-123456789" + // Create the API. + trafficManagerProfileName := &v1alpha1.TrafficManagerProfile{ + ObjectMeta: metav1.ObjectMeta{ + Name: name, + }, + Spec: v1alpha1.TrafficManagerProfileSpec{ + MonitorConfig: &v1alpha1.MonitorConfig{}, + }, + } + By(fmt.Sprintf("expecting denial of CREATE API %s", name)) + var err = hubClient.Create(ctx, trafficManagerProfileName) + var statusErr *k8serrors.StatusError + Expect(errors.As(err, &statusErr)).To(BeTrue(), fmt.Sprintf("Create API call produced error %s. Error type wanted is %s.", reflect.TypeOf(err), reflect.TypeOf(&k8serrors.StatusError{}))) + Expect(statusErr.Status().Message).Should(ContainSubstring("metadata.name max length is 63")) + }) + + It("should deny creating API with invalid name starting with non-alphanumeric character", func() { + var name = "-abcdef-123456789-123456789-123456789-123456789-123456789" + // Create the API. + trafficManagerProfileName := &v1alpha1.TrafficManagerProfile{ + ObjectMeta: metav1.ObjectMeta{ + Name: name, + }, + Spec: v1alpha1.TrafficManagerProfileSpec{ + MonitorConfig: &v1alpha1.MonitorConfig{}, + }, + } + By(fmt.Sprintf("expecting denial of CREATE API %s", name)) + var err = hubClient.Create(ctx, trafficManagerProfileName) + var statusErr *k8serrors.StatusError + Expect(errors.As(err, &statusErr)).To(BeTrue(), fmt.Sprintf("Create API call produced error %s. Error type wanted is %s.", reflect.TypeOf(err), reflect.TypeOf(&k8serrors.StatusError{}))) + Expect(statusErr.Status().Message).Should(ContainSubstring("metadata.name max length is 63")) + }) + + It("should deny creating API with invalid name ending with non-alphanumeric character", func() { + var name = "abcdef-123456789-123456789-123456789-123456789-123456789-" + // Create the API. + trafficManagerProfileName := &v1alpha1.TrafficManagerProfile{ + ObjectMeta: metav1.ObjectMeta{ + Name: name, + }, + Spec: v1alpha1.TrafficManagerProfileSpec{ + MonitorConfig: &v1alpha1.MonitorConfig{}, + }, + } + By(fmt.Sprintf("expecting denial of CREATE API %s", name)) + var err = hubClient.Create(ctx, trafficManagerProfileName) + var statusErr *k8serrors.StatusError + Expect(errors.As(err, &statusErr)).To(BeTrue(), fmt.Sprintf("Create API call produced error %s. Error type wanted is %s.", reflect.TypeOf(err), reflect.TypeOf(&k8serrors.StatusError{}))) + Expect(statusErr.Status().Message).Should(ContainSubstring("metadata.name max length is 63")) + }) + + It("should deny creating API with invalid name containing character that is not alphanumeric and not -", func() { + var name = "a_bcdef-123456789-123456789-123456789-123456789-123456789-123456789-123456789" + // Create the API. + trafficManagerProfileName := &v1alpha1.TrafficManagerProfile{ + ObjectMeta: metav1.ObjectMeta{ + Name: name, + }, + Spec: v1alpha1.TrafficManagerProfileSpec{ + MonitorConfig: &v1alpha1.MonitorConfig{}, + }, + } + By(fmt.Sprintf("expecting denial of CREATE API %s", name)) + var err = hubClient.Create(ctx, trafficManagerProfileName) + var statusErr *k8serrors.StatusError + Expect(errors.As(err, &statusErr)).To(BeTrue(), fmt.Sprintf("Create API call produced error %s. Error type wanted is %s.", reflect.TypeOf(err), reflect.TypeOf(&k8serrors.StatusError{}))) + Expect(statusErr.Status().Message).Should(ContainSubstring("metadata.name max length is 63")) + }) + }) + + Context("Test TrafficManagerProfile API validation - valid cases", func() { + It("should allow creating API with valid name size", func() { + var name = "abc-123456789-123456789-123456789-123456789-123456789-123456789" + // Create the API. + trafficManagerProfileName := &v1alpha1.TrafficManagerProfile{ + ObjectMeta: metav1.ObjectMeta{ + Name: name, + }, + Spec: v1alpha1.TrafficManagerProfileSpec{ + MonitorConfig: &v1alpha1.MonitorConfig{}, + }, + } + Expect(hubClient.Create(ctx, trafficManagerProfileName)).Should(Succeed()) + Expect(hubClient.Delete(ctx, trafficManagerProfileName)).Should(Succeed()) + }) + + It("should allow creating API with valid name starting with alphabet character", func() { + var name = "abc-123456789" + // Create the API. + trafficManagerProfileName := &v1alpha1.TrafficManagerProfile{ + ObjectMeta: metav1.ObjectMeta{ + Name: name, + }, + Spec: v1alpha1.TrafficManagerProfileSpec{ + MonitorConfig: &v1alpha1.MonitorConfig{}, + }, + } + Expect(hubClient.Create(ctx, trafficManagerProfileName)).Should(Succeed()) + Expect(hubClient.Delete(ctx, trafficManagerProfileName)).Should(Succeed()) + }) + + It("should allow creating API with valid name starting with numeric character", func() { + var name = "123-123456789" + // Create the API. + trafficManagerProfileName := &v1alpha1.TrafficManagerProfile{ + ObjectMeta: metav1.ObjectMeta{ + Name: name, + }, + Spec: v1alpha1.TrafficManagerProfileSpec{ + MonitorConfig: &v1alpha1.MonitorConfig{}, + }, + } + Expect(hubClient.Create(ctx, trafficManagerProfileName)).Should(Succeed()) + Expect(hubClient.Delete(ctx, trafficManagerProfileName)).Should(Succeed()) + }) + + It("should allow creating API with valid name ending with alphabet character", func() { + var name = "123456789-abc" + // Create the API. + trafficManagerProfileName := &v1alpha1.TrafficManagerProfile{ + ObjectMeta: metav1.ObjectMeta{ + Name: name, + }, + Spec: v1alpha1.TrafficManagerProfileSpec{ + MonitorConfig: &v1alpha1.MonitorConfig{}, + }, + } + Expect(hubClient.Create(ctx, trafficManagerProfileName)).Should(Succeed()) + Expect(hubClient.Delete(ctx, trafficManagerProfileName)).Should(Succeed()) + }) + + It("should allow creating API with valid name ending with numeric character", func() { + var name = "123456789-123" + // Create the API. + trafficManagerProfileName := &v1alpha1.TrafficManagerProfile{ + ObjectMeta: metav1.ObjectMeta{ + Name: name, + }, + Spec: v1alpha1.TrafficManagerProfileSpec{ + MonitorConfig: &v1alpha1.MonitorConfig{}, + }, + } + Expect(hubClient.Create(ctx, trafficManagerProfileName)).Should(Succeed()) + Expect(hubClient.Delete(ctx, trafficManagerProfileName)).Should(Succeed()) + }) + }) + + Context("Test TrafficManagerBackend API validation - invalid cases", func() { + It("should deny creating API with invalid name size", func() { + var name = "abcdef-123456789-123456789-123456789-123456789-123456789-123456789-123456789" + // Create the API. + trafficManagerBackendName := &v1alpha1.TrafficManagerBackend{ + ObjectMeta: metav1.ObjectMeta{ + Name: name, + }, + Spec: v1alpha1.TrafficManagerBackendSpec{ + Profile: v1alpha1.TrafficManagerProfileRef{ + Name: "traffic-manager-profile-ref-name", + }, + Backend: v1alpha1.TrafficManagerBackendRef{ + Name: "traffic-manager-backend-ref-name", + }, + }, + } + By(fmt.Sprintf("expecting denial of CREATE API %s", name)) + var err = hubClient.Create(ctx, trafficManagerBackendName) + var statusErr *k8serrors.StatusError + Expect(errors.As(err, &statusErr)).To(BeTrue(), fmt.Sprintf("Create API call produced error %s. Error type wanted is %s.", reflect.TypeOf(err), reflect.TypeOf(&k8serrors.StatusError{}))) + Expect(statusErr.Status().Message).Should(ContainSubstring("metadata.name max length is 63")) + }) + + It("should deny creating API with invalid name starting with non-alphanumeric character", func() { + var name = "-abcdef-123456789-123456789-123456789-123456789-123456789" + // Create the API. + trafficManagerBackendName := &v1alpha1.TrafficManagerBackend{ + ObjectMeta: metav1.ObjectMeta{ + Name: name, + }, + Spec: v1alpha1.TrafficManagerBackendSpec{ + Profile: v1alpha1.TrafficManagerProfileRef{ + Name: "traffic-manager-profile-ref-name", + }, + Backend: v1alpha1.TrafficManagerBackendRef{ + Name: "traffic-manager-backend-ref-name", + }, + }, + } + By(fmt.Sprintf("expecting denial of CREATE API %s", name)) + var err = hubClient.Create(ctx, trafficManagerBackendName) + var statusErr *k8serrors.StatusError + Expect(errors.As(err, &statusErr)).To(BeTrue(), fmt.Sprintf("Create API call produced error %s. Error type wanted is %s.", reflect.TypeOf(err), reflect.TypeOf(&k8serrors.StatusError{}))) + Expect(statusErr.Status().Message).Should(ContainSubstring("metadata.name max length is 63")) + }) + + It("should deny creating API with invalid name ending with non-alphanumeric character", func() { + var name = "abcdef-123456789-123456789-123456789-123456789-123456789-" + // Create the API. + trafficManagerBackendName := &v1alpha1.TrafficManagerBackend{ + ObjectMeta: metav1.ObjectMeta{ + Name: name, + }, + Spec: v1alpha1.TrafficManagerBackendSpec{ + Profile: v1alpha1.TrafficManagerProfileRef{ + Name: "traffic-manager-profile-ref-name", + }, + Backend: v1alpha1.TrafficManagerBackendRef{ + Name: "traffic-manager-backend-ref-name", + }, + }, + } + By(fmt.Sprintf("expecting denial of CREATE API %s", name)) + var err = hubClient.Create(ctx, trafficManagerBackendName) + var statusErr *k8serrors.StatusError + Expect(errors.As(err, &statusErr)).To(BeTrue(), fmt.Sprintf("Create API call produced error %s. Error type wanted is %s.", reflect.TypeOf(err), reflect.TypeOf(&k8serrors.StatusError{}))) + Expect(statusErr.Status().Message).Should(ContainSubstring("metadata.name max length is 63")) + }) + + It("should deny creating API with invalid name containing character that is not alphanumeric and not -", func() { + var name = "a_bcdef-123456789-123456789-123456789-123456789-123456789-123456789-123456789" + // Create the API. + trafficManagerBackendName := &v1alpha1.TrafficManagerBackend{ + ObjectMeta: metav1.ObjectMeta{ + Name: name, + }, + Spec: v1alpha1.TrafficManagerBackendSpec{ + Profile: v1alpha1.TrafficManagerProfileRef{ + Name: "traffic-manager-profile-ref-name", + }, + Backend: v1alpha1.TrafficManagerBackendRef{ + Name: "traffic-manager-backend-ref-name", + }, + }, + } + By(fmt.Sprintf("expecting denial of CREATE API %s", name)) + var err = hubClient.Create(ctx, trafficManagerBackendName) + var statusErr *k8serrors.StatusError + Expect(errors.As(err, &statusErr)).To(BeTrue(), fmt.Sprintf("Create API call produced error %s. Error type wanted is %s.", reflect.TypeOf(err), reflect.TypeOf(&k8serrors.StatusError{}))) + Expect(statusErr.Status().Message).Should(ContainSubstring("metadata.name max length is 63")) + }) + }) + + Context("Test TrafficManagerBackend API validation - valid cases", func() { + It("should allow creating API with valid name size", func() { + var name = "abc-123456789-123456789-123456789-123456789-123456789-123456789" + // Create the API. + trafficManagerBackendName := &v1alpha1.TrafficManagerBackend{ + ObjectMeta: metav1.ObjectMeta{ + Name: name, + }, + Spec: v1alpha1.TrafficManagerBackendSpec{ + Profile: v1alpha1.TrafficManagerProfileRef{ + Name: "traffic-manager-profile-ref-name", + }, + Backend: v1alpha1.TrafficManagerBackendRef{ + Name: "traffic-manager-backend-ref-name", + }, + }, + } + Expect(hubClient.Create(ctx, trafficManagerBackendName)).Should(Succeed()) + Expect(hubClient.Delete(ctx, trafficManagerBackendName)).Should(Succeed()) + }) + + It("should allow creating API with valid name starting with alphabet character", func() { + var name = "abc-123456789" + // Create the API. + trafficManagerBackendName := &v1alpha1.TrafficManagerBackend{ + ObjectMeta: metav1.ObjectMeta{ + Name: name, + }, + Spec: v1alpha1.TrafficManagerBackendSpec{ + Profile: v1alpha1.TrafficManagerProfileRef{ + Name: "traffic-manager-profile-ref-name", + }, + Backend: v1alpha1.TrafficManagerBackendRef{ + Name: "traffic-manager-backend-ref-name", + }, + }, + } + Expect(hubClient.Create(ctx, trafficManagerBackendName)).Should(Succeed()) + Expect(hubClient.Delete(ctx, trafficManagerBackendName)).Should(Succeed()) + }) + + It("should allow creating API with valid name starting with numeric character", func() { + var name = "123-123456789" + // Create the API. + trafficManagerBackendName := &v1alpha1.TrafficManagerBackend{ + ObjectMeta: metav1.ObjectMeta{ + Name: name, + }, + Spec: v1alpha1.TrafficManagerBackendSpec{ + Profile: v1alpha1.TrafficManagerProfileRef{ + Name: "traffic-manager-profile-ref-name", + }, + Backend: v1alpha1.TrafficManagerBackendRef{ + Name: "traffic-manager-backend-ref-name", + }, + }, + } + Expect(hubClient.Create(ctx, trafficManagerBackendName)).Should(Succeed()) + Expect(hubClient.Delete(ctx, trafficManagerBackendName)).Should(Succeed()) + }) + + It("should allow creating API with valid name ending with alphabet character", func() { + var name = "123456789-abc" + // Create the API. + trafficManagerBackendName := &v1alpha1.TrafficManagerBackend{ + ObjectMeta: metav1.ObjectMeta{ + Name: name, + }, + Spec: v1alpha1.TrafficManagerBackendSpec{ + Profile: v1alpha1.TrafficManagerProfileRef{ + Name: "traffic-manager-profile-ref-name", + }, + Backend: v1alpha1.TrafficManagerBackendRef{ + Name: "traffic-manager-backend-ref-name", + }, + }, + } + Expect(hubClient.Create(ctx, trafficManagerBackendName)).Should(Succeed()) + Expect(hubClient.Delete(ctx, trafficManagerBackendName)).Should(Succeed()) + }) + + It("should allow creating API with valid name ending with numeric character", func() { + var name = "123456789-123" + // Create the API. + trafficManagerBackendName := &v1alpha1.TrafficManagerBackend{ + ObjectMeta: metav1.ObjectMeta{ + Name: name, + }, + Spec: v1alpha1.TrafficManagerBackendSpec{ + Profile: v1alpha1.TrafficManagerProfileRef{ + Name: "traffic-manager-profile-ref-name", + }, + Backend: v1alpha1.TrafficManagerBackendRef{ + Name: "traffic-manager-backend-ref-name", + }, + }, + } + Expect(hubClient.Create(ctx, trafficManagerBackendName)).Should(Succeed()) + Expect(hubClient.Delete(ctx, trafficManagerBackendName)).Should(Succeed()) + }) + }) }) From f5faf855b2e482ea6c860845fa5e0a1f33a03b0c Mon Sep 17 00:00:00 2001 From: Jamison Tsai Date: Wed, 20 Nov 2024 17:09:52 +1100 Subject: [PATCH 07/66] add integration test to makefile --- Makefile | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/Makefile b/Makefile index 0f5edf67..5bd83c21 100644 --- a/Makefile +++ b/Makefile @@ -108,6 +108,11 @@ test: manifests generate fmt vet local-unit-test local-unit-test: $(ENVTEST) ## Run tests. CGO_ENABLED=1 KUBEBUILDER_ASSETS="$(shell $(ENVTEST) use $(ENVTEST_K8S_VERSION) -p path)" go test ./pkg/... -race -coverprofile=coverage.xml -covermode=atomic -v +.PHONY: integration-test +integration-test: $(ENVTEST) ## Run integration tests. + CGO_ENABLED=1 KUBEBUILDER_ASSETS="$(shell $(ENVTEST) use $(ENVTEST_K8S_VERSION) -p path)" \ + go test -tags=integration -v ./test/apis/v1alpha1/api_validation_integration_test.go + .PHONY: e2e-setup e2e-setup: bash test/scripts/bootstrap.sh From e6ac7e89053656f607eee44002663c76e9631b12 Mon Sep 17 00:00:00 2001 From: Jamison Tsai Date: Wed, 20 Nov 2024 17:36:40 +1100 Subject: [PATCH 08/66] set TimeoutInSeconds default to 9 --- api/v1alpha1/trafficmanagerprofile_types.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/api/v1alpha1/trafficmanagerprofile_types.go b/api/v1alpha1/trafficmanagerprofile_types.go index f970b3cb..af16e507 100644 --- a/api/v1alpha1/trafficmanagerprofile_types.go +++ b/api/v1alpha1/trafficmanagerprofile_types.go @@ -41,6 +41,7 @@ type TrafficManagerProfileSpec struct { // MonitorConfig defines the endpoint monitoring settings of the Traffic Manager profile. // https://learn.microsoft.com/en-us/azure/traffic-manager/traffic-manager-monitoring +// +kubebuilder:validation:XValidation:rule="size(self.metadata.name) < 64",message="metadata.name max length is 63" type MonitorConfig struct { // The monitor interval for endpoints in this profile. This is the interval at which Traffic Manager will check the health // of each endpoint in this profile. @@ -75,6 +76,7 @@ type MonitorConfig struct { // If no Timeout value is specified, it uses a default value of 9 seconds. // +kubebuilder:validation:Minimum=5 // +kubebuilder:validation:Maximum=10 + // +kubebuilder:default:=9 TimeoutInSeconds *int64 `json:"timeoutInSeconds,omitempty"` // The number of consecutive failed health check that Traffic Manager tolerates before declaring an endpoint in this profile From 5673aef2273d325308cce19c64940d6ba9a4217e Mon Sep 17 00:00:00 2001 From: Jamison Tsai Date: Wed, 20 Nov 2024 19:16:31 +1100 Subject: [PATCH 09/66] add conditions for MonitorConfig --- api/v1alpha1/trafficmanagerprofile_types.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api/v1alpha1/trafficmanagerprofile_types.go b/api/v1alpha1/trafficmanagerprofile_types.go index af16e507..705bf7b5 100644 --- a/api/v1alpha1/trafficmanagerprofile_types.go +++ b/api/v1alpha1/trafficmanagerprofile_types.go @@ -41,7 +41,7 @@ type TrafficManagerProfileSpec struct { // MonitorConfig defines the endpoint monitoring settings of the Traffic Manager profile. // https://learn.microsoft.com/en-us/azure/traffic-manager/traffic-manager-monitoring -// +kubebuilder:validation:XValidation:rule="size(self.metadata.name) < 64",message="metadata.name max length is 63" +// +kubebuilder:validation:XValidation:rule="(self.intervalInSeconds == 30 && (self.timeoutInSeconds >= 5 && self.timeoutInSeconds <= 10)) || (self.intervalInSeconds == null && self.timeoutInSeconds == 10) || (self.intervalInSeconds == 10 && (self.timeoutInSeconds >= 5 && self.timeoutInSeconds <= 9))",message="" type MonitorConfig struct { // The monitor interval for endpoints in this profile. This is the interval at which Traffic Manager will check the health // of each endpoint in this profile. From 4f3a8df90e2991acc254c9dcbc28650f0af878b5 Mon Sep 17 00:00:00 2001 From: Jamison Tsai Date: Wed, 20 Nov 2024 19:19:40 +1100 Subject: [PATCH 10/66] add message to rule --- api/v1alpha1/trafficmanagerprofile_types.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api/v1alpha1/trafficmanagerprofile_types.go b/api/v1alpha1/trafficmanagerprofile_types.go index 705bf7b5..6bb458e4 100644 --- a/api/v1alpha1/trafficmanagerprofile_types.go +++ b/api/v1alpha1/trafficmanagerprofile_types.go @@ -41,7 +41,7 @@ type TrafficManagerProfileSpec struct { // MonitorConfig defines the endpoint monitoring settings of the Traffic Manager profile. // https://learn.microsoft.com/en-us/azure/traffic-manager/traffic-manager-monitoring -// +kubebuilder:validation:XValidation:rule="(self.intervalInSeconds == 30 && (self.timeoutInSeconds >= 5 && self.timeoutInSeconds <= 10)) || (self.intervalInSeconds == null && self.timeoutInSeconds == 10) || (self.intervalInSeconds == 10 && (self.timeoutInSeconds >= 5 && self.timeoutInSeconds <= 9))",message="" +// +kubebuilder:validation:XValidation:rule="(self.intervalInSeconds == 30 && (self.timeoutInSeconds >= 5 && self.timeoutInSeconds <= 10)) || (self.intervalInSeconds == null && self.timeoutInSeconds == 10) || (self.intervalInSeconds == 10 && (self.timeoutInSeconds >= 5 && self.timeoutInSeconds <= 9))",message="allowed timeoutInSeconds value is dependent on intervalInSeconds value" type MonitorConfig struct { // The monitor interval for endpoints in this profile. This is the interval at which Traffic Manager will check the health // of each endpoint in this profile. From e2faf025b7ffd717e12fc308db666d724a49a730 Mon Sep 17 00:00:00 2001 From: Jamison Tsai Date: Wed, 20 Nov 2024 22:47:13 +1100 Subject: [PATCH 11/66] add second values to monitorconfig --- ...leet.azure.com_trafficmanagerprofiles.yaml | 9 ++++ .../api_validation_integration_test.go | 46 +++++++++++++++---- 2 files changed, 46 insertions(+), 9 deletions(-) diff --git a/config/crd/bases/networking.fleet.azure.com_trafficmanagerprofiles.yaml b/config/crd/bases/networking.fleet.azure.com_trafficmanagerprofiles.yaml index 9d5f6956..8994801f 100644 --- a/config/crd/bases/networking.fleet.azure.com_trafficmanagerprofiles.yaml +++ b/config/crd/bases/networking.fleet.azure.com_trafficmanagerprofiles.yaml @@ -90,6 +90,7 @@ spec: - TCP type: string timeoutInSeconds: + default: 9 description: |- The monitor timeout for endpoints in this profile. This is the time that Traffic Manager allows endpoints in this profile to response to the health check. @@ -111,6 +112,14 @@ spec: minimum: 0 type: integer type: object + x-kubernetes-validations: + - message: allowed timeoutInSeconds value is dependent on intervalInSeconds + value + rule: (self.intervalInSeconds == 30 && (self.timeoutInSeconds >= + 5 && self.timeoutInSeconds <= 10)) || (self.intervalInSeconds + == null && self.timeoutInSeconds == 10) || (self.intervalInSeconds + == 10 && (self.timeoutInSeconds >= 5 && self.timeoutInSeconds + <= 9)) type: object status: description: The observed status of TrafficManagerProfile. diff --git a/test/apis/v1alpha1/api_validation_integration_test.go b/test/apis/v1alpha1/api_validation_integration_test.go index 5ad46e91..f1f89a67 100644 --- a/test/apis/v1alpha1/api_validation_integration_test.go +++ b/test/apis/v1alpha1/api_validation_integration_test.go @@ -3,6 +3,7 @@ package v1alpha1 import ( "errors" "fmt" + "k8s.io/utils/ptr" "reflect" . "github.com/onsi/ginkgo/v2" @@ -440,7 +441,10 @@ var _ = Describe("Test cluster v1 API validation", func() { Name: name, }, Spec: v1alpha1.TrafficManagerProfileSpec{ - MonitorConfig: &v1alpha1.MonitorConfig{}, + MonitorConfig: &v1alpha1.MonitorConfig{ + IntervalInSeconds: ptr.To(int64(30)), + TimeoutInSeconds: ptr.To(int64(7)), + }, }, } By(fmt.Sprintf("expecting denial of CREATE API %s", name)) @@ -458,7 +462,10 @@ var _ = Describe("Test cluster v1 API validation", func() { Name: name, }, Spec: v1alpha1.TrafficManagerProfileSpec{ - MonitorConfig: &v1alpha1.MonitorConfig{}, + MonitorConfig: &v1alpha1.MonitorConfig{ + IntervalInSeconds: ptr.To(int64(30)), + TimeoutInSeconds: ptr.To(int64(7)), + }, }, } By(fmt.Sprintf("expecting denial of CREATE API %s", name)) @@ -476,7 +483,10 @@ var _ = Describe("Test cluster v1 API validation", func() { Name: name, }, Spec: v1alpha1.TrafficManagerProfileSpec{ - MonitorConfig: &v1alpha1.MonitorConfig{}, + MonitorConfig: &v1alpha1.MonitorConfig{ + IntervalInSeconds: ptr.To(int64(30)), + TimeoutInSeconds: ptr.To(int64(7)), + }, }, } By(fmt.Sprintf("expecting denial of CREATE API %s", name)) @@ -494,7 +504,10 @@ var _ = Describe("Test cluster v1 API validation", func() { Name: name, }, Spec: v1alpha1.TrafficManagerProfileSpec{ - MonitorConfig: &v1alpha1.MonitorConfig{}, + MonitorConfig: &v1alpha1.MonitorConfig{ + IntervalInSeconds: ptr.To(int64(30)), + TimeoutInSeconds: ptr.To(int64(7)), + }, }, } By(fmt.Sprintf("expecting denial of CREATE API %s", name)) @@ -514,7 +527,10 @@ var _ = Describe("Test cluster v1 API validation", func() { Name: name, }, Spec: v1alpha1.TrafficManagerProfileSpec{ - MonitorConfig: &v1alpha1.MonitorConfig{}, + MonitorConfig: &v1alpha1.MonitorConfig{ + IntervalInSeconds: ptr.To(int64(30)), + TimeoutInSeconds: ptr.To(int64(7)), + }, }, } Expect(hubClient.Create(ctx, trafficManagerProfileName)).Should(Succeed()) @@ -529,7 +545,10 @@ var _ = Describe("Test cluster v1 API validation", func() { Name: name, }, Spec: v1alpha1.TrafficManagerProfileSpec{ - MonitorConfig: &v1alpha1.MonitorConfig{}, + MonitorConfig: &v1alpha1.MonitorConfig{ + IntervalInSeconds: ptr.To(int64(30)), + TimeoutInSeconds: ptr.To(int64(7)), + }, }, } Expect(hubClient.Create(ctx, trafficManagerProfileName)).Should(Succeed()) @@ -544,7 +563,10 @@ var _ = Describe("Test cluster v1 API validation", func() { Name: name, }, Spec: v1alpha1.TrafficManagerProfileSpec{ - MonitorConfig: &v1alpha1.MonitorConfig{}, + MonitorConfig: &v1alpha1.MonitorConfig{ + IntervalInSeconds: ptr.To(int64(30)), + TimeoutInSeconds: ptr.To(int64(7)), + }, }, } Expect(hubClient.Create(ctx, trafficManagerProfileName)).Should(Succeed()) @@ -559,7 +581,10 @@ var _ = Describe("Test cluster v1 API validation", func() { Name: name, }, Spec: v1alpha1.TrafficManagerProfileSpec{ - MonitorConfig: &v1alpha1.MonitorConfig{}, + MonitorConfig: &v1alpha1.MonitorConfig{ + IntervalInSeconds: ptr.To(int64(30)), + TimeoutInSeconds: ptr.To(int64(7)), + }, }, } Expect(hubClient.Create(ctx, trafficManagerProfileName)).Should(Succeed()) @@ -574,7 +599,10 @@ var _ = Describe("Test cluster v1 API validation", func() { Name: name, }, Spec: v1alpha1.TrafficManagerProfileSpec{ - MonitorConfig: &v1alpha1.MonitorConfig{}, + MonitorConfig: &v1alpha1.MonitorConfig{ + IntervalInSeconds: ptr.To(int64(30)), + TimeoutInSeconds: ptr.To(int64(7)), + }, }, } Expect(hubClient.Create(ctx, trafficManagerProfileName)).Should(Succeed()) From f6c87ba9baeb6c0bbca1b566e8ee29a46670f85f Mon Sep 17 00:00:00 2001 From: Jamison Tsai Date: Thu, 21 Nov 2024 09:03:46 +1100 Subject: [PATCH 12/66] run goimports --- test/apis/v1alpha1/api_validation_integration_test.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/test/apis/v1alpha1/api_validation_integration_test.go b/test/apis/v1alpha1/api_validation_integration_test.go index f1f89a67..33e7f1a5 100644 --- a/test/apis/v1alpha1/api_validation_integration_test.go +++ b/test/apis/v1alpha1/api_validation_integration_test.go @@ -3,9 +3,10 @@ package v1alpha1 import ( "errors" "fmt" - "k8s.io/utils/ptr" "reflect" + "k8s.io/utils/ptr" + . "github.com/onsi/ginkgo/v2" . "github.com/onsi/gomega" k8serrors "k8s.io/apimachinery/pkg/api/errors" From 0630e47942c5076f087209f3e6434df28c1acb0b Mon Sep 17 00:00:00 2001 From: Jamison Tsai Date: Thu, 21 Nov 2024 11:35:21 +1100 Subject: [PATCH 13/66] resolve type comparison issue in CEL --- api/v1alpha1/trafficmanagerprofile_types.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api/v1alpha1/trafficmanagerprofile_types.go b/api/v1alpha1/trafficmanagerprofile_types.go index 6bb458e4..cf134811 100644 --- a/api/v1alpha1/trafficmanagerprofile_types.go +++ b/api/v1alpha1/trafficmanagerprofile_types.go @@ -41,7 +41,7 @@ type TrafficManagerProfileSpec struct { // MonitorConfig defines the endpoint monitoring settings of the Traffic Manager profile. // https://learn.microsoft.com/en-us/azure/traffic-manager/traffic-manager-monitoring -// +kubebuilder:validation:XValidation:rule="(self.intervalInSeconds == 30 && (self.timeoutInSeconds >= 5 && self.timeoutInSeconds <= 10)) || (self.intervalInSeconds == null && self.timeoutInSeconds == 10) || (self.intervalInSeconds == 10 && (self.timeoutInSeconds >= 5 && self.timeoutInSeconds <= 9))",message="allowed timeoutInSeconds value is dependent on intervalInSeconds value" +// +kubebuilder:validation:XValidation:rule="(self.intervalInSeconds == 30 && (self.timeoutInSeconds >= 5 && self.timeoutInSeconds <= 10)) || (!has(self.intervalInSeconds) && self.timeoutInSeconds == 10) || (self.intervalInSeconds == 10 && (self.timeoutInSeconds >= 5 && self.timeoutInSeconds <= 9))",message="allowed timeoutInSeconds value is dependent on intervalInSeconds value" type MonitorConfig struct { // The monitor interval for endpoints in this profile. This is the interval at which Traffic Manager will check the health // of each endpoint in this profile. From a5d9faceeeb7b6197c3712ff7f2f19bee74baf64 Mon Sep 17 00:00:00 2001 From: Jamison Tsai Date: Thu, 21 Nov 2024 13:31:32 +1100 Subject: [PATCH 14/66] add case fo when intervalInSeconds is not 30 or 10 --- api/v1alpha1/trafficmanagerprofile_types.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api/v1alpha1/trafficmanagerprofile_types.go b/api/v1alpha1/trafficmanagerprofile_types.go index cf134811..682c9849 100644 --- a/api/v1alpha1/trafficmanagerprofile_types.go +++ b/api/v1alpha1/trafficmanagerprofile_types.go @@ -41,7 +41,7 @@ type TrafficManagerProfileSpec struct { // MonitorConfig defines the endpoint monitoring settings of the Traffic Manager profile. // https://learn.microsoft.com/en-us/azure/traffic-manager/traffic-manager-monitoring -// +kubebuilder:validation:XValidation:rule="(self.intervalInSeconds == 30 && (self.timeoutInSeconds >= 5 && self.timeoutInSeconds <= 10)) || (!has(self.intervalInSeconds) && self.timeoutInSeconds == 10) || (self.intervalInSeconds == 10 && (self.timeoutInSeconds >= 5 && self.timeoutInSeconds <= 9))",message="allowed timeoutInSeconds value is dependent on intervalInSeconds value" +// +kubebuilder:validation:XValidation:rule="(self.intervalInSeconds == 30 && (self.timeoutInSeconds >= 5 && self.timeoutInSeconds <= 10)) || (!has(self.intervalInSeconds) && self.timeoutInSeconds == 10) || (self.intervalInSeconds == 10 && (self.timeoutInSeconds >= 5 && self.timeoutInSeconds <= 9)) || (has(self.intervalInSeconds) && self.intervalInSeconds != 30 && self.intervalInSeconds != 10)",message="allowed timeoutInSeconds value is dependent on intervalInSeconds value" type MonitorConfig struct { // The monitor interval for endpoints in this profile. This is the interval at which Traffic Manager will check the health // of each endpoint in this profile. From 9023bdffb9b7d33bbad500673bdcff4f684f8501 Mon Sep 17 00:00:00 2001 From: Jamison Tsai Date: Thu, 21 Nov 2024 14:14:00 +1100 Subject: [PATCH 15/66] when IntervalInSeconds is 10, TimeoutInSeconds should be between 5 & 9 --- .../hub/trafficmanagerprofile/controller_integration_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/controllers/hub/trafficmanagerprofile/controller_integration_test.go b/pkg/controllers/hub/trafficmanagerprofile/controller_integration_test.go index ca4f5ddd..52c36c64 100644 --- a/pkg/controllers/hub/trafficmanagerprofile/controller_integration_test.go +++ b/pkg/controllers/hub/trafficmanagerprofile/controller_integration_test.go @@ -76,7 +76,7 @@ var _ = Describe("Test TrafficManagerProfile Controller", func() { It("Update the trafficManagerProfile spec", func() { Expect(k8sClient.Get(ctx, types.NamespacedName{Namespace: testNamespace, Name: name}, profile)).Should(Succeed(), "failed to get the trafficManagerProfile") profile.Spec.MonitorConfig.IntervalInSeconds = ptr.To[int64](10) - profile.Spec.MonitorConfig.TimeoutInSeconds = ptr.To[int64](10) + profile.Spec.MonitorConfig.TimeoutInSeconds = ptr.To[int64](9) Expect(k8sClient.Update(ctx, profile)).Should(Succeed(), "failed to update the trafficManagerProfile") }) From 40ea19a47fa950c944b4c86d307c6b5c49d3f162 Mon Sep 17 00:00:00 2001 From: Jamison Tsai Date: Mon, 2 Dec 2024 00:15:01 +1100 Subject: [PATCH 16/66] add integration-test to test --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 5bd83c21..52638b85 100644 --- a/Makefile +++ b/Makefile @@ -102,7 +102,7 @@ vet: ## Run go vet against code. ## -------------------------------------- .PHONY: test -test: manifests generate fmt vet local-unit-test +test: manifests generate fmt vet local-unit-test integration-test .PHONY: local-unit-test local-unit-test: $(ENVTEST) ## Run tests. From dccfcae192b6e47a054983225ddd966d88aeac6d Mon Sep 17 00:00:00 2001 From: Jamison Tsai Date: Mon, 2 Dec 2024 00:23:26 +1100 Subject: [PATCH 17/66] test all integration potential files --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 52638b85..f4aa0a76 100644 --- a/Makefile +++ b/Makefile @@ -111,7 +111,7 @@ local-unit-test: $(ENVTEST) ## Run tests. .PHONY: integration-test integration-test: $(ENVTEST) ## Run integration tests. CGO_ENABLED=1 KUBEBUILDER_ASSETS="$(shell $(ENVTEST) use $(ENVTEST_K8S_VERSION) -p path)" \ - go test -tags=integration -v ./test/apis/v1alpha1/api_validation_integration_test.go + go test -tags=integration -v ./test/... -race -coverprofile=integration_coverage.xml -covermode=atomic .PHONY: e2e-setup e2e-setup: From 08f1c64ab75d1d38885f20aeeadc794c16b6b84a Mon Sep 17 00:00:00 2001 From: Jamison Tsai Date: Tue, 3 Dec 2024 12:22:01 +1100 Subject: [PATCH 18/66] remove additional conditions --- Makefile | 2 +- api/v1alpha1/trafficmanagerprofile_types.go | 2 -- ...etworking.fleet.azure.com_trafficmanagerprofiles.yaml | 9 --------- .../trafficmanagerprofile/controller_integration_test.go | 2 +- 4 files changed, 2 insertions(+), 13 deletions(-) diff --git a/Makefile b/Makefile index f4aa0a76..500cc50d 100644 --- a/Makefile +++ b/Makefile @@ -111,7 +111,7 @@ local-unit-test: $(ENVTEST) ## Run tests. .PHONY: integration-test integration-test: $(ENVTEST) ## Run integration tests. CGO_ENABLED=1 KUBEBUILDER_ASSETS="$(shell $(ENVTEST) use $(ENVTEST_K8S_VERSION) -p path)" \ - go test -tags=integration -v ./test/... -race -coverprofile=integration_coverage.xml -covermode=atomic + go test ./test/... -race -coverprofile=integration_coverage.xml -covermode=atomic .PHONY: e2e-setup e2e-setup: diff --git a/api/v1alpha1/trafficmanagerprofile_types.go b/api/v1alpha1/trafficmanagerprofile_types.go index 682c9849..f970b3cb 100644 --- a/api/v1alpha1/trafficmanagerprofile_types.go +++ b/api/v1alpha1/trafficmanagerprofile_types.go @@ -41,7 +41,6 @@ type TrafficManagerProfileSpec struct { // MonitorConfig defines the endpoint monitoring settings of the Traffic Manager profile. // https://learn.microsoft.com/en-us/azure/traffic-manager/traffic-manager-monitoring -// +kubebuilder:validation:XValidation:rule="(self.intervalInSeconds == 30 && (self.timeoutInSeconds >= 5 && self.timeoutInSeconds <= 10)) || (!has(self.intervalInSeconds) && self.timeoutInSeconds == 10) || (self.intervalInSeconds == 10 && (self.timeoutInSeconds >= 5 && self.timeoutInSeconds <= 9)) || (has(self.intervalInSeconds) && self.intervalInSeconds != 30 && self.intervalInSeconds != 10)",message="allowed timeoutInSeconds value is dependent on intervalInSeconds value" type MonitorConfig struct { // The monitor interval for endpoints in this profile. This is the interval at which Traffic Manager will check the health // of each endpoint in this profile. @@ -76,7 +75,6 @@ type MonitorConfig struct { // If no Timeout value is specified, it uses a default value of 9 seconds. // +kubebuilder:validation:Minimum=5 // +kubebuilder:validation:Maximum=10 - // +kubebuilder:default:=9 TimeoutInSeconds *int64 `json:"timeoutInSeconds,omitempty"` // The number of consecutive failed health check that Traffic Manager tolerates before declaring an endpoint in this profile diff --git a/config/crd/bases/networking.fleet.azure.com_trafficmanagerprofiles.yaml b/config/crd/bases/networking.fleet.azure.com_trafficmanagerprofiles.yaml index 8994801f..9d5f6956 100644 --- a/config/crd/bases/networking.fleet.azure.com_trafficmanagerprofiles.yaml +++ b/config/crd/bases/networking.fleet.azure.com_trafficmanagerprofiles.yaml @@ -90,7 +90,6 @@ spec: - TCP type: string timeoutInSeconds: - default: 9 description: |- The monitor timeout for endpoints in this profile. This is the time that Traffic Manager allows endpoints in this profile to response to the health check. @@ -112,14 +111,6 @@ spec: minimum: 0 type: integer type: object - x-kubernetes-validations: - - message: allowed timeoutInSeconds value is dependent on intervalInSeconds - value - rule: (self.intervalInSeconds == 30 && (self.timeoutInSeconds >= - 5 && self.timeoutInSeconds <= 10)) || (self.intervalInSeconds - == null && self.timeoutInSeconds == 10) || (self.intervalInSeconds - == 10 && (self.timeoutInSeconds >= 5 && self.timeoutInSeconds - <= 9)) type: object status: description: The observed status of TrafficManagerProfile. diff --git a/pkg/controllers/hub/trafficmanagerprofile/controller_integration_test.go b/pkg/controllers/hub/trafficmanagerprofile/controller_integration_test.go index 52c36c64..ca4f5ddd 100644 --- a/pkg/controllers/hub/trafficmanagerprofile/controller_integration_test.go +++ b/pkg/controllers/hub/trafficmanagerprofile/controller_integration_test.go @@ -76,7 +76,7 @@ var _ = Describe("Test TrafficManagerProfile Controller", func() { It("Update the trafficManagerProfile spec", func() { Expect(k8sClient.Get(ctx, types.NamespacedName{Namespace: testNamespace, Name: name}, profile)).Should(Succeed(), "failed to get the trafficManagerProfile") profile.Spec.MonitorConfig.IntervalInSeconds = ptr.To[int64](10) - profile.Spec.MonitorConfig.TimeoutInSeconds = ptr.To[int64](9) + profile.Spec.MonitorConfig.TimeoutInSeconds = ptr.To[int64](10) Expect(k8sClient.Update(ctx, profile)).Should(Succeed(), "failed to update the trafficManagerProfile") }) From 41ac50208ac2f7ad862309833d7504a77ae9eec0 Mon Sep 17 00:00:00 2001 From: Jamison Tsai Date: Tue, 3 Dec 2024 13:27:03 +1100 Subject: [PATCH 19/66] remove role.yaml changes --- config/rbac/role.yaml | 3 --- 1 file changed, 3 deletions(-) diff --git a/config/rbac/role.yaml b/config/rbac/role.yaml index 3d134d88..3318d032 100644 --- a/config/rbac/role.yaml +++ b/config/rbac/role.yaml @@ -63,7 +63,6 @@ rules: - multiclusterservices - serviceexports - serviceimports - - trafficmanagerbackends - trafficmanagerprofiles verbs: - create @@ -87,7 +86,6 @@ rules: - multiclusterservices/status - serviceexports/status - serviceimports/status - - trafficmanagerbackends/status - trafficmanagerprofiles/status verbs: - get @@ -98,7 +96,6 @@ rules: resources: - multiclusterservices/finalizers - serviceimports/finalizers - - trafficmanagerbackends/finalizers - trafficmanagerprofiles/finalizers verbs: - get From 50f4a8ff7405be6f0e564cbb92a8610edc1372a8 Mon Sep 17 00:00:00 2001 From: Jamison Tsai Date: Tue, 3 Dec 2024 13:37:35 +1100 Subject: [PATCH 20/66] fix filepath in hubtestenv --- test/apis/v1alpha1/suite_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/apis/v1alpha1/suite_test.go b/test/apis/v1alpha1/suite_test.go index a4b18feb..6b8719b0 100644 --- a/test/apis/v1alpha1/suite_test.go +++ b/test/apis/v1alpha1/suite_test.go @@ -44,7 +44,7 @@ var _ = BeforeSuite(func() { // Start the cluster. hubTestEnv = &envtest.Environment{ CRDDirectoryPaths: []string{ - filepath.Join("..", "..", "..", "..", "config", "crd", "bases"), + filepath.Join("..", "..", "..", "config", "crd", "bases"), }, ErrorIfCRDPathMissing: true, } From 679cdea1f289e0859f07fa4d99ea4ccb35b4b0df Mon Sep 17 00:00:00 2001 From: Jamison Tsai Date: Tue, 3 Dec 2024 13:47:30 +1100 Subject: [PATCH 21/66] add copyright banner, fix format and change wording --- test/apis/v1alpha1/api_validation_integration_test.go | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/test/apis/v1alpha1/api_validation_integration_test.go b/test/apis/v1alpha1/api_validation_integration_test.go index 33e7f1a5..b7e3bca7 100644 --- a/test/apis/v1alpha1/api_validation_integration_test.go +++ b/test/apis/v1alpha1/api_validation_integration_test.go @@ -1,3 +1,7 @@ +/* +Copyright (c) Microsoft Corporation. +Licensed under the MIT license. +*/ package v1alpha1 import ( @@ -5,18 +9,17 @@ import ( "fmt" "reflect" - "k8s.io/utils/ptr" - . "github.com/onsi/ginkgo/v2" . "github.com/onsi/gomega" k8serrors "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/utils/ptr" v1alpha1 "go.goms.io/fleet-networking/api/v1alpha1" ) -var _ = Describe("Test cluster v1 API validation", func() { - Context("Test MemberClusterService API validation - invalid cases", func() { +var _ = Describe("Test networking v1alpha1 API validation", func() { + Context("Test MultiClusterService API validation - invalid cases", func() { It("should deny creating API with invalid name size", func() { var name = "abcdef-123456789-123456789-123456789-123456789-123456789-123456789-123456789" // Create the API. From 02172270dd254064632cc16248f698dd83c24303 Mon Sep 17 00:00:00 2001 From: Zhiying Lin <54013513+zhiying-lin@users.noreply.github.com> Date: Wed, 20 Nov 2024 15:23:14 +0800 Subject: [PATCH 22/66] fix: fix the atm feature related bugs (#220) --- api/v1alpha1/trafficmanagerbackend_types.go | 2 +- .../templates/rbac.yaml | 54 +++++++++++++++++++ cmd/hub-net-controller-manager/main.go | 26 ++++++++- ...leet.azure.com_trafficmanagerbackends.yaml | 2 +- config/rbac/role.yaml | 3 ++ go.mod | 8 +-- go.sum | 15 +++--- pkg/common/objectmeta/objectmeta.go | 7 ++- pkg/common/objectmeta/objectmeta_test.go | 15 ++++++ .../hub/membercluster/suite_test.go | 2 +- .../hub/trafficmanagerbackend/controller.go | 24 +++++---- .../hub/trafficmanagerbackend/suite_test.go | 2 +- .../v1alpha1/suite_test.go | 2 +- .../v1beta1/suite_test.go | 2 +- .../trafficmanager/fakeprovider/endpoint.go | 2 +- .../trafficmanager/fakeprovider/profile.go | 7 ++- test/scripts/bootstrap.sh | 2 +- 17 files changed, 137 insertions(+), 38 deletions(-) create mode 100644 pkg/common/objectmeta/objectmeta_test.go diff --git a/api/v1alpha1/trafficmanagerbackend_types.go b/api/v1alpha1/trafficmanagerbackend_types.go index 22278792..6befbe28 100644 --- a/api/v1alpha1/trafficmanagerbackend_types.go +++ b/api/v1alpha1/trafficmanagerbackend_types.go @@ -10,7 +10,7 @@ const ( // +kubebuilder:resource:scope=Namespaced,categories={fleet-networking},shortName=tmb // +kubebuilder:subresource:status // +kubebuilder:printcolumn:JSONPath=`.spec.profile.name`,name="Profile",type=string -// +kubebuilder:printcolumn:JSONPath=`.spec.endpointRef.name`,name="Backend",type=string +// +kubebuilder:printcolumn:JSONPath=`.spec.backend.name`,name="Backend",type=string // +kubebuilder:printcolumn:JSONPath=`.status.conditions[?(@.type=='Accepted')].status`,name="Is-Accepted",type=string // +kubebuilder:printcolumn:JSONPath=`.metadata.creationTimestamp`,name="Age",type=date diff --git a/charts/hub-net-controller-manager/templates/rbac.yaml b/charts/hub-net-controller-manager/templates/rbac.yaml index be9449be..02decfb2 100644 --- a/charts/hub-net-controller-manager/templates/rbac.yaml +++ b/charts/hub-net-controller-manager/templates/rbac.yaml @@ -137,6 +137,60 @@ rules: - get - list - watch +{{- if .Values.enableTrafficManagerFeature }} +- apiGroups: + - networking.fleet.azure.com + resources: + - trafficmanagerbackends + verbs: + - create + - delete + - get + - list + - patch + - update + - watch +- apiGroups: + - networking.fleet.azure.com + resources: + - trafficmanagerbackends/finalizers + verbs: + - update +- apiGroups: + - networking.fleet.azure.com + resources: + - trafficmanagerbackends/status + verbs: + - get + - patch + - update +- apiGroups: + - networking.fleet.azure.com + resources: + - trafficmanagerprofiles + verbs: + - create + - delete + - get + - list + - patch + - update + - watch +- apiGroups: + - networking.fleet.azure.com + resources: + - trafficmanagerprofiles/finalizers + verbs: + - update +- apiGroups: + - networking.fleet.azure.com + resources: + - trafficmanagerprofiles/status + verbs: + - get + - patch + - update +{{- end }} --- kind: ClusterRoleBinding apiVersion: rbac.authorization.k8s.io/v1 diff --git a/cmd/hub-net-controller-manager/main.go b/cmd/hub-net-controller-manager/main.go index 5c6685b9..2d7ef3e8 100644 --- a/cmd/hub-net-controller-manager/main.go +++ b/cmd/hub-net-controller-manager/main.go @@ -42,6 +42,8 @@ import ( "go.goms.io/fleet-networking/pkg/controllers/hub/internalserviceimport" "go.goms.io/fleet-networking/pkg/controllers/hub/membercluster" "go.goms.io/fleet-networking/pkg/controllers/hub/serviceimport" + "go.goms.io/fleet-networking/pkg/controllers/hub/trafficmanagerbackend" + "go.goms.io/fleet-networking/pkg/controllers/hub/trafficmanagerprofile" ) var ( @@ -200,13 +202,33 @@ func main() { cloudConfig.SetUserAgent("fleet-hub-net-controller-manager") klog.V(1).InfoS("Cloud config loaded", "cloudConfig", cloudConfig) - _, _, err = initAzureTrafficManagerClients(cloudConfig) // profilesClient, endpointsClient, err + profilesClient, endpointsClient, err := initAzureTrafficManagerClients(cloudConfig) // profilesClient, endpointsClient, err if err != nil { klog.ErrorS(err, "Unable to create Azure Traffic Manager clients") exitWithErrorFunc() } + klog.V(1).InfoS("Start to setup TrafficManagerProfile controller") + if err := (&trafficmanagerprofile.Reconciler{ + Client: mgr.GetClient(), + ProfilesClient: profilesClient, + ResourceGroupName: cloudConfig.ResourceGroup, + }).SetupWithManager(mgr); err != nil { + klog.ErrorS(err, "Unable to create TrafficManagerProfile controller") + exitWithErrorFunc() + } - // TODO: start the traffic manager controllers + klog.V(1).InfoS("Start to setup TrafficManagerBackend controller") + if err := (&trafficmanagerbackend.Reconciler{ + Client: mgr.GetClient(), + ProfilesClient: profilesClient, + EndpointsClient: endpointsClient, + ResourceGroupName: cloudConfig.ResourceGroup, + // serviceImport controller has already enabled the internalServiceExportIndexer. + // Therefore, no need to setup it again. + }).SetupWithManager(ctx, mgr, true); err != nil { + klog.ErrorS(err, "Unable to create TrafficManagerProfile controller") + exitWithErrorFunc() + } } klog.V(1).InfoS("Starting ServiceExportImport controller manager") diff --git a/config/crd/bases/networking.fleet.azure.com_trafficmanagerbackends.yaml b/config/crd/bases/networking.fleet.azure.com_trafficmanagerbackends.yaml index cd5ffcad..413cecca 100644 --- a/config/crd/bases/networking.fleet.azure.com_trafficmanagerbackends.yaml +++ b/config/crd/bases/networking.fleet.azure.com_trafficmanagerbackends.yaml @@ -22,7 +22,7 @@ spec: - jsonPath: .spec.profile.name name: Profile type: string - - jsonPath: .spec.endpointRef.name + - jsonPath: .spec.backend.name name: Backend type: string - jsonPath: .status.conditions[?(@.type=='Accepted')].status diff --git a/config/rbac/role.yaml b/config/rbac/role.yaml index 3318d032..3d134d88 100644 --- a/config/rbac/role.yaml +++ b/config/rbac/role.yaml @@ -63,6 +63,7 @@ rules: - multiclusterservices - serviceexports - serviceimports + - trafficmanagerbackends - trafficmanagerprofiles verbs: - create @@ -86,6 +87,7 @@ rules: - multiclusterservices/status - serviceexports/status - serviceimports/status + - trafficmanagerbackends/status - trafficmanagerprofiles/status verbs: - get @@ -96,6 +98,7 @@ rules: resources: - multiclusterservices/finalizers - serviceimports/finalizers + - trafficmanagerbackends/finalizers - trafficmanagerprofiles/finalizers verbs: - get diff --git a/go.mod b/go.mod index a81b59f7..724b9382 100644 --- a/go.mod +++ b/go.mod @@ -22,7 +22,7 @@ require ( sigs.k8s.io/controller-runtime v0.19.0 ) -require go.goms.io/fleet v0.11.3 +require go.goms.io/fleet v0.11.4 require ( github.com/Azure/azure-sdk-for-go v68.0.0+incompatible // indirect @@ -36,7 +36,7 @@ require ( github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/privatedns/armprivatedns v1.3.0 // indirect github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resources/armresources v1.2.0 // indirect github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/storage/armstorage v1.6.0 // indirect - github.com/Azure/azure-sdk-for-go/sdk/security/keyvault/azsecrets v1.2.0 // indirect + github.com/Azure/azure-sdk-for-go/sdk/security/keyvault/azsecrets v1.3.0 // indirect github.com/Azure/azure-sdk-for-go/sdk/security/keyvault/internal v1.1.0 // indirect github.com/Azure/go-autorest v14.2.0+incompatible // indirect github.com/Azure/go-autorest/autorest v0.11.29 // indirect @@ -46,7 +46,7 @@ require ( github.com/Azure/go-autorest/autorest/validation v0.3.1 // indirect github.com/Azure/go-autorest/logger v0.2.1 // indirect github.com/Azure/go-autorest/tracing v0.6.0 // indirect - github.com/AzureAD/microsoft-authentication-library-for-go v1.2.2 // indirect + github.com/AzureAD/microsoft-authentication-library-for-go v1.3.1 // indirect github.com/beorn7/perks v1.0.1 // indirect github.com/cespare/xxhash/v2 v2.3.0 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect @@ -61,7 +61,7 @@ require ( github.com/go-openapi/swag v0.23.0 // indirect github.com/go-task/slim-sprig/v3 v3.0.0 // indirect github.com/gogo/protobuf v1.3.2 // indirect - github.com/golang-jwt/jwt/v4 v4.5.0 // indirect + github.com/golang-jwt/jwt/v4 v4.5.1 // indirect github.com/golang-jwt/jwt/v5 v5.2.1 // indirect github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect github.com/golang/protobuf v1.5.4 // indirect diff --git a/go.sum b/go.sum index 6ad30a0a..5990ca73 100644 --- a/go.sum +++ b/go.sum @@ -34,8 +34,8 @@ github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/storage/armstorage v1.6.0 github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/storage/armstorage v1.6.0/go.mod h1:oDrbWx4ewMylP7xHivfgixbfGBT6APAwsSoHRKotnIc= github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/trafficmanager/armtrafficmanager v1.3.0 h1:e3kTG23M5ps+DjvPolK4dcgohDY8sHsXU7zrdHj1WzY= github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/trafficmanager/armtrafficmanager v1.3.0/go.mod h1:Os5dq8Cvvz97rJauZhZJAfKHN+OEvF/0nVmHzF4aVys= -github.com/Azure/azure-sdk-for-go/sdk/security/keyvault/azsecrets v1.2.0 h1:TkNl6WlpHdZSMt0Zngw8y0c9ZMi3GwmYl0kKNbW9PvU= -github.com/Azure/azure-sdk-for-go/sdk/security/keyvault/azsecrets v1.2.0/go.mod h1:ukmL56lWl275SgNFijuwx0Wv6n6HmzzpPWW4kMoy/wY= +github.com/Azure/azure-sdk-for-go/sdk/security/keyvault/azsecrets v1.3.0 h1:WLUIpeyv04H0RCcQHaA4TNoyrQ39Ox7V+re+iaqzTe0= +github.com/Azure/azure-sdk-for-go/sdk/security/keyvault/azsecrets v1.3.0/go.mod h1:hd8hTTIY3VmUVPRHNH7GVCHO3SHgXkJKZHReby/bnUQ= github.com/Azure/azure-sdk-for-go/sdk/security/keyvault/internal v1.1.0 h1:eXnN9kaS8TiDwXjoie3hMRLuwdUBUMW9KRgOqB3mCaw= github.com/Azure/azure-sdk-for-go/sdk/security/keyvault/internal v1.1.0/go.mod h1:XIpam8wumeZ5rVMuhdDQLMfIPDf1WO3IzrCRO3e3e3o= github.com/Azure/go-autorest v14.2.0+incompatible h1:V5VMDjClD3GiElqLWO7mz2MxNAK/vTfRHdAubSIPRgs= @@ -62,8 +62,8 @@ github.com/Azure/k8s-work-api v0.5.0 h1:DVOBt68NFTEVVV+vzz82WdTm4lroXuMd9ktfrfb/ github.com/Azure/k8s-work-api v0.5.0/go.mod h1:CQiDOlNvMeKvGVer80PtvbW9X1cXq7EID9aMXyxkqPU= github.com/AzureAD/microsoft-authentication-extensions-for-go/cache v0.1.1 h1:WJTmL004Abzc5wDB5VtZG2PJk5ndYDgVacGqfirKxjM= github.com/AzureAD/microsoft-authentication-extensions-for-go/cache v0.1.1/go.mod h1:tCcJZ0uHAmvjsVYzEFivsRTN00oz5BEsRgQHu5JZ9WE= -github.com/AzureAD/microsoft-authentication-library-for-go v1.2.2 h1:XHOnouVk1mxXfQidrMEnLlPk9UMeRtyBTnEFtxkV0kU= -github.com/AzureAD/microsoft-authentication-library-for-go v1.2.2/go.mod h1:wP83P5OoQ5p6ip3ScPr0BAq0BvuPAvacpEuSzyouqAI= +github.com/AzureAD/microsoft-authentication-library-for-go v1.3.1 h1:gUDtaZk8heteyfdmv+pcfHvhR9llnh7c7GMwZ8RVG04= +github.com/AzureAD/microsoft-authentication-library-for-go v1.3.1/go.mod h1:wP83P5OoQ5p6ip3ScPr0BAq0BvuPAvacpEuSzyouqAI= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs= @@ -101,8 +101,9 @@ github.com/go-task/slim-sprig/v3 v3.0.0/go.mod h1:W848ghGpv3Qj3dhTPRyJypKRiqCdHZ github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= github.com/golang-jwt/jwt/v4 v4.0.0/go.mod h1:/xlHOz8bRuivTWchD4jCa+NbatV+wEUSzwAxVc6locg= -github.com/golang-jwt/jwt/v4 v4.5.0 h1:7cYmW1XlMY7h7ii7UhUyChSgS5wUJEnm9uZVTGqOWzg= github.com/golang-jwt/jwt/v4 v4.5.0/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0= +github.com/golang-jwt/jwt/v4 v4.5.1 h1:JdqV9zKUdtaa9gdPlywC3aeoEsR681PlKC+4F5gQgeo= +github.com/golang-jwt/jwt/v4 v4.5.1/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0= github.com/golang-jwt/jwt/v5 v5.2.1 h1:OuVbFODueb089Lh128TAcimifWaLhJwVflnrgM17wHk= github.com/golang-jwt/jwt/v5 v5.2.1/go.mod h1:pqrtFR0X4osieyHYxtmOUWsAWrfe1Q5UVIyoH402zdk= github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE= @@ -189,8 +190,8 @@ github.com/x448/float16 v0.8.4/go.mod h1:14CWIYCyZA/cWjXOioeEpHeN/83MdbZDRQHoFcY github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= -go.goms.io/fleet v0.11.3 h1:G4akagX4mRPWH2kPOIBTz0y092BhIU7UUiKCF7Aaw1k= -go.goms.io/fleet v0.11.3/go.mod h1:8A7mAC8R+ivt2XikOGCiaZnUAWbG4DxPBGnxV9+VmGQ= +go.goms.io/fleet v0.11.4 h1:qiGaQGAlssmHJ9WExhEeIZ/fHtYCYJ1NffDlna+OTYk= +go.goms.io/fleet v0.11.4/go.mod h1:p7OKL5BHoWHkkQZa8nWOh+OW6ywnIxFTX/rjjoR3jnE= go.opentelemetry.io/otel v1.31.0 h1:NsJcKPIW0D0H3NgzPDHmo0WW6SptzPdqg/L1zsIm2hY= go.opentelemetry.io/otel v1.31.0/go.mod h1:O0C14Yl9FgkjqcCZAsE053C13OaddMYr/hz6clDkEJE= go.opentelemetry.io/otel/metric v1.31.0 h1:FSErL0ATQAmYHUIzSezZibnyVlft1ybhy4ozRPcF2fE= diff --git a/pkg/common/objectmeta/objectmeta.go b/pkg/common/objectmeta/objectmeta.go index 9b79a10e..ca491b7f 100644 --- a/pkg/common/objectmeta/objectmeta.go +++ b/pkg/common/objectmeta/objectmeta.go @@ -6,6 +6,8 @@ Licensed under the MIT license. // Package objectmeta defines shared meta const used by the networking objects. package objectmeta +import "strings" + const ( fleetNetworkingPrefix = "networking.fleet.azure.com/" ) @@ -52,7 +54,8 @@ const ( ) // Azure Resource Tags -const ( +var ( // AzureTrafficManagerProfileTagKey is the key of the Azure Traffic Manager profile tag when the controller creates it. - AzureTrafficManagerProfileTagKey = fleetNetworkingPrefix + "trafficManagerProfile" + // Note: The tag name cannot have reserved characters '<,>,%,&,\\,?,/' or control characters. + AzureTrafficManagerProfileTagKey = strings.ReplaceAll(fleetNetworkingPrefix, "/", ".") + "trafficManagerProfile" ) diff --git a/pkg/common/objectmeta/objectmeta_test.go b/pkg/common/objectmeta/objectmeta_test.go new file mode 100644 index 00000000..c777e0f6 --- /dev/null +++ b/pkg/common/objectmeta/objectmeta_test.go @@ -0,0 +1,15 @@ +/* +Copyright (c) Microsoft Corporation. +Licensed under the MIT license. +*/ + +package objectmeta + +import "testing" + +func TestAzureTrafficManagerProfileTagKey(t *testing.T) { + want := "networking.fleet.azure.com.trafficManagerProfile" + if got := AzureTrafficManagerProfileTagKey; got != want { + t.Errorf("AzureTrafficManagerProfileTagKey = %v, want %v", got, want) + } +} diff --git a/pkg/controllers/hub/membercluster/suite_test.go b/pkg/controllers/hub/membercluster/suite_test.go index 38825788..1b06aa12 100644 --- a/pkg/controllers/hub/membercluster/suite_test.go +++ b/pkg/controllers/hub/membercluster/suite_test.go @@ -55,7 +55,7 @@ var _ = BeforeSuite(func() { CRDDirectoryPaths: []string{ filepath.Join("..", "..", "..", "..", "config", "crd", "bases"), // The package name must match with the version of the fleet package in use. - filepath.Join(build.Default.GOPATH, "pkg", "mod", "go.goms.io", "fleet@v0.11.3", "config", "crd", "bases", "cluster.kubernetes-fleet.io_memberclusters.yaml"), + filepath.Join(build.Default.GOPATH, "pkg", "mod", "go.goms.io", "fleet@v0.11.4", "config", "crd", "bases", "cluster.kubernetes-fleet.io_memberclusters.yaml"), }, ErrorIfCRDPathMissing: true, } diff --git a/pkg/controllers/hub/trafficmanagerbackend/controller.go b/pkg/controllers/hub/trafficmanagerbackend/controller.go index 51720818..8a4248ba 100644 --- a/pkg/controllers/hub/trafficmanagerbackend/controller.go +++ b/pkg/controllers/hub/trafficmanagerbackend/controller.go @@ -505,7 +505,7 @@ func generateAzureTrafficManagerEndpoint(backend *fleetnetv1alpha1.TrafficManage endpointName := fmt.Sprintf(AzureResourceEndpointNameFormat, generateAzureTrafficManagerEndpointNamePrefixFunc(backend), backend.Spec.Backend.Name, service.Spec.ServiceReference.ClusterID) return armtrafficmanager.Endpoint{ Name: &endpointName, - Type: ptr.To(string(armtrafficmanager.EndpointTypeAzureEndpoints)), + Type: ptr.To(string("Microsoft.Network/trafficManagerProfiles/" + armtrafficmanager.EndpointTypeAzureEndpoints)), Properties: &armtrafficmanager.EndpointProperties{ TargetResourceID: service.Spec.PublicIPResourceID, EndpointStatus: ptr.To(armtrafficmanager.EndpointStatusEnabled), @@ -611,7 +611,7 @@ func (r *Reconciler) updateTrafficManagerEndpointsAndUpdateStatusIfUnknown(ctx c } // SetupWithManager sets up the controller with the Manager. -func (r *Reconciler) SetupWithManager(ctx context.Context, mgr ctrl.Manager) error { +func (r *Reconciler) SetupWithManager(ctx context.Context, mgr ctrl.Manager, disableInternalServiceExportIndexer bool) error { // set up an index for efficient trafficManagerBackend lookup profileIndexerFunc := func(o client.Object) []string { tmb, ok := o.(*fleetnetv1alpha1.TrafficManagerBackend) @@ -638,16 +638,18 @@ func (r *Reconciler) SetupWithManager(ctx context.Context, mgr ctrl.Manager) err } // add index to quickly query internalServiceExport list by service - internalServiceExportIndexerFunc := func(o client.Object) []string { - name, ok := o.(*fleetnetv1alpha1.InternalServiceExport) - if !ok { - return []string{} + if !disableInternalServiceExportIndexer { + internalServiceExportIndexerFunc := func(o client.Object) []string { + name, ok := o.(*fleetnetv1alpha1.InternalServiceExport) + if !ok { + return []string{} + } + return []string{name.Spec.ServiceReference.NamespacedName} + } + if err := mgr.GetFieldIndexer().IndexField(ctx, &fleetnetv1alpha1.InternalServiceExport{}, exportedServiceFieldNamespacedName, internalServiceExportIndexerFunc); err != nil { + klog.ErrorS(err, "Failed to create index", "field", exportedServiceFieldNamespacedName) + return err } - return []string{name.Spec.ServiceReference.NamespacedName} - } - if err := mgr.GetFieldIndexer().IndexField(ctx, &fleetnetv1alpha1.InternalServiceExport{}, exportedServiceFieldNamespacedName, internalServiceExportIndexerFunc); err != nil { - klog.ErrorS(err, "Failed to create index", "field", exportedServiceFieldNamespacedName) - return err } return ctrl.NewControllerManagedBy(mgr). diff --git a/pkg/controllers/hub/trafficmanagerbackend/suite_test.go b/pkg/controllers/hub/trafficmanagerbackend/suite_test.go index e7e68c18..226dcec1 100644 --- a/pkg/controllers/hub/trafficmanagerbackend/suite_test.go +++ b/pkg/controllers/hub/trafficmanagerbackend/suite_test.go @@ -279,7 +279,7 @@ var _ = BeforeSuite(func() { ProfilesClient: profileClient, EndpointsClient: endpointClient, ResourceGroupName: fakeprovider.DefaultResourceGroupName, - }).SetupWithManager(ctx, mgr) + }).SetupWithManager(ctx, mgr, false) Expect(err).ToNot(HaveOccurred()) By("Create profile namespace") diff --git a/pkg/controllers/member/internalmembercluster/v1alpha1/suite_test.go b/pkg/controllers/member/internalmembercluster/v1alpha1/suite_test.go index 40d16a29..43a3c110 100644 --- a/pkg/controllers/member/internalmembercluster/v1alpha1/suite_test.go +++ b/pkg/controllers/member/internalmembercluster/v1alpha1/suite_test.go @@ -83,7 +83,7 @@ var _ = BeforeSuite(func() { filepath.Join("../../../../../", "config", "crd", "bases"), // need to make sure the version matches the one in the go.mod // workaround mentioned in https://github.com/kubernetes-sigs/controller-runtime/issues/1191 - filepath.Join(build.Default.GOPATH, "pkg", "mod", "go.goms.io", "fleet@v0.11.3", "config", "crd", "bases"), + filepath.Join(build.Default.GOPATH, "pkg", "mod", "go.goms.io", "fleet@v0.11.4", "config", "crd", "bases"), }, ErrorIfCRDPathMissing: true, } diff --git a/pkg/controllers/member/internalmembercluster/v1beta1/suite_test.go b/pkg/controllers/member/internalmembercluster/v1beta1/suite_test.go index d55abbfa..3becd8f3 100644 --- a/pkg/controllers/member/internalmembercluster/v1beta1/suite_test.go +++ b/pkg/controllers/member/internalmembercluster/v1beta1/suite_test.go @@ -83,7 +83,7 @@ var _ = BeforeSuite(func() { CRDDirectoryPaths: []string{ filepath.Join("..", "..", "..", "..", "..", "config", "crd", "bases"), // The package name must match with the version of the fleet package in use. - filepath.Join(build.Default.GOPATH, "pkg", "mod", "go.goms.io", "fleet@v0.11.3", "config", "crd", "bases"), + filepath.Join(build.Default.GOPATH, "pkg", "mod", "go.goms.io", "fleet@v0.11.4", "config", "crd", "bases"), }, ErrorIfCRDPathMissing: true, diff --git a/test/common/trafficmanager/fakeprovider/endpoint.go b/test/common/trafficmanager/fakeprovider/endpoint.go index 3d76079b..2f9e022c 100644 --- a/test/common/trafficmanager/fakeprovider/endpoint.go +++ b/test/common/trafficmanager/fakeprovider/endpoint.go @@ -92,7 +92,7 @@ func EndpointCreateOrUpdate(_ context.Context, resourceGroupName string, profile Weight: ptr.To(Weight), Target: ptr.To(ValidEndpointTarget), }, - Type: ptr.To(string(armtrafficmanager.EndpointTypeAzureEndpoints)), + Type: ptr.To(string(azureTrafficManagerEndpointTypePrefix + armtrafficmanager.EndpointTypeAzureEndpoints)), }, } resp.SetResponse(http.StatusOK, endpointResp, nil) diff --git a/test/common/trafficmanager/fakeprovider/profile.go b/test/common/trafficmanager/fakeprovider/profile.go index 305d15f9..61d7c71d 100644 --- a/test/common/trafficmanager/fakeprovider/profile.go +++ b/test/common/trafficmanager/fakeprovider/profile.go @@ -41,10 +41,9 @@ const ( CreateBadRequestErrEndpointClusterName = "create-bad-request-endpoint-cluster" CreateInternalServerErrEndpointClusterName = "create-internal-err-endpoint-cluster" - ProfileDNSNameFormat = "%s.trafficmanager.net" -) + ProfileDNSNameFormat = "%s.trafficmanager.net" + azureTrafficManagerEndpointTypePrefix = "Microsoft.Network/trafficManagerProfiles/" -const ( ProfileNamespace = "profile-ns" // so that the atm profile is predictable ) @@ -119,7 +118,7 @@ func ProfileGet(_ context.Context, resourceGroupName string, profileName string, TargetResourceID: ptr.To(ValidPublicIPResourceID), Weight: ptr.To(Weight), }, - Type: ptr.To(string(armtrafficmanager.EndpointTypeAzureEndpoints)), + Type: ptr.To(string(azureTrafficManagerEndpointTypePrefix + armtrafficmanager.EndpointTypeAzureEndpoints)), }, { Name: ptr.To("other-endpoint"), diff --git a/test/scripts/bootstrap.sh b/test/scripts/bootstrap.sh index 20e36253..4a1cf76a 100644 --- a/test/scripts/bootstrap.sh +++ b/test/scripts/bootstrap.sh @@ -168,7 +168,7 @@ fi kubectl config use-context $HUB_CLUSTER-admin # need to make sure the version matches the one in the go.mod # workaround mentioned in https://github.com/kubernetes-sigs/controller-runtime/issues/1191 -kubectl apply -f `go env GOPATH`/pkg/mod/go.goms.io/fleet@v0.11.3/config/crd/bases/cluster.kubernetes-fleet.io_internalmemberclusters.yaml +kubectl apply -f `go env GOPATH`/pkg/mod/go.goms.io/fleet@v0.11.4/config/crd/bases/cluster.kubernetes-fleet.io_internalmemberclusters.yaml kubectl apply -f config/crd/* helm install hub-net-controller-manager \ ./charts/hub-net-controller-manager/ \ From e73a06d2e666caa6dc506f1ee56cd90c03138cbf Mon Sep 17 00:00:00 2001 From: Zhiying Lin <54013513+zhiying-lin@users.noreply.github.com> Date: Sat, 23 Nov 2024 02:52:27 +0800 Subject: [PATCH 23/66] docs: add application migration tutorials (#222) doc --- .../ApplicationMigration.md | 411 ++++++++++++++++++ .../ApplicationMigration/after-migrate.png | Bin 0 -> 209314 bytes .../ApplicationMigration/before-migrate.png | Bin 0 -> 229591 bytes .../ApplicationMigration/during-migrate.png | Bin 0 -> 434369 bytes .../testfiles/crp-availability.yaml | 13 + .../testfiles/envelop-object.yaml | 29 ++ .../testfiles/member-cluster-2.yaml | 11 + .../testfiles/nginx-backend-2.yaml | 11 + .../testfiles/nginx-backend.yaml | 11 + .../testfiles/nginx-profile.yaml | 8 + .../testfiles/nginx-service-2.yaml | 19 + .../testfiles/nginx-service.yaml | 19 + .../testfiles/ro-nginx-service-2.yaml | 23 + .../testfiles/ro-nginx-service.yaml | 23 + 14 files changed, 578 insertions(+) create mode 100644 docs/tutorials/ApplicationMigration/ApplicationMigration.md create mode 100644 docs/tutorials/ApplicationMigration/after-migrate.png create mode 100644 docs/tutorials/ApplicationMigration/before-migrate.png create mode 100644 docs/tutorials/ApplicationMigration/during-migrate.png create mode 100644 docs/tutorials/ApplicationMigration/testfiles/crp-availability.yaml create mode 100644 docs/tutorials/ApplicationMigration/testfiles/envelop-object.yaml create mode 100644 docs/tutorials/ApplicationMigration/testfiles/member-cluster-2.yaml create mode 100644 docs/tutorials/ApplicationMigration/testfiles/nginx-backend-2.yaml create mode 100644 docs/tutorials/ApplicationMigration/testfiles/nginx-backend.yaml create mode 100644 docs/tutorials/ApplicationMigration/testfiles/nginx-profile.yaml create mode 100644 docs/tutorials/ApplicationMigration/testfiles/nginx-service-2.yaml create mode 100644 docs/tutorials/ApplicationMigration/testfiles/nginx-service.yaml create mode 100644 docs/tutorials/ApplicationMigration/testfiles/ro-nginx-service-2.yaml create mode 100644 docs/tutorials/ApplicationMigration/testfiles/ro-nginx-service.yaml diff --git a/docs/tutorials/ApplicationMigration/ApplicationMigration.md b/docs/tutorials/ApplicationMigration/ApplicationMigration.md new file mode 100644 index 00000000..4d78a91a --- /dev/null +++ b/docs/tutorials/ApplicationMigration/ApplicationMigration.md @@ -0,0 +1,411 @@ +# Tutorial: Migrating Application Resources to Clusters without Downtime + +This tutorial will guide you through the process of migrating application resources to a new cluster without any downtime using [KubeFleet](https://github.com/Azure/fleet) and networking related features. +This is useful when you need to migrate resources to a new cluster for any reason, such as upgrading the cluster version or moving to a different region. + +## Scenario +Your fleet consists of the following clusters: + +1. Member Cluster 1 with label "cluster-name: member-1" + +You have a set of application resources running on Member Cluster 1 that you want to migrate to Member Cluster 2. +Meanwhile, you want to ensure that the application remains available and accessible during the migration process. + +## Current Application Resources +![](before-migrate.png) + +The following resources are currently deployed in the hub cluster and use clusterResourcePlacement API to place them to the Member Cluster 1: + +### Service +> Note: Service test file located [here](./testfiles/nginx-service.yaml). + +```yaml +apiVersion: v1 +kind: Service +metadata: + name: nginx-service + namespace: test-app +spec: + selector: + app: nginx + ports: + - protocol: TCP + port: 80 + targetPort: 80 + type: LoadBalancer +--- +apiVersion: networking.fleet.azure.com/v1alpha1 +kind: ServiceExport +metadata: + name: nginx-service + namespace: test-app +``` +The service is exposed using public IP and assigned a DNS name using [ro-nginx-service.yaml](./testfiles/ro-nginx-service.yaml) +and is visible to the fleet by creating ServiceExport. + +```yaml +apiVersion: placement.kubernetes-fleet.io/v1alpha1 +kind: ResourceOverride +metadata: + name: ro-nginx-service + namespace: test-app +spec: + resourceSelectors: + - group: "" + kind: Service + version: v1 + name: nginx-service + policy: + overrideRules: + - clusterSelector: + clusterSelectorTerms: + - labelSelector: + matchLabels: + cluster-name: member-1 + jsonPatchOverrides: + - op: add + path: /metadata/annotations + value: + {"service.beta.kubernetes.io/azure-dns-label-name":"fleet-test-member-1"} +``` +Summary: +- This defines a Kubernetes Service named `nginx-service` in the `test-app` namespace. +- The service is of type LoadBalancer with a public ip address and a DNS name assigned. +- It targets pods with the label app: nginx and forwards traffic to port 80 on the pods. + +#### Deployment + +> Note: Deployment test file located [here](./testfiles/envelop-object.yaml). + +```yaml +apiVersion: v1 +kind: ConfigMap +metadata: + name: envelope-configmap + namespace: test-app + annotations: + kubernetes-fleet.io/envelope-configmap: "true" +data: + nginx-deployment.yaml: | + apiVersion: apps/v1 + kind: Deployment + metadata: + name: nginx-deployment + namespace: test-app + spec: + replicas: 2 + selector: + matchLabels: + app: nginx + template: + metadata: + labels: + app: nginx + spec: + containers: + - name: nginx + image: nginx:1.16.1 + ports: + - containerPort: 80 +``` +> Note: The current deployment has 2 replicas. + +Summary: +- This defines a Kubernetes Deployment named `nginx-deployment` in the `test-app` namespace using envelop object wrapper, so that +it won't create workloads in the hub cluster. +- It creates 2 replicas of the nginx pod, each running the `nginx:1.16.1` image. +- The deployment ensures that the specified number of pods (replicas) are running and available. +- The pods are labeled with `app: nginx` and expose port 80. + +#### ClusterResourcePlacement + +> Note: CRP Availability test file located [here](./testfiles/crp-availability.yaml) + +```yaml +apiVersion: placement.kubernetes-fleet.io/v1 +kind: ClusterResourcePlacement +metadata: + name: crp-availability +spec: + resourceSelectors: + - group: "" + kind: Namespace + name: test-app + version: v1 + policy: + placementType: PickAll +``` + +Summary: +- This defines a ClusterResourcePlacement named `crp-availability`. +- The placement policy selects all the existing cluster, member-1. +- It targets resources in the `test-app` namespace. + +### TrafficManagerProfile + +To expose the service via Traffic Manager, you need to create a trafficManagerProfile resource in the `test-app` namespace. + +> Note: Profile test file located [here](./testfiles/nginx-profile.yaml) and please make sure the profile name (be part of the DNS name) is global unique. + +```yaml +apiVersion: networking.fleet.azure.com/v1alpha1 +kind: TrafficManagerProfile +metadata: + name: nginx-profile + namespace: test-app +spec: + monitorConfig: + port: 80 +``` +Summary: +- This defines a Traffic Manager Profile named `nginx-profile` in the `test-app` namespace. +- It listens on the specified port (80) for health checks. + +```bash +kubectl get tmp -n test-app +NAME DNS-NAME IS-PROGRAMMED AGE +nginx-profile test-app-nginx-profile.trafficmanager.net True 6s +``` + +### Exposing the Service as a Traffic Manager Endpoint + +> Note: nginx-backend file located [here](./testfiles/nginx-backend.yaml) + +```yaml +apiVersion: networking.fleet.azure.com/v1alpha1 +kind: TrafficManagerBackend +metadata: + name: nginx-backend + namespace: test-app +spec: + profile: + name: "nginx-profile" + backend: + name: "nginx-service" + weight: 100 +``` +Summary: +- It defines a Traffic Manager Backend named `nginx-backend` in the `test-app` namespace. +- The weight is set to 100, which means all traffic is routed to this backend. + +## Migrating Application Resources To Member Cluster 2 + +![](during-migrate.png) + + +To migrate the application resources to the new cluster, you need to add the new cluster Member Cluster 2 with label "cluster-name: member-2" +as part of the fleet by installing fleet agents and creating MemberCluster API ([sample MemberCluster](./testfiles/member-cluster-2.yaml)) following [this document](https://github.com/Azure/fleet/blob/main/docs/howtos/clusters.md). + +```bash +kubectl get membercluster -l cluster-name=member-2 +NAME JOINED AGE MEMBER-AGENT-LAST-SEEN NODE-COUNT AVAILABLE-CPU AVAILABLE-MEMORY +member-2 True 16h 38s 2 1848m 10318332Ki +``` + +### Validate the TrafficManagerBackend nginx-backend + +Before migrating the resources, you need to validate the TrafficManagerBackend resource `nginx-backend` to ensure that the traffic is being routed to the correct cluster. + +```bash +kubectl get tmb nginx-backend -n test-app -o yaml + +apiVersion: networking.fleet.azure.com/v1alpha1 +kind: TrafficManagerBackend +metadata: + annotations: + kubectl.kubernetes.io/last-applied-configuration: | + {"apiVersion":"networking.fleet.azure.com/v1alpha1","kind":"TrafficManagerBackend","metadata":{"annotations":{},"name":"nginx-backend","namespace":"test-app"},"spec":{"backend":{"name":"nginx-service"},"profile":{"name":"nginx-profile"},"weight":100}} + creationTimestamp: "2024-11-21T05:29:59Z" + finalizers: + - networking.fleet.azure.com/traffic-manager-backend-cleanup + generation: 1 + name: nginx-backend + namespace: test-app + resourceVersion: "1240027" + uid: 073a01e7-6f07-49c9-abce-8ce14748984e +spec: + backend: + name: nginx-service + profile: + name: nginx-profile + weight: 100 +status: + conditions: + - lastTransitionTime: "2024-11-21T05:32:28Z" + message: '1 service(s) exported from clusters cannot be exposed as the Azure Traffic + Manager, for example, service exported from member-2 is invalid: DNS label is + not configured to the public IP' + observedGeneration: 1 + reason: Invalid + status: "False" + type: Accepted + endpoints: + - cluster: + cluster: member-1 + name: fleet-073a01e7-6f07-49c9-abce-8ce14748984e#nginx-service#member-1 + target: fleet-test-member-1.westcentralus.cloudapp.azure.com + weight: 100 +``` +Summary: +- Since we have not assigned a DNS label for the nginx-service created in the member-2 cluster, the traffic cannot be routed +to the member-2. +- The traffic is currently being routed to the nginx-service in Member Cluster 1 only. + +### Exposing The deployment In Member Cluster 2 Using Different Service Name + +The nginx deployment in Member Cluster 2 will be exposed using a different service name `nginx-service-2` with a different DNS name. All the traffic will be routed via the new Service `nginx-service-2` in Member Cluster 2 instead of `nginx-service`. + +#### Create ro-nginx-service-2 Override +> Note: override file located [here,](./testfiles/ro-nginx-service-2.yaml) and it should be created before the new service. +> So that the overrides can be applied to these resources. + +```yaml +apiVersion: placement.kubernetes-fleet.io/v1alpha1 +kind: ResourceOverride +metadata: + name: ro-nginx-service + namespace: test-app +spec: + resourceSelectors: + - group: "" + kind: Service + version: v1 + name: nginx-service-2 + policy: + overrideRules: + - clusterSelector: + clusterSelectorTerms: + - labelSelector: + matchLabels: + cluster-name: member-2 + jsonPatchOverrides: + - op: add + path: /metadata/annotations + value: + {"service.beta.kubernetes.io/azure-dns-label-name":"fleet-test-member-2"} +``` +Summary: +- It adds a DNS label for Member Cluster 2 so that the service can be added as Traffic Manager Endpoint. + +#### New Service for Member Cluster 2 +> Note: service file located [here](./testfiles/nginx-service-2.yaml) + +```yaml +apiVersion: v1 +kind: Service +metadata: + name: nginx-service-2 + namespace: test-app +spec: + selector: + app: nginx + ports: + - protocol: TCP + port: 80 + targetPort: 80 + type: LoadBalancer +--- +apiVersion: networking.fleet.azure.com/v1alpha1 +kind: ServiceExport +metadata: + name: nginx-service-2 + namespace: test-app +``` +Summary: +- Create another service named `nginx-service-2` in the `test-app` namespace. + +#### Exposing the New Service as a Traffic Manager Endpoint using TrafficManagerBackend + +When the new resources are available in the member-cluster by checking the CRP status, you can create a TrafficManagerBackend resource to expose the new service as a Traffic Manager endpoint. + +> Note: nginx-backend-2 file located [here](./testfiles/nginx-backend-2.yaml) + +```yaml +apiVersion: networking.fleet.azure.com/v1alpha1 +kind: TrafficManagerBackend +metadata: + name: nginx-backend-2 + namespace: test-app +spec: + profile: + name: "nginx-profile" + backend: + name: "nginx-service-2" + weight: 100 +``` + +```bash +kubectl get tmb nginx-backend-2 -n test-app -o yaml +apiVersion: networking.fleet.azure.com/v1alpha1 +kind: TrafficManagerBackend +metadata: + annotations: + kubectl.kubernetes.io/last-applied-configuration: | + {"apiVersion":"networking.fleet.azure.com/v1alpha1","kind":"TrafficManagerBackend","metadata":{"annotations":{},"name":"nginx-backend-2","namespace":"test-app"},"spec":{"backend":{"name":"nginx-service-2"},"profile":{"name":"nginx-profile"},"weight":100}} + creationTimestamp: "2024-11-21T05:44:33Z" + finalizers: + - networking.fleet.azure.com/traffic-manager-backend-cleanup + generation: 1 + name: nginx-backend-2 + namespace: test-app + resourceVersion: "1244573" + uid: 9bd86bd4-c0d8-4303-a7f9-f20122b18abc +spec: + backend: + name: nginx-service-2 + profile: + name: nginx-profile + weight: 100 +status: + conditions: + - lastTransitionTime: "2024-11-21T05:44:35Z" + message: '1 service(s) exported from clusters cannot be exposed as the Azure Traffic + Manager, for example, service exported from member-1 is invalid: DNS label is + not configured to the public IP' + observedGeneration: 1 + reason: Invalid + status: "False" + type: Accepted + endpoints: + - cluster: + cluster: member-2 + name: fleet-9bd86bd4-c0d8-4303-a7f9-f20122b18abc#nginx-service-2#member-2 + target: fleet-test-member-2.westcentralus.cloudapp.azure.com + weight: 100 +``` + +Summary: +- Similar to the previous TrafficManagerBackend resource, this one routes all traffic to the new service `nginx-service-2` in Member Cluster 2 since the new service +of member-1 cannot be added as the Traffic Manager endpoint. +- Now nginx-profile has two backends now. Each backend has a weight of 100, which means all traffic will be evenly distributed to these two clusters. +- Adjusting the weight of the backends will allow you to control the traffic distribution between the two clusters. + +#### Stop Serving Traffic from Member Cluster 1 + +![](after-migrate.png) + + +After the new service is up and running in Member Cluster 2, you can stop serving traffic from Member Cluster 1 by removing the TrafficManagerBackend resource. + +> Note: Existing client/application may still connect to member cluster 1 caused by a stale DNS query. + +```bash +kubectl delete trafficmanagerbackend nginx-backend -n test-app +``` + +Make sure all the client DNS cache is reset before you mark the Member Cluster 1 as left, so that all the placed resources will be deleted from the cluster. + +```bash +kubectl delete membercluster member-1 +``` + +Lastly, clean up the old service and service export resources in member-2 by deleting them in the hub cluster, so that CRP will roll out these changes to the member-2. + +```bash +kubectl delete serviceexport nginx-service -n test-app +kubectl delete service nginx-service -n test-app +``` + +## Conclusion +This tutorial demonstrated how to migrate applications and shifting the traffic using fleet from one cluster to another by using +clusterResourcePlacement, resourceOverrides, trafficManagerProfile and trafficManagerBackend APIs without any downtime. diff --git a/docs/tutorials/ApplicationMigration/after-migrate.png b/docs/tutorials/ApplicationMigration/after-migrate.png new file mode 100644 index 0000000000000000000000000000000000000000..f0ea88993141675e2ee1bb1112c76647282c62f0 GIT binary patch literal 209314 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

IoVNkLe|9c%(~ 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 literal 0 HcmV?d00001 diff --git a/docs/tutorials/ApplicationMigration/before-migrate.png b/docs/tutorials/ApplicationMigration/before-migrate.png new file mode 100644 index 0000000000000000000000000000000000000000..71e417e9864fb9d41f9603529ce4f1e194b275ef GIT binary patch literal 229591 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

-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

+vJ?L|GP)$tR-`7o^NS9vh_PW)Yr+jyagjlfU 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 literal 0 HcmV?d00001 diff --git a/docs/tutorials/ApplicationMigration/during-migrate.png b/docs/tutorials/ApplicationMigration/during-migrate.png new file mode 100644 index 0000000000000000000000000000000000000000..d07ceee45b382cfbe170af96f5015487e3431a9b GIT binary patch literal 434369 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 vF;Wut{ro}3{83`sO@ra{e3`=G`C7mruZ-#?hf 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≪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 krx1K^9lXU6b*Gdn7dE%+! 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 Date: Wed, 27 Nov 2024 11:24:14 +0800 Subject: [PATCH 24/66] fix: requeue the request when the dns is not assigned (#225) fix: requeue the request when the dns is not assigned --- pkg/common/objectmeta/objectmeta.go | 6 + .../member/serviceexport/controller.go | 22 ++ .../member/serviceexport/controller_test.go | 188 +++++++++++++++++- 3 files changed, 214 insertions(+), 2 deletions(-) diff --git a/pkg/common/objectmeta/objectmeta.go b/pkg/common/objectmeta/objectmeta.go index ca491b7f..bda56a2f 100644 --- a/pkg/common/objectmeta/objectmeta.go +++ b/pkg/common/objectmeta/objectmeta.go @@ -51,6 +51,12 @@ const ( // ServiceAnnotationLoadBalancerResourceGroup is the annotation used on the service to specify the resource group of // load balancer objects that are not in the same resource group as the cluster. ServiceAnnotationLoadBalancerResourceGroup = "service.beta.kubernetes.io/azure-load-balancer-resource-group" + + // ServiceAnnotationAzureDNSLabelName is the annotation used on the service to Specify the DNS label name for the + // service’s public IP address (PIP). If it is set to empty string, DNS in PIP would be deleted. Because of a bug, + // before v1.15.10/v1.16.7/v1.17.3, the DNS label on PIP would also be deleted if the annotation is not specified. + // https://cloud-provider-azure.sigs.k8s.io/topics/loadbalancer/ + ServiceAnnotationAzureDNSLabelName = "service.beta.kubernetes.io/azure-dns-label-name" ) // Azure Resource Tags diff --git a/pkg/controllers/member/serviceexport/controller.go b/pkg/controllers/member/serviceexport/controller.go index acfdf82d..f61f51b1 100644 --- a/pkg/controllers/member/serviceexport/controller.go +++ b/pkg/controllers/member/serviceexport/controller.go @@ -312,13 +312,35 @@ func (r *Reconciler) setAzureRelatedInformation(ctx context.Context, service *co return nil } export.Spec.PublicIPResourceID = pip.ID + // Note the user can set the dns label via the Azure portal or Azure CLI without updating service. // This information may be stale as we don't monitor the public IP address resource. export.Spec.IsDNSLabelConfigured = pip.Properties != nil && pip.Properties.DNSSettings != nil && pip.Properties.DNSSettings.DomainNameLabel != nil + + // No matter if the customer bring your own IP or not, the cloud provider will reconcile the DNS label based on the + // DNS annotation. + dnsName, found := service.Annotations[objectmeta.ServiceAnnotationAzureDNSLabelName] + klog.V(2).InfoS("Finding whether the DNS is assigned", "service", serviceKObj, "dnsName", dnsName, "isSetOnService", found, "isConfiguredOnPIP", export.Spec.IsDNSLabelConfigured) + // If the annotation is not set, the cloud provider won't reconcile the DNS label and return the current status. + if !found { + // cloud provider won't delete DNS label on pip if the annotation is not set. + return nil + } + if len(dnsName) == 0 { + export.Spec.IsDNSLabelConfigured = false // cloud provider will delete the DNS label on the pip. + return nil + } + if !export.Spec.IsDNSLabelConfigured { + err = fmt.Errorf("in the process of adding DNS to the public ip address %s", *pip.ID) + klog.ErrorS(err, "Requeue the request to see if the DNS is ready or not", "service", serviceKObj) + return err + } return nil } // TODO: can improve the performance by caching the public IP address resource ID. +// Note: we don't support "service.beta.kubernetes.io/azure-pip-prefix-id" annotation, and public ip cannot be found in +// this case. func (r *Reconciler) lookupPublicIPResourceIDByLoadBalancerIP(ctx context.Context, service *corev1.Service) (*armnetwork.PublicIPAddress, error) { // The customer can specify the resource group for the public IP address in the service annotation. rg := strings.TrimSpace(service.Annotations[objectmeta.ServiceAnnotationLoadBalancerResourceGroup]) diff --git a/pkg/controllers/member/serviceexport/controller_test.go b/pkg/controllers/member/serviceexport/controller_test.go index 7bed5dc6..9caac8ed 100644 --- a/pkg/controllers/member/serviceexport/controller_test.go +++ b/pkg/controllers/member/serviceexport/controller_test.go @@ -1001,7 +1001,7 @@ func TestSetAzureRelatedInformation(t *testing.T) { wantErr bool }{ { - name: "load balancer type with public ip", + name: "load balancer type with public ip and dns is assigned to pip", service: &corev1.Service{ ObjectMeta: metav1.ObjectMeta{ UID: "uid", @@ -1049,7 +1049,7 @@ func TestSetAzureRelatedInformation(t *testing.T) { }, }, { - name: "load balancer type with public ip and dns label is not set", + name: "load balancer type with public ip and dns label is not set and dns is not assigned to pip", service: &corev1.Service{ ObjectMeta: metav1.ObjectMeta{ UID: "uid", @@ -1086,6 +1086,190 @@ func TestSetAzureRelatedInformation(t *testing.T) { }, }, }, + { + name: "load balancer type with public ip and dns label and dns label is not assigned in pip", + service: &corev1.Service{ + ObjectMeta: metav1.ObjectMeta{ + UID: "uid", + Annotations: map[string]string{ + objectmeta.ServiceAnnotationLoadBalancerResourceGroup: " ", + objectmeta.ServiceAnnotationAzureLoadBalancerInternal: "True", // case sensitive + objectmeta.ServiceAnnotationAzureDNSLabelName: "dnsLabel", + }, + }, + Spec: corev1.ServiceSpec{ + Type: corev1.ServiceTypeLoadBalancer, + }, + Status: corev1.ServiceStatus{ + LoadBalancer: corev1.LoadBalancerStatus{ + Ingress: []corev1.LoadBalancerIngress{ + { + IP: "1.2.3.4", + }, + }, + }, + }, + }, + publicIPAddressListResponse: []*armnetwork.PublicIPAddress{ + { + Properties: &armnetwork.PublicIPAddressPropertiesFormat{ + DNSSettings: &armnetwork.PublicIPAddressDNSSettings{}, + IPAddress: ptr.To("1.2.3.4"), + }, + ID: ptr.To("/subscriptions/sub1/resourceGroups/rg/providers/Microsoft.Network/publicIPAddresses/pip"), + }, + { + Properties: &armnetwork.PublicIPAddressPropertiesFormat{ + IPAddress: ptr.To("1.2.5.6"), + }, + }, + }, + wantErr: true, + }, + { + name: "load balancer type with public ip and dns label and dns is assigned to pip", + service: &corev1.Service{ + ObjectMeta: metav1.ObjectMeta{ + UID: "uid", + Annotations: map[string]string{ + objectmeta.ServiceAnnotationLoadBalancerResourceGroup: " ", + objectmeta.ServiceAnnotationAzureLoadBalancerInternal: "True", // case sensitive + objectmeta.ServiceAnnotationAzureDNSLabelName: "dnsLabel", + }, + }, + Spec: corev1.ServiceSpec{ + Type: corev1.ServiceTypeLoadBalancer, + }, + Status: corev1.ServiceStatus{ + LoadBalancer: corev1.LoadBalancerStatus{ + Ingress: []corev1.LoadBalancerIngress{ + { + IP: "1.2.3.4", + }, + }, + }, + }, + }, + publicIPAddressListResponse: []*armnetwork.PublicIPAddress{ + { + Properties: &armnetwork.PublicIPAddressPropertiesFormat{ + DNSSettings: &armnetwork.PublicIPAddressDNSSettings{ + DomainNameLabel: ptr.To("dnsLabel"), + }, + IPAddress: ptr.To("1.2.3.4"), + }, + ID: ptr.To("/subscriptions/sub1/resourceGroups/rg/providers/Microsoft.Network/publicIPAddresses/pip"), + }, + { + Properties: &armnetwork.PublicIPAddressPropertiesFormat{ + IPAddress: ptr.To("1.2.5.6"), + }, + }, + }, + want: &fleetnetv1alpha1.InternalServiceExport{ + Spec: fleetnetv1alpha1.InternalServiceExportSpec{ + Type: corev1.ServiceTypeLoadBalancer, + IsDNSLabelConfigured: true, + IsInternalLoadBalancer: false, + PublicIPResourceID: ptr.To("/subscriptions/sub1/resourceGroups/rg/providers/Microsoft.Network/publicIPAddresses/pip"), + }, + }, + }, + { + name: "load balancer type with public ip and empty dns label and dns is assigned to pip", + service: &corev1.Service{ + ObjectMeta: metav1.ObjectMeta{ + UID: "uid", + Annotations: map[string]string{ + objectmeta.ServiceAnnotationLoadBalancerResourceGroup: " ", + objectmeta.ServiceAnnotationAzureLoadBalancerInternal: "True", // case sensitive + objectmeta.ServiceAnnotationAzureDNSLabelName: "", + }, + }, + Spec: corev1.ServiceSpec{ + Type: corev1.ServiceTypeLoadBalancer, + }, + Status: corev1.ServiceStatus{ + LoadBalancer: corev1.LoadBalancerStatus{ + Ingress: []corev1.LoadBalancerIngress{ + { + IP: "1.2.3.4", + }, + }, + }, + }, + }, + publicIPAddressListResponse: []*armnetwork.PublicIPAddress{ + { + Properties: &armnetwork.PublicIPAddressPropertiesFormat{ + DNSSettings: &armnetwork.PublicIPAddressDNSSettings{ + DomainNameLabel: ptr.To("dnsLabel"), + }, + IPAddress: ptr.To("1.2.3.4"), + }, + ID: ptr.To("/subscriptions/sub1/resourceGroups/rg/providers/Microsoft.Network/publicIPAddresses/pip"), + }, + { + Properties: &armnetwork.PublicIPAddressPropertiesFormat{ + IPAddress: ptr.To("1.2.5.6"), + }, + }, + }, + want: &fleetnetv1alpha1.InternalServiceExport{ + Spec: fleetnetv1alpha1.InternalServiceExportSpec{ + Type: corev1.ServiceTypeLoadBalancer, + IsDNSLabelConfigured: false, + IsInternalLoadBalancer: false, + PublicIPResourceID: ptr.To("/subscriptions/sub1/resourceGroups/rg/providers/Microsoft.Network/publicIPAddresses/pip"), + }, + }, + }, + { + name: "load balancer type with public ip and empty dns label and dns is not assigned to pip", + service: &corev1.Service{ + ObjectMeta: metav1.ObjectMeta{ + UID: "uid", + Annotations: map[string]string{ + objectmeta.ServiceAnnotationLoadBalancerResourceGroup: " ", + objectmeta.ServiceAnnotationAzureLoadBalancerInternal: "True", // case sensitive + objectmeta.ServiceAnnotationAzureDNSLabelName: "", + }, + }, + Spec: corev1.ServiceSpec{ + Type: corev1.ServiceTypeLoadBalancer, + }, + Status: corev1.ServiceStatus{ + LoadBalancer: corev1.LoadBalancerStatus{ + Ingress: []corev1.LoadBalancerIngress{ + { + IP: "1.2.3.4", + }, + }, + }, + }, + }, + publicIPAddressListResponse: []*armnetwork.PublicIPAddress{ + { + Properties: &armnetwork.PublicIPAddressPropertiesFormat{ + IPAddress: ptr.To("1.2.3.4"), + }, + ID: ptr.To("/subscriptions/sub1/resourceGroups/rg/providers/Microsoft.Network/publicIPAddresses/pip"), + }, + { + Properties: &armnetwork.PublicIPAddressPropertiesFormat{ + IPAddress: ptr.To("1.2.5.6"), + }, + }, + }, + want: &fleetnetv1alpha1.InternalServiceExport{ + Spec: fleetnetv1alpha1.InternalServiceExportSpec{ + Type: corev1.ServiceTypeLoadBalancer, + IsDNSLabelConfigured: false, + IsInternalLoadBalancer: false, + PublicIPResourceID: ptr.To("/subscriptions/sub1/resourceGroups/rg/providers/Microsoft.Network/publicIPAddresses/pip"), + }, + }, + }, { name: "load balancer type with internal ip", service: &corev1.Service{ From e9e8a850ac9667923c8fb2642f71c9ff1af650ed Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 2 Dec 2024 11:19:06 +0800 Subject: [PATCH 25/66] chore: bump thehanimo/pr-title-checker from 1.4.2 to 1.4.3 (#224) Bumps [thehanimo/pr-title-checker](https://github.com/thehanimo/pr-title-checker) from 1.4.2 to 1.4.3. - [Release notes](https://github.com/thehanimo/pr-title-checker/releases) - [Commits](https://github.com/thehanimo/pr-title-checker/compare/v1.4.2...v1.4.3) --- updated-dependencies: - dependency-name: thehanimo/pr-title-checker dependency-type: direct:production update-type: version-update:semver-patch ... --- .github/workflows/commit-lint.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/commit-lint.yml b/.github/workflows/commit-lint.yml index 90c8a284..c03a0a09 100644 --- a/.github/workflows/commit-lint.yml +++ b/.github/workflows/commit-lint.yml @@ -12,7 +12,7 @@ jobs: check: runs-on: ubuntu-latest steps: - - uses: thehanimo/pr-title-checker@v1.4.2 + - uses: thehanimo/pr-title-checker@v1.4.3 with: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} pass_on_octokit_error: true From 5b4bb9fa2c62a326c2cbff4f7b6d4116926f4463 Mon Sep 17 00:00:00 2001 From: Jamison Tsai Date: Tue, 3 Dec 2024 13:53:12 +1100 Subject: [PATCH 26/66] rebase --- .../api_validation_integration_test.go | 4 - test/apis/v1alpha1/suite_test.go | 4 + test/e2e/resource_validation_test.go | 214 ++++++++++++++++++ 3 files changed, 218 insertions(+), 4 deletions(-) create mode 100644 test/e2e/resource_validation_test.go diff --git a/test/apis/v1alpha1/api_validation_integration_test.go b/test/apis/v1alpha1/api_validation_integration_test.go index b7e3bca7..4128c513 100644 --- a/test/apis/v1alpha1/api_validation_integration_test.go +++ b/test/apis/v1alpha1/api_validation_integration_test.go @@ -1,7 +1,3 @@ -/* -Copyright (c) Microsoft Corporation. -Licensed under the MIT license. -*/ package v1alpha1 import ( diff --git a/test/apis/v1alpha1/suite_test.go b/test/apis/v1alpha1/suite_test.go index 6b8719b0..4dd0e5f3 100644 --- a/test/apis/v1alpha1/suite_test.go +++ b/test/apis/v1alpha1/suite_test.go @@ -44,7 +44,11 @@ var _ = BeforeSuite(func() { // Start the cluster. hubTestEnv = &envtest.Environment{ CRDDirectoryPaths: []string{ +<<<<<<< HEAD filepath.Join("..", "..", "..", "config", "crd", "bases"), +======= + filepath.Join("..", "..", "..", "..", "config", "crd", "bases"), +>>>>>>> ad659a0 (add validation tests for member cluster service) }, ErrorIfCRDPathMissing: true, } diff --git a/test/e2e/resource_validation_test.go b/test/e2e/resource_validation_test.go new file mode 100644 index 00000000..fab0ee5e --- /dev/null +++ b/test/e2e/resource_validation_test.go @@ -0,0 +1,214 @@ +/* +Copyright (c) Microsoft Corporation. +Licensed under the MIT license. +*/ +package e2e + +import ( + "errors" + "fmt" + + "k8s.io/apimachinery/pkg/types" + + "reflect" + + rbacv1 "k8s.io/api/rbac/v1" + k8serrors "k8s.io/apimachinery/pkg/api/errors" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" +) + +var _ = Describe("Resource validation tests for Member Cluster", func() { + It("should deny creating API with invalid name size", func() { + var name = "abcdef-123456789-123456789-123456789-123456789-123456789-123456789-123456789" + // Create the API. + memberClusterName := ServiceExport{ + ObjectMeta: metav1.ObjectMeta{ + Name: name, + }, + } + By(fmt.Sprintf("expecting denial of CREATE API %s", name)) + err := hubClient.Create(ctx, memberClusterName) + var statusErr *k8serrors.StatusError + Expect(errors.As(err, &statusErr)).To(BeTrue(), fmt.Sprintf("Create API call produced error %s. Error type wanted is %s.", reflect.TypeOf(err), reflect.TypeOf(&k8serrors.StatusError{}))) + Expect(statusErr.Status().Message).Should(ContainSubstring("metadata.name max length is 63")) + }) + + It("should allow creating API with valid name size", func() { + var name = "abc-123456789-123456789-123456789-123456789-123456789-123456789" + // Create the API. + memberClusterName := &clusterv1beta1.MemberCluster{ + ObjectMeta: metav1.ObjectMeta{ + Name: name, + }, + Spec: clusterv1beta1.MemberClusterSpec{ + Identity: rbacv1.Subject{ + Name: "fleet-member-agent-cluster-1", + Kind: "ServiceAccount", + Namespace: "fleet-system", + APIGroup: "", + }, + }, + } + Expect(impersonateHubClient.Create(ctx, memberClusterName)).Should(Succeed()) + Expect(impersonateHubClient.Get(ctx, types.NamespacedName{Name: memberClusterName.Name}, memberClusterName)).Should(Succeed()) + Expect(impersonateHubClient.Delete(ctx, memberClusterName)).Should(Succeed()) + ensureMemberClusterAndRelatedResourcesDeletion(name) + }) + + It("should deny creating API with invalid name starting with non-alphanumeric character", func() { + var name = "-abcdef-123456789-123456789-123456789-123456789-123456789" + // Create the API. + memberClusterName := &clusterv1beta1.MemberCluster{ + ObjectMeta: metav1.ObjectMeta{ + Name: name, + }, + Spec: clusterv1beta1.MemberClusterSpec{ + Identity: rbacv1.Subject{ + Name: "fleet-member-agent-cluster-1", + Kind: "ServiceAccount", + Namespace: "fleet-system", + APIGroup: "", + }, + }, + } + By(fmt.Sprintf("expecting denial of CREATE API %s", name)) + err := hubClient.Create(ctx, memberClusterName) + var statusErr *k8serrors.StatusError + Expect(errors.As(err, &statusErr)).To(BeTrue(), fmt.Sprintf("Create API call produced error %s. Error type wanted is %s.", reflect.TypeOf(err), reflect.TypeOf(&k8serrors.StatusError{}))) + Expect(statusErr.Status().Message).Should(ContainSubstring("a lowercase RFC 1123 subdomain must consist of lower case alphanumeric characters, '-' or '.', and must start and end with an alphanumeric character (e.g. 'example.com', regex used for validation is '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*')")) + }) + + It("should allow creating API with valid name starting with alphabet character", func() { + var name = "abc-123456789" + // Create the API. + memberClusterName := &clusterv1beta1.MemberCluster{ + ObjectMeta: metav1.ObjectMeta{ + Name: name, + }, + Spec: clusterv1beta1.MemberClusterSpec{ + Identity: rbacv1.Subject{ + Name: "fleet-member-agent-cluster-1", + Kind: "ServiceAccount", + Namespace: "fleet-system", + APIGroup: "", + }, + }, + } + Expect(impersonateHubClient.Create(ctx, memberClusterName)).Should(Succeed()) + Expect(impersonateHubClient.Get(ctx, types.NamespacedName{Name: memberClusterName.Name}, memberClusterName)).Should(Succeed()) + Expect(impersonateHubClient.Delete(ctx, memberClusterName)).Should(Succeed()) + ensureMemberClusterAndRelatedResourcesDeletion(name) + }) + + It("should allow creating API with valid name starting with numeric character", func() { + var name = "123-123456789" + // Create the API. + memberClusterName := &clusterv1beta1.MemberCluster{ + ObjectMeta: metav1.ObjectMeta{ + Name: name, + }, + Spec: clusterv1beta1.MemberClusterSpec{ + Identity: rbacv1.Subject{ + Name: "fleet-member-agent-cluster-1", + Kind: "ServiceAccount", + Namespace: "fleet-system", + APIGroup: "", + }, + }, + } + Expect(impersonateHubClient.Create(ctx, memberClusterName)).Should(Succeed()) + Expect(impersonateHubClient.Get(ctx, types.NamespacedName{Name: memberClusterName.Name}, memberClusterName)).Should(Succeed()) + Expect(impersonateHubClient.Delete(ctx, memberClusterName)).Should(Succeed()) + ensureMemberClusterAndRelatedResourcesDeletion(name) + }) + + It("should deny creating API with invalid name ending with non-alphanumeric character", func() { + var name = "abcdef-123456789-123456789-123456789-123456789-123456789-" + // Create the API. + memberClusterName := &clusterv1beta1.MemberCluster{ + ObjectMeta: metav1.ObjectMeta{ + Name: name, + }, + Spec: clusterv1beta1.MemberClusterSpec{ + Identity: rbacv1.Subject{ + Name: "fleet-member-agent-cluster-1", + Kind: "ServiceAccount", + Namespace: "fleet-system", + APIGroup: "", + }, + }, + } + By(fmt.Sprintf("expecting denial of CREATE API %s", name)) + err := hubClient.Create(ctx, memberClusterName) + var statusErr *k8serrors.StatusError + Expect(errors.As(err, &statusErr)).To(BeTrue(), fmt.Sprintf("Create API call produced error %s. Error type wanted is %s.", reflect.TypeOf(err), reflect.TypeOf(&k8serrors.StatusError{}))) + Expect(statusErr.Status().Message).Should(ContainSubstring("a lowercase RFC 1123 subdomain must consist of lower case alphanumeric characters, '-' or '.', and must start and end with an alphanumeric character (e.g. 'example.com', regex used for validation is '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*')")) + }) + + It("should allow creating API with valid name ending with alphabet character", func() { + var name = "123456789-abc" + // Create the API. + memberClusterName := &clusterv1beta1.MemberCluster{ + ObjectMeta: metav1.ObjectMeta{ + Name: name, + }, + Spec: clusterv1beta1.MemberClusterSpec{ + Identity: rbacv1.Subject{ + Name: "fleet-member-agent-cluster-1", + Kind: "ServiceAccount", + Namespace: "fleet-system", + APIGroup: "", + }, + }, + } + Expect(impersonateHubClient.Create(ctx, memberClusterName)).Should(Succeed()) + Expect(impersonateHubClient.Get(ctx, types.NamespacedName{Name: memberClusterName.Name}, memberClusterName)).Should(Succeed()) + Expect(impersonateHubClient.Delete(ctx, memberClusterName)).Should(Succeed()) + ensureMemberClusterAndRelatedResourcesDeletion(name) + }) + + It("should allow creating API with valid name ending with numeric character", func() { + var name = "123456789-123" + // Create the API. + memberClusterName := &clusterv1beta1.MemberCluster{ + ObjectMeta: metav1.ObjectMeta{ + Name: name, + }, + Spec: clusterv1beta1.MemberClusterSpec{ + Identity: rbacv1.Subject{ + Name: "fleet-member-agent-cluster-1", + Kind: "ServiceAccount", + Namespace: "fleet-system", + APIGroup: "", + }, + }, + } + Expect(impersonateHubClient.Create(ctx, memberClusterName)).Should(Succeed()) + Expect(impersonateHubClient.Get(ctx, types.NamespacedName{Name: memberClusterName.Name}, memberClusterName)).Should(Succeed()) + Expect(impersonateHubClient.Delete(ctx, memberClusterName)).Should(Succeed()) + ensureMemberClusterAndRelatedResourcesDeletion(name) + }) + + It("should deny creating API with invalid name containing character that is not alphanumeric and not -", func() { + var name = "a_bcdef-123456789-123456789-123456789-123456789-123456789-123456789-123456789" + // Create the API. + memberClusterName := &clusterv1beta1.MemberCluster{ + ObjectMeta: metav1.ObjectMeta{ + Name: name, + }, + Spec: clusterv1beta1.MemberClusterSpec{ + Identity: rbacv1.Subject{ + Name: "fleet-member-agent-cluster-1", + Kind: "ServiceAccount", + Namespace: "fleet-system", + APIGroup: "", + }, + }, + } + By(fmt.Sprintf("expecting denial of CREATE API %s", name)) + err := hubClient.Create(ctx, memberClusterName) + var statusErr *k8serrors.StatusError + Expect(errors.As(err, &statusErr)).To(BeTrue(), fmt.Sprintf("Create API call produced error %s. Error type wanted is %s.", reflect.TypeOf(err), reflect.TypeOf(&k8serrors.StatusError{}))) + Expect(statusErr.Status().Message).Should(ContainSubstring("a lowercase RFC 1123 subdomain must consist of lower case alphanumeric characters, '-' or '.', and must start and end with an alphanumeric character (e.g. 'example.com', regex used for validation is '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*')")) + }) +}) From e560016ce3c884375e8a496213ac6485ddbaf488 Mon Sep 17 00:00:00 2001 From: Jamison Tsai Date: Tue, 3 Dec 2024 14:04:44 +1100 Subject: [PATCH 27/66] fix conflict --- test/apis/v1alpha1/suite_test.go | 4 ---- 1 file changed, 4 deletions(-) diff --git a/test/apis/v1alpha1/suite_test.go b/test/apis/v1alpha1/suite_test.go index 4dd0e5f3..6b8719b0 100644 --- a/test/apis/v1alpha1/suite_test.go +++ b/test/apis/v1alpha1/suite_test.go @@ -44,11 +44,7 @@ var _ = BeforeSuite(func() { // Start the cluster. hubTestEnv = &envtest.Environment{ CRDDirectoryPaths: []string{ -<<<<<<< HEAD filepath.Join("..", "..", "..", "config", "crd", "bases"), -======= - filepath.Join("..", "..", "..", "..", "config", "crd", "bases"), ->>>>>>> ad659a0 (add validation tests for member cluster service) }, ErrorIfCRDPathMissing: true, } From 96b120d16b16d5360be4f88042a1d1cc94b058cd Mon Sep 17 00:00:00 2001 From: Jamison Tsai Date: Tue, 3 Dec 2024 16:23:53 +1100 Subject: [PATCH 28/66] edit role.yaml --- config/rbac/role.yaml | 2 -- test/e2e/e2e_test.go | 3 +-- 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/config/rbac/role.yaml b/config/rbac/role.yaml index 3d134d88..38d7f900 100644 --- a/config/rbac/role.yaml +++ b/config/rbac/role.yaml @@ -63,7 +63,6 @@ rules: - multiclusterservices - serviceexports - serviceimports - - trafficmanagerbackends - trafficmanagerprofiles verbs: - create @@ -87,7 +86,6 @@ rules: - multiclusterservices/status - serviceexports/status - serviceimports/status - - trafficmanagerbackends/status - trafficmanagerprofiles/status verbs: - get diff --git a/test/e2e/e2e_test.go b/test/e2e/e2e_test.go index b0fc990b..da3ad89e 100644 --- a/test/e2e/e2e_test.go +++ b/test/e2e/e2e_test.go @@ -18,10 +18,9 @@ import ( utilruntime "k8s.io/apimachinery/pkg/util/runtime" clientgoscheme "k8s.io/client-go/kubernetes/scheme" - fleetv1beta1 "go.goms.io/fleet/apis/cluster/v1beta1" - fleetnetv1alpha1 "go.goms.io/fleet-networking/api/v1alpha1" "go.goms.io/fleet-networking/test/e2e/framework" + fleetv1beta1 "go.goms.io/fleet/apis/cluster/v1beta1" ) var ( From 5d27f30a74b30bd226aa5c94ff7bb46de0a27ecf Mon Sep 17 00:00:00 2001 From: Jamison Tsai Date: Tue, 3 Dec 2024 16:38:47 +1100 Subject: [PATCH 29/66] delete e2e resource validation test --- test/e2e/resource_validation_test.go | 214 --------------------------- 1 file changed, 214 deletions(-) delete mode 100644 test/e2e/resource_validation_test.go diff --git a/test/e2e/resource_validation_test.go b/test/e2e/resource_validation_test.go deleted file mode 100644 index fab0ee5e..00000000 --- a/test/e2e/resource_validation_test.go +++ /dev/null @@ -1,214 +0,0 @@ -/* -Copyright (c) Microsoft Corporation. -Licensed under the MIT license. -*/ -package e2e - -import ( - "errors" - "fmt" - - "k8s.io/apimachinery/pkg/types" - - "reflect" - - rbacv1 "k8s.io/api/rbac/v1" - k8serrors "k8s.io/apimachinery/pkg/api/errors" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" -) - -var _ = Describe("Resource validation tests for Member Cluster", func() { - It("should deny creating API with invalid name size", func() { - var name = "abcdef-123456789-123456789-123456789-123456789-123456789-123456789-123456789" - // Create the API. - memberClusterName := ServiceExport{ - ObjectMeta: metav1.ObjectMeta{ - Name: name, - }, - } - By(fmt.Sprintf("expecting denial of CREATE API %s", name)) - err := hubClient.Create(ctx, memberClusterName) - var statusErr *k8serrors.StatusError - Expect(errors.As(err, &statusErr)).To(BeTrue(), fmt.Sprintf("Create API call produced error %s. Error type wanted is %s.", reflect.TypeOf(err), reflect.TypeOf(&k8serrors.StatusError{}))) - Expect(statusErr.Status().Message).Should(ContainSubstring("metadata.name max length is 63")) - }) - - It("should allow creating API with valid name size", func() { - var name = "abc-123456789-123456789-123456789-123456789-123456789-123456789" - // Create the API. - memberClusterName := &clusterv1beta1.MemberCluster{ - ObjectMeta: metav1.ObjectMeta{ - Name: name, - }, - Spec: clusterv1beta1.MemberClusterSpec{ - Identity: rbacv1.Subject{ - Name: "fleet-member-agent-cluster-1", - Kind: "ServiceAccount", - Namespace: "fleet-system", - APIGroup: "", - }, - }, - } - Expect(impersonateHubClient.Create(ctx, memberClusterName)).Should(Succeed()) - Expect(impersonateHubClient.Get(ctx, types.NamespacedName{Name: memberClusterName.Name}, memberClusterName)).Should(Succeed()) - Expect(impersonateHubClient.Delete(ctx, memberClusterName)).Should(Succeed()) - ensureMemberClusterAndRelatedResourcesDeletion(name) - }) - - It("should deny creating API with invalid name starting with non-alphanumeric character", func() { - var name = "-abcdef-123456789-123456789-123456789-123456789-123456789" - // Create the API. - memberClusterName := &clusterv1beta1.MemberCluster{ - ObjectMeta: metav1.ObjectMeta{ - Name: name, - }, - Spec: clusterv1beta1.MemberClusterSpec{ - Identity: rbacv1.Subject{ - Name: "fleet-member-agent-cluster-1", - Kind: "ServiceAccount", - Namespace: "fleet-system", - APIGroup: "", - }, - }, - } - By(fmt.Sprintf("expecting denial of CREATE API %s", name)) - err := hubClient.Create(ctx, memberClusterName) - var statusErr *k8serrors.StatusError - Expect(errors.As(err, &statusErr)).To(BeTrue(), fmt.Sprintf("Create API call produced error %s. Error type wanted is %s.", reflect.TypeOf(err), reflect.TypeOf(&k8serrors.StatusError{}))) - Expect(statusErr.Status().Message).Should(ContainSubstring("a lowercase RFC 1123 subdomain must consist of lower case alphanumeric characters, '-' or '.', and must start and end with an alphanumeric character (e.g. 'example.com', regex used for validation is '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*')")) - }) - - It("should allow creating API with valid name starting with alphabet character", func() { - var name = "abc-123456789" - // Create the API. - memberClusterName := &clusterv1beta1.MemberCluster{ - ObjectMeta: metav1.ObjectMeta{ - Name: name, - }, - Spec: clusterv1beta1.MemberClusterSpec{ - Identity: rbacv1.Subject{ - Name: "fleet-member-agent-cluster-1", - Kind: "ServiceAccount", - Namespace: "fleet-system", - APIGroup: "", - }, - }, - } - Expect(impersonateHubClient.Create(ctx, memberClusterName)).Should(Succeed()) - Expect(impersonateHubClient.Get(ctx, types.NamespacedName{Name: memberClusterName.Name}, memberClusterName)).Should(Succeed()) - Expect(impersonateHubClient.Delete(ctx, memberClusterName)).Should(Succeed()) - ensureMemberClusterAndRelatedResourcesDeletion(name) - }) - - It("should allow creating API with valid name starting with numeric character", func() { - var name = "123-123456789" - // Create the API. - memberClusterName := &clusterv1beta1.MemberCluster{ - ObjectMeta: metav1.ObjectMeta{ - Name: name, - }, - Spec: clusterv1beta1.MemberClusterSpec{ - Identity: rbacv1.Subject{ - Name: "fleet-member-agent-cluster-1", - Kind: "ServiceAccount", - Namespace: "fleet-system", - APIGroup: "", - }, - }, - } - Expect(impersonateHubClient.Create(ctx, memberClusterName)).Should(Succeed()) - Expect(impersonateHubClient.Get(ctx, types.NamespacedName{Name: memberClusterName.Name}, memberClusterName)).Should(Succeed()) - Expect(impersonateHubClient.Delete(ctx, memberClusterName)).Should(Succeed()) - ensureMemberClusterAndRelatedResourcesDeletion(name) - }) - - It("should deny creating API with invalid name ending with non-alphanumeric character", func() { - var name = "abcdef-123456789-123456789-123456789-123456789-123456789-" - // Create the API. - memberClusterName := &clusterv1beta1.MemberCluster{ - ObjectMeta: metav1.ObjectMeta{ - Name: name, - }, - Spec: clusterv1beta1.MemberClusterSpec{ - Identity: rbacv1.Subject{ - Name: "fleet-member-agent-cluster-1", - Kind: "ServiceAccount", - Namespace: "fleet-system", - APIGroup: "", - }, - }, - } - By(fmt.Sprintf("expecting denial of CREATE API %s", name)) - err := hubClient.Create(ctx, memberClusterName) - var statusErr *k8serrors.StatusError - Expect(errors.As(err, &statusErr)).To(BeTrue(), fmt.Sprintf("Create API call produced error %s. Error type wanted is %s.", reflect.TypeOf(err), reflect.TypeOf(&k8serrors.StatusError{}))) - Expect(statusErr.Status().Message).Should(ContainSubstring("a lowercase RFC 1123 subdomain must consist of lower case alphanumeric characters, '-' or '.', and must start and end with an alphanumeric character (e.g. 'example.com', regex used for validation is '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*')")) - }) - - It("should allow creating API with valid name ending with alphabet character", func() { - var name = "123456789-abc" - // Create the API. - memberClusterName := &clusterv1beta1.MemberCluster{ - ObjectMeta: metav1.ObjectMeta{ - Name: name, - }, - Spec: clusterv1beta1.MemberClusterSpec{ - Identity: rbacv1.Subject{ - Name: "fleet-member-agent-cluster-1", - Kind: "ServiceAccount", - Namespace: "fleet-system", - APIGroup: "", - }, - }, - } - Expect(impersonateHubClient.Create(ctx, memberClusterName)).Should(Succeed()) - Expect(impersonateHubClient.Get(ctx, types.NamespacedName{Name: memberClusterName.Name}, memberClusterName)).Should(Succeed()) - Expect(impersonateHubClient.Delete(ctx, memberClusterName)).Should(Succeed()) - ensureMemberClusterAndRelatedResourcesDeletion(name) - }) - - It("should allow creating API with valid name ending with numeric character", func() { - var name = "123456789-123" - // Create the API. - memberClusterName := &clusterv1beta1.MemberCluster{ - ObjectMeta: metav1.ObjectMeta{ - Name: name, - }, - Spec: clusterv1beta1.MemberClusterSpec{ - Identity: rbacv1.Subject{ - Name: "fleet-member-agent-cluster-1", - Kind: "ServiceAccount", - Namespace: "fleet-system", - APIGroup: "", - }, - }, - } - Expect(impersonateHubClient.Create(ctx, memberClusterName)).Should(Succeed()) - Expect(impersonateHubClient.Get(ctx, types.NamespacedName{Name: memberClusterName.Name}, memberClusterName)).Should(Succeed()) - Expect(impersonateHubClient.Delete(ctx, memberClusterName)).Should(Succeed()) - ensureMemberClusterAndRelatedResourcesDeletion(name) - }) - - It("should deny creating API with invalid name containing character that is not alphanumeric and not -", func() { - var name = "a_bcdef-123456789-123456789-123456789-123456789-123456789-123456789-123456789" - // Create the API. - memberClusterName := &clusterv1beta1.MemberCluster{ - ObjectMeta: metav1.ObjectMeta{ - Name: name, - }, - Spec: clusterv1beta1.MemberClusterSpec{ - Identity: rbacv1.Subject{ - Name: "fleet-member-agent-cluster-1", - Kind: "ServiceAccount", - Namespace: "fleet-system", - APIGroup: "", - }, - }, - } - By(fmt.Sprintf("expecting denial of CREATE API %s", name)) - err := hubClient.Create(ctx, memberClusterName) - var statusErr *k8serrors.StatusError - Expect(errors.As(err, &statusErr)).To(BeTrue(), fmt.Sprintf("Create API call produced error %s. Error type wanted is %s.", reflect.TypeOf(err), reflect.TypeOf(&k8serrors.StatusError{}))) - Expect(statusErr.Status().Message).Should(ContainSubstring("a lowercase RFC 1123 subdomain must consist of lower case alphanumeric characters, '-' or '.', and must start and end with an alphanumeric character (e.g. 'example.com', regex used for validation is '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*')")) - }) -}) From cd95d7692a5df0a6c99e25f7f8bfb8c8a7bd2a0a Mon Sep 17 00:00:00 2001 From: Jamison Tsai Date: Wed, 11 Dec 2024 12:39:20 +1100 Subject: [PATCH 30/66] add namespace in suit_test.go --- ...orking _v1alpha1_ multiclusterservice.yaml | 8 + .../networking _v1alpha1_ serviceexports.yaml | 4 + integration_coverage.xml | 615 ++++++++++++++++++ .../api_validation_integration_test.go | 184 ++++-- test/apis/v1alpha1/suite_test.go | 11 + test/e2e/e2e_test.go | 3 +- 6 files changed, 779 insertions(+), 46 deletions(-) create mode 100644 examples/getting-started/artifacts/networking _v1alpha1_ multiclusterservice.yaml create mode 100644 examples/getting-started/artifacts/networking _v1alpha1_ serviceexports.yaml create mode 100644 integration_coverage.xml diff --git a/examples/getting-started/artifacts/networking _v1alpha1_ multiclusterservice.yaml b/examples/getting-started/artifacts/networking _v1alpha1_ multiclusterservice.yaml new file mode 100644 index 00000000..e17f9fe8 --- /dev/null +++ b/examples/getting-started/artifacts/networking _v1alpha1_ multiclusterservice.yaml @@ -0,0 +1,8 @@ +apiVersion: networking.fleet.azure.com/v1alpha1 +kind: MultiClusterService +metadata: + name: abcdef-123456789-123456789-123456789-123456789-123456789-123456789-123456789 +spec: + serviceImport: + name: service-import-1 + namespace: fleet-networking \ No newline at end of file diff --git a/examples/getting-started/artifacts/networking _v1alpha1_ serviceexports.yaml b/examples/getting-started/artifacts/networking _v1alpha1_ serviceexports.yaml new file mode 100644 index 00000000..908adbac --- /dev/null +++ b/examples/getting-started/artifacts/networking _v1alpha1_ serviceexports.yaml @@ -0,0 +1,4 @@ +apiVersion: networking.fleet.azure.com/v1alpha1 +kind: ServiceExport +metadata: + name: abcdef-123456789-123456789-123456789-123456789-123456789-123456789-123456789 diff --git a/integration_coverage.xml b/integration_coverage.xml new file mode 100644 index 00000000..0899c9b6 --- /dev/null +++ b/integration_coverage.xml @@ -0,0 +1,615 @@ +mode: atomic +go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/endpoint.go:29.92,40.16 3 0 +go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/endpoint.go:40.16,42.3 1 0 +go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/endpoint.go:43.2,43.48 1 0 +go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/endpoint.go:47.315,48.51 1 0 +go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/endpoint.go:48.51,51.3 2 0 +go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/endpoint.go:52.2,52.192 1 0 +go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/endpoint.go:52.192,53.46 1 0 +go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/endpoint.go:53.46,56.4 2 0 +go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/endpoint.go:56.9,56.54 1 0 +go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/endpoint.go:56.54,59.4 2 0 +go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/endpoint.go:60.3,61.53 2 0 +go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/endpoint.go:62.8,63.67 1 0 +go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/endpoint.go:63.67,66.4 1 0 +go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/endpoint.go:66.9,68.4 1 0 +go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/endpoint.go:70.2,70.22 1 0 +go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/endpoint.go:73.369,74.51 1 0 +go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/endpoint.go:74.51,77.3 2 0 +go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/endpoint.go:78.2,78.192 1 0 +go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/endpoint.go:78.192,79.54 1 0 +go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/endpoint.go:79.54,82.4 2 0 +go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/endpoint.go:82.9,82.65 1 0 +go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/endpoint.go:82.65,85.4 2 0 +go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/endpoint.go:87.3,98.53 2 0 +go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/endpoint.go:99.8,100.67 1 0 +go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/endpoint.go:100.67,103.4 1 0 +go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/endpoint.go:103.9,105.4 1 0 +go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/endpoint.go:107.2,107.22 1 0 +go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/profile.go:59.89,71.16 3 0 +go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/profile.go:71.16,73.3 1 0 +go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/profile.go:74.2,74.47 1 0 +go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/profile.go:78.237,79.51 1 0 +go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/profile.go:79.51,82.3 2 0 +go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/profile.go:83.2,83.21 1 0 +go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/profile.go:84.97,113.51 3 0 +go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/profile.go:113.51,131.4 1 0 +go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/profile.go:131.9,131.69 1 0 +go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/profile.go:131.69,137.4 1 0 +go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/profile.go:138.3,138.52 1 0 +go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/profile.go:139.41,145.52 2 0 +go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/profile.go:146.33,147.77 1 0 +go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/profile.go:148.10,149.65 1 0 +go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/profile.go:151.2,151.22 1 0 +go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/profile.go:155.308,156.51 1 0 +go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/profile.go:156.51,159.3 2 0 +go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/profile.go:160.2,160.21 1 0 +go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/profile.go:161.30,162.60 1 0 +go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/profile.go:163.36,164.82 1 0 +go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/profile.go:165.31,166.73 1 0 +go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/profile.go:167.24,168.131 1 0 +go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/profile.go:168.131,169.128 1 0 +go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/profile.go:169.128,172.5 2 0 +go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/profile.go:174.3,191.52 2 0 +go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/profile.go:192.10,193.69 1 0 +go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/profile.go:195.2,195.22 1 0 +go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/profile.go:199.246,200.51 1 0 +go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/profile.go:200.51,203.3 2 0 +go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/profile.go:204.2,204.21 1 0 +go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/profile.go:205.24,207.52 2 0 +go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/profile.go:208.10,209.60 1 0 +go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/profile.go:211.2,211.22 1 0 +go.goms.io/fleet-networking/test/e2e/framework/cluster.go:32.72,37.52 2 0 +go.goms.io/fleet-networking/test/e2e/framework/cluster.go:37.52,39.3 1 0 +go.goms.io/fleet-networking/test/e2e/framework/cluster.go:40.2,40.21 1 0 +go.goms.io/fleet-networking/test/e2e/framework/cluster.go:44.103,49.78 2 0 +go.goms.io/fleet-networking/test/e2e/framework/cluster.go:49.78,51.3 1 0 +go.goms.io/fleet-networking/test/e2e/framework/cluster.go:52.2,52.21 1 0 +go.goms.io/fleet-networking/test/e2e/framework/cluster.go:56.33,58.2 1 0 +go.goms.io/fleet-networking/test/e2e/framework/cluster.go:61.42,63.2 1 0 +go.goms.io/fleet-networking/test/e2e/framework/cluster.go:66.56,68.2 1 0 +go.goms.io/fleet-networking/test/e2e/framework/cluster.go:71.127,75.83 4 0 +go.goms.io/fleet-networking/test/e2e/framework/cluster.go:75.83,77.3 1 0 +go.goms.io/fleet-networking/test/e2e/framework/cluster.go:79.2,79.60 1 0 +go.goms.io/fleet-networking/test/e2e/framework/cluster.go:79.60,81.3 1 0 +go.goms.io/fleet-networking/test/e2e/framework/cluster.go:82.2,84.43 2 0 +go.goms.io/fleet-networking/test/e2e/framework/cluster.go:84.43,86.3 1 0 +go.goms.io/fleet-networking/test/e2e/framework/cluster.go:87.2,89.12 3 0 +go.goms.io/fleet-networking/test/e2e/framework/cluster.go:92.45,94.16 2 0 +go.goms.io/fleet-networking/test/e2e/framework/cluster.go:94.16,96.3 1 0 +go.goms.io/fleet-networking/test/e2e/framework/cluster.go:97.2,98.16 2 0 +go.goms.io/fleet-networking/test/e2e/framework/cluster.go:98.16,100.3 1 0 +go.goms.io/fleet-networking/test/e2e/framework/cluster.go:101.2,102.12 2 0 +go.goms.io/fleet-networking/test/e2e/framework/cluster.go:105.75,107.16 2 0 +go.goms.io/fleet-networking/test/e2e/framework/cluster.go:107.16,109.3 1 0 +go.goms.io/fleet-networking/test/e2e/framework/cluster.go:110.2,113.16 4 0 +go.goms.io/fleet-networking/test/e2e/framework/cluster.go:113.16,115.3 1 0 +go.goms.io/fleet-networking/test/e2e/framework/cluster.go:116.2,117.12 2 0 +go.goms.io/fleet-networking/test/e2e/framework/cluster.go:120.62,122.16 2 0 +go.goms.io/fleet-networking/test/e2e/framework/cluster.go:122.16,124.3 1 0 +go.goms.io/fleet-networking/test/e2e/framework/cluster.go:126.2,127.16 2 0 +go.goms.io/fleet-networking/test/e2e/framework/cluster.go:127.16,129.3 1 0 +go.goms.io/fleet-networking/test/e2e/framework/cluster.go:130.2,130.24 1 0 +go.goms.io/fleet-networking/test/e2e/framework/cluster.go:133.71,135.16 2 0 +go.goms.io/fleet-networking/test/e2e/framework/cluster.go:135.16,137.3 1 0 +go.goms.io/fleet-networking/test/e2e/framework/cluster.go:138.2,142.16 2 0 +go.goms.io/fleet-networking/test/e2e/framework/cluster.go:145.40,148.30 3 0 +go.goms.io/fleet-networking/test/e2e/framework/cluster.go:148.30,150.17 2 0 +go.goms.io/fleet-networking/test/e2e/framework/cluster.go:150.17,152.4 1 0 +go.goms.io/fleet-networking/test/e2e/framework/cluster.go:153.3,153.59 1 0 +go.goms.io/fleet-networking/test/e2e/framework/cluster.go:155.2,155.51 1 0 +go.goms.io/fleet-networking/test/e2e/framework/cluster.go:155.51,157.3 1 0 +go.goms.io/fleet-networking/test/e2e/framework/cluster.go:158.2,158.28 1 0 +go.goms.io/fleet-networking/test/e2e/framework/consts.go:35.73,35.117 1 0 +go.goms.io/fleet-networking/test/e2e/framework/consts.go:41.73,41.117 1 0 +go.goms.io/fleet-networking/test/e2e/framework/fleet.go:16.45,18.2 1 0 +go.goms.io/fleet-networking/test/e2e/framework/fleet.go:21.45,23.2 1 0 +go.goms.io/fleet-networking/test/e2e/framework/fleet.go:26.39,28.2 1 0 +go.goms.io/fleet-networking/test/e2e/framework/fleet.go:31.39,33.2 1 0 +go.goms.io/fleet-networking/test/e2e/framework/fleet.go:36.88,42.2 1 0 +go.goms.io/fleet-networking/test/e2e/framework/objects.go:13.47,19.2 1 0 +go.goms.io/fleet-networking/test/e2e/framework/objects.go:22.109,39.2 1 0 +go.goms.io/fleet-networking/test/e2e/framework/objects.go:42.76,49.2 1 0 +go.goms.io/fleet-networking/test/e2e/framework/objects.go:52.141,74.2 1 0 +go.goms.io/fleet-networking/test/e2e/framework/objects.go:77.97,89.2 1 0 +go.goms.io/fleet-networking/test/e2e/framework/prometheus.go:23.88,28.16 2 0 +go.goms.io/fleet-networking/test/e2e/framework/prometheus.go:28.16,30.3 1 0 +go.goms.io/fleet-networking/test/e2e/framework/prometheus.go:31.2,31.33 1 0 +go.goms.io/fleet-networking/test/e2e/framework/prometheus.go:35.154,36.24 1 0 +go.goms.io/fleet-networking/test/e2e/framework/prometheus.go:36.24,38.3 1 0 +go.goms.io/fleet-networking/test/e2e/framework/prometheus.go:40.2,43.16 4 0 +go.goms.io/fleet-networking/test/e2e/framework/prometheus.go:43.16,45.3 1 0 +go.goms.io/fleet-networking/test/e2e/framework/prometheus.go:47.2,47.35 1 0 +go.goms.io/fleet-networking/test/e2e/framework/prometheus.go:47.35,49.3 1 0 +go.goms.io/fleet-networking/test/e2e/framework/prometheus.go:50.2,51.20 2 0 +go.goms.io/fleet-networking/test/e2e/framework/prometheus.go:51.20,53.3 1 0 +go.goms.io/fleet-networking/test/e2e/framework/prometheus.go:54.2,55.38 2 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:38.56,99.2 7 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:102.53,104.2 1 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:107.75,114.2 1 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:117.87,129.2 1 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:132.78,136.2 3 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:139.70,140.40 1 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:140.40,146.56 2 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:146.56,148.4 1 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:151.2,151.46 1 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:151.46,154.63 3 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:154.63,156.4 1 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:157.3,157.61 1 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:157.61,159.4 1 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:161.2,161.12 1 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:165.70,166.46 1 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:166.46,169.63 3 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:169.63,171.4 1 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:172.3,172.57 1 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:172.57,174.4 1 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:177.2,177.40 1 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:177.40,183.56 2 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:183.56,185.4 1 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:187.2,187.12 1 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:191.111,192.46 1 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:192.46,198.63 4 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:198.63,200.4 1 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:203.3,203.62 1 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:203.62,203.77 1 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:203.92,204.73 1 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:204.73,206.5 1 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:207.4,220.42 3 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:220.42,222.5 1 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:223.4,223.14 1 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:224.18,226.4 1 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:228.2,228.12 1 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:232.123,236.68 4 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:236.68,238.3 1 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:239.2,239.58 1 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:239.58,239.73 1 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:239.88,240.88 1 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:240.88,242.4 1 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:243.3,251.35 3 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:251.35,253.4 1 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:254.3,254.13 1 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:259.123,262.95 3 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:262.95,264.3 1 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:265.2,265.58 1 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:265.58,265.73 1 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:265.88,267.115 2 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:267.115,269.4 1 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:270.3,270.13 1 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:275.113,276.46 1 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:276.46,278.87 2 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:278.87,280.4 1 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:281.3,281.62 1 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:281.62,281.77 1 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:281.92,283.108 2 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:283.108,285.5 1 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:286.4,286.14 1 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:287.18,289.4 1 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:291.2,291.12 1 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:295.36,303.2 2 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:307.24,311.2 3 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:314.35,316.2 1 0 +go.goms.io/fleet-networking/test/common/trafficmanager/validator/backend.go:28.86,30.4 1 0 +go.goms.io/fleet-networking/test/common/trafficmanager/validator/backend.go:35.117,36.33 1 0 +go.goms.io/fleet-networking/test/common/trafficmanager/validator/backend.go:36.33,38.59 2 0 +go.goms.io/fleet-networking/test/common/trafficmanager/validator/backend.go:38.59,40.4 1 0 +go.goms.io/fleet-networking/test/common/trafficmanager/validator/backend.go:41.3,41.92 1 0 +go.goms.io/fleet-networking/test/common/trafficmanager/validator/backend.go:41.92,43.4 1 0 +go.goms.io/fleet-networking/test/common/trafficmanager/validator/backend.go:44.3,44.13 1 0 +go.goms.io/fleet-networking/test/common/trafficmanager/validator/backend.go:49.128,52.33 3 0 +go.goms.io/fleet-networking/test/common/trafficmanager/validator/backend.go:52.33,53.58 1 0 +go.goms.io/fleet-networking/test/common/trafficmanager/validator/backend.go:53.58,55.4 1 0 +go.goms.io/fleet-networking/test/common/trafficmanager/validator/backend.go:56.3,56.83 1 0 +go.goms.io/fleet-networking/test/common/trafficmanager/validator/backend.go:56.83,58.4 1 0 +go.goms.io/fleet-networking/test/common/trafficmanager/validator/backend.go:59.3,59.13 1 0 +go.goms.io/fleet-networking/test/common/trafficmanager/validator/backend.go:64.140,67.35 3 0 +go.goms.io/fleet-networking/test/common/trafficmanager/validator/backend.go:67.35,68.58 1 0 +go.goms.io/fleet-networking/test/common/trafficmanager/validator/backend.go:68.58,70.4 1 0 +go.goms.io/fleet-networking/test/common/trafficmanager/validator/backend.go:71.3,71.83 1 0 +go.goms.io/fleet-networking/test/common/trafficmanager/validator/backend.go:71.83,73.4 1 0 +go.goms.io/fleet-networking/test/common/trafficmanager/validator/backend.go:74.3,74.13 1 0 +go.goms.io/fleet-networking/test/common/trafficmanager/validator/backend.go:79.110,80.33 1 0 +go.goms.io/fleet-networking/test/common/trafficmanager/validator/backend.go:80.33,82.72 2 0 +go.goms.io/fleet-networking/test/common/trafficmanager/validator/backend.go:82.72,84.4 1 0 +go.goms.io/fleet-networking/test/common/trafficmanager/validator/backend.go:85.3,85.13 1 0 +go.goms.io/fleet-networking/test/common/trafficmanager/validator/backend.go:90.119,91.35 1 0 +go.goms.io/fleet-networking/test/common/trafficmanager/validator/backend.go:91.35,93.71 2 0 +go.goms.io/fleet-networking/test/common/trafficmanager/validator/backend.go:93.71,95.4 1 0 +go.goms.io/fleet-networking/test/common/trafficmanager/validator/backend.go:96.3,96.13 1 0 +go.goms.io/fleet-networking/test/common/trafficmanager/validator/profile.go:36.57,38.4 1 0 +go.goms.io/fleet-networking/test/common/trafficmanager/validator/profile.go:47.128,50.33 3 0 +go.goms.io/fleet-networking/test/common/trafficmanager/validator/profile.go:50.33,51.58 1 0 +go.goms.io/fleet-networking/test/common/trafficmanager/validator/profile.go:51.58,53.4 1 0 +go.goms.io/fleet-networking/test/common/trafficmanager/validator/profile.go:54.3,54.83 1 0 +go.goms.io/fleet-networking/test/common/trafficmanager/validator/profile.go:54.83,56.4 1 0 +go.goms.io/fleet-networking/test/common/trafficmanager/validator/profile.go:57.3,57.13 1 0 +go.goms.io/fleet-networking/test/common/trafficmanager/validator/profile.go:62.110,63.33 1 0 +go.goms.io/fleet-networking/test/common/trafficmanager/validator/profile.go:63.33,65.72 2 0 +go.goms.io/fleet-networking/test/common/trafficmanager/validator/profile.go:65.72,67.4 1 0 +go.goms.io/fleet-networking/test/common/trafficmanager/validator/profile.go:68.3,68.13 1 0 +go.goms.io/fleet-networking/test/e2e/framework/cluster.go:32.72,37.52 2 1 +go.goms.io/fleet-networking/test/e2e/framework/cluster.go:37.52,39.3 1 1 +go.goms.io/fleet-networking/test/e2e/framework/cluster.go:40.2,40.21 1 0 +go.goms.io/fleet-networking/test/e2e/framework/cluster.go:44.103,49.78 2 0 +go.goms.io/fleet-networking/test/e2e/framework/cluster.go:49.78,51.3 1 0 +go.goms.io/fleet-networking/test/e2e/framework/cluster.go:52.2,52.21 1 0 +go.goms.io/fleet-networking/test/e2e/framework/cluster.go:56.33,58.2 1 0 +go.goms.io/fleet-networking/test/e2e/framework/cluster.go:61.42,63.2 1 1 +go.goms.io/fleet-networking/test/e2e/framework/cluster.go:66.56,68.2 1 0 +go.goms.io/fleet-networking/test/e2e/framework/cluster.go:71.127,75.83 4 0 +go.goms.io/fleet-networking/test/e2e/framework/cluster.go:75.83,77.3 1 0 +go.goms.io/fleet-networking/test/e2e/framework/cluster.go:79.2,79.60 1 0 +go.goms.io/fleet-networking/test/e2e/framework/cluster.go:79.60,81.3 1 0 +go.goms.io/fleet-networking/test/e2e/framework/cluster.go:82.2,84.43 2 0 +go.goms.io/fleet-networking/test/e2e/framework/cluster.go:84.43,86.3 1 0 +go.goms.io/fleet-networking/test/e2e/framework/cluster.go:87.2,89.12 3 0 +go.goms.io/fleet-networking/test/e2e/framework/cluster.go:92.45,94.16 2 1 +go.goms.io/fleet-networking/test/e2e/framework/cluster.go:94.16,96.3 1 1 +go.goms.io/fleet-networking/test/e2e/framework/cluster.go:97.2,98.16 2 0 +go.goms.io/fleet-networking/test/e2e/framework/cluster.go:98.16,100.3 1 0 +go.goms.io/fleet-networking/test/e2e/framework/cluster.go:101.2,102.12 2 0 +go.goms.io/fleet-networking/test/e2e/framework/cluster.go:105.75,107.16 2 0 +go.goms.io/fleet-networking/test/e2e/framework/cluster.go:107.16,109.3 1 0 +go.goms.io/fleet-networking/test/e2e/framework/cluster.go:110.2,113.16 4 0 +go.goms.io/fleet-networking/test/e2e/framework/cluster.go:113.16,115.3 1 0 +go.goms.io/fleet-networking/test/e2e/framework/cluster.go:116.2,117.12 2 0 +go.goms.io/fleet-networking/test/e2e/framework/cluster.go:120.62,122.16 2 1 +go.goms.io/fleet-networking/test/e2e/framework/cluster.go:122.16,124.3 1 0 +go.goms.io/fleet-networking/test/e2e/framework/cluster.go:126.2,127.16 2 1 +go.goms.io/fleet-networking/test/e2e/framework/cluster.go:127.16,129.3 1 1 +go.goms.io/fleet-networking/test/e2e/framework/cluster.go:130.2,130.24 1 0 +go.goms.io/fleet-networking/test/e2e/framework/cluster.go:133.71,135.16 2 1 +go.goms.io/fleet-networking/test/e2e/framework/cluster.go:135.16,137.3 1 0 +go.goms.io/fleet-networking/test/e2e/framework/cluster.go:138.2,142.16 2 1 +go.goms.io/fleet-networking/test/e2e/framework/cluster.go:145.40,148.30 3 1 +go.goms.io/fleet-networking/test/e2e/framework/cluster.go:148.30,150.17 2 1 +go.goms.io/fleet-networking/test/e2e/framework/cluster.go:150.17,152.4 1 0 +go.goms.io/fleet-networking/test/e2e/framework/cluster.go:153.3,153.59 1 1 +go.goms.io/fleet-networking/test/e2e/framework/cluster.go:155.2,155.51 1 1 +go.goms.io/fleet-networking/test/e2e/framework/cluster.go:155.51,157.3 1 0 +go.goms.io/fleet-networking/test/e2e/framework/cluster.go:158.2,158.28 1 1 +go.goms.io/fleet-networking/test/e2e/framework/consts.go:35.73,35.117 1 0 +go.goms.io/fleet-networking/test/e2e/framework/consts.go:41.73,41.117 1 0 +go.goms.io/fleet-networking/test/e2e/framework/fleet.go:16.45,18.2 1 0 +go.goms.io/fleet-networking/test/e2e/framework/fleet.go:21.45,23.2 1 0 +go.goms.io/fleet-networking/test/e2e/framework/fleet.go:26.39,28.2 1 0 +go.goms.io/fleet-networking/test/e2e/framework/fleet.go:31.39,33.2 1 0 +go.goms.io/fleet-networking/test/e2e/framework/fleet.go:36.88,42.2 1 0 +go.goms.io/fleet-networking/test/e2e/framework/objects.go:13.47,19.2 1 0 +go.goms.io/fleet-networking/test/e2e/framework/objects.go:22.109,39.2 1 0 +go.goms.io/fleet-networking/test/e2e/framework/objects.go:42.76,49.2 1 0 +go.goms.io/fleet-networking/test/e2e/framework/objects.go:52.141,74.2 1 0 +go.goms.io/fleet-networking/test/e2e/framework/objects.go:77.97,89.2 1 0 +go.goms.io/fleet-networking/test/e2e/framework/prometheus.go:23.88,28.16 2 0 +go.goms.io/fleet-networking/test/e2e/framework/prometheus.go:28.16,30.3 1 0 +go.goms.io/fleet-networking/test/e2e/framework/prometheus.go:31.2,31.33 1 0 +go.goms.io/fleet-networking/test/e2e/framework/prometheus.go:35.154,36.24 1 0 +go.goms.io/fleet-networking/test/e2e/framework/prometheus.go:36.24,38.3 1 0 +go.goms.io/fleet-networking/test/e2e/framework/prometheus.go:40.2,43.16 4 0 +go.goms.io/fleet-networking/test/e2e/framework/prometheus.go:43.16,45.3 1 0 +go.goms.io/fleet-networking/test/e2e/framework/prometheus.go:47.2,47.35 1 0 +go.goms.io/fleet-networking/test/e2e/framework/prometheus.go:47.35,49.3 1 0 +go.goms.io/fleet-networking/test/e2e/framework/prometheus.go:50.2,51.20 2 0 +go.goms.io/fleet-networking/test/e2e/framework/prometheus.go:51.20,53.3 1 0 +go.goms.io/fleet-networking/test/e2e/framework/prometheus.go:54.2,55.38 2 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:38.56,99.2 7 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:102.53,104.2 1 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:107.75,114.2 1 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:117.87,129.2 1 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:132.78,136.2 3 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:139.70,140.40 1 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:140.40,146.56 2 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:146.56,148.4 1 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:151.2,151.46 1 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:151.46,154.63 3 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:154.63,156.4 1 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:157.3,157.61 1 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:157.61,159.4 1 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:161.2,161.12 1 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:165.70,166.46 1 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:166.46,169.63 3 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:169.63,171.4 1 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:172.3,172.57 1 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:172.57,174.4 1 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:177.2,177.40 1 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:177.40,183.56 2 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:183.56,185.4 1 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:187.2,187.12 1 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:191.111,192.46 1 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:192.46,198.63 4 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:198.63,200.4 1 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:203.3,203.62 1 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:203.62,203.77 1 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:203.92,204.73 1 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:204.73,206.5 1 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:207.4,220.42 3 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:220.42,222.5 1 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:223.4,223.14 1 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:224.18,226.4 1 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:228.2,228.12 1 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:232.123,236.68 4 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:236.68,238.3 1 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:239.2,239.58 1 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:239.58,239.73 1 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:239.88,240.88 1 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:240.88,242.4 1 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:243.3,251.35 3 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:251.35,253.4 1 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:254.3,254.13 1 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:259.123,262.95 3 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:262.95,264.3 1 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:265.2,265.58 1 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:265.58,265.73 1 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:265.88,267.115 2 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:267.115,269.4 1 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:270.3,270.13 1 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:275.113,276.46 1 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:276.46,278.87 2 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:278.87,280.4 1 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:281.3,281.62 1 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:281.62,281.77 1 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:281.92,283.108 2 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:283.108,285.5 1 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:286.4,286.14 1 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:287.18,289.4 1 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:291.2,291.12 1 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:295.36,303.2 2 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:307.24,311.2 3 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:314.35,316.2 1 0 +go.goms.io/fleet-networking/test/e2e/framework/cluster.go:32.72,37.52 2 1 +go.goms.io/fleet-networking/test/e2e/framework/cluster.go:37.52,39.3 1 1 +go.goms.io/fleet-networking/test/e2e/framework/cluster.go:40.2,40.21 1 0 +go.goms.io/fleet-networking/test/e2e/framework/cluster.go:44.103,49.78 2 0 +go.goms.io/fleet-networking/test/e2e/framework/cluster.go:49.78,51.3 1 0 +go.goms.io/fleet-networking/test/e2e/framework/cluster.go:52.2,52.21 1 0 +go.goms.io/fleet-networking/test/e2e/framework/cluster.go:56.33,58.2 1 0 +go.goms.io/fleet-networking/test/e2e/framework/cluster.go:61.42,63.2 1 0 +go.goms.io/fleet-networking/test/e2e/framework/cluster.go:66.56,68.2 1 0 +go.goms.io/fleet-networking/test/e2e/framework/cluster.go:71.127,75.83 4 0 +go.goms.io/fleet-networking/test/e2e/framework/cluster.go:75.83,77.3 1 0 +go.goms.io/fleet-networking/test/e2e/framework/cluster.go:79.2,79.60 1 0 +go.goms.io/fleet-networking/test/e2e/framework/cluster.go:79.60,81.3 1 0 +go.goms.io/fleet-networking/test/e2e/framework/cluster.go:82.2,84.43 2 0 +go.goms.io/fleet-networking/test/e2e/framework/cluster.go:84.43,86.3 1 0 +go.goms.io/fleet-networking/test/e2e/framework/cluster.go:87.2,89.12 3 0 +go.goms.io/fleet-networking/test/e2e/framework/cluster.go:92.45,94.16 2 1 +go.goms.io/fleet-networking/test/e2e/framework/cluster.go:94.16,96.3 1 1 +go.goms.io/fleet-networking/test/e2e/framework/cluster.go:97.2,98.16 2 0 +go.goms.io/fleet-networking/test/e2e/framework/cluster.go:98.16,100.3 1 0 +go.goms.io/fleet-networking/test/e2e/framework/cluster.go:101.2,102.12 2 0 +go.goms.io/fleet-networking/test/e2e/framework/cluster.go:105.75,107.16 2 0 +go.goms.io/fleet-networking/test/e2e/framework/cluster.go:107.16,109.3 1 0 +go.goms.io/fleet-networking/test/e2e/framework/cluster.go:110.2,113.16 4 0 +go.goms.io/fleet-networking/test/e2e/framework/cluster.go:113.16,115.3 1 0 +go.goms.io/fleet-networking/test/e2e/framework/cluster.go:116.2,117.12 2 0 +go.goms.io/fleet-networking/test/e2e/framework/cluster.go:120.62,122.16 2 1 +go.goms.io/fleet-networking/test/e2e/framework/cluster.go:122.16,124.3 1 0 +go.goms.io/fleet-networking/test/e2e/framework/cluster.go:126.2,127.16 2 1 +go.goms.io/fleet-networking/test/e2e/framework/cluster.go:127.16,129.3 1 1 +go.goms.io/fleet-networking/test/e2e/framework/cluster.go:130.2,130.24 1 0 +go.goms.io/fleet-networking/test/e2e/framework/cluster.go:133.71,135.16 2 1 +go.goms.io/fleet-networking/test/e2e/framework/cluster.go:135.16,137.3 1 0 +go.goms.io/fleet-networking/test/e2e/framework/cluster.go:138.2,142.16 2 1 +go.goms.io/fleet-networking/test/e2e/framework/cluster.go:145.40,148.30 3 1 +go.goms.io/fleet-networking/test/e2e/framework/cluster.go:148.30,150.17 2 1 +go.goms.io/fleet-networking/test/e2e/framework/cluster.go:150.17,152.4 1 0 +go.goms.io/fleet-networking/test/e2e/framework/cluster.go:153.3,153.59 1 1 +go.goms.io/fleet-networking/test/e2e/framework/cluster.go:155.2,155.51 1 1 +go.goms.io/fleet-networking/test/e2e/framework/cluster.go:155.51,157.3 1 0 +go.goms.io/fleet-networking/test/e2e/framework/cluster.go:158.2,158.28 1 1 +go.goms.io/fleet-networking/test/e2e/framework/consts.go:35.73,35.117 1 0 +go.goms.io/fleet-networking/test/e2e/framework/consts.go:41.73,41.117 1 0 +go.goms.io/fleet-networking/test/e2e/framework/fleet.go:16.45,18.2 1 0 +go.goms.io/fleet-networking/test/e2e/framework/fleet.go:21.45,23.2 1 0 +go.goms.io/fleet-networking/test/e2e/framework/fleet.go:26.39,28.2 1 0 +go.goms.io/fleet-networking/test/e2e/framework/fleet.go:31.39,33.2 1 0 +go.goms.io/fleet-networking/test/e2e/framework/fleet.go:36.88,42.2 1 0 +go.goms.io/fleet-networking/test/e2e/framework/objects.go:13.47,19.2 1 80 +go.goms.io/fleet-networking/test/e2e/framework/objects.go:22.109,39.2 1 80 +go.goms.io/fleet-networking/test/e2e/framework/objects.go:42.76,49.2 1 0 +go.goms.io/fleet-networking/test/e2e/framework/objects.go:52.141,74.2 1 80 +go.goms.io/fleet-networking/test/e2e/framework/objects.go:77.97,89.2 1 80 +go.goms.io/fleet-networking/test/e2e/framework/prometheus.go:23.88,28.16 2 0 +go.goms.io/fleet-networking/test/e2e/framework/prometheus.go:28.16,30.3 1 0 +go.goms.io/fleet-networking/test/e2e/framework/prometheus.go:31.2,31.33 1 0 +go.goms.io/fleet-networking/test/e2e/framework/prometheus.go:35.154,36.24 1 0 +go.goms.io/fleet-networking/test/e2e/framework/prometheus.go:36.24,38.3 1 0 +go.goms.io/fleet-networking/test/e2e/framework/prometheus.go:40.2,43.16 4 0 +go.goms.io/fleet-networking/test/e2e/framework/prometheus.go:43.16,45.3 1 0 +go.goms.io/fleet-networking/test/e2e/framework/prometheus.go:47.2,47.35 1 0 +go.goms.io/fleet-networking/test/e2e/framework/prometheus.go:47.35,49.3 1 0 +go.goms.io/fleet-networking/test/e2e/framework/prometheus.go:50.2,51.20 2 0 +go.goms.io/fleet-networking/test/e2e/framework/prometheus.go:51.20,53.3 1 0 +go.goms.io/fleet-networking/test/e2e/framework/prometheus.go:54.2,55.38 2 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:38.56,99.2 7 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:102.53,104.2 1 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:107.75,114.2 1 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:117.87,129.2 1 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:132.78,136.2 3 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:139.70,140.40 1 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:140.40,146.56 2 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:146.56,148.4 1 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:151.2,151.46 1 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:151.46,154.63 3 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:154.63,156.4 1 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:157.3,157.61 1 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:157.61,159.4 1 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:161.2,161.12 1 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:165.70,166.46 1 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:166.46,169.63 3 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:169.63,171.4 1 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:172.3,172.57 1 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:172.57,174.4 1 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:177.2,177.40 1 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:177.40,183.56 2 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:183.56,185.4 1 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:187.2,187.12 1 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:191.111,192.46 1 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:192.46,198.63 4 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:198.63,200.4 1 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:203.3,203.62 1 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:203.62,203.77 1 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:203.92,204.73 1 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:204.73,206.5 1 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:207.4,220.42 3 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:220.42,222.5 1 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:223.4,223.14 1 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:224.18,226.4 1 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:228.2,228.12 1 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:232.123,236.68 4 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:236.68,238.3 1 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:239.2,239.58 1 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:239.58,239.73 1 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:239.88,240.88 1 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:240.88,242.4 1 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:243.3,251.35 3 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:251.35,253.4 1 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:254.3,254.13 1 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:259.123,262.95 3 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:262.95,264.3 1 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:265.2,265.58 1 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:265.58,265.73 1 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:265.88,267.115 2 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:267.115,269.4 1 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:270.3,270.13 1 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:275.113,276.46 1 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:276.46,278.87 2 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:278.87,280.4 1 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:281.3,281.62 1 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:281.62,281.77 1 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:281.92,283.108 2 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:283.108,285.5 1 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:286.4,286.14 1 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:287.18,289.4 1 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:291.2,291.12 1 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:295.36,303.2 2 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:307.24,311.2 3 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:314.35,316.2 1 0 +go.goms.io/fleet-networking/test/e2e/framework/cluster.go:32.72,37.52 2 0 +go.goms.io/fleet-networking/test/e2e/framework/cluster.go:37.52,39.3 1 0 +go.goms.io/fleet-networking/test/e2e/framework/cluster.go:40.2,40.21 1 0 +go.goms.io/fleet-networking/test/e2e/framework/cluster.go:44.103,49.78 2 1 +go.goms.io/fleet-networking/test/e2e/framework/cluster.go:49.78,51.3 1 1 +go.goms.io/fleet-networking/test/e2e/framework/cluster.go:52.2,52.21 1 0 +go.goms.io/fleet-networking/test/e2e/framework/cluster.go:56.33,58.2 1 0 +go.goms.io/fleet-networking/test/e2e/framework/cluster.go:61.42,63.2 1 0 +go.goms.io/fleet-networking/test/e2e/framework/cluster.go:66.56,68.2 1 0 +go.goms.io/fleet-networking/test/e2e/framework/cluster.go:71.127,75.83 4 0 +go.goms.io/fleet-networking/test/e2e/framework/cluster.go:75.83,77.3 1 0 +go.goms.io/fleet-networking/test/e2e/framework/cluster.go:79.2,79.60 1 0 +go.goms.io/fleet-networking/test/e2e/framework/cluster.go:79.60,81.3 1 0 +go.goms.io/fleet-networking/test/e2e/framework/cluster.go:82.2,84.43 2 0 +go.goms.io/fleet-networking/test/e2e/framework/cluster.go:84.43,86.3 1 0 +go.goms.io/fleet-networking/test/e2e/framework/cluster.go:87.2,89.12 3 0 +go.goms.io/fleet-networking/test/e2e/framework/cluster.go:92.45,94.16 2 0 +go.goms.io/fleet-networking/test/e2e/framework/cluster.go:94.16,96.3 1 0 +go.goms.io/fleet-networking/test/e2e/framework/cluster.go:97.2,98.16 2 0 +go.goms.io/fleet-networking/test/e2e/framework/cluster.go:98.16,100.3 1 0 +go.goms.io/fleet-networking/test/e2e/framework/cluster.go:101.2,102.12 2 0 +go.goms.io/fleet-networking/test/e2e/framework/cluster.go:105.75,107.16 2 1 +go.goms.io/fleet-networking/test/e2e/framework/cluster.go:107.16,109.3 1 1 +go.goms.io/fleet-networking/test/e2e/framework/cluster.go:110.2,113.16 4 0 +go.goms.io/fleet-networking/test/e2e/framework/cluster.go:113.16,115.3 1 0 +go.goms.io/fleet-networking/test/e2e/framework/cluster.go:116.2,117.12 2 0 +go.goms.io/fleet-networking/test/e2e/framework/cluster.go:120.62,122.16 2 1 +go.goms.io/fleet-networking/test/e2e/framework/cluster.go:122.16,124.3 1 0 +go.goms.io/fleet-networking/test/e2e/framework/cluster.go:126.2,127.16 2 1 +go.goms.io/fleet-networking/test/e2e/framework/cluster.go:127.16,129.3 1 1 +go.goms.io/fleet-networking/test/e2e/framework/cluster.go:130.2,130.24 1 0 +go.goms.io/fleet-networking/test/e2e/framework/cluster.go:133.71,135.16 2 1 +go.goms.io/fleet-networking/test/e2e/framework/cluster.go:135.16,137.3 1 0 +go.goms.io/fleet-networking/test/e2e/framework/cluster.go:138.2,142.16 2 1 +go.goms.io/fleet-networking/test/e2e/framework/cluster.go:145.40,148.30 3 1 +go.goms.io/fleet-networking/test/e2e/framework/cluster.go:148.30,150.17 2 1 +go.goms.io/fleet-networking/test/e2e/framework/cluster.go:150.17,152.4 1 0 +go.goms.io/fleet-networking/test/e2e/framework/cluster.go:153.3,153.59 1 1 +go.goms.io/fleet-networking/test/e2e/framework/cluster.go:155.2,155.51 1 1 +go.goms.io/fleet-networking/test/e2e/framework/cluster.go:155.51,157.3 1 0 +go.goms.io/fleet-networking/test/e2e/framework/cluster.go:158.2,158.28 1 1 +go.goms.io/fleet-networking/test/e2e/framework/consts.go:35.73,35.117 1 0 +go.goms.io/fleet-networking/test/e2e/framework/consts.go:41.73,41.117 1 0 +go.goms.io/fleet-networking/test/e2e/framework/fleet.go:16.45,18.2 1 0 +go.goms.io/fleet-networking/test/e2e/framework/fleet.go:21.45,23.2 1 0 +go.goms.io/fleet-networking/test/e2e/framework/fleet.go:26.39,28.2 1 0 +go.goms.io/fleet-networking/test/e2e/framework/fleet.go:31.39,33.2 1 0 +go.goms.io/fleet-networking/test/e2e/framework/fleet.go:36.88,42.2 1 0 +go.goms.io/fleet-networking/test/e2e/framework/objects.go:13.47,19.2 1 0 +go.goms.io/fleet-networking/test/e2e/framework/objects.go:22.109,39.2 1 0 +go.goms.io/fleet-networking/test/e2e/framework/objects.go:42.76,49.2 1 0 +go.goms.io/fleet-networking/test/e2e/framework/objects.go:52.141,74.2 1 900 +go.goms.io/fleet-networking/test/e2e/framework/objects.go:77.97,89.2 1 0 +go.goms.io/fleet-networking/test/e2e/framework/prometheus.go:23.88,28.16 2 0 +go.goms.io/fleet-networking/test/e2e/framework/prometheus.go:28.16,30.3 1 0 +go.goms.io/fleet-networking/test/e2e/framework/prometheus.go:31.2,31.33 1 0 +go.goms.io/fleet-networking/test/e2e/framework/prometheus.go:35.154,36.24 1 0 +go.goms.io/fleet-networking/test/e2e/framework/prometheus.go:36.24,38.3 1 0 +go.goms.io/fleet-networking/test/e2e/framework/prometheus.go:40.2,43.16 4 0 +go.goms.io/fleet-networking/test/e2e/framework/prometheus.go:43.16,45.3 1 0 +go.goms.io/fleet-networking/test/e2e/framework/prometheus.go:47.2,47.35 1 0 +go.goms.io/fleet-networking/test/e2e/framework/prometheus.go:47.35,49.3 1 0 +go.goms.io/fleet-networking/test/e2e/framework/prometheus.go:50.2,51.20 2 0 +go.goms.io/fleet-networking/test/e2e/framework/prometheus.go:51.20,53.3 1 0 +go.goms.io/fleet-networking/test/e2e/framework/prometheus.go:54.2,55.38 2 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:38.56,99.2 7 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:102.53,104.2 1 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:107.75,114.2 1 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:117.87,129.2 1 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:132.78,136.2 3 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:139.70,140.40 1 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:140.40,146.56 2 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:146.56,148.4 1 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:151.2,151.46 1 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:151.46,154.63 3 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:154.63,156.4 1 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:157.3,157.61 1 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:157.61,159.4 1 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:161.2,161.12 1 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:165.70,166.46 1 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:166.46,169.63 3 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:169.63,171.4 1 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:172.3,172.57 1 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:172.57,174.4 1 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:177.2,177.40 1 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:177.40,183.56 2 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:183.56,185.4 1 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:187.2,187.12 1 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:191.111,192.46 1 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:192.46,198.63 4 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:198.63,200.4 1 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:203.3,203.62 1 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:203.62,203.77 1 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:203.92,204.73 1 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:204.73,206.5 1 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:207.4,220.42 3 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:220.42,222.5 1 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:223.4,223.14 1 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:224.18,226.4 1 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:228.2,228.12 1 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:232.123,236.68 4 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:236.68,238.3 1 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:239.2,239.58 1 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:239.58,239.73 1 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:239.88,240.88 1 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:240.88,242.4 1 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:243.3,251.35 3 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:251.35,253.4 1 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:254.3,254.13 1 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:259.123,262.95 3 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:262.95,264.3 1 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:265.2,265.58 1 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:265.58,265.73 1 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:265.88,267.115 2 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:267.115,269.4 1 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:270.3,270.13 1 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:275.113,276.46 1 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:276.46,278.87 2 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:278.87,280.4 1 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:281.3,281.62 1 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:281.62,281.77 1 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:281.92,283.108 2 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:283.108,285.5 1 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:286.4,286.14 1 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:287.18,289.4 1 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:291.2,291.12 1 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:295.36,303.2 2 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:307.24,311.2 3 0 +go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:314.35,316.2 1 0 diff --git a/test/apis/v1alpha1/api_validation_integration_test.go b/test/apis/v1alpha1/api_validation_integration_test.go index 4128c513..42c105e7 100644 --- a/test/apis/v1alpha1/api_validation_integration_test.go +++ b/test/apis/v1alpha1/api_validation_integration_test.go @@ -15,13 +15,16 @@ import ( ) var _ = Describe("Test networking v1alpha1 API validation", func() { + Context("Test MultiClusterService API validation - invalid cases", func() { It("should deny creating API with invalid name size", func() { var name = "abcdef-123456789-123456789-123456789-123456789-123456789-123456789-123456789" + // Create the API. memberClusterServiceName := &v1alpha1.MultiClusterService{ ObjectMeta: metav1.ObjectMeta{ - Name: name, + Name: name, + Namespace: "testNamespace", }, Spec: v1alpha1.MultiClusterServiceSpec{ ServiceImport: v1alpha1.ServiceImportRef{ @@ -32,16 +35,19 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { By(fmt.Sprintf("expecting denial of CREATE API %s", name)) var err = hubClient.Create(ctx, memberClusterServiceName) var statusErr *k8serrors.StatusError + fmt.Print(err) Expect(errors.As(err, &statusErr)).To(BeTrue(), fmt.Sprintf("Create API call produced error %s. Error type wanted is %s.", reflect.TypeOf(err), reflect.TypeOf(&k8serrors.StatusError{}))) Expect(statusErr.Status().Message).Should(ContainSubstring("metadata.name max length is 63")) }) It("should deny creating API with invalid name starting with non-alphanumeric character", func() { var name = "-abcdef-123456789-123456789-123456789-123456789-123456789" + // Create the API. memberClusterServiceName := &v1alpha1.MultiClusterService{ ObjectMeta: metav1.ObjectMeta{ - Name: name, + Name: name, + Namespace: "testNamespace", }, Spec: v1alpha1.MultiClusterServiceSpec{ ServiceImport: v1alpha1.ServiceImportRef{ @@ -58,10 +64,12 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { It("should deny creating API with invalid name ending with non-alphanumeric character", func() { var name = "abcdef-123456789-123456789-123456789-123456789-123456789-" + // Create the API. memberClusterServiceName := &v1alpha1.MultiClusterService{ ObjectMeta: metav1.ObjectMeta{ - Name: name, + Name: name, + Namespace: "testNamespace", }, Spec: v1alpha1.MultiClusterServiceSpec{ ServiceImport: v1alpha1.ServiceImportRef{ @@ -78,10 +86,12 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { It("should deny creating API with invalid name containing character that is not alphanumeric and not -", func() { var name = "a_bcdef-123456789-123456789-123456789-123456789-123456789-123456789-123456789" + // Create the API. memberClusterServiceName := &v1alpha1.MultiClusterService{ ObjectMeta: metav1.ObjectMeta{ - Name: name, + Name: name, + Namespace: "testNamespace", }, Spec: v1alpha1.MultiClusterServiceSpec{ ServiceImport: v1alpha1.ServiceImportRef{ @@ -100,10 +110,12 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { Context("Test Member Cluster Service creation API validation - valid cases", func() { It("should allow creating API with valid name size", func() { var name = "abc-123456789-123456789-123456789-123456789-123456789-123456789" + // Create the API. memberClusterServiceName := &v1alpha1.MultiClusterService{ ObjectMeta: metav1.ObjectMeta{ - Name: name, + Name: name, + Namespace: "testNamespace", }, Spec: v1alpha1.MultiClusterServiceSpec{ ServiceImport: v1alpha1.ServiceImportRef{ @@ -117,10 +129,12 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { It("should allow creating API with valid name starting with alphabet character", func() { var name = "abc-123456789" + // Create the API. memberClusterServiceName := &v1alpha1.MultiClusterService{ ObjectMeta: metav1.ObjectMeta{ - Name: name, + Name: name, + Namespace: "testNamespace", }, Spec: v1alpha1.MultiClusterServiceSpec{ ServiceImport: v1alpha1.ServiceImportRef{ @@ -134,10 +148,12 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { It("should allow creating API with valid name starting with numeric character", func() { var name = "123-123456789" + // Create the API. memberClusterServiceName := &v1alpha1.MultiClusterService{ ObjectMeta: metav1.ObjectMeta{ - Name: name, + Name: name, + Namespace: "testNamespace", }, Spec: v1alpha1.MultiClusterServiceSpec{ ServiceImport: v1alpha1.ServiceImportRef{ @@ -151,10 +167,12 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { It("should allow creating API with valid name ending with alphabet character", func() { var name = "123456789-abc" + // Create the API. memberClusterServiceName := &v1alpha1.MultiClusterService{ ObjectMeta: metav1.ObjectMeta{ - Name: name, + Name: name, + Namespace: "testNamespace", }, Spec: v1alpha1.MultiClusterServiceSpec{ ServiceImport: v1alpha1.ServiceImportRef{ @@ -168,10 +186,12 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { It("should allow creating API with valid name ending with numeric character", func() { var name = "123456789-123" + // Create the API. memberClusterServiceName := &v1alpha1.MultiClusterService{ ObjectMeta: metav1.ObjectMeta{ - Name: name, + Name: name, + Namespace: "testNamespace", }, Spec: v1alpha1.MultiClusterServiceSpec{ ServiceImport: v1alpha1.ServiceImportRef{ @@ -187,14 +207,18 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { Context("Test ServiceExport API validation - invalid cases", func() { It("should deny creating API with invalid name size", func() { var name = "abcdef-123456789-123456789-123456789-123456789-123456789-123456789-123456789" + // Create the API. serviceExportName := &v1alpha1.ServiceExport{ ObjectMeta: metav1.ObjectMeta{ - Name: name, + Name: name, + Namespace: "testNamespace", }, } By(fmt.Sprintf("expecting denial of CREATE API %s", name)) var err = hubClient.Create(ctx, serviceExportName) + fmt.Println("Print test") + fmt.Println(err) var statusErr *k8serrors.StatusError Expect(errors.As(err, &statusErr)).To(BeTrue(), fmt.Sprintf("Create API call produced error %s. Error type wanted is %s.", reflect.TypeOf(err), reflect.TypeOf(&k8serrors.StatusError{}))) Expect(statusErr.Status().Message).Should(ContainSubstring("metadata.name max length is 63")) @@ -202,10 +226,12 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { It("should deny creating API with invalid name starting with non-alphanumeric character", func() { var name = "-abcdef-123456789-123456789-123456789-123456789-123456789" + // Create the API. serviceExportName := &v1alpha1.ServiceExport{ ObjectMeta: metav1.ObjectMeta{ - Name: name, + Name: name, + Namespace: "testNamespace", }, } By(fmt.Sprintf("expecting denial of CREATE API %s", name)) @@ -217,10 +243,12 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { It("should deny creating API with invalid name ending with non-alphanumeric character", func() { var name = "abcdef-123456789-123456789-123456789-123456789-123456789-" + // Create the API. serviceExportName := &v1alpha1.ServiceExport{ ObjectMeta: metav1.ObjectMeta{ - Name: name, + Name: name, + Namespace: "testNamespace", }, } By(fmt.Sprintf("expecting denial of CREATE API %s", name)) @@ -232,10 +260,12 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { It("should deny creating API with invalid name containing character that is not alphanumeric and not -", func() { var name = "a_bcdef-123456789-123456789-123456789-123456789-123456789-123456789-123456789" + // Create the API. serviceExportName := &v1alpha1.ServiceExport{ ObjectMeta: metav1.ObjectMeta{ - Name: name, + Name: name, + Namespace: "testNamespace", }, } By(fmt.Sprintf("expecting denial of CREATE API %s", name)) @@ -249,10 +279,12 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { Context("Test ServiceExport API validation - valid cases", func() { It("should allow creating API with valid name size", func() { var name = "abc-123456789-123456789-123456789-123456789-123456789-123456789" + // Create the API. serviceExportName := &v1alpha1.ServiceExport{ ObjectMeta: metav1.ObjectMeta{ - Name: name, + Name: name, + Namespace: "testNamespace", }, } Expect(hubClient.Create(ctx, serviceExportName)).Should(Succeed()) @@ -261,10 +293,12 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { It("should allow creating API with valid name starting with alphabet character", func() { var name = "abc-123456789" + // Create the API. serviceExportName := &v1alpha1.ServiceExport{ ObjectMeta: metav1.ObjectMeta{ - Name: name, + Name: name, + Namespace: "testNamespace", }, } Expect(hubClient.Create(ctx, serviceExportName)).Should(Succeed()) @@ -273,10 +307,12 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { It("should allow creating API with valid name starting with numeric character", func() { var name = "123-123456789" + // Create the API. serviceExportName := &v1alpha1.ServiceExport{ ObjectMeta: metav1.ObjectMeta{ - Name: name, + Name: name, + Namespace: "testNamespace", }, } Expect(hubClient.Create(ctx, serviceExportName)).Should(Succeed()) @@ -285,10 +321,12 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { It("should allow creating API with valid name ending with alphabet character", func() { var name = "123456789-abc" + // Create the API. serviceExportName := &v1alpha1.ServiceExport{ ObjectMeta: metav1.ObjectMeta{ - Name: name, + Name: name, + Namespace: "testNamespace", }, } Expect(hubClient.Create(ctx, serviceExportName)).Should(Succeed()) @@ -297,10 +335,12 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { It("should allow creating API with valid name ending with numeric character", func() { var name = "123456789-123" + // Create the API. serviceExportName := &v1alpha1.ServiceExport{ ObjectMeta: metav1.ObjectMeta{ - Name: name, + Name: name, + Namespace: "testNamespace", }, } Expect(hubClient.Create(ctx, serviceExportName)).Should(Succeed()) @@ -311,10 +351,12 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { Context("Test ServiceImport API validation - invalid cases", func() { It("should deny creating API with invalid name size", func() { var name = "abcdef-123456789-123456789-123456789-123456789-123456789-123456789-123456789" + // Create the API. serviceImportName := &v1alpha1.ServiceImport{ ObjectMeta: metav1.ObjectMeta{ - Name: name, + Name: name, + Namespace: "testNamespace", }, } By(fmt.Sprintf("expecting denial of CREATE API %s", name)) @@ -326,10 +368,12 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { It("should deny creating API with invalid name starting with non-alphanumeric character", func() { var name = "-abcdef-123456789-123456789-123456789-123456789-123456789" + // Create the API. serviceImportName := &v1alpha1.ServiceImport{ ObjectMeta: metav1.ObjectMeta{ - Name: name, + Name: name, + Namespace: "testNamespace", }, } By(fmt.Sprintf("expecting denial of CREATE API %s", name)) @@ -341,10 +385,12 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { It("should deny creating API with invalid name ending with non-alphanumeric character", func() { var name = "abcdef-123456789-123456789-123456789-123456789-123456789-" + // Create the API. serviceImportName := &v1alpha1.ServiceImport{ ObjectMeta: metav1.ObjectMeta{ - Name: name, + Name: name, + Namespace: "testNamespace", }, } By(fmt.Sprintf("expecting denial of CREATE API %s", name)) @@ -356,10 +402,12 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { It("should deny creating API with invalid name containing character that is not alphanumeric and not -", func() { var name = "a_bcdef-123456789-123456789-123456789-123456789-123456789-123456789-123456789" + // Create the API. serviceImportName := &v1alpha1.ServiceImport{ ObjectMeta: metav1.ObjectMeta{ - Name: name, + Name: name, + Namespace: "testNamespace", }, } By(fmt.Sprintf("expecting denial of CREATE API %s", name)) @@ -373,10 +421,12 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { Context("Test ServiceImport API validation - valid cases", func() { It("should allow creating API with valid name size", func() { var name = "abc-123456789-123456789-123456789-123456789-123456789-123456789" + // Create the API. serviceImportName := &v1alpha1.ServiceImport{ ObjectMeta: metav1.ObjectMeta{ - Name: name, + Name: name, + Namespace: "testNamespace", }, } Expect(hubClient.Create(ctx, serviceImportName)).Should(Succeed()) @@ -385,10 +435,12 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { It("should allow creating API with valid name starting with alphabet character", func() { var name = "abc-123456789" + // Create the API. serviceImportName := &v1alpha1.ServiceImport{ ObjectMeta: metav1.ObjectMeta{ - Name: name, + Name: name, + Namespace: "testNamespace", }, } Expect(hubClient.Create(ctx, serviceImportName)).Should(Succeed()) @@ -397,10 +449,12 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { It("should allow creating API with valid name starting with numeric character", func() { var name = "123-123456789" + // Create the API. serviceImportName := &v1alpha1.ServiceImport{ ObjectMeta: metav1.ObjectMeta{ - Name: name, + Name: name, + Namespace: "testNamespace", }, } Expect(hubClient.Create(ctx, serviceImportName)).Should(Succeed()) @@ -409,10 +463,12 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { It("should allow creating API with valid name ending with alphabet character", func() { var name = "123456789-abc" + // Create the API. serviceImportName := &v1alpha1.ServiceImport{ ObjectMeta: metav1.ObjectMeta{ - Name: name, + Name: name, + Namespace: "testNamespace", }, } Expect(hubClient.Create(ctx, serviceImportName)).Should(Succeed()) @@ -421,10 +477,12 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { It("should allow creating API with valid name ending with numeric character", func() { var name = "123456789-123" + // Create the API. serviceImportName := &v1alpha1.ServiceImport{ ObjectMeta: metav1.ObjectMeta{ - Name: name, + Name: name, + Namespace: "testNamespace", }, } Expect(hubClient.Create(ctx, serviceImportName)).Should(Succeed()) @@ -435,10 +493,12 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { Context("Test TrafficManagerProfile API validation - invalid cases", func() { It("should deny creating API with invalid name size", func() { var name = "abcdef-123456789-123456789-123456789-123456789-123456789-123456789-123456789" + // Create the API. trafficManagerProfileName := &v1alpha1.TrafficManagerProfile{ ObjectMeta: metav1.ObjectMeta{ - Name: name, + Name: name, + Namespace: "testNamespace", }, Spec: v1alpha1.TrafficManagerProfileSpec{ MonitorConfig: &v1alpha1.MonitorConfig{ @@ -456,10 +516,12 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { It("should deny creating API with invalid name starting with non-alphanumeric character", func() { var name = "-abcdef-123456789-123456789-123456789-123456789-123456789" + // Create the API. trafficManagerProfileName := &v1alpha1.TrafficManagerProfile{ ObjectMeta: metav1.ObjectMeta{ - Name: name, + Name: name, + Namespace: "testNamespace", }, Spec: v1alpha1.TrafficManagerProfileSpec{ MonitorConfig: &v1alpha1.MonitorConfig{ @@ -477,10 +539,12 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { It("should deny creating API with invalid name ending with non-alphanumeric character", func() { var name = "abcdef-123456789-123456789-123456789-123456789-123456789-" + // Create the API. trafficManagerProfileName := &v1alpha1.TrafficManagerProfile{ ObjectMeta: metav1.ObjectMeta{ - Name: name, + Name: name, + Namespace: "testNamespace", }, Spec: v1alpha1.TrafficManagerProfileSpec{ MonitorConfig: &v1alpha1.MonitorConfig{ @@ -498,10 +562,12 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { It("should deny creating API with invalid name containing character that is not alphanumeric and not -", func() { var name = "a_bcdef-123456789-123456789-123456789-123456789-123456789-123456789-123456789" + // Create the API. trafficManagerProfileName := &v1alpha1.TrafficManagerProfile{ ObjectMeta: metav1.ObjectMeta{ - Name: name, + Name: name, + Namespace: "testNamespace", }, Spec: v1alpha1.TrafficManagerProfileSpec{ MonitorConfig: &v1alpha1.MonitorConfig{ @@ -521,10 +587,12 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { Context("Test TrafficManagerProfile API validation - valid cases", func() { It("should allow creating API with valid name size", func() { var name = "abc-123456789-123456789-123456789-123456789-123456789-123456789" + // Create the API. trafficManagerProfileName := &v1alpha1.TrafficManagerProfile{ ObjectMeta: metav1.ObjectMeta{ - Name: name, + Name: name, + Namespace: "testNamespace", }, Spec: v1alpha1.TrafficManagerProfileSpec{ MonitorConfig: &v1alpha1.MonitorConfig{ @@ -539,10 +607,12 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { It("should allow creating API with valid name starting with alphabet character", func() { var name = "abc-123456789" + // Create the API. trafficManagerProfileName := &v1alpha1.TrafficManagerProfile{ ObjectMeta: metav1.ObjectMeta{ - Name: name, + Name: name, + Namespace: "testNamespace", }, Spec: v1alpha1.TrafficManagerProfileSpec{ MonitorConfig: &v1alpha1.MonitorConfig{ @@ -557,10 +627,12 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { It("should allow creating API with valid name starting with numeric character", func() { var name = "123-123456789" + // Create the API. trafficManagerProfileName := &v1alpha1.TrafficManagerProfile{ ObjectMeta: metav1.ObjectMeta{ - Name: name, + Name: name, + Namespace: "testNamespace", }, Spec: v1alpha1.TrafficManagerProfileSpec{ MonitorConfig: &v1alpha1.MonitorConfig{ @@ -575,10 +647,12 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { It("should allow creating API with valid name ending with alphabet character", func() { var name = "123456789-abc" + // Create the API. trafficManagerProfileName := &v1alpha1.TrafficManagerProfile{ ObjectMeta: metav1.ObjectMeta{ - Name: name, + Name: name, + Namespace: "testNamespace", }, Spec: v1alpha1.TrafficManagerProfileSpec{ MonitorConfig: &v1alpha1.MonitorConfig{ @@ -593,10 +667,12 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { It("should allow creating API with valid name ending with numeric character", func() { var name = "123456789-123" + // Create the API. trafficManagerProfileName := &v1alpha1.TrafficManagerProfile{ ObjectMeta: metav1.ObjectMeta{ - Name: name, + Name: name, + Namespace: "testNamespace", }, Spec: v1alpha1.TrafficManagerProfileSpec{ MonitorConfig: &v1alpha1.MonitorConfig{ @@ -613,10 +689,12 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { Context("Test TrafficManagerBackend API validation - invalid cases", func() { It("should deny creating API with invalid name size", func() { var name = "abcdef-123456789-123456789-123456789-123456789-123456789-123456789-123456789" + // Create the API. trafficManagerBackendName := &v1alpha1.TrafficManagerBackend{ ObjectMeta: metav1.ObjectMeta{ - Name: name, + Name: name, + Namespace: "testNamespace", }, Spec: v1alpha1.TrafficManagerBackendSpec{ Profile: v1alpha1.TrafficManagerProfileRef{ @@ -636,10 +714,12 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { It("should deny creating API with invalid name starting with non-alphanumeric character", func() { var name = "-abcdef-123456789-123456789-123456789-123456789-123456789" + // Create the API. trafficManagerBackendName := &v1alpha1.TrafficManagerBackend{ ObjectMeta: metav1.ObjectMeta{ - Name: name, + Name: name, + Namespace: "testNamespace", }, Spec: v1alpha1.TrafficManagerBackendSpec{ Profile: v1alpha1.TrafficManagerProfileRef{ @@ -659,10 +739,12 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { It("should deny creating API with invalid name ending with non-alphanumeric character", func() { var name = "abcdef-123456789-123456789-123456789-123456789-123456789-" + // Create the API. trafficManagerBackendName := &v1alpha1.TrafficManagerBackend{ ObjectMeta: metav1.ObjectMeta{ - Name: name, + Name: name, + Namespace: "testNamespace", }, Spec: v1alpha1.TrafficManagerBackendSpec{ Profile: v1alpha1.TrafficManagerProfileRef{ @@ -682,10 +764,12 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { It("should deny creating API with invalid name containing character that is not alphanumeric and not -", func() { var name = "a_bcdef-123456789-123456789-123456789-123456789-123456789-123456789-123456789" + // Create the API. trafficManagerBackendName := &v1alpha1.TrafficManagerBackend{ ObjectMeta: metav1.ObjectMeta{ - Name: name, + Name: name, + Namespace: "testNamespace", }, Spec: v1alpha1.TrafficManagerBackendSpec{ Profile: v1alpha1.TrafficManagerProfileRef{ @@ -707,10 +791,12 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { Context("Test TrafficManagerBackend API validation - valid cases", func() { It("should allow creating API with valid name size", func() { var name = "abc-123456789-123456789-123456789-123456789-123456789-123456789" + // Create the API. trafficManagerBackendName := &v1alpha1.TrafficManagerBackend{ ObjectMeta: metav1.ObjectMeta{ - Name: name, + Name: name, + Namespace: "testNamespace", }, Spec: v1alpha1.TrafficManagerBackendSpec{ Profile: v1alpha1.TrafficManagerProfileRef{ @@ -727,10 +813,12 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { It("should allow creating API with valid name starting with alphabet character", func() { var name = "abc-123456789" + // Create the API. trafficManagerBackendName := &v1alpha1.TrafficManagerBackend{ ObjectMeta: metav1.ObjectMeta{ - Name: name, + Name: name, + Namespace: "testNamespace", }, Spec: v1alpha1.TrafficManagerBackendSpec{ Profile: v1alpha1.TrafficManagerProfileRef{ @@ -747,10 +835,12 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { It("should allow creating API with valid name starting with numeric character", func() { var name = "123-123456789" + // Create the API. trafficManagerBackendName := &v1alpha1.TrafficManagerBackend{ ObjectMeta: metav1.ObjectMeta{ - Name: name, + Name: name, + Namespace: "testNamespace", }, Spec: v1alpha1.TrafficManagerBackendSpec{ Profile: v1alpha1.TrafficManagerProfileRef{ @@ -767,10 +857,12 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { It("should allow creating API with valid name ending with alphabet character", func() { var name = "123456789-abc" + // Create the API. trafficManagerBackendName := &v1alpha1.TrafficManagerBackend{ ObjectMeta: metav1.ObjectMeta{ - Name: name, + Name: name, + Namespace: "testNamespace", }, Spec: v1alpha1.TrafficManagerBackendSpec{ Profile: v1alpha1.TrafficManagerProfileRef{ @@ -787,10 +879,12 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { It("should allow creating API with valid name ending with numeric character", func() { var name = "123456789-123" + // Create the API. trafficManagerBackendName := &v1alpha1.TrafficManagerBackend{ ObjectMeta: metav1.ObjectMeta{ - Name: name, + Name: name, + Namespace: "testNamespace", }, Spec: v1alpha1.TrafficManagerBackendSpec{ Profile: v1alpha1.TrafficManagerProfileRef{ diff --git a/test/apis/v1alpha1/suite_test.go b/test/apis/v1alpha1/suite_test.go index 6b8719b0..757a30d0 100644 --- a/test/apis/v1alpha1/suite_test.go +++ b/test/apis/v1alpha1/suite_test.go @@ -6,6 +6,9 @@ import ( "path/filepath" "testing" + corev1 "k8s.io/api/core/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + . "github.com/onsi/ginkgo/v2" . "github.com/onsi/gomega" "k8s.io/client-go/kubernetes/scheme" @@ -72,6 +75,14 @@ var _ = BeforeSuite(func() { hubClient = hubCtrlMgr.GetClient() Expect(hubClient).NotTo(BeNil()) + By("Create testing namespace") + var ns = corev1.Namespace{ + ObjectMeta: metav1.ObjectMeta{ + Name: "testNamespace", + }, + } + Expect(hubClient.Create(ctx, &ns)).Should(Succeed()) + go func() { defer GinkgoRecover() err = hubCtrlMgr.Start(ctx) diff --git a/test/e2e/e2e_test.go b/test/e2e/e2e_test.go index da3ad89e..b0fc990b 100644 --- a/test/e2e/e2e_test.go +++ b/test/e2e/e2e_test.go @@ -18,9 +18,10 @@ import ( utilruntime "k8s.io/apimachinery/pkg/util/runtime" clientgoscheme "k8s.io/client-go/kubernetes/scheme" + fleetv1beta1 "go.goms.io/fleet/apis/cluster/v1beta1" + fleetnetv1alpha1 "go.goms.io/fleet-networking/api/v1alpha1" "go.goms.io/fleet-networking/test/e2e/framework" - fleetv1beta1 "go.goms.io/fleet/apis/cluster/v1beta1" ) var ( From d08d860288adb25b512433a4993511ab23fecd35 Mon Sep 17 00:00:00 2001 From: Jamison Tsai Date: Wed, 11 Dec 2024 13:32:15 +1100 Subject: [PATCH 31/66] add namespace in suit_test.go --- .../api_validation_integration_test.go | 90 +++++++++---------- test/apis/v1alpha1/suite_test.go | 2 +- 2 files changed, 46 insertions(+), 46 deletions(-) diff --git a/test/apis/v1alpha1/api_validation_integration_test.go b/test/apis/v1alpha1/api_validation_integration_test.go index 42c105e7..2917171c 100644 --- a/test/apis/v1alpha1/api_validation_integration_test.go +++ b/test/apis/v1alpha1/api_validation_integration_test.go @@ -24,7 +24,7 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { memberClusterServiceName := &v1alpha1.MultiClusterService{ ObjectMeta: metav1.ObjectMeta{ Name: name, - Namespace: "testNamespace", + Namespace: "testnamespace", }, Spec: v1alpha1.MultiClusterServiceSpec{ ServiceImport: v1alpha1.ServiceImportRef{ @@ -47,7 +47,7 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { memberClusterServiceName := &v1alpha1.MultiClusterService{ ObjectMeta: metav1.ObjectMeta{ Name: name, - Namespace: "testNamespace", + Namespace: "testnamespace", }, Spec: v1alpha1.MultiClusterServiceSpec{ ServiceImport: v1alpha1.ServiceImportRef{ @@ -69,7 +69,7 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { memberClusterServiceName := &v1alpha1.MultiClusterService{ ObjectMeta: metav1.ObjectMeta{ Name: name, - Namespace: "testNamespace", + Namespace: "testnamespace", }, Spec: v1alpha1.MultiClusterServiceSpec{ ServiceImport: v1alpha1.ServiceImportRef{ @@ -91,7 +91,7 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { memberClusterServiceName := &v1alpha1.MultiClusterService{ ObjectMeta: metav1.ObjectMeta{ Name: name, - Namespace: "testNamespace", + Namespace: "testnamespace", }, Spec: v1alpha1.MultiClusterServiceSpec{ ServiceImport: v1alpha1.ServiceImportRef{ @@ -115,7 +115,7 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { memberClusterServiceName := &v1alpha1.MultiClusterService{ ObjectMeta: metav1.ObjectMeta{ Name: name, - Namespace: "testNamespace", + Namespace: "testnamespace", }, Spec: v1alpha1.MultiClusterServiceSpec{ ServiceImport: v1alpha1.ServiceImportRef{ @@ -134,7 +134,7 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { memberClusterServiceName := &v1alpha1.MultiClusterService{ ObjectMeta: metav1.ObjectMeta{ Name: name, - Namespace: "testNamespace", + Namespace: "testnamespace", }, Spec: v1alpha1.MultiClusterServiceSpec{ ServiceImport: v1alpha1.ServiceImportRef{ @@ -153,7 +153,7 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { memberClusterServiceName := &v1alpha1.MultiClusterService{ ObjectMeta: metav1.ObjectMeta{ Name: name, - Namespace: "testNamespace", + Namespace: "testnamespace", }, Spec: v1alpha1.MultiClusterServiceSpec{ ServiceImport: v1alpha1.ServiceImportRef{ @@ -172,7 +172,7 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { memberClusterServiceName := &v1alpha1.MultiClusterService{ ObjectMeta: metav1.ObjectMeta{ Name: name, - Namespace: "testNamespace", + Namespace: "testnamespace", }, Spec: v1alpha1.MultiClusterServiceSpec{ ServiceImport: v1alpha1.ServiceImportRef{ @@ -191,7 +191,7 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { memberClusterServiceName := &v1alpha1.MultiClusterService{ ObjectMeta: metav1.ObjectMeta{ Name: name, - Namespace: "testNamespace", + Namespace: "testnamespace", }, Spec: v1alpha1.MultiClusterServiceSpec{ ServiceImport: v1alpha1.ServiceImportRef{ @@ -212,7 +212,7 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { serviceExportName := &v1alpha1.ServiceExport{ ObjectMeta: metav1.ObjectMeta{ Name: name, - Namespace: "testNamespace", + Namespace: "testnamespace", }, } By(fmt.Sprintf("expecting denial of CREATE API %s", name)) @@ -231,7 +231,7 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { serviceExportName := &v1alpha1.ServiceExport{ ObjectMeta: metav1.ObjectMeta{ Name: name, - Namespace: "testNamespace", + Namespace: "testnamespace", }, } By(fmt.Sprintf("expecting denial of CREATE API %s", name)) @@ -248,7 +248,7 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { serviceExportName := &v1alpha1.ServiceExport{ ObjectMeta: metav1.ObjectMeta{ Name: name, - Namespace: "testNamespace", + Namespace: "testnamespace", }, } By(fmt.Sprintf("expecting denial of CREATE API %s", name)) @@ -265,7 +265,7 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { serviceExportName := &v1alpha1.ServiceExport{ ObjectMeta: metav1.ObjectMeta{ Name: name, - Namespace: "testNamespace", + Namespace: "testnamespace", }, } By(fmt.Sprintf("expecting denial of CREATE API %s", name)) @@ -284,7 +284,7 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { serviceExportName := &v1alpha1.ServiceExport{ ObjectMeta: metav1.ObjectMeta{ Name: name, - Namespace: "testNamespace", + Namespace: "testnamespace", }, } Expect(hubClient.Create(ctx, serviceExportName)).Should(Succeed()) @@ -298,7 +298,7 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { serviceExportName := &v1alpha1.ServiceExport{ ObjectMeta: metav1.ObjectMeta{ Name: name, - Namespace: "testNamespace", + Namespace: "testnamespace", }, } Expect(hubClient.Create(ctx, serviceExportName)).Should(Succeed()) @@ -312,7 +312,7 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { serviceExportName := &v1alpha1.ServiceExport{ ObjectMeta: metav1.ObjectMeta{ Name: name, - Namespace: "testNamespace", + Namespace: "testnamespace", }, } Expect(hubClient.Create(ctx, serviceExportName)).Should(Succeed()) @@ -326,7 +326,7 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { serviceExportName := &v1alpha1.ServiceExport{ ObjectMeta: metav1.ObjectMeta{ Name: name, - Namespace: "testNamespace", + Namespace: "testnamespace", }, } Expect(hubClient.Create(ctx, serviceExportName)).Should(Succeed()) @@ -340,7 +340,7 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { serviceExportName := &v1alpha1.ServiceExport{ ObjectMeta: metav1.ObjectMeta{ Name: name, - Namespace: "testNamespace", + Namespace: "testnamespace", }, } Expect(hubClient.Create(ctx, serviceExportName)).Should(Succeed()) @@ -356,7 +356,7 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { serviceImportName := &v1alpha1.ServiceImport{ ObjectMeta: metav1.ObjectMeta{ Name: name, - Namespace: "testNamespace", + Namespace: "testnamespace", }, } By(fmt.Sprintf("expecting denial of CREATE API %s", name)) @@ -373,7 +373,7 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { serviceImportName := &v1alpha1.ServiceImport{ ObjectMeta: metav1.ObjectMeta{ Name: name, - Namespace: "testNamespace", + Namespace: "testnamespace", }, } By(fmt.Sprintf("expecting denial of CREATE API %s", name)) @@ -390,7 +390,7 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { serviceImportName := &v1alpha1.ServiceImport{ ObjectMeta: metav1.ObjectMeta{ Name: name, - Namespace: "testNamespace", + Namespace: "testnamespace", }, } By(fmt.Sprintf("expecting denial of CREATE API %s", name)) @@ -407,7 +407,7 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { serviceImportName := &v1alpha1.ServiceImport{ ObjectMeta: metav1.ObjectMeta{ Name: name, - Namespace: "testNamespace", + Namespace: "testnamespace", }, } By(fmt.Sprintf("expecting denial of CREATE API %s", name)) @@ -426,7 +426,7 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { serviceImportName := &v1alpha1.ServiceImport{ ObjectMeta: metav1.ObjectMeta{ Name: name, - Namespace: "testNamespace", + Namespace: "testnamespace", }, } Expect(hubClient.Create(ctx, serviceImportName)).Should(Succeed()) @@ -440,7 +440,7 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { serviceImportName := &v1alpha1.ServiceImport{ ObjectMeta: metav1.ObjectMeta{ Name: name, - Namespace: "testNamespace", + Namespace: "testnamespace", }, } Expect(hubClient.Create(ctx, serviceImportName)).Should(Succeed()) @@ -454,7 +454,7 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { serviceImportName := &v1alpha1.ServiceImport{ ObjectMeta: metav1.ObjectMeta{ Name: name, - Namespace: "testNamespace", + Namespace: "testnamespace", }, } Expect(hubClient.Create(ctx, serviceImportName)).Should(Succeed()) @@ -468,7 +468,7 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { serviceImportName := &v1alpha1.ServiceImport{ ObjectMeta: metav1.ObjectMeta{ Name: name, - Namespace: "testNamespace", + Namespace: "testnamespace", }, } Expect(hubClient.Create(ctx, serviceImportName)).Should(Succeed()) @@ -482,7 +482,7 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { serviceImportName := &v1alpha1.ServiceImport{ ObjectMeta: metav1.ObjectMeta{ Name: name, - Namespace: "testNamespace", + Namespace: "testnamespace", }, } Expect(hubClient.Create(ctx, serviceImportName)).Should(Succeed()) @@ -498,7 +498,7 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { trafficManagerProfileName := &v1alpha1.TrafficManagerProfile{ ObjectMeta: metav1.ObjectMeta{ Name: name, - Namespace: "testNamespace", + Namespace: "testnamespace", }, Spec: v1alpha1.TrafficManagerProfileSpec{ MonitorConfig: &v1alpha1.MonitorConfig{ @@ -521,7 +521,7 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { trafficManagerProfileName := &v1alpha1.TrafficManagerProfile{ ObjectMeta: metav1.ObjectMeta{ Name: name, - Namespace: "testNamespace", + Namespace: "testnamespace", }, Spec: v1alpha1.TrafficManagerProfileSpec{ MonitorConfig: &v1alpha1.MonitorConfig{ @@ -544,7 +544,7 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { trafficManagerProfileName := &v1alpha1.TrafficManagerProfile{ ObjectMeta: metav1.ObjectMeta{ Name: name, - Namespace: "testNamespace", + Namespace: "testnamespace", }, Spec: v1alpha1.TrafficManagerProfileSpec{ MonitorConfig: &v1alpha1.MonitorConfig{ @@ -567,7 +567,7 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { trafficManagerProfileName := &v1alpha1.TrafficManagerProfile{ ObjectMeta: metav1.ObjectMeta{ Name: name, - Namespace: "testNamespace", + Namespace: "testnamespace", }, Spec: v1alpha1.TrafficManagerProfileSpec{ MonitorConfig: &v1alpha1.MonitorConfig{ @@ -592,7 +592,7 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { trafficManagerProfileName := &v1alpha1.TrafficManagerProfile{ ObjectMeta: metav1.ObjectMeta{ Name: name, - Namespace: "testNamespace", + Namespace: "testnamespace", }, Spec: v1alpha1.TrafficManagerProfileSpec{ MonitorConfig: &v1alpha1.MonitorConfig{ @@ -612,7 +612,7 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { trafficManagerProfileName := &v1alpha1.TrafficManagerProfile{ ObjectMeta: metav1.ObjectMeta{ Name: name, - Namespace: "testNamespace", + Namespace: "testnamespace", }, Spec: v1alpha1.TrafficManagerProfileSpec{ MonitorConfig: &v1alpha1.MonitorConfig{ @@ -632,7 +632,7 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { trafficManagerProfileName := &v1alpha1.TrafficManagerProfile{ ObjectMeta: metav1.ObjectMeta{ Name: name, - Namespace: "testNamespace", + Namespace: "testnamespace", }, Spec: v1alpha1.TrafficManagerProfileSpec{ MonitorConfig: &v1alpha1.MonitorConfig{ @@ -652,7 +652,7 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { trafficManagerProfileName := &v1alpha1.TrafficManagerProfile{ ObjectMeta: metav1.ObjectMeta{ Name: name, - Namespace: "testNamespace", + Namespace: "testnamespace", }, Spec: v1alpha1.TrafficManagerProfileSpec{ MonitorConfig: &v1alpha1.MonitorConfig{ @@ -672,7 +672,7 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { trafficManagerProfileName := &v1alpha1.TrafficManagerProfile{ ObjectMeta: metav1.ObjectMeta{ Name: name, - Namespace: "testNamespace", + Namespace: "testnamespace", }, Spec: v1alpha1.TrafficManagerProfileSpec{ MonitorConfig: &v1alpha1.MonitorConfig{ @@ -694,7 +694,7 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { trafficManagerBackendName := &v1alpha1.TrafficManagerBackend{ ObjectMeta: metav1.ObjectMeta{ Name: name, - Namespace: "testNamespace", + Namespace: "testnamespace", }, Spec: v1alpha1.TrafficManagerBackendSpec{ Profile: v1alpha1.TrafficManagerProfileRef{ @@ -719,7 +719,7 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { trafficManagerBackendName := &v1alpha1.TrafficManagerBackend{ ObjectMeta: metav1.ObjectMeta{ Name: name, - Namespace: "testNamespace", + Namespace: "testnamespace", }, Spec: v1alpha1.TrafficManagerBackendSpec{ Profile: v1alpha1.TrafficManagerProfileRef{ @@ -744,7 +744,7 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { trafficManagerBackendName := &v1alpha1.TrafficManagerBackend{ ObjectMeta: metav1.ObjectMeta{ Name: name, - Namespace: "testNamespace", + Namespace: "testnamespace", }, Spec: v1alpha1.TrafficManagerBackendSpec{ Profile: v1alpha1.TrafficManagerProfileRef{ @@ -769,7 +769,7 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { trafficManagerBackendName := &v1alpha1.TrafficManagerBackend{ ObjectMeta: metav1.ObjectMeta{ Name: name, - Namespace: "testNamespace", + Namespace: "testnamespace", }, Spec: v1alpha1.TrafficManagerBackendSpec{ Profile: v1alpha1.TrafficManagerProfileRef{ @@ -796,7 +796,7 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { trafficManagerBackendName := &v1alpha1.TrafficManagerBackend{ ObjectMeta: metav1.ObjectMeta{ Name: name, - Namespace: "testNamespace", + Namespace: "testnamespace", }, Spec: v1alpha1.TrafficManagerBackendSpec{ Profile: v1alpha1.TrafficManagerProfileRef{ @@ -818,7 +818,7 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { trafficManagerBackendName := &v1alpha1.TrafficManagerBackend{ ObjectMeta: metav1.ObjectMeta{ Name: name, - Namespace: "testNamespace", + Namespace: "testnamespace", }, Spec: v1alpha1.TrafficManagerBackendSpec{ Profile: v1alpha1.TrafficManagerProfileRef{ @@ -840,7 +840,7 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { trafficManagerBackendName := &v1alpha1.TrafficManagerBackend{ ObjectMeta: metav1.ObjectMeta{ Name: name, - Namespace: "testNamespace", + Namespace: "testnamespace", }, Spec: v1alpha1.TrafficManagerBackendSpec{ Profile: v1alpha1.TrafficManagerProfileRef{ @@ -862,7 +862,7 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { trafficManagerBackendName := &v1alpha1.TrafficManagerBackend{ ObjectMeta: metav1.ObjectMeta{ Name: name, - Namespace: "testNamespace", + Namespace: "testnamespace", }, Spec: v1alpha1.TrafficManagerBackendSpec{ Profile: v1alpha1.TrafficManagerProfileRef{ @@ -884,7 +884,7 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { trafficManagerBackendName := &v1alpha1.TrafficManagerBackend{ ObjectMeta: metav1.ObjectMeta{ Name: name, - Namespace: "testNamespace", + Namespace: "testnamespace", }, Spec: v1alpha1.TrafficManagerBackendSpec{ Profile: v1alpha1.TrafficManagerProfileRef{ diff --git a/test/apis/v1alpha1/suite_test.go b/test/apis/v1alpha1/suite_test.go index 757a30d0..8db6d416 100644 --- a/test/apis/v1alpha1/suite_test.go +++ b/test/apis/v1alpha1/suite_test.go @@ -78,7 +78,7 @@ var _ = BeforeSuite(func() { By("Create testing namespace") var ns = corev1.Namespace{ ObjectMeta: metav1.ObjectMeta{ - Name: "testNamespace", + Name: "testnamespace", }, } Expect(hubClient.Create(ctx, &ns)).Should(Succeed()) From 391e833da84ebfbb4e84a5c67222b1a479ba2c4a Mon Sep 17 00:00:00 2001 From: Jamison Tsai Date: Wed, 11 Dec 2024 17:49:08 +1100 Subject: [PATCH 32/66] fix directory for integration test --- Makefile | 2 +- integration_coverage.xml | 140 +++++++++++++++++++-------------------- 2 files changed, 71 insertions(+), 71 deletions(-) diff --git a/Makefile b/Makefile index 500cc50d..72b498b0 100644 --- a/Makefile +++ b/Makefile @@ -111,7 +111,7 @@ local-unit-test: $(ENVTEST) ## Run tests. .PHONY: integration-test integration-test: $(ENVTEST) ## Run integration tests. CGO_ENABLED=1 KUBEBUILDER_ASSETS="$(shell $(ENVTEST) use $(ENVTEST_K8S_VERSION) -p path)" \ - go test ./test/... -race -coverprofile=integration_coverage.xml -covermode=atomic + go test ./test/apis/... -race -coverprofile=integration_coverage.xml -covermode=atomic .PHONY: e2e-setup e2e-setup: diff --git a/integration_coverage.xml b/integration_coverage.xml index 0899c9b6..11b8427f 100644 --- a/integration_coverage.xml +++ b/integration_coverage.xml @@ -1,64 +1,4 @@ mode: atomic -go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/endpoint.go:29.92,40.16 3 0 -go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/endpoint.go:40.16,42.3 1 0 -go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/endpoint.go:43.2,43.48 1 0 -go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/endpoint.go:47.315,48.51 1 0 -go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/endpoint.go:48.51,51.3 2 0 -go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/endpoint.go:52.2,52.192 1 0 -go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/endpoint.go:52.192,53.46 1 0 -go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/endpoint.go:53.46,56.4 2 0 -go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/endpoint.go:56.9,56.54 1 0 -go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/endpoint.go:56.54,59.4 2 0 -go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/endpoint.go:60.3,61.53 2 0 -go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/endpoint.go:62.8,63.67 1 0 -go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/endpoint.go:63.67,66.4 1 0 -go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/endpoint.go:66.9,68.4 1 0 -go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/endpoint.go:70.2,70.22 1 0 -go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/endpoint.go:73.369,74.51 1 0 -go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/endpoint.go:74.51,77.3 2 0 -go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/endpoint.go:78.2,78.192 1 0 -go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/endpoint.go:78.192,79.54 1 0 -go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/endpoint.go:79.54,82.4 2 0 -go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/endpoint.go:82.9,82.65 1 0 -go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/endpoint.go:82.65,85.4 2 0 -go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/endpoint.go:87.3,98.53 2 0 -go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/endpoint.go:99.8,100.67 1 0 -go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/endpoint.go:100.67,103.4 1 0 -go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/endpoint.go:103.9,105.4 1 0 -go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/endpoint.go:107.2,107.22 1 0 -go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/profile.go:59.89,71.16 3 0 -go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/profile.go:71.16,73.3 1 0 -go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/profile.go:74.2,74.47 1 0 -go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/profile.go:78.237,79.51 1 0 -go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/profile.go:79.51,82.3 2 0 -go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/profile.go:83.2,83.21 1 0 -go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/profile.go:84.97,113.51 3 0 -go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/profile.go:113.51,131.4 1 0 -go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/profile.go:131.9,131.69 1 0 -go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/profile.go:131.69,137.4 1 0 -go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/profile.go:138.3,138.52 1 0 -go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/profile.go:139.41,145.52 2 0 -go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/profile.go:146.33,147.77 1 0 -go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/profile.go:148.10,149.65 1 0 -go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/profile.go:151.2,151.22 1 0 -go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/profile.go:155.308,156.51 1 0 -go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/profile.go:156.51,159.3 2 0 -go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/profile.go:160.2,160.21 1 0 -go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/profile.go:161.30,162.60 1 0 -go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/profile.go:163.36,164.82 1 0 -go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/profile.go:165.31,166.73 1 0 -go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/profile.go:167.24,168.131 1 0 -go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/profile.go:168.131,169.128 1 0 -go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/profile.go:169.128,172.5 2 0 -go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/profile.go:174.3,191.52 2 0 -go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/profile.go:192.10,193.69 1 0 -go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/profile.go:195.2,195.22 1 0 -go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/profile.go:199.246,200.51 1 0 -go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/profile.go:200.51,203.3 2 0 -go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/profile.go:204.2,204.21 1 0 -go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/profile.go:205.24,207.52 2 0 -go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/profile.go:208.10,209.60 1 0 -go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/profile.go:211.2,211.22 1 0 go.goms.io/fleet-networking/test/e2e/framework/cluster.go:32.72,37.52 2 0 go.goms.io/fleet-networking/test/e2e/framework/cluster.go:37.52,39.3 1 0 go.goms.io/fleet-networking/test/e2e/framework/cluster.go:40.2,40.21 1 0 @@ -226,6 +166,66 @@ go.goms.io/fleet-networking/test/common/trafficmanager/validator/profile.go:62.1 go.goms.io/fleet-networking/test/common/trafficmanager/validator/profile.go:63.33,65.72 2 0 go.goms.io/fleet-networking/test/common/trafficmanager/validator/profile.go:65.72,67.4 1 0 go.goms.io/fleet-networking/test/common/trafficmanager/validator/profile.go:68.3,68.13 1 0 +go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/endpoint.go:29.92,40.16 3 0 +go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/endpoint.go:40.16,42.3 1 0 +go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/endpoint.go:43.2,43.48 1 0 +go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/endpoint.go:47.315,48.51 1 0 +go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/endpoint.go:48.51,51.3 2 0 +go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/endpoint.go:52.2,52.192 1 0 +go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/endpoint.go:52.192,53.46 1 0 +go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/endpoint.go:53.46,56.4 2 0 +go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/endpoint.go:56.9,56.54 1 0 +go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/endpoint.go:56.54,59.4 2 0 +go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/endpoint.go:60.3,61.53 2 0 +go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/endpoint.go:62.8,63.67 1 0 +go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/endpoint.go:63.67,66.4 1 0 +go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/endpoint.go:66.9,68.4 1 0 +go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/endpoint.go:70.2,70.22 1 0 +go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/endpoint.go:73.369,74.51 1 0 +go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/endpoint.go:74.51,77.3 2 0 +go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/endpoint.go:78.2,78.192 1 0 +go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/endpoint.go:78.192,79.54 1 0 +go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/endpoint.go:79.54,82.4 2 0 +go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/endpoint.go:82.9,82.65 1 0 +go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/endpoint.go:82.65,85.4 2 0 +go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/endpoint.go:87.3,98.53 2 0 +go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/endpoint.go:99.8,100.67 1 0 +go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/endpoint.go:100.67,103.4 1 0 +go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/endpoint.go:103.9,105.4 1 0 +go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/endpoint.go:107.2,107.22 1 0 +go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/profile.go:59.89,71.16 3 0 +go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/profile.go:71.16,73.3 1 0 +go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/profile.go:74.2,74.47 1 0 +go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/profile.go:78.237,79.51 1 0 +go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/profile.go:79.51,82.3 2 0 +go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/profile.go:83.2,83.21 1 0 +go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/profile.go:84.97,113.51 3 0 +go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/profile.go:113.51,131.4 1 0 +go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/profile.go:131.9,131.69 1 0 +go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/profile.go:131.69,137.4 1 0 +go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/profile.go:138.3,138.52 1 0 +go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/profile.go:139.41,145.52 2 0 +go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/profile.go:146.33,147.77 1 0 +go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/profile.go:148.10,149.65 1 0 +go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/profile.go:151.2,151.22 1 0 +go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/profile.go:155.308,156.51 1 0 +go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/profile.go:156.51,159.3 2 0 +go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/profile.go:160.2,160.21 1 0 +go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/profile.go:161.30,162.60 1 0 +go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/profile.go:163.36,164.82 1 0 +go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/profile.go:165.31,166.73 1 0 +go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/profile.go:167.24,168.131 1 0 +go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/profile.go:168.131,169.128 1 0 +go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/profile.go:169.128,172.5 2 0 +go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/profile.go:174.3,191.52 2 0 +go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/profile.go:192.10,193.69 1 0 +go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/profile.go:195.2,195.22 1 0 +go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/profile.go:199.246,200.51 1 0 +go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/profile.go:200.51,203.3 2 0 +go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/profile.go:204.2,204.21 1 0 +go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/profile.go:205.24,207.52 2 0 +go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/profile.go:208.10,209.60 1 0 +go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/profile.go:211.2,211.22 1 0 go.goms.io/fleet-networking/test/e2e/framework/cluster.go:32.72,37.52 2 1 go.goms.io/fleet-networking/test/e2e/framework/cluster.go:37.52,39.3 1 1 go.goms.io/fleet-networking/test/e2e/framework/cluster.go:40.2,40.21 1 0 @@ -233,7 +233,7 @@ go.goms.io/fleet-networking/test/e2e/framework/cluster.go:44.103,49.78 2 0 go.goms.io/fleet-networking/test/e2e/framework/cluster.go:49.78,51.3 1 0 go.goms.io/fleet-networking/test/e2e/framework/cluster.go:52.2,52.21 1 0 go.goms.io/fleet-networking/test/e2e/framework/cluster.go:56.33,58.2 1 0 -go.goms.io/fleet-networking/test/e2e/framework/cluster.go:61.42,63.2 1 1 +go.goms.io/fleet-networking/test/e2e/framework/cluster.go:61.42,63.2 1 0 go.goms.io/fleet-networking/test/e2e/framework/cluster.go:66.56,68.2 1 0 go.goms.io/fleet-networking/test/e2e/framework/cluster.go:71.127,75.83 4 0 go.goms.io/fleet-networking/test/e2e/framework/cluster.go:75.83,77.3 1 0 @@ -274,11 +274,11 @@ go.goms.io/fleet-networking/test/e2e/framework/fleet.go:21.45,23.2 1 0 go.goms.io/fleet-networking/test/e2e/framework/fleet.go:26.39,28.2 1 0 go.goms.io/fleet-networking/test/e2e/framework/fleet.go:31.39,33.2 1 0 go.goms.io/fleet-networking/test/e2e/framework/fleet.go:36.88,42.2 1 0 -go.goms.io/fleet-networking/test/e2e/framework/objects.go:13.47,19.2 1 0 -go.goms.io/fleet-networking/test/e2e/framework/objects.go:22.109,39.2 1 0 +go.goms.io/fleet-networking/test/e2e/framework/objects.go:13.47,19.2 1 80 +go.goms.io/fleet-networking/test/e2e/framework/objects.go:22.109,39.2 1 80 go.goms.io/fleet-networking/test/e2e/framework/objects.go:42.76,49.2 1 0 -go.goms.io/fleet-networking/test/e2e/framework/objects.go:52.141,74.2 1 0 -go.goms.io/fleet-networking/test/e2e/framework/objects.go:77.97,89.2 1 0 +go.goms.io/fleet-networking/test/e2e/framework/objects.go:52.141,74.2 1 80 +go.goms.io/fleet-networking/test/e2e/framework/objects.go:77.97,89.2 1 80 go.goms.io/fleet-networking/test/e2e/framework/prometheus.go:23.88,28.16 2 0 go.goms.io/fleet-networking/test/e2e/framework/prometheus.go:28.16,30.3 1 0 go.goms.io/fleet-networking/test/e2e/framework/prometheus.go:31.2,31.33 1 0 @@ -362,7 +362,7 @@ go.goms.io/fleet-networking/test/e2e/framework/cluster.go:44.103,49.78 2 0 go.goms.io/fleet-networking/test/e2e/framework/cluster.go:49.78,51.3 1 0 go.goms.io/fleet-networking/test/e2e/framework/cluster.go:52.2,52.21 1 0 go.goms.io/fleet-networking/test/e2e/framework/cluster.go:56.33,58.2 1 0 -go.goms.io/fleet-networking/test/e2e/framework/cluster.go:61.42,63.2 1 0 +go.goms.io/fleet-networking/test/e2e/framework/cluster.go:61.42,63.2 1 1 go.goms.io/fleet-networking/test/e2e/framework/cluster.go:66.56,68.2 1 0 go.goms.io/fleet-networking/test/e2e/framework/cluster.go:71.127,75.83 4 0 go.goms.io/fleet-networking/test/e2e/framework/cluster.go:75.83,77.3 1 0 @@ -403,11 +403,11 @@ go.goms.io/fleet-networking/test/e2e/framework/fleet.go:21.45,23.2 1 0 go.goms.io/fleet-networking/test/e2e/framework/fleet.go:26.39,28.2 1 0 go.goms.io/fleet-networking/test/e2e/framework/fleet.go:31.39,33.2 1 0 go.goms.io/fleet-networking/test/e2e/framework/fleet.go:36.88,42.2 1 0 -go.goms.io/fleet-networking/test/e2e/framework/objects.go:13.47,19.2 1 80 -go.goms.io/fleet-networking/test/e2e/framework/objects.go:22.109,39.2 1 80 +go.goms.io/fleet-networking/test/e2e/framework/objects.go:13.47,19.2 1 0 +go.goms.io/fleet-networking/test/e2e/framework/objects.go:22.109,39.2 1 0 go.goms.io/fleet-networking/test/e2e/framework/objects.go:42.76,49.2 1 0 -go.goms.io/fleet-networking/test/e2e/framework/objects.go:52.141,74.2 1 80 -go.goms.io/fleet-networking/test/e2e/framework/objects.go:77.97,89.2 1 80 +go.goms.io/fleet-networking/test/e2e/framework/objects.go:52.141,74.2 1 0 +go.goms.io/fleet-networking/test/e2e/framework/objects.go:77.97,89.2 1 0 go.goms.io/fleet-networking/test/e2e/framework/prometheus.go:23.88,28.16 2 0 go.goms.io/fleet-networking/test/e2e/framework/prometheus.go:28.16,30.3 1 0 go.goms.io/fleet-networking/test/e2e/framework/prometheus.go:31.2,31.33 1 0 From 5a05046a1fdf9b158a7ba55c3d7a1439817ee7f9 Mon Sep 17 00:00:00 2001 From: Jamison Tsai Date: Wed, 11 Dec 2024 18:06:03 +1100 Subject: [PATCH 33/66] update integration tests to use names longer than 63 --- test/apis/v1alpha1/api_validation_integration_test.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/apis/v1alpha1/api_validation_integration_test.go b/test/apis/v1alpha1/api_validation_integration_test.go index 2917171c..a2a2cd25 100644 --- a/test/apis/v1alpha1/api_validation_integration_test.go +++ b/test/apis/v1alpha1/api_validation_integration_test.go @@ -225,7 +225,7 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { }) It("should deny creating API with invalid name starting with non-alphanumeric character", func() { - var name = "-abcdef-123456789-123456789-123456789-123456789-123456789" + var name = "-abcdef-123456789-123456789-123456789-123456789-123456789-123456789" // Create the API. serviceExportName := &v1alpha1.ServiceExport{ @@ -242,7 +242,7 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { }) It("should deny creating API with invalid name ending with non-alphanumeric character", func() { - var name = "abcdef-123456789-123456789-123456789-123456789-123456789-" + var name = "abcdef-abcdef-123456789-123456789-123456789-123456789-123456789-" // Create the API. serviceExportName := &v1alpha1.ServiceExport{ From 638c5c63dd49642112a0093a4c24292cd354e73c Mon Sep 17 00:00:00 2001 From: Jamison Tsai Date: Wed, 11 Dec 2024 20:39:58 +1100 Subject: [PATCH 34/66] make names valid --- test/apis/v1alpha1/api_validation_integration_test.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/apis/v1alpha1/api_validation_integration_test.go b/test/apis/v1alpha1/api_validation_integration_test.go index a2a2cd25..e039106d 100644 --- a/test/apis/v1alpha1/api_validation_integration_test.go +++ b/test/apis/v1alpha1/api_validation_integration_test.go @@ -225,7 +225,7 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { }) It("should deny creating API with invalid name starting with non-alphanumeric character", func() { - var name = "-abcdef-123456789-123456789-123456789-123456789-123456789-123456789" + var name = "a-abcdef-123456789-123456789-123456789-123456789-123456789-123456789" // Create the API. serviceExportName := &v1alpha1.ServiceExport{ @@ -242,7 +242,7 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { }) It("should deny creating API with invalid name ending with non-alphanumeric character", func() { - var name = "abcdef-abcdef-123456789-123456789-123456789-123456789-123456789-" + var name = "abcdef-abcdef-123456789-123456789-123456789-123456789-123456789-a" // Create the API. serviceExportName := &v1alpha1.ServiceExport{ From 9a0c3a90a10f1a55bfc1000ff9e5f650510cad5a Mon Sep 17 00:00:00 2001 From: Jamison Tsai Date: Wed, 11 Dec 2024 20:56:24 +1100 Subject: [PATCH 35/66] fix error message substring check for invalid RFC 1123 names --- .../api_validation_integration_test.go | 22 +++++++++---------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/test/apis/v1alpha1/api_validation_integration_test.go b/test/apis/v1alpha1/api_validation_integration_test.go index e039106d..6e32a952 100644 --- a/test/apis/v1alpha1/api_validation_integration_test.go +++ b/test/apis/v1alpha1/api_validation_integration_test.go @@ -225,7 +225,7 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { }) It("should deny creating API with invalid name starting with non-alphanumeric character", func() { - var name = "a-abcdef-123456789-123456789-123456789-123456789-123456789-123456789" + var name = "-abcdef-123456789-123456789-123456789-123456789-123456789-123456789" // Create the API. serviceExportName := &v1alpha1.ServiceExport{ @@ -238,11 +238,11 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { var err = hubClient.Create(ctx, serviceExportName) var statusErr *k8serrors.StatusError Expect(errors.As(err, &statusErr)).To(BeTrue(), fmt.Sprintf("Create API call produced error %s. Error type wanted is %s.", reflect.TypeOf(err), reflect.TypeOf(&k8serrors.StatusError{}))) - Expect(statusErr.Status().Message).Should(ContainSubstring("metadata.name max length is 63")) + Expect(statusErr.Status().Message).Should(ContainSubstring("lowercase RFC 1123 subdomain must consist of lower case alphanumeric characters, '-' or '.', and must start and end with an alphanumeric character")) }) It("should deny creating API with invalid name ending with non-alphanumeric character", func() { - var name = "abcdef-abcdef-123456789-123456789-123456789-123456789-123456789-a" + var name = "abcdef-abcdef-123456789-123456789-123456789-123456789-123456789-" // Create the API. serviceExportName := &v1alpha1.ServiceExport{ @@ -255,7 +255,7 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { var err = hubClient.Create(ctx, serviceExportName) var statusErr *k8serrors.StatusError Expect(errors.As(err, &statusErr)).To(BeTrue(), fmt.Sprintf("Create API call produced error %s. Error type wanted is %s.", reflect.TypeOf(err), reflect.TypeOf(&k8serrors.StatusError{}))) - Expect(statusErr.Status().Message).Should(ContainSubstring("metadata.name max length is 63")) + Expect(statusErr.Status().Message).Should(ContainSubstring("lowercase RFC 1123 subdomain must consist of lower case alphanumeric characters, '-' or '.', and must start and end with an alphanumeric character")) }) It("should deny creating API with invalid name containing character that is not alphanumeric and not -", func() { @@ -272,7 +272,7 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { var err = hubClient.Create(ctx, serviceExportName) var statusErr *k8serrors.StatusError Expect(errors.As(err, &statusErr)).To(BeTrue(), fmt.Sprintf("Create API call produced error %s. Error type wanted is %s.", reflect.TypeOf(err), reflect.TypeOf(&k8serrors.StatusError{}))) - Expect(statusErr.Status().Message).Should(ContainSubstring("metadata.name max length is 63")) + Expect(statusErr.Status().Message).Should(ContainSubstring("lowercase RFC 1123 subdomain must consist of lower case alphanumeric characters, '-' or '.', and must start and end with an alphanumeric character")) }) }) @@ -380,7 +380,7 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { var err = hubClient.Create(ctx, serviceImportName) var statusErr *k8serrors.StatusError Expect(errors.As(err, &statusErr)).To(BeTrue(), fmt.Sprintf("Create API call produced error %s. Error type wanted is %s.", reflect.TypeOf(err), reflect.TypeOf(&k8serrors.StatusError{}))) - Expect(statusErr.Status().Message).Should(ContainSubstring("metadata.name max length is 63")) + Expect(statusErr.Status().Message).Should(ContainSubstring("lowercase RFC 1123 subdomain must consist of lower case alphanumeric characters, '-' or '.', and must start and end with an alphanumeric character")) }) It("should deny creating API with invalid name ending with non-alphanumeric character", func() { @@ -397,7 +397,7 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { var err = hubClient.Create(ctx, serviceImportName) var statusErr *k8serrors.StatusError Expect(errors.As(err, &statusErr)).To(BeTrue(), fmt.Sprintf("Create API call produced error %s. Error type wanted is %s.", reflect.TypeOf(err), reflect.TypeOf(&k8serrors.StatusError{}))) - Expect(statusErr.Status().Message).Should(ContainSubstring("metadata.name max length is 63")) + Expect(statusErr.Status().Message).Should(ContainSubstring("lowercase RFC 1123 subdomain must consist of lower case alphanumeric characters, '-' or '.', and must start and end with an alphanumeric character")) }) It("should deny creating API with invalid name containing character that is not alphanumeric and not -", func() { @@ -534,7 +534,7 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { var err = hubClient.Create(ctx, trafficManagerProfileName) var statusErr *k8serrors.StatusError Expect(errors.As(err, &statusErr)).To(BeTrue(), fmt.Sprintf("Create API call produced error %s. Error type wanted is %s.", reflect.TypeOf(err), reflect.TypeOf(&k8serrors.StatusError{}))) - Expect(statusErr.Status().Message).Should(ContainSubstring("metadata.name max length is 63")) + Expect(statusErr.Status().Message).Should(ContainSubstring("lowercase RFC 1123 subdomain must consist of lower case alphanumeric characters, '-' or '.', and must start and end with an alphanumeric character")) }) It("should deny creating API with invalid name ending with non-alphanumeric character", func() { @@ -557,7 +557,7 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { var err = hubClient.Create(ctx, trafficManagerProfileName) var statusErr *k8serrors.StatusError Expect(errors.As(err, &statusErr)).To(BeTrue(), fmt.Sprintf("Create API call produced error %s. Error type wanted is %s.", reflect.TypeOf(err), reflect.TypeOf(&k8serrors.StatusError{}))) - Expect(statusErr.Status().Message).Should(ContainSubstring("metadata.name max length is 63")) + Expect(statusErr.Status().Message).Should(ContainSubstring("lowercase RFC 1123 subdomain must consist of lower case alphanumeric characters, '-' or '.', and must start and end with an alphanumeric character")) }) It("should deny creating API with invalid name containing character that is not alphanumeric and not -", func() { @@ -734,7 +734,7 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { var err = hubClient.Create(ctx, trafficManagerBackendName) var statusErr *k8serrors.StatusError Expect(errors.As(err, &statusErr)).To(BeTrue(), fmt.Sprintf("Create API call produced error %s. Error type wanted is %s.", reflect.TypeOf(err), reflect.TypeOf(&k8serrors.StatusError{}))) - Expect(statusErr.Status().Message).Should(ContainSubstring("metadata.name max length is 63")) + Expect(statusErr.Status().Message).Should(ContainSubstring("lowercase RFC 1123 subdomain must consist of lower case alphanumeric characters, '-' or '.', and must start and end with an alphanumeric character")) }) It("should deny creating API with invalid name ending with non-alphanumeric character", func() { @@ -759,7 +759,7 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { var err = hubClient.Create(ctx, trafficManagerBackendName) var statusErr *k8serrors.StatusError Expect(errors.As(err, &statusErr)).To(BeTrue(), fmt.Sprintf("Create API call produced error %s. Error type wanted is %s.", reflect.TypeOf(err), reflect.TypeOf(&k8serrors.StatusError{}))) - Expect(statusErr.Status().Message).Should(ContainSubstring("metadata.name max length is 63")) + Expect(statusErr.Status().Message).Should(ContainSubstring("lowercase RFC 1123 subdomain must consist of lower case alphanumeric characters, '-' or '.', and must start and end with an alphanumeric character")) }) It("should deny creating API with invalid name containing character that is not alphanumeric and not -", func() { From 96d7da97cc08c584d59a385ff931221e3aed0295 Mon Sep 17 00:00:00 2001 From: Jamison Tsai Date: Wed, 11 Dec 2024 21:21:12 +1100 Subject: [PATCH 36/66] fix naming to multiClusterServiceName --- .../api_validation_integration_test.go | 46 +++++++++---------- 1 file changed, 23 insertions(+), 23 deletions(-) diff --git a/test/apis/v1alpha1/api_validation_integration_test.go b/test/apis/v1alpha1/api_validation_integration_test.go index 6e32a952..f416bbd4 100644 --- a/test/apis/v1alpha1/api_validation_integration_test.go +++ b/test/apis/v1alpha1/api_validation_integration_test.go @@ -21,7 +21,7 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { var name = "abcdef-123456789-123456789-123456789-123456789-123456789-123456789-123456789" // Create the API. - memberClusterServiceName := &v1alpha1.MultiClusterService{ + multiClusterServiceName := &v1alpha1.MultiClusterService{ ObjectMeta: metav1.ObjectMeta{ Name: name, Namespace: "testnamespace", @@ -33,7 +33,7 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { }, } By(fmt.Sprintf("expecting denial of CREATE API %s", name)) - var err = hubClient.Create(ctx, memberClusterServiceName) + var err = hubClient.Create(ctx, multiClusterServiceName) var statusErr *k8serrors.StatusError fmt.Print(err) Expect(errors.As(err, &statusErr)).To(BeTrue(), fmt.Sprintf("Create API call produced error %s. Error type wanted is %s.", reflect.TypeOf(err), reflect.TypeOf(&k8serrors.StatusError{}))) @@ -44,7 +44,7 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { var name = "-abcdef-123456789-123456789-123456789-123456789-123456789" // Create the API. - memberClusterServiceName := &v1alpha1.MultiClusterService{ + multiClusterServiceName := &v1alpha1.MultiClusterService{ ObjectMeta: metav1.ObjectMeta{ Name: name, Namespace: "testnamespace", @@ -56,7 +56,7 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { }, } By(fmt.Sprintf("expecting denial of CREATE API %s", name)) - err := hubClient.Create(ctx, memberClusterServiceName) + err := hubClient.Create(ctx, multiClusterServiceName) var statusErr *k8serrors.StatusError Expect(errors.As(err, &statusErr)).To(BeTrue(), fmt.Sprintf("Create API call produced error %s. Error type wanted is %s.", reflect.TypeOf(err), reflect.TypeOf(&k8serrors.StatusError{}))) Expect(statusErr.Status().Message).Should(ContainSubstring("a lowercase RFC 1123 subdomain")) @@ -66,7 +66,7 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { var name = "abcdef-123456789-123456789-123456789-123456789-123456789-" // Create the API. - memberClusterServiceName := &v1alpha1.MultiClusterService{ + multiClusterServiceName := &v1alpha1.MultiClusterService{ ObjectMeta: metav1.ObjectMeta{ Name: name, Namespace: "testnamespace", @@ -78,7 +78,7 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { }, } By(fmt.Sprintf("expecting denial of CREATE API %s", name)) - err := hubClient.Create(ctx, memberClusterServiceName) + err := hubClient.Create(ctx, multiClusterServiceName) var statusErr *k8serrors.StatusError Expect(errors.As(err, &statusErr)).To(BeTrue(), fmt.Sprintf("Create API call produced error %s. Error type wanted is %s.", reflect.TypeOf(err), reflect.TypeOf(&k8serrors.StatusError{}))) Expect(statusErr.Status().Message).Should(ContainSubstring("a lowercase RFC 1123 subdomain")) @@ -88,7 +88,7 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { var name = "a_bcdef-123456789-123456789-123456789-123456789-123456789-123456789-123456789" // Create the API. - memberClusterServiceName := &v1alpha1.MultiClusterService{ + multiClusterServiceName := &v1alpha1.MultiClusterService{ ObjectMeta: metav1.ObjectMeta{ Name: name, Namespace: "testnamespace", @@ -100,7 +100,7 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { }, } By(fmt.Sprintf("expecting denial of CREATE API %s", name)) - err := hubClient.Create(ctx, memberClusterServiceName) + err := hubClient.Create(ctx, multiClusterServiceName) var statusErr *k8serrors.StatusError Expect(errors.As(err, &statusErr)).To(BeTrue(), fmt.Sprintf("Create API call produced error %s. Error type wanted is %s.", reflect.TypeOf(err), reflect.TypeOf(&k8serrors.StatusError{}))) Expect(statusErr.Status().Message).Should(ContainSubstring("a lowercase RFC 1123 subdomain")) @@ -112,7 +112,7 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { var name = "abc-123456789-123456789-123456789-123456789-123456789-123456789" // Create the API. - memberClusterServiceName := &v1alpha1.MultiClusterService{ + multiClusterServiceName := &v1alpha1.MultiClusterService{ ObjectMeta: metav1.ObjectMeta{ Name: name, Namespace: "testnamespace", @@ -123,15 +123,15 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { }, }, } - Expect(hubClient.Create(ctx, memberClusterServiceName)).Should(Succeed()) - Expect(hubClient.Delete(ctx, memberClusterServiceName)).Should(Succeed()) + Expect(hubClient.Create(ctx, multiClusterServiceName)).Should(Succeed()) + Expect(hubClient.Delete(ctx, multiClusterServiceName)).Should(Succeed()) }) It("should allow creating API with valid name starting with alphabet character", func() { var name = "abc-123456789" // Create the API. - memberClusterServiceName := &v1alpha1.MultiClusterService{ + multiClusterServiceName := &v1alpha1.MultiClusterService{ ObjectMeta: metav1.ObjectMeta{ Name: name, Namespace: "testnamespace", @@ -142,15 +142,15 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { }, }, } - Expect(hubClient.Create(ctx, memberClusterServiceName)).Should(Succeed()) - Expect(hubClient.Delete(ctx, memberClusterServiceName)).Should(Succeed()) + Expect(hubClient.Create(ctx, multiClusterServiceName)).Should(Succeed()) + Expect(hubClient.Delete(ctx, multiClusterServiceName)).Should(Succeed()) }) It("should allow creating API with valid name starting with numeric character", func() { var name = "123-123456789" // Create the API. - memberClusterServiceName := &v1alpha1.MultiClusterService{ + multiClusterServiceName := &v1alpha1.MultiClusterService{ ObjectMeta: metav1.ObjectMeta{ Name: name, Namespace: "testnamespace", @@ -161,15 +161,15 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { }, }, } - Expect(hubClient.Create(ctx, memberClusterServiceName)).Should(Succeed()) - Expect(hubClient.Delete(ctx, memberClusterServiceName)).Should(Succeed()) + Expect(hubClient.Create(ctx, multiClusterServiceName)).Should(Succeed()) + Expect(hubClient.Delete(ctx, multiClusterServiceName)).Should(Succeed()) }) It("should allow creating API with valid name ending with alphabet character", func() { var name = "123456789-abc" // Create the API. - memberClusterServiceName := &v1alpha1.MultiClusterService{ + multiClusterServiceName := &v1alpha1.MultiClusterService{ ObjectMeta: metav1.ObjectMeta{ Name: name, Namespace: "testnamespace", @@ -180,15 +180,15 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { }, }, } - Expect(hubClient.Create(ctx, memberClusterServiceName)).Should(Succeed()) - Expect(hubClient.Delete(ctx, memberClusterServiceName)).Should(Succeed()) + Expect(hubClient.Create(ctx, multiClusterServiceName)).Should(Succeed()) + Expect(hubClient.Delete(ctx, multiClusterServiceName)).Should(Succeed()) }) It("should allow creating API with valid name ending with numeric character", func() { var name = "123456789-123" // Create the API. - memberClusterServiceName := &v1alpha1.MultiClusterService{ + multiClusterServiceName := &v1alpha1.MultiClusterService{ ObjectMeta: metav1.ObjectMeta{ Name: name, Namespace: "testnamespace", @@ -199,8 +199,8 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { }, }, } - Expect(hubClient.Create(ctx, memberClusterServiceName)).Should(Succeed()) - Expect(hubClient.Delete(ctx, memberClusterServiceName)).Should(Succeed()) + Expect(hubClient.Create(ctx, multiClusterServiceName)).Should(Succeed()) + Expect(hubClient.Delete(ctx, multiClusterServiceName)).Should(Succeed()) }) }) From cf66ebeef8ce20b0d4efa82e17a6033d22c393f2 Mon Sep 17 00:00:00 2001 From: Jamison Tsai Date: Wed, 11 Dec 2024 21:22:21 +1100 Subject: [PATCH 37/66] remove example test files --- .../networking _v1alpha1_ multiclusterservice.yaml | 8 -------- .../artifacts/networking _v1alpha1_ serviceexports.yaml | 4 ---- 2 files changed, 12 deletions(-) delete mode 100644 examples/getting-started/artifacts/networking _v1alpha1_ multiclusterservice.yaml delete mode 100644 examples/getting-started/artifacts/networking _v1alpha1_ serviceexports.yaml diff --git a/examples/getting-started/artifacts/networking _v1alpha1_ multiclusterservice.yaml b/examples/getting-started/artifacts/networking _v1alpha1_ multiclusterservice.yaml deleted file mode 100644 index e17f9fe8..00000000 --- a/examples/getting-started/artifacts/networking _v1alpha1_ multiclusterservice.yaml +++ /dev/null @@ -1,8 +0,0 @@ -apiVersion: networking.fleet.azure.com/v1alpha1 -kind: MultiClusterService -metadata: - name: abcdef-123456789-123456789-123456789-123456789-123456789-123456789-123456789 -spec: - serviceImport: - name: service-import-1 - namespace: fleet-networking \ No newline at end of file diff --git a/examples/getting-started/artifacts/networking _v1alpha1_ serviceexports.yaml b/examples/getting-started/artifacts/networking _v1alpha1_ serviceexports.yaml deleted file mode 100644 index 908adbac..00000000 --- a/examples/getting-started/artifacts/networking _v1alpha1_ serviceexports.yaml +++ /dev/null @@ -1,4 +0,0 @@ -apiVersion: networking.fleet.azure.com/v1alpha1 -kind: ServiceExport -metadata: - name: abcdef-123456789-123456789-123456789-123456789-123456789-123456789-123456789 From 46fc41317289b1971c0b0dac56cfa6c241b98d89 Mon Sep 17 00:00:00 2001 From: Jamison Tsai Date: Wed, 11 Dec 2024 21:23:05 +1100 Subject: [PATCH 38/66] copyright banner --- test/apis/v1alpha1/api_validation_integration_test.go | 5 +++++ test/apis/v1alpha1/suite_test.go | 5 +++++ 2 files changed, 10 insertions(+) diff --git a/test/apis/v1alpha1/api_validation_integration_test.go b/test/apis/v1alpha1/api_validation_integration_test.go index f416bbd4..8338bfd2 100644 --- a/test/apis/v1alpha1/api_validation_integration_test.go +++ b/test/apis/v1alpha1/api_validation_integration_test.go @@ -1,3 +1,8 @@ +/* +Copyright (c) Microsoft Corporation. +Licensed under the MIT license. +*/ + package v1alpha1 import ( diff --git a/test/apis/v1alpha1/suite_test.go b/test/apis/v1alpha1/suite_test.go index 8db6d416..89644a28 100644 --- a/test/apis/v1alpha1/suite_test.go +++ b/test/apis/v1alpha1/suite_test.go @@ -1,3 +1,8 @@ +/* +Copyright (c) Microsoft Corporation. +Licensed under the MIT license. +*/ + package v1alpha1 import ( From 1f274531e2cde5fda59e4387c9fba2337ae5b1fd Mon Sep 17 00:00:00 2001 From: Jamison Tsai Date: Wed, 11 Dec 2024 21:24:07 +1100 Subject: [PATCH 39/66] remove integration coverage xml file --- integration_coverage.xml | 615 --------------------------------------- 1 file changed, 615 deletions(-) delete mode 100644 integration_coverage.xml diff --git a/integration_coverage.xml b/integration_coverage.xml deleted file mode 100644 index 11b8427f..00000000 --- a/integration_coverage.xml +++ /dev/null @@ -1,615 +0,0 @@ -mode: atomic -go.goms.io/fleet-networking/test/e2e/framework/cluster.go:32.72,37.52 2 0 -go.goms.io/fleet-networking/test/e2e/framework/cluster.go:37.52,39.3 1 0 -go.goms.io/fleet-networking/test/e2e/framework/cluster.go:40.2,40.21 1 0 -go.goms.io/fleet-networking/test/e2e/framework/cluster.go:44.103,49.78 2 0 -go.goms.io/fleet-networking/test/e2e/framework/cluster.go:49.78,51.3 1 0 -go.goms.io/fleet-networking/test/e2e/framework/cluster.go:52.2,52.21 1 0 -go.goms.io/fleet-networking/test/e2e/framework/cluster.go:56.33,58.2 1 0 -go.goms.io/fleet-networking/test/e2e/framework/cluster.go:61.42,63.2 1 0 -go.goms.io/fleet-networking/test/e2e/framework/cluster.go:66.56,68.2 1 0 -go.goms.io/fleet-networking/test/e2e/framework/cluster.go:71.127,75.83 4 0 -go.goms.io/fleet-networking/test/e2e/framework/cluster.go:75.83,77.3 1 0 -go.goms.io/fleet-networking/test/e2e/framework/cluster.go:79.2,79.60 1 0 -go.goms.io/fleet-networking/test/e2e/framework/cluster.go:79.60,81.3 1 0 -go.goms.io/fleet-networking/test/e2e/framework/cluster.go:82.2,84.43 2 0 -go.goms.io/fleet-networking/test/e2e/framework/cluster.go:84.43,86.3 1 0 -go.goms.io/fleet-networking/test/e2e/framework/cluster.go:87.2,89.12 3 0 -go.goms.io/fleet-networking/test/e2e/framework/cluster.go:92.45,94.16 2 0 -go.goms.io/fleet-networking/test/e2e/framework/cluster.go:94.16,96.3 1 0 -go.goms.io/fleet-networking/test/e2e/framework/cluster.go:97.2,98.16 2 0 -go.goms.io/fleet-networking/test/e2e/framework/cluster.go:98.16,100.3 1 0 -go.goms.io/fleet-networking/test/e2e/framework/cluster.go:101.2,102.12 2 0 -go.goms.io/fleet-networking/test/e2e/framework/cluster.go:105.75,107.16 2 0 -go.goms.io/fleet-networking/test/e2e/framework/cluster.go:107.16,109.3 1 0 -go.goms.io/fleet-networking/test/e2e/framework/cluster.go:110.2,113.16 4 0 -go.goms.io/fleet-networking/test/e2e/framework/cluster.go:113.16,115.3 1 0 -go.goms.io/fleet-networking/test/e2e/framework/cluster.go:116.2,117.12 2 0 -go.goms.io/fleet-networking/test/e2e/framework/cluster.go:120.62,122.16 2 0 -go.goms.io/fleet-networking/test/e2e/framework/cluster.go:122.16,124.3 1 0 -go.goms.io/fleet-networking/test/e2e/framework/cluster.go:126.2,127.16 2 0 -go.goms.io/fleet-networking/test/e2e/framework/cluster.go:127.16,129.3 1 0 -go.goms.io/fleet-networking/test/e2e/framework/cluster.go:130.2,130.24 1 0 -go.goms.io/fleet-networking/test/e2e/framework/cluster.go:133.71,135.16 2 0 -go.goms.io/fleet-networking/test/e2e/framework/cluster.go:135.16,137.3 1 0 -go.goms.io/fleet-networking/test/e2e/framework/cluster.go:138.2,142.16 2 0 -go.goms.io/fleet-networking/test/e2e/framework/cluster.go:145.40,148.30 3 0 -go.goms.io/fleet-networking/test/e2e/framework/cluster.go:148.30,150.17 2 0 -go.goms.io/fleet-networking/test/e2e/framework/cluster.go:150.17,152.4 1 0 -go.goms.io/fleet-networking/test/e2e/framework/cluster.go:153.3,153.59 1 0 -go.goms.io/fleet-networking/test/e2e/framework/cluster.go:155.2,155.51 1 0 -go.goms.io/fleet-networking/test/e2e/framework/cluster.go:155.51,157.3 1 0 -go.goms.io/fleet-networking/test/e2e/framework/cluster.go:158.2,158.28 1 0 -go.goms.io/fleet-networking/test/e2e/framework/consts.go:35.73,35.117 1 0 -go.goms.io/fleet-networking/test/e2e/framework/consts.go:41.73,41.117 1 0 -go.goms.io/fleet-networking/test/e2e/framework/fleet.go:16.45,18.2 1 0 -go.goms.io/fleet-networking/test/e2e/framework/fleet.go:21.45,23.2 1 0 -go.goms.io/fleet-networking/test/e2e/framework/fleet.go:26.39,28.2 1 0 -go.goms.io/fleet-networking/test/e2e/framework/fleet.go:31.39,33.2 1 0 -go.goms.io/fleet-networking/test/e2e/framework/fleet.go:36.88,42.2 1 0 -go.goms.io/fleet-networking/test/e2e/framework/objects.go:13.47,19.2 1 0 -go.goms.io/fleet-networking/test/e2e/framework/objects.go:22.109,39.2 1 0 -go.goms.io/fleet-networking/test/e2e/framework/objects.go:42.76,49.2 1 0 -go.goms.io/fleet-networking/test/e2e/framework/objects.go:52.141,74.2 1 0 -go.goms.io/fleet-networking/test/e2e/framework/objects.go:77.97,89.2 1 0 -go.goms.io/fleet-networking/test/e2e/framework/prometheus.go:23.88,28.16 2 0 -go.goms.io/fleet-networking/test/e2e/framework/prometheus.go:28.16,30.3 1 0 -go.goms.io/fleet-networking/test/e2e/framework/prometheus.go:31.2,31.33 1 0 -go.goms.io/fleet-networking/test/e2e/framework/prometheus.go:35.154,36.24 1 0 -go.goms.io/fleet-networking/test/e2e/framework/prometheus.go:36.24,38.3 1 0 -go.goms.io/fleet-networking/test/e2e/framework/prometheus.go:40.2,43.16 4 0 -go.goms.io/fleet-networking/test/e2e/framework/prometheus.go:43.16,45.3 1 0 -go.goms.io/fleet-networking/test/e2e/framework/prometheus.go:47.2,47.35 1 0 -go.goms.io/fleet-networking/test/e2e/framework/prometheus.go:47.35,49.3 1 0 -go.goms.io/fleet-networking/test/e2e/framework/prometheus.go:50.2,51.20 2 0 -go.goms.io/fleet-networking/test/e2e/framework/prometheus.go:51.20,53.3 1 0 -go.goms.io/fleet-networking/test/e2e/framework/prometheus.go:54.2,55.38 2 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:38.56,99.2 7 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:102.53,104.2 1 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:107.75,114.2 1 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:117.87,129.2 1 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:132.78,136.2 3 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:139.70,140.40 1 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:140.40,146.56 2 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:146.56,148.4 1 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:151.2,151.46 1 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:151.46,154.63 3 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:154.63,156.4 1 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:157.3,157.61 1 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:157.61,159.4 1 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:161.2,161.12 1 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:165.70,166.46 1 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:166.46,169.63 3 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:169.63,171.4 1 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:172.3,172.57 1 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:172.57,174.4 1 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:177.2,177.40 1 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:177.40,183.56 2 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:183.56,185.4 1 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:187.2,187.12 1 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:191.111,192.46 1 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:192.46,198.63 4 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:198.63,200.4 1 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:203.3,203.62 1 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:203.62,203.77 1 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:203.92,204.73 1 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:204.73,206.5 1 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:207.4,220.42 3 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:220.42,222.5 1 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:223.4,223.14 1 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:224.18,226.4 1 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:228.2,228.12 1 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:232.123,236.68 4 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:236.68,238.3 1 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:239.2,239.58 1 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:239.58,239.73 1 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:239.88,240.88 1 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:240.88,242.4 1 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:243.3,251.35 3 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:251.35,253.4 1 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:254.3,254.13 1 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:259.123,262.95 3 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:262.95,264.3 1 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:265.2,265.58 1 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:265.58,265.73 1 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:265.88,267.115 2 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:267.115,269.4 1 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:270.3,270.13 1 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:275.113,276.46 1 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:276.46,278.87 2 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:278.87,280.4 1 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:281.3,281.62 1 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:281.62,281.77 1 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:281.92,283.108 2 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:283.108,285.5 1 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:286.4,286.14 1 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:287.18,289.4 1 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:291.2,291.12 1 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:295.36,303.2 2 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:307.24,311.2 3 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:314.35,316.2 1 0 -go.goms.io/fleet-networking/test/common/trafficmanager/validator/backend.go:28.86,30.4 1 0 -go.goms.io/fleet-networking/test/common/trafficmanager/validator/backend.go:35.117,36.33 1 0 -go.goms.io/fleet-networking/test/common/trafficmanager/validator/backend.go:36.33,38.59 2 0 -go.goms.io/fleet-networking/test/common/trafficmanager/validator/backend.go:38.59,40.4 1 0 -go.goms.io/fleet-networking/test/common/trafficmanager/validator/backend.go:41.3,41.92 1 0 -go.goms.io/fleet-networking/test/common/trafficmanager/validator/backend.go:41.92,43.4 1 0 -go.goms.io/fleet-networking/test/common/trafficmanager/validator/backend.go:44.3,44.13 1 0 -go.goms.io/fleet-networking/test/common/trafficmanager/validator/backend.go:49.128,52.33 3 0 -go.goms.io/fleet-networking/test/common/trafficmanager/validator/backend.go:52.33,53.58 1 0 -go.goms.io/fleet-networking/test/common/trafficmanager/validator/backend.go:53.58,55.4 1 0 -go.goms.io/fleet-networking/test/common/trafficmanager/validator/backend.go:56.3,56.83 1 0 -go.goms.io/fleet-networking/test/common/trafficmanager/validator/backend.go:56.83,58.4 1 0 -go.goms.io/fleet-networking/test/common/trafficmanager/validator/backend.go:59.3,59.13 1 0 -go.goms.io/fleet-networking/test/common/trafficmanager/validator/backend.go:64.140,67.35 3 0 -go.goms.io/fleet-networking/test/common/trafficmanager/validator/backend.go:67.35,68.58 1 0 -go.goms.io/fleet-networking/test/common/trafficmanager/validator/backend.go:68.58,70.4 1 0 -go.goms.io/fleet-networking/test/common/trafficmanager/validator/backend.go:71.3,71.83 1 0 -go.goms.io/fleet-networking/test/common/trafficmanager/validator/backend.go:71.83,73.4 1 0 -go.goms.io/fleet-networking/test/common/trafficmanager/validator/backend.go:74.3,74.13 1 0 -go.goms.io/fleet-networking/test/common/trafficmanager/validator/backend.go:79.110,80.33 1 0 -go.goms.io/fleet-networking/test/common/trafficmanager/validator/backend.go:80.33,82.72 2 0 -go.goms.io/fleet-networking/test/common/trafficmanager/validator/backend.go:82.72,84.4 1 0 -go.goms.io/fleet-networking/test/common/trafficmanager/validator/backend.go:85.3,85.13 1 0 -go.goms.io/fleet-networking/test/common/trafficmanager/validator/backend.go:90.119,91.35 1 0 -go.goms.io/fleet-networking/test/common/trafficmanager/validator/backend.go:91.35,93.71 2 0 -go.goms.io/fleet-networking/test/common/trafficmanager/validator/backend.go:93.71,95.4 1 0 -go.goms.io/fleet-networking/test/common/trafficmanager/validator/backend.go:96.3,96.13 1 0 -go.goms.io/fleet-networking/test/common/trafficmanager/validator/profile.go:36.57,38.4 1 0 -go.goms.io/fleet-networking/test/common/trafficmanager/validator/profile.go:47.128,50.33 3 0 -go.goms.io/fleet-networking/test/common/trafficmanager/validator/profile.go:50.33,51.58 1 0 -go.goms.io/fleet-networking/test/common/trafficmanager/validator/profile.go:51.58,53.4 1 0 -go.goms.io/fleet-networking/test/common/trafficmanager/validator/profile.go:54.3,54.83 1 0 -go.goms.io/fleet-networking/test/common/trafficmanager/validator/profile.go:54.83,56.4 1 0 -go.goms.io/fleet-networking/test/common/trafficmanager/validator/profile.go:57.3,57.13 1 0 -go.goms.io/fleet-networking/test/common/trafficmanager/validator/profile.go:62.110,63.33 1 0 -go.goms.io/fleet-networking/test/common/trafficmanager/validator/profile.go:63.33,65.72 2 0 -go.goms.io/fleet-networking/test/common/trafficmanager/validator/profile.go:65.72,67.4 1 0 -go.goms.io/fleet-networking/test/common/trafficmanager/validator/profile.go:68.3,68.13 1 0 -go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/endpoint.go:29.92,40.16 3 0 -go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/endpoint.go:40.16,42.3 1 0 -go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/endpoint.go:43.2,43.48 1 0 -go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/endpoint.go:47.315,48.51 1 0 -go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/endpoint.go:48.51,51.3 2 0 -go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/endpoint.go:52.2,52.192 1 0 -go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/endpoint.go:52.192,53.46 1 0 -go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/endpoint.go:53.46,56.4 2 0 -go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/endpoint.go:56.9,56.54 1 0 -go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/endpoint.go:56.54,59.4 2 0 -go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/endpoint.go:60.3,61.53 2 0 -go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/endpoint.go:62.8,63.67 1 0 -go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/endpoint.go:63.67,66.4 1 0 -go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/endpoint.go:66.9,68.4 1 0 -go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/endpoint.go:70.2,70.22 1 0 -go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/endpoint.go:73.369,74.51 1 0 -go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/endpoint.go:74.51,77.3 2 0 -go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/endpoint.go:78.2,78.192 1 0 -go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/endpoint.go:78.192,79.54 1 0 -go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/endpoint.go:79.54,82.4 2 0 -go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/endpoint.go:82.9,82.65 1 0 -go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/endpoint.go:82.65,85.4 2 0 -go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/endpoint.go:87.3,98.53 2 0 -go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/endpoint.go:99.8,100.67 1 0 -go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/endpoint.go:100.67,103.4 1 0 -go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/endpoint.go:103.9,105.4 1 0 -go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/endpoint.go:107.2,107.22 1 0 -go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/profile.go:59.89,71.16 3 0 -go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/profile.go:71.16,73.3 1 0 -go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/profile.go:74.2,74.47 1 0 -go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/profile.go:78.237,79.51 1 0 -go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/profile.go:79.51,82.3 2 0 -go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/profile.go:83.2,83.21 1 0 -go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/profile.go:84.97,113.51 3 0 -go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/profile.go:113.51,131.4 1 0 -go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/profile.go:131.9,131.69 1 0 -go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/profile.go:131.69,137.4 1 0 -go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/profile.go:138.3,138.52 1 0 -go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/profile.go:139.41,145.52 2 0 -go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/profile.go:146.33,147.77 1 0 -go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/profile.go:148.10,149.65 1 0 -go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/profile.go:151.2,151.22 1 0 -go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/profile.go:155.308,156.51 1 0 -go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/profile.go:156.51,159.3 2 0 -go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/profile.go:160.2,160.21 1 0 -go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/profile.go:161.30,162.60 1 0 -go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/profile.go:163.36,164.82 1 0 -go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/profile.go:165.31,166.73 1 0 -go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/profile.go:167.24,168.131 1 0 -go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/profile.go:168.131,169.128 1 0 -go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/profile.go:169.128,172.5 2 0 -go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/profile.go:174.3,191.52 2 0 -go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/profile.go:192.10,193.69 1 0 -go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/profile.go:195.2,195.22 1 0 -go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/profile.go:199.246,200.51 1 0 -go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/profile.go:200.51,203.3 2 0 -go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/profile.go:204.2,204.21 1 0 -go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/profile.go:205.24,207.52 2 0 -go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/profile.go:208.10,209.60 1 0 -go.goms.io/fleet-networking/test/common/trafficmanager/fakeprovider/profile.go:211.2,211.22 1 0 -go.goms.io/fleet-networking/test/e2e/framework/cluster.go:32.72,37.52 2 1 -go.goms.io/fleet-networking/test/e2e/framework/cluster.go:37.52,39.3 1 1 -go.goms.io/fleet-networking/test/e2e/framework/cluster.go:40.2,40.21 1 0 -go.goms.io/fleet-networking/test/e2e/framework/cluster.go:44.103,49.78 2 0 -go.goms.io/fleet-networking/test/e2e/framework/cluster.go:49.78,51.3 1 0 -go.goms.io/fleet-networking/test/e2e/framework/cluster.go:52.2,52.21 1 0 -go.goms.io/fleet-networking/test/e2e/framework/cluster.go:56.33,58.2 1 0 -go.goms.io/fleet-networking/test/e2e/framework/cluster.go:61.42,63.2 1 0 -go.goms.io/fleet-networking/test/e2e/framework/cluster.go:66.56,68.2 1 0 -go.goms.io/fleet-networking/test/e2e/framework/cluster.go:71.127,75.83 4 0 -go.goms.io/fleet-networking/test/e2e/framework/cluster.go:75.83,77.3 1 0 -go.goms.io/fleet-networking/test/e2e/framework/cluster.go:79.2,79.60 1 0 -go.goms.io/fleet-networking/test/e2e/framework/cluster.go:79.60,81.3 1 0 -go.goms.io/fleet-networking/test/e2e/framework/cluster.go:82.2,84.43 2 0 -go.goms.io/fleet-networking/test/e2e/framework/cluster.go:84.43,86.3 1 0 -go.goms.io/fleet-networking/test/e2e/framework/cluster.go:87.2,89.12 3 0 -go.goms.io/fleet-networking/test/e2e/framework/cluster.go:92.45,94.16 2 1 -go.goms.io/fleet-networking/test/e2e/framework/cluster.go:94.16,96.3 1 1 -go.goms.io/fleet-networking/test/e2e/framework/cluster.go:97.2,98.16 2 0 -go.goms.io/fleet-networking/test/e2e/framework/cluster.go:98.16,100.3 1 0 -go.goms.io/fleet-networking/test/e2e/framework/cluster.go:101.2,102.12 2 0 -go.goms.io/fleet-networking/test/e2e/framework/cluster.go:105.75,107.16 2 0 -go.goms.io/fleet-networking/test/e2e/framework/cluster.go:107.16,109.3 1 0 -go.goms.io/fleet-networking/test/e2e/framework/cluster.go:110.2,113.16 4 0 -go.goms.io/fleet-networking/test/e2e/framework/cluster.go:113.16,115.3 1 0 -go.goms.io/fleet-networking/test/e2e/framework/cluster.go:116.2,117.12 2 0 -go.goms.io/fleet-networking/test/e2e/framework/cluster.go:120.62,122.16 2 1 -go.goms.io/fleet-networking/test/e2e/framework/cluster.go:122.16,124.3 1 0 -go.goms.io/fleet-networking/test/e2e/framework/cluster.go:126.2,127.16 2 1 -go.goms.io/fleet-networking/test/e2e/framework/cluster.go:127.16,129.3 1 1 -go.goms.io/fleet-networking/test/e2e/framework/cluster.go:130.2,130.24 1 0 -go.goms.io/fleet-networking/test/e2e/framework/cluster.go:133.71,135.16 2 1 -go.goms.io/fleet-networking/test/e2e/framework/cluster.go:135.16,137.3 1 0 -go.goms.io/fleet-networking/test/e2e/framework/cluster.go:138.2,142.16 2 1 -go.goms.io/fleet-networking/test/e2e/framework/cluster.go:145.40,148.30 3 1 -go.goms.io/fleet-networking/test/e2e/framework/cluster.go:148.30,150.17 2 1 -go.goms.io/fleet-networking/test/e2e/framework/cluster.go:150.17,152.4 1 0 -go.goms.io/fleet-networking/test/e2e/framework/cluster.go:153.3,153.59 1 1 -go.goms.io/fleet-networking/test/e2e/framework/cluster.go:155.2,155.51 1 1 -go.goms.io/fleet-networking/test/e2e/framework/cluster.go:155.51,157.3 1 0 -go.goms.io/fleet-networking/test/e2e/framework/cluster.go:158.2,158.28 1 1 -go.goms.io/fleet-networking/test/e2e/framework/consts.go:35.73,35.117 1 0 -go.goms.io/fleet-networking/test/e2e/framework/consts.go:41.73,41.117 1 0 -go.goms.io/fleet-networking/test/e2e/framework/fleet.go:16.45,18.2 1 0 -go.goms.io/fleet-networking/test/e2e/framework/fleet.go:21.45,23.2 1 0 -go.goms.io/fleet-networking/test/e2e/framework/fleet.go:26.39,28.2 1 0 -go.goms.io/fleet-networking/test/e2e/framework/fleet.go:31.39,33.2 1 0 -go.goms.io/fleet-networking/test/e2e/framework/fleet.go:36.88,42.2 1 0 -go.goms.io/fleet-networking/test/e2e/framework/objects.go:13.47,19.2 1 80 -go.goms.io/fleet-networking/test/e2e/framework/objects.go:22.109,39.2 1 80 -go.goms.io/fleet-networking/test/e2e/framework/objects.go:42.76,49.2 1 0 -go.goms.io/fleet-networking/test/e2e/framework/objects.go:52.141,74.2 1 80 -go.goms.io/fleet-networking/test/e2e/framework/objects.go:77.97,89.2 1 80 -go.goms.io/fleet-networking/test/e2e/framework/prometheus.go:23.88,28.16 2 0 -go.goms.io/fleet-networking/test/e2e/framework/prometheus.go:28.16,30.3 1 0 -go.goms.io/fleet-networking/test/e2e/framework/prometheus.go:31.2,31.33 1 0 -go.goms.io/fleet-networking/test/e2e/framework/prometheus.go:35.154,36.24 1 0 -go.goms.io/fleet-networking/test/e2e/framework/prometheus.go:36.24,38.3 1 0 -go.goms.io/fleet-networking/test/e2e/framework/prometheus.go:40.2,43.16 4 0 -go.goms.io/fleet-networking/test/e2e/framework/prometheus.go:43.16,45.3 1 0 -go.goms.io/fleet-networking/test/e2e/framework/prometheus.go:47.2,47.35 1 0 -go.goms.io/fleet-networking/test/e2e/framework/prometheus.go:47.35,49.3 1 0 -go.goms.io/fleet-networking/test/e2e/framework/prometheus.go:50.2,51.20 2 0 -go.goms.io/fleet-networking/test/e2e/framework/prometheus.go:51.20,53.3 1 0 -go.goms.io/fleet-networking/test/e2e/framework/prometheus.go:54.2,55.38 2 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:38.56,99.2 7 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:102.53,104.2 1 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:107.75,114.2 1 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:117.87,129.2 1 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:132.78,136.2 3 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:139.70,140.40 1 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:140.40,146.56 2 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:146.56,148.4 1 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:151.2,151.46 1 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:151.46,154.63 3 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:154.63,156.4 1 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:157.3,157.61 1 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:157.61,159.4 1 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:161.2,161.12 1 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:165.70,166.46 1 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:166.46,169.63 3 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:169.63,171.4 1 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:172.3,172.57 1 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:172.57,174.4 1 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:177.2,177.40 1 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:177.40,183.56 2 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:183.56,185.4 1 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:187.2,187.12 1 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:191.111,192.46 1 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:192.46,198.63 4 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:198.63,200.4 1 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:203.3,203.62 1 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:203.62,203.77 1 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:203.92,204.73 1 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:204.73,206.5 1 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:207.4,220.42 3 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:220.42,222.5 1 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:223.4,223.14 1 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:224.18,226.4 1 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:228.2,228.12 1 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:232.123,236.68 4 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:236.68,238.3 1 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:239.2,239.58 1 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:239.58,239.73 1 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:239.88,240.88 1 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:240.88,242.4 1 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:243.3,251.35 3 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:251.35,253.4 1 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:254.3,254.13 1 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:259.123,262.95 3 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:262.95,264.3 1 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:265.2,265.58 1 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:265.58,265.73 1 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:265.88,267.115 2 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:267.115,269.4 1 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:270.3,270.13 1 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:275.113,276.46 1 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:276.46,278.87 2 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:278.87,280.4 1 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:281.3,281.62 1 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:281.62,281.77 1 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:281.92,283.108 2 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:283.108,285.5 1 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:286.4,286.14 1 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:287.18,289.4 1 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:291.2,291.12 1 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:295.36,303.2 2 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:307.24,311.2 3 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:314.35,316.2 1 0 -go.goms.io/fleet-networking/test/e2e/framework/cluster.go:32.72,37.52 2 1 -go.goms.io/fleet-networking/test/e2e/framework/cluster.go:37.52,39.3 1 1 -go.goms.io/fleet-networking/test/e2e/framework/cluster.go:40.2,40.21 1 0 -go.goms.io/fleet-networking/test/e2e/framework/cluster.go:44.103,49.78 2 0 -go.goms.io/fleet-networking/test/e2e/framework/cluster.go:49.78,51.3 1 0 -go.goms.io/fleet-networking/test/e2e/framework/cluster.go:52.2,52.21 1 0 -go.goms.io/fleet-networking/test/e2e/framework/cluster.go:56.33,58.2 1 0 -go.goms.io/fleet-networking/test/e2e/framework/cluster.go:61.42,63.2 1 1 -go.goms.io/fleet-networking/test/e2e/framework/cluster.go:66.56,68.2 1 0 -go.goms.io/fleet-networking/test/e2e/framework/cluster.go:71.127,75.83 4 0 -go.goms.io/fleet-networking/test/e2e/framework/cluster.go:75.83,77.3 1 0 -go.goms.io/fleet-networking/test/e2e/framework/cluster.go:79.2,79.60 1 0 -go.goms.io/fleet-networking/test/e2e/framework/cluster.go:79.60,81.3 1 0 -go.goms.io/fleet-networking/test/e2e/framework/cluster.go:82.2,84.43 2 0 -go.goms.io/fleet-networking/test/e2e/framework/cluster.go:84.43,86.3 1 0 -go.goms.io/fleet-networking/test/e2e/framework/cluster.go:87.2,89.12 3 0 -go.goms.io/fleet-networking/test/e2e/framework/cluster.go:92.45,94.16 2 1 -go.goms.io/fleet-networking/test/e2e/framework/cluster.go:94.16,96.3 1 1 -go.goms.io/fleet-networking/test/e2e/framework/cluster.go:97.2,98.16 2 0 -go.goms.io/fleet-networking/test/e2e/framework/cluster.go:98.16,100.3 1 0 -go.goms.io/fleet-networking/test/e2e/framework/cluster.go:101.2,102.12 2 0 -go.goms.io/fleet-networking/test/e2e/framework/cluster.go:105.75,107.16 2 0 -go.goms.io/fleet-networking/test/e2e/framework/cluster.go:107.16,109.3 1 0 -go.goms.io/fleet-networking/test/e2e/framework/cluster.go:110.2,113.16 4 0 -go.goms.io/fleet-networking/test/e2e/framework/cluster.go:113.16,115.3 1 0 -go.goms.io/fleet-networking/test/e2e/framework/cluster.go:116.2,117.12 2 0 -go.goms.io/fleet-networking/test/e2e/framework/cluster.go:120.62,122.16 2 1 -go.goms.io/fleet-networking/test/e2e/framework/cluster.go:122.16,124.3 1 0 -go.goms.io/fleet-networking/test/e2e/framework/cluster.go:126.2,127.16 2 1 -go.goms.io/fleet-networking/test/e2e/framework/cluster.go:127.16,129.3 1 1 -go.goms.io/fleet-networking/test/e2e/framework/cluster.go:130.2,130.24 1 0 -go.goms.io/fleet-networking/test/e2e/framework/cluster.go:133.71,135.16 2 1 -go.goms.io/fleet-networking/test/e2e/framework/cluster.go:135.16,137.3 1 0 -go.goms.io/fleet-networking/test/e2e/framework/cluster.go:138.2,142.16 2 1 -go.goms.io/fleet-networking/test/e2e/framework/cluster.go:145.40,148.30 3 1 -go.goms.io/fleet-networking/test/e2e/framework/cluster.go:148.30,150.17 2 1 -go.goms.io/fleet-networking/test/e2e/framework/cluster.go:150.17,152.4 1 0 -go.goms.io/fleet-networking/test/e2e/framework/cluster.go:153.3,153.59 1 1 -go.goms.io/fleet-networking/test/e2e/framework/cluster.go:155.2,155.51 1 1 -go.goms.io/fleet-networking/test/e2e/framework/cluster.go:155.51,157.3 1 0 -go.goms.io/fleet-networking/test/e2e/framework/cluster.go:158.2,158.28 1 1 -go.goms.io/fleet-networking/test/e2e/framework/consts.go:35.73,35.117 1 0 -go.goms.io/fleet-networking/test/e2e/framework/consts.go:41.73,41.117 1 0 -go.goms.io/fleet-networking/test/e2e/framework/fleet.go:16.45,18.2 1 0 -go.goms.io/fleet-networking/test/e2e/framework/fleet.go:21.45,23.2 1 0 -go.goms.io/fleet-networking/test/e2e/framework/fleet.go:26.39,28.2 1 0 -go.goms.io/fleet-networking/test/e2e/framework/fleet.go:31.39,33.2 1 0 -go.goms.io/fleet-networking/test/e2e/framework/fleet.go:36.88,42.2 1 0 -go.goms.io/fleet-networking/test/e2e/framework/objects.go:13.47,19.2 1 0 -go.goms.io/fleet-networking/test/e2e/framework/objects.go:22.109,39.2 1 0 -go.goms.io/fleet-networking/test/e2e/framework/objects.go:42.76,49.2 1 0 -go.goms.io/fleet-networking/test/e2e/framework/objects.go:52.141,74.2 1 0 -go.goms.io/fleet-networking/test/e2e/framework/objects.go:77.97,89.2 1 0 -go.goms.io/fleet-networking/test/e2e/framework/prometheus.go:23.88,28.16 2 0 -go.goms.io/fleet-networking/test/e2e/framework/prometheus.go:28.16,30.3 1 0 -go.goms.io/fleet-networking/test/e2e/framework/prometheus.go:31.2,31.33 1 0 -go.goms.io/fleet-networking/test/e2e/framework/prometheus.go:35.154,36.24 1 0 -go.goms.io/fleet-networking/test/e2e/framework/prometheus.go:36.24,38.3 1 0 -go.goms.io/fleet-networking/test/e2e/framework/prometheus.go:40.2,43.16 4 0 -go.goms.io/fleet-networking/test/e2e/framework/prometheus.go:43.16,45.3 1 0 -go.goms.io/fleet-networking/test/e2e/framework/prometheus.go:47.2,47.35 1 0 -go.goms.io/fleet-networking/test/e2e/framework/prometheus.go:47.35,49.3 1 0 -go.goms.io/fleet-networking/test/e2e/framework/prometheus.go:50.2,51.20 2 0 -go.goms.io/fleet-networking/test/e2e/framework/prometheus.go:51.20,53.3 1 0 -go.goms.io/fleet-networking/test/e2e/framework/prometheus.go:54.2,55.38 2 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:38.56,99.2 7 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:102.53,104.2 1 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:107.75,114.2 1 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:117.87,129.2 1 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:132.78,136.2 3 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:139.70,140.40 1 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:140.40,146.56 2 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:146.56,148.4 1 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:151.2,151.46 1 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:151.46,154.63 3 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:154.63,156.4 1 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:157.3,157.61 1 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:157.61,159.4 1 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:161.2,161.12 1 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:165.70,166.46 1 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:166.46,169.63 3 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:169.63,171.4 1 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:172.3,172.57 1 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:172.57,174.4 1 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:177.2,177.40 1 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:177.40,183.56 2 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:183.56,185.4 1 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:187.2,187.12 1 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:191.111,192.46 1 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:192.46,198.63 4 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:198.63,200.4 1 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:203.3,203.62 1 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:203.62,203.77 1 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:203.92,204.73 1 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:204.73,206.5 1 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:207.4,220.42 3 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:220.42,222.5 1 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:223.4,223.14 1 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:224.18,226.4 1 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:228.2,228.12 1 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:232.123,236.68 4 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:236.68,238.3 1 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:239.2,239.58 1 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:239.58,239.73 1 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:239.88,240.88 1 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:240.88,242.4 1 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:243.3,251.35 3 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:251.35,253.4 1 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:254.3,254.13 1 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:259.123,262.95 3 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:262.95,264.3 1 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:265.2,265.58 1 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:265.58,265.73 1 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:265.88,267.115 2 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:267.115,269.4 1 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:270.3,270.13 1 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:275.113,276.46 1 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:276.46,278.87 2 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:278.87,280.4 1 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:281.3,281.62 1 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:281.62,281.77 1 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:281.92,283.108 2 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:283.108,285.5 1 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:286.4,286.14 1 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:287.18,289.4 1 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:291.2,291.12 1 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:295.36,303.2 2 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:307.24,311.2 3 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:314.35,316.2 1 0 -go.goms.io/fleet-networking/test/e2e/framework/cluster.go:32.72,37.52 2 0 -go.goms.io/fleet-networking/test/e2e/framework/cluster.go:37.52,39.3 1 0 -go.goms.io/fleet-networking/test/e2e/framework/cluster.go:40.2,40.21 1 0 -go.goms.io/fleet-networking/test/e2e/framework/cluster.go:44.103,49.78 2 1 -go.goms.io/fleet-networking/test/e2e/framework/cluster.go:49.78,51.3 1 1 -go.goms.io/fleet-networking/test/e2e/framework/cluster.go:52.2,52.21 1 0 -go.goms.io/fleet-networking/test/e2e/framework/cluster.go:56.33,58.2 1 0 -go.goms.io/fleet-networking/test/e2e/framework/cluster.go:61.42,63.2 1 0 -go.goms.io/fleet-networking/test/e2e/framework/cluster.go:66.56,68.2 1 0 -go.goms.io/fleet-networking/test/e2e/framework/cluster.go:71.127,75.83 4 0 -go.goms.io/fleet-networking/test/e2e/framework/cluster.go:75.83,77.3 1 0 -go.goms.io/fleet-networking/test/e2e/framework/cluster.go:79.2,79.60 1 0 -go.goms.io/fleet-networking/test/e2e/framework/cluster.go:79.60,81.3 1 0 -go.goms.io/fleet-networking/test/e2e/framework/cluster.go:82.2,84.43 2 0 -go.goms.io/fleet-networking/test/e2e/framework/cluster.go:84.43,86.3 1 0 -go.goms.io/fleet-networking/test/e2e/framework/cluster.go:87.2,89.12 3 0 -go.goms.io/fleet-networking/test/e2e/framework/cluster.go:92.45,94.16 2 0 -go.goms.io/fleet-networking/test/e2e/framework/cluster.go:94.16,96.3 1 0 -go.goms.io/fleet-networking/test/e2e/framework/cluster.go:97.2,98.16 2 0 -go.goms.io/fleet-networking/test/e2e/framework/cluster.go:98.16,100.3 1 0 -go.goms.io/fleet-networking/test/e2e/framework/cluster.go:101.2,102.12 2 0 -go.goms.io/fleet-networking/test/e2e/framework/cluster.go:105.75,107.16 2 1 -go.goms.io/fleet-networking/test/e2e/framework/cluster.go:107.16,109.3 1 1 -go.goms.io/fleet-networking/test/e2e/framework/cluster.go:110.2,113.16 4 0 -go.goms.io/fleet-networking/test/e2e/framework/cluster.go:113.16,115.3 1 0 -go.goms.io/fleet-networking/test/e2e/framework/cluster.go:116.2,117.12 2 0 -go.goms.io/fleet-networking/test/e2e/framework/cluster.go:120.62,122.16 2 1 -go.goms.io/fleet-networking/test/e2e/framework/cluster.go:122.16,124.3 1 0 -go.goms.io/fleet-networking/test/e2e/framework/cluster.go:126.2,127.16 2 1 -go.goms.io/fleet-networking/test/e2e/framework/cluster.go:127.16,129.3 1 1 -go.goms.io/fleet-networking/test/e2e/framework/cluster.go:130.2,130.24 1 0 -go.goms.io/fleet-networking/test/e2e/framework/cluster.go:133.71,135.16 2 1 -go.goms.io/fleet-networking/test/e2e/framework/cluster.go:135.16,137.3 1 0 -go.goms.io/fleet-networking/test/e2e/framework/cluster.go:138.2,142.16 2 1 -go.goms.io/fleet-networking/test/e2e/framework/cluster.go:145.40,148.30 3 1 -go.goms.io/fleet-networking/test/e2e/framework/cluster.go:148.30,150.17 2 1 -go.goms.io/fleet-networking/test/e2e/framework/cluster.go:150.17,152.4 1 0 -go.goms.io/fleet-networking/test/e2e/framework/cluster.go:153.3,153.59 1 1 -go.goms.io/fleet-networking/test/e2e/framework/cluster.go:155.2,155.51 1 1 -go.goms.io/fleet-networking/test/e2e/framework/cluster.go:155.51,157.3 1 0 -go.goms.io/fleet-networking/test/e2e/framework/cluster.go:158.2,158.28 1 1 -go.goms.io/fleet-networking/test/e2e/framework/consts.go:35.73,35.117 1 0 -go.goms.io/fleet-networking/test/e2e/framework/consts.go:41.73,41.117 1 0 -go.goms.io/fleet-networking/test/e2e/framework/fleet.go:16.45,18.2 1 0 -go.goms.io/fleet-networking/test/e2e/framework/fleet.go:21.45,23.2 1 0 -go.goms.io/fleet-networking/test/e2e/framework/fleet.go:26.39,28.2 1 0 -go.goms.io/fleet-networking/test/e2e/framework/fleet.go:31.39,33.2 1 0 -go.goms.io/fleet-networking/test/e2e/framework/fleet.go:36.88,42.2 1 0 -go.goms.io/fleet-networking/test/e2e/framework/objects.go:13.47,19.2 1 0 -go.goms.io/fleet-networking/test/e2e/framework/objects.go:22.109,39.2 1 0 -go.goms.io/fleet-networking/test/e2e/framework/objects.go:42.76,49.2 1 0 -go.goms.io/fleet-networking/test/e2e/framework/objects.go:52.141,74.2 1 900 -go.goms.io/fleet-networking/test/e2e/framework/objects.go:77.97,89.2 1 0 -go.goms.io/fleet-networking/test/e2e/framework/prometheus.go:23.88,28.16 2 0 -go.goms.io/fleet-networking/test/e2e/framework/prometheus.go:28.16,30.3 1 0 -go.goms.io/fleet-networking/test/e2e/framework/prometheus.go:31.2,31.33 1 0 -go.goms.io/fleet-networking/test/e2e/framework/prometheus.go:35.154,36.24 1 0 -go.goms.io/fleet-networking/test/e2e/framework/prometheus.go:36.24,38.3 1 0 -go.goms.io/fleet-networking/test/e2e/framework/prometheus.go:40.2,43.16 4 0 -go.goms.io/fleet-networking/test/e2e/framework/prometheus.go:43.16,45.3 1 0 -go.goms.io/fleet-networking/test/e2e/framework/prometheus.go:47.2,47.35 1 0 -go.goms.io/fleet-networking/test/e2e/framework/prometheus.go:47.35,49.3 1 0 -go.goms.io/fleet-networking/test/e2e/framework/prometheus.go:50.2,51.20 2 0 -go.goms.io/fleet-networking/test/e2e/framework/prometheus.go:51.20,53.3 1 0 -go.goms.io/fleet-networking/test/e2e/framework/prometheus.go:54.2,55.38 2 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:38.56,99.2 7 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:102.53,104.2 1 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:107.75,114.2 1 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:117.87,129.2 1 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:132.78,136.2 3 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:139.70,140.40 1 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:140.40,146.56 2 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:146.56,148.4 1 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:151.2,151.46 1 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:151.46,154.63 3 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:154.63,156.4 1 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:157.3,157.61 1 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:157.61,159.4 1 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:161.2,161.12 1 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:165.70,166.46 1 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:166.46,169.63 3 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:169.63,171.4 1 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:172.3,172.57 1 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:172.57,174.4 1 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:177.2,177.40 1 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:177.40,183.56 2 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:183.56,185.4 1 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:187.2,187.12 1 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:191.111,192.46 1 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:192.46,198.63 4 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:198.63,200.4 1 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:203.3,203.62 1 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:203.62,203.77 1 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:203.92,204.73 1 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:204.73,206.5 1 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:207.4,220.42 3 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:220.42,222.5 1 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:223.4,223.14 1 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:224.18,226.4 1 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:228.2,228.12 1 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:232.123,236.68 4 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:236.68,238.3 1 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:239.2,239.58 1 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:239.58,239.73 1 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:239.88,240.88 1 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:240.88,242.4 1 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:243.3,251.35 3 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:251.35,253.4 1 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:254.3,254.13 1 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:259.123,262.95 3 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:262.95,264.3 1 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:265.2,265.58 1 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:265.58,265.73 1 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:265.88,267.115 2 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:267.115,269.4 1 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:270.3,270.13 1 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:275.113,276.46 1 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:276.46,278.87 2 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:278.87,280.4 1 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:281.3,281.62 1 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:281.62,281.77 1 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:281.92,283.108 2 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:283.108,285.5 1 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:286.4,286.14 1 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:287.18,289.4 1 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:291.2,291.12 1 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:295.36,303.2 2 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:307.24,311.2 3 0 -go.goms.io/fleet-networking/test/e2e/framework/workload_manager.go:314.35,316.2 1 0 From 577a4476d704c15c9b14738e498a93a878eb00cc Mon Sep 17 00:00:00 2001 From: Jamison Tsai Date: Wed, 11 Dec 2024 21:26:34 +1100 Subject: [PATCH 40/66] fix import format in suite_test.go --- test/apis/v1alpha1/suite_test.go | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/test/apis/v1alpha1/suite_test.go b/test/apis/v1alpha1/suite_test.go index 89644a28..b2fcaed4 100644 --- a/test/apis/v1alpha1/suite_test.go +++ b/test/apis/v1alpha1/suite_test.go @@ -11,11 +11,10 @@ import ( "path/filepath" "testing" - corev1 "k8s.io/api/core/v1" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - . "github.com/onsi/ginkgo/v2" . "github.com/onsi/gomega" + corev1 "k8s.io/api/core/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/client-go/kubernetes/scheme" "k8s.io/klog/v2" "k8s.io/klog/v2/textlogger" From c0089330d87b404d9cf940a740eabbcac28eee17 Mon Sep 17 00:00:00 2001 From: Jamison Tsai Date: Wed, 11 Dec 2024 21:30:47 +1100 Subject: [PATCH 41/66] edit format --- test/apis/v1alpha1/suite_test.go | 1 - 1 file changed, 1 deletion(-) diff --git a/test/apis/v1alpha1/suite_test.go b/test/apis/v1alpha1/suite_test.go index b2fcaed4..b71cb5f3 100644 --- a/test/apis/v1alpha1/suite_test.go +++ b/test/apis/v1alpha1/suite_test.go @@ -35,7 +35,6 @@ var ( func TestAPIs(t *testing.T) { RegisterFailHandler(Fail) - RunSpecs(t, "ClusterResourcePlacement Controller Suite") } From c38409361cfd7d7bcdbf3b56f2ff124ea2c79d47 Mon Sep 17 00:00:00 2001 From: Jamison Tsai Date: Wed, 11 Dec 2024 22:11:12 +1100 Subject: [PATCH 42/66] undo edit --- test/apis/v1alpha1/suite_test.go | 1 + 1 file changed, 1 insertion(+) diff --git a/test/apis/v1alpha1/suite_test.go b/test/apis/v1alpha1/suite_test.go index b71cb5f3..b2fcaed4 100644 --- a/test/apis/v1alpha1/suite_test.go +++ b/test/apis/v1alpha1/suite_test.go @@ -35,6 +35,7 @@ var ( func TestAPIs(t *testing.T) { RegisterFailHandler(Fail) + RunSpecs(t, "ClusterResourcePlacement Controller Suite") } From 4ee9956b65a7a017ee536b12beb14e7a15dec671 Mon Sep 17 00:00:00 2001 From: Jamison Tsai Date: Thu, 12 Dec 2024 17:27:23 +1100 Subject: [PATCH 43/66] delete print error and add error message if namespace not created --- test/apis/v1alpha1/api_validation_integration_test.go | 3 --- test/apis/v1alpha1/suite_test.go | 2 +- 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/test/apis/v1alpha1/api_validation_integration_test.go b/test/apis/v1alpha1/api_validation_integration_test.go index 8338bfd2..27fd35f1 100644 --- a/test/apis/v1alpha1/api_validation_integration_test.go +++ b/test/apis/v1alpha1/api_validation_integration_test.go @@ -40,7 +40,6 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { By(fmt.Sprintf("expecting denial of CREATE API %s", name)) var err = hubClient.Create(ctx, multiClusterServiceName) var statusErr *k8serrors.StatusError - fmt.Print(err) Expect(errors.As(err, &statusErr)).To(BeTrue(), fmt.Sprintf("Create API call produced error %s. Error type wanted is %s.", reflect.TypeOf(err), reflect.TypeOf(&k8serrors.StatusError{}))) Expect(statusErr.Status().Message).Should(ContainSubstring("metadata.name max length is 63")) }) @@ -222,8 +221,6 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { } By(fmt.Sprintf("expecting denial of CREATE API %s", name)) var err = hubClient.Create(ctx, serviceExportName) - fmt.Println("Print test") - fmt.Println(err) var statusErr *k8serrors.StatusError Expect(errors.As(err, &statusErr)).To(BeTrue(), fmt.Sprintf("Create API call produced error %s. Error type wanted is %s.", reflect.TypeOf(err), reflect.TypeOf(&k8serrors.StatusError{}))) Expect(statusErr.Status().Message).Should(ContainSubstring("metadata.name max length is 63")) diff --git a/test/apis/v1alpha1/suite_test.go b/test/apis/v1alpha1/suite_test.go index b2fcaed4..ce28e098 100644 --- a/test/apis/v1alpha1/suite_test.go +++ b/test/apis/v1alpha1/suite_test.go @@ -85,7 +85,7 @@ var _ = BeforeSuite(func() { Name: "testnamespace", }, } - Expect(hubClient.Create(ctx, &ns)).Should(Succeed()) + Expect(hubClient.Create(ctx, &ns)).Should(Succeed(), "failed to delete namespace") go func() { defer GinkgoRecover() From bfd40ec661486554d43e66093ea533adb0952c9e Mon Sep 17 00:00:00 2001 From: Jamison Tsai Date: Thu, 12 Dec 2024 17:29:07 +1100 Subject: [PATCH 44/66] rename fleetnetv1alpha1 for better readability --- test/apis/v1alpha1/suite_test.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/apis/v1alpha1/suite_test.go b/test/apis/v1alpha1/suite_test.go index ce28e098..f110ae38 100644 --- a/test/apis/v1alpha1/suite_test.go +++ b/test/apis/v1alpha1/suite_test.go @@ -23,7 +23,7 @@ import ( "sigs.k8s.io/controller-runtime/pkg/envtest" metricsserver "sigs.k8s.io/controller-runtime/pkg/metrics/server" - v1alpha1 "go.goms.io/fleet-networking/api/v1alpha1" + fleetnetv1alpha1 "go.goms.io/fleet-networking/api/v1alpha1" ) var ( @@ -59,7 +59,7 @@ var _ = BeforeSuite(func() { Expect(err).NotTo(HaveOccurred()) Expect(hubCfg).NotTo(BeNil()) - Expect(v1alpha1.AddToScheme(scheme.Scheme)).Should(Succeed()) + Expect(fleetnetv1alpha1.AddToScheme(scheme.Scheme)).Should(Succeed()) klog.InitFlags(flag.CommandLine) flag.Parse() From 2f7e32a200f5e50d06253259bde18416cb99f850 Mon Sep 17 00:00:00 2001 From: Jamison Tsai Date: Thu, 12 Dec 2024 17:39:57 +1100 Subject: [PATCH 45/66] use global variable for namespace string --- .../api_validation_integration_test.go | 90 +++++++++---------- test/apis/v1alpha1/suite_test.go | 11 +-- 2 files changed, 51 insertions(+), 50 deletions(-) diff --git a/test/apis/v1alpha1/api_validation_integration_test.go b/test/apis/v1alpha1/api_validation_integration_test.go index 27fd35f1..f53024f9 100644 --- a/test/apis/v1alpha1/api_validation_integration_test.go +++ b/test/apis/v1alpha1/api_validation_integration_test.go @@ -29,7 +29,7 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { multiClusterServiceName := &v1alpha1.MultiClusterService{ ObjectMeta: metav1.ObjectMeta{ Name: name, - Namespace: "testnamespace", + Namespace: testNamespace, }, Spec: v1alpha1.MultiClusterServiceSpec{ ServiceImport: v1alpha1.ServiceImportRef{ @@ -51,7 +51,7 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { multiClusterServiceName := &v1alpha1.MultiClusterService{ ObjectMeta: metav1.ObjectMeta{ Name: name, - Namespace: "testnamespace", + Namespace: testNamespace, }, Spec: v1alpha1.MultiClusterServiceSpec{ ServiceImport: v1alpha1.ServiceImportRef{ @@ -73,7 +73,7 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { multiClusterServiceName := &v1alpha1.MultiClusterService{ ObjectMeta: metav1.ObjectMeta{ Name: name, - Namespace: "testnamespace", + Namespace: testNamespace, }, Spec: v1alpha1.MultiClusterServiceSpec{ ServiceImport: v1alpha1.ServiceImportRef{ @@ -95,7 +95,7 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { multiClusterServiceName := &v1alpha1.MultiClusterService{ ObjectMeta: metav1.ObjectMeta{ Name: name, - Namespace: "testnamespace", + Namespace: testNamespace, }, Spec: v1alpha1.MultiClusterServiceSpec{ ServiceImport: v1alpha1.ServiceImportRef{ @@ -119,7 +119,7 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { multiClusterServiceName := &v1alpha1.MultiClusterService{ ObjectMeta: metav1.ObjectMeta{ Name: name, - Namespace: "testnamespace", + Namespace: testNamespace, }, Spec: v1alpha1.MultiClusterServiceSpec{ ServiceImport: v1alpha1.ServiceImportRef{ @@ -138,7 +138,7 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { multiClusterServiceName := &v1alpha1.MultiClusterService{ ObjectMeta: metav1.ObjectMeta{ Name: name, - Namespace: "testnamespace", + Namespace: testNamespace, }, Spec: v1alpha1.MultiClusterServiceSpec{ ServiceImport: v1alpha1.ServiceImportRef{ @@ -157,7 +157,7 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { multiClusterServiceName := &v1alpha1.MultiClusterService{ ObjectMeta: metav1.ObjectMeta{ Name: name, - Namespace: "testnamespace", + Namespace: testNamespace, }, Spec: v1alpha1.MultiClusterServiceSpec{ ServiceImport: v1alpha1.ServiceImportRef{ @@ -176,7 +176,7 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { multiClusterServiceName := &v1alpha1.MultiClusterService{ ObjectMeta: metav1.ObjectMeta{ Name: name, - Namespace: "testnamespace", + Namespace: testNamespace, }, Spec: v1alpha1.MultiClusterServiceSpec{ ServiceImport: v1alpha1.ServiceImportRef{ @@ -195,7 +195,7 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { multiClusterServiceName := &v1alpha1.MultiClusterService{ ObjectMeta: metav1.ObjectMeta{ Name: name, - Namespace: "testnamespace", + Namespace: testNamespace, }, Spec: v1alpha1.MultiClusterServiceSpec{ ServiceImport: v1alpha1.ServiceImportRef{ @@ -216,7 +216,7 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { serviceExportName := &v1alpha1.ServiceExport{ ObjectMeta: metav1.ObjectMeta{ Name: name, - Namespace: "testnamespace", + Namespace: testNamespace, }, } By(fmt.Sprintf("expecting denial of CREATE API %s", name)) @@ -233,7 +233,7 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { serviceExportName := &v1alpha1.ServiceExport{ ObjectMeta: metav1.ObjectMeta{ Name: name, - Namespace: "testnamespace", + Namespace: testNamespace, }, } By(fmt.Sprintf("expecting denial of CREATE API %s", name)) @@ -250,7 +250,7 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { serviceExportName := &v1alpha1.ServiceExport{ ObjectMeta: metav1.ObjectMeta{ Name: name, - Namespace: "testnamespace", + Namespace: testNamespace, }, } By(fmt.Sprintf("expecting denial of CREATE API %s", name)) @@ -267,7 +267,7 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { serviceExportName := &v1alpha1.ServiceExport{ ObjectMeta: metav1.ObjectMeta{ Name: name, - Namespace: "testnamespace", + Namespace: testNamespace, }, } By(fmt.Sprintf("expecting denial of CREATE API %s", name)) @@ -286,7 +286,7 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { serviceExportName := &v1alpha1.ServiceExport{ ObjectMeta: metav1.ObjectMeta{ Name: name, - Namespace: "testnamespace", + Namespace: testNamespace, }, } Expect(hubClient.Create(ctx, serviceExportName)).Should(Succeed()) @@ -300,7 +300,7 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { serviceExportName := &v1alpha1.ServiceExport{ ObjectMeta: metav1.ObjectMeta{ Name: name, - Namespace: "testnamespace", + Namespace: testNamespace, }, } Expect(hubClient.Create(ctx, serviceExportName)).Should(Succeed()) @@ -314,7 +314,7 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { serviceExportName := &v1alpha1.ServiceExport{ ObjectMeta: metav1.ObjectMeta{ Name: name, - Namespace: "testnamespace", + Namespace: testNamespace, }, } Expect(hubClient.Create(ctx, serviceExportName)).Should(Succeed()) @@ -328,7 +328,7 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { serviceExportName := &v1alpha1.ServiceExport{ ObjectMeta: metav1.ObjectMeta{ Name: name, - Namespace: "testnamespace", + Namespace: testNamespace, }, } Expect(hubClient.Create(ctx, serviceExportName)).Should(Succeed()) @@ -342,7 +342,7 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { serviceExportName := &v1alpha1.ServiceExport{ ObjectMeta: metav1.ObjectMeta{ Name: name, - Namespace: "testnamespace", + Namespace: testNamespace, }, } Expect(hubClient.Create(ctx, serviceExportName)).Should(Succeed()) @@ -358,7 +358,7 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { serviceImportName := &v1alpha1.ServiceImport{ ObjectMeta: metav1.ObjectMeta{ Name: name, - Namespace: "testnamespace", + Namespace: testNamespace, }, } By(fmt.Sprintf("expecting denial of CREATE API %s", name)) @@ -375,7 +375,7 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { serviceImportName := &v1alpha1.ServiceImport{ ObjectMeta: metav1.ObjectMeta{ Name: name, - Namespace: "testnamespace", + Namespace: testNamespace, }, } By(fmt.Sprintf("expecting denial of CREATE API %s", name)) @@ -392,7 +392,7 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { serviceImportName := &v1alpha1.ServiceImport{ ObjectMeta: metav1.ObjectMeta{ Name: name, - Namespace: "testnamespace", + Namespace: testNamespace, }, } By(fmt.Sprintf("expecting denial of CREATE API %s", name)) @@ -409,7 +409,7 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { serviceImportName := &v1alpha1.ServiceImport{ ObjectMeta: metav1.ObjectMeta{ Name: name, - Namespace: "testnamespace", + Namespace: testNamespace, }, } By(fmt.Sprintf("expecting denial of CREATE API %s", name)) @@ -428,7 +428,7 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { serviceImportName := &v1alpha1.ServiceImport{ ObjectMeta: metav1.ObjectMeta{ Name: name, - Namespace: "testnamespace", + Namespace: testNamespace, }, } Expect(hubClient.Create(ctx, serviceImportName)).Should(Succeed()) @@ -442,7 +442,7 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { serviceImportName := &v1alpha1.ServiceImport{ ObjectMeta: metav1.ObjectMeta{ Name: name, - Namespace: "testnamespace", + Namespace: testNamespace, }, } Expect(hubClient.Create(ctx, serviceImportName)).Should(Succeed()) @@ -456,7 +456,7 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { serviceImportName := &v1alpha1.ServiceImport{ ObjectMeta: metav1.ObjectMeta{ Name: name, - Namespace: "testnamespace", + Namespace: testNamespace, }, } Expect(hubClient.Create(ctx, serviceImportName)).Should(Succeed()) @@ -470,7 +470,7 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { serviceImportName := &v1alpha1.ServiceImport{ ObjectMeta: metav1.ObjectMeta{ Name: name, - Namespace: "testnamespace", + Namespace: testNamespace, }, } Expect(hubClient.Create(ctx, serviceImportName)).Should(Succeed()) @@ -484,7 +484,7 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { serviceImportName := &v1alpha1.ServiceImport{ ObjectMeta: metav1.ObjectMeta{ Name: name, - Namespace: "testnamespace", + Namespace: testNamespace, }, } Expect(hubClient.Create(ctx, serviceImportName)).Should(Succeed()) @@ -500,7 +500,7 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { trafficManagerProfileName := &v1alpha1.TrafficManagerProfile{ ObjectMeta: metav1.ObjectMeta{ Name: name, - Namespace: "testnamespace", + Namespace: testNamespace, }, Spec: v1alpha1.TrafficManagerProfileSpec{ MonitorConfig: &v1alpha1.MonitorConfig{ @@ -523,7 +523,7 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { trafficManagerProfileName := &v1alpha1.TrafficManagerProfile{ ObjectMeta: metav1.ObjectMeta{ Name: name, - Namespace: "testnamespace", + Namespace: testNamespace, }, Spec: v1alpha1.TrafficManagerProfileSpec{ MonitorConfig: &v1alpha1.MonitorConfig{ @@ -546,7 +546,7 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { trafficManagerProfileName := &v1alpha1.TrafficManagerProfile{ ObjectMeta: metav1.ObjectMeta{ Name: name, - Namespace: "testnamespace", + Namespace: testNamespace, }, Spec: v1alpha1.TrafficManagerProfileSpec{ MonitorConfig: &v1alpha1.MonitorConfig{ @@ -569,7 +569,7 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { trafficManagerProfileName := &v1alpha1.TrafficManagerProfile{ ObjectMeta: metav1.ObjectMeta{ Name: name, - Namespace: "testnamespace", + Namespace: testNamespace, }, Spec: v1alpha1.TrafficManagerProfileSpec{ MonitorConfig: &v1alpha1.MonitorConfig{ @@ -594,7 +594,7 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { trafficManagerProfileName := &v1alpha1.TrafficManagerProfile{ ObjectMeta: metav1.ObjectMeta{ Name: name, - Namespace: "testnamespace", + Namespace: testNamespace, }, Spec: v1alpha1.TrafficManagerProfileSpec{ MonitorConfig: &v1alpha1.MonitorConfig{ @@ -614,7 +614,7 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { trafficManagerProfileName := &v1alpha1.TrafficManagerProfile{ ObjectMeta: metav1.ObjectMeta{ Name: name, - Namespace: "testnamespace", + Namespace: testNamespace, }, Spec: v1alpha1.TrafficManagerProfileSpec{ MonitorConfig: &v1alpha1.MonitorConfig{ @@ -634,7 +634,7 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { trafficManagerProfileName := &v1alpha1.TrafficManagerProfile{ ObjectMeta: metav1.ObjectMeta{ Name: name, - Namespace: "testnamespace", + Namespace: testNamespace, }, Spec: v1alpha1.TrafficManagerProfileSpec{ MonitorConfig: &v1alpha1.MonitorConfig{ @@ -654,7 +654,7 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { trafficManagerProfileName := &v1alpha1.TrafficManagerProfile{ ObjectMeta: metav1.ObjectMeta{ Name: name, - Namespace: "testnamespace", + Namespace: testNamespace, }, Spec: v1alpha1.TrafficManagerProfileSpec{ MonitorConfig: &v1alpha1.MonitorConfig{ @@ -674,7 +674,7 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { trafficManagerProfileName := &v1alpha1.TrafficManagerProfile{ ObjectMeta: metav1.ObjectMeta{ Name: name, - Namespace: "testnamespace", + Namespace: testNamespace, }, Spec: v1alpha1.TrafficManagerProfileSpec{ MonitorConfig: &v1alpha1.MonitorConfig{ @@ -696,7 +696,7 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { trafficManagerBackendName := &v1alpha1.TrafficManagerBackend{ ObjectMeta: metav1.ObjectMeta{ Name: name, - Namespace: "testnamespace", + Namespace: testNamespace, }, Spec: v1alpha1.TrafficManagerBackendSpec{ Profile: v1alpha1.TrafficManagerProfileRef{ @@ -721,7 +721,7 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { trafficManagerBackendName := &v1alpha1.TrafficManagerBackend{ ObjectMeta: metav1.ObjectMeta{ Name: name, - Namespace: "testnamespace", + Namespace: testNamespace, }, Spec: v1alpha1.TrafficManagerBackendSpec{ Profile: v1alpha1.TrafficManagerProfileRef{ @@ -746,7 +746,7 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { trafficManagerBackendName := &v1alpha1.TrafficManagerBackend{ ObjectMeta: metav1.ObjectMeta{ Name: name, - Namespace: "testnamespace", + Namespace: testNamespace, }, Spec: v1alpha1.TrafficManagerBackendSpec{ Profile: v1alpha1.TrafficManagerProfileRef{ @@ -771,7 +771,7 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { trafficManagerBackendName := &v1alpha1.TrafficManagerBackend{ ObjectMeta: metav1.ObjectMeta{ Name: name, - Namespace: "testnamespace", + Namespace: testNamespace, }, Spec: v1alpha1.TrafficManagerBackendSpec{ Profile: v1alpha1.TrafficManagerProfileRef{ @@ -798,7 +798,7 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { trafficManagerBackendName := &v1alpha1.TrafficManagerBackend{ ObjectMeta: metav1.ObjectMeta{ Name: name, - Namespace: "testnamespace", + Namespace: testNamespace, }, Spec: v1alpha1.TrafficManagerBackendSpec{ Profile: v1alpha1.TrafficManagerProfileRef{ @@ -820,7 +820,7 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { trafficManagerBackendName := &v1alpha1.TrafficManagerBackend{ ObjectMeta: metav1.ObjectMeta{ Name: name, - Namespace: "testnamespace", + Namespace: testNamespace, }, Spec: v1alpha1.TrafficManagerBackendSpec{ Profile: v1alpha1.TrafficManagerProfileRef{ @@ -842,7 +842,7 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { trafficManagerBackendName := &v1alpha1.TrafficManagerBackend{ ObjectMeta: metav1.ObjectMeta{ Name: name, - Namespace: "testnamespace", + Namespace: testNamespace, }, Spec: v1alpha1.TrafficManagerBackendSpec{ Profile: v1alpha1.TrafficManagerProfileRef{ @@ -864,7 +864,7 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { trafficManagerBackendName := &v1alpha1.TrafficManagerBackend{ ObjectMeta: metav1.ObjectMeta{ Name: name, - Namespace: "testnamespace", + Namespace: testNamespace, }, Spec: v1alpha1.TrafficManagerBackendSpec{ Profile: v1alpha1.TrafficManagerProfileRef{ @@ -886,7 +886,7 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { trafficManagerBackendName := &v1alpha1.TrafficManagerBackend{ ObjectMeta: metav1.ObjectMeta{ Name: name, - Namespace: "testnamespace", + Namespace: testNamespace, }, Spec: v1alpha1.TrafficManagerBackendSpec{ Profile: v1alpha1.TrafficManagerProfileRef{ diff --git a/test/apis/v1alpha1/suite_test.go b/test/apis/v1alpha1/suite_test.go index f110ae38..c589fa5b 100644 --- a/test/apis/v1alpha1/suite_test.go +++ b/test/apis/v1alpha1/suite_test.go @@ -27,10 +27,11 @@ import ( ) var ( - hubTestEnv *envtest.Environment - hubClient client.Client - ctx context.Context - cancel context.CancelFunc + hubTestEnv *envtest.Environment + hubClient client.Client + ctx context.Context + cancel context.CancelFunc + testNamespace = "testnamespace" ) func TestAPIs(t *testing.T) { @@ -82,7 +83,7 @@ var _ = BeforeSuite(func() { By("Create testing namespace") var ns = corev1.Namespace{ ObjectMeta: metav1.ObjectMeta{ - Name: "testnamespace", + Name: testNamespace, }, } Expect(hubClient.Create(ctx, &ns)).Should(Succeed(), "failed to delete namespace") From 4d29d659bfb4d953ec2d2247ff8f51d1e44bf8fe Mon Sep 17 00:00:00 2001 From: Jamison Tsai Date: Thu, 12 Dec 2024 17:43:39 +1100 Subject: [PATCH 46/66] delete namespace in aftersuite --- test/apis/v1alpha1/suite_test.go | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/test/apis/v1alpha1/suite_test.go b/test/apis/v1alpha1/suite_test.go index c589fa5b..3239a76b 100644 --- a/test/apis/v1alpha1/suite_test.go +++ b/test/apis/v1alpha1/suite_test.go @@ -97,6 +97,15 @@ var _ = BeforeSuite(func() { var _ = AfterSuite(func() { defer klog.Flush() + + By("delete namespace") + ns := corev1.Namespace{ + ObjectMeta: metav1.ObjectMeta{ + Name: testNamespace, + }, + } + Expect(hubClient.Delete(ctx, &ns)).Should(Succeed()) + cancel() By("tearing down the test environment") From 1308cd35bb5f4478379e339c36874130c798c62c Mon Sep 17 00:00:00 2001 From: Jamison Tsai Date: Thu, 12 Dec 2024 17:44:49 +1100 Subject: [PATCH 47/66] use ginkgo to run integration test --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 72b498b0..ad7cf207 100644 --- a/Makefile +++ b/Makefile @@ -111,7 +111,7 @@ local-unit-test: $(ENVTEST) ## Run tests. .PHONY: integration-test integration-test: $(ENVTEST) ## Run integration tests. CGO_ENABLED=1 KUBEBUILDER_ASSETS="$(shell $(ENVTEST) use $(ENVTEST_K8S_VERSION) -p path)" \ - go test ./test/apis/... -race -coverprofile=integration_coverage.xml -covermode=atomic + ginkgo -v -p --race --cover --coverpkg=./... ./test/apis/... .PHONY: e2e-setup e2e-setup: From e0211da789e2fa78bdda9b34722095c73c461735 Mon Sep 17 00:00:00 2001 From: Jamison Tsai Date: Thu, 12 Dec 2024 17:46:31 +1100 Subject: [PATCH 48/66] fix context --- test/apis/v1alpha1/api_validation_integration_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/apis/v1alpha1/api_validation_integration_test.go b/test/apis/v1alpha1/api_validation_integration_test.go index f53024f9..d341f43c 100644 --- a/test/apis/v1alpha1/api_validation_integration_test.go +++ b/test/apis/v1alpha1/api_validation_integration_test.go @@ -111,7 +111,7 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { }) }) - Context("Test Member Cluster Service creation API validation - valid cases", func() { + Context("Test MultiClusterService creation API validation - valid cases", func() { It("should allow creating API with valid name size", func() { var name = "abc-123456789-123456789-123456789-123456789-123456789-123456789" From bc21a2f03f245ca0078c1bc1f0e63ac881bd74a6 Mon Sep 17 00:00:00 2001 From: Jamison Tsai Date: Thu, 12 Dec 2024 17:53:38 +1100 Subject: [PATCH 49/66] fix names of strings to test --- .../api_validation_integration_test.go | 220 +++++++++--------- 1 file changed, 110 insertions(+), 110 deletions(-) diff --git a/test/apis/v1alpha1/api_validation_integration_test.go b/test/apis/v1alpha1/api_validation_integration_test.go index d341f43c..99c6ea46 100644 --- a/test/apis/v1alpha1/api_validation_integration_test.go +++ b/test/apis/v1alpha1/api_validation_integration_test.go @@ -23,12 +23,12 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { Context("Test MultiClusterService API validation - invalid cases", func() { It("should deny creating API with invalid name size", func() { - var name = "abcdef-123456789-123456789-123456789-123456789-123456789-123456789-123456789" + var nameWithInvalidSize = "abcdef-123456789-123456789-123456789-123456789-123456789-123456789-123456789" // Create the API. multiClusterServiceName := &v1alpha1.MultiClusterService{ ObjectMeta: metav1.ObjectMeta{ - Name: name, + Name: nameWithInvalidSize, Namespace: testNamespace, }, Spec: v1alpha1.MultiClusterServiceSpec{ @@ -37,7 +37,7 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { }, }, } - By(fmt.Sprintf("expecting denial of CREATE API %s", name)) + By(fmt.Sprintf("expecting denial of CREATE API %s", nameWithInvalidSize)) var err = hubClient.Create(ctx, multiClusterServiceName) var statusErr *k8serrors.StatusError Expect(errors.As(err, &statusErr)).To(BeTrue(), fmt.Sprintf("Create API call produced error %s. Error type wanted is %s.", reflect.TypeOf(err), reflect.TypeOf(&k8serrors.StatusError{}))) @@ -45,12 +45,12 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { }) It("should deny creating API with invalid name starting with non-alphanumeric character", func() { - var name = "-abcdef-123456789-123456789-123456789-123456789-123456789" + var nameStartingWithNonAlphanum = "-abcdef-123456789-123456789-123456789-123456789-123456789" // Create the API. multiClusterServiceName := &v1alpha1.MultiClusterService{ ObjectMeta: metav1.ObjectMeta{ - Name: name, + Name: nameStartingWithNonAlphanum, Namespace: testNamespace, }, Spec: v1alpha1.MultiClusterServiceSpec{ @@ -59,7 +59,7 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { }, }, } - By(fmt.Sprintf("expecting denial of CREATE API %s", name)) + By(fmt.Sprintf("expecting denial of CREATE API %s", nameStartingWithNonAlphanum)) err := hubClient.Create(ctx, multiClusterServiceName) var statusErr *k8serrors.StatusError Expect(errors.As(err, &statusErr)).To(BeTrue(), fmt.Sprintf("Create API call produced error %s. Error type wanted is %s.", reflect.TypeOf(err), reflect.TypeOf(&k8serrors.StatusError{}))) @@ -67,12 +67,12 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { }) It("should deny creating API with invalid name ending with non-alphanumeric character", func() { - var name = "abcdef-123456789-123456789-123456789-123456789-123456789-" + var nameEndingWithNonAlphanum = "abcdef-123456789-123456789-123456789-123456789-123456789-" // Create the API. multiClusterServiceName := &v1alpha1.MultiClusterService{ ObjectMeta: metav1.ObjectMeta{ - Name: name, + Name: nameEndingWithNonAlphanum, Namespace: testNamespace, }, Spec: v1alpha1.MultiClusterServiceSpec{ @@ -81,7 +81,7 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { }, }, } - By(fmt.Sprintf("expecting denial of CREATE API %s", name)) + By(fmt.Sprintf("expecting denial of CREATE API %s", nameEndingWithNonAlphanum)) err := hubClient.Create(ctx, multiClusterServiceName) var statusErr *k8serrors.StatusError Expect(errors.As(err, &statusErr)).To(BeTrue(), fmt.Sprintf("Create API call produced error %s. Error type wanted is %s.", reflect.TypeOf(err), reflect.TypeOf(&k8serrors.StatusError{}))) @@ -89,12 +89,12 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { }) It("should deny creating API with invalid name containing character that is not alphanumeric and not -", func() { - var name = "a_bcdef-123456789-123456789-123456789-123456789-123456789-123456789-123456789" + var nameContainsUnderscore = "a_bcdef-123456789-123456789-123456789-123456789-123456789-123456789-123456789" // Create the API. multiClusterServiceName := &v1alpha1.MultiClusterService{ ObjectMeta: metav1.ObjectMeta{ - Name: name, + Name: nameContainsUnderscore, Namespace: testNamespace, }, Spec: v1alpha1.MultiClusterServiceSpec{ @@ -103,7 +103,7 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { }, }, } - By(fmt.Sprintf("expecting denial of CREATE API %s", name)) + By(fmt.Sprintf("expecting denial of CREATE API %s", nameContainsUnderscore)) err := hubClient.Create(ctx, multiClusterServiceName) var statusErr *k8serrors.StatusError Expect(errors.As(err, &statusErr)).To(BeTrue(), fmt.Sprintf("Create API call produced error %s. Error type wanted is %s.", reflect.TypeOf(err), reflect.TypeOf(&k8serrors.StatusError{}))) @@ -113,12 +113,12 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { Context("Test MultiClusterService creation API validation - valid cases", func() { It("should allow creating API with valid name size", func() { - var name = "abc-123456789-123456789-123456789-123456789-123456789-123456789" + var nameValid = "abc-123456789-123456789-123456789-123456789-123456789-123456789" // Create the API. multiClusterServiceName := &v1alpha1.MultiClusterService{ ObjectMeta: metav1.ObjectMeta{ - Name: name, + Name: nameValid, Namespace: testNamespace, }, Spec: v1alpha1.MultiClusterServiceSpec{ @@ -132,12 +132,12 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { }) It("should allow creating API with valid name starting with alphabet character", func() { - var name = "abc-123456789" + var nameValid = "abc-123456789" // Create the API. multiClusterServiceName := &v1alpha1.MultiClusterService{ ObjectMeta: metav1.ObjectMeta{ - Name: name, + Name: nameValid, Namespace: testNamespace, }, Spec: v1alpha1.MultiClusterServiceSpec{ @@ -151,12 +151,12 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { }) It("should allow creating API with valid name starting with numeric character", func() { - var name = "123-123456789" + var nameValid = "123-123456789" // Create the API. multiClusterServiceName := &v1alpha1.MultiClusterService{ ObjectMeta: metav1.ObjectMeta{ - Name: name, + Name: nameValid, Namespace: testNamespace, }, Spec: v1alpha1.MultiClusterServiceSpec{ @@ -170,12 +170,12 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { }) It("should allow creating API with valid name ending with alphabet character", func() { - var name = "123456789-abc" + var nameValid = "123456789-abc" // Create the API. multiClusterServiceName := &v1alpha1.MultiClusterService{ ObjectMeta: metav1.ObjectMeta{ - Name: name, + Name: nameValid, Namespace: testNamespace, }, Spec: v1alpha1.MultiClusterServiceSpec{ @@ -189,12 +189,12 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { }) It("should allow creating API with valid name ending with numeric character", func() { - var name = "123456789-123" + var nameValid = "123456789-123" // Create the API. multiClusterServiceName := &v1alpha1.MultiClusterService{ ObjectMeta: metav1.ObjectMeta{ - Name: name, + Name: nameValid, Namespace: testNamespace, }, Spec: v1alpha1.MultiClusterServiceSpec{ @@ -210,16 +210,16 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { Context("Test ServiceExport API validation - invalid cases", func() { It("should deny creating API with invalid name size", func() { - var name = "abcdef-123456789-123456789-123456789-123456789-123456789-123456789-123456789" + var nameWithInvalidSize = "abcdef-123456789-123456789-123456789-123456789-123456789-123456789-123456789" // Create the API. serviceExportName := &v1alpha1.ServiceExport{ ObjectMeta: metav1.ObjectMeta{ - Name: name, + Name: nameWithInvalidSize, Namespace: testNamespace, }, } - By(fmt.Sprintf("expecting denial of CREATE API %s", name)) + By(fmt.Sprintf("expecting denial of CREATE API %s", nameWithInvalidSize)) var err = hubClient.Create(ctx, serviceExportName) var statusErr *k8serrors.StatusError Expect(errors.As(err, &statusErr)).To(BeTrue(), fmt.Sprintf("Create API call produced error %s. Error type wanted is %s.", reflect.TypeOf(err), reflect.TypeOf(&k8serrors.StatusError{}))) @@ -227,16 +227,16 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { }) It("should deny creating API with invalid name starting with non-alphanumeric character", func() { - var name = "-abcdef-123456789-123456789-123456789-123456789-123456789-123456789" + var nameStartingWithNonAlphanum = "-abcdef-123456789-123456789-123456789-123456789-123456789-123456789" // Create the API. serviceExportName := &v1alpha1.ServiceExport{ ObjectMeta: metav1.ObjectMeta{ - Name: name, + Name: nameStartingWithNonAlphanum, Namespace: testNamespace, }, } - By(fmt.Sprintf("expecting denial of CREATE API %s", name)) + By(fmt.Sprintf("expecting denial of CREATE API %s", nameStartingWithNonAlphanum)) var err = hubClient.Create(ctx, serviceExportName) var statusErr *k8serrors.StatusError Expect(errors.As(err, &statusErr)).To(BeTrue(), fmt.Sprintf("Create API call produced error %s. Error type wanted is %s.", reflect.TypeOf(err), reflect.TypeOf(&k8serrors.StatusError{}))) @@ -244,16 +244,16 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { }) It("should deny creating API with invalid name ending with non-alphanumeric character", func() { - var name = "abcdef-abcdef-123456789-123456789-123456789-123456789-123456789-" + var nameEndingWithNonAlphanum = "abcdef-abcdef-123456789-123456789-123456789-123456789-123456789-" // Create the API. serviceExportName := &v1alpha1.ServiceExport{ ObjectMeta: metav1.ObjectMeta{ - Name: name, + Name: nameEndingWithNonAlphanum, Namespace: testNamespace, }, } - By(fmt.Sprintf("expecting denial of CREATE API %s", name)) + By(fmt.Sprintf("expecting denial of CREATE API %s", nameEndingWithNonAlphanum)) var err = hubClient.Create(ctx, serviceExportName) var statusErr *k8serrors.StatusError Expect(errors.As(err, &statusErr)).To(BeTrue(), fmt.Sprintf("Create API call produced error %s. Error type wanted is %s.", reflect.TypeOf(err), reflect.TypeOf(&k8serrors.StatusError{}))) @@ -261,16 +261,16 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { }) It("should deny creating API with invalid name containing character that is not alphanumeric and not -", func() { - var name = "a_bcdef-123456789-123456789-123456789-123456789-123456789-123456789-123456789" + var nameContainsUnderscore = "a_bcdef-123456789-123456789-123456789-123456789-123456789-123456789-123456789" // Create the API. serviceExportName := &v1alpha1.ServiceExport{ ObjectMeta: metav1.ObjectMeta{ - Name: name, + Name: nameContainsUnderscore, Namespace: testNamespace, }, } - By(fmt.Sprintf("expecting denial of CREATE API %s", name)) + By(fmt.Sprintf("expecting denial of CREATE API %s", nameContainsUnderscore)) var err = hubClient.Create(ctx, serviceExportName) var statusErr *k8serrors.StatusError Expect(errors.As(err, &statusErr)).To(BeTrue(), fmt.Sprintf("Create API call produced error %s. Error type wanted is %s.", reflect.TypeOf(err), reflect.TypeOf(&k8serrors.StatusError{}))) @@ -280,12 +280,12 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { Context("Test ServiceExport API validation - valid cases", func() { It("should allow creating API with valid name size", func() { - var name = "abc-123456789-123456789-123456789-123456789-123456789-123456789" + var nameValid = "abc-123456789-123456789-123456789-123456789-123456789-123456789" // Create the API. serviceExportName := &v1alpha1.ServiceExport{ ObjectMeta: metav1.ObjectMeta{ - Name: name, + Name: nameValid, Namespace: testNamespace, }, } @@ -294,12 +294,12 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { }) It("should allow creating API with valid name starting with alphabet character", func() { - var name = "abc-123456789" + var nameValid = "abc-123456789" // Create the API. serviceExportName := &v1alpha1.ServiceExport{ ObjectMeta: metav1.ObjectMeta{ - Name: name, + Name: nameValid, Namespace: testNamespace, }, } @@ -308,12 +308,12 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { }) It("should allow creating API with valid name starting with numeric character", func() { - var name = "123-123456789" + var nameValid = "123-123456789" // Create the API. serviceExportName := &v1alpha1.ServiceExport{ ObjectMeta: metav1.ObjectMeta{ - Name: name, + Name: nameValid, Namespace: testNamespace, }, } @@ -322,12 +322,12 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { }) It("should allow creating API with valid name ending with alphabet character", func() { - var name = "123456789-abc" + var nameValid = "123456789-abc" // Create the API. serviceExportName := &v1alpha1.ServiceExport{ ObjectMeta: metav1.ObjectMeta{ - Name: name, + Name: nameValid, Namespace: testNamespace, }, } @@ -336,12 +336,12 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { }) It("should allow creating API with valid name ending with numeric character", func() { - var name = "123456789-123" + var nameValid = "123456789-123" // Create the API. serviceExportName := &v1alpha1.ServiceExport{ ObjectMeta: metav1.ObjectMeta{ - Name: name, + Name: nameValid, Namespace: testNamespace, }, } @@ -352,16 +352,16 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { Context("Test ServiceImport API validation - invalid cases", func() { It("should deny creating API with invalid name size", func() { - var name = "abcdef-123456789-123456789-123456789-123456789-123456789-123456789-123456789" + var nameWithInvalidSize = "abcdef-123456789-123456789-123456789-123456789-123456789-123456789-123456789" // Create the API. serviceImportName := &v1alpha1.ServiceImport{ ObjectMeta: metav1.ObjectMeta{ - Name: name, + Name: nameWithInvalidSize, Namespace: testNamespace, }, } - By(fmt.Sprintf("expecting denial of CREATE API %s", name)) + By(fmt.Sprintf("expecting denial of CREATE API %s", nameWithInvalidSize)) var err = hubClient.Create(ctx, serviceImportName) var statusErr *k8serrors.StatusError Expect(errors.As(err, &statusErr)).To(BeTrue(), fmt.Sprintf("Create API call produced error %s. Error type wanted is %s.", reflect.TypeOf(err), reflect.TypeOf(&k8serrors.StatusError{}))) @@ -369,16 +369,16 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { }) It("should deny creating API with invalid name starting with non-alphanumeric character", func() { - var name = "-abcdef-123456789-123456789-123456789-123456789-123456789" + var nameStartingWithNonAlphanum = "-abcdef-123456789-123456789-123456789-123456789-123456789" // Create the API. serviceImportName := &v1alpha1.ServiceImport{ ObjectMeta: metav1.ObjectMeta{ - Name: name, + Name: nameStartingWithNonAlphanum, Namespace: testNamespace, }, } - By(fmt.Sprintf("expecting denial of CREATE API %s", name)) + By(fmt.Sprintf("expecting denial of CREATE API %s", nameStartingWithNonAlphanum)) var err = hubClient.Create(ctx, serviceImportName) var statusErr *k8serrors.StatusError Expect(errors.As(err, &statusErr)).To(BeTrue(), fmt.Sprintf("Create API call produced error %s. Error type wanted is %s.", reflect.TypeOf(err), reflect.TypeOf(&k8serrors.StatusError{}))) @@ -386,16 +386,16 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { }) It("should deny creating API with invalid name ending with non-alphanumeric character", func() { - var name = "abcdef-123456789-123456789-123456789-123456789-123456789-" + var nameEndingWithNonAlphanum = "abcdef-123456789-123456789-123456789-123456789-123456789-" // Create the API. serviceImportName := &v1alpha1.ServiceImport{ ObjectMeta: metav1.ObjectMeta{ - Name: name, + Name: nameEndingWithNonAlphanum, Namespace: testNamespace, }, } - By(fmt.Sprintf("expecting denial of CREATE API %s", name)) + By(fmt.Sprintf("expecting denial of CREATE API %s", nameEndingWithNonAlphanum)) var err = hubClient.Create(ctx, serviceImportName) var statusErr *k8serrors.StatusError Expect(errors.As(err, &statusErr)).To(BeTrue(), fmt.Sprintf("Create API call produced error %s. Error type wanted is %s.", reflect.TypeOf(err), reflect.TypeOf(&k8serrors.StatusError{}))) @@ -403,16 +403,16 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { }) It("should deny creating API with invalid name containing character that is not alphanumeric and not -", func() { - var name = "a_bcdef-123456789-123456789-123456789-123456789-123456789-123456789-123456789" + var nameContainsUnderscore = "a_bcdef-123456789-123456789-123456789-123456789-123456789-123456789-123456789" // Create the API. serviceImportName := &v1alpha1.ServiceImport{ ObjectMeta: metav1.ObjectMeta{ - Name: name, + Name: nameContainsUnderscore, Namespace: testNamespace, }, } - By(fmt.Sprintf("expecting denial of CREATE API %s", name)) + By(fmt.Sprintf("expecting denial of CREATE API %s", nameContainsUnderscore)) var err = hubClient.Create(ctx, serviceImportName) var statusErr *k8serrors.StatusError Expect(errors.As(err, &statusErr)).To(BeTrue(), fmt.Sprintf("Create API call produced error %s. Error type wanted is %s.", reflect.TypeOf(err), reflect.TypeOf(&k8serrors.StatusError{}))) @@ -422,12 +422,12 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { Context("Test ServiceImport API validation - valid cases", func() { It("should allow creating API with valid name size", func() { - var name = "abc-123456789-123456789-123456789-123456789-123456789-123456789" + var nameValid = "abc-123456789-123456789-123456789-123456789-123456789-123456789" // Create the API. serviceImportName := &v1alpha1.ServiceImport{ ObjectMeta: metav1.ObjectMeta{ - Name: name, + Name: nameValid, Namespace: testNamespace, }, } @@ -436,12 +436,12 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { }) It("should allow creating API with valid name starting with alphabet character", func() { - var name = "abc-123456789" + var nameValid = "abc-123456789" // Create the API. serviceImportName := &v1alpha1.ServiceImport{ ObjectMeta: metav1.ObjectMeta{ - Name: name, + Name: nameValid, Namespace: testNamespace, }, } @@ -450,12 +450,12 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { }) It("should allow creating API with valid name starting with numeric character", func() { - var name = "123-123456789" + var nameValid = "123-123456789" // Create the API. serviceImportName := &v1alpha1.ServiceImport{ ObjectMeta: metav1.ObjectMeta{ - Name: name, + Name: nameValid, Namespace: testNamespace, }, } @@ -464,12 +464,12 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { }) It("should allow creating API with valid name ending with alphabet character", func() { - var name = "123456789-abc" + var nameValid = "123456789-abc" // Create the API. serviceImportName := &v1alpha1.ServiceImport{ ObjectMeta: metav1.ObjectMeta{ - Name: name, + Name: nameValid, Namespace: testNamespace, }, } @@ -478,12 +478,12 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { }) It("should allow creating API with valid name ending with numeric character", func() { - var name = "123456789-123" + var nameValid = "123456789-123" // Create the API. serviceImportName := &v1alpha1.ServiceImport{ ObjectMeta: metav1.ObjectMeta{ - Name: name, + Name: nameValid, Namespace: testNamespace, }, } @@ -494,12 +494,12 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { Context("Test TrafficManagerProfile API validation - invalid cases", func() { It("should deny creating API with invalid name size", func() { - var name = "abcdef-123456789-123456789-123456789-123456789-123456789-123456789-123456789" + var nameWithInvalidSize = "abcdef-123456789-123456789-123456789-123456789-123456789-123456789-123456789" // Create the API. trafficManagerProfileName := &v1alpha1.TrafficManagerProfile{ ObjectMeta: metav1.ObjectMeta{ - Name: name, + Name: nameWithInvalidSize, Namespace: testNamespace, }, Spec: v1alpha1.TrafficManagerProfileSpec{ @@ -509,7 +509,7 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { }, }, } - By(fmt.Sprintf("expecting denial of CREATE API %s", name)) + By(fmt.Sprintf("expecting denial of CREATE API %s", nameWithInvalidSize)) var err = hubClient.Create(ctx, trafficManagerProfileName) var statusErr *k8serrors.StatusError Expect(errors.As(err, &statusErr)).To(BeTrue(), fmt.Sprintf("Create API call produced error %s. Error type wanted is %s.", reflect.TypeOf(err), reflect.TypeOf(&k8serrors.StatusError{}))) @@ -517,12 +517,12 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { }) It("should deny creating API with invalid name starting with non-alphanumeric character", func() { - var name = "-abcdef-123456789-123456789-123456789-123456789-123456789" + var nameStartingWithNonAlphanum = "-abcdef-123456789-123456789-123456789-123456789-123456789" // Create the API. trafficManagerProfileName := &v1alpha1.TrafficManagerProfile{ ObjectMeta: metav1.ObjectMeta{ - Name: name, + Name: nameStartingWithNonAlphanum, Namespace: testNamespace, }, Spec: v1alpha1.TrafficManagerProfileSpec{ @@ -532,7 +532,7 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { }, }, } - By(fmt.Sprintf("expecting denial of CREATE API %s", name)) + By(fmt.Sprintf("expecting denial of CREATE API %s", nameStartingWithNonAlphanum)) var err = hubClient.Create(ctx, trafficManagerProfileName) var statusErr *k8serrors.StatusError Expect(errors.As(err, &statusErr)).To(BeTrue(), fmt.Sprintf("Create API call produced error %s. Error type wanted is %s.", reflect.TypeOf(err), reflect.TypeOf(&k8serrors.StatusError{}))) @@ -540,12 +540,12 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { }) It("should deny creating API with invalid name ending with non-alphanumeric character", func() { - var name = "abcdef-123456789-123456789-123456789-123456789-123456789-" + var nameEndingWithNonAlphanum = "abcdef-123456789-123456789-123456789-123456789-123456789-" // Create the API. trafficManagerProfileName := &v1alpha1.TrafficManagerProfile{ ObjectMeta: metav1.ObjectMeta{ - Name: name, + Name: nameEndingWithNonAlphanum, Namespace: testNamespace, }, Spec: v1alpha1.TrafficManagerProfileSpec{ @@ -555,7 +555,7 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { }, }, } - By(fmt.Sprintf("expecting denial of CREATE API %s", name)) + By(fmt.Sprintf("expecting denial of CREATE API %s", nameEndingWithNonAlphanum)) var err = hubClient.Create(ctx, trafficManagerProfileName) var statusErr *k8serrors.StatusError Expect(errors.As(err, &statusErr)).To(BeTrue(), fmt.Sprintf("Create API call produced error %s. Error type wanted is %s.", reflect.TypeOf(err), reflect.TypeOf(&k8serrors.StatusError{}))) @@ -563,12 +563,12 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { }) It("should deny creating API with invalid name containing character that is not alphanumeric and not -", func() { - var name = "a_bcdef-123456789-123456789-123456789-123456789-123456789-123456789-123456789" + var nameContainsUnderscore = "a_bcdef-123456789-123456789-123456789-123456789-123456789-123456789-123456789" // Create the API. trafficManagerProfileName := &v1alpha1.TrafficManagerProfile{ ObjectMeta: metav1.ObjectMeta{ - Name: name, + Name: nameContainsUnderscore, Namespace: testNamespace, }, Spec: v1alpha1.TrafficManagerProfileSpec{ @@ -578,7 +578,7 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { }, }, } - By(fmt.Sprintf("expecting denial of CREATE API %s", name)) + By(fmt.Sprintf("expecting denial of CREATE API %s", nameContainsUnderscore)) var err = hubClient.Create(ctx, trafficManagerProfileName) var statusErr *k8serrors.StatusError Expect(errors.As(err, &statusErr)).To(BeTrue(), fmt.Sprintf("Create API call produced error %s. Error type wanted is %s.", reflect.TypeOf(err), reflect.TypeOf(&k8serrors.StatusError{}))) @@ -588,12 +588,12 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { Context("Test TrafficManagerProfile API validation - valid cases", func() { It("should allow creating API with valid name size", func() { - var name = "abc-123456789-123456789-123456789-123456789-123456789-123456789" + var nameValid = "abc-123456789-123456789-123456789-123456789-123456789-123456789" // Create the API. trafficManagerProfileName := &v1alpha1.TrafficManagerProfile{ ObjectMeta: metav1.ObjectMeta{ - Name: name, + Name: nameValid, Namespace: testNamespace, }, Spec: v1alpha1.TrafficManagerProfileSpec{ @@ -608,12 +608,12 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { }) It("should allow creating API with valid name starting with alphabet character", func() { - var name = "abc-123456789" + var nameValid = "abc-123456789" // Create the API. trafficManagerProfileName := &v1alpha1.TrafficManagerProfile{ ObjectMeta: metav1.ObjectMeta{ - Name: name, + Name: nameValid, Namespace: testNamespace, }, Spec: v1alpha1.TrafficManagerProfileSpec{ @@ -628,12 +628,12 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { }) It("should allow creating API with valid name starting with numeric character", func() { - var name = "123-123456789" + var nameValid = "123-123456789" // Create the API. trafficManagerProfileName := &v1alpha1.TrafficManagerProfile{ ObjectMeta: metav1.ObjectMeta{ - Name: name, + Name: nameValid, Namespace: testNamespace, }, Spec: v1alpha1.TrafficManagerProfileSpec{ @@ -648,12 +648,12 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { }) It("should allow creating API with valid name ending with alphabet character", func() { - var name = "123456789-abc" + var nameValid = "123456789-abc" // Create the API. trafficManagerProfileName := &v1alpha1.TrafficManagerProfile{ ObjectMeta: metav1.ObjectMeta{ - Name: name, + Name: nameValid, Namespace: testNamespace, }, Spec: v1alpha1.TrafficManagerProfileSpec{ @@ -668,12 +668,12 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { }) It("should allow creating API with valid name ending with numeric character", func() { - var name = "123456789-123" + var nameValid = "123456789-123" // Create the API. trafficManagerProfileName := &v1alpha1.TrafficManagerProfile{ ObjectMeta: metav1.ObjectMeta{ - Name: name, + Name: nameValid, Namespace: testNamespace, }, Spec: v1alpha1.TrafficManagerProfileSpec{ @@ -690,12 +690,12 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { Context("Test TrafficManagerBackend API validation - invalid cases", func() { It("should deny creating API with invalid name size", func() { - var name = "abcdef-123456789-123456789-123456789-123456789-123456789-123456789-123456789" + var nameWithInvalidSize = "abcdef-123456789-123456789-123456789-123456789-123456789-123456789-123456789" // Create the API. trafficManagerBackendName := &v1alpha1.TrafficManagerBackend{ ObjectMeta: metav1.ObjectMeta{ - Name: name, + Name: nameWithInvalidSize, Namespace: testNamespace, }, Spec: v1alpha1.TrafficManagerBackendSpec{ @@ -707,7 +707,7 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { }, }, } - By(fmt.Sprintf("expecting denial of CREATE API %s", name)) + By(fmt.Sprintf("expecting denial of CREATE API %s", nameWithInvalidSize)) var err = hubClient.Create(ctx, trafficManagerBackendName) var statusErr *k8serrors.StatusError Expect(errors.As(err, &statusErr)).To(BeTrue(), fmt.Sprintf("Create API call produced error %s. Error type wanted is %s.", reflect.TypeOf(err), reflect.TypeOf(&k8serrors.StatusError{}))) @@ -715,12 +715,12 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { }) It("should deny creating API with invalid name starting with non-alphanumeric character", func() { - var name = "-abcdef-123456789-123456789-123456789-123456789-123456789" + var nameStartingWithNonAlphanum = "-abcdef-123456789-123456789-123456789-123456789-123456789" // Create the API. trafficManagerBackendName := &v1alpha1.TrafficManagerBackend{ ObjectMeta: metav1.ObjectMeta{ - Name: name, + Name: nameStartingWithNonAlphanum, Namespace: testNamespace, }, Spec: v1alpha1.TrafficManagerBackendSpec{ @@ -732,7 +732,7 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { }, }, } - By(fmt.Sprintf("expecting denial of CREATE API %s", name)) + By(fmt.Sprintf("expecting denial of CREATE API %s", nameStartingWithNonAlphanum)) var err = hubClient.Create(ctx, trafficManagerBackendName) var statusErr *k8serrors.StatusError Expect(errors.As(err, &statusErr)).To(BeTrue(), fmt.Sprintf("Create API call produced error %s. Error type wanted is %s.", reflect.TypeOf(err), reflect.TypeOf(&k8serrors.StatusError{}))) @@ -740,12 +740,12 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { }) It("should deny creating API with invalid name ending with non-alphanumeric character", func() { - var name = "abcdef-123456789-123456789-123456789-123456789-123456789-" + var nameEndingWithNonAlphanum = "abcdef-123456789-123456789-123456789-123456789-123456789-" // Create the API. trafficManagerBackendName := &v1alpha1.TrafficManagerBackend{ ObjectMeta: metav1.ObjectMeta{ - Name: name, + Name: nameEndingWithNonAlphanum, Namespace: testNamespace, }, Spec: v1alpha1.TrafficManagerBackendSpec{ @@ -757,7 +757,7 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { }, }, } - By(fmt.Sprintf("expecting denial of CREATE API %s", name)) + By(fmt.Sprintf("expecting denial of CREATE API %s", nameEndingWithNonAlphanum)) var err = hubClient.Create(ctx, trafficManagerBackendName) var statusErr *k8serrors.StatusError Expect(errors.As(err, &statusErr)).To(BeTrue(), fmt.Sprintf("Create API call produced error %s. Error type wanted is %s.", reflect.TypeOf(err), reflect.TypeOf(&k8serrors.StatusError{}))) @@ -765,12 +765,12 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { }) It("should deny creating API with invalid name containing character that is not alphanumeric and not -", func() { - var name = "a_bcdef-123456789-123456789-123456789-123456789-123456789-123456789-123456789" + var nameContainsUnderscore = "a_bcdef-123456789-123456789-123456789-123456789-123456789-123456789-123456789" // Create the API. trafficManagerBackendName := &v1alpha1.TrafficManagerBackend{ ObjectMeta: metav1.ObjectMeta{ - Name: name, + Name: nameContainsUnderscore, Namespace: testNamespace, }, Spec: v1alpha1.TrafficManagerBackendSpec{ @@ -782,7 +782,7 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { }, }, } - By(fmt.Sprintf("expecting denial of CREATE API %s", name)) + By(fmt.Sprintf("expecting denial of CREATE API %s", nameContainsUnderscore)) var err = hubClient.Create(ctx, trafficManagerBackendName) var statusErr *k8serrors.StatusError Expect(errors.As(err, &statusErr)).To(BeTrue(), fmt.Sprintf("Create API call produced error %s. Error type wanted is %s.", reflect.TypeOf(err), reflect.TypeOf(&k8serrors.StatusError{}))) @@ -792,12 +792,12 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { Context("Test TrafficManagerBackend API validation - valid cases", func() { It("should allow creating API with valid name size", func() { - var name = "abc-123456789-123456789-123456789-123456789-123456789-123456789" + var nameValid = "abc-123456789-123456789-123456789-123456789-123456789-123456789" // Create the API. trafficManagerBackendName := &v1alpha1.TrafficManagerBackend{ ObjectMeta: metav1.ObjectMeta{ - Name: name, + Name: nameValid, Namespace: testNamespace, }, Spec: v1alpha1.TrafficManagerBackendSpec{ @@ -814,12 +814,12 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { }) It("should allow creating API with valid name starting with alphabet character", func() { - var name = "abc-123456789" + var nameValid = "abc-123456789" // Create the API. trafficManagerBackendName := &v1alpha1.TrafficManagerBackend{ ObjectMeta: metav1.ObjectMeta{ - Name: name, + Name: nameValid, Namespace: testNamespace, }, Spec: v1alpha1.TrafficManagerBackendSpec{ @@ -836,12 +836,12 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { }) It("should allow creating API with valid name starting with numeric character", func() { - var name = "123-123456789" + var nameValid = "123-123456789" // Create the API. trafficManagerBackendName := &v1alpha1.TrafficManagerBackend{ ObjectMeta: metav1.ObjectMeta{ - Name: name, + Name: nameValid, Namespace: testNamespace, }, Spec: v1alpha1.TrafficManagerBackendSpec{ @@ -858,12 +858,12 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { }) It("should allow creating API with valid name ending with alphabet character", func() { - var name = "123456789-abc" + var nameValid = "123456789-abc" // Create the API. trafficManagerBackendName := &v1alpha1.TrafficManagerBackend{ ObjectMeta: metav1.ObjectMeta{ - Name: name, + Name: nameValid, Namespace: testNamespace, }, Spec: v1alpha1.TrafficManagerBackendSpec{ @@ -880,12 +880,12 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { }) It("should allow creating API with valid name ending with numeric character", func() { - var name = "123456789-123" + var nameValid = "123456789-123" // Create the API. trafficManagerBackendName := &v1alpha1.TrafficManagerBackend{ ObjectMeta: metav1.ObjectMeta{ - Name: name, + Name: nameValid, Namespace: testNamespace, }, Spec: v1alpha1.TrafficManagerBackendSpec{ From 2c83da8b25c6f81024952e369fdd3366dab2a96b Mon Sep 17 00:00:00 2001 From: Jamison Tsai Date: Thu, 12 Dec 2024 17:56:54 +1100 Subject: [PATCH 50/66] create global variable for nameWithInvalidSize --- test/apis/v1alpha1/api_validation_integration_test.go | 5 ----- test/apis/v1alpha1/suite_test.go | 11 ++++++----- 2 files changed, 6 insertions(+), 10 deletions(-) diff --git a/test/apis/v1alpha1/api_validation_integration_test.go b/test/apis/v1alpha1/api_validation_integration_test.go index 99c6ea46..954f1f6a 100644 --- a/test/apis/v1alpha1/api_validation_integration_test.go +++ b/test/apis/v1alpha1/api_validation_integration_test.go @@ -23,7 +23,6 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { Context("Test MultiClusterService API validation - invalid cases", func() { It("should deny creating API with invalid name size", func() { - var nameWithInvalidSize = "abcdef-123456789-123456789-123456789-123456789-123456789-123456789-123456789" // Create the API. multiClusterServiceName := &v1alpha1.MultiClusterService{ @@ -210,7 +209,6 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { Context("Test ServiceExport API validation - invalid cases", func() { It("should deny creating API with invalid name size", func() { - var nameWithInvalidSize = "abcdef-123456789-123456789-123456789-123456789-123456789-123456789-123456789" // Create the API. serviceExportName := &v1alpha1.ServiceExport{ @@ -352,7 +350,6 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { Context("Test ServiceImport API validation - invalid cases", func() { It("should deny creating API with invalid name size", func() { - var nameWithInvalidSize = "abcdef-123456789-123456789-123456789-123456789-123456789-123456789-123456789" // Create the API. serviceImportName := &v1alpha1.ServiceImport{ @@ -494,7 +491,6 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { Context("Test TrafficManagerProfile API validation - invalid cases", func() { It("should deny creating API with invalid name size", func() { - var nameWithInvalidSize = "abcdef-123456789-123456789-123456789-123456789-123456789-123456789-123456789" // Create the API. trafficManagerProfileName := &v1alpha1.TrafficManagerProfile{ @@ -690,7 +686,6 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { Context("Test TrafficManagerBackend API validation - invalid cases", func() { It("should deny creating API with invalid name size", func() { - var nameWithInvalidSize = "abcdef-123456789-123456789-123456789-123456789-123456789-123456789-123456789" // Create the API. trafficManagerBackendName := &v1alpha1.TrafficManagerBackend{ diff --git a/test/apis/v1alpha1/suite_test.go b/test/apis/v1alpha1/suite_test.go index 3239a76b..0db943d5 100644 --- a/test/apis/v1alpha1/suite_test.go +++ b/test/apis/v1alpha1/suite_test.go @@ -27,11 +27,12 @@ import ( ) var ( - hubTestEnv *envtest.Environment - hubClient client.Client - ctx context.Context - cancel context.CancelFunc - testNamespace = "testnamespace" + hubTestEnv *envtest.Environment + hubClient client.Client + ctx context.Context + cancel context.CancelFunc + testNamespace = "testnamespace" + nameWithInvalidSize = "abcdef-123456789-123456789-123456789-123456789-123456789-123456789-123456789" ) func TestAPIs(t *testing.T) { From c0acd83babc5d6988f0391cd834d706445e258d1 Mon Sep 17 00:00:00 2001 From: Jamison Tsai Date: Thu, 12 Dec 2024 20:47:11 +1100 Subject: [PATCH 51/66] install ginkgo --- Makefile | 1 + 1 file changed, 1 insertion(+) diff --git a/Makefile b/Makefile index ad7cf207..fc34952f 100644 --- a/Makefile +++ b/Makefile @@ -110,6 +110,7 @@ local-unit-test: $(ENVTEST) ## Run tests. .PHONY: integration-test integration-test: $(ENVTEST) ## Run integration tests. + go install github.com/onsi/ginkgo/v2/ginkgo@v2.21.0 CGO_ENABLED=1 KUBEBUILDER_ASSETS="$(shell $(ENVTEST) use $(ENVTEST_K8S_VERSION) -p path)" \ ginkgo -v -p --race --cover --coverpkg=./... ./test/apis/... From 26533af3b313b74d40cfe59f69e2477a5faf472e Mon Sep 17 00:00:00 2001 From: Jamison Tsai Date: Thu, 2 Jan 2025 19:29:57 +1100 Subject: [PATCH 52/66] create global name variables within integration test file --- .../api_validation_integration_test.go | 29 ++++++++----------- test/apis/v1alpha1/suite_test.go | 11 ++++--- 2 files changed, 17 insertions(+), 23 deletions(-) diff --git a/test/apis/v1alpha1/api_validation_integration_test.go b/test/apis/v1alpha1/api_validation_integration_test.go index 954f1f6a..dfa8dce8 100644 --- a/test/apis/v1alpha1/api_validation_integration_test.go +++ b/test/apis/v1alpha1/api_validation_integration_test.go @@ -8,17 +8,22 @@ package v1alpha1 import ( "errors" "fmt" - "reflect" - . "github.com/onsi/ginkgo/v2" . "github.com/onsi/gomega" k8serrors "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/utils/ptr" + "reflect" v1alpha1 "go.goms.io/fleet-networking/api/v1alpha1" ) +var ( + nameStartingWithNonAlphanum = "-abcdef-123456789-123456789-123456789-123456789-123456789" + nameValidStartingWithAphabet = "abc-123456789" + nameWithInvalidSize = "abcdef-123456789-123456789-123456789-123456789-123456789-123456789-123456789" +) + var _ = Describe("Test networking v1alpha1 API validation", func() { Context("Test MultiClusterService API validation - invalid cases", func() { @@ -44,7 +49,6 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { }) It("should deny creating API with invalid name starting with non-alphanumeric character", func() { - var nameStartingWithNonAlphanum = "-abcdef-123456789-123456789-123456789-123456789-123456789" // Create the API. multiClusterServiceName := &v1alpha1.MultiClusterService{ @@ -131,12 +135,11 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { }) It("should allow creating API with valid name starting with alphabet character", func() { - var nameValid = "abc-123456789" // Create the API. multiClusterServiceName := &v1alpha1.MultiClusterService{ ObjectMeta: metav1.ObjectMeta{ - Name: nameValid, + Name: nameValidStartingWithAphabet, Namespace: testNamespace, }, Spec: v1alpha1.MultiClusterServiceSpec{ @@ -225,7 +228,6 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { }) It("should deny creating API with invalid name starting with non-alphanumeric character", func() { - var nameStartingWithNonAlphanum = "-abcdef-123456789-123456789-123456789-123456789-123456789-123456789" // Create the API. serviceExportName := &v1alpha1.ServiceExport{ @@ -292,12 +294,11 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { }) It("should allow creating API with valid name starting with alphabet character", func() { - var nameValid = "abc-123456789" // Create the API. serviceExportName := &v1alpha1.ServiceExport{ ObjectMeta: metav1.ObjectMeta{ - Name: nameValid, + Name: nameValidStartingWithAphabet, Namespace: testNamespace, }, } @@ -366,7 +367,6 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { }) It("should deny creating API with invalid name starting with non-alphanumeric character", func() { - var nameStartingWithNonAlphanum = "-abcdef-123456789-123456789-123456789-123456789-123456789" // Create the API. serviceImportName := &v1alpha1.ServiceImport{ @@ -433,12 +433,11 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { }) It("should allow creating API with valid name starting with alphabet character", func() { - var nameValid = "abc-123456789" // Create the API. serviceImportName := &v1alpha1.ServiceImport{ ObjectMeta: metav1.ObjectMeta{ - Name: nameValid, + Name: nameValidStartingWithAphabet, Namespace: testNamespace, }, } @@ -513,7 +512,6 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { }) It("should deny creating API with invalid name starting with non-alphanumeric character", func() { - var nameStartingWithNonAlphanum = "-abcdef-123456789-123456789-123456789-123456789-123456789" // Create the API. trafficManagerProfileName := &v1alpha1.TrafficManagerProfile{ @@ -604,12 +602,11 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { }) It("should allow creating API with valid name starting with alphabet character", func() { - var nameValid = "abc-123456789" // Create the API. trafficManagerProfileName := &v1alpha1.TrafficManagerProfile{ ObjectMeta: metav1.ObjectMeta{ - Name: nameValid, + Name: nameValidStartingWithAphabet, Namespace: testNamespace, }, Spec: v1alpha1.TrafficManagerProfileSpec{ @@ -710,7 +707,6 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { }) It("should deny creating API with invalid name starting with non-alphanumeric character", func() { - var nameStartingWithNonAlphanum = "-abcdef-123456789-123456789-123456789-123456789-123456789" // Create the API. trafficManagerBackendName := &v1alpha1.TrafficManagerBackend{ @@ -809,12 +805,11 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { }) It("should allow creating API with valid name starting with alphabet character", func() { - var nameValid = "abc-123456789" // Create the API. trafficManagerBackendName := &v1alpha1.TrafficManagerBackend{ ObjectMeta: metav1.ObjectMeta{ - Name: nameValid, + Name: nameValidStartingWithAphabet, Namespace: testNamespace, }, Spec: v1alpha1.TrafficManagerBackendSpec{ diff --git a/test/apis/v1alpha1/suite_test.go b/test/apis/v1alpha1/suite_test.go index 0db943d5..3239a76b 100644 --- a/test/apis/v1alpha1/suite_test.go +++ b/test/apis/v1alpha1/suite_test.go @@ -27,12 +27,11 @@ import ( ) var ( - hubTestEnv *envtest.Environment - hubClient client.Client - ctx context.Context - cancel context.CancelFunc - testNamespace = "testnamespace" - nameWithInvalidSize = "abcdef-123456789-123456789-123456789-123456789-123456789-123456789-123456789" + hubTestEnv *envtest.Environment + hubClient client.Client + ctx context.Context + cancel context.CancelFunc + testNamespace = "testnamespace" ) func TestAPIs(t *testing.T) { From 5349a5056f777fe8e87b197ba8c96d0a11c4a2cb Mon Sep 17 00:00:00 2001 From: Jamison Tsai Date: Thu, 2 Jan 2025 19:48:39 +1100 Subject: [PATCH 53/66] create global name variables for all remaining name types --- .../api_validation_integration_test.go | 66 ++++++------------- 1 file changed, 21 insertions(+), 45 deletions(-) diff --git a/test/apis/v1alpha1/api_validation_integration_test.go b/test/apis/v1alpha1/api_validation_integration_test.go index dfa8dce8..7700eed9 100644 --- a/test/apis/v1alpha1/api_validation_integration_test.go +++ b/test/apis/v1alpha1/api_validation_integration_test.go @@ -19,8 +19,14 @@ import ( ) var ( + nameContainsUnderscore = "a_bcdef-123456789-123456789-123456789-123456789-123456789-123456789-123456789" + nameEndingWithNonAlphanum = "abcdef-123456789-123456789-123456789-123456789-123456789-" nameStartingWithNonAlphanum = "-abcdef-123456789-123456789-123456789-123456789-123456789" + nameValid = "abc-123456789-123456789-123456789-123456789-123456789-123456789" + nameValidEndingWithAphabet = "123456789-abc" + nameValidEndingWithNumber = "123456789-123" nameValidStartingWithAphabet = "abc-123456789" + nameValidStartingWithNumber = "123-123456789" nameWithInvalidSize = "abcdef-123456789-123456789-123456789-123456789-123456789-123456789-123456789" ) @@ -70,7 +76,6 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { }) It("should deny creating API with invalid name ending with non-alphanumeric character", func() { - var nameEndingWithNonAlphanum = "abcdef-123456789-123456789-123456789-123456789-123456789-" // Create the API. multiClusterServiceName := &v1alpha1.MultiClusterService{ @@ -92,7 +97,6 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { }) It("should deny creating API with invalid name containing character that is not alphanumeric and not -", func() { - var nameContainsUnderscore = "a_bcdef-123456789-123456789-123456789-123456789-123456789-123456789-123456789" // Create the API. multiClusterServiceName := &v1alpha1.MultiClusterService{ @@ -116,7 +120,6 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { Context("Test MultiClusterService creation API validation - valid cases", func() { It("should allow creating API with valid name size", func() { - var nameValid = "abc-123456789-123456789-123456789-123456789-123456789-123456789" // Create the API. multiClusterServiceName := &v1alpha1.MultiClusterService{ @@ -153,12 +156,11 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { }) It("should allow creating API with valid name starting with numeric character", func() { - var nameValid = "123-123456789" // Create the API. multiClusterServiceName := &v1alpha1.MultiClusterService{ ObjectMeta: metav1.ObjectMeta{ - Name: nameValid, + Name: nameValidStartingWithNumber, Namespace: testNamespace, }, Spec: v1alpha1.MultiClusterServiceSpec{ @@ -172,12 +174,11 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { }) It("should allow creating API with valid name ending with alphabet character", func() { - var nameValid = "123456789-abc" // Create the API. multiClusterServiceName := &v1alpha1.MultiClusterService{ ObjectMeta: metav1.ObjectMeta{ - Name: nameValid, + Name: nameValidEndingWithAphabet, Namespace: testNamespace, }, Spec: v1alpha1.MultiClusterServiceSpec{ @@ -191,12 +192,11 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { }) It("should allow creating API with valid name ending with numeric character", func() { - var nameValid = "123456789-123" // Create the API. multiClusterServiceName := &v1alpha1.MultiClusterService{ ObjectMeta: metav1.ObjectMeta{ - Name: nameValid, + Name: nameValidEndingWithNumber, Namespace: testNamespace, }, Spec: v1alpha1.MultiClusterServiceSpec{ @@ -244,7 +244,6 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { }) It("should deny creating API with invalid name ending with non-alphanumeric character", func() { - var nameEndingWithNonAlphanum = "abcdef-abcdef-123456789-123456789-123456789-123456789-123456789-" // Create the API. serviceExportName := &v1alpha1.ServiceExport{ @@ -261,7 +260,6 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { }) It("should deny creating API with invalid name containing character that is not alphanumeric and not -", func() { - var nameContainsUnderscore = "a_bcdef-123456789-123456789-123456789-123456789-123456789-123456789-123456789" // Create the API. serviceExportName := &v1alpha1.ServiceExport{ @@ -280,7 +278,6 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { Context("Test ServiceExport API validation - valid cases", func() { It("should allow creating API with valid name size", func() { - var nameValid = "abc-123456789-123456789-123456789-123456789-123456789-123456789" // Create the API. serviceExportName := &v1alpha1.ServiceExport{ @@ -307,12 +304,11 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { }) It("should allow creating API with valid name starting with numeric character", func() { - var nameValid = "123-123456789" // Create the API. serviceExportName := &v1alpha1.ServiceExport{ ObjectMeta: metav1.ObjectMeta{ - Name: nameValid, + Name: nameValidStartingWithNumber, Namespace: testNamespace, }, } @@ -321,12 +317,11 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { }) It("should allow creating API with valid name ending with alphabet character", func() { - var nameValid = "123456789-abc" // Create the API. serviceExportName := &v1alpha1.ServiceExport{ ObjectMeta: metav1.ObjectMeta{ - Name: nameValid, + Name: nameValidEndingWithAphabet, Namespace: testNamespace, }, } @@ -335,12 +330,11 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { }) It("should allow creating API with valid name ending with numeric character", func() { - var nameValid = "123456789-123" // Create the API. serviceExportName := &v1alpha1.ServiceExport{ ObjectMeta: metav1.ObjectMeta{ - Name: nameValid, + Name: nameValidEndingWithNumber, Namespace: testNamespace, }, } @@ -383,7 +377,6 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { }) It("should deny creating API with invalid name ending with non-alphanumeric character", func() { - var nameEndingWithNonAlphanum = "abcdef-123456789-123456789-123456789-123456789-123456789-" // Create the API. serviceImportName := &v1alpha1.ServiceImport{ @@ -400,7 +393,6 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { }) It("should deny creating API with invalid name containing character that is not alphanumeric and not -", func() { - var nameContainsUnderscore = "a_bcdef-123456789-123456789-123456789-123456789-123456789-123456789-123456789" // Create the API. serviceImportName := &v1alpha1.ServiceImport{ @@ -419,7 +411,6 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { Context("Test ServiceImport API validation - valid cases", func() { It("should allow creating API with valid name size", func() { - var nameValid = "abc-123456789-123456789-123456789-123456789-123456789-123456789" // Create the API. serviceImportName := &v1alpha1.ServiceImport{ @@ -446,12 +437,11 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { }) It("should allow creating API with valid name starting with numeric character", func() { - var nameValid = "123-123456789" // Create the API. serviceImportName := &v1alpha1.ServiceImport{ ObjectMeta: metav1.ObjectMeta{ - Name: nameValid, + Name: nameValidStartingWithNumber, Namespace: testNamespace, }, } @@ -460,12 +450,11 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { }) It("should allow creating API with valid name ending with alphabet character", func() { - var nameValid = "123456789-abc" // Create the API. serviceImportName := &v1alpha1.ServiceImport{ ObjectMeta: metav1.ObjectMeta{ - Name: nameValid, + Name: nameValidEndingWithAphabet, Namespace: testNamespace, }, } @@ -474,12 +463,11 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { }) It("should allow creating API with valid name ending with numeric character", func() { - var nameValid = "123456789-123" // Create the API. serviceImportName := &v1alpha1.ServiceImport{ ObjectMeta: metav1.ObjectMeta{ - Name: nameValid, + Name: nameValidEndingWithNumber, Namespace: testNamespace, }, } @@ -534,7 +522,6 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { }) It("should deny creating API with invalid name ending with non-alphanumeric character", func() { - var nameEndingWithNonAlphanum = "abcdef-123456789-123456789-123456789-123456789-123456789-" // Create the API. trafficManagerProfileName := &v1alpha1.TrafficManagerProfile{ @@ -557,7 +544,6 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { }) It("should deny creating API with invalid name containing character that is not alphanumeric and not -", func() { - var nameContainsUnderscore = "a_bcdef-123456789-123456789-123456789-123456789-123456789-123456789-123456789" // Create the API. trafficManagerProfileName := &v1alpha1.TrafficManagerProfile{ @@ -582,7 +568,6 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { Context("Test TrafficManagerProfile API validation - valid cases", func() { It("should allow creating API with valid name size", func() { - var nameValid = "abc-123456789-123456789-123456789-123456789-123456789-123456789" // Create the API. trafficManagerProfileName := &v1alpha1.TrafficManagerProfile{ @@ -621,12 +606,11 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { }) It("should allow creating API with valid name starting with numeric character", func() { - var nameValid = "123-123456789" // Create the API. trafficManagerProfileName := &v1alpha1.TrafficManagerProfile{ ObjectMeta: metav1.ObjectMeta{ - Name: nameValid, + Name: nameValidStartingWithNumber, Namespace: testNamespace, }, Spec: v1alpha1.TrafficManagerProfileSpec{ @@ -641,12 +625,11 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { }) It("should allow creating API with valid name ending with alphabet character", func() { - var nameValid = "123456789-abc" // Create the API. trafficManagerProfileName := &v1alpha1.TrafficManagerProfile{ ObjectMeta: metav1.ObjectMeta{ - Name: nameValid, + Name: nameValidEndingWithAphabet, Namespace: testNamespace, }, Spec: v1alpha1.TrafficManagerProfileSpec{ @@ -661,12 +644,11 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { }) It("should allow creating API with valid name ending with numeric character", func() { - var nameValid = "123456789-123" // Create the API. trafficManagerProfileName := &v1alpha1.TrafficManagerProfile{ ObjectMeta: metav1.ObjectMeta{ - Name: nameValid, + Name: nameValidEndingWithNumber, Namespace: testNamespace, }, Spec: v1alpha1.TrafficManagerProfileSpec{ @@ -731,7 +713,6 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { }) It("should deny creating API with invalid name ending with non-alphanumeric character", func() { - var nameEndingWithNonAlphanum = "abcdef-123456789-123456789-123456789-123456789-123456789-" // Create the API. trafficManagerBackendName := &v1alpha1.TrafficManagerBackend{ @@ -756,7 +737,6 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { }) It("should deny creating API with invalid name containing character that is not alphanumeric and not -", func() { - var nameContainsUnderscore = "a_bcdef-123456789-123456789-123456789-123456789-123456789-123456789-123456789" // Create the API. trafficManagerBackendName := &v1alpha1.TrafficManagerBackend{ @@ -783,7 +763,6 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { Context("Test TrafficManagerBackend API validation - valid cases", func() { It("should allow creating API with valid name size", func() { - var nameValid = "abc-123456789-123456789-123456789-123456789-123456789-123456789" // Create the API. trafficManagerBackendName := &v1alpha1.TrafficManagerBackend{ @@ -826,12 +805,11 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { }) It("should allow creating API with valid name starting with numeric character", func() { - var nameValid = "123-123456789" // Create the API. trafficManagerBackendName := &v1alpha1.TrafficManagerBackend{ ObjectMeta: metav1.ObjectMeta{ - Name: nameValid, + Name: nameValidStartingWithNumber, Namespace: testNamespace, }, Spec: v1alpha1.TrafficManagerBackendSpec{ @@ -848,12 +826,11 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { }) It("should allow creating API with valid name ending with alphabet character", func() { - var nameValid = "123456789-abc" // Create the API. trafficManagerBackendName := &v1alpha1.TrafficManagerBackend{ ObjectMeta: metav1.ObjectMeta{ - Name: nameValid, + Name: nameValidEndingWithAphabet, Namespace: testNamespace, }, Spec: v1alpha1.TrafficManagerBackendSpec{ @@ -870,12 +847,11 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { }) It("should allow creating API with valid name ending with numeric character", func() { - var nameValid = "123456789-123" // Create the API. trafficManagerBackendName := &v1alpha1.TrafficManagerBackend{ ObjectMeta: metav1.ObjectMeta{ - Name: nameValid, + Name: nameValidEndingWithNumber, Namespace: testNamespace, }, Spec: v1alpha1.TrafficManagerBackendSpec{ From c4a8a81a69411bdd7d4111bb64567f064ea5dc8a Mon Sep 17 00:00:00 2001 From: Jamison Tsai Date: Thu, 2 Jan 2025 19:51:34 +1100 Subject: [PATCH 54/66] fix hubclient creation failure message and add deletiong failure message --- test/apis/v1alpha1/suite_test.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/apis/v1alpha1/suite_test.go b/test/apis/v1alpha1/suite_test.go index 3239a76b..eecc4427 100644 --- a/test/apis/v1alpha1/suite_test.go +++ b/test/apis/v1alpha1/suite_test.go @@ -86,7 +86,7 @@ var _ = BeforeSuite(func() { Name: testNamespace, }, } - Expect(hubClient.Create(ctx, &ns)).Should(Succeed(), "failed to delete namespace") + Expect(hubClient.Create(ctx, &ns)).Should(Succeed(), "failed to create namespace") go func() { defer GinkgoRecover() @@ -104,7 +104,7 @@ var _ = AfterSuite(func() { Name: testNamespace, }, } - Expect(hubClient.Delete(ctx, &ns)).Should(Succeed()) + Expect(hubClient.Delete(ctx, &ns)).Should(Succeed(), "failed to delete namespace") cancel() From 6ea313b6283e15ec94d927450fd47edd27c8916d Mon Sep 17 00:00:00 2001 From: Jamison Tsai Date: Thu, 2 Jan 2025 19:59:11 +1100 Subject: [PATCH 55/66] add hub client creation and deletion messages in integration test file --- .../api_validation_integration_test.go | 100 +++++++++--------- 1 file changed, 50 insertions(+), 50 deletions(-) diff --git a/test/apis/v1alpha1/api_validation_integration_test.go b/test/apis/v1alpha1/api_validation_integration_test.go index 7700eed9..eefa4bfe 100644 --- a/test/apis/v1alpha1/api_validation_integration_test.go +++ b/test/apis/v1alpha1/api_validation_integration_test.go @@ -133,8 +133,8 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { }, }, } - Expect(hubClient.Create(ctx, multiClusterServiceName)).Should(Succeed()) - Expect(hubClient.Delete(ctx, multiClusterServiceName)).Should(Succeed()) + Expect(hubClient.Create(ctx, multiClusterServiceName)).Should(Succeed(), "failed to create multiClusterService") + Expect(hubClient.Delete(ctx, multiClusterServiceName)).Should(Succeed(), "failed to delete multiClusterService") }) It("should allow creating API with valid name starting with alphabet character", func() { @@ -151,8 +151,8 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { }, }, } - Expect(hubClient.Create(ctx, multiClusterServiceName)).Should(Succeed()) - Expect(hubClient.Delete(ctx, multiClusterServiceName)).Should(Succeed()) + Expect(hubClient.Create(ctx, multiClusterServiceName)).Should(Succeed(), "failed to create multiClusterService") + Expect(hubClient.Delete(ctx, multiClusterServiceName)).Should(Succeed(), "failed to delete multiClusterService") }) It("should allow creating API with valid name starting with numeric character", func() { @@ -169,8 +169,8 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { }, }, } - Expect(hubClient.Create(ctx, multiClusterServiceName)).Should(Succeed()) - Expect(hubClient.Delete(ctx, multiClusterServiceName)).Should(Succeed()) + Expect(hubClient.Create(ctx, multiClusterServiceName)).Should(Succeed(), "failed to create multiClusterService") + Expect(hubClient.Delete(ctx, multiClusterServiceName)).Should(Succeed(), "failed to delete multiClusterService") }) It("should allow creating API with valid name ending with alphabet character", func() { @@ -187,8 +187,8 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { }, }, } - Expect(hubClient.Create(ctx, multiClusterServiceName)).Should(Succeed()) - Expect(hubClient.Delete(ctx, multiClusterServiceName)).Should(Succeed()) + Expect(hubClient.Create(ctx, multiClusterServiceName)).Should(Succeed(), "failed to create multiClusterService") + Expect(hubClient.Delete(ctx, multiClusterServiceName)).Should(Succeed(), "failed to delete multiClusterService") }) It("should allow creating API with valid name ending with numeric character", func() { @@ -205,8 +205,8 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { }, }, } - Expect(hubClient.Create(ctx, multiClusterServiceName)).Should(Succeed()) - Expect(hubClient.Delete(ctx, multiClusterServiceName)).Should(Succeed()) + Expect(hubClient.Create(ctx, multiClusterServiceName)).Should(Succeed(), "failed to create multiClusterService") + Expect(hubClient.Delete(ctx, multiClusterServiceName)).Should(Succeed(), "failed to delete multiClusterService") }) }) @@ -286,8 +286,8 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { Namespace: testNamespace, }, } - Expect(hubClient.Create(ctx, serviceExportName)).Should(Succeed()) - Expect(hubClient.Delete(ctx, serviceExportName)).Should(Succeed()) + Expect(hubClient.Create(ctx, serviceExportName)).Should(Succeed(), "failed to create serviceExport") + Expect(hubClient.Delete(ctx, serviceExportName)).Should(Succeed(), "failed to delete serviceExport") }) It("should allow creating API with valid name starting with alphabet character", func() { @@ -299,8 +299,8 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { Namespace: testNamespace, }, } - Expect(hubClient.Create(ctx, serviceExportName)).Should(Succeed()) - Expect(hubClient.Delete(ctx, serviceExportName)).Should(Succeed()) + Expect(hubClient.Create(ctx, serviceExportName)).Should(Succeed(), "failed to create serviceExport") + Expect(hubClient.Delete(ctx, serviceExportName)).Should(Succeed(), "failed to delete serviceExport") }) It("should allow creating API with valid name starting with numeric character", func() { @@ -312,8 +312,8 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { Namespace: testNamespace, }, } - Expect(hubClient.Create(ctx, serviceExportName)).Should(Succeed()) - Expect(hubClient.Delete(ctx, serviceExportName)).Should(Succeed()) + Expect(hubClient.Create(ctx, serviceExportName)).Should(Succeed(), "failed to create serviceExport") + Expect(hubClient.Delete(ctx, serviceExportName)).Should(Succeed(), "failed to delete serviceExport") }) It("should allow creating API with valid name ending with alphabet character", func() { @@ -325,8 +325,8 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { Namespace: testNamespace, }, } - Expect(hubClient.Create(ctx, serviceExportName)).Should(Succeed()) - Expect(hubClient.Delete(ctx, serviceExportName)).Should(Succeed()) + Expect(hubClient.Create(ctx, serviceExportName)).Should(Succeed(), "failed to create serviceExport") + Expect(hubClient.Delete(ctx, serviceExportName)).Should(Succeed(), "failed to delete serviceExport") }) It("should allow creating API with valid name ending with numeric character", func() { @@ -338,8 +338,8 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { Namespace: testNamespace, }, } - Expect(hubClient.Create(ctx, serviceExportName)).Should(Succeed()) - Expect(hubClient.Delete(ctx, serviceExportName)).Should(Succeed()) + Expect(hubClient.Create(ctx, serviceExportName)).Should(Succeed(), "failed to create serviceExport") + Expect(hubClient.Delete(ctx, serviceExportName)).Should(Succeed(), "failed to delete serviceExport") }) }) @@ -419,8 +419,8 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { Namespace: testNamespace, }, } - Expect(hubClient.Create(ctx, serviceImportName)).Should(Succeed()) - Expect(hubClient.Delete(ctx, serviceImportName)).Should(Succeed()) + Expect(hubClient.Create(ctx, serviceImportName)).Should(Succeed(), "failed to create serviceImport") + Expect(hubClient.Delete(ctx, serviceImportName)).Should(Succeed(), "failed to delete serviceImport") }) It("should allow creating API with valid name starting with alphabet character", func() { @@ -432,8 +432,8 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { Namespace: testNamespace, }, } - Expect(hubClient.Create(ctx, serviceImportName)).Should(Succeed()) - Expect(hubClient.Delete(ctx, serviceImportName)).Should(Succeed()) + Expect(hubClient.Create(ctx, serviceImportName)).Should(Succeed(), "failed to create serviceImport") + Expect(hubClient.Delete(ctx, serviceImportName)).Should(Succeed(), "failed to delete serviceImport") }) It("should allow creating API with valid name starting with numeric character", func() { @@ -445,8 +445,8 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { Namespace: testNamespace, }, } - Expect(hubClient.Create(ctx, serviceImportName)).Should(Succeed()) - Expect(hubClient.Delete(ctx, serviceImportName)).Should(Succeed()) + Expect(hubClient.Create(ctx, serviceImportName)).Should(Succeed(), "failed to create serviceImport") + Expect(hubClient.Delete(ctx, serviceImportName)).Should(Succeed(), "failed to delete serviceImport") }) It("should allow creating API with valid name ending with alphabet character", func() { @@ -458,8 +458,8 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { Namespace: testNamespace, }, } - Expect(hubClient.Create(ctx, serviceImportName)).Should(Succeed()) - Expect(hubClient.Delete(ctx, serviceImportName)).Should(Succeed()) + Expect(hubClient.Create(ctx, serviceImportName)).Should(Succeed(), "failed to create serviceImport") + Expect(hubClient.Delete(ctx, serviceImportName)).Should(Succeed(), "failed to delete serviceImport") }) It("should allow creating API with valid name ending with numeric character", func() { @@ -471,8 +471,8 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { Namespace: testNamespace, }, } - Expect(hubClient.Create(ctx, serviceImportName)).Should(Succeed()) - Expect(hubClient.Delete(ctx, serviceImportName)).Should(Succeed()) + Expect(hubClient.Create(ctx, serviceImportName)).Should(Succeed(), "failed to create serviceImport") + Expect(hubClient.Delete(ctx, serviceImportName)).Should(Succeed(), "failed to delete serviceImport") }) }) @@ -582,8 +582,8 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { }, }, } - Expect(hubClient.Create(ctx, trafficManagerProfileName)).Should(Succeed()) - Expect(hubClient.Delete(ctx, trafficManagerProfileName)).Should(Succeed()) + Expect(hubClient.Create(ctx, trafficManagerProfileName)).Should(Succeed(), "failed to create trafficManagerProfile") + Expect(hubClient.Delete(ctx, trafficManagerProfileName)).Should(Succeed(), "failed to delete trafficManagerProfile") }) It("should allow creating API with valid name starting with alphabet character", func() { @@ -601,8 +601,8 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { }, }, } - Expect(hubClient.Create(ctx, trafficManagerProfileName)).Should(Succeed()) - Expect(hubClient.Delete(ctx, trafficManagerProfileName)).Should(Succeed()) + Expect(hubClient.Create(ctx, trafficManagerProfileName)).Should(Succeed(), "failed to create trafficManagerProfile") + Expect(hubClient.Delete(ctx, trafficManagerProfileName)).Should(Succeed(), "failed to delete trafficManagerProfile") }) It("should allow creating API with valid name starting with numeric character", func() { @@ -620,8 +620,8 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { }, }, } - Expect(hubClient.Create(ctx, trafficManagerProfileName)).Should(Succeed()) - Expect(hubClient.Delete(ctx, trafficManagerProfileName)).Should(Succeed()) + Expect(hubClient.Create(ctx, trafficManagerProfileName)).Should(Succeed(), "failed to create trafficManagerProfile") + Expect(hubClient.Delete(ctx, trafficManagerProfileName)).Should(Succeed(), "failed to delete trafficManagerProfile") }) It("should allow creating API with valid name ending with alphabet character", func() { @@ -639,8 +639,8 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { }, }, } - Expect(hubClient.Create(ctx, trafficManagerProfileName)).Should(Succeed()) - Expect(hubClient.Delete(ctx, trafficManagerProfileName)).Should(Succeed()) + Expect(hubClient.Create(ctx, trafficManagerProfileName)).Should(Succeed(), "failed to create trafficManagerProfile") + Expect(hubClient.Delete(ctx, trafficManagerProfileName)).Should(Succeed(), "failed to delete trafficManagerProfile") }) It("should allow creating API with valid name ending with numeric character", func() { @@ -658,8 +658,8 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { }, }, } - Expect(hubClient.Create(ctx, trafficManagerProfileName)).Should(Succeed()) - Expect(hubClient.Delete(ctx, trafficManagerProfileName)).Should(Succeed()) + Expect(hubClient.Create(ctx, trafficManagerProfileName)).Should(Succeed(), "failed to create trafficManagerProfile") + Expect(hubClient.Delete(ctx, trafficManagerProfileName)).Should(Succeed(), "failed to delete trafficManagerProfile") }) }) @@ -779,8 +779,8 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { }, }, } - Expect(hubClient.Create(ctx, trafficManagerBackendName)).Should(Succeed()) - Expect(hubClient.Delete(ctx, trafficManagerBackendName)).Should(Succeed()) + Expect(hubClient.Create(ctx, trafficManagerBackendName)).Should(Succeed(), "failed to create trafficManagerBackend") + Expect(hubClient.Delete(ctx, trafficManagerBackendName)).Should(Succeed(), "failed to delete trafficManagerBackend") }) It("should allow creating API with valid name starting with alphabet character", func() { @@ -800,8 +800,8 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { }, }, } - Expect(hubClient.Create(ctx, trafficManagerBackendName)).Should(Succeed()) - Expect(hubClient.Delete(ctx, trafficManagerBackendName)).Should(Succeed()) + Expect(hubClient.Create(ctx, trafficManagerBackendName)).Should(Succeed(), "failed to create trafficManagerBackend") + Expect(hubClient.Delete(ctx, trafficManagerBackendName)).Should(Succeed(), "failed to delete trafficManagerBackend") }) It("should allow creating API with valid name starting with numeric character", func() { @@ -821,8 +821,8 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { }, }, } - Expect(hubClient.Create(ctx, trafficManagerBackendName)).Should(Succeed()) - Expect(hubClient.Delete(ctx, trafficManagerBackendName)).Should(Succeed()) + Expect(hubClient.Create(ctx, trafficManagerBackendName)).Should(Succeed(), "failed to create trafficManagerBackend") + Expect(hubClient.Delete(ctx, trafficManagerBackendName)).Should(Succeed(), "failed to delete trafficManagerBackend") }) It("should allow creating API with valid name ending with alphabet character", func() { @@ -842,8 +842,8 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { }, }, } - Expect(hubClient.Create(ctx, trafficManagerBackendName)).Should(Succeed()) - Expect(hubClient.Delete(ctx, trafficManagerBackendName)).Should(Succeed()) + Expect(hubClient.Create(ctx, trafficManagerBackendName)).Should(Succeed(), "failed to create trafficManagerBackend") + Expect(hubClient.Delete(ctx, trafficManagerBackendName)).Should(Succeed(), "failed to delete trafficManagerBackend") }) It("should allow creating API with valid name ending with numeric character", func() { @@ -863,8 +863,8 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { }, }, } - Expect(hubClient.Create(ctx, trafficManagerBackendName)).Should(Succeed()) - Expect(hubClient.Delete(ctx, trafficManagerBackendName)).Should(Succeed()) + Expect(hubClient.Create(ctx, trafficManagerBackendName)).Should(Succeed(), "failed to create trafficManagerBackend") + Expect(hubClient.Delete(ctx, trafficManagerBackendName)).Should(Succeed(), "failed to delete trafficManagerBackend") }) }) }) From 867e851d5effae453bfc65200085e2e0e3d86134 Mon Sep 17 00:00:00 2001 From: Jamison Tsai Date: Thu, 2 Jan 2025 20:03:27 +1100 Subject: [PATCH 56/66] install ginkgoin .github/workflows/unit-integration-tests.yml --- .github/workflows/unit-integration-tests.yml | 4 ++++ Makefile | 1 - 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/.github/workflows/unit-integration-tests.yml b/.github/workflows/unit-integration-tests.yml index 3899a097..afc24889 100644 --- a/.github/workflows/unit-integration-tests.yml +++ b/.github/workflows/unit-integration-tests.yml @@ -55,3 +55,7 @@ jobs: token: ${{ secrets.CODECOV_TOKEN }} ## Comma-separated list of files to upload files: ./coverage.xml + + - name: Set up Ginkgo CLI + run: | + go install github.com/onsi/ginkgo/v2/ginkgo@v2.19.1 \ No newline at end of file diff --git a/Makefile b/Makefile index fc34952f..ad7cf207 100644 --- a/Makefile +++ b/Makefile @@ -110,7 +110,6 @@ local-unit-test: $(ENVTEST) ## Run tests. .PHONY: integration-test integration-test: $(ENVTEST) ## Run integration tests. - go install github.com/onsi/ginkgo/v2/ginkgo@v2.21.0 CGO_ENABLED=1 KUBEBUILDER_ASSETS="$(shell $(ENVTEST) use $(ENVTEST_K8S_VERSION) -p path)" \ ginkgo -v -p --race --cover --coverpkg=./... ./test/apis/... From 7eb4c6092db676cf31578e0bc3bf42b4c69e0d14 Mon Sep 17 00:00:00 2001 From: Jamison Tsai Date: Fri, 3 Jan 2025 15:27:43 +1100 Subject: [PATCH 57/66] fix import styling in integration test file --- api/v1alpha1/zz_generated.deepcopy.go | 2 +- test/apis/v1alpha1/api_validation_integration_test.go | 3 ++- test/common/trafficmanager/validator/backend.go | 2 +- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/api/v1alpha1/zz_generated.deepcopy.go b/api/v1alpha1/zz_generated.deepcopy.go index e39c17a0..6d1f2980 100644 --- a/api/v1alpha1/zz_generated.deepcopy.go +++ b/api/v1alpha1/zz_generated.deepcopy.go @@ -11,7 +11,7 @@ package v1alpha1 import ( corev1 "k8s.io/api/core/v1" - "k8s.io/api/discovery/v1" + v1 "k8s.io/api/discovery/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" runtime "k8s.io/apimachinery/pkg/runtime" ) diff --git a/test/apis/v1alpha1/api_validation_integration_test.go b/test/apis/v1alpha1/api_validation_integration_test.go index eefa4bfe..33bc2d60 100644 --- a/test/apis/v1alpha1/api_validation_integration_test.go +++ b/test/apis/v1alpha1/api_validation_integration_test.go @@ -8,12 +8,13 @@ package v1alpha1 import ( "errors" "fmt" + "reflect" + . "github.com/onsi/ginkgo/v2" . "github.com/onsi/gomega" k8serrors "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/utils/ptr" - "reflect" v1alpha1 "go.goms.io/fleet-networking/api/v1alpha1" ) diff --git a/test/common/trafficmanager/validator/backend.go b/test/common/trafficmanager/validator/backend.go index ae8dda21..f1222508 100644 --- a/test/common/trafficmanager/validator/backend.go +++ b/test/common/trafficmanager/validator/backend.go @@ -36,7 +36,7 @@ var ( cmpConditionOptions, cmpopts.IgnoreFields(fleetnetv1alpha1.TrafficManagerEndpointStatus{}, "Name"), // ignore the generated endpoint name cmpopts.SortSlices(func(s1, s2 fleetnetv1alpha1.TrafficManagerEndpointStatus) bool { - return s1.Cluster.Cluster < s2.Cluster.Cluster + return s1.Name < s2.Name }), } ) From e24440e9d6742adc3e2502e31bb61e309318a02e Mon Sep 17 00:00:00 2001 From: Jamison Tsai Date: Fri, 3 Jan 2025 15:28:43 +1100 Subject: [PATCH 58/66] undo cluster to name change --- test/common/trafficmanager/validator/backend.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/common/trafficmanager/validator/backend.go b/test/common/trafficmanager/validator/backend.go index f1222508..ae8dda21 100644 --- a/test/common/trafficmanager/validator/backend.go +++ b/test/common/trafficmanager/validator/backend.go @@ -36,7 +36,7 @@ var ( cmpConditionOptions, cmpopts.IgnoreFields(fleetnetv1alpha1.TrafficManagerEndpointStatus{}, "Name"), // ignore the generated endpoint name cmpopts.SortSlices(func(s1, s2 fleetnetv1alpha1.TrafficManagerEndpointStatus) bool { - return s1.Name < s2.Name + return s1.Cluster.Cluster < s2.Cluster.Cluster }), } ) From fc9602c01572f88dfc595f933c61e10fddcfe2c4 Mon Sep 17 00:00:00 2001 From: Jamison Tsai Date: Fri, 3 Jan 2025 16:00:57 +1100 Subject: [PATCH 59/66] fix cluster access issue --- test/common/trafficmanager/validator/backend.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/common/trafficmanager/validator/backend.go b/test/common/trafficmanager/validator/backend.go index ae8dda21..a5922de8 100644 --- a/test/common/trafficmanager/validator/backend.go +++ b/test/common/trafficmanager/validator/backend.go @@ -36,7 +36,7 @@ var ( cmpConditionOptions, cmpopts.IgnoreFields(fleetnetv1alpha1.TrafficManagerEndpointStatus{}, "Name"), // ignore the generated endpoint name cmpopts.SortSlices(func(s1, s2 fleetnetv1alpha1.TrafficManagerEndpointStatus) bool { - return s1.Cluster.Cluster < s2.Cluster.Cluster + return s1.From.Cluster < s2.From.Cluster }), } ) From 89b646c18ac74768dc1da9734c203c3a720ccc76 Mon Sep 17 00:00:00 2001 From: Jamison Tsai Date: Fri, 3 Jan 2025 16:22:52 +1100 Subject: [PATCH 60/66] fix member variable issue in traffic manager test --- test/e2e/traffic_manager_test.go | 30 +++++++++++++++++++++--------- 1 file changed, 21 insertions(+), 9 deletions(-) diff --git a/test/e2e/traffic_manager_test.go b/test/e2e/traffic_manager_test.go index 9b3fe40c..bdae9bef 100644 --- a/test/e2e/traffic_manager_test.go +++ b/test/e2e/traffic_manager_test.go @@ -136,9 +136,13 @@ var _ = Describe("Test exporting service via Azure traffic manager", func() { By("Validating the trafficManagerBackend status") wantEndpoints := []fleetnetv1alpha1.TrafficManagerEndpointStatus{ { - Weight: ptr.To(int64(100)), - Target: ptr.To(fmt.Sprintf(azureDNSFormat, wm.BuildServiceDNSLabelName(memberClusters[0]), clusterLocation)), - Cluster: &fleetnetv1alpha1.ClusterStatus{Cluster: memberClusters[0].Name()}, + Weight: ptr.To(int64(100)), + Target: ptr.To(fmt.Sprintf(azureDNSFormat, wm.BuildServiceDNSLabelName(memberClusters[0]), clusterLocation)), + From: &fleetnetv1alpha1.FromCluster{ + ClusterStatus: fleetnetv1alpha1.ClusterStatus{ + Cluster: memberClusterNames[0], + }, + }, }, } status = validator.ValidateTrafficManagerBackendIfAcceptedAndIgnoringEndpointName(ctx, hubClient, name, false, wantEndpoints) @@ -156,14 +160,22 @@ var _ = Describe("Test exporting service via Azure traffic manager", func() { By("Validating the trafficManagerBackend status") wantEndpoints = []fleetnetv1alpha1.TrafficManagerEndpointStatus{ { - Weight: ptr.To(int64(50)), - Target: ptr.To(fmt.Sprintf(azureDNSFormat, wm.BuildServiceDNSLabelName(memberClusters[0]), clusterLocation)), - Cluster: &fleetnetv1alpha1.ClusterStatus{Cluster: memberClusters[0].Name()}, + Weight: ptr.To(int64(50)), + Target: ptr.To(fmt.Sprintf(azureDNSFormat, wm.BuildServiceDNSLabelName(memberClusters[0]), clusterLocation)), + From: &fleetnetv1alpha1.FromCluster{ + ClusterStatus: fleetnetv1alpha1.ClusterStatus{ + Cluster: memberClusterNames[0], + }, + }, }, { - Weight: ptr.To(int64(50)), - Target: ptr.To(fmt.Sprintf(azureDNSFormat, wm.BuildServiceDNSLabelName(memberClusters[1]), clusterLocation)), - Cluster: &fleetnetv1alpha1.ClusterStatus{Cluster: memberClusters[1].Name()}, + Weight: ptr.To(int64(50)), + Target: ptr.To(fmt.Sprintf(azureDNSFormat, wm.BuildServiceDNSLabelName(memberClusters[1]), clusterLocation)), + From: &fleetnetv1alpha1.FromCluster{ + ClusterStatus: fleetnetv1alpha1.ClusterStatus{ + Cluster: memberClusterNames[0], + }, + }, }, } status = validator.ValidateTrafficManagerBackendIfAcceptedAndIgnoringEndpointName(ctx, hubClient, name, true, wantEndpoints) From 6fd0c47cf5f71d23e7a3b65d45167bb98a9f6ddf Mon Sep 17 00:00:00 2001 From: Jamison Tsai Date: Fri, 3 Jan 2025 16:44:06 +1100 Subject: [PATCH 61/66] install ginkgo before running tests --- .github/workflows/unit-integration-tests.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/unit-integration-tests.yml b/.github/workflows/unit-integration-tests.yml index afc24889..c23f3600 100644 --- a/.github/workflows/unit-integration-tests.yml +++ b/.github/workflows/unit-integration-tests.yml @@ -45,6 +45,10 @@ jobs: - name: Check out code into the Go module directory uses: actions/checkout@v4 + - name: Set up Ginkgo CLI + run: | + go install github.com/onsi/ginkgo/v2/ginkgo@v2.19.1 + - name: Run unit + integration tests & Generate coverage run: make test @@ -55,7 +59,3 @@ jobs: token: ${{ secrets.CODECOV_TOKEN }} ## Comma-separated list of files to upload files: ./coverage.xml - - - name: Set up Ginkgo CLI - run: | - go install github.com/onsi/ginkgo/v2/ginkgo@v2.19.1 \ No newline at end of file From 62f0c0ddb409812c55d5a9a9f75f57357b9d1df7 Mon Sep 17 00:00:00 2001 From: Jamison Tsai Date: Fri, 3 Jan 2025 17:26:44 +1100 Subject: [PATCH 62/66] remove unnecessary extra lines --- .../api_validation_integration_test.go | 45 ------------------- 1 file changed, 45 deletions(-) diff --git a/test/apis/v1alpha1/api_validation_integration_test.go b/test/apis/v1alpha1/api_validation_integration_test.go index 33bc2d60..ad6dc37f 100644 --- a/test/apis/v1alpha1/api_validation_integration_test.go +++ b/test/apis/v1alpha1/api_validation_integration_test.go @@ -35,7 +35,6 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { Context("Test MultiClusterService API validation - invalid cases", func() { It("should deny creating API with invalid name size", func() { - // Create the API. multiClusterServiceName := &v1alpha1.MultiClusterService{ ObjectMeta: metav1.ObjectMeta{ @@ -56,7 +55,6 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { }) It("should deny creating API with invalid name starting with non-alphanumeric character", func() { - // Create the API. multiClusterServiceName := &v1alpha1.MultiClusterService{ ObjectMeta: metav1.ObjectMeta{ @@ -77,7 +75,6 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { }) It("should deny creating API with invalid name ending with non-alphanumeric character", func() { - // Create the API. multiClusterServiceName := &v1alpha1.MultiClusterService{ ObjectMeta: metav1.ObjectMeta{ @@ -98,7 +95,6 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { }) It("should deny creating API with invalid name containing character that is not alphanumeric and not -", func() { - // Create the API. multiClusterServiceName := &v1alpha1.MultiClusterService{ ObjectMeta: metav1.ObjectMeta{ @@ -121,7 +117,6 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { Context("Test MultiClusterService creation API validation - valid cases", func() { It("should allow creating API with valid name size", func() { - // Create the API. multiClusterServiceName := &v1alpha1.MultiClusterService{ ObjectMeta: metav1.ObjectMeta{ @@ -139,7 +134,6 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { }) It("should allow creating API with valid name starting with alphabet character", func() { - // Create the API. multiClusterServiceName := &v1alpha1.MultiClusterService{ ObjectMeta: metav1.ObjectMeta{ @@ -157,7 +151,6 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { }) It("should allow creating API with valid name starting with numeric character", func() { - // Create the API. multiClusterServiceName := &v1alpha1.MultiClusterService{ ObjectMeta: metav1.ObjectMeta{ @@ -175,7 +168,6 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { }) It("should allow creating API with valid name ending with alphabet character", func() { - // Create the API. multiClusterServiceName := &v1alpha1.MultiClusterService{ ObjectMeta: metav1.ObjectMeta{ @@ -193,7 +185,6 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { }) It("should allow creating API with valid name ending with numeric character", func() { - // Create the API. multiClusterServiceName := &v1alpha1.MultiClusterService{ ObjectMeta: metav1.ObjectMeta{ @@ -213,7 +204,6 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { Context("Test ServiceExport API validation - invalid cases", func() { It("should deny creating API with invalid name size", func() { - // Create the API. serviceExportName := &v1alpha1.ServiceExport{ ObjectMeta: metav1.ObjectMeta{ @@ -229,7 +219,6 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { }) It("should deny creating API with invalid name starting with non-alphanumeric character", func() { - // Create the API. serviceExportName := &v1alpha1.ServiceExport{ ObjectMeta: metav1.ObjectMeta{ @@ -245,7 +234,6 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { }) It("should deny creating API with invalid name ending with non-alphanumeric character", func() { - // Create the API. serviceExportName := &v1alpha1.ServiceExport{ ObjectMeta: metav1.ObjectMeta{ @@ -261,7 +249,6 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { }) It("should deny creating API with invalid name containing character that is not alphanumeric and not -", func() { - // Create the API. serviceExportName := &v1alpha1.ServiceExport{ ObjectMeta: metav1.ObjectMeta{ @@ -279,7 +266,6 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { Context("Test ServiceExport API validation - valid cases", func() { It("should allow creating API with valid name size", func() { - // Create the API. serviceExportName := &v1alpha1.ServiceExport{ ObjectMeta: metav1.ObjectMeta{ @@ -292,7 +278,6 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { }) It("should allow creating API with valid name starting with alphabet character", func() { - // Create the API. serviceExportName := &v1alpha1.ServiceExport{ ObjectMeta: metav1.ObjectMeta{ @@ -305,7 +290,6 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { }) It("should allow creating API with valid name starting with numeric character", func() { - // Create the API. serviceExportName := &v1alpha1.ServiceExport{ ObjectMeta: metav1.ObjectMeta{ @@ -318,7 +302,6 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { }) It("should allow creating API with valid name ending with alphabet character", func() { - // Create the API. serviceExportName := &v1alpha1.ServiceExport{ ObjectMeta: metav1.ObjectMeta{ @@ -331,7 +314,6 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { }) It("should allow creating API with valid name ending with numeric character", func() { - // Create the API. serviceExportName := &v1alpha1.ServiceExport{ ObjectMeta: metav1.ObjectMeta{ @@ -346,7 +328,6 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { Context("Test ServiceImport API validation - invalid cases", func() { It("should deny creating API with invalid name size", func() { - // Create the API. serviceImportName := &v1alpha1.ServiceImport{ ObjectMeta: metav1.ObjectMeta{ @@ -362,7 +343,6 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { }) It("should deny creating API with invalid name starting with non-alphanumeric character", func() { - // Create the API. serviceImportName := &v1alpha1.ServiceImport{ ObjectMeta: metav1.ObjectMeta{ @@ -378,7 +358,6 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { }) It("should deny creating API with invalid name ending with non-alphanumeric character", func() { - // Create the API. serviceImportName := &v1alpha1.ServiceImport{ ObjectMeta: metav1.ObjectMeta{ @@ -394,7 +373,6 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { }) It("should deny creating API with invalid name containing character that is not alphanumeric and not -", func() { - // Create the API. serviceImportName := &v1alpha1.ServiceImport{ ObjectMeta: metav1.ObjectMeta{ @@ -412,7 +390,6 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { Context("Test ServiceImport API validation - valid cases", func() { It("should allow creating API with valid name size", func() { - // Create the API. serviceImportName := &v1alpha1.ServiceImport{ ObjectMeta: metav1.ObjectMeta{ @@ -425,7 +402,6 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { }) It("should allow creating API with valid name starting with alphabet character", func() { - // Create the API. serviceImportName := &v1alpha1.ServiceImport{ ObjectMeta: metav1.ObjectMeta{ @@ -438,7 +414,6 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { }) It("should allow creating API with valid name starting with numeric character", func() { - // Create the API. serviceImportName := &v1alpha1.ServiceImport{ ObjectMeta: metav1.ObjectMeta{ @@ -451,7 +426,6 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { }) It("should allow creating API with valid name ending with alphabet character", func() { - // Create the API. serviceImportName := &v1alpha1.ServiceImport{ ObjectMeta: metav1.ObjectMeta{ @@ -464,7 +438,6 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { }) It("should allow creating API with valid name ending with numeric character", func() { - // Create the API. serviceImportName := &v1alpha1.ServiceImport{ ObjectMeta: metav1.ObjectMeta{ @@ -479,7 +452,6 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { Context("Test TrafficManagerProfile API validation - invalid cases", func() { It("should deny creating API with invalid name size", func() { - // Create the API. trafficManagerProfileName := &v1alpha1.TrafficManagerProfile{ ObjectMeta: metav1.ObjectMeta{ @@ -501,7 +473,6 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { }) It("should deny creating API with invalid name starting with non-alphanumeric character", func() { - // Create the API. trafficManagerProfileName := &v1alpha1.TrafficManagerProfile{ ObjectMeta: metav1.ObjectMeta{ @@ -523,7 +494,6 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { }) It("should deny creating API with invalid name ending with non-alphanumeric character", func() { - // Create the API. trafficManagerProfileName := &v1alpha1.TrafficManagerProfile{ ObjectMeta: metav1.ObjectMeta{ @@ -545,7 +515,6 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { }) It("should deny creating API with invalid name containing character that is not alphanumeric and not -", func() { - // Create the API. trafficManagerProfileName := &v1alpha1.TrafficManagerProfile{ ObjectMeta: metav1.ObjectMeta{ @@ -569,7 +538,6 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { Context("Test TrafficManagerProfile API validation - valid cases", func() { It("should allow creating API with valid name size", func() { - // Create the API. trafficManagerProfileName := &v1alpha1.TrafficManagerProfile{ ObjectMeta: metav1.ObjectMeta{ @@ -588,7 +556,6 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { }) It("should allow creating API with valid name starting with alphabet character", func() { - // Create the API. trafficManagerProfileName := &v1alpha1.TrafficManagerProfile{ ObjectMeta: metav1.ObjectMeta{ @@ -607,7 +574,6 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { }) It("should allow creating API with valid name starting with numeric character", func() { - // Create the API. trafficManagerProfileName := &v1alpha1.TrafficManagerProfile{ ObjectMeta: metav1.ObjectMeta{ @@ -626,7 +592,6 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { }) It("should allow creating API with valid name ending with alphabet character", func() { - // Create the API. trafficManagerProfileName := &v1alpha1.TrafficManagerProfile{ ObjectMeta: metav1.ObjectMeta{ @@ -645,7 +610,6 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { }) It("should allow creating API with valid name ending with numeric character", func() { - // Create the API. trafficManagerProfileName := &v1alpha1.TrafficManagerProfile{ ObjectMeta: metav1.ObjectMeta{ @@ -666,7 +630,6 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { Context("Test TrafficManagerBackend API validation - invalid cases", func() { It("should deny creating API with invalid name size", func() { - // Create the API. trafficManagerBackendName := &v1alpha1.TrafficManagerBackend{ ObjectMeta: metav1.ObjectMeta{ @@ -690,7 +653,6 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { }) It("should deny creating API with invalid name starting with non-alphanumeric character", func() { - // Create the API. trafficManagerBackendName := &v1alpha1.TrafficManagerBackend{ ObjectMeta: metav1.ObjectMeta{ @@ -714,7 +676,6 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { }) It("should deny creating API with invalid name ending with non-alphanumeric character", func() { - // Create the API. trafficManagerBackendName := &v1alpha1.TrafficManagerBackend{ ObjectMeta: metav1.ObjectMeta{ @@ -738,7 +699,6 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { }) It("should deny creating API with invalid name containing character that is not alphanumeric and not -", func() { - // Create the API. trafficManagerBackendName := &v1alpha1.TrafficManagerBackend{ ObjectMeta: metav1.ObjectMeta{ @@ -764,7 +724,6 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { Context("Test TrafficManagerBackend API validation - valid cases", func() { It("should allow creating API with valid name size", func() { - // Create the API. trafficManagerBackendName := &v1alpha1.TrafficManagerBackend{ ObjectMeta: metav1.ObjectMeta{ @@ -785,7 +744,6 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { }) It("should allow creating API with valid name starting with alphabet character", func() { - // Create the API. trafficManagerBackendName := &v1alpha1.TrafficManagerBackend{ ObjectMeta: metav1.ObjectMeta{ @@ -806,7 +764,6 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { }) It("should allow creating API with valid name starting with numeric character", func() { - // Create the API. trafficManagerBackendName := &v1alpha1.TrafficManagerBackend{ ObjectMeta: metav1.ObjectMeta{ @@ -827,7 +784,6 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { }) It("should allow creating API with valid name ending with alphabet character", func() { - // Create the API. trafficManagerBackendName := &v1alpha1.TrafficManagerBackend{ ObjectMeta: metav1.ObjectMeta{ @@ -848,7 +804,6 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { }) It("should allow creating API with valid name ending with numeric character", func() { - // Create the API. trafficManagerBackendName := &v1alpha1.TrafficManagerBackend{ ObjectMeta: metav1.ObjectMeta{ From 162de816d8964b6daf0fc569ebdf1c9fbe55fb38 Mon Sep 17 00:00:00 2001 From: Jamison Tsai Date: Fri, 3 Jan 2025 18:42:59 +1100 Subject: [PATCH 63/66] declare var statusErr once and remove duplicate declarations --- .../api_validation_integration_test.go | 21 +------------------ 1 file changed, 1 insertion(+), 20 deletions(-) diff --git a/test/apis/v1alpha1/api_validation_integration_test.go b/test/apis/v1alpha1/api_validation_integration_test.go index ad6dc37f..8dc0264f 100644 --- a/test/apis/v1alpha1/api_validation_integration_test.go +++ b/test/apis/v1alpha1/api_validation_integration_test.go @@ -32,6 +32,7 @@ var ( ) var _ = Describe("Test networking v1alpha1 API validation", func() { + var statusErr *k8serrors.StatusError Context("Test MultiClusterService API validation - invalid cases", func() { It("should deny creating API with invalid name size", func() { @@ -49,7 +50,6 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { } By(fmt.Sprintf("expecting denial of CREATE API %s", nameWithInvalidSize)) var err = hubClient.Create(ctx, multiClusterServiceName) - var statusErr *k8serrors.StatusError Expect(errors.As(err, &statusErr)).To(BeTrue(), fmt.Sprintf("Create API call produced error %s. Error type wanted is %s.", reflect.TypeOf(err), reflect.TypeOf(&k8serrors.StatusError{}))) Expect(statusErr.Status().Message).Should(ContainSubstring("metadata.name max length is 63")) }) @@ -69,7 +69,6 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { } By(fmt.Sprintf("expecting denial of CREATE API %s", nameStartingWithNonAlphanum)) err := hubClient.Create(ctx, multiClusterServiceName) - var statusErr *k8serrors.StatusError Expect(errors.As(err, &statusErr)).To(BeTrue(), fmt.Sprintf("Create API call produced error %s. Error type wanted is %s.", reflect.TypeOf(err), reflect.TypeOf(&k8serrors.StatusError{}))) Expect(statusErr.Status().Message).Should(ContainSubstring("a lowercase RFC 1123 subdomain")) }) @@ -89,7 +88,6 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { } By(fmt.Sprintf("expecting denial of CREATE API %s", nameEndingWithNonAlphanum)) err := hubClient.Create(ctx, multiClusterServiceName) - var statusErr *k8serrors.StatusError Expect(errors.As(err, &statusErr)).To(BeTrue(), fmt.Sprintf("Create API call produced error %s. Error type wanted is %s.", reflect.TypeOf(err), reflect.TypeOf(&k8serrors.StatusError{}))) Expect(statusErr.Status().Message).Should(ContainSubstring("a lowercase RFC 1123 subdomain")) }) @@ -109,7 +107,6 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { } By(fmt.Sprintf("expecting denial of CREATE API %s", nameContainsUnderscore)) err := hubClient.Create(ctx, multiClusterServiceName) - var statusErr *k8serrors.StatusError Expect(errors.As(err, &statusErr)).To(BeTrue(), fmt.Sprintf("Create API call produced error %s. Error type wanted is %s.", reflect.TypeOf(err), reflect.TypeOf(&k8serrors.StatusError{}))) Expect(statusErr.Status().Message).Should(ContainSubstring("a lowercase RFC 1123 subdomain")) }) @@ -213,7 +210,6 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { } By(fmt.Sprintf("expecting denial of CREATE API %s", nameWithInvalidSize)) var err = hubClient.Create(ctx, serviceExportName) - var statusErr *k8serrors.StatusError Expect(errors.As(err, &statusErr)).To(BeTrue(), fmt.Sprintf("Create API call produced error %s. Error type wanted is %s.", reflect.TypeOf(err), reflect.TypeOf(&k8serrors.StatusError{}))) Expect(statusErr.Status().Message).Should(ContainSubstring("metadata.name max length is 63")) }) @@ -228,7 +224,6 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { } By(fmt.Sprintf("expecting denial of CREATE API %s", nameStartingWithNonAlphanum)) var err = hubClient.Create(ctx, serviceExportName) - var statusErr *k8serrors.StatusError Expect(errors.As(err, &statusErr)).To(BeTrue(), fmt.Sprintf("Create API call produced error %s. Error type wanted is %s.", reflect.TypeOf(err), reflect.TypeOf(&k8serrors.StatusError{}))) Expect(statusErr.Status().Message).Should(ContainSubstring("lowercase RFC 1123 subdomain must consist of lower case alphanumeric characters, '-' or '.', and must start and end with an alphanumeric character")) }) @@ -243,7 +238,6 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { } By(fmt.Sprintf("expecting denial of CREATE API %s", nameEndingWithNonAlphanum)) var err = hubClient.Create(ctx, serviceExportName) - var statusErr *k8serrors.StatusError Expect(errors.As(err, &statusErr)).To(BeTrue(), fmt.Sprintf("Create API call produced error %s. Error type wanted is %s.", reflect.TypeOf(err), reflect.TypeOf(&k8serrors.StatusError{}))) Expect(statusErr.Status().Message).Should(ContainSubstring("lowercase RFC 1123 subdomain must consist of lower case alphanumeric characters, '-' or '.', and must start and end with an alphanumeric character")) }) @@ -258,7 +252,6 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { } By(fmt.Sprintf("expecting denial of CREATE API %s", nameContainsUnderscore)) var err = hubClient.Create(ctx, serviceExportName) - var statusErr *k8serrors.StatusError Expect(errors.As(err, &statusErr)).To(BeTrue(), fmt.Sprintf("Create API call produced error %s. Error type wanted is %s.", reflect.TypeOf(err), reflect.TypeOf(&k8serrors.StatusError{}))) Expect(statusErr.Status().Message).Should(ContainSubstring("lowercase RFC 1123 subdomain must consist of lower case alphanumeric characters, '-' or '.', and must start and end with an alphanumeric character")) }) @@ -337,7 +330,6 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { } By(fmt.Sprintf("expecting denial of CREATE API %s", nameWithInvalidSize)) var err = hubClient.Create(ctx, serviceImportName) - var statusErr *k8serrors.StatusError Expect(errors.As(err, &statusErr)).To(BeTrue(), fmt.Sprintf("Create API call produced error %s. Error type wanted is %s.", reflect.TypeOf(err), reflect.TypeOf(&k8serrors.StatusError{}))) Expect(statusErr.Status().Message).Should(ContainSubstring("metadata.name max length is 63")) }) @@ -352,7 +344,6 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { } By(fmt.Sprintf("expecting denial of CREATE API %s", nameStartingWithNonAlphanum)) var err = hubClient.Create(ctx, serviceImportName) - var statusErr *k8serrors.StatusError Expect(errors.As(err, &statusErr)).To(BeTrue(), fmt.Sprintf("Create API call produced error %s. Error type wanted is %s.", reflect.TypeOf(err), reflect.TypeOf(&k8serrors.StatusError{}))) Expect(statusErr.Status().Message).Should(ContainSubstring("lowercase RFC 1123 subdomain must consist of lower case alphanumeric characters, '-' or '.', and must start and end with an alphanumeric character")) }) @@ -367,7 +358,6 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { } By(fmt.Sprintf("expecting denial of CREATE API %s", nameEndingWithNonAlphanum)) var err = hubClient.Create(ctx, serviceImportName) - var statusErr *k8serrors.StatusError Expect(errors.As(err, &statusErr)).To(BeTrue(), fmt.Sprintf("Create API call produced error %s. Error type wanted is %s.", reflect.TypeOf(err), reflect.TypeOf(&k8serrors.StatusError{}))) Expect(statusErr.Status().Message).Should(ContainSubstring("lowercase RFC 1123 subdomain must consist of lower case alphanumeric characters, '-' or '.', and must start and end with an alphanumeric character")) }) @@ -382,7 +372,6 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { } By(fmt.Sprintf("expecting denial of CREATE API %s", nameContainsUnderscore)) var err = hubClient.Create(ctx, serviceImportName) - var statusErr *k8serrors.StatusError Expect(errors.As(err, &statusErr)).To(BeTrue(), fmt.Sprintf("Create API call produced error %s. Error type wanted is %s.", reflect.TypeOf(err), reflect.TypeOf(&k8serrors.StatusError{}))) Expect(statusErr.Status().Message).Should(ContainSubstring("metadata.name max length is 63")) }) @@ -467,7 +456,6 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { } By(fmt.Sprintf("expecting denial of CREATE API %s", nameWithInvalidSize)) var err = hubClient.Create(ctx, trafficManagerProfileName) - var statusErr *k8serrors.StatusError Expect(errors.As(err, &statusErr)).To(BeTrue(), fmt.Sprintf("Create API call produced error %s. Error type wanted is %s.", reflect.TypeOf(err), reflect.TypeOf(&k8serrors.StatusError{}))) Expect(statusErr.Status().Message).Should(ContainSubstring("metadata.name max length is 63")) }) @@ -488,7 +476,6 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { } By(fmt.Sprintf("expecting denial of CREATE API %s", nameStartingWithNonAlphanum)) var err = hubClient.Create(ctx, trafficManagerProfileName) - var statusErr *k8serrors.StatusError Expect(errors.As(err, &statusErr)).To(BeTrue(), fmt.Sprintf("Create API call produced error %s. Error type wanted is %s.", reflect.TypeOf(err), reflect.TypeOf(&k8serrors.StatusError{}))) Expect(statusErr.Status().Message).Should(ContainSubstring("lowercase RFC 1123 subdomain must consist of lower case alphanumeric characters, '-' or '.', and must start and end with an alphanumeric character")) }) @@ -509,7 +496,6 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { } By(fmt.Sprintf("expecting denial of CREATE API %s", nameEndingWithNonAlphanum)) var err = hubClient.Create(ctx, trafficManagerProfileName) - var statusErr *k8serrors.StatusError Expect(errors.As(err, &statusErr)).To(BeTrue(), fmt.Sprintf("Create API call produced error %s. Error type wanted is %s.", reflect.TypeOf(err), reflect.TypeOf(&k8serrors.StatusError{}))) Expect(statusErr.Status().Message).Should(ContainSubstring("lowercase RFC 1123 subdomain must consist of lower case alphanumeric characters, '-' or '.', and must start and end with an alphanumeric character")) }) @@ -530,7 +516,6 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { } By(fmt.Sprintf("expecting denial of CREATE API %s", nameContainsUnderscore)) var err = hubClient.Create(ctx, trafficManagerProfileName) - var statusErr *k8serrors.StatusError Expect(errors.As(err, &statusErr)).To(BeTrue(), fmt.Sprintf("Create API call produced error %s. Error type wanted is %s.", reflect.TypeOf(err), reflect.TypeOf(&k8serrors.StatusError{}))) Expect(statusErr.Status().Message).Should(ContainSubstring("metadata.name max length is 63")) }) @@ -647,7 +632,6 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { } By(fmt.Sprintf("expecting denial of CREATE API %s", nameWithInvalidSize)) var err = hubClient.Create(ctx, trafficManagerBackendName) - var statusErr *k8serrors.StatusError Expect(errors.As(err, &statusErr)).To(BeTrue(), fmt.Sprintf("Create API call produced error %s. Error type wanted is %s.", reflect.TypeOf(err), reflect.TypeOf(&k8serrors.StatusError{}))) Expect(statusErr.Status().Message).Should(ContainSubstring("metadata.name max length is 63")) }) @@ -670,7 +654,6 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { } By(fmt.Sprintf("expecting denial of CREATE API %s", nameStartingWithNonAlphanum)) var err = hubClient.Create(ctx, trafficManagerBackendName) - var statusErr *k8serrors.StatusError Expect(errors.As(err, &statusErr)).To(BeTrue(), fmt.Sprintf("Create API call produced error %s. Error type wanted is %s.", reflect.TypeOf(err), reflect.TypeOf(&k8serrors.StatusError{}))) Expect(statusErr.Status().Message).Should(ContainSubstring("lowercase RFC 1123 subdomain must consist of lower case alphanumeric characters, '-' or '.', and must start and end with an alphanumeric character")) }) @@ -693,7 +676,6 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { } By(fmt.Sprintf("expecting denial of CREATE API %s", nameEndingWithNonAlphanum)) var err = hubClient.Create(ctx, trafficManagerBackendName) - var statusErr *k8serrors.StatusError Expect(errors.As(err, &statusErr)).To(BeTrue(), fmt.Sprintf("Create API call produced error %s. Error type wanted is %s.", reflect.TypeOf(err), reflect.TypeOf(&k8serrors.StatusError{}))) Expect(statusErr.Status().Message).Should(ContainSubstring("lowercase RFC 1123 subdomain must consist of lower case alphanumeric characters, '-' or '.', and must start and end with an alphanumeric character")) }) @@ -716,7 +698,6 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { } By(fmt.Sprintf("expecting denial of CREATE API %s", nameContainsUnderscore)) var err = hubClient.Create(ctx, trafficManagerBackendName) - var statusErr *k8serrors.StatusError Expect(errors.As(err, &statusErr)).To(BeTrue(), fmt.Sprintf("Create API call produced error %s. Error type wanted is %s.", reflect.TypeOf(err), reflect.TypeOf(&k8serrors.StatusError{}))) Expect(statusErr.Status().Message).Should(ContainSubstring("metadata.name max length is 63")) }) From 3311650780ad514dd6b25fa93326e32b0b70e8ab Mon Sep 17 00:00:00 2001 From: Jamison Tsai Date: Fri, 3 Jan 2025 18:57:18 +1100 Subject: [PATCH 64/66] declare reused specs once and remove duplication --- .../api_validation_integration_test.go | 217 ++++-------------- 1 file changed, 46 insertions(+), 171 deletions(-) diff --git a/test/apis/v1alpha1/api_validation_integration_test.go b/test/apis/v1alpha1/api_validation_integration_test.go index 8dc0264f..476d47a8 100644 --- a/test/apis/v1alpha1/api_validation_integration_test.go +++ b/test/apis/v1alpha1/api_validation_integration_test.go @@ -33,6 +33,25 @@ var ( var _ = Describe("Test networking v1alpha1 API validation", func() { var statusErr *k8serrors.StatusError + var multiClusterServiceSpec = v1alpha1.MultiClusterServiceSpec{ + ServiceImport: v1alpha1.ServiceImportRef{ + Name: "service-import-1", + }, + } + var trafficManagerProfileSpec = v1alpha1.TrafficManagerProfileSpec{ + MonitorConfig: &v1alpha1.MonitorConfig{ + IntervalInSeconds: ptr.To(int64(30)), + TimeoutInSeconds: ptr.To(int64(7)), + }, + } + var trafficManagerBackendSpec = v1alpha1.TrafficManagerBackendSpec{ + Profile: v1alpha1.TrafficManagerProfileRef{ + Name: "traffic-manager-profile-ref-name", + }, + Backend: v1alpha1.TrafficManagerBackendRef{ + Name: "traffic-manager-backend-ref-name", + }, + } Context("Test MultiClusterService API validation - invalid cases", func() { It("should deny creating API with invalid name size", func() { @@ -42,11 +61,7 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { Name: nameWithInvalidSize, Namespace: testNamespace, }, - Spec: v1alpha1.MultiClusterServiceSpec{ - ServiceImport: v1alpha1.ServiceImportRef{ - Name: "service-import-1", - }, - }, + Spec: multiClusterServiceSpec, } By(fmt.Sprintf("expecting denial of CREATE API %s", nameWithInvalidSize)) var err = hubClient.Create(ctx, multiClusterServiceName) @@ -61,11 +76,7 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { Name: nameStartingWithNonAlphanum, Namespace: testNamespace, }, - Spec: v1alpha1.MultiClusterServiceSpec{ - ServiceImport: v1alpha1.ServiceImportRef{ - Name: "service-import-name", - }, - }, + Spec: multiClusterServiceSpec, } By(fmt.Sprintf("expecting denial of CREATE API %s", nameStartingWithNonAlphanum)) err := hubClient.Create(ctx, multiClusterServiceName) @@ -80,11 +91,7 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { Name: nameEndingWithNonAlphanum, Namespace: testNamespace, }, - Spec: v1alpha1.MultiClusterServiceSpec{ - ServiceImport: v1alpha1.ServiceImportRef{ - Name: "service-import-name", - }, - }, + Spec: multiClusterServiceSpec, } By(fmt.Sprintf("expecting denial of CREATE API %s", nameEndingWithNonAlphanum)) err := hubClient.Create(ctx, multiClusterServiceName) @@ -99,11 +106,7 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { Name: nameContainsUnderscore, Namespace: testNamespace, }, - Spec: v1alpha1.MultiClusterServiceSpec{ - ServiceImport: v1alpha1.ServiceImportRef{ - Name: "service-import-name", - }, - }, + Spec: multiClusterServiceSpec, } By(fmt.Sprintf("expecting denial of CREATE API %s", nameContainsUnderscore)) err := hubClient.Create(ctx, multiClusterServiceName) @@ -120,11 +123,7 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { Name: nameValid, Namespace: testNamespace, }, - Spec: v1alpha1.MultiClusterServiceSpec{ - ServiceImport: v1alpha1.ServiceImportRef{ - Name: "service-import-name", - }, - }, + Spec: multiClusterServiceSpec, } Expect(hubClient.Create(ctx, multiClusterServiceName)).Should(Succeed(), "failed to create multiClusterService") Expect(hubClient.Delete(ctx, multiClusterServiceName)).Should(Succeed(), "failed to delete multiClusterService") @@ -137,11 +136,7 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { Name: nameValidStartingWithAphabet, Namespace: testNamespace, }, - Spec: v1alpha1.MultiClusterServiceSpec{ - ServiceImport: v1alpha1.ServiceImportRef{ - Name: "service-import-name", - }, - }, + Spec: multiClusterServiceSpec, } Expect(hubClient.Create(ctx, multiClusterServiceName)).Should(Succeed(), "failed to create multiClusterService") Expect(hubClient.Delete(ctx, multiClusterServiceName)).Should(Succeed(), "failed to delete multiClusterService") @@ -154,11 +149,7 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { Name: nameValidStartingWithNumber, Namespace: testNamespace, }, - Spec: v1alpha1.MultiClusterServiceSpec{ - ServiceImport: v1alpha1.ServiceImportRef{ - Name: "service-import-name", - }, - }, + Spec: multiClusterServiceSpec, } Expect(hubClient.Create(ctx, multiClusterServiceName)).Should(Succeed(), "failed to create multiClusterService") Expect(hubClient.Delete(ctx, multiClusterServiceName)).Should(Succeed(), "failed to delete multiClusterService") @@ -171,11 +162,7 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { Name: nameValidEndingWithAphabet, Namespace: testNamespace, }, - Spec: v1alpha1.MultiClusterServiceSpec{ - ServiceImport: v1alpha1.ServiceImportRef{ - Name: "service-import-name", - }, - }, + Spec: multiClusterServiceSpec, } Expect(hubClient.Create(ctx, multiClusterServiceName)).Should(Succeed(), "failed to create multiClusterService") Expect(hubClient.Delete(ctx, multiClusterServiceName)).Should(Succeed(), "failed to delete multiClusterService") @@ -188,11 +175,7 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { Name: nameValidEndingWithNumber, Namespace: testNamespace, }, - Spec: v1alpha1.MultiClusterServiceSpec{ - ServiceImport: v1alpha1.ServiceImportRef{ - Name: "service-import-name", - }, - }, + Spec: multiClusterServiceSpec, } Expect(hubClient.Create(ctx, multiClusterServiceName)).Should(Succeed(), "failed to create multiClusterService") Expect(hubClient.Delete(ctx, multiClusterServiceName)).Should(Succeed(), "failed to delete multiClusterService") @@ -447,12 +430,7 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { Name: nameWithInvalidSize, Namespace: testNamespace, }, - Spec: v1alpha1.TrafficManagerProfileSpec{ - MonitorConfig: &v1alpha1.MonitorConfig{ - IntervalInSeconds: ptr.To(int64(30)), - TimeoutInSeconds: ptr.To(int64(7)), - }, - }, + Spec: trafficManagerProfileSpec, } By(fmt.Sprintf("expecting denial of CREATE API %s", nameWithInvalidSize)) var err = hubClient.Create(ctx, trafficManagerProfileName) @@ -467,12 +445,7 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { Name: nameStartingWithNonAlphanum, Namespace: testNamespace, }, - Spec: v1alpha1.TrafficManagerProfileSpec{ - MonitorConfig: &v1alpha1.MonitorConfig{ - IntervalInSeconds: ptr.To(int64(30)), - TimeoutInSeconds: ptr.To(int64(7)), - }, - }, + Spec: trafficManagerProfileSpec, } By(fmt.Sprintf("expecting denial of CREATE API %s", nameStartingWithNonAlphanum)) var err = hubClient.Create(ctx, trafficManagerProfileName) @@ -487,12 +460,7 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { Name: nameEndingWithNonAlphanum, Namespace: testNamespace, }, - Spec: v1alpha1.TrafficManagerProfileSpec{ - MonitorConfig: &v1alpha1.MonitorConfig{ - IntervalInSeconds: ptr.To(int64(30)), - TimeoutInSeconds: ptr.To(int64(7)), - }, - }, + Spec: trafficManagerProfileSpec, } By(fmt.Sprintf("expecting denial of CREATE API %s", nameEndingWithNonAlphanum)) var err = hubClient.Create(ctx, trafficManagerProfileName) @@ -507,12 +475,7 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { Name: nameContainsUnderscore, Namespace: testNamespace, }, - Spec: v1alpha1.TrafficManagerProfileSpec{ - MonitorConfig: &v1alpha1.MonitorConfig{ - IntervalInSeconds: ptr.To(int64(30)), - TimeoutInSeconds: ptr.To(int64(7)), - }, - }, + Spec: trafficManagerProfileSpec, } By(fmt.Sprintf("expecting denial of CREATE API %s", nameContainsUnderscore)) var err = hubClient.Create(ctx, trafficManagerProfileName) @@ -529,12 +492,7 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { Name: nameValid, Namespace: testNamespace, }, - Spec: v1alpha1.TrafficManagerProfileSpec{ - MonitorConfig: &v1alpha1.MonitorConfig{ - IntervalInSeconds: ptr.To(int64(30)), - TimeoutInSeconds: ptr.To(int64(7)), - }, - }, + Spec: trafficManagerProfileSpec, } Expect(hubClient.Create(ctx, trafficManagerProfileName)).Should(Succeed(), "failed to create trafficManagerProfile") Expect(hubClient.Delete(ctx, trafficManagerProfileName)).Should(Succeed(), "failed to delete trafficManagerProfile") @@ -547,12 +505,7 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { Name: nameValidStartingWithAphabet, Namespace: testNamespace, }, - Spec: v1alpha1.TrafficManagerProfileSpec{ - MonitorConfig: &v1alpha1.MonitorConfig{ - IntervalInSeconds: ptr.To(int64(30)), - TimeoutInSeconds: ptr.To(int64(7)), - }, - }, + Spec: trafficManagerProfileSpec, } Expect(hubClient.Create(ctx, trafficManagerProfileName)).Should(Succeed(), "failed to create trafficManagerProfile") Expect(hubClient.Delete(ctx, trafficManagerProfileName)).Should(Succeed(), "failed to delete trafficManagerProfile") @@ -565,12 +518,7 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { Name: nameValidStartingWithNumber, Namespace: testNamespace, }, - Spec: v1alpha1.TrafficManagerProfileSpec{ - MonitorConfig: &v1alpha1.MonitorConfig{ - IntervalInSeconds: ptr.To(int64(30)), - TimeoutInSeconds: ptr.To(int64(7)), - }, - }, + Spec: trafficManagerProfileSpec, } Expect(hubClient.Create(ctx, trafficManagerProfileName)).Should(Succeed(), "failed to create trafficManagerProfile") Expect(hubClient.Delete(ctx, trafficManagerProfileName)).Should(Succeed(), "failed to delete trafficManagerProfile") @@ -583,12 +531,7 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { Name: nameValidEndingWithAphabet, Namespace: testNamespace, }, - Spec: v1alpha1.TrafficManagerProfileSpec{ - MonitorConfig: &v1alpha1.MonitorConfig{ - IntervalInSeconds: ptr.To(int64(30)), - TimeoutInSeconds: ptr.To(int64(7)), - }, - }, + Spec: trafficManagerProfileSpec, } Expect(hubClient.Create(ctx, trafficManagerProfileName)).Should(Succeed(), "failed to create trafficManagerProfile") Expect(hubClient.Delete(ctx, trafficManagerProfileName)).Should(Succeed(), "failed to delete trafficManagerProfile") @@ -601,12 +544,7 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { Name: nameValidEndingWithNumber, Namespace: testNamespace, }, - Spec: v1alpha1.TrafficManagerProfileSpec{ - MonitorConfig: &v1alpha1.MonitorConfig{ - IntervalInSeconds: ptr.To(int64(30)), - TimeoutInSeconds: ptr.To(int64(7)), - }, - }, + Spec: trafficManagerProfileSpec, } Expect(hubClient.Create(ctx, trafficManagerProfileName)).Should(Succeed(), "failed to create trafficManagerProfile") Expect(hubClient.Delete(ctx, trafficManagerProfileName)).Should(Succeed(), "failed to delete trafficManagerProfile") @@ -621,14 +559,7 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { Name: nameWithInvalidSize, Namespace: testNamespace, }, - Spec: v1alpha1.TrafficManagerBackendSpec{ - Profile: v1alpha1.TrafficManagerProfileRef{ - Name: "traffic-manager-profile-ref-name", - }, - Backend: v1alpha1.TrafficManagerBackendRef{ - Name: "traffic-manager-backend-ref-name", - }, - }, + Spec: trafficManagerBackendSpec, } By(fmt.Sprintf("expecting denial of CREATE API %s", nameWithInvalidSize)) var err = hubClient.Create(ctx, trafficManagerBackendName) @@ -643,14 +574,7 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { Name: nameStartingWithNonAlphanum, Namespace: testNamespace, }, - Spec: v1alpha1.TrafficManagerBackendSpec{ - Profile: v1alpha1.TrafficManagerProfileRef{ - Name: "traffic-manager-profile-ref-name", - }, - Backend: v1alpha1.TrafficManagerBackendRef{ - Name: "traffic-manager-backend-ref-name", - }, - }, + Spec: trafficManagerBackendSpec, } By(fmt.Sprintf("expecting denial of CREATE API %s", nameStartingWithNonAlphanum)) var err = hubClient.Create(ctx, trafficManagerBackendName) @@ -665,14 +589,7 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { Name: nameEndingWithNonAlphanum, Namespace: testNamespace, }, - Spec: v1alpha1.TrafficManagerBackendSpec{ - Profile: v1alpha1.TrafficManagerProfileRef{ - Name: "traffic-manager-profile-ref-name", - }, - Backend: v1alpha1.TrafficManagerBackendRef{ - Name: "traffic-manager-backend-ref-name", - }, - }, + Spec: trafficManagerBackendSpec, } By(fmt.Sprintf("expecting denial of CREATE API %s", nameEndingWithNonAlphanum)) var err = hubClient.Create(ctx, trafficManagerBackendName) @@ -687,14 +604,7 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { Name: nameContainsUnderscore, Namespace: testNamespace, }, - Spec: v1alpha1.TrafficManagerBackendSpec{ - Profile: v1alpha1.TrafficManagerProfileRef{ - Name: "traffic-manager-profile-ref-name", - }, - Backend: v1alpha1.TrafficManagerBackendRef{ - Name: "traffic-manager-backend-ref-name", - }, - }, + Spec: trafficManagerBackendSpec, } By(fmt.Sprintf("expecting denial of CREATE API %s", nameContainsUnderscore)) var err = hubClient.Create(ctx, trafficManagerBackendName) @@ -711,14 +621,7 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { Name: nameValid, Namespace: testNamespace, }, - Spec: v1alpha1.TrafficManagerBackendSpec{ - Profile: v1alpha1.TrafficManagerProfileRef{ - Name: "traffic-manager-profile-ref-name", - }, - Backend: v1alpha1.TrafficManagerBackendRef{ - Name: "traffic-manager-backend-ref-name", - }, - }, + Spec: trafficManagerBackendSpec, } Expect(hubClient.Create(ctx, trafficManagerBackendName)).Should(Succeed(), "failed to create trafficManagerBackend") Expect(hubClient.Delete(ctx, trafficManagerBackendName)).Should(Succeed(), "failed to delete trafficManagerBackend") @@ -731,14 +634,7 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { Name: nameValidStartingWithAphabet, Namespace: testNamespace, }, - Spec: v1alpha1.TrafficManagerBackendSpec{ - Profile: v1alpha1.TrafficManagerProfileRef{ - Name: "traffic-manager-profile-ref-name", - }, - Backend: v1alpha1.TrafficManagerBackendRef{ - Name: "traffic-manager-backend-ref-name", - }, - }, + Spec: trafficManagerBackendSpec, } Expect(hubClient.Create(ctx, trafficManagerBackendName)).Should(Succeed(), "failed to create trafficManagerBackend") Expect(hubClient.Delete(ctx, trafficManagerBackendName)).Should(Succeed(), "failed to delete trafficManagerBackend") @@ -751,14 +647,7 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { Name: nameValidStartingWithNumber, Namespace: testNamespace, }, - Spec: v1alpha1.TrafficManagerBackendSpec{ - Profile: v1alpha1.TrafficManagerProfileRef{ - Name: "traffic-manager-profile-ref-name", - }, - Backend: v1alpha1.TrafficManagerBackendRef{ - Name: "traffic-manager-backend-ref-name", - }, - }, + Spec: trafficManagerBackendSpec, } Expect(hubClient.Create(ctx, trafficManagerBackendName)).Should(Succeed(), "failed to create trafficManagerBackend") Expect(hubClient.Delete(ctx, trafficManagerBackendName)).Should(Succeed(), "failed to delete trafficManagerBackend") @@ -771,14 +660,7 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { Name: nameValidEndingWithAphabet, Namespace: testNamespace, }, - Spec: v1alpha1.TrafficManagerBackendSpec{ - Profile: v1alpha1.TrafficManagerProfileRef{ - Name: "traffic-manager-profile-ref-name", - }, - Backend: v1alpha1.TrafficManagerBackendRef{ - Name: "traffic-manager-backend-ref-name", - }, - }, + Spec: trafficManagerBackendSpec, } Expect(hubClient.Create(ctx, trafficManagerBackendName)).Should(Succeed(), "failed to create trafficManagerBackend") Expect(hubClient.Delete(ctx, trafficManagerBackendName)).Should(Succeed(), "failed to delete trafficManagerBackend") @@ -791,14 +673,7 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { Name: nameValidEndingWithNumber, Namespace: testNamespace, }, - Spec: v1alpha1.TrafficManagerBackendSpec{ - Profile: v1alpha1.TrafficManagerProfileRef{ - Name: "traffic-manager-profile-ref-name", - }, - Backend: v1alpha1.TrafficManagerBackendRef{ - Name: "traffic-manager-backend-ref-name", - }, - }, + Spec: trafficManagerBackendSpec, } Expect(hubClient.Create(ctx, trafficManagerBackendName)).Should(Succeed(), "failed to create trafficManagerBackend") Expect(hubClient.Delete(ctx, trafficManagerBackendName)).Should(Succeed(), "failed to delete trafficManagerBackend") From 5f6e7a34b2287b13394d87648de914d5a2f7cf26 Mon Sep 17 00:00:00 2001 From: Jamison Tsai Date: Fri, 3 Jan 2025 19:23:26 +1100 Subject: [PATCH 65/66] declare reused objectmeta once and remove duplications + correct alphabet spelling --- .../api_validation_integration_test.go | 333 ++++++------------ 1 file changed, 117 insertions(+), 216 deletions(-) diff --git a/test/apis/v1alpha1/api_validation_integration_test.go b/test/apis/v1alpha1/api_validation_integration_test.go index 476d47a8..d8f2fe41 100644 --- a/test/apis/v1alpha1/api_validation_integration_test.go +++ b/test/apis/v1alpha1/api_validation_integration_test.go @@ -20,15 +20,15 @@ import ( ) var ( - nameContainsUnderscore = "a_bcdef-123456789-123456789-123456789-123456789-123456789-123456789-123456789" - nameEndingWithNonAlphanum = "abcdef-123456789-123456789-123456789-123456789-123456789-" - nameStartingWithNonAlphanum = "-abcdef-123456789-123456789-123456789-123456789-123456789" - nameValid = "abc-123456789-123456789-123456789-123456789-123456789-123456789" - nameValidEndingWithAphabet = "123456789-abc" - nameValidEndingWithNumber = "123456789-123" - nameValidStartingWithAphabet = "abc-123456789" - nameValidStartingWithNumber = "123-123456789" - nameWithInvalidSize = "abcdef-123456789-123456789-123456789-123456789-123456789-123456789-123456789" + nameContainsUnderscore = "a_bcdef-123456789-123456789-123456789-123456789-123456789-123456789-123456789" + nameEndingWithNonAlphanum = "abcdef-123456789-123456789-123456789-123456789-123456789-" + nameStartingWithNonAlphanum = "-abcdef-123456789-123456789-123456789-123456789-123456789" + nameValid = "abc-123456789-123456789-123456789-123456789-123456789-123456789" + nameValidEndingWithAlphabet = "123456789-abc" + nameValidEndingWithNumber = "123456789-123" + nameValidStartingWithAlphabet = "abc-123456789" + nameValidStartingWithNumber = "123-123456789" + nameWithInvalidSize = "abcdef-123456789-123456789-123456789-123456789-123456789-123456789-123456789" ) var _ = Describe("Test networking v1alpha1 API validation", func() { @@ -52,16 +52,49 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { Name: "traffic-manager-backend-ref-name", }, } + var objectMetaWithNameSizeInvalid = metav1.ObjectMeta{ + Name: nameWithInvalidSize, + Namespace: testNamespace, + } + var objectMetaWithNameStartingNonAlphanum = metav1.ObjectMeta{ + Name: nameStartingWithNonAlphanum, + Namespace: testNamespace, + } + var objectMetaWithNameEndingNonAlphanum = metav1.ObjectMeta{ + Name: nameEndingWithNonAlphanum, + Namespace: testNamespace, + } + var objectMetaWithNameContainingUnderscore = metav1.ObjectMeta{ + Name: nameContainsUnderscore, + Namespace: testNamespace, + } + var objectMetaWithNameValid = metav1.ObjectMeta{ + Name: nameValid, + Namespace: testNamespace, + } + var objectMetaWithValidNameStartingAlphabet = metav1.ObjectMeta{ + Name: nameValidStartingWithAlphabet, + Namespace: testNamespace, + } + var objectMetaWithValidNameStartingNumber = metav1.ObjectMeta{ + Name: nameValidStartingWithNumber, + Namespace: testNamespace, + } + var objectMetaWithValidNameEndingAlphabet = metav1.ObjectMeta{ + Name: nameValidEndingWithAlphabet, + Namespace: testNamespace, + } + var objectMetaWithValidNameEndingNumber = metav1.ObjectMeta{ + Name: nameValidEndingWithNumber, + Namespace: testNamespace, + } Context("Test MultiClusterService API validation - invalid cases", func() { It("should deny creating API with invalid name size", func() { // Create the API. multiClusterServiceName := &v1alpha1.MultiClusterService{ - ObjectMeta: metav1.ObjectMeta{ - Name: nameWithInvalidSize, - Namespace: testNamespace, - }, - Spec: multiClusterServiceSpec, + ObjectMeta: objectMetaWithNameSizeInvalid, + Spec: multiClusterServiceSpec, } By(fmt.Sprintf("expecting denial of CREATE API %s", nameWithInvalidSize)) var err = hubClient.Create(ctx, multiClusterServiceName) @@ -72,11 +105,8 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { It("should deny creating API with invalid name starting with non-alphanumeric character", func() { // Create the API. multiClusterServiceName := &v1alpha1.MultiClusterService{ - ObjectMeta: metav1.ObjectMeta{ - Name: nameStartingWithNonAlphanum, - Namespace: testNamespace, - }, - Spec: multiClusterServiceSpec, + ObjectMeta: objectMetaWithNameStartingNonAlphanum, + Spec: multiClusterServiceSpec, } By(fmt.Sprintf("expecting denial of CREATE API %s", nameStartingWithNonAlphanum)) err := hubClient.Create(ctx, multiClusterServiceName) @@ -87,11 +117,8 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { It("should deny creating API with invalid name ending with non-alphanumeric character", func() { // Create the API. multiClusterServiceName := &v1alpha1.MultiClusterService{ - ObjectMeta: metav1.ObjectMeta{ - Name: nameEndingWithNonAlphanum, - Namespace: testNamespace, - }, - Spec: multiClusterServiceSpec, + ObjectMeta: objectMetaWithNameEndingNonAlphanum, + Spec: multiClusterServiceSpec, } By(fmt.Sprintf("expecting denial of CREATE API %s", nameEndingWithNonAlphanum)) err := hubClient.Create(ctx, multiClusterServiceName) @@ -102,11 +129,8 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { It("should deny creating API with invalid name containing character that is not alphanumeric and not -", func() { // Create the API. multiClusterServiceName := &v1alpha1.MultiClusterService{ - ObjectMeta: metav1.ObjectMeta{ - Name: nameContainsUnderscore, - Namespace: testNamespace, - }, - Spec: multiClusterServiceSpec, + ObjectMeta: objectMetaWithNameContainingUnderscore, + Spec: multiClusterServiceSpec, } By(fmt.Sprintf("expecting denial of CREATE API %s", nameContainsUnderscore)) err := hubClient.Create(ctx, multiClusterServiceName) @@ -119,11 +143,8 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { It("should allow creating API with valid name size", func() { // Create the API. multiClusterServiceName := &v1alpha1.MultiClusterService{ - ObjectMeta: metav1.ObjectMeta{ - Name: nameValid, - Namespace: testNamespace, - }, - Spec: multiClusterServiceSpec, + ObjectMeta: objectMetaWithNameValid, + Spec: multiClusterServiceSpec, } Expect(hubClient.Create(ctx, multiClusterServiceName)).Should(Succeed(), "failed to create multiClusterService") Expect(hubClient.Delete(ctx, multiClusterServiceName)).Should(Succeed(), "failed to delete multiClusterService") @@ -132,11 +153,8 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { It("should allow creating API with valid name starting with alphabet character", func() { // Create the API. multiClusterServiceName := &v1alpha1.MultiClusterService{ - ObjectMeta: metav1.ObjectMeta{ - Name: nameValidStartingWithAphabet, - Namespace: testNamespace, - }, - Spec: multiClusterServiceSpec, + ObjectMeta: objectMetaWithValidNameStartingAlphabet, + Spec: multiClusterServiceSpec, } Expect(hubClient.Create(ctx, multiClusterServiceName)).Should(Succeed(), "failed to create multiClusterService") Expect(hubClient.Delete(ctx, multiClusterServiceName)).Should(Succeed(), "failed to delete multiClusterService") @@ -145,11 +163,8 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { It("should allow creating API with valid name starting with numeric character", func() { // Create the API. multiClusterServiceName := &v1alpha1.MultiClusterService{ - ObjectMeta: metav1.ObjectMeta{ - Name: nameValidStartingWithNumber, - Namespace: testNamespace, - }, - Spec: multiClusterServiceSpec, + ObjectMeta: objectMetaWithValidNameStartingNumber, + Spec: multiClusterServiceSpec, } Expect(hubClient.Create(ctx, multiClusterServiceName)).Should(Succeed(), "failed to create multiClusterService") Expect(hubClient.Delete(ctx, multiClusterServiceName)).Should(Succeed(), "failed to delete multiClusterService") @@ -158,11 +173,8 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { It("should allow creating API with valid name ending with alphabet character", func() { // Create the API. multiClusterServiceName := &v1alpha1.MultiClusterService{ - ObjectMeta: metav1.ObjectMeta{ - Name: nameValidEndingWithAphabet, - Namespace: testNamespace, - }, - Spec: multiClusterServiceSpec, + ObjectMeta: objectMetaWithValidNameEndingAlphabet, + Spec: multiClusterServiceSpec, } Expect(hubClient.Create(ctx, multiClusterServiceName)).Should(Succeed(), "failed to create multiClusterService") Expect(hubClient.Delete(ctx, multiClusterServiceName)).Should(Succeed(), "failed to delete multiClusterService") @@ -171,11 +183,8 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { It("should allow creating API with valid name ending with numeric character", func() { // Create the API. multiClusterServiceName := &v1alpha1.MultiClusterService{ - ObjectMeta: metav1.ObjectMeta{ - Name: nameValidEndingWithNumber, - Namespace: testNamespace, - }, - Spec: multiClusterServiceSpec, + ObjectMeta: objectMetaWithValidNameEndingNumber, + Spec: multiClusterServiceSpec, } Expect(hubClient.Create(ctx, multiClusterServiceName)).Should(Succeed(), "failed to create multiClusterService") Expect(hubClient.Delete(ctx, multiClusterServiceName)).Should(Succeed(), "failed to delete multiClusterService") @@ -186,10 +195,7 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { It("should deny creating API with invalid name size", func() { // Create the API. serviceExportName := &v1alpha1.ServiceExport{ - ObjectMeta: metav1.ObjectMeta{ - Name: nameWithInvalidSize, - Namespace: testNamespace, - }, + ObjectMeta: objectMetaWithNameSizeInvalid, } By(fmt.Sprintf("expecting denial of CREATE API %s", nameWithInvalidSize)) var err = hubClient.Create(ctx, serviceExportName) @@ -200,10 +206,7 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { It("should deny creating API with invalid name starting with non-alphanumeric character", func() { // Create the API. serviceExportName := &v1alpha1.ServiceExport{ - ObjectMeta: metav1.ObjectMeta{ - Name: nameStartingWithNonAlphanum, - Namespace: testNamespace, - }, + ObjectMeta: objectMetaWithNameStartingNonAlphanum, } By(fmt.Sprintf("expecting denial of CREATE API %s", nameStartingWithNonAlphanum)) var err = hubClient.Create(ctx, serviceExportName) @@ -214,10 +217,7 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { It("should deny creating API with invalid name ending with non-alphanumeric character", func() { // Create the API. serviceExportName := &v1alpha1.ServiceExport{ - ObjectMeta: metav1.ObjectMeta{ - Name: nameEndingWithNonAlphanum, - Namespace: testNamespace, - }, + ObjectMeta: objectMetaWithNameEndingNonAlphanum, } By(fmt.Sprintf("expecting denial of CREATE API %s", nameEndingWithNonAlphanum)) var err = hubClient.Create(ctx, serviceExportName) @@ -228,10 +228,7 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { It("should deny creating API with invalid name containing character that is not alphanumeric and not -", func() { // Create the API. serviceExportName := &v1alpha1.ServiceExport{ - ObjectMeta: metav1.ObjectMeta{ - Name: nameContainsUnderscore, - Namespace: testNamespace, - }, + ObjectMeta: objectMetaWithNameContainingUnderscore, } By(fmt.Sprintf("expecting denial of CREATE API %s", nameContainsUnderscore)) var err = hubClient.Create(ctx, serviceExportName) @@ -244,10 +241,7 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { It("should allow creating API with valid name size", func() { // Create the API. serviceExportName := &v1alpha1.ServiceExport{ - ObjectMeta: metav1.ObjectMeta{ - Name: nameValid, - Namespace: testNamespace, - }, + ObjectMeta: objectMetaWithNameValid, } Expect(hubClient.Create(ctx, serviceExportName)).Should(Succeed(), "failed to create serviceExport") Expect(hubClient.Delete(ctx, serviceExportName)).Should(Succeed(), "failed to delete serviceExport") @@ -256,10 +250,7 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { It("should allow creating API with valid name starting with alphabet character", func() { // Create the API. serviceExportName := &v1alpha1.ServiceExport{ - ObjectMeta: metav1.ObjectMeta{ - Name: nameValidStartingWithAphabet, - Namespace: testNamespace, - }, + ObjectMeta: objectMetaWithValidNameStartingAlphabet, } Expect(hubClient.Create(ctx, serviceExportName)).Should(Succeed(), "failed to create serviceExport") Expect(hubClient.Delete(ctx, serviceExportName)).Should(Succeed(), "failed to delete serviceExport") @@ -268,10 +259,7 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { It("should allow creating API with valid name starting with numeric character", func() { // Create the API. serviceExportName := &v1alpha1.ServiceExport{ - ObjectMeta: metav1.ObjectMeta{ - Name: nameValidStartingWithNumber, - Namespace: testNamespace, - }, + ObjectMeta: objectMetaWithValidNameStartingNumber, } Expect(hubClient.Create(ctx, serviceExportName)).Should(Succeed(), "failed to create serviceExport") Expect(hubClient.Delete(ctx, serviceExportName)).Should(Succeed(), "failed to delete serviceExport") @@ -280,10 +268,7 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { It("should allow creating API with valid name ending with alphabet character", func() { // Create the API. serviceExportName := &v1alpha1.ServiceExport{ - ObjectMeta: metav1.ObjectMeta{ - Name: nameValidEndingWithAphabet, - Namespace: testNamespace, - }, + ObjectMeta: objectMetaWithValidNameEndingAlphabet, } Expect(hubClient.Create(ctx, serviceExportName)).Should(Succeed(), "failed to create serviceExport") Expect(hubClient.Delete(ctx, serviceExportName)).Should(Succeed(), "failed to delete serviceExport") @@ -292,10 +277,7 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { It("should allow creating API with valid name ending with numeric character", func() { // Create the API. serviceExportName := &v1alpha1.ServiceExport{ - ObjectMeta: metav1.ObjectMeta{ - Name: nameValidEndingWithNumber, - Namespace: testNamespace, - }, + ObjectMeta: objectMetaWithValidNameEndingNumber, } Expect(hubClient.Create(ctx, serviceExportName)).Should(Succeed(), "failed to create serviceExport") Expect(hubClient.Delete(ctx, serviceExportName)).Should(Succeed(), "failed to delete serviceExport") @@ -306,10 +288,7 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { It("should deny creating API with invalid name size", func() { // Create the API. serviceImportName := &v1alpha1.ServiceImport{ - ObjectMeta: metav1.ObjectMeta{ - Name: nameWithInvalidSize, - Namespace: testNamespace, - }, + ObjectMeta: objectMetaWithNameSizeInvalid, } By(fmt.Sprintf("expecting denial of CREATE API %s", nameWithInvalidSize)) var err = hubClient.Create(ctx, serviceImportName) @@ -320,10 +299,7 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { It("should deny creating API with invalid name starting with non-alphanumeric character", func() { // Create the API. serviceImportName := &v1alpha1.ServiceImport{ - ObjectMeta: metav1.ObjectMeta{ - Name: nameStartingWithNonAlphanum, - Namespace: testNamespace, - }, + ObjectMeta: objectMetaWithNameStartingNonAlphanum, } By(fmt.Sprintf("expecting denial of CREATE API %s", nameStartingWithNonAlphanum)) var err = hubClient.Create(ctx, serviceImportName) @@ -334,10 +310,7 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { It("should deny creating API with invalid name ending with non-alphanumeric character", func() { // Create the API. serviceImportName := &v1alpha1.ServiceImport{ - ObjectMeta: metav1.ObjectMeta{ - Name: nameEndingWithNonAlphanum, - Namespace: testNamespace, - }, + ObjectMeta: objectMetaWithNameEndingNonAlphanum, } By(fmt.Sprintf("expecting denial of CREATE API %s", nameEndingWithNonAlphanum)) var err = hubClient.Create(ctx, serviceImportName) @@ -348,10 +321,7 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { It("should deny creating API with invalid name containing character that is not alphanumeric and not -", func() { // Create the API. serviceImportName := &v1alpha1.ServiceImport{ - ObjectMeta: metav1.ObjectMeta{ - Name: nameContainsUnderscore, - Namespace: testNamespace, - }, + ObjectMeta: objectMetaWithNameContainingUnderscore, } By(fmt.Sprintf("expecting denial of CREATE API %s", nameContainsUnderscore)) var err = hubClient.Create(ctx, serviceImportName) @@ -364,10 +334,7 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { It("should allow creating API with valid name size", func() { // Create the API. serviceImportName := &v1alpha1.ServiceImport{ - ObjectMeta: metav1.ObjectMeta{ - Name: nameValid, - Namespace: testNamespace, - }, + ObjectMeta: objectMetaWithNameValid, } Expect(hubClient.Create(ctx, serviceImportName)).Should(Succeed(), "failed to create serviceImport") Expect(hubClient.Delete(ctx, serviceImportName)).Should(Succeed(), "failed to delete serviceImport") @@ -376,10 +343,7 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { It("should allow creating API with valid name starting with alphabet character", func() { // Create the API. serviceImportName := &v1alpha1.ServiceImport{ - ObjectMeta: metav1.ObjectMeta{ - Name: nameValidStartingWithAphabet, - Namespace: testNamespace, - }, + ObjectMeta: objectMetaWithValidNameStartingAlphabet, } Expect(hubClient.Create(ctx, serviceImportName)).Should(Succeed(), "failed to create serviceImport") Expect(hubClient.Delete(ctx, serviceImportName)).Should(Succeed(), "failed to delete serviceImport") @@ -388,10 +352,7 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { It("should allow creating API with valid name starting with numeric character", func() { // Create the API. serviceImportName := &v1alpha1.ServiceImport{ - ObjectMeta: metav1.ObjectMeta{ - Name: nameValidStartingWithNumber, - Namespace: testNamespace, - }, + ObjectMeta: objectMetaWithValidNameStartingNumber, } Expect(hubClient.Create(ctx, serviceImportName)).Should(Succeed(), "failed to create serviceImport") Expect(hubClient.Delete(ctx, serviceImportName)).Should(Succeed(), "failed to delete serviceImport") @@ -400,10 +361,7 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { It("should allow creating API with valid name ending with alphabet character", func() { // Create the API. serviceImportName := &v1alpha1.ServiceImport{ - ObjectMeta: metav1.ObjectMeta{ - Name: nameValidEndingWithAphabet, - Namespace: testNamespace, - }, + ObjectMeta: objectMetaWithValidNameEndingAlphabet, } Expect(hubClient.Create(ctx, serviceImportName)).Should(Succeed(), "failed to create serviceImport") Expect(hubClient.Delete(ctx, serviceImportName)).Should(Succeed(), "failed to delete serviceImport") @@ -412,10 +370,7 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { It("should allow creating API with valid name ending with numeric character", func() { // Create the API. serviceImportName := &v1alpha1.ServiceImport{ - ObjectMeta: metav1.ObjectMeta{ - Name: nameValidEndingWithNumber, - Namespace: testNamespace, - }, + ObjectMeta: objectMetaWithValidNameEndingNumber, } Expect(hubClient.Create(ctx, serviceImportName)).Should(Succeed(), "failed to create serviceImport") Expect(hubClient.Delete(ctx, serviceImportName)).Should(Succeed(), "failed to delete serviceImport") @@ -426,11 +381,8 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { It("should deny creating API with invalid name size", func() { // Create the API. trafficManagerProfileName := &v1alpha1.TrafficManagerProfile{ - ObjectMeta: metav1.ObjectMeta{ - Name: nameWithInvalidSize, - Namespace: testNamespace, - }, - Spec: trafficManagerProfileSpec, + ObjectMeta: objectMetaWithNameSizeInvalid, + Spec: trafficManagerProfileSpec, } By(fmt.Sprintf("expecting denial of CREATE API %s", nameWithInvalidSize)) var err = hubClient.Create(ctx, trafficManagerProfileName) @@ -441,11 +393,8 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { It("should deny creating API with invalid name starting with non-alphanumeric character", func() { // Create the API. trafficManagerProfileName := &v1alpha1.TrafficManagerProfile{ - ObjectMeta: metav1.ObjectMeta{ - Name: nameStartingWithNonAlphanum, - Namespace: testNamespace, - }, - Spec: trafficManagerProfileSpec, + ObjectMeta: objectMetaWithNameStartingNonAlphanum, + Spec: trafficManagerProfileSpec, } By(fmt.Sprintf("expecting denial of CREATE API %s", nameStartingWithNonAlphanum)) var err = hubClient.Create(ctx, trafficManagerProfileName) @@ -456,11 +405,8 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { It("should deny creating API with invalid name ending with non-alphanumeric character", func() { // Create the API. trafficManagerProfileName := &v1alpha1.TrafficManagerProfile{ - ObjectMeta: metav1.ObjectMeta{ - Name: nameEndingWithNonAlphanum, - Namespace: testNamespace, - }, - Spec: trafficManagerProfileSpec, + ObjectMeta: objectMetaWithNameEndingNonAlphanum, + Spec: trafficManagerProfileSpec, } By(fmt.Sprintf("expecting denial of CREATE API %s", nameEndingWithNonAlphanum)) var err = hubClient.Create(ctx, trafficManagerProfileName) @@ -471,11 +417,8 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { It("should deny creating API with invalid name containing character that is not alphanumeric and not -", func() { // Create the API. trafficManagerProfileName := &v1alpha1.TrafficManagerProfile{ - ObjectMeta: metav1.ObjectMeta{ - Name: nameContainsUnderscore, - Namespace: testNamespace, - }, - Spec: trafficManagerProfileSpec, + ObjectMeta: objectMetaWithNameContainingUnderscore, + Spec: trafficManagerProfileSpec, } By(fmt.Sprintf("expecting denial of CREATE API %s", nameContainsUnderscore)) var err = hubClient.Create(ctx, trafficManagerProfileName) @@ -488,11 +431,8 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { It("should allow creating API with valid name size", func() { // Create the API. trafficManagerProfileName := &v1alpha1.TrafficManagerProfile{ - ObjectMeta: metav1.ObjectMeta{ - Name: nameValid, - Namespace: testNamespace, - }, - Spec: trafficManagerProfileSpec, + ObjectMeta: objectMetaWithNameValid, + Spec: trafficManagerProfileSpec, } Expect(hubClient.Create(ctx, trafficManagerProfileName)).Should(Succeed(), "failed to create trafficManagerProfile") Expect(hubClient.Delete(ctx, trafficManagerProfileName)).Should(Succeed(), "failed to delete trafficManagerProfile") @@ -501,11 +441,8 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { It("should allow creating API with valid name starting with alphabet character", func() { // Create the API. trafficManagerProfileName := &v1alpha1.TrafficManagerProfile{ - ObjectMeta: metav1.ObjectMeta{ - Name: nameValidStartingWithAphabet, - Namespace: testNamespace, - }, - Spec: trafficManagerProfileSpec, + ObjectMeta: objectMetaWithValidNameStartingAlphabet, + Spec: trafficManagerProfileSpec, } Expect(hubClient.Create(ctx, trafficManagerProfileName)).Should(Succeed(), "failed to create trafficManagerProfile") Expect(hubClient.Delete(ctx, trafficManagerProfileName)).Should(Succeed(), "failed to delete trafficManagerProfile") @@ -514,11 +451,8 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { It("should allow creating API with valid name starting with numeric character", func() { // Create the API. trafficManagerProfileName := &v1alpha1.TrafficManagerProfile{ - ObjectMeta: metav1.ObjectMeta{ - Name: nameValidStartingWithNumber, - Namespace: testNamespace, - }, - Spec: trafficManagerProfileSpec, + ObjectMeta: objectMetaWithValidNameStartingNumber, + Spec: trafficManagerProfileSpec, } Expect(hubClient.Create(ctx, trafficManagerProfileName)).Should(Succeed(), "failed to create trafficManagerProfile") Expect(hubClient.Delete(ctx, trafficManagerProfileName)).Should(Succeed(), "failed to delete trafficManagerProfile") @@ -527,11 +461,8 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { It("should allow creating API with valid name ending with alphabet character", func() { // Create the API. trafficManagerProfileName := &v1alpha1.TrafficManagerProfile{ - ObjectMeta: metav1.ObjectMeta{ - Name: nameValidEndingWithAphabet, - Namespace: testNamespace, - }, - Spec: trafficManagerProfileSpec, + ObjectMeta: objectMetaWithValidNameEndingAlphabet, + Spec: trafficManagerProfileSpec, } Expect(hubClient.Create(ctx, trafficManagerProfileName)).Should(Succeed(), "failed to create trafficManagerProfile") Expect(hubClient.Delete(ctx, trafficManagerProfileName)).Should(Succeed(), "failed to delete trafficManagerProfile") @@ -540,11 +471,8 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { It("should allow creating API with valid name ending with numeric character", func() { // Create the API. trafficManagerProfileName := &v1alpha1.TrafficManagerProfile{ - ObjectMeta: metav1.ObjectMeta{ - Name: nameValidEndingWithNumber, - Namespace: testNamespace, - }, - Spec: trafficManagerProfileSpec, + ObjectMeta: objectMetaWithValidNameEndingNumber, + Spec: trafficManagerProfileSpec, } Expect(hubClient.Create(ctx, trafficManagerProfileName)).Should(Succeed(), "failed to create trafficManagerProfile") Expect(hubClient.Delete(ctx, trafficManagerProfileName)).Should(Succeed(), "failed to delete trafficManagerProfile") @@ -555,11 +483,8 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { It("should deny creating API with invalid name size", func() { // Create the API. trafficManagerBackendName := &v1alpha1.TrafficManagerBackend{ - ObjectMeta: metav1.ObjectMeta{ - Name: nameWithInvalidSize, - Namespace: testNamespace, - }, - Spec: trafficManagerBackendSpec, + ObjectMeta: objectMetaWithNameSizeInvalid, + Spec: trafficManagerBackendSpec, } By(fmt.Sprintf("expecting denial of CREATE API %s", nameWithInvalidSize)) var err = hubClient.Create(ctx, trafficManagerBackendName) @@ -570,11 +495,8 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { It("should deny creating API with invalid name starting with non-alphanumeric character", func() { // Create the API. trafficManagerBackendName := &v1alpha1.TrafficManagerBackend{ - ObjectMeta: metav1.ObjectMeta{ - Name: nameStartingWithNonAlphanum, - Namespace: testNamespace, - }, - Spec: trafficManagerBackendSpec, + ObjectMeta: objectMetaWithNameStartingNonAlphanum, + Spec: trafficManagerBackendSpec, } By(fmt.Sprintf("expecting denial of CREATE API %s", nameStartingWithNonAlphanum)) var err = hubClient.Create(ctx, trafficManagerBackendName) @@ -585,11 +507,8 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { It("should deny creating API with invalid name ending with non-alphanumeric character", func() { // Create the API. trafficManagerBackendName := &v1alpha1.TrafficManagerBackend{ - ObjectMeta: metav1.ObjectMeta{ - Name: nameEndingWithNonAlphanum, - Namespace: testNamespace, - }, - Spec: trafficManagerBackendSpec, + ObjectMeta: objectMetaWithNameEndingNonAlphanum, + Spec: trafficManagerBackendSpec, } By(fmt.Sprintf("expecting denial of CREATE API %s", nameEndingWithNonAlphanum)) var err = hubClient.Create(ctx, trafficManagerBackendName) @@ -600,11 +519,8 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { It("should deny creating API with invalid name containing character that is not alphanumeric and not -", func() { // Create the API. trafficManagerBackendName := &v1alpha1.TrafficManagerBackend{ - ObjectMeta: metav1.ObjectMeta{ - Name: nameContainsUnderscore, - Namespace: testNamespace, - }, - Spec: trafficManagerBackendSpec, + ObjectMeta: objectMetaWithNameContainingUnderscore, + Spec: trafficManagerBackendSpec, } By(fmt.Sprintf("expecting denial of CREATE API %s", nameContainsUnderscore)) var err = hubClient.Create(ctx, trafficManagerBackendName) @@ -617,11 +533,8 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { It("should allow creating API with valid name size", func() { // Create the API. trafficManagerBackendName := &v1alpha1.TrafficManagerBackend{ - ObjectMeta: metav1.ObjectMeta{ - Name: nameValid, - Namespace: testNamespace, - }, - Spec: trafficManagerBackendSpec, + ObjectMeta: objectMetaWithNameValid, + Spec: trafficManagerBackendSpec, } Expect(hubClient.Create(ctx, trafficManagerBackendName)).Should(Succeed(), "failed to create trafficManagerBackend") Expect(hubClient.Delete(ctx, trafficManagerBackendName)).Should(Succeed(), "failed to delete trafficManagerBackend") @@ -630,11 +543,8 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { It("should allow creating API with valid name starting with alphabet character", func() { // Create the API. trafficManagerBackendName := &v1alpha1.TrafficManagerBackend{ - ObjectMeta: metav1.ObjectMeta{ - Name: nameValidStartingWithAphabet, - Namespace: testNamespace, - }, - Spec: trafficManagerBackendSpec, + ObjectMeta: objectMetaWithValidNameStartingAlphabet, + Spec: trafficManagerBackendSpec, } Expect(hubClient.Create(ctx, trafficManagerBackendName)).Should(Succeed(), "failed to create trafficManagerBackend") Expect(hubClient.Delete(ctx, trafficManagerBackendName)).Should(Succeed(), "failed to delete trafficManagerBackend") @@ -643,11 +553,8 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { It("should allow creating API with valid name starting with numeric character", func() { // Create the API. trafficManagerBackendName := &v1alpha1.TrafficManagerBackend{ - ObjectMeta: metav1.ObjectMeta{ - Name: nameValidStartingWithNumber, - Namespace: testNamespace, - }, - Spec: trafficManagerBackendSpec, + ObjectMeta: objectMetaWithValidNameStartingNumber, + Spec: trafficManagerBackendSpec, } Expect(hubClient.Create(ctx, trafficManagerBackendName)).Should(Succeed(), "failed to create trafficManagerBackend") Expect(hubClient.Delete(ctx, trafficManagerBackendName)).Should(Succeed(), "failed to delete trafficManagerBackend") @@ -656,11 +563,8 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { It("should allow creating API with valid name ending with alphabet character", func() { // Create the API. trafficManagerBackendName := &v1alpha1.TrafficManagerBackend{ - ObjectMeta: metav1.ObjectMeta{ - Name: nameValidEndingWithAphabet, - Namespace: testNamespace, - }, - Spec: trafficManagerBackendSpec, + ObjectMeta: objectMetaWithValidNameEndingAlphabet, + Spec: trafficManagerBackendSpec, } Expect(hubClient.Create(ctx, trafficManagerBackendName)).Should(Succeed(), "failed to create trafficManagerBackend") Expect(hubClient.Delete(ctx, trafficManagerBackendName)).Should(Succeed(), "failed to delete trafficManagerBackend") @@ -669,11 +573,8 @@ var _ = Describe("Test networking v1alpha1 API validation", func() { It("should allow creating API with valid name ending with numeric character", func() { // Create the API. trafficManagerBackendName := &v1alpha1.TrafficManagerBackend{ - ObjectMeta: metav1.ObjectMeta{ - Name: nameValidEndingWithNumber, - Namespace: testNamespace, - }, - Spec: trafficManagerBackendSpec, + ObjectMeta: objectMetaWithValidNameEndingNumber, + Spec: trafficManagerBackendSpec, } Expect(hubClient.Create(ctx, trafficManagerBackendName)).Should(Succeed(), "failed to create trafficManagerBackend") Expect(hubClient.Delete(ctx, trafficManagerBackendName)).Should(Succeed(), "failed to delete trafficManagerBackend") From 57efd4cdcc545150039563fb776315c585ce984f Mon Sep 17 00:00:00 2001 From: Jamison Tsai Date: Fri, 3 Jan 2025 19:26:12 +1100 Subject: [PATCH 66/66] resolve conflict with lates commit --- test/e2e/traffic_manager_test.go | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/test/e2e/traffic_manager_test.go b/test/e2e/traffic_manager_test.go index bdae9bef..39eeb982 100644 --- a/test/e2e/traffic_manager_test.go +++ b/test/e2e/traffic_manager_test.go @@ -139,9 +139,7 @@ var _ = Describe("Test exporting service via Azure traffic manager", func() { Weight: ptr.To(int64(100)), Target: ptr.To(fmt.Sprintf(azureDNSFormat, wm.BuildServiceDNSLabelName(memberClusters[0]), clusterLocation)), From: &fleetnetv1alpha1.FromCluster{ - ClusterStatus: fleetnetv1alpha1.ClusterStatus{ - Cluster: memberClusterNames[0], - }, + ClusterStatus: fleetnetv1alpha1.ClusterStatus{Cluster: memberClusters[1].Name()}, }, }, } @@ -163,18 +161,14 @@ var _ = Describe("Test exporting service via Azure traffic manager", func() { Weight: ptr.To(int64(50)), Target: ptr.To(fmt.Sprintf(azureDNSFormat, wm.BuildServiceDNSLabelName(memberClusters[0]), clusterLocation)), From: &fleetnetv1alpha1.FromCluster{ - ClusterStatus: fleetnetv1alpha1.ClusterStatus{ - Cluster: memberClusterNames[0], - }, + ClusterStatus: fleetnetv1alpha1.ClusterStatus{Cluster: memberClusters[1].Name()}, }, }, { Weight: ptr.To(int64(50)), Target: ptr.To(fmt.Sprintf(azureDNSFormat, wm.BuildServiceDNSLabelName(memberClusters[1]), clusterLocation)), From: &fleetnetv1alpha1.FromCluster{ - ClusterStatus: fleetnetv1alpha1.ClusterStatus{ - Cluster: memberClusterNames[0], - }, + ClusterStatus: fleetnetv1alpha1.ClusterStatus{Cluster: memberClusters[1].Name()}, }, }, }