This is an automated email from the ASF dual-hosted git repository.

pcongiusti pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel-k.git


The following commit(s) were added to refs/heads/main by this push:
     new c3b9c9be3 Handle OCP3 in e2e kustomize install tests
c3b9c9be3 is described below

commit c3b9c9be36e219b593bb395795be817171a0b431
Author: phantomjinx <p.g.richard...@phantomjinx.co.uk>
AuthorDate: Mon Jul 4 10:47:59 2022 +0100

    Handle OCP3 in e2e kustomize install tests
    
    * OCP3 has obsolete CRD API, which is handled in the golang binary but
      not in the kustomize install
    
    * Adds plumbing to the kustomize install to error out gracefully if the
      CRD API is the obsolete version
    
    * Adds env var to e2e tests to skip tests if cluster target is OCP3
    
    * Modifies openshift github workflow to move the test-quarkus-native
      to executing as cluster-admin
---
 .../actions/kamel-config-cluster-ocp3/action.yml   |  2 +-
 .github/workflows/openshift.yml                    | 21 +++++++-
 e2e/namespace/install/kustomize/common.go          | 24 ++++++++-
 e2e/namespace/install/kustomize/operator_test.go   | 22 ++++++++
 e2e/namespace/install/kustomize/setup_test.go      |  8 +++
 install/Makefile                                   | 14 ++++-
 install/script/check_crd_api_support.sh            |  1 +
 script/check_crd_api_support.sh                    | 62 ++++++++++++++++++++++
 8 files changed, 148 insertions(+), 6 deletions(-)

diff --git a/.github/actions/kamel-config-cluster-ocp3/action.yml 
b/.github/actions/kamel-config-cluster-ocp3/action.yml
index 613d22bf2..6f26853d6 100644
--- a/.github/actions/kamel-config-cluster-ocp3/action.yml
+++ b/.github/actions/kamel-config-cluster-ocp3/action.yml
@@ -199,7 +199,7 @@ runs:
       if: ${{ env.CLUSTER_OCP3_CONFIGURED != 'true' }}
       run: |
         echo "::set-output name=cluster-image-registry-pull-host::"
-        echo "::set-output name=cluster-image-registry-pull-host::"
+        echo "::set-output name=cluster-image-registry-push-host::"
         echo "::set-output name=cluster-image-registry-insecure::$(echo true)"
         echo "::set-output name=cluster-has-olm::$(echo false)"
         echo "::set-output name=cluster-image-namespace::$(echo apache)"
diff --git a/.github/workflows/openshift.yml b/.github/workflows/openshift.yml
index a9d2eee10..4f2e4f4e7 100644
--- a/.github/workflows/openshift.yml
+++ b/.github/workflows/openshift.yml
@@ -44,6 +44,21 @@ on:
       - 'NOTICE'
   workflow_dispatch:
     inputs:
+      pre-built-kamel-image:
+        description: 'Kamel image url for skipping building of kamel stages. 
Used for debugging'
+        required: false
+      skip-problematic:
+        description: 'Whether tests marked as problematic should be skipped - 
false by default (sets CAMEL_K_TEST_SKIP_PROBLEMATIC)'
+        required: false
+        default: false
+      test-filters:
+        description: |
+          List of comma-separated key/value pairs to filter the tests in this 
test suite:
+            TEST_INTEGRATION_COMMON_RUN,        
TEST_INTEGRATION_COMMON_BUILD_RUN, TEST_INTEGRATION_COMMON_CONFIG_RUN,
+            TEST_INTEGRATION_COMMON_LANG_RUN,   
TEST_INTEGRATION_COMMON_TRAITS_RUN
+            TEST_SERVICE_RUN,                   TEST_REGISTRY_MAVEN_WAGON_RUN
+          eg. TEST_INTEGRATION_COMMON_RUN=TestBasic will only run tests 
prefixed with 'TestBasic'
+        required: false
 
 concurrency:
   group: ${{ github.workflow }}-${{ github.event.pull_request.number || 
github.sha }}
@@ -92,9 +107,10 @@ jobs:
     - name: Run IT 1
       run: |
         # Then run integration tests
+        export CAMEL_K_CLUSTER_OCP3=true
+
         make test-integration
         make test-builder
-        make test-quarkus-native
 
     - id: change-context
       name: Change the Kamel Cluster Context to Admin
@@ -105,4 +121,7 @@ jobs:
     - name: Run IT 2
       run: |
         # Then run integration tests
+        export CAMEL_K_CLUSTER_OCP3=true
+
+        make test-quarkus-native
         make test-install
diff --git a/e2e/namespace/install/kustomize/common.go 
b/e2e/namespace/install/kustomize/common.go
index 11c2ee24e..15c12b655 100644
--- a/e2e/namespace/install/kustomize/common.go
+++ b/e2e/namespace/install/kustomize/common.go
@@ -73,8 +73,28 @@ func ExecMake(t *testing.T, command *exec.Cmd) {
        session.Wait()
        Eventually(session).Should(gexec.Exit(0))
        assert.Nil(t, err)
-       assert.NotContains(t, cmdErr.String(), "Error")
-       assert.NotContains(t, cmdErr.String(), "ERROR")
+       assert.NotContains(t, strings.ToUpper(cmdErr.String()), "ERROR")
+}
+
+//
+// Expect a make error with an exit code of 1
+//
+func ExecMakeError(t *testing.T, command *exec.Cmd) {
+       var cmdOut strings.Builder
+       var cmdErr strings.Builder
+
+       defer func() {
+               if t.Failed() {
+                       t.Logf("Output from make command:\n%s\n", 
cmdOut.String())
+                       t.Logf("Error from make command:\n%s\n", 
cmdErr.String())
+               }
+       }()
+
+       session, err := gexec.Start(command, &cmdOut, &cmdErr)
+       session.Wait()
+       Eventually(session).ShouldNot(gexec.Exit(0))
+       assert.Nil(t, err)
+       assert.Contains(t, strings.ToUpper(cmdErr.String()), "ERROR")
 }
 
 // Clean up the cluster ready for the next set of tests
diff --git a/e2e/namespace/install/kustomize/operator_test.go 
b/e2e/namespace/install/kustomize/operator_test.go
index a6a9f8738..d9cf17c2b 100644
--- a/e2e/namespace/install/kustomize/operator_test.go
+++ b/e2e/namespace/install/kustomize/operator_test.go
@@ -31,7 +31,21 @@ import (
        . "github.com/onsi/gomega"
 )
 
+func TestOcp3CrdError(t *testing.T) {
+       if os.Getenv("CAMEL_K_CLUSTER_OCP3") != "true" {
+               t.Skip("INFO: Skipping test as only applicable to OCP3")
+       }
+
+       WithNewTestNamespace(t, func(ns string) {
+               ExecMakeError(t, Make("setup-cluster", 
fmt.Sprintf("NAMESPACE=%s", ns)))
+       })
+}
+
 func TestBasicOperator(t *testing.T) {
+       if os.Getenv("CAMEL_K_CLUSTER_OCP3") == "true" {
+               t.Skip("INFO: Skipping test as not supported on OCP3")
+       }
+
        os.Setenv("MAKE_DIR", "../../../../install")
 
        // Ensure no CRDs are already installed
@@ -50,6 +64,10 @@ func TestBasicOperator(t *testing.T) {
 }
 
 func TestAlternativeImageOperator(t *testing.T) {
+       if os.Getenv("CAMEL_K_CLUSTER_OCP3") == "true" {
+               t.Skip("INFO: Skipping test as not supported on OCP3")
+       }
+
        os.Setenv("MAKE_DIR", "../../../../install")
 
        // Ensure no CRDs are already installed
@@ -72,6 +90,10 @@ func TestAlternativeImageOperator(t *testing.T) {
 }
 
 func TestGlobalOperator(t *testing.T) {
+       if os.Getenv("CAMEL_K_CLUSTER_OCP3") == "true" {
+               t.Skip("INFO: Skipping test as not supported on OCP3")
+       }
+
        os.Setenv("MAKE_DIR", "../../../../install")
 
        // Ensure no CRDs are already installed
diff --git a/e2e/namespace/install/kustomize/setup_test.go 
b/e2e/namespace/install/kustomize/setup_test.go
index 2ace67ab3..93923fcfb 100644
--- a/e2e/namespace/install/kustomize/setup_test.go
+++ b/e2e/namespace/install/kustomize/setup_test.go
@@ -32,6 +32,10 @@ import (
 )
 
 func TestBasicSetup(t *testing.T) {
+       if os.Getenv("CAMEL_K_CLUSTER_OCP3") == "true" {
+               t.Skip("INFO: Skipping test as not supported on OCP3")
+       }
+
        os.Setenv("MAKE_DIR", "../../../../install")
 
        // Ensure no CRDs are already installed
@@ -61,6 +65,10 @@ func TestBasicSetup(t *testing.T) {
 }
 
 func TestGlobalSetup(t *testing.T) {
+       if os.Getenv("CAMEL_K_CLUSTER_OCP3") == "true" {
+               t.Skip("INFO: Skipping test as not supported on OCP3")
+       }
+
        os.Setenv("MAKE_DIR", "../../../../install")
 
        // Ensure no CRDs are already installed
diff --git a/install/Makefile b/install/Makefile
index f9aa2708f..d5e4ed862 100644
--- a/install/Makefile
+++ b/install/Makefile
@@ -155,6 +155,16 @@ endif
 check-admin: kubectl
        @output=$$(kubectl get crd 2>&1) || (echo "****" && echo "**** ERROR: 
Cannot continue as user is not a Cluster-Admin ****" && echo "****"; exit 1)
 
+crd-api-support: kubectl
+ifndef CRD_SUPPORT
+CRD_SUPPORT=$(shell script/check_crd_api_support.sh)
+endif
+
+check-crd-api-support: crd-api-support
+ifneq ($(CRD_SUPPORT),OK)
+       $(error *** CRD API FAILURE: $(CRD_SUPPORT) ****)
+endif
+
 #
 # Setup the cluster installation by installing crds and cluster roles.
 #
@@ -168,7 +178,7 @@ check-admin: kubectl
 #   PLATFORM:  Override the discovered platform, if required
 #   DRY_RUN:     true - Prints the resources to be applied instead of applying 
them
 #
-setup-cluster: check-admin have-platform kustomize kubectl
+setup-cluster: check-admin check-crd-api-support have-platform kustomize 
kubectl
 # Set the namespace in the setup-cluster kustomization yaml
        @$(call set-kustomize-namespace,$@)
 ifeq ($(PLATFORM), openshift)
@@ -270,7 +280,7 @@ endif
 #   LOGGING_LEVEL:      Set the level of logging [info|debug]
 #   DRY_RUN:            Prints the resources to be applied instead of applying 
them
 #
-operator: check-admin have-platform kustomize kubectl .operator-port-patch 
.operator-log-level-patch
+operator: check-admin have-platform check-crd-api-support kustomize kubectl 
.operator-port-patch .operator-log-level-patch
 ifeq ($(MONITORING), true)
        @$(MAKE) -s .operator-can-monitor
        @$(call add-remove-operator-monitoring,$@,add)
diff --git a/install/script/check_crd_api_support.sh 
b/install/script/check_crd_api_support.sh
new file mode 120000
index 000000000..3d144aabd
--- /dev/null
+++ b/install/script/check_crd_api_support.sh
@@ -0,0 +1 @@
+../../script/check_crd_api_support.sh
\ No newline at end of file
diff --git a/script/check_crd_api_support.sh b/script/check_crd_api_support.sh
new file mode 100755
index 000000000..b45ad83fa
--- /dev/null
+++ b/script/check_crd_api_support.sh
@@ -0,0 +1,62 @@
+#!/bin/bash
+
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+is_binary_available() {
+
+  client="${1}"
+
+  # Check path first if it already exists
+  set +e
+  which "${client}" &>/dev/null
+  if [ $? -eq 0 ]; then
+    set -e
+    echo "OK"
+    return
+  fi
+
+  set -e
+
+  # Error, no oc found
+  echo "ERROR: No '${client}' binary found in path."
+}
+
+location=$(dirname $0)
+rootdir=$location/../
+
+cd $rootdir
+
+client="oc"
+hasclient=$(is_binary_available "${client}")
+if [ "${hasclient}" != "OK" ]; then
+  client="kubectl"
+       hasclient=$(is_binary_available "${client}")
+       if [ "${hasclient}" != "OK" ]; then
+         echo "ERROR: No kube client installed."
+         exit 1
+       fi
+fi
+
+crd_version=$("${client}" explain customresourcedefinitions | grep VERSION | 
awk '{print $2}')
+api="apiextensions.k8s.io"
+
+if [ "${crd_version}" == "${api}/v1beta1" ]; then
+       echo "ERROR: CRD API version is too old to install camel-k in this way. 
Try using the client CLI app, which is able to convert the APIs."
+elif [ "${crd_version}" != "${api}/v1" ]; then
+       echo "ERROR: CRD API version '${crd_version}' is not supported."
+else
+       echo "OK"
+fi

Reply via email to