From 1ae633225cc8752d67e88f476e021f7fdf576c6b Mon Sep 17 00:00:00 2001 From: Andrey Lebedev Date: Wed, 14 May 2025 15:42:57 +0200 Subject: [PATCH 1/2] Add test helpers to check if cluster capabilities are enabled and skip accordingly --- test/extended/util/framework.go | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/test/extended/util/framework.go b/test/extended/util/framework.go index cf6bbf4af1e6..fab0d1002d8e 100644 --- a/test/extended/util/framework.go +++ b/test/extended/util/framework.go @@ -2404,6 +2404,27 @@ func IsCapabilityEnabled(oc *CLI, cap configv1.ClusterVersionCapability) (bool, return false, nil } +// AllCapabilitiesEnabled returns true if all of the given capabilities are enabled on the cluster. +func AllCapabilitiesEnabled(oc *CLI, caps ...configv1.ClusterVersionCapability) (bool, error) { + cv, err := oc.AdminConfigClient().ConfigV1().ClusterVersions().Get(context.Background(), "version", metav1.GetOptions{}) + if err != nil { + return false, err + } + + enabledCaps := make(map[configv1.ClusterVersionCapability]struct{}, len(cv.Status.Capabilities.EnabledCapabilities)) + for _, c := range cv.Status.Capabilities.EnabledCapabilities { + enabledCaps[c] = struct{}{} + } + + for _, c := range caps { + if _, found := enabledCaps[c]; !found { + return false, nil + } + } + + return true, nil +} + // SkipIfNotPlatform skip the test if supported platforms are not matched func SkipIfNotPlatform(oc *CLI, platforms ...configv1.PlatformType) { var match bool @@ -2420,6 +2441,15 @@ func SkipIfNotPlatform(oc *CLI, platforms ...configv1.PlatformType) { } } +// SkipIfMissingCapabilities skips the test if any of the given cluster capabilities is not enabled. +func SkipIfMissingCapabilities(oc *CLI, caps ...configv1.ClusterVersionCapability) { + enabled, err := AllCapabilitiesEnabled(oc, caps...) + o.Expect(err).NotTo(o.HaveOccurred()) + if !enabled { + g.Skip(fmt.Sprintf("Skip this test scenario because not all of the following capabilities are enabled: %v", caps)) + } +} + // GetClusterRegion get the cluster's region func GetClusterRegion(oc *CLI) string { region, err := oc.AsAdmin().WithoutNamespace().Run("get").Args("node", `-ojsonpath={.items[].metadata.labels.topology\.kubernetes\.io/region}`).Output() From a1366281549ce1fa2e15c90b419a089d0e2de53f Mon Sep 17 00:00:00 2001 From: Andrey Lebedev Date: Mon, 12 May 2025 18:15:50 +0200 Subject: [PATCH 2/2] OCPBUGS-55317: Skip GatewayAPIController tests on clusters without OLM capabilities This ensures GatewayAPIController tests are only run on clusters where OLM and related capabilities are enabled. --- test/extended/router/gatewayapicontroller.go | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/test/extended/router/gatewayapicontroller.go b/test/extended/router/gatewayapicontroller.go index 9b9328f4fcbf..89e3d39dffc9 100644 --- a/test/extended/router/gatewayapicontroller.go +++ b/test/extended/router/gatewayapicontroller.go @@ -25,6 +25,13 @@ import ( gatewayapiv1 "sigs.k8s.io/gateway-api/apis/v1" ) +var ( + requiredCapabilities = []configv1.ClusterVersionCapability{ + configv1.ClusterVersionCapabilityMarketplace, + configv1.ClusterVersionCapabilityOperatorLifecycleManager, + } +) + var _ = g.Describe("[sig-network-edge][OCPFeatureGate:GatewayAPIController][Feature:Router][apigroup:gateway.networking.k8s.io]", g.Ordered, g.Serial, func() { defer g.GinkgoRecover() var ( @@ -59,6 +66,11 @@ var _ = g.Describe("[sig-network-edge][OCPFeatureGate:GatewayAPIController][Feat // skip non clould platforms since gateway needs LB service skipGatewayIfNonCloudPlatform(oc) + // GatewayAPIController relies on OSSM OLM operator. + // Skipping on clusters which don't have capabilities required + // to install an OLM operator. + exutil.SkipIfMissingCapabilities(oc, requiredCapabilities...) + // create the default gatewayClass gatewayClass := buildGatewayClass(gatewayClassName, gatewayClassControllerName) _, err = oc.AdminGatewayApiClient().GatewayV1().GatewayClasses().Create(context.TODO(), gatewayClass, metav1.CreateOptions{})