Почему тест JUnit завершится неудачей между 12 - 13 часами во время развертывания Jenkins? - PullRequest
0 голосов
/ 07 апреля 2020

У меня есть тест JUnit, который ищет пользователя, который не менял свой пароль за последние 355 дней. В тесте я сохраняю пользователя с его последней датой обновления пароля в системную дату / время - 355 дней. Затем я запускаю функцию, которая должна забрать этого пользователя для дополнительной обработки.

Тест проходит локально, как при запуске теста самостоятельно, так и при запуске всего набора тестов. Однако по какой-то причине тест не проходит между 12 и 13 часами при развертывании нашего кода в Jenkins. Это не постоянный провал, либо. Иногда простое повторное развертывание без изменений позволяет выполнить тест успешно. Что может быть причиной этой проблемы?

Для справки тест выглядит следующим образом:

@Test
   public void passwordExpiryTest() {
    Timestamp currentTimeMinus355Days = new Timestamp(System.currentTimeMillis() - 30672000000L);
    createUser("expiringUser", currentTimeMinus355Days);
    createUser("recentUser", new Timestamp(System.currentTimeMillis() - 864000000L));
    List<User> passwordExpiringUsers = userDao.getUsersWithPasswordExpiringInTenDays();
    Assert.assertEquals(1, passwordExpiringUsers.size());
}

А userDao.getUsersWithPasswordExpiringInTenDays представляет собой запрос SQL (в таблицу Postgres):

SELECT * FROM users WHERE last_password_update IS NOT NULL AND EXTRACT(epoch FROM (NOW() - last_password_update))/86400 >= 355 AND EXTRACT(epoch FROM (NOW() - last_password_update))/86400 <= 356")

1 Ответ

0 голосов
/ 07 апреля 2020

Я бы исследовал логи c в userDao.getUsersWithPasswordExpiringInTenDays(). Понятие «день» зависит от интерпретации: 24 часа или число следующего дня (например, 11 против 12 апреля?)? И есть ли влияние часовых поясов? Например, вы тестируете в Индии, но сервер живет в США (разница во времени 12 часов?)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...