Chrono Mock
LinguaItaliano

Un'alternativa a RunAsDate, con le parti che mancavano

RunAsDate è da anni la risposta a «esegui questo programma a una data diversa su Windows», ed è una buona risposta. Questa pagina riguarda dove i due differiscono e dove RunAsDate resta la scelta migliore.

Fianco a fianco

 RunAsDateChrono Mock
Esegue un'applicazione a una data falsasìsì
Lascia in pace l'orologio di sistemasìsì
Funzioni di tempo intercettate544 (30 spostati, 14 contati)
Orologio più veloce del tempo realenon offertoqualsiasi moltiplicatore intero
Congelare l'orologiosì, di defaultsì
Saltare mentre l'app è in esecuzionesolo il ritorno alla data reale, dopo un numero fisso di secondiavanti e indietro, verso qualsiasi momento
Fuso orario solo per quel processonon documentatosì, scostamento fisso
I processi figlio ereditano la sessionenon documentatosì
Agganciarsi a un'applicazione già in esecuzionesì, dalla versione 1.40no - avvia l'applicazione da sé
Più applicazioni con date diverse insiemesìno - una sessione alla volta
Ti dice se ha funzionatonoverdetto, per canale, con conteggio delle chiamate
Applicazioni Electron e Chromiumnon documentatomeccanismo separato
Riga di comando per la CIsìsì, con codici di uscita e JSON
Codice sorgentefreeware, chiusoGPL-3.0
Dimensione47 KB da scaricare, 57 KB per 64 bit~2,4 MB la riga di comando, ~70 MB con la finestra
Versioni vecchie di Windowsfino a Windows 2000Windows 10 e 11

«Non documentato» significa che la funzione non è menzionata nella pagina di RunAsDate. Non è un'affermazione che lo strumento ne sia privo. L'orologio di RunAsDate resta fermo a meno che la sua opzione Move the time forward according to the real time non sia attiva.

La differenza che conta di più

Non è il numero di canali. È che RunAsDate dice onestamente, nella propria documentazione, che «non influirà sulle applicazioni che ricavano la data e l'ora correnti da un'altra fonte» - e poi ti lascia scoprire se la tua è una di quelle.

Chrono Mock tratta quella stessa frase come qualcosa da misurare. Ogni sessione termina con un verdetto, i canali che l'applicazione ha davvero letto con un conteggio per ciascuno, i canali mancati e un avviso quando l'applicazione è stata vista aprire una connessione di rete prima ancora di chiedere l'ora all'orologio.

Un'applicazione che sembra spostata nel tempo ma non lo è è peggio di una che non è mai partita - produce un test superato che non significa nulla. Come funziona l'audit →

Cinque funzioni, o 44 canali

RunAsDate intercetta GetSystemTime, GetLocalTime, GetSystemTimeAsFileTime, NtQuerySystemTime e GetSystemTimePreciseAsFileTime. Per moltissime applicazioni è davvero sufficiente, perché è lì che si legge l'orologio a muro.

Il resto della superficie è dove il codice che dipende dalla data tende a nascondersi:

  • il fuso orario - le due funzioni che lo riportano, più le sei che convertono tra fusi, ed è così che un report finisce nel giorno sbagliato
  • l'asse del tempo trascorso - conteggi di tick e tempo di interrupt non distorto, che è ciò che di solito misura il conto alla rovescia di una prova
  • le pause, perché un ritardo sia un ritardo sull'orologio della sessione e non su quello reale, e le attese su oggetti, che vengono contate e mantengono la loro durata reale
  • timer - attendibili, di finestra, di thread pool e multimediali
  • creazione di processi, perché i figli di un installer girino nella stessa sessione invece che nel giorno di oggi
  • le connessioni di rete, contate come segno che l'ora può venire da un server

Dei 44, 30 passano sull'orologio della sessione. Gli altri 14 vengono solo contati e restano reali, così il report li elenca senza affermare che siano stati spostati. L'orologio a muro e il fuso orario vengono spostati in ogni sessione. L'asse del tempo trascorso e le attese vengono osservati quando lo chiedi con --scale-duration, il contatore ad alta risoluzione con --scale-qpc.

Quando RunAsDate è la scelta migliore

Davvero, e non di rado:

  • Ti serve una data, a velocità normale, subito. RunAsDate è un download di meno di 60 KB, non ha una finestra da imparare e fa esattamente questo da molti anni.
  • Sei su un Windows più vecchio. RunAsDate arriva fino a Windows 2000. Questo strumento punta a Windows 10 e 11 e non è testato su nulla di più vecchio.
  • Le dimensioni contano. 47 KB da scaricare contro ~2,4 MB per la riga di comando, o ~70 MB con la finestra, non è un confronto ravvicinato.
  • Non vuoi un verdetto. Misurare la copertura significa leggere il risultato. Se il test è usa e getta, è un costo che non avevi chiesto.
  • L'applicazione è già in esecuzione. RunAsDate sa agganciarsi a un processo in esecuzione dalla versione 1.40. Chrono Mock avvia l'applicazione da sé, quindi una che non si può riavviare resta fuori dalla sua portata.
  • Vuoi più applicazioni con date diverse insieme. RunAsDate dà a ciascuna la propria data. Chrono Mock gestisce una sessione alla volta.

I due possono anche convivere. Nulla qui ti impedisce di tenere RunAsDate per il caso rapido.

Per che cosa nessuno dei due è pensato

Entrambi gli strumenti compaiono nelle ricerche sul prolungamento dei periodi di prova. Questo non è costruito per quello, e nessun esempio, scenario o pagina qui lo dimostrerà mai. Chrono Mock serve a testare software di cui sei responsabile - la scadenza della tua licenza, la tua logica di rinnovo, il tuo report di fine mese.

È anche il caso con meno probabilità di funzionare. La protezione delle licenze legge regolarmente l'ora attraverso vie scelte perché siano difficili da intercettare - la pagina dati condivisa in modalità utente, le chiamate di sistema dirette, un server - e un orologio che va all'indietro è una condizione che quel codice è scritto per rilevare. L'audit ti dirà che non ha funzionato, che è la risposta onesta e non una risposta utile.

Provalo