This is an automated email from the ASF dual-hosted git repository. acosentino pushed a commit to branch sandbox/camel-3.x in repository https://gitbox.apache.org/repos/asf/camel.git
commit 96d1012f94e5139c5ad9e85bd8cffe5042e8f514 Author: aldettinger <aldettin...@gmail.com> AuthorDate: Thu Nov 15 18:57:10 2018 +0100 CAMEL-12940: Fixed an issue where dynamic doneFileName does not manage filename with 2 dots --- .../camel/component/file/GenericFileEndpoint.java | 4 +- ...eConsumeDynamicDoneFileNameWithTwoDotsTest.java | 68 ++++++++++++++++++++++ ...meSimpleDynamicDoneFileNameWithTwoDotsTest.java | 68 ++++++++++++++++++++++ 3 files changed, 138 insertions(+), 2 deletions(-) diff --git a/camel-core/src/main/java/org/apache/camel/component/file/GenericFileEndpoint.java b/camel-core/src/main/java/org/apache/camel/component/file/GenericFileEndpoint.java index d860fef..1956c8c 100644 --- a/camel-core/src/main/java/org/apache/camel/component/file/GenericFileEndpoint.java +++ b/camel-core/src/main/java/org/apache/camel/component/file/GenericFileEndpoint.java @@ -1421,8 +1421,8 @@ public abstract class GenericFileEndpoint<T> extends ScheduledPollEndpoint imple pattern = pattern.replaceFirst("\\$\\{file:name\\}", onlyName); pattern = pattern.replaceFirst("\\$simple\\{file:name\\}", onlyName); - pattern = pattern.replaceFirst("\\$\\{file:name.noext\\}", FileUtil.stripExt(onlyName)); - pattern = pattern.replaceFirst("\\$simple\\{file:name.noext\\}", FileUtil.stripExt(onlyName)); + pattern = pattern.replaceFirst("\\$\\{file:name.noext\\}", FileUtil.stripExt(onlyName, true)); + pattern = pattern.replaceFirst("\\$simple\\{file:name.noext\\}", FileUtil.stripExt(onlyName, true)); // must be able to resolve all placeholders supported if (StringHelper.hasStartToken(pattern, "simple")) { diff --git a/camel-core/src/test/java/org/apache/camel/component/file/FileConsumeDynamicDoneFileNameWithTwoDotsTest.java b/camel-core/src/test/java/org/apache/camel/component/file/FileConsumeDynamicDoneFileNameWithTwoDotsTest.java new file mode 100644 index 0000000..a45905a --- /dev/null +++ b/camel-core/src/test/java/org/apache/camel/component/file/FileConsumeDynamicDoneFileNameWithTwoDotsTest.java @@ -0,0 +1,68 @@ +/** + * 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.component.file; + +import java.io.File; +import java.lang.invoke.MethodHandles; + +import org.apache.camel.ContextTestSupport; +import org.apache.camel.Exchange; +import org.apache.camel.builder.NotifyBuilder; +import org.apache.camel.builder.RouteBuilder; +import org.junit.Before; +import org.junit.Test; + +/** + * This class tests an issue where an input file is not picked up due to a dynamic + * doneFileName containing two dots. + */ +public class FileConsumeDynamicDoneFileNameWithTwoDotsTest extends ContextTestSupport { + + private static final String TARGET_DIR_NAME = "target/" + MethodHandles.lookup().lookupClass().getSimpleName(); + + @Override + @Before + public void setUp() throws Exception { + deleteDirectory(TARGET_DIR_NAME); + super.setUp(); + } + + @Test + public void testDynamicDoneFileNameContainingTwoDots() throws Exception { + NotifyBuilder notify = new NotifyBuilder(context).whenDone(1).create(); + getMockEndpoint("mock:result").expectedBodiesReceivedInAnyOrder("input-body"); + + template.sendBodyAndHeader("file:" + TARGET_DIR_NAME, "input-body", Exchange.FILE_NAME, "test.twodot.txt"); + template.sendBodyAndHeader("file:" + TARGET_DIR_NAME, "done-body", Exchange.FILE_NAME, "test.twodot.done"); + + assertMockEndpointsSatisfied(); + assertTrue(notify.matchesMockWaitTime()); + + assertFalse("Input file should be deleted", new File(TARGET_DIR_NAME, "test.twodot.txt").exists()); + assertFalse("Done file should be deleted", new File(TARGET_DIR_NAME, "test.twodot.done").exists()); + } + + @Override + protected RouteBuilder createRouteBuilder() throws Exception { + return new RouteBuilder() { + @Override + public void configure() throws Exception { + from("file:" + TARGET_DIR_NAME + "?doneFileName=${file:name.noext}.done&initialDelay=0").to("mock:result"); + } + }; + } +} diff --git a/camel-core/src/test/java/org/apache/camel/component/file/FileConsumeSimpleDynamicDoneFileNameWithTwoDotsTest.java b/camel-core/src/test/java/org/apache/camel/component/file/FileConsumeSimpleDynamicDoneFileNameWithTwoDotsTest.java new file mode 100644 index 0000000..d1de7a9 --- /dev/null +++ b/camel-core/src/test/java/org/apache/camel/component/file/FileConsumeSimpleDynamicDoneFileNameWithTwoDotsTest.java @@ -0,0 +1,68 @@ +/** + * 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.component.file; + +import java.io.File; +import java.lang.invoke.MethodHandles; + +import org.apache.camel.ContextTestSupport; +import org.apache.camel.Exchange; +import org.apache.camel.builder.NotifyBuilder; +import org.apache.camel.builder.RouteBuilder; +import org.junit.Before; +import org.junit.Test; + +/** + * This class tests an issue where an input file is not picked up due to a + * dynamic doneFileName using the simple syntax and containing two dots. + */ +public class FileConsumeSimpleDynamicDoneFileNameWithTwoDotsTest extends ContextTestSupport { + + private static final String TARGET_DIR_NAME = "target/" + MethodHandles.lookup().lookupClass().getSimpleName(); + + @Override + @Before + public void setUp() throws Exception { + deleteDirectory(TARGET_DIR_NAME); + super.setUp(); + } + + @Test + public void testSimpleDynamicDoneFileNameContainingTwoDots() throws Exception { + NotifyBuilder notify = new NotifyBuilder(context).whenDone(1).create(); + getMockEndpoint("mock:result").expectedBodiesReceivedInAnyOrder("input-body"); + + template.sendBodyAndHeader("file:" + TARGET_DIR_NAME, "input-body", Exchange.FILE_NAME, "test.twodot.txt"); + template.sendBodyAndHeader("file:" + TARGET_DIR_NAME, "done-body", Exchange.FILE_NAME, "test.twodot.done"); + + assertMockEndpointsSatisfied(); + assertTrue(notify.matchesMockWaitTime()); + + assertFalse("Input file should be deleted", new File(TARGET_DIR_NAME, "test.twodot.txt").exists()); + assertFalse("Done file should be deleted", new File(TARGET_DIR_NAME, "test.twodot.done").exists()); + } + + @Override + protected RouteBuilder createRouteBuilder() throws Exception { + return new RouteBuilder() { + @Override + public void configure() throws Exception { + from("file:" + TARGET_DIR_NAME + "?doneFileName=$simple{file:name.noext}.done&initialDelay=0").to("mock:result"); + } + }; + } +}