ノート

[BUG] 8372325: Refactor tests under jdk/java/net/httpclient to use ${test.main.class}

HttpClient 配下のテストの @run タグを ${test.main.class} へ置き換えました。

概要#

 test/jdk/java/net/httpclient 配下の​多数の​テストでは,​JTReg​(OpenJDK 独自の​リグレッション・テスト・フレームワーク)​ の​ @run タグに​テスト・クラス名を​直接書いていました。​ た​とえば,​以下のような​指定です。

@run junit/othervm AltServiceUsageTest

 しかしながら,​このように​自己参照的な​テスト・クラス名が​コード内に​あると,​少々​厄介な​問題が​生じます。​ テストは​往々に​して​コピ・ペされる​ものですから,​これの​変更を​忘れると​意図しない​テストを​実行してしまいます。

 これを​受けて​ JTReg 7.5.2 からは​ ${test.main.class} と​いう​プレース・ホルダが​導入されました1。​ これは​ JTReg アノテーションが​付けられた​クラスを​メタ的に​指定する​もので,​ 例えば​ Main クラスに​ @run ${test.main.class} が​ついていれば​ @run Main と​いう​ふうに​なります。

 さて,​今回の​修正では​このような​ @run タグ上の​明示的な​クラス名を​ ${test.main.class} に​置き換えるようにしました。

@run junit/othervm ${test.main.class}

 変更対象は​ 313 ファイルで,​機械的な​置換が​中心です2

2026/03/18 JBS で​発見#

 本件を​ JBS で​発見し,java/net/httpclient 配下の​テストを​確認しました。​ @run タグに​テスト・クラス名を​直接書いている​ファイルが​多数​あり,​形式も​ mainjunitothervmtimeout 付きなど複数ありました。

 PR では​ @run タグで​実行対象と​して​現れる​クラス名だけを​ ${test.main.class} へ​置き換える​方​針に​しました3。​ 一方で​ @build に​残っている​明示的な​クラス名は,​ビルド依存と​して​別の​意味を​持つ​可能性が​ある​ため,​この​ PR では​触らない​ことにしました。

 変更量は​大きい​ものの,​内容は​以下のような​単純な​置換です。

- * @run main/othervm BasicAuthTest
+ * @run main/othervm ${test.main.class}
- * @run main/othervm CertificateTest GOOD_CERT expectSuccess
+ * @run main/othervm ${test.main.class} GOOD_CERT expectSuccess

2026/04/02 レビュー対応#

 Daniel Fuchs 氏4から,​差分を​確認したうえで,master の​変更を​取り込んで​ conflict を​解消するようコメントを​いただきました。

 また,​SendaoYan 氏5から,HttpClientExceptionTest の​ @build や​システム・プロパティ中の​クラス名も​ ${test.main.class} に​できるか,と​いう​コメントを​いただきました。​ これに​ついては​ Fuchs 氏4に​よると,@build 句や​システム・プロパティは​この​ PR では​触らない方が​よいとの​ことでした。

 ​その​後,​SendaoYan 氏5から​ HttpVersionsTest.java が​漏れているとの​指摘が​あり,​これを​追加で​修正しました。

2026/04/09 レビュー#

 SendaoYan 氏5と​ Fuchs 氏4に​レビューを​いただき,​Approve されました。​ レビューを​確認したのち,/integrate を​行いました。

2026/04/09 統合#

 Fuchs 氏4に​ /sponsor を​していただき,261011a6 と​して​ JDK へ​統合されました。


Footnotes#

  1. 2 3 4
  2. 2 3