Chrono Mock
JęzykPolski

Zmiana daty systemowej, żeby przetestować aplikację

To najstarsza sztuczka na świecie: ustaw zegar Windows na datę, którą chcesz sprawdzić, uruchom program, ustaw z powrotem. Działa - a dopóki zegar jest przestawiony, przestawia też wszystko inne na komputerze.

Co naprawdę przesuwa się razem z zegarem

Zegar systemowy nie należy tylko do testowanego programu. Każdy proces, usługa i połączenie sieciowe na maszynie czyta ten sam zegar, więc zmiana zrobiona na potrzeby jednego testu jest zmianą dla wszystkich.

Co czyta zegarCo się dzieje, gdy go przestawisz
Logowanie do domeny i foldery siecioweKerberos domyślnie toleruje różnicę zegarów do pięciu minut. Powyżej tego odrzuca bilety, a logowanie albo otwarcie udziału sieciowego kończy się błędem.
Certyfikaty i HTTPSTo, czy certyfikat jest ważny, rozstrzyga zegar. Ustaw go za datą końca certyfikatu, a każde połączenie, które na nim polega, zostanie odrzucone jako wygasłe; cofnij go dostatecznie daleko, a certyfikat jeszcze nie obowiązuje.
Usługa czasu systemu WindowsKomputer w domenie pobiera czas z kontrolera domeny, a usługa domyślnie koryguje zegar bez względu na wielkość różnicy. Ustawiona przez ciebie data może zniknąć, gdy jeszcze testujesz.
Wszystko, co zapisuje czasPliki, logi, wiersze w bazie i wysłane maile powstałe przy przestawionym zegarze noszą datę testu i zachowują ją po przywróceniu zegara.
Oprogramowanie pamiętające najpóźniejszą widzianą datęNiektóre programy czytają cofnięty zegar jako manipulację - a właśnie to się dzieje, gdy przywracasz prawdziwą datę.

Im dalsza data, tym więcej z tego spotkasz. Maszyna ustawiona na rok 2038 widzi każdy wystawiony dziś certyfikat jako wygasły. Jak testować rok 2038 bez tego →

Potrzebne jest do tego także uprawnienie, którego większość kont nie ma: zmiana czasu systemowego to przywilej administratora, a na zarządzanej maszynie często nie jest twoim do użycia.

Kiedy zmiana zegara jest dobrą odpowiedzią

Maszyna wirtualna, z której nikt poza tobą nie korzysta, z wyłączoną synchronizacją zegara, jest całkiem dobrym stanowiskiem testowym. Wyrzucasz ją potem, więc nic, co zapisała, nie ma znaczenia. Jeśli ją masz, a test dotyczy jednej daty, to najprostsza rzecz, która działa.

Kłopoty zaczynają się, gdy to maszyna, na której pracujesz, ta w domenie albo ta, na której działa coś, co niczego nie może zauważyć.

Przesuń zegar jednego programu

Przesunięty czas widzi jeden proces i procesy potomne, które uruchomi. Twoje logowanie do domeny, certyfikaty i Windows Update nigdy go nie widzą, więc nic z tabeli powyżej się nie przesuwa - i nie ma czego potem przywracać.

# Aplikacja widzi 31 grudnia 2027, 23:59:50. Cała reszta ma prawdziwą datę.
chrono run "C:\apps\test.exe" --at 2027-12-31T23:59:50

# Start dziesięć minut przed północą, tempo 60 razy szybsze - rok zmienia się w dziesięć sekund
chrono run "C:\apps\test.exe" --at 2027-12-31T23:50:00 --mode x60

To, czy data przesunięta dla jednego programu rzeczywiście do niego dotarła, nie jest czymś, co się zakłada. Każda sesja kończy się werdyktem i listą kanałów czasu, które program faktycznie odczytał. Skąd wiadomo, że zadziałało →

Czego to nie zastępuje

  • Program, który pyta o czas serwer, leży poza zasięgiem lokalnej podmiany. Sesja mówi o tym, gdy widzi, że program otwiera połączenie sieciowe, zamiast zostawiać cię z założeniem, że test przeszedł.
  • Testowanie samego systemu - usługi reagującej na zmianę prawdziwego zegara, zadania harmonogramu, zachowania Windows przy zmianie czasu - nie ma zamiennika dla zmiany zegara, na maszynie, na którą możesz sobie pozwolić.

Wypróbuj