2016-04-01 16 views
2

次のテストでは、ファイルを埋め込み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(); 
} 
+3

ジェンキンスはあなたのdevデスクトップと同じOSを使用しますか? ftpにファイルをアップロードすると改行が変わることがあります。 – longhua

+0

はい、これは問題である可能性があります。ヒントの感謝 –

+0

予想されるサイズと実際のサイズの差は、ファイルの行数を超えています。ありがとう@ longhua –

答えて

0

ほとんどのFTPクライアントは、デフォルトでファイルを転送するためにASCIIモードを使用します。このモードでは、改行が変更されます。したがって、あなたのケースでは、ファイルサイズは、異なる環境で動作しているときに変更されます。最も可能性の高い原因は、1つの環境で改行が変更されたことです。

関連する問題