2011-01-14 11 views
0

私たちが直面している記述が難しい奇妙な問題であるため、以下の説明が意味を持ちます。hadsonまたはjodatimeのmavenで時折の日付またはタイムゾーンの不一致

私たちはhudsonでビルドされ、日付が使用され、アサートされたいくつかのユニットテストを含むmavenプロジェクトを持っています。 hudsonサーバーはsolaris上で動作します。現在では、単位テストで指定された時間から3.5時間が差し引かれ、開始が失敗したと主張するため、時々(30%のように)日付を使用した単体テストが失敗することがあります。他の70%はうまくいきますが、コード内で何も変わっていません。私たちはhudsonジョブを1時間に数回実行します。

私は時間を確認するためにユニットテストに次のコードを追加します。jodatimeや、昔ながらのカレンダーを使用している場合

@Test 
public void testDate() { 
    System.out.println("new DateMidnight(2011, 1, 5).toDate();"); 
    System.out.println(new DateMidnight(2011, 1, 5).toDate()); 
    System.out.println(new DateMidnight(2011, 1, 5).toDate().getTime()); 

    Calendar cal = Calendar.getInstance(); 
    cal.set(Calendar.YEAR, 2011); 
    cal.set(Calendar.MONTH, 0); 
    cal.set(Calendar.DAY_OF_MONTH, 5); 
    cal.set(Calendar.HOUR, 0); 
    cal.set(Calendar.MINUTE, 0); 
    cal.set(Calendar.SECOND, 0); 
    cal.set(Calendar.MILLISECOND, 0); 
    System.out.println("cal.getTime();"); 
    System.out.println(cal.getTime()); 
    System.out.println(cal.getTime().getTime()); 
} 

だから、基本的には同じことを印刷する必要があります。実行の70%でこれが当てはまります。私はプリントアウトを以下の取得、他の30%のために:

Running TestSuite 
new DateMidnight(2011, 1, 5).toDate(); 
Tue Jan 04 21:30:00 MET 2011 
1294173000000 
cal.getTime(); 
Wed Jan 05 12:00:00 MET 2011 
1294225200000 

ので、カレンダーが正しい日付と時刻を保持しますが、jodatimeは3,5時間が差し引か。

ローカルのMavenテストは、この問題を引き起こすことは決してありません。その原因が何であるか把握できません。特に、コードやハドソンやサーバーの設定を変更することなくテストが合格しないことがあるという単一の理由を考えることはできません。

また、ユニットテストが2回実行されることを意味するcoberturaでmavenインストールを実行します。彼らはまた、彼らが最初に通過し、2回目に失敗するか、または2回失敗するか、どちらも失敗することも起こります。原因を突き止めるために任意の解決策やヒントについて

おかげで、
Stijn

答えて

0

問題は修正されたようです。

ジョーダタイムバージョンを5.14.2から5.14.6にアップグレードしました。 それ以来、私は30分ごとに自動でビルドを実行しました。約100回実行した後、この問題は再び発生しませんでした。

0

おそらく、ハドソンは、3台のサーバ上で実行され、そして1は他の2からJDKのタイムゾーンデータの異なるバージョンを持っていますか? (JVMのバージョンを詳細に確認してください)。 Joda-Timeには独自のバージョンのタイムゾーンデータがあり、この2つは異なる場合があります。

1

また、hudsonを実行している環境でTZ環境変数を設定することによって解決できる、SUREFIRE-533の一部のバージョンを実行している可能性があります。これが役立つ場合は、問題を報告してください。

関連する問題