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