HBASE-29968 Upgrade hbase-mapreduce to use junit5#8022
Conversation
(cherry picked from commit 0dc9652)
There was a problem hiding this comment.
Pull request overview
This PR (HBASE-29968, cherry-pick to branch-2.5) migrates the hbase-mapreduce test suite from JUnit 4 to JUnit 5 (Jupiter), aligning test annotations/assertions and updating module test dependencies accordingly.
Changes:
- Convert hbase-mapreduce tests from
org.junit.*toorg.junit.jupiter.*, including assertion API updates and replacing JUnit4@Categorywith JUnit5@Tag. - Update parameterized tests to JUnit5
@ParameterizedTest/@MethodSourceand replaceTestNamerule usage withTestInfoinjection. - Update hbase-mapreduce test dependencies (Mockito Jupiter) and remove the JUnit Vintage engine from the module.
Reviewed changes
Copilot reviewed 78 out of 78 changed files in this pull request and generated 2 comments.
Show a summary per file
| File | Description |
|---|---|
| hbase-server/src/test/java/org/apache/hadoop/hbase/replication/TestReplicationBase.java | Adds Jupiter lifecycle annotations to shared replication test base (used by mapreduce tests). |
| hbase-mapreduce/src/test/java/org/apache/hadoop/hbase/TestPerformanceEvaluation.java | Migrates assertions and test annotations to JUnit5; replaces Categories with Tags. |
| hbase-mapreduce/src/test/java/org/apache/hadoop/hbase/snapshot/TestExportSnapshotV2NoCluster.java | Minor formatting adjustment after JUnit5 tagging. |
| hbase-mapreduce/src/test/java/org/apache/hadoop/hbase/replication/TestVerifyReplicationSecureClusterCredentials.java | Converts to JUnit5 ParameterizedTest/MethodSource and updates lifecycle annotations. |
| hbase-mapreduce/src/test/java/org/apache/hadoop/hbase/replication/TestVerifyReplicationCrossDiffHdfs.java | Converts assertions/annotations to JUnit5 and replaces Categories with Tags. |
| hbase-mapreduce/src/test/java/org/apache/hadoop/hbase/replication/TestVerifyReplicationAdjunct.java | Migrates setup/teardown and assertions to JUnit5; replaces TestName rule with JUnit5 patterns. |
| hbase-mapreduce/src/test/java/org/apache/hadoop/hbase/replication/TestVerifyReplication.java | Migrates to JUnit5; replaces TestName rule with TestInfo injection for unique table names. |
| hbase-mapreduce/src/test/java/org/apache/hadoop/hbase/regionserver/TestCompactionToolNpeFix.java | Converts lifecycle hooks and tags to JUnit5. |
| hbase-mapreduce/src/test/java/org/apache/hadoop/hbase/regionserver/TestCompactionTool.java | Converts lifecycle hooks and tags to JUnit5. |
| hbase-mapreduce/src/test/java/org/apache/hadoop/hbase/mapreduce/TestWALRecordReader.java | Converts lifecycle hooks/assertions to JUnit5; replaces assertTrue(false, msg) with fail(msg). |
| hbase-mapreduce/src/test/java/org/apache/hadoop/hbase/mapreduce/TestWALPlayer.java | Migrates to JUnit5; replaces TestName rule usage with TestInfo for naming output dirs/tables. |
| hbase-mapreduce/src/test/java/org/apache/hadoop/hbase/mapreduce/TestWALInputFormat.java | Migrates to JUnit5 and adds mini-cluster setup for tests. |
| hbase-mapreduce/src/test/java/org/apache/hadoop/hbase/mapreduce/TestTimeRangeMapRed.java | Converts lifecycle hooks/assertions to JUnit5. |
| hbase-mapreduce/src/test/java/org/apache/hadoop/hbase/mapreduce/TestTableSplit.java | Replaces TestName rule usage with TestInfo; updates assertions to JUnit5. |
| hbase-mapreduce/src/test/java/org/apache/hadoop/hbase/mapreduce/TestTableSnapshotInputFormat.java | Migrates to JUnit5; replaces TestName rule with TestInfo-derived method name. |
| hbase-mapreduce/src/test/java/org/apache/hadoop/hbase/mapreduce/TestTableRecordReader.java | Converts @BeforeClass/@AfterClass to @BeforeAll/@AfterAll and tags to JUnit5. |
| hbase-mapreduce/src/test/java/org/apache/hadoop/hbase/mapreduce/TestTableOutputFormat.java | Converts lifecycle hooks/assertions and categories to JUnit5 tags. |
| hbase-mapreduce/src/test/java/org/apache/hadoop/hbase/mapreduce/TestTableMapReduceUtil.java | Converts teardown hook to @AfterEach and tags to JUnit5. |
| hbase-mapreduce/src/test/java/org/apache/hadoop/hbase/mapreduce/TestTableMapReduceBase.java | Converts @BeforeClass/@AfterClass to JUnit5 @BeforeAll/@AfterAll. |
| hbase-mapreduce/src/test/java/org/apache/hadoop/hbase/mapreduce/TestTableMapReduce.java | Converts JUnit4 expected-exception tests to assertThrows; updates tags. |
| hbase-mapreduce/src/test/java/org/apache/hadoop/hbase/mapreduce/TestTableInputFormatScanYZYToEmpty.java | Replaces Categories/ClassRule with JUnit5 tags. |
| hbase-mapreduce/src/test/java/org/apache/hadoop/hbase/mapreduce/TestTableInputFormatScanYYYToEmpty.java | Replaces Categories/ClassRule with JUnit5 tags. |
| hbase-mapreduce/src/test/java/org/apache/hadoop/hbase/mapreduce/TestTableInputFormatScanYYXToEmpty.java | Replaces Categories/ClassRule with JUnit5 tags. |
| hbase-mapreduce/src/test/java/org/apache/hadoop/hbase/mapreduce/TestTableInputFormatScanOPPToEmpty.java | Replaces Categories/ClassRule with JUnit5 tags. |
| hbase-mapreduce/src/test/java/org/apache/hadoop/hbase/mapreduce/TestTableInputFormatScanOBBToQPP.java | Replaces Categories/ClassRule with JUnit5 tags. |
| hbase-mapreduce/src/test/java/org/apache/hadoop/hbase/mapreduce/TestTableInputFormatScanOBBToOPP.java | Replaces Categories/ClassRule with JUnit5 tags. |
| hbase-mapreduce/src/test/java/org/apache/hadoop/hbase/mapreduce/TestTableInputFormatScanEmptyToOPP.java | Replaces Categories/ClassRule with JUnit5 tags. |
| hbase-mapreduce/src/test/java/org/apache/hadoop/hbase/mapreduce/TestTableInputFormatScanEmptyToEmpty.java | Replaces Categories/ClassRule with JUnit5 tags. |
| hbase-mapreduce/src/test/java/org/apache/hadoop/hbase/mapreduce/TestTableInputFormatScanEmptyToBBB.java | Replaces Categories/ClassRule with JUnit5 tags. |
| hbase-mapreduce/src/test/java/org/apache/hadoop/hbase/mapreduce/TestTableInputFormatScanEmptyToBBA.java | Replaces Categories/ClassRule with JUnit5 tags. |
| hbase-mapreduce/src/test/java/org/apache/hadoop/hbase/mapreduce/TestTableInputFormatScanEmptyToAPP.java | Replaces Categories/ClassRule with JUnit5 tags. |
| hbase-mapreduce/src/test/java/org/apache/hadoop/hbase/mapreduce/TestTableInputFormatScanBase.java | Converts class-level lifecycle and assertions to JUnit5 equivalents. |
| hbase-mapreduce/src/test/java/org/apache/hadoop/hbase/mapreduce/TestTableInputFormatScan.java | Replaces Categories/ClassRule with JUnit5 tags. |
| hbase-mapreduce/src/test/java/org/apache/hadoop/hbase/mapreduce/TestTableInputFormatBase.java | Updates assertions and Mockito imports for JUnit5-era conventions. |
| hbase-mapreduce/src/test/java/org/apache/hadoop/hbase/mapreduce/TestTableInputFormat.java | Converts expected-exception tests to assertThrows; updates lifecycle hooks to JUnit5. |
| hbase-mapreduce/src/test/java/org/apache/hadoop/hbase/mapreduce/TestSyncTable.java | Migrates to JUnit5; replaces TestName rule usage with TestInfo to generate unique table names/paths. |
| hbase-mapreduce/src/test/java/org/apache/hadoop/hbase/mapreduce/TestSimpleTotalOrderPartitioner.java | Converts Categories/ClassRule to JUnit5 tags and assertions. |
| hbase-mapreduce/src/test/java/org/apache/hadoop/hbase/mapreduce/TestRowCounter.java | Converts lifecycle hooks/assertions and categories to JUnit5 tags. |
| hbase-mapreduce/src/test/java/org/apache/hadoop/hbase/mapreduce/TestRoundRobinTableInputFormat.java | Converts assertions and Categories to JUnit5 tags. |
| hbase-mapreduce/src/test/java/org/apache/hadoop/hbase/mapreduce/TestRegionSizeCalculator.java | Converts assertions and Categories to JUnit5 tags. |
| hbase-mapreduce/src/test/java/org/apache/hadoop/hbase/mapreduce/TestMultithreadedTableMapper.java | Converts lifecycle hooks and Categories to JUnit5 tags. |
| hbase-mapreduce/src/test/java/org/apache/hadoop/hbase/mapreduce/TestMultiTableSnapshotInputFormatImpl.java | Converts to JUnit5 (BeforeEach/Tag) and updates assertions. |
| hbase-mapreduce/src/test/java/org/apache/hadoop/hbase/mapreduce/TestMultiTableSnapshotInputFormat.java | Converts class-level lifecycle annotations to JUnit5. |
| hbase-mapreduce/src/test/java/org/apache/hadoop/hbase/mapreduce/TestMultiTableInputFormatBase.java | Migrates from TestName rule to TestInfo; converts assertions to JUnit5. |
| hbase-mapreduce/src/test/java/org/apache/hadoop/hbase/mapreduce/TestMultiTableInputFormat.java | Converts to JUnit5 tags and lifecycle hooks. |
| hbase-mapreduce/src/test/java/org/apache/hadoop/hbase/mapreduce/TestJarFinder.java | Migrates assertions and tags to JUnit5. |
| hbase-mapreduce/src/test/java/org/apache/hadoop/hbase/mapreduce/TestImportTSVWithVisibilityLabels.java | Migrates to JUnit5; replaces TestName rule with TestInfo. |
| hbase-mapreduce/src/test/java/org/apache/hadoop/hbase/mapreduce/TestImportTSVWithTTLs.java | Migrates to JUnit5; replaces TestName rule with TestInfo. |
| hbase-mapreduce/src/test/java/org/apache/hadoop/hbase/mapreduce/TestImportTSVWithOperationAttributes.java | Migrates to JUnit5; replaces TestName rule with TestInfo. |
| hbase-mapreduce/src/test/java/org/apache/hadoop/hbase/mapreduce/TestImportTsvParser.java | Converts exception-expected tests to assertThrows and updates tags/assertions. |
| hbase-mapreduce/src/test/java/org/apache/hadoop/hbase/mapreduce/TestImportTsv.java | Converts expected-exception patterns to assertThrows and updates lifecycle hooks to JUnit5. |
| hbase-mapreduce/src/test/java/org/apache/hadoop/hbase/mapreduce/TestHRegionPartitioner.java | Migrates to JUnit5; replaces TestName rule with TestInfo. |
| hbase-mapreduce/src/test/java/org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2WithSecurity.java | Migrates to JUnit5; updates lifecycle hooks and tags. |
| hbase-mapreduce/src/test/java/org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.java | Migrates to JUnit5; replaces @Ignore with @Disabled; updates assertions. |
| hbase-mapreduce/src/test/java/org/apache/hadoop/hbase/mapreduce/TestHBaseMRTestingUtility.java | Migrates assertions and tags to JUnit5. |
| hbase-mapreduce/src/test/java/org/apache/hadoop/hbase/mapreduce/TestHashTable.java | Migrates to JUnit5; replaces TestName rule with TestInfo; updates assertions. |
| hbase-mapreduce/src/test/java/org/apache/hadoop/hbase/mapreduce/TestGroupingTableMapper.java | Converts Categories/ClassRule to JUnit5 tags. |
| hbase-mapreduce/src/test/java/org/apache/hadoop/hbase/mapreduce/TestCopyTableToPeerCluster.java | Migrates to JUnit5; replaces TestName usage with TestInfo for table naming. |
| hbase-mapreduce/src/test/java/org/apache/hadoop/hbase/mapreduce/TestCopyTable.java | Migrates to JUnit5; replaces TestName usage with TestInfo and updates shared base API. |
| hbase-mapreduce/src/test/java/org/apache/hadoop/hbase/mapreduce/TestCellCounter.java | Migrates to JUnit5; replaces TestName usage with TestInfo. |
| hbase-mapreduce/src/test/java/org/apache/hadoop/hbase/mapreduce/TestCellBasedWALPlayer2.java | Migrates to JUnit5; replaces TestName usage with TestInfo. |
| hbase-mapreduce/src/test/java/org/apache/hadoop/hbase/mapreduce/TestCellBasedImportExport2.java | Migrates to JUnit5; replaces TestName rule with TestInfo-derived method name field. |
| hbase-mapreduce/src/test/java/org/apache/hadoop/hbase/mapreduce/TestCellBasedHFileOutputFormat2.java | Migrates to JUnit5; replaces @Ignore with @Disabled; comments out manual main(). |
| hbase-mapreduce/src/test/java/org/apache/hadoop/hbase/mapreduce/TableSnapshotInputFormatTestBase.java | Migrates lifecycle hooks/assertions to JUnit5 equivalents. |
| hbase-mapreduce/src/test/java/org/apache/hadoop/hbase/mapreduce/MultiTableInputFormatTestBase.java | Migrates lifecycle hooks/assertions to JUnit5; adjusts logger target class. |
| hbase-mapreduce/src/test/java/org/apache/hadoop/hbase/mapreduce/CopyTableTestBase.java | Updates helper APIs to accept TestInfo (replacing TestName rule). |
| hbase-mapreduce/src/test/java/org/apache/hadoop/hbase/mapred/TestTableSnapshotInputFormat.java | Migrates mapred snapshot inputformat tests to JUnit5; replaces Ignore with Disabled and TestName with TestInfo. |
| hbase-mapreduce/src/test/java/org/apache/hadoop/hbase/mapred/TestTableOutputFormatConnectionExhaust.java | Migrates to JUnit5; updates lifecycle hooks and tags. |
| hbase-mapreduce/src/test/java/org/apache/hadoop/hbase/mapred/TestTableMapReduceUtil.java | Migrates to JUnit5; updates lifecycle hooks/tags and assertion imports. |
| hbase-mapreduce/src/test/java/org/apache/hadoop/hbase/mapred/TestTableMapReduce.java | Migrates to JUnit5 tags/assertions. |
| hbase-mapreduce/src/test/java/org/apache/hadoop/hbase/mapred/TestTableInputFormat.java | Migrates to JUnit5; converts expected-exception tests to assertThrows. |
| hbase-mapreduce/src/test/java/org/apache/hadoop/hbase/mapred/TestSplitTable.java | Migrates to JUnit5; replaces TestName rule with TestInfo and updates assertions. |
| hbase-mapreduce/src/test/java/org/apache/hadoop/hbase/mapred/TestRowCounter.java | Migrates to JUnit5 tags/assertions. |
| hbase-mapreduce/src/test/java/org/apache/hadoop/hbase/mapred/TestMultiTableSnapshotInputFormat.java | Migrates to JUnit5 tags/assertions while extending the mapreduce variant. |
| hbase-mapreduce/src/test/java/org/apache/hadoop/hbase/mapred/TestIdentityTableMap.java | Migrates to JUnit5 tags/assertions. |
| hbase-mapreduce/src/test/java/org/apache/hadoop/hbase/mapred/TestGroupingTableMap.java | Migrates to JUnit5 tags/assertions and updates assertion imports. |
| hbase-mapreduce/src/test/java/org/apache/hadoop/hbase/mapred/TestDriver.java | Migrates to JUnit5 tags/assertions. |
| hbase-mapreduce/pom.xml | Switches Mockito dependency to JUnit5 integration and removes vintage engine from test deps. |
Comments suppressed due to low confidence (3)
hbase-server/src/test/java/org/apache/hadoop/hbase/replication/TestReplicationBase.java:275
TestReplicationBaseis used by JUnit 5 tests in hbase-mapreduce (vintage engine removed), but its cluster cleanup method is still only annotated with JUnit4@AfterClass. Under JUnit 5 this teardown will not run, leaving MiniClusters/connections open and causing test hangs/leaks. Add JUnit5@AfterAlltotearDownAfterClass(and keep@AfterClassif you still need JUnit4 compatibility), and ensure teardown is executed exactly once.
hbase-mapreduce/src/test/java/org/apache/hadoop/hbase/mapreduce/TestWALInputFormat.java:52setupClassstarts a MiniCluster but there is no corresponding@AfterAllto shut it down. This can leak ZK/DFS threads across the test suite and cause flakiness. Add an@AfterAllmethod to callTEST_UTIL.shutdownMiniCluster()(and any other cleanup needed for WAL root dir).
hbase-mapreduce/src/test/java/org/apache/hadoop/hbase/replication/TestVerifyReplication.java:444TestReplicationBase.tearDownAfterClass()is invoked manually here. IfTestReplicationBaseis updated to use JUnit5@AfterAll(recommended for JUnit5 execution), this call will double-run teardown and may cause spurious failures. Prefer relying on a single teardown path (either annotate the base teardown with@AfterAlland remove this call, or keep manual teardown consistently in all subclasses).
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| TEST_UTIL.createWALRootDir(); | ||
| } | ||
|
|
There was a problem hiding this comment.
@Tag(MediumTests.TAG) is used but MediumTests is neither imported nor in this class’s previous classification (it imported SmallTests). This will not compile. Either change the tag to SmallTests.TAG or add the correct MediumTests import and update the intent consistently.
| <artifactId>junit-vintage-engine</artifactId> | ||
| <scope>test</scope> | ||
| </dependency> | ||
| <dependency> |
There was a problem hiding this comment.
With the removal of the vintage engine, this module still pulls in hbase-server test-jar classes (e.g., TestReplicationBase) that reference JUnit4 types (org.junit.* annotations/asserts). There is no explicit JUnit4 API dependency here, so tests can fail at runtime with missing org.junit.* classes. Add an explicit junit:junit (JUnit4 API) test-scope dependency (without vintage) or remove JUnit4 references from the shared test base classes used by this module.
| <dependency> | |
| <dependency> | |
| <groupId>junit</groupId> | |
| <artifactId>junit</artifactId> | |
| <scope>test</scope> | |
| </dependency> | |
| <dependency> |
(cherry picked from commit 0dc9652)