2017-09-18 1 views
1

J'ai un test qui appelle GetTempPathW et essaie de créer des fichiers temporaires dans le répertoire retourné. Lorsque je lance le test directement, GetTempPathW renvoie C:\Users\sgreens\AppData\Local\Temp\ et cela passe. Lorsque je l'exécute avec bazel test, il renvoie C:\Windows\ et le test ne peut pas y créer de fichiers.L'exécution avec Bazel rend le retour GetTempPath C: Windows

Des documentation of GetTempPath:

La fonction vérifie GetTempPath pour l'existence de variables environnement dans l'ordre suivant et utilise le premier chemin trouvé:

  1. Le chemin spécifié par la variable d'environnement TMP .
  2. Le chemin spécifié par la variable d'environnement TEMP.
  3. Le chemin spécifié par la variable d'environnement USERPROFILE.
  4. Le répertoire Windows.

Dans la fenêtre cmd je cours bazel de:

C:\Users\sgreens\yeti\yeti>echo %TMP% 
C:\Users\sgreens\AppData\Local\Temp 

C:\Users\sgreens\yeti\yeti>echo %TEMP% 
C:\Users\sgreens\AppData\Local\Temp 

C:\Users\sgreens\yeti\yeti>echo %USERPROFILE% 
C:\Users\sgreens 

C:\Users\sgreens\yeti\yeti>echo %WINDIR% 
C:\WINDOWS 

Dans le crosstool généré lorsque je construis:

env_entry { 
    key: "TMP" 
    value: "C:\\Users\\sgreens\\AppData\\Local\\Temp" 
    } 
    env_entry { 
    key: "TEMP" 
    value: "C:\\Users\\sgreens\\AppData\\Local\\Temp" 
    } 

Que Bazel fait pour provoquer GetTempPath revenir C:\Windows\? Comment puis-je le réparer?

question connexe Peut-être: '$' sign in the output base make all tests failed on windows

Répondre

2

Lorsque vous exécutez le test directement, vous courez dans votre environnement de commande normale. Le test voit les mêmes variables d'environnement que vous, c'est-à-dire qu'il utilise les variables TMP/TEMP que vous avez imprimées. Lorsque vous exécutez le test avec bazel test, Bazel l'exécute dans un environnement réduit, avec le moins de variables d'environnement possible. Bazel fait ceci pour rendre le test aussi reproductible que possible: si le test dépendait de l'environnement client, alors changer une variable d'environnement peut le laisser passer ou le faire échouer, et nous ne voulons pas d'un tel comportement imprévisible.

Ceci est un problème connu, et je travaille activement à résoudre: https://github.com/bazelbuild/bazel/issues/2870

Une solution pour vous est d'utiliser --test_env=TMP. Ce drapeau indique à Bazel de copier votre valeur TMP dans l'environnement du test.