HBASE-30124 Upgrade hbase-server to use junit5 Part14#8151
HBASE-30124 Upgrade hbase-server to use junit5 Part14#8151liuxiaocs7 wants to merge 2 commits intoapache:masterfrom
Conversation
liuxiaocs7
commented
Apr 27, 2026
- see: HBASE-30124
There was a problem hiding this comment.
Pull request overview
Migrates a large set of hbase-server tests from JUnit 4 to JUnit Jupiter (JUnit 5) as part of the ongoing HBASE-30124 upgrade effort.
Changes:
- Replaces JUnit4 annotations/rules/categories (
@Before/@After,@BeforeClass/@AfterClass,@Rule,@Category,@RunWith(Parameterized.class)) with JUnit5 equivalents (@BeforeEach/@AfterEach,@BeforeAll/@AfterAll,@Tag,@TestTemplate, extensions). - Updates assertions to
org.junit.jupiter.api.Assertionssignatures (including message-parameter ordering changes). - Converts several parameterized tests to use
@HBaseParameterizedTestTemplatewithparameters()returningStream<Arguments>and constructor injection.
Reviewed changes
Copilot reviewed 83 out of 83 changed files in this pull request and generated 4 comments.
Show a summary per file
| File | Description |
|---|---|
| hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/wal/WALDurabilityTestBase.java | Switches to JUnit5 lifecycle and assertions; replaces TestName rule usage. |
| hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/wal/TestWALSyncTimeoutException.java | Migrates to JUnit5 annotations/tags and Assertions; removes JUnit4 rules/categories. |
| hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/wal/TestWALReplayValueCompression.java | Migrates to JUnit5 and adjusts inheritance/override patterns for WAL creation. |
| hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/wal/TestWALReplayCompressed.java | Migrates to JUnit5 and adjusts inheritance/override patterns for WAL creation. |
| hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/wal/TestWALReplayBoundedLogWriterCreation.java | Migrates to JUnit5 and refactors setup/WAL creation hooks. |
| hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.java | Adds JUnit5 @BeforeAll and factors WAL creation into helper for reuse. |
| hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/wal/TestWALEdit.java | Migrates to JUnit5 tags/tests/assertions. |
| hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/wal/TestWALConfiguration.java | Converts parameterized test to @HBaseParameterizedTestTemplate + @TestTemplate. |
| hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/wal/TestWALCellCodecWithCompression.java | Converts to @HBaseParameterizedTestTemplate + @TestTemplate, updates assertions/import conflicts. |
| hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/wal/TestWALActionsListener.java | Migrates to JUnit5 lifecycle and tags. |
| hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/wal/TestSyncFutureCache.java | Migrates to JUnit5 tags/tests/assertions. |
| hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/wal/TestSyncFuture.java | Replaces JUnit4 expected-exception style with assertThrows. |
| hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/wal/TestSequenceIdAccounting.java | Migrates to JUnit5 assertions/tags and updates message ordering. |
| hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/wal/TestSecureWALReplay.java | Migrates to JUnit5 and adjusts setup + WAL creation override. |
| hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/wal/TestSecureAsyncWALReplay.java | Migrates to JUnit5 setup/tags. |
| hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/wal/TestProtobufLog.java | Migrates to JUnit5 tags and removes JUnit4 class rule. |
| hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/wal/TestMetricsWAL.java | Migrates to JUnit5 and replaces TestName rule with TestInfo. |
| hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/wal/TestLogRollingNoCluster.java | Migrates to JUnit5 tags/assertions. |
| hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/wal/TestLogRolling.java | Migrates to JUnit5 tags/setup and updates assertion message ordering. |
| hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/wal/TestLogRollPeriod.java | Migrates to JUnit5 and explicitly invokes base-class setup. |
| hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/wal/TestLogRollAbort.java | Converts parameterized JUnit4 test to @HBaseParameterizedTestTemplate + @TestTemplate. |
| hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/wal/TestHBaseWalOnEC.java | Converts parameterized JUnit4 test to @HBaseParameterizedTestTemplate + lifecycle updates. |
| hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/wal/TestFSWALEntry.java | Migrates to JUnit5 tags/tests/assertions. |
| hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/wal/TestFSHLogDurability.java | Migrates to JUnit5 tags and corrects test classification usage. |
| hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/wal/TestFSHLog.java | Migrates to JUnit5; replaces TestName rule usage with TestInfo. |
| hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/wal/TestDurability.java | Converts parameterized JUnit4 test to @HBaseParameterizedTestTemplate + @TestTemplate. |
| hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/wal/TestCustomWALCellCodec.java | Migrates to JUnit5 and replaces expected-exception annotation with assertThrows. |
| hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/wal/TestCompressor.java | Migrates to JUnit5 and replaces expected-exception annotation with assertThrows. |
| hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/wal/TestCombinedAsyncWriter.java | Migrates to JUnit5; replaces TestName rule usage with TestInfo. |
| hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/wal/TestAsyncWALReplayValueCompression.java | Migrates to JUnit5 setup/tags. |
| hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/wal/TestAsyncWALReplayCompressed.java | Migrates to JUnit5 setup/tags. |
| hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/wal/TestAsyncWALReplay.java | Migrates to JUnit5 lifecycle; ensures setup is executed only for this class via TestInfo. |
| hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/wal/TestAsyncProtobufLog.java | Migrates to JUnit5 lifecycle/tags. |
| hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/wal/TestAsyncLogRolling.java | Migrates to JUnit5 lifecycle/tags. |
| hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/wal/TestAsyncLogRollPeriod.java | Migrates to JUnit5 and explicitly invokes base-class setup. |
| hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/wal/TestAsyncFSWALRollStuck.java | Migrates to JUnit5 lifecycle/tags. |
| hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/wal/TestAsyncFSWALDurability.java | Migrates to JUnit5 tags/lifecycle and corrects test classification usage. |
| hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/wal/TestAsyncFSWAL.java | Migrates to JUnit5 lifecycle/tags and adapts to base test-name changes. |
| hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/wal/ProtobufLogTestHelper.java | Migrates assertions to JUnit5. |
| hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/wal/AbstractTestWALReplay.java | Migrates to JUnit5 lifecycle and replaces TestName rule usage with TestInfo. |
| hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/wal/AbstractTestProtobufLog.java | Migrates to JUnit5 lifecycle and replaces TestName rule usage with TestInfo. |
| hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/wal/AbstractTestLogRolling.java | Migrates to JUnit5 lifecycle; replaces TestName rule usage with TestInfo. |
| hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/wal/AbstractTestLogRollPeriod.java | Migrates to JUnit5 teardown; setup invoked explicitly by subclasses. |
| hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/wal/AbstractTestFSWAL.java | Migrates to JUnit5 lifecycle; replaces TestName rule usage with TestInfo; converts expected exceptions to assertThrows. |
| hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/throttle/TestStoreHotnessProtector.java | Migrates to JUnit5 tags/tests/assertions. |
| hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/throttle/TestFlushWithThroughputController.java | Migrates to JUnit5 lifecycle/tags; replaces TestName rule usage with TestInfo. |
| hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/throttle/TestCompactionWithThroughputController.java | Migrates to JUnit5 tags/tests/assertions. |
| hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/storefiletracker/TestStoreFileTrackerValidationUtils.java | Migrates to JUnit5 tags/tests/assertions. |
| hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/storefiletracker/TestStoreFileTrackerFactory.java | Migrates to JUnit5 tags/tests/assertions. |
| hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/storefiletracker/TestStoreFileListFilePrinter.java | Migrates to JUnit5; replaces deprecated TableNameTestRule with TableNameTestExtension. |
| hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/storefiletracker/TestStoreFileListFile.java | Migrates to JUnit5 lifecycle/tags; replaces TestName rule usage with TestInfo. |
| hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/storefiletracker/TestRegionWithFileBasedStoreFileTracker.java | Migrates to JUnit5 lifecycle/tags; replaces TestName rule usage with TestInfo. |
| hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/storefiletracker/TestMigrationStoreFileTracker.java | Converts parameterized JUnit4 test to @HBaseParameterizedTestTemplate + @TestTemplate. |
| hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/storefiletracker/TestChangeStoreFileTracker.java | Migrates to JUnit5; replaces deprecated TableNameTestRule with TableNameTestExtension; converts expected exceptions to assertThrows. |
| hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/regionreplication/TestStartupWithLegacyRegionReplicationEndpoint.java | Migrates to JUnit5 lifecycle/tags/assertions. |
| hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/regionreplication/TestRegionReplicationSinkCallbackAndFlushConcurrently.java | Migrates to JUnit5 lifecycle/tags/assertions. |
| hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/regionreplication/TestRegionReplicationSink.java | Migrates to JUnit5 lifecycle; replaces deprecated TableNameTestRule with TableNameTestExtension. |
| hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/regionreplication/TestRegionReplicationForWriteException.java | Migrates to JUnit5 lifecycle/tags/assertions. |
| hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/regionreplication/TestRegionReplicationForSkipWAL.java | Migrates to JUnit5 lifecycle/tags/assertions. |
| hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/regionreplication/TestRegionReplicationForFlushMarker.java | Migrates to JUnit5 lifecycle/tags/assertions. |
| hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/regionreplication/TestRegionReplicationFlushRequester.java | Migrates to JUnit5 lifecycle/tags/assertions. |
| hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/regionreplication/TestRegionReplicationBufferManager.java | Migrates to JUnit5 lifecycle/tags/assertions. |
| hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/querymatcher/TestUserScanQueryMatcher.java | Migrates to JUnit5 tags/tests/assertions with updated message ordering. |
| hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/querymatcher/TestScanWildcardColumnTracker.java | Migrates to JUnit5 tags/tests/assertions. |
| hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/querymatcher/TestScanDeleteTracker.java | Migrates to JUnit5 lifecycle/tags/assertions; replaces wildcard static import. |
| hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/querymatcher/TestNewVersionBehaviorTracker.java | Migrates to JUnit5 tags/tests/assertions. |
| hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/querymatcher/TestExplicitColumnTracker.java | Migrates to JUnit5 tags/tests/assertions. |
| hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/querymatcher/TestCompactionScanQueryMatcher.java | Migrates to JUnit5 tags/tests/assertions with updated message ordering. |
| hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/querymatcher/AbstractTestScanQueryMatcher.java | Migrates setup from @Before to @BeforeEach. |
| hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/metrics/TestMetricsThrottleExceptions.java | Migrates to JUnit5 lifecycle/tags/assertions. |
| hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/http/TestRSStatusPage.java | Migrates to JUnit5 lifecycle/tags; replaces TestName rule usage with TestInfo. |
| hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/compactions/TestStripeCompactor.java | Converts parameterized JUnit4 test to @HBaseParameterizedTestTemplate + @TestTemplate. |
| hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/compactions/TestStripeCompactionPolicy.java | Converts parameterized JUnit4 test to @HBaseParameterizedTestTemplate + @TestTemplate. |
| hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/compactions/TestRowKeyDateTieringValueProvider.java | Migrates to JUnit5 lifecycle/tags and converts expected exceptions to assertThrows. |
| hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/compactions/TestOffPeakHours.java | Migrates to JUnit5 lifecycle/tags/assertions. |
| hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/compactions/TestFIFOCompactionPolicy.java | Migrates to JUnit5; replaces ExpectedException rule with assertThrows + message assertions. |
| hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/compactions/TestDateTieredCompactor.java | Converts parameterized JUnit4 test to @HBaseParameterizedTestTemplate + @TestTemplate. |
| hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/compactions/TestCustomCellTieredCompactor.java | Migrates to JUnit5 lifecycle/tags/assertions. |
| hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/compactions/TestCurrentHourProvider.java | Migrates to JUnit5 tags/tests/assertions. |
| hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/compactions/TestCompactor.java | Migrates assertions to JUnit5 and updates message ordering. |
| hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/compactions/TestCompactedHFilesDischarger.java | Migrates to JUnit5 lifecycle/tags/assertions with updated message ordering. |
| hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/compactions/TestCloseChecker.java | Migrates to JUnit5 tags/tests/assertions. |
| hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/compactions/PerfTestCompactionPolicies.java | Converts parameterized JUnit4 test to @HBaseParameterizedTestTemplate + @TestTemplate. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| @TestTemplate | ||
| public void testEncodeDecodeOffKVsWithTagsWithTagsCompression() throws Exception { | ||
| doTest(true, false); | ||
| } |
There was a problem hiding this comment.
testEncodeDecodeOffKVsWithTagsWithTagsCompression currently calls doTest(true, false), which exercises the on-heap KV path. Given the test name and doTest(..., offheapKV) signature, this should likely pass true for the offheapKV argument so the off-heap encoding/decoding path is actually covered.
There was a problem hiding this comment.
Will file another jira to resolve this issue
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 83 out of 83 changed files in this pull request and generated no new comments.
Comments suppressed due to low confidence (5)
hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/wal/AbstractTestLogRollPeriod.java:1
setUpBeforeClassis no longer annotated, so it won't run under JUnit 5. This will likely break subclasses (e.g.,TestLogRollPeriod,TestAsyncLogRollPeriod) that depend on the mini cluster being started here. Add@BeforeAll(and the corresponding import) to this method.
hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/wal/AbstractTestWALReplay.java:1setUpBeforeClasslost its lifecycle annotation during the JUnit 4 -> 5 migration, so it will not execute automatically for concrete subclasses. Since this is the shared base for WAL replay tests (and already has an@AfterAllteardown), restore a@BeforeAllannotation here instead of relying on each subclass to call it manually.
hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/throttle/TestStoreHotnessProtector.java:1- JUnit Jupiter's
assertEqualssignature isassertEquals(expected, actual), but these calls are usingactualfirst. While equality checks still pass when values match, failures will report inverted expected/actual and can be misleading. Swap argument order (or useassertNull(exception.get())for the first assertion).
hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/wal/TestSyncFuture.java:1 - This
assertThrowsblock includes assertions for behavior that should not throw (the firstget(timeout)), and it will stop executing at the first thrown exception. To make the test intent clearer and ensure the non-throwing path is always verified, keepassertEquals(txid, syncFuture.get(timeout))outside theassertThrows, and wrap only the finalsyncFuture.reset(...).get(timeout)call.
hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/wal/AbstractTestLogRolling.java:1 - There are two
@BeforeEachmethods in the same class, and JUnit 5 does not guarantee a stable execution order across JVMs/tools. IfsetUp()or downstream methods rely onnamebeing initialized first, this can become flaky. Prefer foldingnameinitialization intosetUp(TestInfo testInfo)(single@BeforeEach) or otherwise ensuring deterministic ordering.
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
# Conflicts: # hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/wal/TestLogRollAbort.java