INT-1555 added tests for FTP and SFTP modules

This commit is contained in:
Oleg Zhurakousky
2010-11-12 16:34:22 -05:00
parent 2148956c6d
commit 7683d59f62
7 changed files with 350 additions and 4 deletions

1
.gitignore vendored
View File

@@ -1,3 +1,4 @@
*.msg
*.iml
*.ipr
*.iws

View File

@@ -85,7 +85,12 @@ public class FtpInboundRemoteFileSystemSynchronizer extends AbstractInboundRemot
acknowledge(client, ftpFile);
}
catch (Throwable th) {
throw new RuntimeException(th);
if (th instanceof RuntimeException){
throw (RuntimeException)th;
}
else {
throw new MessagingException("Failed to compy file", th);
}
}
finally {
fos.close();

View File

@@ -0,0 +1,76 @@
/*
* Copyright 2002-2010 the original author or authors.
*
* Licensed 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.springframework.integration.ftp.inbound;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import java.io.File;
import java.io.OutputStream;
import java.util.Arrays;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPFile;
import org.junit.Test;
import org.mockito.Mockito;
import org.springframework.core.io.FileSystemResource;
import org.springframework.integration.file.filters.FileListFilter;
import org.springframework.integration.ftp.client.FtpClientPool;
/**
* @author Oleg Zhurakousky
*
*/
public class FtpInboundRemoteFileSystemSynchronizerTest {
@SuppressWarnings({ "rawtypes", "unchecked" })
@Test
public void testCopyFileToLocalDir() throws Exception {
File file = new File(System.getProperty("java.io.tmpdir") + "/foo.txt");
if (file.exists()){
file.delete();
}
FtpInboundRemoteFileSystemSynchronizer syncronizer = new FtpInboundRemoteFileSystemSynchronizer();
syncronizer.setLocalDirectory(new FileSystemResource(System.getProperty("java.io.tmpdir")));
FileListFilter filter = mock(FileListFilter.class);
//
syncronizer.setFilter(filter);
FtpClientPool clientPoll = mock(FtpClientPool.class);
FTPClient ftpClient = mock(FTPClient.class);
FTPFile f1 = mock(FTPFile.class);
when(f1.isFile()).thenReturn(true);
when(f1.getName()).thenReturn("foo.txt");
FTPFile[] files = new FTPFile[]{f1};
when(ftpClient.listFiles()).thenReturn(files);
when(clientPoll.getClient()).thenReturn(ftpClient);
when(filter.filterFiles((Object[]) Mockito.any())).thenReturn(Arrays.asList(files));
syncronizer.setClientPool(clientPoll);
syncronizer.setShouldDeleteSourceFile(true);
syncronizer.afterPropertiesSet();
syncronizer.syncRemoteToLocalFileSystem();
verify(ftpClient, times(1)).retrieveFile(Mockito.anyString(), Mockito.any(OutputStream.class));
verify(ftpClient, times(1)).deleteFile(Mockito.anyString());
verify(clientPoll, times(1)).releaseClient(ftpClient);
}
}

View File

@@ -0,0 +1,84 @@
/*
* Copyright 2002-2010 the original author or authors.
*
* Licensed 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.springframework.integration.ftp.outbound;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import java.io.File;
import java.io.InputStream;
import org.apache.commons.net.ftp.FTPClient;
import org.junit.Test;
import org.mockito.Mockito;
import org.springframework.integration.ftp.client.FtpClientPool;
import org.springframework.integration.message.GenericMessage;
/**
* @author Oleg Zhurakousky
*
*/
public class FtpSendingMessageHandlerTest {
@SuppressWarnings({ "unchecked", "rawtypes" })
@Test
public void testHandleFileNameMessage() throws Exception {
FtpSendingMessageHandler handler = new FtpSendingMessageHandler();
FtpClientPool clientPoll = mock(FtpClientPool.class);
FTPClient client = mock(FTPClient.class);
when(client.storeFile(Mockito.anyString(), Mockito.any(InputStream.class))).thenReturn(true);
when(clientPoll.getClient()).thenReturn(client);
handler.setFtpClientPool(clientPoll);
handler.handleMessage(new GenericMessage("hello"));
verify(clientPoll, times(1)).getClient();
verify(client, times(1)).storeFile(Mockito.anyString(), Mockito.any(InputStream.class));
}
@SuppressWarnings({ "unchecked", "rawtypes" })
@Test
public void testHandleFileAsByte() throws Exception {
FtpSendingMessageHandler handler = new FtpSendingMessageHandler();
FtpClientPool clientPoll = mock(FtpClientPool.class);
FTPClient client = mock(FTPClient.class);
when(client.storeFile(Mockito.anyString(), Mockito.any(InputStream.class))).thenReturn(true);
when(clientPoll.getClient()).thenReturn(client);
handler.setFtpClientPool(clientPoll);
handler.handleMessage(new GenericMessage("hello".getBytes()));
verify(clientPoll, times(1)).getClient();
verify(client, times(1)).storeFile(Mockito.anyString(), Mockito.any(InputStream.class));
}
@SuppressWarnings({ "unchecked", "rawtypes" })
@Test
public void testHandleFileMessage() throws Exception {
FtpSendingMessageHandler handler = new FtpSendingMessageHandler();
FtpClientPool clientPoll = mock(FtpClientPool.class);
FTPClient client = mock(FTPClient.class);
when(client.storeFile(Mockito.anyString(), Mockito.any(InputStream.class))).thenReturn(true);
when(clientPoll.getClient()).thenReturn(client);
handler.setFtpClientPool(clientPoll);
File file = File.createTempFile("foo", ".txt");
handler.handleMessage(new GenericMessage(file));
verify(clientPoll, times(1)).getClient();
verify(client, times(1)).storeFile(Mockito.anyString(), Mockito.any(InputStream.class));
}
}

View File

@@ -101,13 +101,12 @@ public class SftpInboundRemoteFileSystemSynchronizer extends AbstractInboundRemo
return true;
}
catch (Throwable th) {
logger.error("failure occurred while copying from remote to local directory", th);
throw new MessagingException("Failure occurred while copying from remote to local directory", th);
}
}
else {
return true;
}
return false;
}
@Override
@@ -119,7 +118,8 @@ public class SftpInboundRemoteFileSystemSynchronizer extends AbstractInboundRemo
session.start();
ChannelSftp channelSftp = session.getChannel();
Collection<ChannelSftp.LsEntry> beforeFilter = channelSftp.ls(remotePath);
ChannelSftp.LsEntry[] entries = (beforeFilter == null) ? new ChannelSftp.LsEntry[0] : beforeFilter.toArray(new ChannelSftp.LsEntry[beforeFilter.size()]);
ChannelSftp.LsEntry[] entries = (beforeFilter == null) ? new ChannelSftp.LsEntry[0] :
beforeFilter.toArray(new ChannelSftp.LsEntry[beforeFilter.size()]);
Collection<ChannelSftp.LsEntry> files = this.filter.filterFiles(entries);
for (ChannelSftp.LsEntry lsEntry : files) {
if ((lsEntry != null) && !lsEntry.getAttrs().isDir() && !lsEntry.getAttrs().isLink()) {

View File

@@ -0,0 +1,88 @@
/*
* Copyright 2002-2010 the original author or authors.
*
* Licensed 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.springframework.integration.sftp.inbound;
import static org.mockito.Mockito.atLeast;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import java.io.File;
import java.io.FileInputStream;
import java.util.Vector;
import org.junit.Test;
import org.mockito.Mockito;
import org.springframework.core.io.FileSystemResource;
import org.springframework.integration.file.filters.FileListFilter;
import org.springframework.integration.sftp.session.SftpSession;
import org.springframework.integration.sftp.session.SftpSessionPool;
import com.jcraft.jsch.ChannelSftp;
import com.jcraft.jsch.ChannelSftp.LsEntry;
import com.jcraft.jsch.SftpATTRS;
/**
* @author Oleg Zhurakousky
*
*/
public class SftpInboundRemoteFileSystemSynchronizerTests {
@SuppressWarnings({ "rawtypes", "unchecked" })
@Test
public void testCopyFileToLocalDir() throws Exception {
File file = new File(System.getProperty("java.io.tmpdir") + "/foo.txt");
if (file.exists()){
file.delete();
}
SftpInboundRemoteFileSystemSynchronizer syncronizer = new SftpInboundRemoteFileSystemSynchronizer();
syncronizer.setLocalDirectory(new FileSystemResource(System.getProperty("java.io.tmpdir")));
syncronizer.setRemotePath("foo/bar");
FileListFilter filter = mock(FileListFilter.class);
syncronizer.setFilter(filter);
SftpSessionPool sessionPoll = mock(SftpSessionPool.class);
SftpSession sftpSession = mock(SftpSession.class);
when(sessionPoll.getSession()).thenReturn(sftpSession);
ChannelSftp channel = mock(ChannelSftp.class);
when(channel.get((String) Mockito.any())).thenReturn(new FileInputStream(new File(".classpath")));
when(sftpSession.getChannel()).thenReturn(channel);
Vector<LsEntry> entries = new Vector<ChannelSftp.LsEntry>();
LsEntry entry = mock(LsEntry.class);
SftpATTRS attr = mock(SftpATTRS.class);
when(attr.isDir()).thenReturn(false);
when(attr.isLink()).thenReturn(false);
when(entry.getFilename()).thenReturn("foo.txt");
when(entry.getAttrs()).thenReturn(attr);
entries.add(entry);
when(channel.ls("foo/bar")).thenReturn(entries);
when(filter.filterFiles((Object[]) Mockito.any())).thenReturn(entries);
syncronizer.setClientPool(sessionPoll);
syncronizer.setShouldDeleteSourceFile(true);
syncronizer.afterPropertiesSet();
syncronizer.syncRemoteToLocalFileSystem();
verify(sessionPoll, times(1)).getSession();
verify(sftpSession, atLeast(1)).getChannel();
// will add more validation, but for now this test is mainly to get the test coverage up
}
}

View File

@@ -0,0 +1,92 @@
/*
* Copyright 2002-2010 the original author or authors.
*
* Licensed 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.springframework.integration.sftp.outbound;
import static org.mockito.Mockito.atLeast;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import java.io.File;
import org.junit.Test;
import org.springframework.expression.spel.standard.SpelExpressionParser;
import org.springframework.integration.message.GenericMessage;
import org.springframework.integration.sftp.session.SftpSession;
import org.springframework.integration.sftp.session.SftpSessionPool;
import com.jcraft.jsch.ChannelSftp;
/**
*
* @author Oleg Zhurakousky
*
*/
// there are few validations in this tests, but it is mainly to increase code coverage during CI
public class SftpSendingMessageHandlerTest {
@SuppressWarnings({ "unchecked", "rawtypes" })
@Test
public void testHandleFileNameMessage() throws Exception {
SftpSessionPool sessionPoll = mock(SftpSessionPool.class);
SftpSession session = mock(SftpSession.class);
ChannelSftp channel = mock(ChannelSftp.class);
when(session.getChannel()).thenReturn(channel);
when(sessionPoll.getSession()).thenReturn(session);
SftpSendingMessageHandler handler = new SftpSendingMessageHandler(sessionPoll);
handler.setRemoteDirectoryExpression(new SpelExpressionParser().parseExpression("'foo.txt'"));
handler.handleMessage(new GenericMessage("hello"));
verify(session, atLeast(1)).getChannel();
verify(sessionPoll, times(1)).getSession();
}
@SuppressWarnings({ "unchecked", "rawtypes" })
@Test
public void testHandleFileAsByte() throws Exception {
SftpSessionPool sessionPoll = mock(SftpSessionPool.class);
SftpSession session = mock(SftpSession.class);
ChannelSftp channel = mock(ChannelSftp.class);
when(session.getChannel()).thenReturn(channel);
when(sessionPoll.getSession()).thenReturn(session);
SftpSendingMessageHandler handler = new SftpSendingMessageHandler(sessionPoll);
handler.setRemoteDirectoryExpression(new SpelExpressionParser().parseExpression("'foo.txt'"));
handler.handleMessage(new GenericMessage("hello".getBytes()));
verify(session, atLeast(1)).getChannel();
verify(sessionPoll, times(1)).getSession();
}
@SuppressWarnings({ "unchecked", "rawtypes" })
@Test
public void testHandleFileMessage() throws Exception {
SftpSessionPool sessionPoll = mock(SftpSessionPool.class);
SftpSession session = mock(SftpSession.class);
ChannelSftp channel = mock(ChannelSftp.class);
when(session.getChannel()).thenReturn(channel);
when(sessionPoll.getSession()).thenReturn(session);
SftpSendingMessageHandler handler = new SftpSendingMessageHandler(sessionPoll);
handler.setRemoteDirectoryExpression(new SpelExpressionParser().parseExpression("'foo.txt'"));
handler.handleMessage(new GenericMessage("hello".getBytes()));
File file = File.createTempFile("foo", ".txt");
handler.handleMessage(new GenericMessage(file));
verify(session, atLeast(1)).getChannel();
verify(sessionPoll, atLeast(1)).getSession();
}
}