4

テストスイートを実行するために使用する一連のantタスクがありますが、これらのテストの1つがフリーズし、テストスイート全体がハングすることがあります。シャットダウンハンドラーを追加したので、Ctrl+ Cantを押すと正常にシャットダウンし、最終テストが実行されていないとマークされたレポートが表示されます。(これらは統合テストであり、何時間も実行できるため、これは重要です)これは、シャットダウンフックが呼び出されていないWindowsを除いてうまく機能します。あらゆる種類の入力に応答して正常にシャットダウンする方法はありますか?

4

1 に答える 1

2

これは長期にわたる既知の問題のようです。

問題は、Windowsでは、Ant Ctrl+Cが、観察したように、子VMに伝播されないことです。あなたが考えるかもしれないこと:

  • テストを細かく分割し、aを使用しtimeoutてハングしているものをすべて削除します。これにより、失われるデータがハングする1つのテストに制限されます。
  • テスト実行では、シャットダウン「シグナル」(おそらくフラグファイルの存在)を待機する「リスナー」スレッドを追加し、ハングが検出された場合は、コンソールからのコマンドでAntによってそのシグナルが設定されるように調整します。

これは複雑に見えますが、一見の価値があるかもしれません。Antparallelinputタスクを組み合わせて、1つのスレッドでテストを実行し、2番目のスレッドでコンソールからの入力を待つ必要があります。アボートを選択すると、シグナルファイルが書き込まれます。これは、テスト実行の「リスナー」で検出され、終了します。その他の入力は、実行のクリーンな終了につながります。これに伴う問題は、テストが正常に完了すると、Antがユーザー入力を待機したままになることですが、そのために全体的なタイムアウトを設定することができます。(テスト実行コードがシグナルファイルを検出する方法の例は示していません。)

Psuedo-Ant:

<property name="signal.abort" value="stop.txt" />
<target name="runner">
    <delete file="${signal.abort}" />
    <parallel timeout="86400000">
        <sequential>

            <!-- run tests here -->

        </sequential>
        <sequential>
            <input validargs="y,n"
                   message="Abort the test (y/n)?"
                   addproperty="abort.test" />
            <condition property="do.abort">
                <equals arg1="y" arg2="${abort.test}"/>
            </condition>
            <ant target="terminator" />
        </sequential>
    </parallel>
</target>

<target name="terminator" if="do.abort">
    <echo message="abort" file="${signal.abort}" />
</target>
于 2010-12-03T00:48:39.267 に答える