2017-11-01 7 views
-1

(citrus)ftpサーバーにアップロードされたファイルを受け取り、アップロードされたファイルの内容が期待どおりであることを確認しようとしています。FTPにアップロードされたファイルの内容をテストするにはどうすればよいですか?

私はSTORメッセージ(下のコード)を受け取ることができましたが、その内容がいくつかのテキストと同等であるかどうかはわかりません(xml、json、およびcsvファイルで作業しています)。

私を助けることができますか?おかげさまで

@Test 
public class SampleFtpTest extends TestNGCitrusTestDesigner { 
    @Autowired 
    private FtpServer ftpServer; 

    @CitrusTest 
    public void testFileContent() { 
     Condition waitUntilFileIsUploaded = new Condition() { 
      @Override 
      public String getName() { 
       return "Check files on FTP"; 
      } 

      @Override 
      public boolean isSatisfied (TestContext testContext){ 
       return new File("target/ftp/user/anonymous").listFiles().length != 0; 
      } 

      @Override 
      public String getSuccessMessage (TestContext testContext){ 
       return "Files found in FTP!"; 
      } 

      @Override 
      public String getErrorMessage (TestContext testContext){ 
       return "No file was found in FTP"; 
      } 
     }; 

     waitFor().condition(waitUntilFileIsUploaded).seconds(1200L).interval(5000L); 

     // simulate integration uploading a file... 
     new Thread(new Runnable() { 
      @Override 
      public void run() { 
       try { 
        Thread.sleep(20000L); 
        Runtime.getRuntime().exec("curl -T /tmp/test.txt ftp://localhost:22222 --user anonymous:secret"); 
       } catch (Exception e) { 
        e.printStackTrace(); 
       } 
      } 
     }).start(); 

     // don't care about connection related messages 
     receive(ftpServer); 
     receive(ftpServer); 
     receive(ftpServer); 
     receive(ftpServer); 
     receive(ftpServer); 

     // i'd like to assert that the uploaded files content is as expected 
     receive(ftpServer).header("citrus_ftp_command", FTPCmd.STOR.getCommand()); 
    } 
} 
+0

をアップロードを何_「ファイルの内容についての主張」_ですか?そしてBTWでは、FTPファイル転送が「完了」したときに確定的に知る方法はありません。あなたができることは、活動の欠如に基づいて推測することだけであり、状況によっては失敗することさえあります。 –

+0

コメントをいただきありがとうございます。私は、FTPファイル転送が完了した時点で確定的に知る方法がないことを知りません。 また、私は何をしようとしているのかを明確にするために質問を編集しました。 – nailujed

+1

はい、それはFTPの残念なことに「機能」です。転送は失敗し、部分的なファイルを残した後、再起動または再開できます。確定性が必要な場合は、rsyncのようなものに切り替える必要があります。rsyncは隠された一時的なファイルに書き出し、完了したときにのみターゲットファイルに名前を変更するように設定できます。 –

答えて

0

私はftpの作業ディレクトリからファイルを読み込むChannelEndpointを追加するファイルの内容をテストするために管理してきました。その後、私はこれをやってファイルの内容をテストすることができます

receive(fileEndpoint) 
      .header("file_originalFile", "@contains('/test.txt')@") 
      .payload(new ClassPathResource("ar/com/jidev/citrus/samples/expected/test.txt")); 

詳細については、私は完全な例here

関連する問題