From e18b0fa65fbac737ec078ec5479d309278b1511f Mon Sep 17 00:00:00 2001 From: Hongan Li Date: Mon, 14 Jul 2025 18:08:42 +0800 Subject: [PATCH] OCPBUGS-59176: skip specific tests if DNSManaged is false --- test/extended/router/gatewayapicontroller.go | 27 ++++++++++ test/extended/router/grpc-interop.go | 14 +++-- test/extended/router/h2spec.go | 8 +-- test/extended/router/http2.go | 54 ++++++++++++++++++-- 4 files changed, 93 insertions(+), 10 deletions(-) diff --git a/test/extended/router/gatewayapicontroller.go b/test/extended/router/gatewayapicontroller.go index 449dec9d837d..79225985cb6c 100644 --- a/test/extended/router/gatewayapicontroller.go +++ b/test/extended/router/gatewayapicontroller.go @@ -6,6 +6,7 @@ import ( "fmt" "net" "net/http" + "reflect" "strings" "time" @@ -218,6 +219,14 @@ var _ = g.Describe("[sig-network-edge][OCPFeatureGate:GatewayAPIController][Feat }) g.It("Ensure HTTPRoute object is created", func() { + isDNSManaged, err := isDNSManaged(oc, time.Minute) + if err != nil { + e2e.Failf("Failed to get default ingresscontroller DNSManaged status: %v", err) + } + if !isDNSManaged { + g.Skip("Skipping on this cluster since DNSManaged is false") + } + g.By("Ensure default GatewayClass is accepted") errCheck := checkGatewayClass(oc, gatewayClassName) o.Expect(errCheck).NotTo(o.HaveOccurred(), "GatewayClass %q was not installed and accepted", gatewayClassName) @@ -425,14 +434,32 @@ func assertDNSRecordStatus(oc *exutil.CLI, gatewayName string) { for _, record := range gatewayDNSRecords.Items { if record.Labels["gateway.networking.k8s.io/gateway-name"] == gatewayName { gatewayDNSRecord = &record + e2e.Logf("Found the desired dnsrecord and spec is: %v", gatewayDNSRecord.Spec) break } } + // skip status check if privateZone/publicZone in dns.config is nil or empty + emptyDNSZone := &configv1.DNSZone{} + dns, err := oc.AdminConfigClient().ConfigV1().DNSes().Get(context, "cluster", metav1.GetOptions{}) + if err != nil { + e2e.Logf("Get dnses.config/cluster failed: %v, retrying...", err) + return false, nil + } + if dns.Spec.PublicZone == nil && dns.Spec.PrivateZone == nil { + e2e.Logf("All zones in dns.config are nil, needn't to check status") + return true, nil + } + if reflect.DeepEqual(dns.Spec.PublicZone, emptyDNSZone) || reflect.DeepEqual(dns.Spec.PrivateZone, emptyDNSZone) { + e2e.Logf("Zone in dns.config is empty, needn't to check status") + return true, nil + } + // checking the gateway DNS record status for _, zone := range gatewayDNSRecord.Status.Zones { for _, condition := range zone.Conditions { if condition.Type == "Published" && condition.Status == "True" { + e2e.Logf("The published status is true for zone %v", zone.DNSZone) return true, nil } } diff --git a/test/extended/router/grpc-interop.go b/test/extended/router/grpc-interop.go index b6e96b86e0b5..b359d0648b82 100644 --- a/test/extended/router/grpc-interop.go +++ b/test/extended/router/grpc-interop.go @@ -53,8 +53,16 @@ var _ = g.Describe("[sig-network-edge][Conformance][Area:Networking][Feature:Rou g.Skip("Skip on platforms where the default router is not exposed by a load balancer service.") } - defaultDomain, err := getDefaultIngressClusterDomainName(oc, time.Minute) - o.Expect(err).NotTo(o.HaveOccurred(), "failed to find default domain name") + isDNSManaged, err := isDNSManaged(oc, time.Minute) + if err != nil { + e2e.Failf("Failed to get default ingresscontroller DNSManaged status: %v", err) + } + if !isDNSManaged { + g.Skip("Skipping on this cluster since DNSManaged is false") + } + + baseDomain, err := getClusterBaseDomainName(oc, time.Minute) + o.Expect(err).NotTo(o.HaveOccurred(), "failed to find base domain name") g.By("Locating the canary image reference") image, err := getCanaryImage(oc) @@ -196,7 +204,7 @@ var _ = g.Describe("[sig-network-edge][Conformance][Area:Networking][Feature:Rou pemCrt2, err := certgen.MarshalCertToPEMString(tlsCrt2Data) o.Expect(err).NotTo(o.HaveOccurred()) - shardFQDN := oc.Namespace() + "." + defaultDomain + shardFQDN := oc.Namespace() + "." + baseDomain g.By("Creating routes to test for gRPC interoperability") routeType := oc.Namespace() diff --git a/test/extended/router/h2spec.go b/test/extended/router/h2spec.go index c471ccb97a11..b57190cd984c 100644 --- a/test/extended/router/h2spec.go +++ b/test/extended/router/h2spec.go @@ -71,9 +71,9 @@ var _ = g.Describe("[sig-network-edge][Conformance][Area:Networking][Feature:Rou g.Skip("Skip on platforms where the default router is not exposed by a load balancer service.") } - g.By("Getting the default domain") - defaultDomain, err := getDefaultIngressClusterDomainName(oc, time.Minute) - o.Expect(err).NotTo(o.HaveOccurred(), "failed to find default domain name") + g.By("Getting the base domain") + baseDomain, err := getClusterBaseDomainName(oc, time.Minute) + o.Expect(err).NotTo(o.HaveOccurred(), "failed to find base domain name") g.By("Locating the router image reference") routerImage, err := exutil.FindRouterImage(oc) @@ -393,7 +393,7 @@ BFNBRELPe53ZdLKWpf2Sr96vRPRNw e2e.ExpectNoError(e2epod.WaitForPodNameRunningInNamespace(context.TODO(), oc.KubeClient(), "h2spec-haproxy", oc.KubeFramework().Namespace.Name)) e2e.ExpectNoError(e2epod.WaitForPodNameRunningInNamespace(context.TODO(), oc.KubeClient(), "h2spec", oc.KubeFramework().Namespace.Name)) - shardFQDN := oc.Namespace() + "." + defaultDomain + shardFQDN := oc.Namespace() + "." + baseDomain // The new router shard is using a namespace // selector so label this test namespace to diff --git a/test/extended/router/http2.go b/test/extended/router/http2.go index d9bfed9f40e0..27629399155f 100644 --- a/test/extended/router/http2.go +++ b/test/extended/router/http2.go @@ -24,6 +24,7 @@ import ( utilpointer "k8s.io/utils/pointer" configv1 "github.com/openshift/api/config/v1" + operatorv1 "github.com/openshift/api/operator/v1" routev1 "github.com/openshift/api/route/v1" routeclientset "github.com/openshift/client-go/route/clientset/versioned" @@ -109,8 +110,16 @@ var _ = g.Describe("[sig-network-edge][Conformance][Area:Networking][Feature:Rou g.Skip("Skip on platforms where the default router is not exposed by a load balancer service.") } - defaultDomain, err := getDefaultIngressClusterDomainName(oc, time.Minute) - o.Expect(err).NotTo(o.HaveOccurred(), "failed to find default domain name") + isDNSManaged, err := isDNSManaged(oc, time.Minute) + if err != nil { + e2e.Failf("Failed to get default ingresscontroller DNSManaged status: %v", err) + } + if !isDNSManaged { + g.Skip("Skipping on this cluster since DNSManaged is false") + } + + baseDomain, err := getClusterBaseDomainName(oc, time.Minute) + o.Expect(err).NotTo(o.HaveOccurred(), "failed to find base domain name") g.By("Locating the canary image reference") image, err := getCanaryImage(oc) @@ -254,7 +263,7 @@ var _ = g.Describe("[sig-network-edge][Conformance][Area:Networking][Feature:Rou pemCrt2, err := certgen.MarshalCertToPEMString(tlsCrt2Data) o.Expect(err).NotTo(o.HaveOccurred()) - shardFQDN := oc.Namespace() + "." + defaultDomain + shardFQDN := oc.Namespace() + "." + baseDomain // The new router shard is using a namespace // selector so label this test namespace to @@ -520,6 +529,23 @@ var _ = g.Describe("[sig-network-edge][Conformance][Area:Networking][Feature:Rou }) }) +func getClusterBaseDomainName(oc *exutil.CLI, timeout time.Duration) (string, error) { + var domain string + + if err := wait.PollImmediate(time.Second, timeout, func() (bool, error) { + dns, err := oc.AdminConfigClient().ConfigV1().DNSes().Get(context.TODO(), "cluster", metav1.GetOptions{}) + if err != nil { + e2e.Logf("Get dnses.config/cluster failed: %v, retrying...", err) + return false, nil + } + domain = dns.Spec.BaseDomain + return true, nil + }); err != nil { + return "", err + } + return domain, nil +} + func getDefaultIngressClusterDomainName(oc *exutil.CLI, timeout time.Duration) (string, error) { var domain string @@ -598,3 +624,25 @@ func platformHasHTTP2LoadBalancerService(platformType configv1.PlatformType) boo return false } } + +func isDNSManaged(oc *exutil.CLI, timeout time.Duration) (bool, error) { + var status operatorv1.ConditionStatus + + if err := wait.PollImmediate(time.Second, timeout, func() (bool, error) { + ic, err := oc.AdminOperatorClient().OperatorV1().IngressControllers("openshift-ingress-operator").Get(context.Background(), "default", metav1.GetOptions{}) + if err != nil { + e2e.Logf("Failed to get default ingresscontroller: %v, retrying...", err) + return false, nil + } + for _, condition := range ic.Status.Conditions { + if condition.Type == string(operatorv1.DNSManagedIngressConditionType) { + status = condition.Status + return true, nil + } + } + return false, nil + }); err != nil { + return false, err + } + return status != operatorv1.ConditionFalse, nil +}