You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by nf...@apache.org on 2021/04/29 13:12:43 UTC

[camel-k] 29/30: feat(e2e): error handler integration test

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

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

commit 855f4a74faca1b241a63cf4a5835e42d08efa453
Author: Pasquale Congiusti <pa...@gmail.com>
AuthorDate: Wed Apr 28 14:39:06 2021 +0200

    feat(e2e): error handler integration test
---
 e2e/common/traits/error_handler_test.go   | 57 +++++++++++++++++++++++++++++++
 e2e/common/traits/files/ErroredRoute.java | 29 ++++++++++++++++
 pkg/trait/error_handler.go                |  8 +++--
 3 files changed, 91 insertions(+), 3 deletions(-)

diff --git a/e2e/common/traits/error_handler_test.go b/e2e/common/traits/error_handler_test.go
new file mode 100644
index 0000000..506eba4
--- /dev/null
+++ b/e2e/common/traits/error_handler_test.go
@@ -0,0 +1,57 @@
+// +build integration
+
+// To enable compilation of this file in Goland, go to "Settings -> Go -> Vendoring & Build Tags -> Custom Tags" and add "integration"
+
+/*
+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.
+*/
+
+package traits
+
+import (
+	"testing"
+
+	. "github.com/onsi/gomega"
+
+	v1 "k8s.io/api/core/v1"
+
+	. "github.com/apache/camel-k/e2e/support"
+	camelv1 "github.com/apache/camel-k/pkg/apis/camel/v1"
+)
+
+func TestErrorHandlerTrait(t *testing.T) {
+	WithNewTestNamespace(t, func(ns string) {
+		Expect(Kamel("install", "-n", ns).Execute()).To(Succeed())
+
+		t.Run("Run errored integration with error handler", func(t *testing.T) {
+			name := "error-handler"
+			Expect(Kamel("run", "-n", ns, "files/ErroredRoute.java",
+				"--name", name,
+				"-t", "error-handler.enabled=true",
+				"-t", "error-handler.ref=defaultErrorHandler",
+				"-p", "camel.beans.defaultErrorHandler=#class:org.apache.camel.builder.DeadLetterChannelBuilder",
+				"-p", "camel.beans.defaultErrorHandler.deadLetterUri=log:my-special-error-handler-in-place?level=ERROR&showCaughtException=false&showBody=false&showBodyType=false&showExchangePattern=false",
+			).Execute()).To(Succeed())
+			Eventually(IntegrationPodPhase(ns, name), TestTimeoutMedium).Should(Equal(v1.PodRunning))
+			Eventually(IntegrationCondition(ns, name, camelv1.IntegrationConditionReady), TestTimeoutShort).Should(Equal(v1.ConditionTrue))
+			Eventually(IntegrationLogs(ns, name), TestTimeoutShort).ShouldNot(ContainSubstring("InvalidPayloadException"))
+			Eventually(IntegrationLogs(ns, name), TestTimeoutShort).Should(ContainSubstring("my-special-error-handler-in-place"))
+		})
+
+		// Clean up
+		Expect(Kamel("delete", "--all", "-n", ns).Execute()).To(Succeed())
+	})
+}
diff --git a/e2e/common/traits/files/ErroredRoute.java b/e2e/common/traits/files/ErroredRoute.java
new file mode 100644
index 0000000..702e163
--- /dev/null
+++ b/e2e/common/traits/files/ErroredRoute.java
@@ -0,0 +1,29 @@
+/*
+ * 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.
+ */
+
+import org.apache.camel.builder.RouteBuilder;
+
+public class ErroredRoute extends RouteBuilder {
+  @Override
+  public void configure() throws Exception {
+	  from("timer:tick")
+    .setBody().simple("Hello")
+    // We want to force a failure
+	  .setBody().simple("${mandatoryBodyAs(Boolean)}")
+    .to("log:info");
+  }
+}
diff --git a/pkg/trait/error_handler.go b/pkg/trait/error_handler.go
index a72a94a..aa59b4e 100644
--- a/pkg/trait/error_handler.go
+++ b/pkg/trait/error_handler.go
@@ -28,8 +28,8 @@ import (
 // +camel-k:trait=error-handler
 type errorHandlerTrait struct {
 	BaseTrait `property:",squash"`
-	// The error handler ref name found in application properties
-	ErrorHandlerRef string `property:"error-handler-ref" json:"error-handler-ref,omitempty"`
+	// The error handler ref name provided or found in application properties
+	ErrorHandlerRef string `property:"ref" json:"ref,omitempty"`
 }
 
 func newErrorHandlerTrait() Trait {
@@ -52,7 +52,9 @@ func (t *errorHandlerTrait) Configure(e *Environment) (bool, error) {
 		return false, nil
 	}
 
-	t.ErrorHandlerRef = e.Integration.Spec.GetConfigurationProperty(v1alpha1.ErrorHandlerRefName)
+	if t.ErrorHandlerRef == "" {
+		t.ErrorHandlerRef = e.Integration.Spec.GetConfigurationProperty(v1alpha1.ErrorHandlerRefName)
+	}
 
 	return t.ErrorHandlerRef != "", nil
 }