/** * 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.util.ArrayList; import java.util.List; import org.apache.camel.Exchange; import org.apache.camel.Message; import org.apache.camel.Processor; import org.apache.camel.component.file.GenericFile; import org.apache.camel.component.file.GenericFileOperationFailedException; import org.apache.camel.component.file.GenericFileProducer; import org.junit.Assert; import org.junit.Test; public class RemoteFileIgnoreDoPollErrorTest { private final RemoteFileEndpoint<Object> remoteFileEndpoint = new RemoteFileEndpoint<Object>() { @Override protected RemoteFileConsumer<Object> buildConsumer(Processor processor) { return null; } @Override protected GenericFileProducer<Object> buildProducer() { return null; } @Override public RemoteFileOperations<Object> createRemoteFileOperations() throws Exception { return null; } @Override public String getScheme() { return null; } }; @Test public void testReadDirErrorIsHandled() throws Exception { RemoteFileConsumer<Object> consumer = getRemoteFileConsumer("true", true); boolean result = consumer.doSafePollSubDirectory("anyPath", "adir", new ArrayList<GenericFile<Object>>(), 0); Assert.assertTrue(result); } @Test public void testReadDirErrorIsHandledWithNoMorePoll() throws Exception { RemoteFileConsumer<Object> consumer = getRemoteFileConsumer("false", true); boolean result = consumer.doSafePollSubDirectory("anyPath", "adir", new ArrayList<GenericFile<Object>>(), 0); Assert.assertFalse(result); } @Test public void testReadDirErrorNotHandled() throws Exception { RemoteFileConsumer<Object> consumer = getRemoteFileConsumer("IllegalStateException", false); try { consumer.doSafePollSubDirectory("anyPath", "adir", new ArrayList<GenericFile<Object>>(), 0); Assert.fail("Must throw wrapped IllegalStateException in GenericFileOperationFailedException"); } catch (GenericFileOperationFailedException e) { Assert.assertTrue(e.getCause() instanceof IllegalStateException); } } @Test public void testReadDirErrorNotHandledForGenericFileOperationException() throws Exception { RemoteFileConsumer<Object> consumer = getRemoteFileConsumer("GenericFileOperationFailedException", false); try { consumer.doSafePollSubDirectory("anyPath", "adir", new ArrayList<GenericFile<Object>>(), 0); Assert.fail("Must throw GenericFileOperationFailedException"); } catch (GenericFileOperationFailedException e) { Assert.assertNull(e.getCause()); } } private RemoteFileConsumer<Object> getRemoteFileConsumer(final String doPollResult, final boolean ignoreCannotRetrieveFile) { return new RemoteFileConsumer<Object>(remoteFileEndpoint, null, null) { @Override protected boolean doPollDirectory(String absolutePath, String dirName, List<GenericFile<Object>> genericFiles, int depth) { if ("IllegalStateException".equals(doPollResult)) { throw new IllegalStateException("Problem"); } else if ("GenericFileOperationFailedException".equals(doPollResult)) { throw new GenericFileOperationFailedException("Perm error"); } else { return "true".equals(doPollResult); } } @Override protected boolean pollDirectory(String fileName, List<GenericFile<Object>> genericFiles, int depth) { return false; } @Override protected boolean isMatched(GenericFile<Object> file, String doneFileName, List<Object> files) { return false; } @Override protected boolean ignoreCannotRetrieveFile(String name, Exchange exchange, Exception cause) { return ignoreCannotRetrieveFile; } @Override protected void updateFileHeaders(GenericFile<Object> genericFile, Message message) { // noop } }; } }