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 zegar | Co się dzieje, gdy go przestawisz |
|---|---|
| Logowanie do domeny i foldery sieciowe | Kerberos 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 HTTPS | To, 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 Windows | Komputer 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 czas | Pliki, 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ć.