Je dois tester des aspects de mon logiciel qui ne se produisent qu'à certains moments de la journée. Plutôt que d'attendre des journées entières (et d'arriver ici à 2 h 00), je voudrais changer l'heure.
Mais je préfère ne pas le changer définitivement .
Je sais que je peux changer l'heure en utilisant date
, puis la modifier à nouveau, mais y a-t-il une meilleure façon?
Le système d'exploitation en question est RHEL6 exécuté sur une machine virtuelle.
Réponses:
Il existe une bibliothèque appelée
libfaketime
(également sur GitHub ) qui vous permet de faire rapport du système à une heure donnée à votre application. Vous pouvez soit demander au système de signaler une heure fixe pour la durée de l'exécution du programme, soit démarrer l'horloge à une heure spécifique (par exemple, 01:59:30). Fondamentalement, vous connectez la bibliothèque faketime à l'image en mémoire de votre programme via le chargeur de bibliothèque, et il capture et gère à sa manière tous les appels système liés à l'heure système. Il n'a pas exactement changer l'heure du système, mais il change l' heure est signalé à votre application spécifique sans affecter tout ce qui est en cours d' exécution, ce qui est probablement ce que vous êtes vraiment après (sinon, je ne vois aucune raison de ne pas simplement changer le monde Le temps du système).Il existe un certain nombre de variantes possibles sur la façon de l'utiliser, mais il semble que Changer l'heure à laquelle un processus pense qu'il est avec libfaketime a une liste assez complète avec un exemple de code pour les essayer. Google devrait également être en mesure de dénicher quelques exemples, étant donné que vous savez quoi rechercher.
Il semblerait qu'il ne soit pas disponible préemballé via les référentiels RHEL, mais par exemple Debian le fournit sous le nom du paquet
faketime
. Il semble également simple de construire à partir du code source (il n'a apparemment même pas besoin d'uneconfigure
étape ou de quelque chose comme ça).la source
Ce que je ferais, c'est d'abord installer un
ntp
service pour synchroniser l'heure avec un serveur distant. Ensuite, arrêtez le service, modifiez manuellement la date, jouez et redémarrez le service:la source