Esegui un'app Windows a qualsiasi data - senza toccare l'orologio di sistema
Porta l'orologio di una sola applicazione all'anno prossimo, congelalo, oppure accelerane il tempo perché una prova di 30 giorni scada mentre ti fai un caffè. Il resto della macchina mantiene l'ora reale: l'accesso al dominio, i certificati e tutti gli altri programmi continuano come sempre.
Poi ti dice se la sostituzione ha davvero funzionato.
Gratuito e open source, GPL-3.0 Portatile o installato Nessun diritto di amministratore per eseguirlo Non si connette mai a internet
Com'è una sessione
23:59:50
18:12:33
Perché esiste
Testare qualsiasi cosa dipenda dalla data significa spostare il tempo. Le due strade solite sono entrambe sbagliate.
Scadenza delle licenze, periodi di prova, rinnovi di abbonamento, validità dei certificati, durata dei token, chiusure di fine mese e di fine anno, maturazione degli interessi, promemoria.
Strada 1 - cambiare l'orologio di sistema
Rompe l'accesso al dominio e Kerberos, invalida i certificati TLS al punto che il browser smette di funzionare, confonde Windows Update e fa scrivere timestamp sbagliati a tutte le altre applicazioni della macchina. Su una macchina unita a un dominio, i criteri di gruppo di solito bloccano la modifica o la annullano dopo pochi minuti, quindi il test non è nemmeno ripetibile.
Strada 2 - aspettare
Che significa: non testare. I casi che dipendono dalla data vengono saltati, e «la licenza non scade mai» arriva al cliente.
Cosa fa
Un solo processo si muove nel tempo. Tutto il resto della macchina no.
Qualsiasi momento
Una data e un'ora precise, oppure un momento relativo - +30 days, -1 year.
Che scorre, congelato o accelerato
Velocità normale, un orologio fermo o un moltiplicatore intero. x1440 trasforma un
giorno in un minuto.
Un fuso orario tutto suo
Uno scostamento fisso solo per quel processo, mentre il fuso del sistema resta esattamente dov'era.
I processi figlio vengono con lui
Gli installer e i launcher avviano processi figlio. Senza questo, il test copre solo metà di ciò che è stato eseguito.
Salti a sessione in corso
In avanti o indietro - compreso il salto all'indietro che fa un portatile dopo essersi risincronizzato con un server orario.
Anche Electron e Chromium
Con un meccanismo diverso, perché il loro orologio vive in un renderer isolato che l'iniezione non raggiunge.
Quello che nessun altro fa
Come fai a sapere che ha funzionato?
Con qualsiasi altro strumento, non lo sai. L'applicazione parte, mostra una data qualsiasi e tu dai per scontato che sia giusta. Ma può leggere l'orologio da un canale che lo strumento non ha mai intercettato - da un server, da un database, attraverso uno strato del runtime - e allora «il test è passato» non significa niente.
- →Un verdetto prima che inizi il test vero: funziona / funziona in parte / non funziona
- →Quali dei 44 canali temporali sono stati coperti e quante volte l'applicazione ha interrogato ciascuno
- →Quali non lo sono stati - detto chiaramente, mai omesso
- →Avvisi con le relative conseguenze: «questa applicazione legge l'ora dalla rete - la sostituzione locale potrebbe non bastare»
Due minuti con lo strumento
Una finestra per esplorare, una riga di comando per la CI. Lo stesso motore dietro entrambe.
# Eseguire un'applicazione come se fosse l'ultimo secondo del 2027 chrono run "C:\apps\test.exe" --at 2027-12-31T23:59:59 # Vedere scadere una prova di 30 giorni mentre fai un caffè: x1440 è un giorno al minuto chrono run "C:\apps\test.exe" --mode x1440 # Usare uno scenario con nome invece di una data e scrivere la prova in un file chrono run "C:\apps\test.exe" --preset year-rollover --report session.txt
Il calcolatore risponde all'altra metà del test sulle date - quale data usare:
$ chrono calc --preset year-2038 --zone +00:00 Chrono Mock - date calculator preset: year-2038 - 2038 boundary explains: Does the app survive the 32-bit Unix time boundary (2038-01-19T03:14:07Z)? base: 2038-01-19T03:14:07 result: 2038-01-19T03:14:07 formats: ISO date 2038-01-19 ISO datetime 2038-01-19T03:14:07+00:00 US 01/19/2038 PL 19.01.2038 epoch (s) 2147483647 epoch (ms) 2147483647000 FILETIME 137919572470000000 RFC 1123 Tue, 19 Jan 2038 03:14:07 GMT ... what this date lands on: at or past the 2038-01-19T03:14:07Z 32-bit time_t limit (Y2038)
Rispetto a quello che probabilmente usi
Come RunAsDate, con le parti che mancavano
RunAsDate intercetta cinque funzioni dell'orologio a muro e lo fa bene. Ecco in cosa i due differiscono - e la pagina completa dice anche dove RunAsDate resta la scelta migliore.
| RunAsDate | Chrono Mock | |
|---|---|---|
| Esegue un'app a una data falsa | sì | sì |
| Canali temporali intercettati | 5 | 44 (30 spostati, 14 contati) |
| Accelerare l'orologio | no | sì |
| Fuso orario indipendente | non documentato | sì |
| Segue i processi figlio | non documentato | sì |
| Ti dice se ha funzionato | no | sì, per canale |
| Codice sorgente disponibile | freeware, chiuso | GPL-3.0 |
Scaricalo
Decomprimi dove vuoi ed esegui, oppure installa l'.msi firmato per ogni account
del computer. Eseguirlo non richiede diritti di amministratore e gli zip non scrivono nulla
nel registro.