Using Spring FakeFtpServer to JUnit test a Spring Integration Flow
Join the DZone community and get the full member experience.
Join For Free
to run the junit test, run “mvn test” and understand the test flow.
introduction: fakeftpserver
in this spring integration fakeftpserver example, i will demonstrate using spring fakeftpserver to junit test a spring integration flow. this is an interesting topic, and there are few articles on unit testing file transfers , which gives some insight on this topic.
in this blog, we will test a spring integration flow which checks for a list of files, apply a splitter to separate each file and start downloading them into a local location. once the download is complete, it will delete the files on the ftp server. in my next blog, i will show how to do junit testing of spring integration flow with sftp server.
spring integration flow
in order to use fakeftpserver we need to have maven dependency as below,
<dependency> <groupid>org.mockftpserver</groupid> <artifactid>mockftpserver</artifactid> <version>2.3</version> <scope>test</scope> </dependency>
the first step to this is to create a fakeftpserver before every test runs as below,
@before
public void setup() throws exception {
fakeftpserver = new fakeftpserver();
fakeftpserver.setservercontrolport(9999); // use any free port
filesystem filesystem = new unixfakefilesystem();
filesystem.add(new fileentry(file, contents));
fakeftpserver.setfilesystem(filesystem);
useraccount useraccount = new useraccount("user", "password", home_dir);
fakeftpserver.adduseraccount(useraccount);
fakeftpserver.start();
}
@after
public void teardown() throws exception {
fakeftpserver.stop();
}
finally run the junit test case as seen below,
@autowired
private filedownloadutil downloadutil;
@test
public void testftpdownload() throws exception {
file file = new file("src/test/resources/output");
delete(file);
ftpclient client = new ftpclient();
client.connect("localhost", 9999);
client.login("user", "password");
string files[] = client.listnames("/dir");
client.help();
logger.debug("before delete" + files[0]);
assertequals(1, files.length);
downloadutil.downloadfilesfromremotedirectory();
logger.debug("after delete");
files = client.listnames("/dir");
client.help();
assertequals(0, files.length);
assertequals(1, file.list().length);
}
i hope this blog helped.
Published at DZone with permission of Krishna Prasad. See the original article here.
Opinions expressed by DZone contributors are their own.
Comments