Chrono Mock
МоваУкраїнська

Зміна системної дати, щоб протестувати застосунок

Це найстаріший трюк на світі: виставити годинник Windows на дату, яку хочете перевірити, запустити програму й повернути годинник назад. Він працює — і доки годинник зсунуто, він зсуває й усе інше на машині.

Що насправді зсувається разом із годинником

Системний годинник не належить лише програмі, яку ви тестуєте. Кожен процес, служба й мережевий обмін на машині читає той самий годинник, тож зміна, зроблена заради одного тесту, — це зміна для всіх.

Що читає годинникЩо відбувається, коли ви його зсуваєте
Вхід до домену й спільні текиKerberos за замовчуванням допускає розбіжність годинників у п’ять хвилин. Понад це його квитки відхиляються, а вхід чи доступ до спільної теки завершується помилкою.
Сертифікати й HTTPSЧи дійсний сертифікат, вирішує годинник. Виставте його за дату завершення сертифіката — і кожне з’єднання, що на нього спирається, відхиляється як прострочене; відведіть його досить далеко назад — і сертифікат ще не діє.
Служба часу WindowsМашина в домені бере час від контролера домену, і за замовчуванням служба виправляє годинник за будь-якої розбіжності. Виставлену вами дату можуть повернути, поки ви ще тестуєте.
Усе, що записує часФайли, журнали, рядки баз даних і надіслані листи, створені за зсунутого годинника, несуть дату тесту й зберігають її після того, як ви повернули годинник.
ПЗ, що запам’ятовує найпізнішу бачену датуДеякі програми сприймають годинник, що пішов назад, як підробку — а саме це й відбувається, коли ви відновлюєте справжню дату.

Що далі дата, то більше з цього ви зустрінете. Машина, виставлена на 2038 рік, бачить простроченим кожен виданий сьогодні сертифікат. Як перевіряти 2038 рік без цього →

Потрібне й право, якого немає в більшості облікових записів: зміна системного часу — привілей адміністратора, а на керованій машині він часто вам не належить.

Коли зміна годинника — правильна відповідь

Віртуальна машина, якою більше ніхто не користується, з вимкненою власною синхронізацією годинника — цілком добрий випробувальний стенд. Потім ви її викидаєте, тож ніщо з записаного на ній не має значення. Якщо вона у вас є, а тест стосується однієї дати, це найпростіше, що працює.

Проблеми починаються, коли це машина, на якій ви працюєте, машина в домені або машина, на якій водночас працює те, що нічого не має помітити.

Зсуньте натомість годинник однієї програми

Зсунутий час бачить один процес і запущені ним дочірні. Ваш вхід до домену, ваші сертифікати й Windows Update його ніколи не бачать, тож нічого з таблиці вище не зсувається — і потім нічого повертати.

# Застосунок бачить 31 грудня 2027, 23:59:50. Усе інше зберігає справжню дату.
chrono run "C:\apps\test.exe" --at 2027-12-31T23:59:50

# Почати за десять хвилин до півночі й іти вшестеро швидше — зміна року настане за десять секунд
chrono run "C:\apps\test.exe" --at 2027-12-31T23:50:00 --mode x60

Чи дійшла зсунута для однієї програми дата до неї насправді — це не те, що слід припускати. Кожна сесія завершується вердиктом і списком каналів часу, які програма справді читала. Як зрозуміти, що підміна спрацювала →

Чого це не замінює

  • Програма, що питає час у сервера, лежить поза досяжністю локальної підміни. Сесія повідомляє про це, коли бачить, що програма відкриває мережеве з’єднання, замість того щоб лишити вас із припущенням, що тест пройшов.
  • Тестування самої системи — служби, що реагує на зміну справжнього годинника, запланованого завдання, поведінки Windows під час зміни годинника — не має заміни зміні годинника, на машині, яку вам не шкода.

Спробуйте