Testng: [BUG] TestNG secara default menonaktifkan pemuatan DTD dari Url yang tidak aman.

Dibuat pada 9 Okt 2020  ·  10Komentar  ·  Sumber: cbeust/testng

Versi TestNG

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

Perilaku yang diharapkan

Lempar pengecualian setelah membaca file testng-1.0.dtd dari sumber daya
image

Perilaku sebenarnya

File testng-1.0.dtd tidak dapat dibaca dari sumber daya

Apakah masalah dapat direproduksi pada runner?

IntelliJ v2020.2.3 (Plugin TestNG IDE versi 202.7660.26)

Komentar yang paling membantu

Benar, sepertinya "ganti semua" yang tidak terduga dari https://github.com/cbeust/testng/commit/cf22ccfcb2a34f9b0bb4fa8cbedae5297ddd2049

Semua 10 komentar

Saya pikir Anda hanya perlu menambahkan argumen VM '-Dtestng.dtd.http=true', atau menggunakan sumber daya HTTPS. Saat ini, TestNG membutuhkan HTTPS sebagai default dalam file suite.

@kobebryant2007 Ada bug yang jelas dalam kode.

  1. Saya tidak ingin menambahkan argumen dan saya tidak ingin file testng-1.0.dtd diambil alih jaringan.
  2. Jika Anda menambahkan tanda, maka berdasarkan kode, tidak masuk akal bagi saya untuk meletakkan file di sumber daya.

@juherr Mohon perhatiannya.

@shaburov -

Saya tidak ingin menambahkan argumen dan saya tidak ingin file testng-1.0.dtd diambil alih jaringan.

Berdasarkan pemahaman saya, alasan TestNG mencari DTD dari jaringan adalah untuk memastikan bahwa ia mengambil DTD terbaru/tepat. TestNG akan mencoba mengambil DTD dari situs web TestNG HANYA melalui protokol https dan jika tidak ditemukan, Anda akan melihat kesalahan itu. Satu-satunya cara untuk menonaktifkannya adalah dengan menggunakan argumen JVM yang disarankan @kobebryant2007 .

Jika Anda menambahkan tanda, maka berdasarkan kode, tidak masuk akal bagi saya untuk meletakkan file di sumber daya.

Bisakah Anda membantu saya memahami apa alasan di balik harapan ini bahwa TestNG adalah membaca file dari sumber daya lokal Anda? Jika disebutkan seperti itu di suatu tempat, tolong arahkan saya ke dokumentasi yang relevan. Semua dikatakan dan dilakukan, jika ada gangguan jaringan, maka TestNG secara default dibatalkan saat ini. Itu telah disortir sebagai bagian dari PR https://github.com/cbeust/testng/pull/2386 yang akan jatuh kembali ke DTD yang tertanam di dalam tabung TestNG. Saya menduga bahwa setelah PR digabungkan, maka Anda dapat membuat file testng dtd Anda di CLASSPATH Anda yang dapat diambil sebagai sumber daya.

@shaburov Apa yang Anda coba lakukan?

Tabung TestNG sudah termasuk DTD dan itu adalah yang seharusnya digunakan.

@juherr Lihatlah kode yang saya lampirkan pada tangkapan layar dan sadari bahwa ini bukan masalahnya.
Pengecualian akan dilempar sebelum file dibaca dari sumber daya.

Saya yakin masalahnya adalah IntelliJ tidak menggunakan HTTPS:
image

Atau bahwa URL non-HTTPS tidak ada dalam daftar URLS (perhatikan bahwa TESTNG_DTD_URL dan HTTPS_TESTNG_DTD_URL sama persis).
image

@algotastic yang kedua, saya percaya.

@shaburov benar, ini adalah bug:
https://github.com/cbeust/testng/blob/7.3.0/src/main/Java/org/testng/xml/Parser.java#L33
Seharusnya public static final String TESTNG_DTD_URL = "http://testng.org/" + TESTNG_DTD;

Dan ini https://github.com/cbeust/testng/blob/7.3.0/src/main/Java/org/testng/xml/Parser.java#L28
seharusnya public static final String OLD_TESTNG_DTD_URL = "http://beust.com/testng/" + TESTNG_DTD;

Benar, sepertinya "ganti semua" yang tidak terduga dari https://github.com/cbeust/testng/commit/cf22ccfcb2a34f9b0bb4fa8cbedae5297ddd2049

Saya boleh menambahkan '-Dtestng.dtd.http=true', tetapi ini membuat tidak mungkin menjalankan tes kelas/metode di IntelliJ (klik kanan dan jalankan) offline.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat