Repository: camel Updated Branches: refs/heads/camel-2.15.x 11e795b91 -> 0c268d4a4
CAMEL-8887: Added unit test Project: http://git-wip-us.apache.org/repos/asf/camel/repo Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/73900189 Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/73900189 Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/73900189 Branch: refs/heads/camel-2.15.x Commit: 73900189a25ed3f80fd8acc18f4eb2b9f7e8e3dc Parents: 11e795b Author: Claus Ibsen <davscl...@apache.org> Authored: Wed Aug 5 12:49:38 2015 +0200 Committer: Claus Ibsen <davscl...@apache.org> Committed: Wed Aug 5 13:39:31 2015 +0200 ---------------------------------------------------------------------- .../component/file/GenericFileConsumer.java | 25 +++--- .../file/remote/FromFtpSedaDeleteFileTest.java | 90 ++++++++++++++++++++ .../remote/sftp/SftpFromSedaDeleteFileTest.java | 80 +++++++++++++++++ 3 files changed, 185 insertions(+), 10 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/camel/blob/73900189/camel-core/src/main/java/org/apache/camel/component/file/GenericFileConsumer.java ---------------------------------------------------------------------- diff --git a/camel-core/src/main/java/org/apache/camel/component/file/GenericFileConsumer.java b/camel-core/src/main/java/org/apache/camel/component/file/GenericFileConsumer.java index 00afddc..d867428 100644 --- a/camel-core/src/main/java/org/apache/camel/component/file/GenericFileConsumer.java +++ b/camel-core/src/main/java/org/apache/camel/component/file/GenericFileConsumer.java @@ -429,17 +429,22 @@ public abstract class GenericFileConsumer<T> extends ScheduledBatchPollingConsum log.debug("About to process file: {} using exchange: {}", target, exchange); - // process the exchange using the async consumer to support async routing engine - // which can be supported by this file consumer as all the done work is - // provided in the GenericFileOnCompletion - getAsyncProcessor().process(exchange, new AsyncCallback() { - public void done(boolean doneSync) { - // noop - if (log.isTraceEnabled()) { - log.trace("Done processing file: {} {}", target, doneSync ? "synchronously" : "asynchronously"); + if (endpoint.isSynchronous()) { + // process synchronously + getProcessor().process(exchange); + } else { + // process the exchange using the async consumer to support async routing engine + // which can be supported by this file consumer as all the done work is + // provided in the GenericFileOnCompletion + getAsyncProcessor().process(exchange, new AsyncCallback() { + public void done(boolean doneSync) { + // noop + if (log.isTraceEnabled()) { + log.trace("Done processing file: {} {}", target, doneSync ? "synchronously" : "asynchronously"); + } } - } - }); + }); + } } catch (Exception e) { // remove file from the in progress list due to failure http://git-wip-us.apache.org/repos/asf/camel/blob/73900189/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/FromFtpSedaDeleteFileTest.java ---------------------------------------------------------------------- diff --git a/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/FromFtpSedaDeleteFileTest.java b/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/FromFtpSedaDeleteFileTest.java new file mode 100644 index 0000000..dfb8806 --- /dev/null +++ b/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/FromFtpSedaDeleteFileTest.java @@ -0,0 +1,90 @@ +/** + * 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.remote; + +import java.io.File; + +import org.apache.camel.Endpoint; +import org.apache.camel.Exchange; +import org.apache.camel.Producer; +import org.apache.camel.builder.RouteBuilder; +import org.apache.camel.component.mock.MockEndpoint; +import org.junit.Before; +import org.junit.Test; + +/** + * Unit test to test delete option. + */ +public class FromFtpSedaDeleteFileTest extends FtpServerTestSupport { + + protected String getFtpUrl() { + return "ftp://admin@localhost:" + getPort() + "/deletefile?password=admin&binary=false&delete=true"; + } + + @Override + @Before + public void setUp() throws Exception { + super.setUp(); + prepareFtpServer(); + } + + @Test + public void testPollFileAndShouldBeDeleted() throws Exception { + MockEndpoint mock = getMockEndpoint("mock:result"); + mock.expectedMessageCount(1); + mock.expectedBodiesReceived("Hello World this file will be deleted"); + + mock.assertIsSatisfied(); + + Thread.sleep(500); + + // assert the file is deleted + File file = new File(FTP_ROOT_DIR + "/deletefile/hello.txt"); + assertFalse("The file should have been deleted", file.exists()); + } + + private void prepareFtpServer() throws Exception { + // prepares the FTP Server by creating a file on the server that we want to unit + // test that we can pool and store as a local file + Endpoint endpoint = context.getEndpoint(getFtpUrl()); + Exchange exchange = endpoint.createExchange(); + exchange.getIn().setBody("Hello World this file will be deleted"); + exchange.getIn().setHeader(Exchange.FILE_NAME, "hello.txt"); + Producer producer = endpoint.createProducer(); + producer.start(); + producer.process(exchange); + producer.stop(); + + // assert file is created + File file = new File(FTP_ROOT_DIR + "/deletefile/hello.txt"); + assertTrue("The file should exists", file.exists()); + } + + protected RouteBuilder createRouteBuilder() throws Exception { + return new RouteBuilder() { + public void configure() throws Exception { + from(getFtpUrl()).to("seda:foo"); + + from("seda:foo") + .delay(750) + .log("${body}") + .delay(750) + .to("mock:result"); + } + }; + } +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/camel/blob/73900189/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/sftp/SftpFromSedaDeleteFileTest.java ---------------------------------------------------------------------- diff --git a/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/sftp/SftpFromSedaDeleteFileTest.java b/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/sftp/SftpFromSedaDeleteFileTest.java new file mode 100644 index 0000000..5926a9e --- /dev/null +++ b/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/sftp/SftpFromSedaDeleteFileTest.java @@ -0,0 +1,80 @@ +/** + * 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.remote.sftp; + +import java.io.File; +import java.io.IOException; + +import org.apache.camel.builder.RouteBuilder; +import org.apache.camel.component.mock.MockEndpoint; +import org.apache.commons.io.FileUtils; +import org.junit.Before; +import org.junit.Test; + +/** + * Unit test to test delete option. + */ +public class SftpFromSedaDeleteFileTest extends SftpServerTestSupport { + + protected String getFtpUrl() { + return "sftp://localhost:" + getPort() + "/" + FTP_ROOT_DIR + + "?username=admin&knownHostsFile=./src/test/resources/known_hosts&privateKeyFile=./src/test/resources/id_rsa" + + "&privateKeyFilePassphrase=secret&delay=500&disconnect=false&delete=true"; + } + + @Override + @Before + public void setUp() throws Exception { + super.setUp(); + createSampleFile(); + } + + @Test + public void testPollFileAndShouldBeDeleted() throws Exception { + MockEndpoint mock = getMockEndpoint("mock:result"); + mock.expectedMessageCount(1); + mock.expectedBodiesReceived("Hello World this file will be deleted"); + + mock.assertIsSatisfied(); + + Thread.sleep(500); + + // assert the file is deleted + File file = new File(FTP_ROOT_DIR + "/hello.txt"); + assertFalse("The file should have been deleted", file.exists()); + } + + private void createSampleFile() throws IOException { + File file = new File(FTP_ROOT_DIR + "/" + "foo.txt"); + + FileUtils.write(file, "Hello World this file will be deleted"); + } + + protected RouteBuilder createRouteBuilder() throws Exception { + return new RouteBuilder() { + public void configure() throws Exception { + from(getFtpUrl()).to("seda:foo"); + + from("seda:foo") + .delay(750) + .log("${body}") + .delay(750) + .to("mock:result"); + } + }; + } +} \ No newline at end of file