HBASE-30012 Upgrade hbase-server to use junit5 Part2#7960
HBASE-30012 Upgrade hbase-server to use junit5 Part2#7960liuxiaocs7 wants to merge 1 commit intoapache:masterfrom
Conversation
33c7d94 to
da33fb0
Compare
There was a problem hiding this comment.
Pull request overview
This PR is part of HBASE-30012/HBASE-29998 and continues the hbase-server test migration from JUnit 4 to JUnit 5 (Jupiter), including updating assertions, lifecycle annotations, tagging, and Mockito integration.
Changes:
- Migrates many
hbase-serverunit/integration tests from JUnit 4 (@Before/@After,@Category, Rules) to JUnit 5 (@BeforeEach/@AfterEach,@Tag, extensions, Jupiter assertions). - Updates Mockito usage to better align with JUnit 5 (e.g.,
MockitoExtension) and modern exception assertions (assertThrows). - Updates
hbase-servertest dependency frommockito-coretomockito-junit-jupiter.
Reviewed changes
Copilot reviewed 66 out of 66 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/master/snapshot/TestTakeSnapshotHandler.java | JUnit 5 migration (Jupiter assertions, @BeforeEach/@AfterEach, @Tag, TestInfo for names) |
| hbase-server/src/test/java/org/apache/hadoop/hbase/master/snapshot/TestSnapshotStats.java | JUnit 5 migration (@Tag, lifecycle, TestInfo naming) |
| hbase-server/src/test/java/org/apache/hadoop/hbase/master/snapshot/TestSnapshotManager.java | JUnit 5 migration; inject TestInfo into tests and update assertion signatures |
| hbase-server/src/test/java/org/apache/hadoop/hbase/master/snapshot/TestSnapshotHFileCleaner.java | JUnit 5 migration (@Tag, Jupiter lifecycle, TestInfo) |
| hbase-server/src/test/java/org/apache/hadoop/hbase/master/snapshot/TestSnapshotFileCacheWithDifferentWorkingDir.java | JUnit 5 migration (@BeforeAll/@AfterAll, @Tag) |
| hbase-server/src/test/java/org/apache/hadoop/hbase/master/snapshot/TestSnapshotFileCache.java | JUnit 5 migration (lifecycle, @Tag, updated assertions) |
| hbase-server/src/test/java/org/apache/hadoop/hbase/master/snapshot/TestSnapshotCleanupStateStore.java | JUnit 5 migration (@AfterEach, @Tag) |
| hbase-server/src/test/java/org/apache/hadoop/hbase/master/region/TestMasterRegionWALSyncTimeoutIOException.java | JUnit 5 migration (assertThrows, @Tag) |
| hbase-server/src/test/java/org/apache/hadoop/hbase/master/region/TestMasterRegionWALRecovery.java | JUnit 5 migration (@Tag, Jupiter assertions) |
| hbase-server/src/test/java/org/apache/hadoop/hbase/master/region/TestMasterRegionWALCleaner.java | JUnit 5 migration (@Tag, Jupiter assertions) |
| hbase-server/src/test/java/org/apache/hadoop/hbase/master/region/TestMasterRegionRpcTimeout.java | JUnit 5 migration (@Tag, Jupiter assertions) |
| hbase-server/src/test/java/org/apache/hadoop/hbase/master/region/TestMasterRegionOnTwoFileSystems.java | Partial JUnit 5 migration (teardown annotation changed) |
| hbase-server/src/test/java/org/apache/hadoop/hbase/master/region/TestMasterRegionInitialize.java | JUnit 5 migration (@Tag, Jupiter assertions) |
| hbase-server/src/test/java/org/apache/hadoop/hbase/master/region/TestMasterRegionFlush.java | JUnit 5 migration; updates mocking of flush result for compatibility |
| hbase-server/src/test/java/org/apache/hadoop/hbase/master/region/TestMasterRegionCompaction.java | JUnit 5 migration (@Tag, Jupiter assertions) |
| hbase-server/src/test/java/org/apache/hadoop/hbase/master/region/TestChangeSFTForMasterRegion.java | JUnit 5 migration (@BeforeAll/@AfterAll, @Tag) |
| hbase-server/src/test/java/org/apache/hadoop/hbase/master/region/MasterRegionTestBase.java | Migrates base test lifecycle to JUnit 5 (@BeforeEach/@AfterEach) |
| hbase-server/src/test/java/org/apache/hadoop/hbase/master/normalizer/TestSimpleRegionNormalizerOnCluster.java | JUnit 5 migration; TestInfo used for generated table names |
| hbase-server/src/test/java/org/apache/hadoop/hbase/master/normalizer/TestSimpleRegionNormalizer.java | JUnit 5 migration; replaces TableNameTestRule with TestInfo-derived names |
| hbase-server/src/test/java/org/apache/hadoop/hbase/master/normalizer/TestRegionNormalizerWorker.java | JUnit 5 + Mockito Jupiter extension migration |
| hbase-server/src/test/java/org/apache/hadoop/hbase/master/normalizer/TestRegionNormalizerWorkQueue.java | JUnit 5 migration (@Tag, Jupiter assertions) |
| hbase-server/src/test/java/org/apache/hadoop/hbase/master/normalizer/TestRegionNormalizerStateStore.java | JUnit 5 migration (@AfterEach, @Tag) |
| hbase-server/src/test/java/org/apache/hadoop/hbase/master/normalizer/TestRegionNormalizerManagerConfigurationObserver.java | JUnit 5 migration (@BeforeEach, @Tag) |
| hbase-server/src/test/java/org/apache/hadoop/hbase/master/migrate/TestInitializeStoreFileTracker.java | JUnit 5 migration; use Jupiter assertNotNull |
| hbase-server/src/test/java/org/apache/hadoop/hbase/master/locking/TestLockProcedure.java | JUnit 5 migration; replaces ExpectedException with assertThrows + Hamcrest |
| hbase-server/src/test/java/org/apache/hadoop/hbase/master/locking/TestLockManager.java | JUnit 5 migration (@BeforeAll/@AfterAll/@AfterEach, @Tag) |
| hbase-server/src/test/java/org/apache/hadoop/hbase/master/janitor/TestMetaFixerNoCluster.java | JUnit 5 migration (@Tag, Jupiter assertions) |
| hbase-server/src/test/java/org/apache/hadoop/hbase/master/janitor/TestMetaFixer.java | JUnit 5 migration; uses TestInfo for per-test table names |
| hbase-server/src/test/java/org/apache/hadoop/hbase/master/janitor/TestCatalogJanitorInMemoryStates.java | JUnit 5 migration; uses TestInfo instead of TableNameTestRule |
| hbase-server/src/test/java/org/apache/hadoop/hbase/master/janitor/TestCatalogJanitorCluster.java | JUnit 5 migration (@BeforeEach/@AfterEach, @Tag) |
| hbase-server/src/test/java/org/apache/hadoop/hbase/master/janitor/TestCatalogJanitor.java | JUnit 5 migration; replaces TestName rule with TestInfo |
| hbase-server/src/test/java/org/apache/hadoop/hbase/master/http/gson/GsonFactoryTest.java | JUnit 5 migration (@BeforeAll, @Tag) |
| hbase-server/src/test/java/org/apache/hadoop/hbase/master/http/TestRegionVisualizer.java | JUnit 5 migration (@BeforeAll, @Tag) |
| hbase-server/src/test/java/org/apache/hadoop/hbase/master/http/TestMetaBrowserNoCluster.java | JUnit 5 migration (@BeforeEach, @Tag, Mockito init updated) |
| hbase-server/src/test/java/org/apache/hadoop/hbase/master/http/TestMetaBrowser.java | JUnit 5 migration replacing Rules with Jupiter extensions; adds explicit cleanup of tables/namespaces |
| hbase-server/src/test/java/org/apache/hadoop/hbase/master/http/TestMasterStatusUtil.java | JUnit 5 migration (@BeforeEach, @Tag) |
| hbase-server/src/test/java/org/apache/hadoop/hbase/master/http/TestMasterStatusPage.java | JUnit 5 migration (@BeforeAll/@AfterAll, @Tag) |
| hbase-server/src/test/java/org/apache/hadoop/hbase/master/http/TestHbckMetricsResource.java | JUnit 5 migration replacing RuleChain with Jupiter extensions/callbacks |
| hbase-server/src/test/java/org/apache/hadoop/hbase/master/http/TestApiV1ClusterMetricsResource.java | JUnit 5 migration replacing RuleChain with Jupiter extensions/callbacks |
| hbase-server/src/test/java/org/apache/hadoop/hbase/master/cleaner/TestSnapshotFromMaster.java | JUnit 5 migration (@BeforeAll/@AfterAll/@BeforeEach/@AfterEach, @Tag) |
| hbase-server/src/test/java/org/apache/hadoop/hbase/master/cleaner/TestSnapshotCleanerChore.java | JUnit 5 migration (@Tag) |
| hbase-server/src/test/java/org/apache/hadoop/hbase/master/cleaner/TestReplicationHFileCleaner.java | JUnit 5 migration (@BeforeAll/@AfterAll/@BeforeEach/@AfterEach, @Tag) |
| hbase-server/src/test/java/org/apache/hadoop/hbase/master/cleaner/TestReplicationBarrierCleaner.java | JUnit 5 migration; also fixes logger class reference |
| hbase-server/src/test/java/org/apache/hadoop/hbase/master/cleaner/TestLogsCleaner.java | JUnit 5 migration; replaces TableNameTestRule usage with TestInfo naming |
| hbase-server/src/test/java/org/apache/hadoop/hbase/master/cleaner/TestHFileLinkCleaner.java | JUnit 5 migration; replaces TestName rule with TestInfo naming |
| hbase-server/src/test/java/org/apache/hadoop/hbase/master/cleaner/TestHFileCleaner.java | JUnit 5 migration; updates assertions and array equality usage |
| hbase-server/src/test/java/org/apache/hadoop/hbase/master/cleaner/TestCleanerClearHFiles.java | JUnit 5 migration (@BeforeAll/@AfterAll, @Tag) |
| hbase-server/src/test/java/org/apache/hadoop/hbase/master/cleaner/TestCleanerChore.java | JUnit 5 migration (@BeforeAll/@AfterAll, @Tag, Jupiter assertions) |
| hbase-server/src/test/java/org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancerHeterogeneousCostRulesLoadFromHDFS.java | JUnit 5 migration (@BeforeEach/@AfterEach, @Tag) |
| hbase-server/src/test/java/org/apache/hadoop/hbase/master/balancer/TestStochasticBalancerJmxMetrics.java | JUnit 5 migration; converts ignore/fix-order to @Disabled + @TestMethodOrder |
| hbase-server/src/test/java/org/apache/hadoop/hbase/master/balancer/TestReplicaDistributionBalancerConditional.java | JUnit 5 migration (@BeforeEach/@AfterEach, @Tag) |
| hbase-server/src/test/java/org/apache/hadoop/hbase/master/balancer/TestRSGroupBasedLoadBalancerWithStochasticLoadBalancerAsInternal.java | JUnit 5 migration (@BeforeAll, @Tag) |
| hbase-server/src/test/java/org/apache/hadoop/hbase/master/balancer/TestRSGroupBasedLoadBalancerWithCacheAwareLoadBalancerAsInternal.java | JUnit 5 migration; replaces JUnit4 timeout with Jupiter @Timeout |
| hbase-server/src/test/java/org/apache/hadoop/hbase/master/balancer/TestRSGroupBasedLoadBalancer.java | JUnit 5 migration (@BeforeAll, @Tag) |
| hbase-server/src/test/java/org/apache/hadoop/hbase/master/balancer/TestMetaTableIsolationBalancerConditional.java | JUnit 5 migration (@BeforeEach/@AfterEach, @Tag) |
| hbase-server/src/test/java/org/apache/hadoop/hbase/master/balancer/TestLoadBalancerStateStore.java | JUnit 5 migration (@AfterEach, @Tag) |
| hbase-server/src/test/java/org/apache/hadoop/hbase/master/balancer/TestFavoredStochasticLoadBalancer.java | JUnit 5 migration; converts ignored tests to @Disabled |
| hbase-server/src/test/java/org/apache/hadoop/hbase/master/balancer/TestFavoredStochasticBalancerPickers.java | JUnit 5 migration; uses TestInfo naming |
| hbase-server/src/test/java/org/apache/hadoop/hbase/master/balancer/TestFavoredNodeTableImport.java | JUnit 5 migration (@AfterEach, @Tag) |
| hbase-server/src/test/java/org/apache/hadoop/hbase/master/balancer/TestCacheAwareLoadBalancer.java | JUnit 5 migration (@BeforeAll, @Tag) |
| hbase-server/src/test/java/org/apache/hadoop/hbase/master/balancer/TestBalancerStatusTagInJMXMetrics.java | JUnit 5 migration; updates tags and assertion argument order |
| hbase-server/src/test/java/org/apache/hadoop/hbase/master/balancer/RSGroupableBalancerTestBase.java | Mockito/JUnit 5 cleanup and refactors; replaces verbose Mockito usage with static imports |
| hbase-server/src/test/java/org/apache/hadoop/hbase/master/balancer/BalancerConditionalsTestUtil.java | JUnit 5 migration; updates assertion signatures |
| hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestSplitOrMergeStateStore.java | JUnit 5 migration (@AfterEach, @Tag) |
| hbase-server/src/test/java/org/apache/hadoop/hbase/master/MasterStateStoreTestBase.java | JUnit 5 migration (@BeforeAll/@AfterAll) |
| hbase-server/pom.xml | Switches test dependency from mockito-core to mockito-junit-jupiter |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| @@ -144,7 +144,7 @@ public void setUpBeforeTest() throws IOException { | |||
| ServerName.valueOf("localhost", 12345, EnvironmentEdgeManager.currentTime())); | |||
| } | |||
|
|
|||
| @After | |||
| @AfterEach | |||
| public void tearDownAfterTest() { | |||
| region.close(true); | |||
There was a problem hiding this comment.
This class now uses JUnit Jupiter's @AfterEach but still appears to rely on JUnit 4 annotations/imports elsewhere (e.g., org.junit.Before, @Category, etc.). Mixing JUnit 4 and JUnit 5 lifecycle annotations can result in setup/teardown methods not running (depending on which engine executes the test). Please migrate the remaining JUnit 4 annotations to JUnit Jupiter equivalents (e.g., @BeforeEach, @AfterAll, @Tag) or keep the class purely JUnit 4 (use @After).
| containsString(regionId), containsString(tableName), containsString(serverName), | ||
| containsString(serverName), containsString(port), containsString(startCode), | ||
| containsString(metaRegionID), containsString(metaTableName), containsString(localhost1), | ||
| containsString(localhost2), containsString(port), containsString(startCode))); | ||
| containsString(localhost2), containsString(port), containsString(hostStartCode))); | ||
| } |
There was a problem hiding this comment.
The test method for the JSON response is still named testGetUnkownServers (typo: missing 'n' in 'Unknown'). Consider renaming it to testGetUnknownServers for consistency with the HTML variant and to improve readability/searchability.
| import static org.junit.jupiter.api.Assertions.assertEquals; | ||
| import static org.junit.jupiter.api.Assertions.assertFalse; | ||
| import static org.junit.jupiter.api.Assertions.assertTrue; | ||
| import static org.mockito.Mockito.any; |
There was a problem hiding this comment.
import static org.mockito.Mockito.any; is not the correct matcher import (matchers live under org.mockito.ArgumentMatchers). This will not compile and also makes the intent less clear. Switch the static import to org.mockito.ArgumentMatchers.any (or use anyString/any(Class) as appropriate).
| import static org.mockito.Mockito.any; | |
| import static org.mockito.ArgumentMatchers.any; |
| @BeforeEach | ||
| public void before(TestInfo testInfo) throws Exception { | ||
| MockitoAnnotations.openMocks(this); | ||
| when(masterServices.skipRegionManagementAction(any())).thenReturn(false); | ||
| testingUtility = new HBaseCommonTestingUtil(); |
There was a problem hiding this comment.
This test uses @ExtendWith(MockitoExtension.class) but also calls MockitoAnnotations.openMocks(this) in @BeforeEach. That creates a second Mockito session and reinitializes the @Mock fields, which can lead to confusing behavior and unnecessary resources. Remove the manual openMocks call and let MockitoExtension manage mock initialization (or drop the extension and keep manual initialization, but not both).
hbase-server