Случайное несоответствие даты или часового пояса у Хадсона или мавена с йодатимом - PullRequest
0 голосов
/ 14 января 2011

Я надеюсь, что последующее объяснение будет иметь смысл, потому что это странная проблема, с которой мы сталкиваемся и которую трудно описать.

У нас есть проект maven, который получает сборку в hudson и содержит несколько модульных тестов, в которых используются и утверждаются даты. Сервер hudson работает на солярисе. Теперь время от времени (например, в 30% случаев) модульные тесты с использованием дат не выполняются, потому что 3,5 часа вычитаются из указанного времени в модульном тесте, и, следовательно, утверждения начинают сбой. На остальных 70% все работает нормально, хотя в коде ничего не изменилось, и мы запускаем задание hudson несколько раз в час.

Я добавляю следующий код в юнит-тест, чтобы проверить время:

@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());
}

Так что, в основном, он должен печатать одно и то же при использовании jodatime или простого старого Календаря. Это имеет место в 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 никогда не приводят к возникновению этой проблемы, и мы не можем понять, что может быть причиной этого. В частности, мы не можем придумать единственную причину, по которой тесты иногда проходят, а иногда и не проходят, не изменяя ни код, ни параметры сервера, ни настройки.

Кроме того, мы запускаем установку maven с cobertura, что означает, что модульные тесты запускаются дважды. Также бывает, что они проходят первый раз и терпят неудачу во второй раз или наоборот, или что они терпят неудачу оба раза.

Спасибо за любые решения или советы по поиску причины,
Стейн

Ответы [ 3 ]

1 голос
/ 16 января 2011

Возможно, вы также работаете с какой-то версией SUREFIRE-533 , которая должна быть решена путем установки переменной среды TZ в среде, в которой работает hudson. Пожалуйста, сообщите о проблеме, если это поможет.

0 голосов
/ 17 января 2011

Проблема, похоже, исправлена.

Мы обновили нашу версию jodatime с 5.14.2 до 5.14.6. С тех пор я запускал сборку на авто каждые полчаса, поэтому после примерно 100 запусков мы больше никогда не сталкивались с этой проблемой.

0 голосов
/ 15 января 2011

Возможно, Hudson работает на 3 серверах, и один из них имеет версию данных часового пояса в JDK, отличную от двух других?(проверьте версию JVM подробно).Помните, что Joda-Time также имеет собственную версию данных о часовых поясах, и они могут отличаться.

...