HBASE-29968 Upgrade hbase-mapreduce to use junit5#7992
HBASE-29968 Upgrade hbase-mapreduce to use junit5#7992liuxiaocs7 merged 1 commit intoapache:branch-3from
Conversation
liuxiaocs7
commented
Mar 27, 2026
- for branch-3
- see HBASE-29968
There was a problem hiding this comment.
Pull request overview
Upgrades the hbase-mapreduce test suite to JUnit 5 (Jupiter) to align with HBASE-29968 and remove reliance on the JUnit Vintage engine.
Changes:
- Migrates JUnit 4 tests to JUnit 5 (assertions, lifecycle annotations, categories → tags, rules →
TestInfo) - Converts parameterized tests to JUnit 5
@ParameterizedTest/@MethodSource - Updates test dependencies (Mockito JUnit Jupiter) and removes
junit-vintage-enginefromhbase-mapreduce
Reviewed changes
Copilot reviewed 87 out of 87 changed files in this pull request and generated 1 comment.
Show a summary per file
| File | Description |
|---|---|
| hbase-server/src/test/java/org/apache/hadoop/hbase/replication/TestReplicationBase.java | Adds Jupiter lifecycle annotations to a shared replication test base used by mapreduce tests. |
| hbase-mapreduce/pom.xml | Switches to Mockito’s JUnit 5 integration and removes JUnit Vintage engine from this module. |
| hbase-mapreduce/src/test/java/org/apache/hadoop/hbase/snapshot/TestExportSnapshotV2NoCluster.java | Minor formatting change while migrating to JUnit 5 conventions. |
| hbase-mapreduce/src/test/java/org/apache/hadoop/hbase/replication/VerifyReplicationTestBase.java | Migrates replication verification base tests to JUnit 5 (TestInfo, Jupiter lifecycle, assertions). |
| hbase-mapreduce/src/test/java/org/apache/hadoop/hbase/replication/TestVerifyReplicationZkConnectionUri.java | Replaces JUnit 4 categories/class rules with JUnit 5 tags. |
| hbase-mapreduce/src/test/java/org/apache/hadoop/hbase/replication/TestVerifyReplicationZkClusterKey.java | Replaces JUnit 4 categories/class rules with JUnit 5 tags. |
| hbase-mapreduce/src/test/java/org/apache/hadoop/hbase/replication/TestVerifyReplicationSecureClusterCredentials.java | Converts JUnit 4 parameterized test to JUnit 5 @ParameterizedTest + @MethodSource. |
| hbase-mapreduce/src/test/java/org/apache/hadoop/hbase/replication/TestVerifyReplicationRpcConnectionUri.java | Replaces JUnit 4 categories/class rules with JUnit 5 tags. |
| hbase-mapreduce/src/test/java/org/apache/hadoop/hbase/replication/TestVerifyReplicationRecompareRunnable.java | Migrates Mockito runner usage to JUnit 5 extension; updates assertions/lifecycle. |
| hbase-mapreduce/src/test/java/org/apache/hadoop/hbase/replication/TestVerifyReplicationCrossDiffHdfs.java | Migrates to JUnit 5 lifecycle, tags, and assertions. |
| hbase-mapreduce/src/test/java/org/apache/hadoop/hbase/replication/TestVerifyReplicationAdjunct.java | Migrates to JUnit 5 lifecycle/tags and replaces TestName with TestInfo. |
| hbase-mapreduce/src/test/java/org/apache/hadoop/hbase/regionserver/TestCompactionToolNpeFix.java | Migrates to JUnit 5 lifecycle/tags and assertions. |
| hbase-mapreduce/src/test/java/org/apache/hadoop/hbase/regionserver/TestCompactionTool.java | Migrates to JUnit 5 lifecycle/tags and assertions. |
| hbase-mapreduce/src/test/java/org/apache/hadoop/hbase/mapreduce/TestWALRecordReader.java | Migrates to JUnit 5, including replacing assertTrue(..., false) with fail(...). |
| hbase-mapreduce/src/test/java/org/apache/hadoop/hbase/mapreduce/TestWALPlayer.java | Migrates to JUnit 5 and replaces TestName with TestInfo. |
| hbase-mapreduce/src/test/java/org/apache/hadoop/hbase/mapreduce/TestWALInputFormat.java | Migrates to JUnit 5 lifecycle/tags and assertions. |
| hbase-mapreduce/src/test/java/org/apache/hadoop/hbase/mapreduce/TestTimeRangeMapRed.java | Migrates to JUnit 5 lifecycle/tags and assertions. |
| hbase-mapreduce/src/test/java/org/apache/hadoop/hbase/mapreduce/TestTableSplit.java | Migrates to JUnit 5 tags and TestInfo-based naming. |
| hbase-mapreduce/src/test/java/org/apache/hadoop/hbase/mapreduce/TestTableSnapshotInputFormat.java | Migrates to JUnit 5; replaces TestName rule with TestInfo. |
| hbase-mapreduce/src/test/java/org/apache/hadoop/hbase/mapreduce/TestTableRecordReader.java | Migrates to JUnit 5 lifecycle/tags and assertions. |
| hbase-mapreduce/src/test/java/org/apache/hadoop/hbase/mapreduce/TestTableOutputFormat.java | Migrates to JUnit 5 lifecycle/tags and assertions. |
| hbase-mapreduce/src/test/java/org/apache/hadoop/hbase/mapreduce/TestTableMapReduceUtil.java | Migrates to JUnit 5 tags and assertions. |
| hbase-mapreduce/src/test/java/org/apache/hadoop/hbase/mapreduce/TestTableMapReduceBase.java | Migrates base class lifecycle to JUnit 5. |
| hbase-mapreduce/src/test/java/org/apache/hadoop/hbase/mapreduce/TestTableMapReduce.java | Migrates to JUnit 5 tags and exception assertions (assertThrows). |
| hbase-mapreduce/src/test/java/org/apache/hadoop/hbase/mapreduce/TestTableInputFormatScanYZYToEmpty.java | Migrates categories/class rules to JUnit 5 tags. |
| hbase-mapreduce/src/test/java/org/apache/hadoop/hbase/mapreduce/TestTableInputFormatScanYYYToEmpty.java | Migrates categories/class rules to JUnit 5 tags. |
| hbase-mapreduce/src/test/java/org/apache/hadoop/hbase/mapreduce/TestTableInputFormatScanYYXToEmpty.java | Migrates categories/class rules to JUnit 5 tags. |
| hbase-mapreduce/src/test/java/org/apache/hadoop/hbase/mapreduce/TestTableInputFormatScanOPPToEmpty.java | Migrates categories/class rules to JUnit 5 tags. |
| hbase-mapreduce/src/test/java/org/apache/hadoop/hbase/mapreduce/TestTableInputFormatScanOBBToQPP.java | Migrates categories/class rules to JUnit 5 tags. |
| hbase-mapreduce/src/test/java/org/apache/hadoop/hbase/mapreduce/TestTableInputFormatScanOBBToOPP.java | Migrates categories/class rules to JUnit 5 tags. |
| hbase-mapreduce/src/test/java/org/apache/hadoop/hbase/mapreduce/TestTableInputFormatScanEmptyToOPP.java | Migrates categories/class rules to JUnit 5 tags. |
| hbase-mapreduce/src/test/java/org/apache/hadoop/hbase/mapreduce/TestTableInputFormatScanEmptyToEmpty.java | Migrates categories/class rules to JUnit 5 tags. |
| hbase-mapreduce/src/test/java/org/apache/hadoop/hbase/mapreduce/TestTableInputFormatScanEmptyToBBB.java | Migrates categories/class rules to JUnit 5 tags. |
| hbase-mapreduce/src/test/java/org/apache/hadoop/hbase/mapreduce/TestTableInputFormatScanEmptyToBBA.java | Migrates categories/class rules to JUnit 5 tags. |
| hbase-mapreduce/src/test/java/org/apache/hadoop/hbase/mapreduce/TestTableInputFormatScanEmptyToAPP.java | Migrates categories/class rules to JUnit 5 tags. |
| hbase-mapreduce/src/test/java/org/apache/hadoop/hbase/mapreduce/TestTableInputFormatScanBase.java | Migrates to JUnit 5 lifecycle and assertion signatures. |
| hbase-mapreduce/src/test/java/org/apache/hadoop/hbase/mapreduce/TestTableInputFormatScan.java | Migrates categories/class rules to JUnit 5 tags. |
| hbase-mapreduce/src/test/java/org/apache/hadoop/hbase/mapreduce/TestTableInputFormatBase.java | Migrates categories/class rules to JUnit 5 tags. |
| hbase-mapreduce/src/test/java/org/apache/hadoop/hbase/mapreduce/TestTableInputFormat.java | Migrates to JUnit 5 lifecycle/tags and exception testing via assertThrows. |
| hbase-mapreduce/src/test/java/org/apache/hadoop/hbase/mapreduce/TestSyncTable.java | Migrates to JUnit 5 and replaces TestName rule with TestInfo. |
| hbase-mapreduce/src/test/java/org/apache/hadoop/hbase/mapreduce/TestSimpleTotalOrderPartitioner.java | Migrates categories/class rules to JUnit 5 tags. |
| hbase-mapreduce/src/test/java/org/apache/hadoop/hbase/mapreduce/TestRowCounter.java | Migrates to JUnit 5 lifecycle/tags and assertions. |
| hbase-mapreduce/src/test/java/org/apache/hadoop/hbase/mapreduce/TestRoundRobinTableInputFormat.java | Migrates categories/class rules to JUnit 5 tags. |
| hbase-mapreduce/src/test/java/org/apache/hadoop/hbase/mapreduce/TestRegionSizeCalculator.java | Migrates categories/class rules to JUnit 5 tags. |
| hbase-mapreduce/src/test/java/org/apache/hadoop/hbase/mapreduce/TestMultithreadedTableMapper.java | Migrates to JUnit 5 lifecycle/tags and assertions. |
| hbase-mapreduce/src/test/java/org/apache/hadoop/hbase/mapreduce/TestMultiTableSnapshotInputFormatImpl.java | Migrates to JUnit 5 lifecycle/tags and assertions. |
| hbase-mapreduce/src/test/java/org/apache/hadoop/hbase/mapreduce/TestMultiTableSnapshotInputFormat.java | Migrates to JUnit 5 lifecycle/tags. |
| hbase-mapreduce/src/test/java/org/apache/hadoop/hbase/mapreduce/TestMultiTableInputFormatBase.java | Migrates to JUnit 5 tags and TestInfo-based naming. |
| hbase-mapreduce/src/test/java/org/apache/hadoop/hbase/mapreduce/TestMultiTableInputFormat.java | Migrates to JUnit 5 lifecycle/tags. |
| hbase-mapreduce/src/test/java/org/apache/hadoop/hbase/mapreduce/TestMRIncrementalLoadWithLocality.java | Converts JUnit 4 parameterized test to JUnit 5 @ParameterizedTest. |
| hbase-mapreduce/src/test/java/org/apache/hadoop/hbase/mapreduce/TestMRIncrementalLoad.java | Converts JUnit 4 parameterized test to JUnit 5 @ParameterizedTest. |
| hbase-mapreduce/src/test/java/org/apache/hadoop/hbase/mapreduce/TestJarFinder.java | Migrates categories/class rules to JUnit 5 tags and assertions. |
| hbase-mapreduce/src/test/java/org/apache/hadoop/hbase/mapreduce/TestImportTsvParser.java | Migrates to JUnit 5 tags and replaces expected-exception annotations with assertThrows. |
| hbase-mapreduce/src/test/java/org/apache/hadoop/hbase/mapreduce/TestImportTsv.java | Migrates to JUnit 5 lifecycle/tags; replaces ExpectedException with assertThrows. |
| hbase-mapreduce/src/test/java/org/apache/hadoop/hbase/mapreduce/TestImportTSVWithVisibilityLabels.java | Migrates to JUnit 5 lifecycle/tags and replaces TestName with TestInfo. |
| hbase-mapreduce/src/test/java/org/apache/hadoop/hbase/mapreduce/TestImportTSVWithTTLs.java | Migrates to JUnit 5 lifecycle/tags and replaces TestName with TestInfo. |
| hbase-mapreduce/src/test/java/org/apache/hadoop/hbase/mapreduce/TestImportTSVWithOperationAttributes.java | Migrates to JUnit 5 lifecycle/tags and replaces TestName with TestInfo. |
| hbase-mapreduce/src/test/java/org/apache/hadoop/hbase/mapreduce/TestImportExport.java | Normalizes JUnit 5 @Tag usage via import. |
| hbase-mapreduce/src/test/java/org/apache/hadoop/hbase/mapreduce/TestHashTable.java | Migrates to JUnit 5 lifecycle/tags and replaces TestName with TestInfo. |
| hbase-mapreduce/src/test/java/org/apache/hadoop/hbase/mapreduce/TestHRegionPartitioner.java | Migrates to JUnit 5 lifecycle/tags and replaces TestName with TestInfo. |
| hbase-mapreduce/src/test/java/org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2WithSecurity.java | Migrates to JUnit 5 lifecycle/tags. |
| hbase-mapreduce/src/test/java/org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.java | Migrates ignore/annotations and assertions to JUnit 5 equivalents. |
| hbase-mapreduce/src/test/java/org/apache/hadoop/hbase/mapreduce/TestHBaseMRTestingUtility.java | Migrates categories/class rules to JUnit 5 tags and assertion signatures. |
| hbase-mapreduce/src/test/java/org/apache/hadoop/hbase/mapreduce/TestGroupingTableMapper.java | Migrates categories/class rules to JUnit 5 tags. |
| hbase-mapreduce/src/test/java/org/apache/hadoop/hbase/mapreduce/TestCopyTableToPeerClusterWithZkUri.java | Migrates categories/class rules to JUnit 5 tags. |
| hbase-mapreduce/src/test/java/org/apache/hadoop/hbase/mapreduce/TestCopyTableToPeerClusterWithRpcUri.java | Migrates categories/class rules to JUnit 5 tags. |
| hbase-mapreduce/src/test/java/org/apache/hadoop/hbase/mapreduce/TestCopyTableToPeerClusterWithClusterKey.java | Migrates categories/class rules to JUnit 5 tags. |
| hbase-mapreduce/src/test/java/org/apache/hadoop/hbase/mapreduce/TestCopyTable.java | Migrates to JUnit 5 lifecycle/tags and replaces TestName with TestInfo. |
| hbase-mapreduce/src/test/java/org/apache/hadoop/hbase/mapreduce/TestConfigurePartitioner.java | Migrates to JUnit 5 lifecycle/tags. |
| hbase-mapreduce/src/test/java/org/apache/hadoop/hbase/mapreduce/TestCellCounter.java | Migrates to JUnit 5 lifecycle/tags and replaces TestName with TestInfo. |
| hbase-mapreduce/src/test/java/org/apache/hadoop/hbase/mapreduce/TableSnapshotInputFormatTestBase.java | Migrates to JUnit 5 lifecycle and assertions. |
| hbase-mapreduce/src/test/java/org/apache/hadoop/hbase/mapreduce/MultiTableInputFormatTestBase.java | Migrates to JUnit 5 lifecycle and assertions. |
| hbase-mapreduce/src/test/java/org/apache/hadoop/hbase/mapreduce/MRIncrementalLoadTestBase.java | Refactors parameterized support for JUnit 5 and updates assertion signatures. |
| hbase-mapreduce/src/test/java/org/apache/hadoop/hbase/mapreduce/HFileOutputFormat2TestBase.java | Migrates to JUnit 5 assertions. |
| hbase-mapreduce/src/test/java/org/apache/hadoop/hbase/mapreduce/CopyTableToPeerClusterTestBase.java | Migrates to JUnit 5 lifecycle and replaces TestName with TestInfo. |
| hbase-mapreduce/src/test/java/org/apache/hadoop/hbase/mapreduce/CopyTableTestBase.java | Adapts shared test helpers to use TestInfo instead of TestName rule. |
| hbase-mapreduce/src/test/java/org/apache/hadoop/hbase/mapred/TestTableSnapshotInputFormat.java | Migrates mapred snapshot input format tests to JUnit 5 lifecycle/tags. |
| hbase-mapreduce/src/test/java/org/apache/hadoop/hbase/mapred/TestTableOutputFormatConnectionExhaust.java | Migrates to JUnit 5 lifecycle/tags and assertion signatures. |
| hbase-mapreduce/src/test/java/org/apache/hadoop/hbase/mapred/TestTableMapReduceUtil.java | Migrates mapred tests to JUnit 5 lifecycle/tags and assertions. |
| hbase-mapreduce/src/test/java/org/apache/hadoop/hbase/mapred/TestTableMapReduce.java | Migrates categories/class rules to JUnit 5 tags. |
| hbase-mapreduce/src/test/java/org/apache/hadoop/hbase/mapred/TestTableInputFormat.java | Migrates to JUnit 5 lifecycle/tags and exception testing via assertThrows. |
| hbase-mapreduce/src/test/java/org/apache/hadoop/hbase/mapred/TestSplitTable.java | Migrates to JUnit 5 tags and replaces TestName with TestInfo. |
| hbase-mapreduce/src/test/java/org/apache/hadoop/hbase/mapred/TestRowCounter.java | Migrates categories/class rules to JUnit 5 tags. |
| hbase-mapreduce/src/test/java/org/apache/hadoop/hbase/mapred/TestMultiTableSnapshotInputFormat.java | Migrates categories/class rules to JUnit 5 tags. |
| hbase-mapreduce/src/test/java/org/apache/hadoop/hbase/mapred/TestIdentityTableMap.java | Migrates categories/class rules to JUnit 5 tags. |
| hbase-mapreduce/src/test/java/org/apache/hadoop/hbase/mapred/TestGroupingTableMap.java | Migrates categories/class rules to JUnit 5 tags and assertions. |
| hbase-mapreduce/src/test/java/org/apache/hadoop/hbase/mapred/TestDriver.java | Migrates categories/class rules to JUnit 5 tags. |
Comments suppressed due to low confidence (3)
hbase-mapreduce/src/test/java/org/apache/hadoop/hbase/replication/VerifyReplicationTestBase.java:1
VerifyReplicationTestBaseextendsTestReplicationBase, which already declares an@AfterAllteardown. In JUnit 5, superclass@AfterAllmethods are executed automatically, so explicitly callingTestReplicationBase.tearDownAfterClass()here can cause the base teardown to run twice (double-closing tables, shutting down clusters twice, etc.). Remove the explicit call and rely on Jupiter's inherited lifecycle behavior; keep only the subclass-specific cleanup (htable3.close()).
hbase-server/src/test/java/org/apache/hadoop/hbase/replication/TestReplicationBase.java:1- The same lifecycle method is annotated with both JUnit 4 (
@BeforeClass) and JUnit 5 (@BeforeAll). If both JUnit Vintage and Jupiter engines are enabled for a given module/surefire configuration, this can execute twice and cause test flakiness (e.g., double-starting mini clusters). Prefer using only the JUnit 5 annotations in this shared base now that mapreduce is moving to Jupiter, or ensure only one engine is active where this class is executed.
hbase-mapreduce/src/test/java/org/apache/hadoop/hbase/mapreduce/TestTableSnapshotInputFormat.java:1 - Using
assertEquals(null, ...)makes failures harder to read and loses intent. PreferassertNull(...)for null checks in JUnit 5.
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| assertEquals(0, HBaseTestingUtil.countRows(table), "Should start with empty table"); | ||
| int numRegions = r.getStartKeys().length; | ||
| assertEquals("Should make " + regionNum + " regions", numRegions, regionNum); | ||
| assertEquals(numRegions, regionNum, "Should make " + regionNum + " regions"); |
There was a problem hiding this comment.
In JUnit 5, assertEquals(expected, actual, message) reports expected vs actual values on failure. Here numRegions (actual) and regionNum (expected) are reversed, which will produce confusing diagnostics if the assertion fails. Swap the arguments so regionNum is the expected value and numRegions is the actual value.
| assertEquals(numRegions, regionNum, "Should make " + regionNum + " regions"); | |
| assertEquals(regionNum, numRegions, "Should make " + regionNum + " regions"); |