ファイルアップロード用の FTP クライアント機能をテストするために、単純な FTPServer を単体テストに組み込みたいと考えています。Apache FTPServer (ftpserver-core-1.0.6.jar) を試してみました。
ファイルのアップロードが失敗します
551 /C:/<correctDestinationPath>/myFile.txt: Error on output file.
サーバーをセットアップするための私のコードは次のとおりです。
FtpServerFactory serverFactory = new FtpServerFactory();
BaseUser user = new BaseUser();
user.setName("anonymous");
user.setPassword( System.getProperty( "user.name" ) + "@" + InetAddress.getLocalHost().getHostName() );
user.setHomeDirectory( TEST_TARGET_DIR_LOCAL );
List<Authority> authorities = new ArrayList<Authority>();
authorities.add(new WritePermission());
user.setAuthorities(authorities);
UserManager userManager = serverFactory.getUserManager();
userManager.save(user);
myServer = serverFactory.createServer();
myServer.start();
これは、接続とログインに完全に機能します。
220 Service ready for new user.
USER *******
331 Guest login okay, send your complete e-mail address as password.
PASS *******
230 User logged in, proceed.
SYST
215 UNIX Type: Apache FtpServer
TYPE I
200 Command TYPE okay.
生産的なコードは、次のように FTPClient を呼び出します。
myFtpClient.storeFile( "C:\<correctDestinationPath>\myFile.txt", anInputStream );
これは、私の Windows マシンでは正しいパスであることに注意してください。しかし、FTPServer はそれを unix のようなパス "/C:/correctDestinationPath/myFile.txt" にスクランブルします。
Windows でも機能するように FTPServer を構成するにはどうすればよいですか? もちろん、単体テスト自体は OS に依存しないものにする必要があります。