Test 22 - Gestion des timestamps dans le futur

Ce test vérifie le comportement de bake comparé à make lorsque le fichier source a un timestamp dans le futur par rapport à l'heure système actuelle.

Sommaire

Structure du test

test-22-future-timestamp/
├── README.md         # Ce fichier
├── bake/             
│   ├── Bakefile      # Fichier de règles pour bake
│   ├── bakefile.jar  # Exécutable de bake (JAR)
│   └── main.c        # Fichier source C (avec timestamp dans le futur)
└── make/
    ├── Makefile      # Fichier de règles pour make
    └── main.c        # Fichier source C (avec timestamp dans le futur)

Contenu des fichiers de règles

Les fichiers Makefile et Bakefile contiennent les mêmes règles simples :

main: main.c
	gcc -o main main.c

Objectif du test

Ce test vérifie que bake se comporte comme make face à un cas particulier : quand un fichier source a une date de modification dans le futur (postérieure à la date système actuelle). Ce scénario peut se produire en pratique lors de changements de fuseau horaire, de synchronisations imparfaites entre systèmes de fichiers réseau, ou de manipulations manuelles des timestamps.

Scénario de test

Le test suit les étapes suivantes :

  1. Compiler initialement le programme pour créer l'exécutable main
  2. Modifier le timestamp du fichier source main.c pour le placer dans le futur (+ 1 jour)
  3. Exécuter à nouveau make/bake pour voir comment ils réagissent
  4. Vérifier si les exécutables sont reconstruits ou non

Comment exécuter le test

Test manuel

  1. Pour Make :

    cd make
    make
    # Modifier le timestamp du fichier source pour le mettre dans le futur
    touch -t $(date -d "+1 day" "+%Y%m%d%H%M.%S") main.c
    make
    
  2. Pour Bake :

    cd bake
    java -cp bakefile.jar fr.monlouyan.bakefile.Main
    # Modifier le timestamp du fichier source pour le mettre dans le futur
    touch -t $(date -d "+1 day" "+%Y%m%d%H%M.%S") main.c
    java -cp bakefile.jar fr.monlouyan.bakefile.Main
    
  3. Comparez visuellement les deux résultats.

Résultats attendus

  • Le comportement standard de Make est de reconstruire l'exécutable si le fichier source a un timestamp dans le futur
  • bake devrait adopter le même comportement et reconstruire l'exécutable
  • Les messages de sortie devraient indiquer la reconstruction