Lancez une application Windows à n'importe quelle date - sans toucher à l'horloge système
Réglez l'horloge d'une seule application sur l'année prochaine, figez-la, ou accélérez-la pour qu'un essai de 30 jours expire le temps de faire un café. Le reste de la machine garde l'heure réelle : votre connexion au domaine, vos certificats et tous les autres programmes continuent comme d'habitude.
Ensuite, il vous dit si la substitution a vraiment fonctionné.
Gratuit et open source, GPL-3.0 Portable ou installé Aucun droit d'administrateur pour l'exécuter Ne se connecte jamais à Internet
À quoi ressemble une session
23:59:50
18:12:33
Pourquoi cet outil existe
Tester tout ce qui dépend d'une date oblige à déplacer le temps. Les deux solutions habituelles sont mauvaises.
Expiration de licence, périodes d'essai, renouvellements d'abonnement, validité des certificats, durée de vie des jetons, clôtures de fin de mois et d'année, calcul d'intérêts, rappels.
Solution 1 - changer l'horloge système
Cela casse l'ouverture de session sur le domaine et Kerberos, invalide les certificats TLS au point que le navigateur ne marche plus, perturbe Windows Update et fait écrire de mauvais horodatages à toutes les autres applications de la machine. Sur une machine jointe à un domaine, la stratégie de groupe bloque généralement le changement ou l'annule quelques minutes plus tard, et le test n'est donc même pas reproductible.
Solution 2 - attendre
Ce qui veut dire : ne pas tester. Les cas qui dépendent de la date sont sautés, et « la licence n'expire jamais » part chez le client.
Ce qu'il fait
Un seul processus voyage dans le temps. Le reste de la machine, non.
N'importe quel moment
Une date et une heure précises, ou un moment relatif - +30 days, -1 year.
Qui s'écoule, figé ou accéléré
Vitesse normale, horloge arrêtée, ou multiplicateur entier. x1440 fait d'une
journée une minute.
Son propre fuseau horaire
Un décalage fixe pour ce seul processus, pendant que le fuseau du système reste exactement où il était.
Les processus enfants suivent
Les installateurs et les lanceurs créent des processus enfants. Sans cela, le test ne couvre que la moitié de ce qui s'est exécuté.
Des sauts en pleine session
En avant ou en arrière - y compris le saut en arrière que fait un portable après s'être resynchronisé avec un serveur de temps.
Electron et Chromium aussi
Par un autre mécanisme, car leur horloge vit dans un moteur de rendu isolé où l'injection n'arrive pas.
Ce que personne d'autre ne fait
Comment savoir si cela a fonctionné ?
Avec tous les autres outils, vous ne le savez pas. L'application démarre, affiche une date, et vous supposez. Mais elle peut lire l'horloge par un canal que l'outil n'a jamais intercepté - depuis un serveur, une base de données, une couche d'exécution - et alors « le test est passé » ne veut plus rien dire.
- →Un verdict avant le début du vrai test : fonctionne / fonctionne partiellement / ne fonctionne pas
- →Lesquels des 44 canaux de temps ont été couverts, et combien de fois l'application a interrogé chacun
- →Lesquels ne l'ont pas été - dits clairement, jamais omis
- →Des avertissements avec leurs conséquences : « cette application lit l'heure sur le réseau - la substitution locale peut ne pas suffire »
Deux minutes pour l'essayer
Une fenêtre pour explorer, une ligne de commande pour la CI. Le même moteur derrière les deux.
# Exécuter une application comme si c'était la dernière seconde de 2027 chrono run "C:\apps\test.exe" --at 2027-12-31T23:59:59 # Voir expirer un essai de 30 jours le temps d'un café : x1440, c'est un jour par minute chrono run "C:\apps\test.exe" --mode x1440 # Utiliser un scénario nommé plutôt qu'une date, et écrire la preuve dans un fichier chrono run "C:\apps\test.exe" --preset year-rollover --report session.txt
Le calculateur répond à l'autre moitié du test de dates - quelle date utiliser :
$ 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)
Comparé à ce que vous utilisez probablement
Comme RunAsDate, avec les parties qui manquaient
RunAsDate intercepte cinq fonctions d'horloge murale et le fait bien. Voici où les deux diffèrent - et la page complète dit aussi dans quels cas RunAsDate reste le meilleur choix.
| RunAsDate | Chrono Mock | |
|---|---|---|
| Lance une appli à une fausse date | oui | oui |
| Canaux de temps interceptés | 5 | 44 (30 décalés, 14 comptés) |
| Accélérer l'horloge | non | oui |
| Fuseau horaire indépendant | non documenté | oui |
| Suit les processus enfants | non documenté | oui |
| Dit si cela a fonctionné | non | oui, par canal |
| Code source disponible | freeware, code fermé | GPL-3.0 |
L'obtenir
Décompressez n'importe où et lancez, ou installez le .msi signé pour chaque
compte de la machine. L'exécution n'exige aucun droit d'administrateur, et les archives zip
n'écrivent rien dans le registre.