HBASE-30136 Upgrade hbase-server to use junit5 Part15#8185
HBASE-30136 Upgrade hbase-server to use junit5 Part15#8185liuxiaocs7 wants to merge 3 commits intoapache:masterfrom
Conversation
liuxiaocs7
commented
May 3, 2026
- see HBASE-30136
There was a problem hiding this comment.
Pull request overview
Migrates a large set of hbase-server unit tests from JUnit 4 to JUnit 5 as part of the ongoing HBASE-30136 effort, aligning tests with Jupiter annotations/assertions and updating parameterization patterns used across the codebase.
Changes:
- Replaces JUnit4 annotations/rules (
@Before,@After,@Rule,@RunWith(Parameterized.class),@Category, etc.) with JUnit5 equivalents (@BeforeEach,@AfterEach,@Tag,@TestTemplate, etc.). - Updates assertions to
org.junit.jupiter.api.Assertionsand refactors expected-exception patterns toassertThrows. - Converts parameterized tests to use
@HBaseParameterizedTestTemplate/ Jupiter parameter sources and updates temp-dir usage fromTemporaryFolderto@TempDir.
Reviewed changes
Copilot reviewed 57 out of 57 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/storefiletracker/TestChangeStoreFileTracker.java | Replace TableName JUnit extension usage with TestInfo and JUnit5 lifecycle. |
| hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestGetClosestAtOrBefore.java | Convert JUnit4 rules/categories to JUnit5 @Tag + TestInfo. |
| hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestFlushRegionEntry.java | Migrate lifecycle and assertions to JUnit5. |
| hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestFlushLifeCycleTracker.java | Migrate categories/lifecycle hooks to JUnit5. |
| hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestFailedAppendAndSync.java | Replace JUnit4 rule-based naming and assertions with JUnit5 equivalents. |
| hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestFSErrorsExposed.java | Move from Assume/rules to Jupiter Assumptions + TestInfo. |
| hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestEndToEndSplitTransaction.java | Convert lifecycle, categories, and assertion signatures to JUnit5. |
| hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestEncryptionRandomKeying.java | Convert lifecycle/categories/assertions to JUnit5. |
| hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestEncryptionKeyRotation.java | Convert lifecycle/rules to JUnit5 TestInfo + assertion updates. |
| hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestEncryptionDisabled.java | Replace ExpectedException rule with assertThrows and JUnit5 lifecycle. |
| hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestDirectStoreSplitsMerges.java | Replace rules/categories with JUnit5 @Tag and TestInfo. |
| hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestDeleteMobTable.java | Migrate JUnit4 Assert usage and lifecycle to JUnit5. |
| hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestDefaultStoreEngine.java | Replace JUnit4 asserts/categories with JUnit5 equivalents. |
| hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestDefaultMemStore.java | Convert lifecycle/rules to JUnit5 TestInfo and update assertion signatures. |
| hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestDefaultCompactSelection.java | Replace JUnit4 categories/asserts with JUnit5. |
| hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestDateTieredCompactionPolicyOverflow.java | Replace categories/rules with JUnit5 tags. |
| hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestDateTieredCompactionPolicyHeterogeneousStorage.java | Replace categories/rules with JUnit5 tags. |
| hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestDateTieredCompactionPolicy.java | Replace categories/rules with JUnit5 tags. |
| hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestDataTieringManager.java | Replace categories/rules/assertions with JUnit5 equivalents. |
| hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestDataBlockEncodingTool.java | Replace JUnit4 lifecycle/categories with JUnit5; resolve Tag name conflict. |
| hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestCustomCellTieredCompactionPolicy.java | Replace categories/assertions with JUnit5 equivalents. |
| hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestCustomCellDataTieringManager.java | Replace categories/lifecycle/assertions with JUnit5 equivalents; adjust javadoc link. |
| hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestCompoundBloomFilter.java | Replace categories/lifecycle/assertions with JUnit5 equivalents. |
| hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestCompactorMemLeak.java | Replace lifecycle/rules with JUnit5 TestInfo and update assertions. |
| hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestCompactionWithShippingCoprocessor.java | Replace lifecycle/rules/categories with JUnit5 @Tag + TestInfo. |
| hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestCompactionWithCoprocessor.java | Replace categories/rules with JUnit5 tags (inherits base test behavior). |
| hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestCompactionWithByteBuff.java | Replace lifecycle/categories with JUnit5. |
| hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestCompactionState.java | Convert JUnit4 parameterization/rules to JUnit5 @HBaseParameterizedTestTemplate. |
| hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestCompactionPolicy.java | Convert lifecycle hooks to JUnit5 and update assertions. |
| hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestCompactionLifeCycleTracker.java | Replace categories/lifecycle and JUnit4 @Ignore with JUnit5 @Disabled. |
| hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestCompactionInDeadRegionServer.java | Convert JUnit4 Parameterized runner to @HBaseParameterizedTestTemplate + @TestTemplate. |
| hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestCompactionFileNotFound.java | Convert lifecycle/categories and failures to JUnit5. |
| hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestCompactionArchiveIOException.java | Convert lifecycle/rules to JUnit5 TestInfo; update assertions. |
| hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestCompactionArchiveConcurrentClose.java | Convert lifecycle/rules to JUnit5 TestInfo; update assertions. |
| hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestCompactionAfterBulkLoad.java | Convert to @HBaseParameterizedTestTemplate and update temp-dir handling. |
| hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestCompaction.java | Convert lifecycle/rules/categories and disabled utility method to JUnit5 equivalents. |
| hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestCompactingToCellFlatMapMemStore.java | Convert JUnit4 parameterized class to Jupiter parameterized class pattern + lifecycle updates. |
| hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestCompactingMemStore.java | Convert lifecycle/categories to JUnit5 and adjust setup/teardown ordering. |
| hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestCompactSplitThread.java | Convert lifecycle and failure handling to JUnit5. |
| hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestColumnSeeking.java | Replace rules/categories with JUnit5 @Tag + TestInfo. |
| hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestClusterId.java | Convert lifecycle/categories to JUnit5. |
| hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestClearRegionBlockCache.java | Convert JUnit4 parameterization to @HBaseParameterizedTestTemplate + @TestTemplate. |
| hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestCleanupMetaWAL.java | Convert lifecycle/categories to JUnit5. |
| hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestCleanupCompactedFileOnRegionClose.java | Convert lifecycle/categories/assertions to JUnit5. |
| hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestCleanupCompactedFileAfterFailover.java | Convert lifecycle/categories/assertions to JUnit5. |
| hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestCellSkipListSet.java | Replace rules/categories with JUnit5 @Tag + TestInfo. |
| hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestCellFlatSet.java | Convert JUnit4 parameterization to @HBaseParameterizedTestTemplate + @TestTemplate. |
| hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestCacheOnWriteInSchema.java | Convert JUnit4 parameterization to @HBaseParameterizedTestTemplate; use TestInfo naming. |
| hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestBytesReadServerSideScanMetrics.java | Convert lifecycle/rules/categories to JUnit5 @Tag + TestInfo; update assertions. |
| hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestBulkloadBase.java | Replace TemporaryFolder/TestName with @TempDir + TestInfo; update parameter source. |
| hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestBulkLoad.java | Convert to @HBaseParameterizedTestTemplate and replace expected-exception annotations with assertThrows. |
| hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestBrokenStoreFileCleaner.java | Convert lifecycle/categories/assertions to JUnit5. |
| hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestBootstrapNodeManager.java | Convert lifecycle/categories/assertions to JUnit5. |
| hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestBloomFilterFaulty.java | Convert lifecycle/rules/categories to JUnit5 TestInfo + updated assertions. |
| hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestBlocksScanned.java | Convert lifecycle/categories to JUnit5. |
| hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestBlocksRead.java | Convert lifecycle/rules/categories to JUnit5 TestInfo + updated assertions. |
| hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestAtomicOperation.java | Convert lifecycle/rules/categories to JUnit5 TestInfo; update assertions/javadoc link. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 56 out of 56 changed files in this pull request and generated no new comments.
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| @AfterAll | ||
| public static void after() throws Exception { | ||
| TEST_UTIL.shutdownMiniZKCluster(); | ||
| TEST_UTIL.shutdownMiniCluster(); |
There was a problem hiding this comment.
OK, we fixed an old bug here...
| @After | ||
| @AfterEach | ||
| public void teardown() throws Exception { | ||
| HTU.shutdownMiniCluster(); |
There was a problem hiding this comment.
This means we need to restart the cluster for every test method? Can file another issue to dig more, maybe we should split this to two tests, where we start cluster with different cacheType.
| @Override | ||
| public void setUp() throws Exception { | ||
| @BeforeEach | ||
| public void setUp(TestInfo testInfo) throws Exception { |
There was a problem hiding this comment.
Is the behavior expected? Better introduce some dummy abstract method and call it in the parent test class, and implement the dummy method in this sub class, so it will be more clear?
| } | ||
| } catch (InterruptedException e) { | ||
| Assume.assumeNoException(e); | ||
| Assumptions.abort(e.getMessage()); |
There was a problem hiding this comment.
This is a bit strange, anyway, can be a separated issue.
| LOG.error("Got an exception during compaction", e); | ||
| if (e instanceof FileNotFoundException) { | ||
| Assert.fail("Got a FNFE during compaction"); | ||
| fail("Got a FNFE during compaction"); |
There was a problem hiding this comment.
A bit strange that why not just throw the exception out...
| regionServer.getCompactSplitThread().onConfigurationChange(conf); | ||
| } catch (IllegalArgumentException iae) { | ||
| Assert.fail("Update bigger configuration failed!"); | ||
| fail("Update bigger configuration failed!"); |
There was a problem hiding this comment.
It is not good that we eat the exception information...
| "History size has not increased"); | ||
| long t = memstore.timeOfOldestEdit(); | ||
| assertTrue("Time of oldest edit is not Long.MAX_VALUE", t == Long.MAX_VALUE); | ||
| assertTrue(t == Long.MAX_VALUE, "Time of oldest edit is not Long.MAX_VALUE"); |