Testng: [BUG] TestNG désactive par défaut le chargement de DTD à partir d'URL non sécurisées.

Créé le 9 oct. 2020  ·  10Commentaires  ·  Source: cbeust/testng

Tester la version NG

<dependency>
    <groupId>org.testng</groupId>
    <artifactId>testng</artifactId>
    <version>7.3.0</version>
</dependency>

Comportement prévisible

Lever une exception après avoir lu le fichier testng-1.0.dtd à partir de la ressource
image

Comportement réel

Le fichier testng-1.0.dtd n'est pas lisible à partir des ressources

Le problème est-il reproductible sur le coureur ?

IntelliJ v2020.2.3 (Plugin TestNG IDE version 202.7660.26)

Commentaire le plus utile

À droite, cela ressemble à un "remplacer tout" inattendu de https://github.com/cbeust/testng/commit/cf22ccfcb2a34f9b0bb4fa8cbedae5297ddd2049

Tous les 10 commentaires

Je pense que vous avez juste besoin d'ajouter un argument de VM '-Dtestng.dtd.http=true', ou d'utiliser des ressources HTTPS. Actuellement, TestNG a besoin de HTTPS par défaut dans les fichiers de la suite.

@kobebryant2007 Il y a un bogue évident dans le code.

  1. Je ne veux pas ajouter d'argument et je ne veux pas que le fichier testng-1.0.dtd soit pris sur le réseau.
  2. Si vous ajoutez un indicateur, puis en fonction du code, cela n'a aucun sens pour moi de mettre le fichier dans les ressources.

@juherr Faites attention s'il vous plaît.

@shaburov -

Je ne veux pas ajouter d'argument et je ne veux pas que le fichier testng-1.0.dtd soit repris sur le réseau.

D'après ma compréhension, la raison pour laquelle TestNG recherche la DTD sur le réseau est de s'assurer qu'elle récupère la dernière DTD/correcte. TestNG essaiera de récupérer le DTD du site Web TestNG UNIQUEMENT via le protocole https et s'il n'est pas trouvé, vous verrez cette erreur. La seule façon de désactiver cela est d'utiliser cet argument JVM suggéré par @kobebryant2007 .

Si vous ajoutez un indicateur, puis en fonction du code, cela n'a aucun sens pour moi de mettre le fichier dans les ressources.

Pouvez-vous m'aider à comprendre quelle est la raison derrière cette attente que TestNG est de lire un fichier à partir de vos ressources locales ? Si cela est mentionné de cette façon à un endroit, veuillez m'indiquer la documentation pertinente. Tout compte fait, s'il y a des problèmes de réseau, alors TestNG par défaut abandonne actuellement. Cela a été réglé dans le cadre du PR https://github.com/cbeust/testng/pull/2386 qui reviendra à la DTD intégrée dans le pot TestNG. Je suppose qu'une fois le PR fusionné, vous pouvez créer votre fichier dtd testng dans votre CLASSPATH qui peut être récupéré en tant que ressource.

@shaburov Qu'essayez -vous de faire ?

Le jar TestNG contient déjà la DTD et c'est celle qui est censée être utilisée.

@juherr Regardez le code que j'ai joint à la capture d'écran et réalisez que ce n'est pas le cas.
Une exception sera levée avant que le fichier ne soit lu à partir des ressources.

Je pense que le problème est soit qu'IntelliJ n'utilise pas HTTPS :
image

Ou que l'URL non HTTPS n'est pas dans la liste URLS (notez que TESTNG_DTD_URL et HTTPS_TESTNG_DTD_URL sont exactement les mêmes).
image

@algotastic le deuxième, je crois.

@shaburov a raison, c'est un bug :
https://github.com/cbeust/testng/blob/7.3.0/src/main/java/org/testng/xml/Parser.java#L33
Il devrait être public static final String TESTNG_DTD_URL = "http://testng.org/" + TESTNG_DTD;

Et ceci https://github.com/cbeust/testng/blob/7.3.0/src/main/java/org/testng/xml/Parser.java#L28
devrait être public static final String OLD_TESTNG_DTD_URL = "http://beust.com/testng/" + TESTNG_DTD;

À droite, cela ressemble à un "remplacer tout" inattendu de https://github.com/cbeust/testng/commit/cf22ccfcb2a34f9b0bb4fa8cbedae5297ddd2049

Je peux ajouter '-Dtestng.dtd.http=true', mais cela rend impossible l'exécution de test d'une classe/méthode dans IntelliJ (clic droit et exécution) hors ligne.

Cette page vous a été utile?
0 / 5 - 0 notes