Mock FTP server - další perla do sbírky automatického testování

Předevčírem se v mé RSS síti zachytila zajímavá zpráva, která dobře zapadá do katalogu řešení pro automatické testování. Jedná se o MockFtpServer, který se velmi podobá přístupu SubEtha SMTP Serveru, se kterým mám velmi pozitivní zkušenosti.

Princip je skutečně analogický zmiňovanému SubEtha SMTP Serveru, se kterým lze jednoduše ověřovat správné rozesílání emailů. Jednoduše nakonfigurujeme "virtuální" FTP server a nastartujeme jej na konkrétním portu. V testech pak můžeme ověřovat kód, který komunikuje s FTP serverem, aniž bychom museli vytvářet vlastní stub nebo mock objekty:


public class RemoteFileTest extends TestCase{
protected void setUp() throws Exception {
   FakeFtpServer fakeFtpServer = new FakeFtpServer();
   fakeFtpServer.addUserAccount(new UserAccount("user", "password", "c:\\data"));
   FileSystem fileSystem = new WindowsFakeFileSystem();
   fileSystem.add(new DirectoryEntry("c:\\data"));
   fileSystem.add(new FileEntry("c:\\data\\file1.txt", "abcdef 1234567890"));
   fileSystem.add(new FileEntry("c:\\data\\run.exe"));
   fakeFtpServer.setFileSystem(fileSystem);
   fakeFtpServer.setServerControlPort(9154);
   fakeFtpServer.start();
}
protected void tearDown() throws Exception {
        fakeFtpServer.stop();
}
}

V nastavení lze simulovat jak Windows filesystem (case-insensitive, opačná lomítka atd.), tak i Unix filesystem. Je možné poměrně detailně nastavovat oprávnění na jednotlivé složky / soubory, které server dále respektuje.

Ftp server lze konfigurovat i pomocí Springu a také je možné ovlivňovat jeho chování implementací vlastních CommandHandlerů, které zpracovávají jednotlivé FTP příkazy (to kdybychom chtěli simulovat nějaké exotičtější chování FTP serveru, nebo nějaké chybové stavy).

Myslím, že v některých případech může být použití této knihovny pro integrační testy aplikační logiky pracující s FTP protokolem velmi užitečné.