次のテストでは、ファイルを埋め込みApache FTPサーバーにアップロードし、ファイルが正しくアップロードされているかどうかを確認しています。RemoteFileTemplateは不完全なファイルを読み込みますか?
@Test
public void testUploadFile() {
String fileName = "test.txt";
ftpUploader.upload("/data/" + fileName);
RemoteFileTemplate<FTPFile> template = new RemoteFileTemplate<>(this.ftpSessionFactory);
FTPFile[] files = template.execute(session -> session.list(fileName));
assertThat(files).hasSize(1);
assertThat(files[0].getSize()).isEqualTo(FILE_CONTENT_SIZE);
}
私はSpring Integrationを使用しています。 RemoteFileTemplateを介してファイルが存在し、正しいサイズを持っている場合、私はそれを確認します。 IDEでこのテストを実行するとうまく動作します。すべてのテストを含むMavenビルドも同様に動作します。しかし、Jenkinsサーバーで2回目のアサートが失敗します。
org.junit.ComparisonFailure: expected:<2[318796]L> but was:<2[290518]L>
何が原因なのでしょうか?完全にアップロードされていない場合でもテンプレートがファイルをダウンロードしますか?実際には、ftpUploaderはファイルの末尾に.writingが書き込まれている限り、ファイルに追加するので、これは当てはまりません。 FtpUploadは次のようになります
@MessagingGateway
public interface FtpUpload {
@Gateway(requestChannel = "ftpUploadChannel")
void upload(String fileName);
}
@Bean
IntegrationFlow upload() {
return IntegrationFlows.from("ftpUploadChannel")
.<String, File>transform(fileName -> new File(this.getClass().getResource(fileName).getFile()))
.handle(Ftp.outboundAdapter(ftpSessionFactory())
.remoteDirectory(ftpRemoteDir)
.autoCreateDirectory(true)
.useTemporaryFileName(true)
)
.get();
}
ジェンキンスはあなたのdevデスクトップと同じOSを使用しますか? ftpにファイルをアップロードすると改行が変わることがあります。 – longhua
はい、これは問題である可能性があります。ヒントの感謝 –
予想されるサイズと実際のサイズの差は、ファイルの行数を超えています。ありがとう@ longhua –