De systeemdatum wijzigen om een applicatie te testen
Het is de oudste truc die er is: de Windows-klok op de datum zetten die je wilt testen, het programma draaien en de klok terugzetten. Het werkt - en zolang de klok verzet is, verzet hij ook al het andere op de machine.
Wat er echt meeverschuift met de klok
De systeemklok is niet van alleen het programma dat je test. Elk proces, elke service en elk netwerkgesprek op de machine leest dezelfde, dus een wijziging voor één test is een wijziging voor allemaal.
| Wat de klok leest | Wat er gebeurt als je hem verzet |
|---|---|
| Domeinaanmelding en gedeelde mappen | Kerberos accepteert standaard een klokverschil van vijf minuten. Daarboven worden de tickets geweigerd en mislukt het aanmelden of het openen van een share. |
| Certificaten en HTTPS | Of een certificaat geldig is, wordt bepaald aan de hand van de klok. Zet hem voorbij de einddatum van een certificaat en elke verbinding die daarop steunt wordt geweigerd als verlopen; zet hem ver genoeg terug en het certificaat is nog niet geldig. |
| De Windows Time-service | Een machine in een domein haalt de tijd bij een domeincontroller, en standaard corrigeert de service de klok ongeacht de grootte van het verschil. De datum die je instelde kan ongedaan worden gemaakt terwijl je nog test. |
| Alles wat een tijd vastlegt | Bestanden, logs, databaserijen en verzonden e-mails die ontstaan terwijl de klok verzet is, dragen de testdatum en houden die nadat je de klok hebt teruggezet. |
| Software die de laatste gezien datum onthoudt | Sommige programma's lezen een klok die terugloopt als knoeien - en dat is precies wat er gebeurt als je de echte datum herstelt. |
Hoe verder de datum, hoe meer hiervan je tegenkomt. Een machine die op 2038 staat, ziet elk certificaat dat vandaag is uitgegeven als verlopen. 2038 testen zonder dat →
Het vraagt ook een recht dat de meeste accounts niet hebben: de systeemtijd wijzigen is een beheerdersrecht, en op een beheerde machine is het vaak niet aan jou.
Wanneer de klok verzetten het juiste antwoord is
Een virtuele machine die niemand anders gebruikt, met haar eigen kloksynchronisatie uitgeschakeld, is een prima testbank. Je gooit hem daarna weg, dus niets wat hij heeft vastgelegd doet ertoe. Als je er een hebt en de test één datum betreft, is het het simpelste dat werkt.
De problemen beginnen wanneer het de machine is waarop je werkt, die in het domein, of een machine waarop tegelijk iets draait dat niets mag merken.
Verzet in plaats daarvan de klok van één programma
De verschoven tijd is zichtbaar voor één proces en de kinderen die het start. Je domeinaanmelding, je certificaten en Windows Update zien hem nooit, dus niets uit de tabel hierboven verschuift - en er is niets om achteraf terug te zetten.
# De applicatie ziet 31 december 2027, 23:59:50. Al het andere houdt de echte datum. chrono run "C:\apps\test.exe" --at 2027-12-31T23:59:50 # Tien minuten voor middernacht starten en op x60 snelheid draaien - de jaarwisseling komt in tien seconden chrono run "C:\apps\test.exe" --at 2027-12-31T23:50:00 --mode x60
Of een voor één programma verschoven datum het ook echt bereikte, is niet iets om aan te nemen. Elke sessie eindigt met een oordeel en de lijst van tijdkanalen die het programma werkelijk las. Hoe weet je dat het gewerkt heeft →
Wat dit niet vervangt
- Een programma dat een server naar de tijd vraagt, ligt buiten het bereik van een lokale vervanging. De sessie meldt het als ze ziet dat het programma een netwerkverbinding opent, in plaats van je te laten aannemen dat de test geslaagd is.
- Het systeem zelf testen - een service die reageert op een wijziging van de echte klok, een geplande taak, hoe Windows zich rond een klokwijziging gedraagt - kent geen alternatief voor het verzetten van de klok, op een machine die je kunt missen.