JBart Logo

Posts Tagged ‘Mock FTP Server’

Unit-Test Tools: Apache FTP Server

Freitag, März 11th, 2011

Weiter aus der Serie “nützliche Unit-Test Tools”: der Apache FTP Server. Mit wenigen Zeilen Code kann man einen lokalen FTP Server starten, der dann für Tests verwendet werden kann.

Wie üblich reicht für das Einbinden vom Apache FTP Server ein Eintrag in maven:

<dependency>
    <groupId>org.apache.ftpserver</groupId>
    <artifactId>ftpserver-core</artifactId>
    <version>1.0.4</version>
</dependency>

Aus Performancegründen bietet es sich an, den FTP Server nicht generell zu speichern, sondern den Start in eine statische Methode auszulagern, sodaß pro Test entschieden werden kann, ob ein FTP Server benötigt wird.

File ftpDirectory = new File("ftproot");
ftpDirectory.mkdirs(); // create target/ftproot

FtpServerFactory serverFactory = new FtpServerFactory();
ListenerFactory factory = new ListenerFactory();
factory.setPort(2121); // FTP Port, unter Linux > 1024

try {
    serverFactory.addListener("default", factory.createListener());

    PropertiesUserManagerFactory userFactory = new PropertiesUserManagerFactory();
    File userFile = new File("ftpusers.properties");
    userFactory.setFile(userFile);
    serverFactory.setUserManager(userFactory.createUserManager());

    ftpServer = serverFactory.createServer();
    ftpServer.start();
} catch (Exception e) {
    LOGGER.log(Level.SEVERE, "Unable to start test ftpserver", e);
}

Um dann das Verhalten von Komponten zu testen, die einen FTP Up- oder Download durchführen, kann simpler Verwendung von java.io.File prüfen, ob Dateien vorhanden sind bzw. diese dann weitergehend verarbeiten.

Beispiel für das überprüfen einer hochgeladenen Datei:

assertTrue(new File(ftpDirectory, path).exists());