This is an automated email from the ASF dual-hosted git repository. orpiske pushed a commit to branch camel-3.21.x in repository https://gitbox.apache.org/repos/asf/camel.git
commit d5c48c34af2ecfe957e3b4a23d1aafd28219c4d6 Author: rvanderhallen <54310062+rvanderhal...@users.noreply.github.com> AuthorDate: Mon Jul 31 10:34:48 2023 +0200 CAMEL-19675: added test case for aggregation strategy with attachment (#10895) This reworks the patch contributed on 4703fe669da87748b9cd6fe2e948fc6a4cba9844 to adjust it to Camel 3 Co-authored-by: Robin Vanderhallen <robin.vanderhal...@aviobook.aero> --- .../MulticastAggregationStrategyTest.java | 83 ++++++++++++++++++++++ 1 file changed, 83 insertions(+) diff --git a/components/camel-attachments/src/test/java/org/apache/camel/attachment/MulticastAggregationStrategyTest.java b/components/camel-attachments/src/test/java/org/apache/camel/attachment/MulticastAggregationStrategyTest.java new file mode 100644 index 00000000000..4127d6b464d --- /dev/null +++ b/components/camel-attachments/src/test/java/org/apache/camel/attachment/MulticastAggregationStrategyTest.java @@ -0,0 +1,83 @@ +/* + * 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 org.apache.camel.attachment; + +import javax.activation.DataHandler; + +import org.apache.camel.AggregationStrategy; +import org.apache.camel.Exchange; +import org.apache.camel.builder.Builder; +import org.apache.camel.builder.ExchangeBuilder; +import org.apache.camel.builder.RouteBuilder; +import org.apache.camel.impl.DefaultCamelContext; +import org.apache.camel.test.junit5.CamelTestSupport; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertTrue; + +class MulticastAggregationStrategyTest extends CamelTestSupport { + + @Test + void testAggregationStrategyWithAttachment() { + Exchange exchange = ExchangeBuilder.anExchange(new DefaultCamelContext()).build(); + + template.send("direct:start", exchange); + + AttachmentMessage msg = exchange.getMessage(AttachmentMessage.class); + + assertTrue(msg.hasAttachments()); + } + + @Override + protected RouteBuilder createRouteBuilder() { + return new RouteBuilder() { + @Override + public void configure() { + from("direct:start") + .multicast(new AttachmentMessageAggregationStrategy()).stopOnException() + .to("direct:setBody", "direct:setAttachment") + .end(); + + from("direct:setBody") + .setBody(Builder.constant("body")); + + from("direct:setAttachment") + .setBody(Builder.constant("attachment".getBytes())); + } + }; + } + + private static class AttachmentMessageAggregationStrategy implements AggregationStrategy { + + @Override + public Exchange aggregate(Exchange oldExchange, Exchange newExchange) { + if (oldExchange == null) { + return newExchange; + } + + if (newExchange.getIn().getBody() instanceof String) { + oldExchange.getMessage().setBody(newExchange.getIn().getBody()); + } else { + byte[] data = newExchange.getIn().getBody(byte[].class); + oldExchange.getMessage(AttachmentMessage.class).addAttachment("attachment", + new DataHandler(data, "text/plain")); + } + + return oldExchange; + } + } +}