You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ozone.apache.org by ad...@apache.org on 2022/06/07 12:18:12 UTC

[ozone] branch master updated: HDDS-6751. Migrate parameterized tests in hdds-server-scm to JUnit5 (#3431)

This is an automated email from the ASF dual-hosted git repository.

adoroszlai pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/ozone.git


The following commit(s) were added to refs/heads/master by this push:
     new 1bf161464a HDDS-6751. Migrate parameterized tests in hdds-server-scm to JUnit5 (#3431)
1bf161464a is described below

commit 1bf161464a51dc1c162965f9ff71c1c59b7ca605
Author: Kaijie Chen <ch...@kaijie.org>
AuthorDate: Tue Jun 7 20:18:06 2022 +0800

    HDDS-6751. Migrate parameterized tests in hdds-server-scm to JUnit5 (#3431)
---
 hadoop-hdds/server-scm/pom.xml                     |   5 +
 .../scm/TestStorageContainerManagerHttpServer.java |  49 ++---
 .../TestSCMContainerPlacementRackAware.java        | 223 +++++++++++----------
 .../TestSCMContainerPlacementRackScatter.java      | 182 +++++++++--------
 .../TestPipelineDatanodesIntersection.java         |  58 ++----
 .../TestSCMHAUnfinalizedStateValidationAction.java |  82 +++-----
 6 files changed, 285 insertions(+), 314 deletions(-)

diff --git a/hadoop-hdds/server-scm/pom.xml b/hadoop-hdds/server-scm/pom.xml
index cf2f27bebc..4756c56b90 100644
--- a/hadoop-hdds/server-scm/pom.xml
+++ b/hadoop-hdds/server-scm/pom.xml
@@ -150,6 +150,11 @@ https://maven.apache.org/xsd/maven-4.0.0.xsd">
       <artifactId>junit-platform-launcher</artifactId>
       <scope>test</scope>
     </dependency>
+    <dependency>
+      <groupId>org.junit.jupiter</groupId>
+      <artifactId>junit-jupiter-params</artifactId>
+      <scope>test</scope>
+    </dependency>
   </dependencies>
   <build>
     <plugins>
diff --git a/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/TestStorageContainerManagerHttpServer.java b/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/TestStorageContainerManagerHttpServer.java
index a5c52b9886..4446631851 100644
--- a/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/TestStorageContainerManagerHttpServer.java
+++ b/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/TestStorageContainerManagerHttpServer.java
@@ -23,33 +23,27 @@ import java.io.IOException;
 import java.net.InetSocketAddress;
 import java.net.URL;
 import java.net.URLConnection;
-import java.util.Arrays;
-import java.util.Collection;
 
 import org.apache.hadoop.fs.FileUtil;
 import org.apache.hadoop.hdds.conf.OzoneConfiguration;
 import org.apache.hadoop.hdds.scm.server.StorageContainerManagerHttpServer;
 import org.apache.hadoop.hdfs.web.URLConnectionFactory;
 import org.apache.hadoop.http.HttpConfig;
-import org.apache.hadoop.http.HttpConfig.Policy;
 import org.apache.hadoop.metrics2.lib.DefaultMetricsSystem;
 import org.apache.hadoop.net.NetUtils;
 import org.apache.hadoop.ozone.OzoneConfigKeys;
 import org.apache.hadoop.security.ssl.KeyStoreTestUtil;
 import org.apache.ozone.test.GenericTestUtils;
 
-import org.junit.AfterClass;
-import org.junit.Assert;
-import org.junit.BeforeClass;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.runners.Parameterized;
-import org.junit.runners.Parameterized.Parameters;
+import org.junit.jupiter.api.AfterAll;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.EnumSource;
 
 /**
  * Test http server os SCM with various HTTP option.
  */
-@RunWith(value = Parameterized.class)
 public class TestStorageContainerManagerHttpServer {
   private static final String BASEDIR = GenericTestUtils
       .getTempPath(TestStorageContainerManagerHttpServer.class.getSimpleName());
@@ -58,22 +52,8 @@ public class TestStorageContainerManagerHttpServer {
   private static OzoneConfiguration conf;
   private static URLConnectionFactory connectionFactory;
 
-  @Parameters public static Collection<Object[]> policy() {
-    Object[][] params = new Object[][] {
-        {HttpConfig.Policy.HTTP_ONLY},
-        {HttpConfig.Policy.HTTPS_ONLY},
-        {HttpConfig.Policy.HTTP_AND_HTTPS} };
-    return Arrays.asList(params);
-  }
-
-  private final HttpConfig.Policy policy;
-
-  public TestStorageContainerManagerHttpServer(Policy policy) {
-    super();
-    this.policy = policy;
-  }
-
-  @BeforeClass public static void setUp() throws Exception {
+  @BeforeAll
+  public static void setUp() throws Exception {
     File base = new File(BASEDIR);
     FileUtil.fullyDelete(base);
     base.mkdirs();
@@ -90,13 +70,16 @@ public class TestStorageContainerManagerHttpServer {
         KeyStoreTestUtil.getServerSSLConfigFileName());
   }
 
-  @AfterClass public static void tearDown() throws Exception {
+  @AfterAll
+  public static void tearDown() throws Exception {
     connectionFactory.destroy();
     FileUtil.fullyDelete(new File(BASEDIR));
     KeyStoreTestUtil.cleanupSSLConfig(keystoresDir, sslConfDir);
   }
 
-  @Test public void testHttpPolicy() throws Exception {
+  @ParameterizedTest
+  @EnumSource(HttpConfig.Policy.class)
+  public void testHttpPolicy(HttpConfig.Policy policy) throws Exception {
     conf.set(OzoneConfigKeys.OZONE_HTTP_POLICY_KEY, policy.name());
     conf.set(ScmConfigKeys.OZONE_SCM_HTTP_ADDRESS_KEY, "localhost:0");
     conf.set(ScmConfigKeys.OZONE_SCM_HTTPS_ADDRESS_KEY, "localhost:0");
@@ -109,15 +92,15 @@ public class TestStorageContainerManagerHttpServer {
       server = new StorageContainerManagerHttpServer(conf, null);
       server.start();
 
-      Assert.assertTrue(implies(policy.isHttpEnabled(),
+      Assertions.assertTrue(implies(policy.isHttpEnabled(),
           canAccess("http", server.getHttpAddress())));
-      Assert.assertTrue(implies(policy.isHttpEnabled() &&
+      Assertions.assertTrue(implies(policy.isHttpEnabled() &&
               !policy.isHttpsEnabled(),
           !canAccess("https", server.getHttpsAddress())));
 
-      Assert.assertTrue(implies(policy.isHttpsEnabled(),
+      Assertions.assertTrue(implies(policy.isHttpsEnabled(),
           canAccess("https", server.getHttpsAddress())));
-      Assert.assertTrue(implies(policy.isHttpsEnabled() &&
+      Assertions.assertTrue(implies(policy.isHttpsEnabled() &&
               !policy.isHttpEnabled(),
           !canAccess("http", server.getHttpAddress())));
 
diff --git a/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/container/placement/algorithms/TestSCMContainerPlacementRackAware.java b/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/container/placement/algorithms/TestSCMContainerPlacementRackAware.java
index 12f63fe0b6..209b7aa220 100644
--- a/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/container/placement/algorithms/TestSCMContainerPlacementRackAware.java
+++ b/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/container/placement/algorithms/TestSCMContainerPlacementRackAware.java
@@ -18,9 +18,9 @@ package org.apache.hadoop.hdds.scm.container.placement.algorithms;
 
 import java.util.ArrayList;
 import java.util.Arrays;
-import java.util.Collection;
 import java.util.List;
 import java.util.Random;
+import java.util.stream.IntStream;
 
 import org.apache.hadoop.hdds.conf.OzoneConfiguration;
 import org.apache.hadoop.hdds.conf.StorageUnit;
@@ -39,13 +39,14 @@ import org.apache.hadoop.hdds.scm.net.NodeSchemaManager;
 import org.apache.hadoop.hdds.scm.node.DatanodeInfo;
 import org.apache.hadoop.hdds.scm.node.NodeManager;
 import org.apache.hadoop.hdds.scm.node.NodeStatus;
-import org.junit.After;
 import org.apache.hadoop.ozone.container.upgrade.UpgradeUtils;
-import org.junit.Assert;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.runners.Parameterized;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.MethodSource;
+import org.junit.jupiter.params.provider.ValueSource;
 import org.mockito.Mockito;
 
 import org.apache.commons.lang3.StringUtils;
@@ -56,25 +57,21 @@ import static org.apache.hadoop.hdds.scm.ScmConfigKeys.OZONE_DATANODE_RATIS_VOLU
 import static org.apache.hadoop.hdds.scm.net.NetConstants.LEAF_SCHEMA;
 import static org.apache.hadoop.hdds.scm.net.NetConstants.RACK_SCHEMA;
 import static org.apache.hadoop.hdds.scm.net.NetConstants.ROOT_SCHEMA;
-import org.hamcrest.MatcherAssert;
-
-import static org.hamcrest.Matchers.greaterThanOrEqualTo;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
-import static org.junit.Assume.assumeTrue;
+
+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.junit.jupiter.api.Assertions.fail;
+import static org.junit.jupiter.api.Assumptions.assumeTrue;
 import static org.mockito.Mockito.when;
 
 /**
  * Test for the scm container rack aware placement.
  */
-@RunWith(Parameterized.class)
 public class TestSCMContainerPlacementRackAware {
   private NetworkTopology cluster;
   private OzoneConfiguration conf;
   private NodeManager nodeManager;
-  private final Integer datanodeCount;
   private final List<DatanodeDetails> datanodes = new ArrayList<>();
   private final List<DatanodeInfo> dnInfos = new ArrayList<>();
   // policy with fallback capability
@@ -86,18 +83,12 @@ public class TestSCMContainerPlacementRackAware {
   private SCMContainerPlacementMetrics metrics;
   private static final int NODE_PER_RACK = 5;
 
-  public TestSCMContainerPlacementRackAware(Integer count) {
-    this.datanodeCount = count;
-  }
 
-  @Parameterized.Parameters
-  public static Collection<Object[]> setupDatanodes() {
-    return Arrays.asList(new Object[][] {{3}, {4}, {5}, {6}, {7}, {8}, {9},
-        {10}, {11}, {12}, {13}, {14}, {15}});
+  private static IntStream numDatanodes() {
+    return IntStream.rangeClosed(3, 15);
   }
 
-  @Before
-  public void setup() {
+  private void setup(int datanodeCount) {
     //initialize network topology instance
     conf = new OzoneConfiguration();
     // We are using small units here
@@ -190,67 +181,77 @@ public class TestSCMContainerPlacementRackAware {
         .thenReturn(cluster);
 
     // create placement policy instances
-    metrics = SCMContainerPlacementMetrics.create();
     policy = new SCMContainerPlacementRackAware(
         nodeManager, conf, cluster, true, metrics);
     policyNoFallback = new SCMContainerPlacementRackAware(
         nodeManager, conf, cluster, false, metrics);
   }
 
-  @After
+  @BeforeEach
+  public void init() {
+    metrics = SCMContainerPlacementMetrics.create();
+  }
+
+  @AfterEach
   public void teardown() {
     metrics.unRegister();
   }
 
-  @Test
-  public void chooseNodeWithNoExcludedNodes() throws SCMException {
+  @ParameterizedTest
+  @MethodSource("numDatanodes")
+  public void chooseNodeWithNoExcludedNodes(int datanodeCount)
+      throws SCMException {
+    setup(datanodeCount);
     // test choose new datanodes for new pipeline cases
     // 1 replica
     int nodeNum = 1;
     List<DatanodeDetails> datanodeDetails =
         policy.chooseDatanodes(null, null, nodeNum, 0, 15);
-    Assert.assertEquals(nodeNum, datanodeDetails.size());
+    Assertions.assertEquals(nodeNum, datanodeDetails.size());
 
     // 2 replicas
     nodeNum = 2;
     datanodeDetails = policy.chooseDatanodes(null, null, nodeNum, 0, 15);
-    Assert.assertEquals(nodeNum, datanodeDetails.size());
-    Assert.assertTrue(cluster.isSameParent(datanodeDetails.get(0),
+    Assertions.assertEquals(nodeNum, datanodeDetails.size());
+    Assertions.assertTrue(cluster.isSameParent(datanodeDetails.get(0),
         datanodeDetails.get(1)) || (datanodeCount % NODE_PER_RACK == 1));
 
     //  3 replicas
     nodeNum = 3;
     datanodeDetails = policy.chooseDatanodes(null, null, nodeNum, 0, 15);
-    Assert.assertEquals(nodeNum, datanodeDetails.size());
+    Assertions.assertEquals(nodeNum, datanodeDetails.size());
     // requires at least 2 racks for following statement
     assumeTrue(datanodeCount > NODE_PER_RACK &&
         datanodeCount % NODE_PER_RACK > 1);
-    Assert.assertTrue(cluster.isSameParent(datanodeDetails.get(0),
+    Assertions.assertTrue(cluster.isSameParent(datanodeDetails.get(0),
         datanodeDetails.get(1)));
-    Assert.assertFalse(cluster.isSameParent(datanodeDetails.get(0),
+    Assertions.assertFalse(cluster.isSameParent(datanodeDetails.get(0),
         datanodeDetails.get(2)));
-    Assert.assertFalse(cluster.isSameParent(datanodeDetails.get(1),
+    Assertions.assertFalse(cluster.isSameParent(datanodeDetails.get(1),
         datanodeDetails.get(2)));
 
     //  4 replicas
     nodeNum = 4;
     datanodeDetails = policy.chooseDatanodes(null, null, nodeNum, 0, 15);
-    Assert.assertEquals(nodeNum, datanodeDetails.size());
+    Assertions.assertEquals(nodeNum, datanodeDetails.size());
     // requires at least 2 racks and enough datanodes for following statement
     assumeTrue(datanodeCount > NODE_PER_RACK + 1);
-    Assert.assertTrue(cluster.isSameParent(datanodeDetails.get(0),
+    Assertions.assertTrue(cluster.isSameParent(datanodeDetails.get(0),
         datanodeDetails.get(1)));
-    Assert.assertFalse(cluster.isSameParent(datanodeDetails.get(0),
+    Assertions.assertFalse(cluster.isSameParent(datanodeDetails.get(0),
         datanodeDetails.get(2)));
-    Assert.assertFalse(cluster.isSameParent(datanodeDetails.get(1),
+    Assertions.assertFalse(cluster.isSameParent(datanodeDetails.get(1),
         datanodeDetails.get(2)));
   }
 
-  @Test
-  public void chooseNodeWithExcludedNodes() throws SCMException {
+  @ParameterizedTest
+  @MethodSource("numDatanodes")
+  public void chooseNodeWithExcludedNodes(int datanodeCount)
+      throws SCMException {
     // test choose new datanodes for under replicated pipeline
     // 3 replicas, two existing datanodes on same rack
     assumeTrue(datanodeCount > NODE_PER_RACK);
+    setup(datanodeCount);
     int nodeNum = 1;
     List<DatanodeDetails> excludedNodes = new ArrayList<>();
 
@@ -258,10 +259,10 @@ public class TestSCMContainerPlacementRackAware {
     excludedNodes.add(datanodes.get(1));
     List<DatanodeDetails> datanodeDetails = policy.chooseDatanodes(
         excludedNodes, null, nodeNum, 0, 15);
-    Assert.assertEquals(nodeNum, datanodeDetails.size());
-    Assert.assertFalse(cluster.isSameParent(datanodeDetails.get(0),
+    Assertions.assertEquals(nodeNum, datanodeDetails.size());
+    Assertions.assertFalse(cluster.isSameParent(datanodeDetails.get(0),
         excludedNodes.get(0)));
-    Assert.assertFalse(cluster.isSameParent(datanodeDetails.get(0),
+    Assertions.assertFalse(cluster.isSameParent(datanodeDetails.get(0),
         excludedNodes.get(1)));
 
     // 3 replicas, one existing datanode
@@ -270,8 +271,8 @@ public class TestSCMContainerPlacementRackAware {
     excludedNodes.add(datanodes.get(0));
     datanodeDetails = policy.chooseDatanodes(
         excludedNodes, null, nodeNum, 0, 15);
-    Assert.assertEquals(nodeNum, datanodeDetails.size());
-    Assert.assertTrue(cluster.isSameParent(
+    Assertions.assertEquals(nodeNum, datanodeDetails.size());
+    Assertions.assertTrue(cluster.isSameParent(
         datanodeDetails.get(0), excludedNodes.get(0)) ||
         cluster.isSameParent(datanodeDetails.get(0), excludedNodes.get(1)));
 
@@ -282,47 +283,52 @@ public class TestSCMContainerPlacementRackAware {
     excludedNodes.add(datanodes.get(5));
     datanodeDetails = policy.chooseDatanodes(
         excludedNodes, null, nodeNum, 0, 15);
-    Assert.assertEquals(nodeNum, datanodeDetails.size());
-    Assert.assertTrue(cluster.isSameParent(
+    Assertions.assertEquals(nodeNum, datanodeDetails.size());
+    Assertions.assertTrue(cluster.isSameParent(
         datanodeDetails.get(0), excludedNodes.get(0)) ||
         cluster.isSameParent(datanodeDetails.get(0), excludedNodes.get(1)));
   }
 
-  @Test
-  public void testSingleNodeRack() throws SCMException {
+  @ParameterizedTest
+  @ValueSource(ints = {NODE_PER_RACK + 1, 2 * NODE_PER_RACK + 1})
+  public void testSingleNodeRack(int datanodeCount) throws SCMException {
     // make sure there is a single node rack
     assumeTrue(datanodeCount % NODE_PER_RACK == 1);
+    setup(datanodeCount);
     List<DatanodeDetails> excludeNodes = new ArrayList<>();
     excludeNodes.add(datanodes.get(datanodeCount - 1));
     excludeNodes.add(datanodes.get(0));
     List<DatanodeDetails> chooseDatanodes =
         policy.chooseDatanodes(excludeNodes, null, 1, 0, 0);
-    Assert.assertTrue(chooseDatanodes.size() == 1);
+    assertEquals(1, chooseDatanodes.size());
     // the selected node should be on the same rack as the second exclude node
-    Assert.assertTrue(chooseDatanodes.get(0).toString(),
-        cluster.isSameParent(chooseDatanodes.get(0), excludeNodes.get(1)));
+    Assertions.assertTrue(
+        cluster.isSameParent(chooseDatanodes.get(0), excludeNodes.get(1)),
+        chooseDatanodes.get(0).toString());
   }
 
-  @Test
-  public void testFallback() throws SCMException {
+  @ParameterizedTest
+  @ValueSource(ints = {12, 13, 14})
+  public void testFallback(int datanodeCount) throws SCMException {
     // 5 replicas. there are only 3 racks. policy with fallback should
     // allocate the 5th datanode though it will break the rack rule(first
     // 2 replicas on same rack, others on different racks).
     assumeTrue(datanodeCount > NODE_PER_RACK * 2 &&
         (datanodeCount % NODE_PER_RACK > 1));
+    setup(datanodeCount);
     int nodeNum = 5;
     List<DatanodeDetails> datanodeDetails =
         policy.chooseDatanodes(null, null, nodeNum, 0, 15);
-    Assert.assertEquals(nodeNum, datanodeDetails.size());
-    Assert.assertTrue(cluster.isSameParent(datanodeDetails.get(0),
+    Assertions.assertEquals(nodeNum, datanodeDetails.size());
+    Assertions.assertTrue(cluster.isSameParent(datanodeDetails.get(0),
         datanodeDetails.get(1)));
-    Assert.assertFalse(cluster.isSameParent(datanodeDetails.get(0),
+    Assertions.assertFalse(cluster.isSameParent(datanodeDetails.get(0),
         datanodeDetails.get(2)));
-    Assert.assertFalse(cluster.isSameParent(datanodeDetails.get(1),
+    Assertions.assertFalse(cluster.isSameParent(datanodeDetails.get(1),
         datanodeDetails.get(2)));
-    Assert.assertFalse(cluster.isSameParent(datanodeDetails.get(0),
+    Assertions.assertFalse(cluster.isSameParent(datanodeDetails.get(0),
         datanodeDetails.get(3)));
-    Assert.assertFalse(cluster.isSameParent(datanodeDetails.get(2),
+    Assertions.assertFalse(cluster.isSameParent(datanodeDetails.get(2),
         datanodeDetails.get(3)));
 
     // get metrics
@@ -332,16 +338,18 @@ public class TestSCMContainerPlacementRackAware {
     long compromiseCount = metrics.getDatanodeChooseFallbackCount();
 
     // verify metrics
-    Assert.assertEquals(totalRequest, nodeNum);
-    Assert.assertEquals(successCount, nodeNum);
-    Assert.assertTrue(tryCount > nodeNum);
-    Assert.assertTrue(compromiseCount >= 1);
+    Assertions.assertEquals(totalRequest, nodeNum);
+    Assertions.assertEquals(successCount, nodeNum);
+    Assertions.assertTrue(tryCount > nodeNum);
+    Assertions.assertTrue(compromiseCount >= 1);
   }
 
-  @Test
-  public void testNoFallback() throws SCMException {
+  @ParameterizedTest
+  @ValueSource(ints = {11, 12, 13, 14, 15})
+  public void testNoFallback(int datanodeCount) {
     assumeTrue(datanodeCount > (NODE_PER_RACK * 2) &&
         (datanodeCount <= NODE_PER_RACK * 3));
+    setup(datanodeCount);
     // 5 replicas. there are only 3 racks. policy prohibit fallback should fail.
     int nodeNum = 5;
     try {
@@ -357,16 +365,17 @@ public class TestSCMContainerPlacementRackAware {
     long tryCount = metrics.getDatanodeChooseAttemptCount();
     long compromiseCount = metrics.getDatanodeChooseFallbackCount();
 
-    Assert.assertEquals(totalRequest, nodeNum);
-    MatcherAssert.assertThat("Not enough success count", successCount,
-        greaterThanOrEqualTo(1L));
-    MatcherAssert.assertThat("Not enough try count", tryCount,
-        greaterThanOrEqualTo(1L));
-    Assert.assertEquals(compromiseCount, 0);
+    Assertions.assertEquals(nodeNum, totalRequest);
+    Assertions.assertTrue(successCount >= 1, "Not enough success count");
+    Assertions.assertTrue(tryCount >= 1, "Not enough try count");
+    Assertions.assertEquals(0, compromiseCount);
   }
 
-  @Test
-  public void chooseNodeWithFavoredNodes() throws SCMException {
+  @ParameterizedTest
+  @MethodSource("numDatanodes")
+  public void chooseNodeWithFavoredNodes(int datanodeCount)
+      throws SCMException {
+    setup(datanodeCount);
     int nodeNum = 1;
     List<DatanodeDetails> excludedNodes = new ArrayList<>();
     List<DatanodeDetails> favoredNodes = new ArrayList<>();
@@ -375,8 +384,8 @@ public class TestSCMContainerPlacementRackAware {
     favoredNodes.add(datanodes.get(0));
     List<DatanodeDetails> datanodeDetails = policy.chooseDatanodes(
         excludedNodes, favoredNodes, nodeNum, 0, 15);
-    Assert.assertEquals(nodeNum, datanodeDetails.size());
-    Assert.assertEquals(datanodeDetails.get(0).getNetworkFullPath(),
+    Assertions.assertEquals(nodeNum, datanodeDetails.size());
+    Assertions.assertEquals(datanodeDetails.get(0).getNetworkFullPath(),
         favoredNodes.get(0).getNetworkFullPath());
 
     // no overlap between excludedNodes and favoredNodes, favoredNodes can been
@@ -387,8 +396,8 @@ public class TestSCMContainerPlacementRackAware {
     favoredNodes.add(datanodes.get(2));
     datanodeDetails = policy.chooseDatanodes(
         excludedNodes, favoredNodes, nodeNum, 0, 15);
-    Assert.assertEquals(nodeNum, datanodeDetails.size());
-    Assert.assertEquals(datanodeDetails.get(0).getNetworkFullPath(),
+    Assertions.assertEquals(nodeNum, datanodeDetails.size());
+    Assertions.assertEquals(datanodeDetails.get(0).getNetworkFullPath(),
         favoredNodes.get(0).getNetworkFullPath());
 
     // there is overlap between excludedNodes and favoredNodes, favoredNodes
@@ -399,13 +408,15 @@ public class TestSCMContainerPlacementRackAware {
     favoredNodes.add(datanodes.get(0));
     datanodeDetails = policy.chooseDatanodes(
         excludedNodes, favoredNodes, nodeNum, 0, 15);
-    Assert.assertEquals(nodeNum, datanodeDetails.size());
-    Assert.assertFalse(datanodeDetails.get(0).getNetworkFullPath()
-        .equals(favoredNodes.get(0).getNetworkFullPath()));
+    Assertions.assertEquals(nodeNum, datanodeDetails.size());
+    Assertions.assertNotEquals(datanodeDetails.get(0).getNetworkFullPath(),
+        favoredNodes.get(0).getNetworkFullPath());
   }
 
-  @Test
-  public void testNoInfiniteLoop() throws SCMException {
+  @ParameterizedTest
+  @MethodSource("numDatanodes")
+  public void testNoInfiniteLoop(int datanodeCount) {
+    setup(datanodeCount);
     int nodeNum = 1;
 
     try {
@@ -422,15 +433,17 @@ public class TestSCMContainerPlacementRackAware {
     long tryCount = metrics.getDatanodeChooseAttemptCount();
     long compromiseCount = metrics.getDatanodeChooseFallbackCount();
 
-    Assert.assertEquals(totalRequest, nodeNum);
-    Assert.assertEquals(successCount, 0);
-    MatcherAssert.assertThat("Not enough try", tryCount,
-        greaterThanOrEqualTo((long) nodeNum));
-    Assert.assertEquals(compromiseCount, 0);
+    Assertions.assertEquals(totalRequest, nodeNum);
+    Assertions.assertEquals(successCount, 0);
+    Assertions.assertTrue(tryCount >= nodeNum, "Not enough try");
+    Assertions.assertEquals(compromiseCount, 0);
   }
 
-  @Test
-  public void testDatanodeWithDefaultNetworkLocation() throws SCMException {
+  @ParameterizedTest
+  @MethodSource("numDatanodes")
+  public void testDatanodeWithDefaultNetworkLocation(int datanodeCount)
+      throws SCMException {
+    setup(datanodeCount);
     String hostname = "node";
     List<DatanodeInfo> dnInfoList = new ArrayList<>();
     List<DatanodeDetails> dataList = new ArrayList<>();
@@ -460,7 +473,7 @@ public class TestSCMContainerPlacementRackAware {
       clusterMap.add(dn);
       dnInfoList.add(dnInfo);
     }
-    Assert.assertEquals(dataList.size(), StringUtils.countMatches(
+    Assertions.assertEquals(dataList.size(), StringUtils.countMatches(
         clusterMap.toString(), NetConstants.DEFAULT_RACK));
     for (DatanodeInfo dn: dnInfoList) {
       when(nodeManager.getNodeByUuid(dn.getUuidString()))
@@ -474,19 +487,20 @@ public class TestSCMContainerPlacementRackAware {
             metrics);
     List<DatanodeDetails> datanodeDetails =
         newPolicy.chooseDatanodes(null, null, nodeNum, 0, 15);
-    Assert.assertEquals(nodeNum, datanodeDetails.size());
-    Assert.assertTrue(cluster.isSameParent(datanodeDetails.get(0),
+    Assertions.assertEquals(nodeNum, datanodeDetails.size());
+    Assertions.assertTrue(cluster.isSameParent(datanodeDetails.get(0),
         datanodeDetails.get(1)));
-    Assert.assertTrue(cluster.isSameParent(datanodeDetails.get(0),
+    Assertions.assertTrue(cluster.isSameParent(datanodeDetails.get(0),
         datanodeDetails.get(2)));
-    Assert.assertTrue(cluster.isSameParent(datanodeDetails.get(1),
+    Assertions.assertTrue(cluster.isSameParent(datanodeDetails.get(1),
         datanodeDetails.get(2)));
   }
 
   @Test
   public void testvalidateContainerPlacement() {
     // Only run this test for the full set of DNs. 5 DNs per rack on 3 racks.
-    assumeTrue(datanodeCount == 15);
+    final int datanodeCount = 15;
+    setup(datanodeCount);
     List<DatanodeDetails> dns = new ArrayList<>();
     // First 5 node are on the same rack
     dns.add(datanodes.get(0));
@@ -522,7 +536,8 @@ public class TestSCMContainerPlacementRackAware {
 
   @Test
   public void testvalidateContainerPlacementSingleRackCluster() {
-    assumeTrue(datanodeCount == 5);
+    final int datanodeCount = 5;
+    setup(datanodeCount);
 
     // All nodes are on the same rack in this test, and the cluster only has
     // one rack.
@@ -549,8 +564,10 @@ public class TestSCMContainerPlacementRackAware {
     assertEquals(0, stat.misReplicationCount());
   }
 
-  @Test
-  public void testOutOfServiceNodesNotSelected() {
+  @ParameterizedTest
+  @MethodSource("numDatanodes")
+  public void testOutOfServiceNodesNotSelected(int datanodeCount) {
+    setup(datanodeCount);
     // Set all the nodes to out of service
     for (DatanodeInfo dn : dnInfos) {
       dn.setNodeStatus(new NodeStatus(DECOMMISSIONED, HEALTHY));
@@ -563,7 +580,7 @@ public class TestSCMContainerPlacementRackAware {
       try {
         List<DatanodeDetails> datanodeDetails =
             policy.chooseDatanodes(null, null, 1, 0, 0);
-        Assert.assertEquals(dnInfos.get(index), datanodeDetails.get(0));
+        Assertions.assertEquals(dnInfos.get(index), datanodeDetails.get(0));
       } catch (SCMException e) {
         // If we get SCMException: No satisfied datanode to meet the ... this is
         // ok, as there is only 1 IN_SERVICE node and with the retry logic we
diff --git a/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/container/placement/algorithms/TestSCMContainerPlacementRackScatter.java b/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/container/placement/algorithms/TestSCMContainerPlacementRackScatter.java
index dbb5f06b9e..87c2dbac40 100644
--- a/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/container/placement/algorithms/TestSCMContainerPlacementRackScatter.java
+++ b/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/container/placement/algorithms/TestSCMContainerPlacementRackScatter.java
@@ -36,21 +36,21 @@ import org.apache.hadoop.hdds.scm.node.DatanodeInfo;
 import org.apache.hadoop.hdds.scm.node.NodeManager;
 import org.apache.hadoop.hdds.scm.node.NodeStatus;
 import org.apache.hadoop.ozone.container.upgrade.UpgradeUtils;
-import org.hamcrest.MatcherAssert;
-import org.junit.After;
-import org.junit.Assert;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.runners.Parameterized;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.MethodSource;
+import org.junit.jupiter.params.provider.ValueSource;
 import org.mockito.Mockito;
 
 import java.util.ArrayList;
 import java.util.Arrays;
-import java.util.Collection;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
+import java.util.stream.IntStream;
 
 import static org.apache.hadoop.hdds.protocol.proto.HddsProtos.NodeOperationalState.DECOMMISSIONED;
 import static org.apache.hadoop.hdds.protocol.proto.HddsProtos.NodeState.HEALTHY;
@@ -58,24 +58,21 @@ import static org.apache.hadoop.hdds.scm.ScmConfigKeys.OZONE_DATANODE_RATIS_VOLU
 import static org.apache.hadoop.hdds.scm.net.NetConstants.LEAF_SCHEMA;
 import static org.apache.hadoop.hdds.scm.net.NetConstants.RACK_SCHEMA;
 import static org.apache.hadoop.hdds.scm.net.NetConstants.ROOT_SCHEMA;
-import static org.hamcrest.Matchers.greaterThanOrEqualTo;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertThrows;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
-import static org.junit.Assume.assumeTrue;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertThrows;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.fail;
+import static org.junit.jupiter.api.Assumptions.assumeTrue;
 import static org.mockito.Mockito.when;
 
 /**
  * Test for the scm container rack aware placement.
  */
-@RunWith(Parameterized.class)
 public class TestSCMContainerPlacementRackScatter {
   private NetworkTopology cluster;
   private OzoneConfiguration conf;
   private NodeManager nodeManager;
-  private final Integer datanodeCount;
   private final List<DatanodeDetails> datanodes = new ArrayList<>();
   private final List<DatanodeInfo> dnInfos = new ArrayList<>();
   // policy with fallback capability
@@ -85,18 +82,12 @@ public class TestSCMContainerPlacementRackScatter {
   private SCMContainerPlacementMetrics metrics;
   private static final int NODE_PER_RACK = 5;
 
-  public TestSCMContainerPlacementRackScatter(Integer count) {
-    this.datanodeCount = count;
+  private static IntStream numDatanodes() {
+    return IntStream.concat(IntStream.rangeClosed(3, 15),
+        IntStream.of(20, 25, 30));
   }
 
-  @Parameterized.Parameters
-  public static Collection<Object[]> setupDatanodes() {
-    return Arrays.asList(new Object[][] {{3}, {4}, {5}, {6}, {7}, {8}, {9},
-        {10}, {11}, {12}, {13}, {14}, {15}, {20}, {25}, {30}});
-  }
-
-  @Before
-  public void setup() {
+  private void setup(int datanodeCount) {
     //initialize network topology instance
     conf = new OzoneConfiguration();
     // We are using small units here
@@ -189,18 +180,25 @@ public class TestSCMContainerPlacementRackScatter {
         .thenReturn(cluster);
 
     // create placement policy instances
-    metrics = SCMContainerPlacementMetrics.create();
     policy = new SCMContainerPlacementRackScatter(
         nodeManager, conf, cluster, true, metrics);
   }
 
-  @After
+  @BeforeEach
+  public void init() {
+    metrics = SCMContainerPlacementMetrics.create();
+  }
+
+  @AfterEach
   public void teardown() {
     metrics.unRegister();
   }
 
-  @Test
-  public void chooseNodeWithNoExcludedNodes() throws SCMException {
+  @ParameterizedTest
+  @MethodSource("numDatanodes")
+  public void chooseNodeWithNoExcludedNodes(int datanodeCount)
+      throws SCMException {
+    setup(datanodeCount);
     int rackLevel = cluster.getMaxLevel() - 1;
     int rackNum = cluster.getNumOfNodes(rackLevel);
 
@@ -209,21 +207,21 @@ public class TestSCMContainerPlacementRackScatter {
     int nodeNum = 1;
     List<DatanodeDetails> datanodeDetails =
         policy.chooseDatanodes(null, null, nodeNum, 0, 15);
-    Assert.assertEquals(nodeNum, datanodeDetails.size());
+    Assertions.assertEquals(nodeNum, datanodeDetails.size());
 
     // 2 replicas
     nodeNum = 2;
     datanodeDetails = policy.chooseDatanodes(null, null, nodeNum, 0, 15);
-    Assert.assertEquals(nodeNum, datanodeDetails.size());
-    Assert.assertTrue(!cluster.isSameParent(datanodeDetails.get(0),
+    Assertions.assertEquals(nodeNum, datanodeDetails.size());
+    Assertions.assertTrue(!cluster.isSameParent(datanodeDetails.get(0),
         datanodeDetails.get(1)) || (datanodeCount <= NODE_PER_RACK));
 
     //  3 replicas
     nodeNum = 3;
     if (datanodeCount > nodeNum) {
       datanodeDetails = policy.chooseDatanodes(null, null, nodeNum, 0, 15);
-      Assert.assertEquals(nodeNum, datanodeDetails.size());
-      Assert.assertEquals(getRackSize(datanodeDetails),
+      Assertions.assertEquals(nodeNum, datanodeDetails.size());
+      Assertions.assertEquals(getRackSize(datanodeDetails),
           Math.min(nodeNum, rackNum));
     }
 
@@ -232,8 +230,8 @@ public class TestSCMContainerPlacementRackScatter {
     if (datanodeCount > nodeNum) {
       assumeTrue(datanodeCount >= NODE_PER_RACK);
       datanodeDetails = policy.chooseDatanodes(null, null, nodeNum, 0, 15);
-      Assert.assertEquals(nodeNum, datanodeDetails.size());
-      Assert.assertEquals(getRackSize(datanodeDetails),
+      Assertions.assertEquals(nodeNum, datanodeDetails.size());
+      Assertions.assertEquals(getRackSize(datanodeDetails),
           Math.min(nodeNum, rackNum));
     }
 
@@ -242,20 +240,23 @@ public class TestSCMContainerPlacementRackScatter {
     if (datanodeCount > nodeNum) {
       assumeTrue(datanodeCount > 2 * NODE_PER_RACK);
       datanodeDetails = policy.chooseDatanodes(null, null, nodeNum, 0, 15);
-      Assert.assertEquals(nodeNum, datanodeDetails.size());
-      Assert.assertEquals(getRackSize(datanodeDetails),
+      Assertions.assertEquals(nodeNum, datanodeDetails.size());
+      Assertions.assertEquals(getRackSize(datanodeDetails),
           Math.min(nodeNum, rackNum));
     }
   }
 
-  @Test
-  public void chooseNodeWithExcludedNodes() throws SCMException {
-    int rackLevel = cluster.getMaxLevel() - 1;
-    int rackNum = cluster.getNumOfNodes(rackLevel);
-    int totalNum;
+  @ParameterizedTest
+  @MethodSource("numDatanodes")
+  public void chooseNodeWithExcludedNodes(int datanodeCount)
+      throws SCMException {
     // test choose new datanodes for under replicated pipeline
     // 3 replicas, two existing datanodes on same rack
     assumeTrue(datanodeCount > NODE_PER_RACK);
+    setup(datanodeCount);
+    int rackLevel = cluster.getMaxLevel() - 1;
+    int rackNum = cluster.getNumOfNodes(rackLevel);
+    int totalNum;
     int nodeNum = 1;
     List<DatanodeDetails> excludedNodes = new ArrayList<>();
 
@@ -263,10 +264,10 @@ public class TestSCMContainerPlacementRackScatter {
     excludedNodes.add(datanodes.get(1));
     List<DatanodeDetails> datanodeDetails = policy.chooseDatanodes(
         excludedNodes, null, nodeNum, 0, 15);
-    Assert.assertEquals(nodeNum, datanodeDetails.size());
-    Assert.assertFalse(cluster.isSameParent(datanodeDetails.get(0),
+    Assertions.assertEquals(nodeNum, datanodeDetails.size());
+    Assertions.assertFalse(cluster.isSameParent(datanodeDetails.get(0),
         excludedNodes.get(0)));
-    Assert.assertFalse(cluster.isSameParent(datanodeDetails.get(0),
+    Assertions.assertFalse(cluster.isSameParent(datanodeDetails.get(0),
         excludedNodes.get(1)));
 
     // 3 replicas, one existing datanode
@@ -276,8 +277,8 @@ public class TestSCMContainerPlacementRackScatter {
     excludedNodes.add(datanodes.get(0));
     datanodeDetails = policy.chooseDatanodes(
         excludedNodes, null, nodeNum, 0, 15);
-    Assert.assertEquals(nodeNum, datanodeDetails.size());
-    Assert.assertEquals(getRackSize(datanodeDetails, excludedNodes),
+    Assertions.assertEquals(nodeNum, datanodeDetails.size());
+    Assertions.assertEquals(getRackSize(datanodeDetails, excludedNodes),
         Math.min(totalNum, rackNum));
 
     // 3 replicas, two existing datanodes on different rack
@@ -288,8 +289,8 @@ public class TestSCMContainerPlacementRackScatter {
     excludedNodes.add(datanodes.get(5));
     datanodeDetails = policy.chooseDatanodes(
         excludedNodes, null, nodeNum, 0, 15);
-    Assert.assertEquals(nodeNum, datanodeDetails.size());
-    Assert.assertEquals(getRackSize(datanodeDetails, excludedNodes),
+    Assertions.assertEquals(nodeNum, datanodeDetails.size());
+    Assertions.assertEquals(getRackSize(datanodeDetails, excludedNodes),
         Math.min(totalNum, rackNum));
 
     // 5 replicas, one existing datanode
@@ -299,8 +300,8 @@ public class TestSCMContainerPlacementRackScatter {
     excludedNodes.add(datanodes.get(0));
     datanodeDetails = policy.chooseDatanodes(
         excludedNodes, null, nodeNum, 0, 15);
-    Assert.assertEquals(nodeNum, datanodeDetails.size());
-    Assert.assertEquals(getRackSize(datanodeDetails, excludedNodes),
+    Assertions.assertEquals(nodeNum, datanodeDetails.size());
+    Assertions.assertEquals(getRackSize(datanodeDetails, excludedNodes),
         Math.min(totalNum, rackNum));
 
     // 5 replicas, two existing datanodes on different rack
@@ -331,14 +332,17 @@ public class TestSCMContainerPlacementRackScatter {
     } else {
       datanodeDetails = policy.chooseDatanodes(
           excludedNodes, null, nodeNum, 0, 15);
-      Assert.assertEquals(nodeNum, datanodeDetails.size());
-      Assert.assertEquals(getRackSize(datanodeDetails, excludedNodes),
+      Assertions.assertEquals(nodeNum, datanodeDetails.size());
+      Assertions.assertEquals(getRackSize(datanodeDetails, excludedNodes),
           Math.min(totalNum, rackNum));
     }
   }
 
-  @Test
-  public void chooseNodeWithFavoredNodes() throws SCMException {
+  @ParameterizedTest
+  @MethodSource("numDatanodes")
+  public void chooseNodeWithFavoredNodes(int datanodeCount)
+      throws SCMException {
+    setup(datanodeCount);
     int nodeNum = 1;
     List<DatanodeDetails> excludedNodes = new ArrayList<>();
     List<DatanodeDetails> favoredNodes = new ArrayList<>();
@@ -347,11 +351,11 @@ public class TestSCMContainerPlacementRackScatter {
     favoredNodes.add(datanodes.get(0));
     List<DatanodeDetails> datanodeDetails = policy.chooseDatanodes(
         excludedNodes, favoredNodes, nodeNum, 0, 15);
-    Assert.assertEquals(nodeNum, datanodeDetails.size());
-    Assert.assertEquals(datanodeDetails.get(0).getNetworkFullPath(),
+    Assertions.assertEquals(nodeNum, datanodeDetails.size());
+    Assertions.assertEquals(datanodeDetails.get(0).getNetworkFullPath(),
         favoredNodes.get(0).getNetworkFullPath());
 
-    // no overlap between excludedNodes and favoredNodes, favoredNodes can been
+    // no overlap between excludedNodes and favoredNodes, favoredNodes can be
     // chosen.
     excludedNodes.clear();
     favoredNodes.clear();
@@ -359,8 +363,8 @@ public class TestSCMContainerPlacementRackScatter {
     favoredNodes.add(datanodes.get(1));
     datanodeDetails = policy.chooseDatanodes(
         excludedNodes, favoredNodes, nodeNum, 0, 15);
-    Assert.assertEquals(nodeNum, datanodeDetails.size());
-    Assert.assertEquals(datanodeDetails.get(0).getNetworkFullPath(),
+    Assertions.assertEquals(nodeNum, datanodeDetails.size());
+    Assertions.assertEquals(datanodeDetails.get(0).getNetworkFullPath(),
         favoredNodes.get(0).getNetworkFullPath());
 
     // there is overlap between excludedNodes and favoredNodes, favoredNodes
@@ -371,13 +375,15 @@ public class TestSCMContainerPlacementRackScatter {
     favoredNodes.add(datanodes.get(0));
     datanodeDetails = policy.chooseDatanodes(
         excludedNodes, favoredNodes, nodeNum, 0, 15);
-    Assert.assertEquals(nodeNum, datanodeDetails.size());
-    Assert.assertFalse(datanodeDetails.get(0).getNetworkFullPath()
-        .equals(favoredNodes.get(0).getNetworkFullPath()));
+    Assertions.assertEquals(nodeNum, datanodeDetails.size());
+    Assertions.assertNotEquals(datanodeDetails.get(0).getNetworkFullPath(),
+        favoredNodes.get(0).getNetworkFullPath());
   }
 
-  @Test
-  public void testNoInfiniteLoop() throws SCMException {
+  @ParameterizedTest
+  @MethodSource("numDatanodes")
+  public void testNoInfiniteLoop(int datanodeCount) {
+    setup(datanodeCount);
     int nodeNum = 1;
 
     try {
@@ -385,7 +391,7 @@ public class TestSCMContainerPlacementRackScatter {
       policy.chooseDatanodes(null, null, nodeNum, STORAGE_CAPACITY + 0, 15);
       fail("Storage requested exceeds capacity, this call should fail");
     } catch (Exception e) {
-      assertTrue(e.getClass().getSimpleName().equals("SCMException"));
+      assertEquals("SCMException", e.getClass().getSimpleName());
     }
 
     // get metrics
@@ -394,15 +400,17 @@ public class TestSCMContainerPlacementRackScatter {
     long tryCount = metrics.getDatanodeChooseAttemptCount();
     long compromiseCount = metrics.getDatanodeChooseFallbackCount();
 
-    Assert.assertEquals(totalRequest, nodeNum);
-    Assert.assertEquals(successCount, 0);
-    MatcherAssert.assertThat("Not enough try", tryCount,
-        greaterThanOrEqualTo((long) nodeNum));
-    Assert.assertEquals(compromiseCount, 0);
+    Assertions.assertEquals(totalRequest, nodeNum);
+    Assertions.assertEquals(successCount, 0);
+    Assertions.assertTrue(tryCount >= nodeNum, "Not enough try");
+    Assertions.assertEquals(compromiseCount, 0);
   }
 
-  @Test
-  public void testDatanodeWithDefaultNetworkLocation() throws SCMException {
+  @ParameterizedTest
+  @MethodSource("numDatanodes")
+  public void testDatanodeWithDefaultNetworkLocation(int datanodeCount)
+      throws SCMException {
+    setup(datanodeCount);
     String hostname = "node";
     List<DatanodeInfo> dnInfoList = new ArrayList<>();
     List<DatanodeDetails> dataList = new ArrayList<>();
@@ -432,7 +440,7 @@ public class TestSCMContainerPlacementRackScatter {
       clusterMap.add(dn);
       dnInfoList.add(dnInfo);
     }
-    Assert.assertEquals(dataList.size(), StringUtils.countMatches(
+    Assertions.assertEquals(dataList.size(), StringUtils.countMatches(
         clusterMap.toString(), NetConstants.DEFAULT_RACK));
     for (DatanodeInfo dn: dnInfoList) {
       when(nodeManager.getNodeByUuid(dn.getUuidString()))
@@ -446,14 +454,16 @@ public class TestSCMContainerPlacementRackScatter {
             true, metrics);
     List<DatanodeDetails> datanodeDetails =
         newPolicy.chooseDatanodes(null, null, nodeNum, 0, 15);
-    Assert.assertEquals(nodeNum, datanodeDetails.size());
-    Assert.assertEquals(1, getRackSize(datanodeDetails));
+    Assertions.assertEquals(nodeNum, datanodeDetails.size());
+    Assertions.assertEquals(1, getRackSize(datanodeDetails));
   }
 
-  @Test
-  public void testvalidateContainerPlacement() {
+  @ParameterizedTest
+  @ValueSource(ints = {15, 20, 25, 30})
+  public void testValidateContainerPlacement(int datanodeCount) {
     // Only run this test for the full set of DNs. 5 DNs per rack on 6 racks.
     assumeTrue(datanodeCount >= 15);
+    setup(datanodeCount);
     List<DatanodeDetails> dns = new ArrayList<>();
     // First 5 node are on the same rack
     dns.add(datanodes.get(0));
@@ -488,8 +498,9 @@ public class TestSCMContainerPlacementRackScatter {
   }
 
   @Test
-  public void testvalidateContainerPlacementSingleRackCluster() {
-    assumeTrue(datanodeCount == 5);
+  public void testValidateContainerPlacementSingleRackCluster() {
+    final int datanodeCount = 5;
+    setup(datanodeCount);
 
     // All nodes are on the same rack in this test, and the cluster only has
     // one rack.
@@ -518,7 +529,8 @@ public class TestSCMContainerPlacementRackScatter {
 
   @Test
   public void testExcludedNodesOverlapsOutOfServiceNodes() throws SCMException {
-    assumeTrue(datanodeCount == 6);
+    final int datanodeCount = 6;
+    setup(datanodeCount);
 
     // DN 5 is out of service
     dnInfos.get(5).setNodeStatus(new NodeStatus(DECOMMISSIONED, HEALTHY));
@@ -536,7 +548,7 @@ public class TestSCMContainerPlacementRackScatter {
 
     List<DatanodeDetails> datanodeDetails = policy.chooseDatanodes(
         excludedNodes, null, nodeNum, 0, 5);
-    Assert.assertEquals(nodeNum, datanodeDetails.size());
+    Assertions.assertEquals(nodeNum, datanodeDetails.size());
   }
 
   private int getRackSize(List<DatanodeDetails>... datanodeDetails) {
diff --git a/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/pipeline/TestPipelineDatanodesIntersection.java b/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/pipeline/TestPipelineDatanodesIntersection.java
index b0749ac4ce..dcc3829cce 100644
--- a/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/pipeline/TestPipelineDatanodesIntersection.java
+++ b/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/pipeline/TestPipelineDatanodesIntersection.java
@@ -37,19 +37,16 @@ import org.apache.hadoop.hdds.utils.db.DBStoreBuilder;
 import org.apache.hadoop.ozone.ClientVersion;
 import org.apache.hadoop.ozone.container.common.SCMTestUtils;
 import org.apache.ozone.test.GenericTestUtils;
-import org.junit.After;
-import org.junit.Assert;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.runners.Parameterized;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.CsvSource;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import java.io.File;
 import java.io.IOException;
-import java.util.Arrays;
-import java.util.Collection;
 import java.util.List;
 import java.util.UUID;
 
@@ -59,19 +56,16 @@ import static org.apache.hadoop.hdds.scm.ScmConfigKeys.OZONE_SCM_PIPELINE_AUTO_C
 /**
  * Test for pipeline datanodes intersection.
  */
-@RunWith(Parameterized.class)
 public class TestPipelineDatanodesIntersection {
   private static final Logger LOG = LoggerFactory
       .getLogger(TestPipelineDatanodesIntersection.class.getName());
 
-  private int nodeCount;
-  private int nodeHeaviness;
   private OzoneConfiguration conf;
   private boolean end;
   private File testDir;
   private DBStore dbStore;
 
-  @Before
+  @BeforeEach
   public void initialize() throws IOException {
     conf = SCMTestUtils.getConf();
     end = false;
@@ -82,7 +76,7 @@ public class TestPipelineDatanodesIntersection {
         conf, new SCMDBDefinition());
   }
 
-  @After
+  @AfterEach
   public void cleanup() throws Exception {
     if (dbStore != null) {
       dbStore.close();
@@ -91,25 +85,17 @@ public class TestPipelineDatanodesIntersection {
     FileUtil.fullyDelete(testDir);
   }
 
-  public TestPipelineDatanodesIntersection(int nodeCount, int nodeHeaviness) {
-    this.nodeCount = nodeCount;
-    this.nodeHeaviness = nodeHeaviness;
-  }
-
-  @Parameterized.Parameters
-  public static Collection inputParams() {
-    return Arrays.asList(new Object[][] {
-        {4, 5},
-        {10, 5},
-        {20, 5},
-        {50, 5},
-        {100, 5},
-        {100, 10}
-    });
-  }
-
-  @Test
-  public void testPipelineDatanodesIntersection() throws IOException {
+  @ParameterizedTest
+  @CsvSource({
+      "4, 5",
+      "10, 5",
+      "20, 5",
+      "50, 5",
+      "100, 5",
+      "100, 10"
+  })
+  public void testPipelineDatanodesIntersection(int nodeCount,
+      int nodeHeaviness) throws IOException {
     NodeManager nodeManager = new MockNodeManager(true, nodeCount);
     conf.setInt(OZONE_DATANODE_PIPELINE_LIMIT, nodeHeaviness);
     conf.setBoolean(OZONE_SCM_PIPELINE_AUTO_CREATE_FACTOR_ONE, false);
@@ -123,8 +109,8 @@ public class TestPipelineDatanodesIntersection {
         .build();
 
 
-    PipelineProvider provider = new MockRatisPipelineProvider(nodeManager,
-        stateManager, conf);
+    PipelineProvider<RatisReplicationConfig> provider =
+        new MockRatisPipelineProvider(nodeManager, stateManager, conf);
 
     int healthyNodeCount = nodeManager
         .getNodeCount(NodeStatus.inServiceHealthy());
@@ -141,7 +127,7 @@ public class TestPipelineDatanodesIntersection {
         List<Pipeline> overlapPipelines = RatisPipelineUtils
             .checkPipelineContainSameDatanodes(stateManager, pipeline);
 
-        if (overlapPipelines.isEmpty()) {
+        if (!overlapPipelines.isEmpty()) {
           intersectionCount++;
           for (Pipeline overlapPipeline : overlapPipelines) {
             LOG.info("This pipeline: " + pipeline.getId().toString() +
@@ -162,7 +148,7 @@ public class TestPipelineDatanodesIntersection {
       } catch (IOException e) {
         end = true;
         // Should not throw regular IOException.
-        Assert.fail();
+        Assertions.fail();
       }
     }
 
diff --git a/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/upgrade/TestSCMHAUnfinalizedStateValidationAction.java b/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/upgrade/TestSCMHAUnfinalizedStateValidationAction.java
index c92820ea43..98d16c3eec 100644
--- a/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/upgrade/TestSCMHAUnfinalizedStateValidationAction.java
+++ b/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/upgrade/TestSCMHAUnfinalizedStateValidationAction.java
@@ -26,20 +26,14 @@ import org.apache.hadoop.hdds.upgrade.HDDSLayoutFeature;
 import org.apache.hadoop.ozone.OzoneConfigKeys;
 import org.apache.hadoop.ozone.upgrade.UpgradeException;
 import org.apache.hadoop.ozone.upgrade.UpgradeFinalizer;
-import org.apache.ozone.test.LambdaTestUtils;
 import org.apache.ratis.util.ExitUtils;
-import org.junit.Assert;
-import org.junit.BeforeClass;
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.rules.TemporaryFolder;
-import org.junit.runner.RunWith;
-import org.junit.runners.Parameterized;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.io.TempDir;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.CsvSource;
 
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.List;
+import java.nio.file.Path;
 import java.util.UUID;
 
 /**
@@ -54,82 +48,56 @@ import java.util.UUID;
  * Starting a new cluster finalized without SCM HA enabled should not trigger
  * the action. This is tested by all other tests that run non-HA clusters.
  */
-@RunWith(Parameterized.class)
 public class TestSCMHAUnfinalizedStateValidationAction {
-  @Rule
-  public TemporaryFolder temporaryFolder = new TemporaryFolder();
 
-  private final boolean haEnabledBefore;
-  private final boolean haEnabledPreFinalized;
-  private final boolean shouldFail;
-  private final String dataPath;
   private static final String CLUSTER_ID = UUID.randomUUID().toString();
 
-  @BeforeClass
+  @BeforeAll
   public static void setup() {
     ExitUtils.disableSystemExit();
   }
 
-
-  @Parameterized.Parameters(name = "haEnabledBefore={0} " +
-      "haEnabledPreFinalized={1}")
-  public static Collection<Object[]> cases() {
-    List<Object[]> params = new ArrayList<>();
-
-    for (boolean haBefore: Arrays.asList(true, false)) {
-      for (boolean haAfter: Arrays.asList(true, false)) {
-        params.add(new Object[]{haBefore, haAfter});
-      }
-    }
-
-    return params;
-  }
-
-  public TestSCMHAUnfinalizedStateValidationAction(
-      boolean haEnabledBefore, boolean haEnabledPreFinalized)
-      throws Exception {
-    this.haEnabledBefore = haEnabledBefore;
-    this.haEnabledPreFinalized = haEnabledPreFinalized;
-
-    shouldFail = !this.haEnabledBefore && this.haEnabledPreFinalized;
-
-    temporaryFolder.create();
-    dataPath = temporaryFolder.newFolder().getAbsolutePath();
-  }
-
-  @Test
-  public void testUpgrade() throws Exception {
+  @ParameterizedTest
+  @CsvSource({
+      "true, true",
+      "true, false",
+      "false, true",
+      "false, false",
+  })
+  public void testUpgrade(boolean haEnabledBefore,
+      boolean haEnabledPreFinalized, @TempDir Path dataPath) throws Exception {
     // Write version file for original version.
     OzoneConfiguration conf = new OzoneConfiguration();
     conf.setInt(ScmConfig.ConfigStrings.HDDS_SCM_INIT_DEFAULT_LAYOUT_VERSION,
         HDDSLayoutFeature.INITIAL_VERSION.layoutVersion());
     conf.setBoolean(ScmConfigKeys.OZONE_SCM_HA_ENABLE_KEY, haEnabledBefore);
-    conf.set(ScmConfigKeys.OZONE_SCM_DB_DIRS, dataPath);
-    conf.set(OzoneConfigKeys.OZONE_METADATA_DIRS, dataPath);
+    conf.set(ScmConfigKeys.OZONE_SCM_DB_DIRS, dataPath.toString());
+    conf.set(OzoneConfigKeys.OZONE_METADATA_DIRS, dataPath.toString());
     // This init should always succeed, since SCM is not pre-finalized yet.
     boolean initResult1 = StorageContainerManager.scmInit(conf, CLUSTER_ID);
-    Assert.assertTrue(initResult1);
+    Assertions.assertTrue(initResult1);
 
     // Set up new pre-finalized SCM.
     conf.setBoolean(ScmConfigKeys.OZONE_SCM_HA_ENABLE_KEY,
         haEnabledPreFinalized);
     StorageContainerManager scm = HddsTestUtils.getScm(conf);
 
-    Assert.assertEquals(UpgradeFinalizer.Status.FINALIZATION_REQUIRED,
+    Assertions.assertEquals(UpgradeFinalizer.Status.FINALIZATION_REQUIRED,
         scm.getUpgradeFinalizer().getStatus());
 
+    final boolean shouldFail = !haEnabledBefore && haEnabledPreFinalized;
     if (shouldFail) {
       // Start on its own should fail.
-      LambdaTestUtils.intercept(UpgradeException.class, scm::start);
+      Assertions.assertThrows(UpgradeException.class, scm::start);
 
       // Init followed by start should both fail.
       // Init is not necessary here, but is allowed to be run.
-      LambdaTestUtils.intercept(UpgradeException.class,
+      Assertions.assertThrows(UpgradeException.class,
           () -> StorageContainerManager.scmInit(conf, CLUSTER_ID));
-      LambdaTestUtils.intercept(UpgradeException.class, scm::start);
+      Assertions.assertThrows(UpgradeException.class, scm::start);
     } else {
       boolean initResult2 = StorageContainerManager.scmInit(conf, CLUSTER_ID);
-      Assert.assertTrue(initResult2);
+      Assertions.assertTrue(initResult2);
       scm.start();
       scm.stop();
     }


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@ozone.apache.org
For additional commands, e-mail: commits-help@ozone.apache.org