Skip to content

HBASE-29968 Upgrade hbase-mapreduce to use junit5#8022

Merged
liuxiaocs7 merged 4 commits into
apache:branch-2.5from
liuxiaocs7:HBASE-29968-branch-2.5
Apr 4, 2026
Merged

HBASE-29968 Upgrade hbase-mapreduce to use junit5#8022
liuxiaocs7 merged 4 commits into
apache:branch-2.5from
liuxiaocs7:HBASE-29968-branch-2.5

Conversation

@liuxiaocs7
Copy link
Copy Markdown
Member

(cherry picked from commit 0dc9652)

@liuxiaocs7 liuxiaocs7 requested a review from Copilot April 3, 2026 07:30
@liuxiaocs7 liuxiaocs7 added the backport This PR is a back port of some issue or issues already committed to master label Apr 3, 2026
Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.* to org.junit.jupiter.*, including assertion API updates and replacing JUnit4 @Category with JUnit5 @Tag.
  • Update parameterized tests to JUnit5 @ParameterizedTest/@MethodSource and replace TestName rule usage with TestInfo injection.
  • 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

  • TestReplicationBase is 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 @AfterAll to tearDownAfterClass (and keep @AfterClass if you still need JUnit4 compatibility), and ensure teardown is executed exactly once.
    hbase-mapreduce/src/test/java/org/apache/hadoop/hbase/mapreduce/TestWALInputFormat.java:52
  • setupClass starts a MiniCluster but there is no corresponding @AfterAll to shut it down. This can leak ZK/DFS threads across the test suite and cause flakiness. Add an @AfterAll method to call TEST_UTIL.shutdownMiniCluster() (and any other cleanup needed for WAL root dir).
    hbase-mapreduce/src/test/java/org/apache/hadoop/hbase/replication/TestVerifyReplication.java:444
  • TestReplicationBase.tearDownAfterClass() is invoked manually here. If TestReplicationBase is 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 @AfterAll and 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.

Comment on lines +43 to 45
TEST_UTIL.createWALRootDir();
}

Copy link

Copilot AI Apr 3, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@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.

Copilot uses AI. Check for mistakes.
Comment thread hbase-mapreduce/pom.xml
<artifactId>junit-vintage-engine</artifactId>
<scope>test</scope>
</dependency>
<dependency>
Copy link

Copilot AI Apr 3, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

Suggested change
<dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
<dependency>

Copilot uses AI. Check for mistakes.
@liuxiaocs7 liuxiaocs7 merged commit bdf76a5 into apache:branch-2.5 Apr 4, 2026
28 of 30 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

backport This PR is a back port of some issue or issues already committed to master

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants