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 <[email protected]> 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 }
