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 d7fd453356 HDDS-10030. Improve assertTrue assertions in ozone-common
(#5899)
d7fd453356 is described below
commit d7fd453356d182ca97f17b943df21f3dfb5dc777
Author: Doroszlai, Attila <[email protected]>
AuthorDate: Thu Jan 4 11:20:12 2024 +0100
HDDS-10030. Improve assertTrue assertions in ozone-common (#5899)
---
.../java/org/apache/hadoop/ozone/TestOmUtils.java | 126 +++++-----
.../org/apache/hadoop/ozone/TestOzoneAcls.java | 11 +-
.../ozone/client/io/TestSelectorOutputStream.java | 22 +-
.../hadoop/ozone/om/lock/TestKeyPathLock.java | 40 ++--
.../hadoop/ozone/om/lock/TestOzoneManagerLock.java | 265 ++++++++-------------
5 files changed, 207 insertions(+), 257 deletions(-)
diff --git
a/hadoop-ozone/common/src/test/java/org/apache/hadoop/ozone/TestOmUtils.java
b/hadoop-ozone/common/src/test/java/org/apache/hadoop/ozone/TestOmUtils.java
index 0601b54782..cb27038c29 100644
--- a/hadoop-ozone/common/src/test/java/org/apache/hadoop/ozone/TestOmUtils.java
+++ b/hadoop-ozone/common/src/test/java/org/apache/hadoop/ozone/TestOmUtils.java
@@ -26,26 +26,26 @@ import org.junit.jupiter.api.io.TempDir;
import java.io.File;
import java.io.IOException;
+import java.net.InetAddress;
import java.net.InetSocketAddress;
import java.nio.file.Path;
-import java.util.List;
-import java.util.Map;
import java.util.Set;
+import java.util.TreeSet;
+import static java.util.Arrays.asList;
+import static java.util.stream.Collectors.toSet;
import static org.apache.hadoop.ozone.OmUtils.getOmHostsFromConfig;
import static org.apache.hadoop.ozone.OmUtils.getOzoneManagerServiceId;
import static org.apache.hadoop.ozone.om.OMConfigKeys.OZONE_OM_ADDRESS_KEY;
import static
org.apache.hadoop.ozone.om.OMConfigKeys.OZONE_OM_INTERNAL_SERVICE_ID;
import static org.apache.hadoop.ozone.om.OMConfigKeys.OZONE_OM_NODES_KEY;
import static org.apache.hadoop.ozone.om.OMConfigKeys.OZONE_OM_SERVICE_IDS_KEY;
-import static org.hamcrest.CoreMatchers.is;
-import static org.hamcrest.MatcherAssert.assertThat;
+import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.jupiter.api.Assertions.assertFalse;
-import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNull;
import static org.junit.jupiter.api.Assertions.assertThrows;
-import static org.junit.jupiter.api.Assertions.fail;
+import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.junit.jupiter.api.Assumptions.assumeTrue;
/**
@@ -58,7 +58,7 @@ public class TestOmUtils {
private Path folder;
@Test
- public void createOMDirCreatesDirectoryIfNecessary() throws IOException {
+ void createOMDirCreatesDirectoryIfNecessary() {
File parent = folder.toFile();
File omDir = new File(new File(parent, "sub"), "dir");
assertFalse(omDir.exists());
@@ -69,7 +69,7 @@ public class TestOmUtils {
}
@Test
- public void createOMDirDoesNotThrowIfAlreadyExists() throws IOException {
+ void createOMDirDoesNotThrowIfAlreadyExists() {
File omDir = folder.toFile();
assertTrue(omDir.exists());
@@ -79,7 +79,7 @@ public class TestOmUtils {
}
@Test
- public void createOMDirThrowsIfCannotCreate() {
+ void createOMDirThrowsIfCannotCreate() {
assertThrows(IllegalArgumentException.class, () -> {
File parent = folder.toFile();
File omDir = new File(new File(parent, "sub"), "dir");
@@ -91,76 +91,82 @@ public class TestOmUtils {
}
@Test
- public void testGetOmHAAddressesById() {
+ void testGetOmHAAddressesById() {
OzoneConfiguration conf = new OzoneConfiguration();
conf.set(OZONE_OM_SERVICE_IDS_KEY, "ozone1");
conf.set("ozone.om.nodes.ozone1", "node1,node2,node3");
conf.set("ozone.om.address.ozone1.node1", "1.1.1.1");
conf.set("ozone.om.address.ozone1.node2", "1.1.1.2");
conf.set("ozone.om.address.ozone1.node3", "1.1.1.3");
- Map<String, List<InetSocketAddress>> addresses =
- OmUtils.getOmHAAddressesById(conf);
- assertFalse(addresses.isEmpty());
- List<InetSocketAddress> rpcAddrs = addresses.get("ozone1");
- assertFalse(rpcAddrs.isEmpty());
- assertTrue(rpcAddrs.stream().anyMatch(
- a -> a.getAddress().getHostAddress().equals("1.1.1.1")));
- assertTrue(rpcAddrs.stream().anyMatch(
- a -> a.getAddress().getHostAddress().equals("1.1.1.2")));
- assertTrue(rpcAddrs.stream().anyMatch(
- a -> a.getAddress().getHostAddress().equals("1.1.1.3")));
+ Set<String> ozone1hosts = OmUtils.getOmHAAddressesById(conf)
+ .get("ozone1")
+ .stream()
+ .map(InetSocketAddress::getAddress)
+ .map(InetAddress::getHostAddress)
+ .collect(toSet());
+ assertEquals(
+ new TreeSet<>(asList("1.1.1.1", "1.1.1.2", "1.1.1.3")),
+ ozone1hosts);
}
@Test
- public void testGetOzoneManagerServiceId() throws IOException {
-
+ void getOzoneManagerServiceIdWithoutAnyServices() throws IOException {
// If the above is not configured, look at 'ozone.om.service.ids'.
// If no config is set, return null. (Non HA)
OzoneConfiguration configuration = new OzoneConfiguration();
assertNull(getOzoneManagerServiceId(configuration));
+ }
+ @Test
+ void getOzoneManagerServiceIdPrefersInternalService() throws IOException {
// Verify 'ozone.om.internal.service.id' takes precedence
+ OzoneConfiguration configuration = new OzoneConfiguration();
configuration.set(OZONE_OM_INTERNAL_SERVICE_ID, "om1");
configuration.set(OZONE_OM_SERVICE_IDS_KEY, "om2,om1");
String id = getOzoneManagerServiceId(configuration);
assertEquals("om1", id);
+ }
+ @Test
+ void getOzoneManagerServiceIdWithInternalServiceMismatch() {
+ OzoneConfiguration configuration = new OzoneConfiguration();
+ configuration.set(OZONE_OM_INTERNAL_SERVICE_ID, "om1");
configuration.set(OZONE_OM_SERVICE_IDS_KEY, "om2,om3");
- try {
- getOzoneManagerServiceId(configuration);
- fail();
- } catch (IOException ioEx) {
- assertTrue(ioEx.getMessage()
- .contains("Cannot find the internal service id om1 in [om2, om3]"));
- }
+ Exception e = assertThrows(IOException.class,
+ () -> getOzoneManagerServiceId(configuration));
+ assertThat(e)
+ .hasMessageContaining("Cannot find the internal service id om1 in
[om2, om3]");
+ }
+ @Test
+ void getOzoneManagerServiceIdWithSingleServiceConfigured() throws
IOException {
// When internal service ID is not defined.
// Verify if count(ozone.om.service.ids) == 1, return that id.
- configuration = new OzoneConfiguration();
+ OzoneConfiguration configuration = new OzoneConfiguration();
configuration.set(OZONE_OM_SERVICE_IDS_KEY, "om2");
- id = getOzoneManagerServiceId(configuration);
+ String id = getOzoneManagerServiceId(configuration);
assertEquals("om2", id);
+ }
+ @Test
+ void getOzoneManagerServiceIdWithMultipleServices() {
// Verify if more than count(ozone.om.service.ids) > 1 and internal
// service id is not defined, throw exception
+ OzoneConfiguration configuration = new OzoneConfiguration();
configuration.set(OZONE_OM_SERVICE_IDS_KEY, "om2,om1");
- try {
- getOzoneManagerServiceId(configuration);
- fail();
- } catch (IOException ioEx) {
- assertTrue(ioEx.getMessage()
- .contains("More than 1 OzoneManager ServiceID (ozone.om.service" +
- ".ids) configured"));
- }
+ Exception e = assertThrows(IOException.class,
+ () -> getOzoneManagerServiceId(configuration));
+ assertThat(e)
+ .hasMessageContaining("More than 1 OzoneManager ServiceID
(ozone.om.service.ids) configured");
}
@Test
- public void checkMaxTransactionID() {
+ void checkMaxTransactionID() {
assertEquals((long) (Math.pow(2, 54) - 2), OmUtils.MAX_TRXN_ID);
}
@Test
- public void testGetOmHostsFromConfig() {
+ void testGetOmHostsFromConfig() {
OzoneConfiguration conf = new OzoneConfiguration();
String serviceId = "myOmId";
@@ -175,40 +181,46 @@ public class TestOmUtils {
Set<String> hosts = getOmHostsFromConfig(conf, serviceId);
assertEquals(3, hosts.size());
- assertTrue(hosts.contains("omA-host"));
- assertTrue(hosts.contains("omB-host"));
- assertTrue(hosts.contains("omC-host"));
+ assertThat(hosts).contains("omA-host", "omB-host", "omC-host");
hosts = getOmHostsFromConfig(conf, serviceId2);
assertEquals(1, hosts.size());
- assertTrue(hosts.contains("om1-host"));
+ assertThat(hosts).contains("om1-host");
- assertTrue(getOmHostsFromConfig(conf, "newId").isEmpty());
+ assertEquals(0, getOmHostsFromConfig(conf, "newId").size());
}
@Test
- public void testgetOmSocketAddress() {
+ void getOmSocketAddressHost() {
final OzoneConfiguration conf = new OzoneConfiguration();
// First try a client address with just a host name. Verify it falls
// back to the default port.
conf.set(OMConfigKeys.OZONE_OM_ADDRESS_KEY, "1.2.3.4");
InetSocketAddress addr = OmUtils.getOmAddress(conf);
- assertThat(addr.getHostString(), is("1.2.3.4"));
- assertThat(addr.getPort(), is(OMConfigKeys.OZONE_OM_PORT_DEFAULT));
+ assertEquals("1.2.3.4", addr.getHostString());
+ assertEquals(OMConfigKeys.OZONE_OM_PORT_DEFAULT, addr.getPort());
+ }
+ @Test
+ void getOmSocketAddressHostPort() {
+ final OzoneConfiguration conf = new OzoneConfiguration();
// Next try a client address with just a host name and port. Verify the
port
// is ignored and the default OM port is used.
conf.set(OMConfigKeys.OZONE_OM_ADDRESS_KEY, "1.2.3.4:100");
- addr = OmUtils.getOmAddress(conf);
- assertThat(addr.getHostString(), is("1.2.3.4"));
- assertThat(addr.getPort(), is(100));
+ InetSocketAddress addr = OmUtils.getOmAddress(conf);
+ assertEquals("1.2.3.4", addr.getHostString());
+ assertEquals(100, addr.getPort());
+ }
- // Assert the we are able to use default configs if no value is specified.
+ @Test
+ void getOmSocketAddressEmpty() {
+ final OzoneConfiguration conf = new OzoneConfiguration();
+ // Assert that we are able to use default configs if no value is specified.
conf.set(OMConfigKeys.OZONE_OM_ADDRESS_KEY, "");
- addr = OmUtils.getOmAddress(conf);
- assertThat(addr.getHostString(), is("0.0.0.0"));
- assertThat(addr.getPort(), is(OMConfigKeys.OZONE_OM_PORT_DEFAULT));
+ InetSocketAddress addr = OmUtils.getOmAddress(conf);
+ assertEquals("0.0.0.0", addr.getHostString());
+ assertEquals(OMConfigKeys.OZONE_OM_PORT_DEFAULT, addr.getPort());
}
}
diff --git
a/hadoop-ozone/common/src/test/java/org/apache/hadoop/ozone/TestOzoneAcls.java
b/hadoop-ozone/common/src/test/java/org/apache/hadoop/ozone/TestOzoneAcls.java
index d20c1e4aa4..a815b72dec 100644
---
a/hadoop-ozone/common/src/test/java/org/apache/hadoop/ozone/TestOzoneAcls.java
+++
b/hadoop-ozone/common/src/test/java/org/apache/hadoop/ozone/TestOzoneAcls.java
@@ -35,6 +35,7 @@ import static
org.apache.hadoop.ozone.security.acl.IAccessAuthorizer.ACLType.REA
import static
org.apache.hadoop.ozone.security.acl.IAccessAuthorizer.ACLType.READ_ACL;
import static
org.apache.hadoop.ozone.security.acl.IAccessAuthorizer.ACLType.WRITE;
import static
org.apache.hadoop.ozone.security.acl.IAccessAuthorizer.ACLType.WRITE_ACL;
+import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.jupiter.api.Assertions.fail;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertTrue;
@@ -44,10 +45,10 @@ import static org.junit.jupiter.api.Assertions.assertThrows;
/**
* This class is to test acl storage and retrieval in ozone store.
*/
-public class TestOzoneAcls {
+class TestOzoneAcls {
@Test
- public void testAclParse() {
+ void testAclParse() {
HashMap<String, Boolean> testMatrix;
testMatrix = new HashMap<>();
@@ -134,7 +135,7 @@ public class TestOzoneAcls {
}
@Test
- public void testAclValues() throws Exception {
+ void testAclValues() {
OzoneAcl acl = OzoneAcl.parseAcl("user:bilbo:rw");
assertEquals(acl.getName(), "bilbo");
assertTrue(acl.getAclBitSet().get(READ.ordinal()));
@@ -269,11 +270,11 @@ public class TestOzoneAcls {
IllegalArgumentException exception = assertThrows(
IllegalArgumentException.class,
() -> OzoneAcl.parseAcl("world::rwdlncxncxdfsfgbny"));
- assertTrue(exception.getMessage().contains("ACL right is not"));
+ assertThat(exception).hasMessageContaining("ACL right is not");
}
@Test
- public void testBitSetToListConversion() throws Exception {
+ void testBitSetToListConversion() {
OzoneAcl acl = OzoneAcl.parseAcl("user:bilbo:rw");
List<ACLType> rights = acl.getAclList();
diff --git
a/hadoop-ozone/common/src/test/java/org/apache/hadoop/ozone/client/io/TestSelectorOutputStream.java
b/hadoop-ozone/common/src/test/java/org/apache/hadoop/ozone/client/io/TestSelectorOutputStream.java
index 7e831645f9..d1c8213cd0 100644
---
a/hadoop-ozone/common/src/test/java/org/apache/hadoop/ozone/client/io/TestSelectorOutputStream.java
+++
b/hadoop-ozone/common/src/test/java/org/apache/hadoop/ozone/client/io/TestSelectorOutputStream.java
@@ -31,7 +31,7 @@ import java.io.IOException;
import java.io.OutputStream;
import java.util.function.Supplier;
-import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertThrows;
@@ -40,8 +40,8 @@ import static org.junit.jupiter.api.Assertions.assertThrows;
* Test {@link SelectorOutputStream}.
*/
@Timeout(30)
-public class TestSelectorOutputStream {
- static final Logger LOG = LoggerFactory.getLogger(
+class TestSelectorOutputStream {
+ private static final Logger LOG = LoggerFactory.getLogger(
TestSelectorOutputStream.class);
enum Op {
@@ -116,48 +116,48 @@ public class TestSelectorOutputStream {
}
@Test
- public void testFlush() throws Exception {
+ void testFlush() throws Exception {
runTestSelector(10, 2, Op.FLUSH);
runTestSelector(10, 10, Op.FLUSH);
runTestSelector(10, 20, Op.FLUSH);
}
@Test
- public void testClose() throws Exception {
+ void testClose() throws Exception {
runTestSelector(10, 2, Op.CLOSE);
runTestSelector(10, 10, Op.CLOSE);
runTestSelector(10, 20, Op.CLOSE);
}
@Test
- public void testHflushSyncable() throws Exception {
+ void testHflushSyncable() throws Exception {
runTestSelector(10, 2, Op.HFLUSH, true);
runTestSelector(10, 10, Op.HFLUSH, true);
runTestSelector(10, 20, Op.HFLUSH, true);
}
@Test
- public void testHflushNonSyncable() {
+ void testHflushNonSyncable() {
final IllegalStateException thrown = assertThrows(
IllegalStateException.class,
() -> runTestSelector(10, 2, Op.HFLUSH, false));
LOG.info("thrown", thrown);
- assertTrue(thrown.getMessage().contains("not Syncable"));
+ assertThat(thrown).hasMessageContaining("not Syncable");
}
@Test
- public void testHSyncSyncable() throws Exception {
+ void testHSyncSyncable() throws Exception {
runTestSelector(10, 2, Op.HSYNC, true);
runTestSelector(10, 10, Op.HSYNC, true);
runTestSelector(10, 20, Op.HSYNC, true);
}
@Test
- public void testHSyncNonSyncable() {
+ void testHSyncNonSyncable() {
final IllegalStateException thrown = assertThrows(
IllegalStateException.class,
() -> runTestSelector(10, 2, Op.HSYNC, false));
LOG.info("thrown", thrown);
- assertTrue(thrown.getMessage().contains("not Syncable"));
+ assertThat(thrown).hasMessageContaining("not Syncable");
}
}
diff --git
a/hadoop-ozone/common/src/test/java/org/apache/hadoop/ozone/om/lock/TestKeyPathLock.java
b/hadoop-ozone/common/src/test/java/org/apache/hadoop/ozone/om/lock/TestKeyPathLock.java
index 0c3978ccd2..75adb7e6a1 100644
---
a/hadoop-ozone/common/src/test/java/org/apache/hadoop/ozone/om/lock/TestKeyPathLock.java
+++
b/hadoop-ozone/common/src/test/java/org/apache/hadoop/ozone/om/lock/TestKeyPathLock.java
@@ -29,23 +29,23 @@ import java.util.List;
import java.util.UUID;
import java.util.concurrent.CountDownLatch;
+import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.jupiter.api.Assertions.fail;
-import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.junit.jupiter.api.Assertions.assertEquals;
/**
* Tests OzoneManagerLock.Resource.KEY_PATH_LOCK.
*/
-public class TestKeyPathLock extends TestOzoneManagerLock {
+class TestKeyPathLock extends TestOzoneManagerLock {
private static final Logger LOG =
LoggerFactory.getLogger(TestKeyPathLock.class);
- private OzoneManagerLock.Resource resource =
+ private final OzoneManagerLock.Resource resource =
OzoneManagerLock.Resource.KEY_PATH_LOCK;
@Test
- public void testKeyPathLockMultiThreading() throws Exception {
+ void testKeyPathLockMultiThreading() throws Exception {
testSameKeyPathWriteLockMultiThreading(10, 100);
testDiffKeyPathWriteLockMultiThreading(10, 100);
}
@@ -70,8 +70,8 @@ public class TestKeyPathLock extends TestOzoneManagerLock {
// "/a/b/c/d/key1 - WLock - 5th iteration" -- blocked
// (iterations are sequential)
- public void testSameKeyPathWriteLockMultiThreading(int threadCount,
- int iterations)
+ void testSameKeyPathWriteLockMultiThreading(int threadCount,
+ int iterations)
throws InterruptedException {
String volumeName = UUID.randomUUID().toString();
@@ -140,9 +140,7 @@ public class TestKeyPathLock extends TestOzoneManagerLock {
lock.acquireWriteLock(resource, sampleResourceName);
LOG.info("Write Lock Acquired by " + Thread.currentThread().getName());
- /**
- * Critical Section. count = count + 1;
- */
+ // Critical Section. count = count + 1;
for (int idx = 0; idx < iterations; idx++) {
counter.incrementCount();
}
@@ -164,8 +162,8 @@ public class TestKeyPathLock extends TestOzoneManagerLock {
// "/a/b/c/d/key5 - WLock - 5th iteration" -- allowed
// (iterations are parallel)
- public void testDiffKeyPathWriteLockMultiThreading(int threadCount,
- int iterations)
+ void testDiffKeyPathWriteLockMultiThreading(int threadCount,
+ int iterations)
throws Exception {
String volumeName = UUID.randomUUID().toString();
@@ -190,9 +188,7 @@ public class TestKeyPathLock extends TestOzoneManagerLock {
threads[i].start();
}
- /**
- * Waiting for all the threads to count down
- */
+ // Waiting for all the threads to count down
GenericTestUtils.waitFor(() -> {
if (countDown.getCount() > 0) {
LOG.info("Waiting for the threads to count down {} ",
@@ -229,7 +225,7 @@ public class TestKeyPathLock extends TestOzoneManagerLock {
}
@Test
- public void testAcquireWriteBucketLockWhileAcquiredWriteKeyPathLock() {
+ void testAcquireWriteBucketLockWhileAcquiredWriteKeyPathLock() {
OzoneManagerLock.Resource higherResource =
OzoneManagerLock.Resource.BUCKET_LOCK;
@@ -249,12 +245,12 @@ public class TestKeyPathLock extends TestOzoneManagerLock
{
} catch (RuntimeException ex) {
String message = "cannot acquire " + higherResource.getName() + " lock "
+
"while holding [" + resource.getName() + "] lock(s).";
- assertTrue(ex.getMessage().contains(message), ex.getMessage());
+ assertThat(ex).hasMessageContaining(message);
}
}
@Test
- public void testAcquireWriteBucketLockWhileAcquiredReadKeyPathLock() {
+ void testAcquireWriteBucketLockWhileAcquiredReadKeyPathLock() {
OzoneManagerLock.Resource higherResource =
OzoneManagerLock.Resource.BUCKET_LOCK;
@@ -274,12 +270,12 @@ public class TestKeyPathLock extends TestOzoneManagerLock
{
} catch (RuntimeException ex) {
String message = "cannot acquire " + higherResource.getName() + " lock "
+
"while holding [" + resource.getName() + "] lock(s).";
- assertTrue(ex.getMessage().contains(message), ex.getMessage());
+ assertThat(ex).hasMessageContaining(message);
}
}
@Test
- public void testAcquireReadBucketLockWhileAcquiredReadKeyPathLock() {
+ void testAcquireReadBucketLockWhileAcquiredReadKeyPathLock() {
OzoneManagerLock.Resource higherResource =
OzoneManagerLock.Resource.BUCKET_LOCK;
@@ -299,12 +295,12 @@ public class TestKeyPathLock extends TestOzoneManagerLock
{
} catch (RuntimeException ex) {
String message = "cannot acquire " + higherResource.getName() + " lock "
+
"while holding [" + resource.getName() + "] lock(s).";
- assertTrue(ex.getMessage().contains(message), ex.getMessage());
+ assertThat(ex).hasMessageContaining(message);
}
}
@Test
- public void testAcquireReadBucketLockWhileAcquiredWriteKeyPathLock() {
+ void testAcquireReadBucketLockWhileAcquiredWriteKeyPathLock() {
OzoneManagerLock.Resource higherResource =
OzoneManagerLock.Resource.BUCKET_LOCK;
@@ -324,7 +320,7 @@ public class TestKeyPathLock extends TestOzoneManagerLock {
} catch (RuntimeException ex) {
String message = "cannot acquire " + higherResource.getName() + " lock "
+
"while holding [" + resource.getName() + "] lock(s).";
- assertTrue(ex.getMessage().contains(message), ex.getMessage());
+ assertThat(ex).hasMessageContaining(message);
}
}
}
diff --git
a/hadoop-ozone/common/src/test/java/org/apache/hadoop/ozone/om/lock/TestOzoneManagerLock.java
b/hadoop-ozone/common/src/test/java/org/apache/hadoop/ozone/om/lock/TestOzoneManagerLock.java
index 5c4206fa19..856f2b238c 100644
---
a/hadoop-ozone/common/src/test/java/org/apache/hadoop/ozone/om/lock/TestOzoneManagerLock.java
+++
b/hadoop-ozone/common/src/test/java/org/apache/hadoop/ozone/om/lock/TestOzoneManagerLock.java
@@ -24,13 +24,18 @@ import java.util.Stack;
import java.util.UUID;
import java.util.concurrent.atomic.AtomicBoolean;
+import org.apache.hadoop.metrics2.MetricsRecord;
import org.apache.hadoop.metrics2.impl.MetricsCollectorImpl;
import org.apache.hadoop.ozone.om.lock.OzoneManagerLock.Resource;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.Timeout;
import org.apache.hadoop.hdds.conf.OzoneConfiguration;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.EnumSource;
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertEquals;
@@ -41,31 +46,26 @@ import static org.junit.jupiter.api.Assertions.fail;
* Class tests OzoneManagerLock.
*/
@Timeout(300)
-public class TestOzoneManagerLock {
+class TestOzoneManagerLock {
- @Test
- public void acquireResourceLock() {
- String[] resourceName;
- for (Resource resource : Resource.values()) {
- resourceName = generateResourceName(resource);
- testResourceLock(resourceName, resource);
- }
+ @ParameterizedTest
+ @EnumSource
+ void acquireResourceLock(Resource resource) {
+ String[] resourceName = generateResourceName(resource);
+ testResourceLock(resourceName, resource);
}
private void testResourceLock(String[] resourceName, Resource resource) {
OzoneManagerLock lock = new OzoneManagerLock(new OzoneConfiguration());
lock.acquireWriteLock(resource, resourceName);
- lock.releaseWriteLock(resource, resourceName);
- assertTrue(true);
+ assertDoesNotThrow(() -> lock.releaseWriteLock(resource, resourceName));
}
- @Test
- public void reacquireResourceLock() {
- String[] resourceName;
- for (Resource resource : Resource.values()) {
- resourceName = generateResourceName(resource);
- testResourceReacquireLock(resourceName, resource);
- }
+ @ParameterizedTest
+ @EnumSource
+ void reacquireResourceLock(Resource resource) {
+ String[] resourceName = generateResourceName(resource);
+ testResourceReacquireLock(resourceName, resource);
}
private void testResourceReacquireLock(String[] resourceName,
@@ -83,22 +83,19 @@ public class TestOzoneManagerLock {
} catch (RuntimeException ex) {
String message = "cannot acquire " + resource.getName() + " lock " +
"while holding [" + resource.getName() + "] lock(s).";
- assertTrue(ex.getMessage().contains(message),
- ex.getMessage());
+ assertThat(ex).hasMessageContaining(message);
}
- lock.releaseWriteLock(resource, resourceName);
- assertTrue(true);
+ assertDoesNotThrow(() -> lock.releaseWriteLock(resource, resourceName));
} else {
lock.acquireWriteLock(resource, resourceName);
lock.acquireWriteLock(resource, resourceName);
- lock.releaseWriteLock(resource, resourceName);
- lock.releaseWriteLock(resource, resourceName);
- assertTrue(true);
+ assertDoesNotThrow(() -> lock.releaseWriteLock(resource, resourceName));
+ assertDoesNotThrow(() -> lock.releaseWriteLock(resource, resourceName));
}
}
@Test
- public void testLockingOrder() {
+ void testLockingOrder() {
OzoneManagerLock lock = new OzoneManagerLock(new OzoneConfiguration());
String[] resourceName;
@@ -120,30 +117,27 @@ public class TestOzoneManagerLock {
// Now release locks
while (!stack.empty()) {
ResourceInfo resourceInfo = stack.pop();
- lock.releaseWriteLock(resourceInfo.getResource(),
- resourceInfo.getLockName());
+ assertDoesNotThrow(() ->
+ lock.releaseWriteLock(resourceInfo.getResource(),
resourceInfo.getLockName()));
}
}
- assertTrue(true);
}
- @Test
- public void testLockViolationsWithOneHigherLevelLock() {
+ @ParameterizedTest
+ @EnumSource
+ void testLockViolationsWithOneHigherLevelLock(Resource resource) {
OzoneManagerLock lock = new OzoneManagerLock(new OzoneConfiguration());
- for (Resource resource : Resource.values()) {
- for (Resource higherResource : Resource.values()) {
- if (higherResource.getMask() > resource.getMask()) {
- String[] resourceName = generateResourceName(higherResource);
- lock.acquireWriteLock(higherResource, resourceName);
- try {
- lock.acquireWriteLock(resource, generateResourceName(resource));
- fail("testLockViolationsWithOneHigherLevelLock failed");
- } catch (RuntimeException ex) {
- String message = "cannot acquire " + resource.getName() + " lock "
+
- "while holding [" + higherResource.getName() + "] lock(s).";
- assertTrue(ex.getMessage().contains(message),
- ex.getMessage());
- }
+ for (Resource higherResource : Resource.values()) {
+ if (higherResource.getMask() > resource.getMask()) {
+ String[] resourceName = generateResourceName(higherResource);
+ lock.acquireWriteLock(higherResource, resourceName);
+ try {
+ Exception e = assertThrows(RuntimeException.class,
+ () -> lock.acquireWriteLock(resource,
generateResourceName(resource)));
+ String message = "cannot acquire " + resource.getName() + " lock " +
+ "while holding [" + higherResource.getName() + "] lock(s).";
+ assertThat(e).hasMessageContaining(message);
+ } finally {
lock.releaseWriteLock(higherResource, resourceName);
}
}
@@ -151,7 +145,7 @@ public class TestOzoneManagerLock {
}
@Test
- public void testLockViolations() {
+ void testLockViolations() {
OzoneManagerLock lock = new OzoneManagerLock(new OzoneConfiguration());
String[] resourceName;
@@ -175,8 +169,7 @@ public class TestOzoneManagerLock {
} catch (RuntimeException ex) {
String message = "cannot acquire " + resource.getName() + " lock "
+
"while holding " + currentLocks + " lock(s).";
- assertTrue(ex.getMessage().contains(message),
- ex.getMessage());
+ assertThat(ex).hasMessageContaining(message);
}
}
}
@@ -191,7 +184,7 @@ public class TestOzoneManagerLock {
}
@Test
- public void releaseLockWithOutAcquiringLock() {
+ void releaseLockWithOutAcquiringLock() {
OzoneManagerLock lock =
new OzoneManagerLock(new OzoneConfiguration());
assertThrows(IllegalMonitorStateException.class,
@@ -215,9 +208,9 @@ public class TestOzoneManagerLock {
/**
* Class used to store locked resource info.
*/
- public static class ResourceInfo {
- private String[] lockName;
- private Resource resource;
+ private static class ResourceInfo {
+ private final String[] lockName;
+ private final Resource resource;
ResourceInfo(String[] resourceName, Resource resource) {
this.lockName = resourceName;
@@ -234,60 +227,47 @@ public class TestOzoneManagerLock {
}
@Test
- public void acquireMultiUserLock() {
+ void acquireMultiUserLock() {
OzoneManagerLock lock = new OzoneManagerLock(new OzoneConfiguration());
lock.acquireMultiUserLock("user1", "user2");
- lock.releaseMultiUserLock("user1", "user2");
- assertTrue(true);
+ assertDoesNotThrow(() -> lock.releaseMultiUserLock("user1", "user2"));
}
@Test
- public void reAcquireMultiUserLock() {
+ void reAcquireMultiUserLock() {
OzoneManagerLock lock = new OzoneManagerLock(new OzoneConfiguration());
lock.acquireMultiUserLock("user1", "user2");
- try {
- lock.acquireMultiUserLock("user1", "user2");
- fail("reAcquireMultiUserLock failed");
- } catch (RuntimeException ex) {
- String message = "cannot acquire USER_LOCK lock while holding " +
- "[USER_LOCK] lock(s).";
- assertTrue(ex.getMessage().contains(message), ex.getMessage());
- }
+ Exception e = assertThrows(RuntimeException.class,
+ () -> lock.acquireMultiUserLock("user1", "user2"));
+ assertThat(e)
+ .hasMessageContaining("cannot acquire USER_LOCK lock while holding
[USER_LOCK] lock(s).");
lock.releaseMultiUserLock("user1", "user2");
}
@Test
- public void acquireMultiUserLockAfterUserLock() {
+ void acquireMultiUserLockAfterUserLock() {
OzoneManagerLock lock = new OzoneManagerLock(new OzoneConfiguration());
lock.acquireWriteLock(Resource.USER_LOCK, "user3");
- try {
- lock.acquireMultiUserLock("user1", "user2");
- fail("acquireMultiUserLockAfterUserLock failed");
- } catch (RuntimeException ex) {
- String message = "cannot acquire USER_LOCK lock while holding " +
- "[USER_LOCK] lock(s).";
- assertTrue(ex.getMessage().contains(message), ex.getMessage());
- }
+ Exception e = assertThrows(RuntimeException.class,
+ () -> lock.acquireMultiUserLock("user1", "user2"));
+ assertThat(e)
+ .hasMessageContaining("cannot acquire USER_LOCK lock while holding
[USER_LOCK] lock(s).");
lock.releaseWriteLock(Resource.USER_LOCK, "user3");
}
@Test
- public void acquireUserLockAfterMultiUserLock() {
+ void acquireUserLockAfterMultiUserLock() {
OzoneManagerLock lock = new OzoneManagerLock(new OzoneConfiguration());
lock.acquireMultiUserLock("user1", "user2");
- try {
- lock.acquireWriteLock(Resource.USER_LOCK, "user3");
- fail("acquireUserLockAfterMultiUserLock failed");
- } catch (RuntimeException ex) {
- String message = "cannot acquire USER_LOCK lock while holding " +
- "[USER_LOCK] lock(s).";
- assertTrue(ex.getMessage().contains(message), ex.getMessage());
- }
+ Exception e = assertThrows(RuntimeException.class,
+ () -> lock.acquireWriteLock(Resource.USER_LOCK, "user3"));
+ assertThat(e)
+ .hasMessageContaining("cannot acquire USER_LOCK lock while holding
[USER_LOCK] lock(s).");
lock.releaseMultiUserLock("user1", "user2");
}
@Test
- public void testLockResourceParallel() throws Exception {
+ void testLockResourceParallel() throws Exception {
OzoneManagerLock lock = new OzoneManagerLock(new OzoneConfiguration());
for (Resource resource :
@@ -317,7 +297,7 @@ public class TestOzoneManagerLock {
}
@Test
- public void testMultiLockResourceParallel() throws Exception {
+ void testMultiLockResourceParallel() throws Exception {
OzoneManagerLock lock = new OzoneManagerLock(new OzoneConfiguration());
lock.acquireMultiUserLock("user2", "user1");
@@ -340,19 +320,14 @@ public class TestOzoneManagerLock {
assertTrue(gotLock.get());
}
- @Test
- public void testLockHoldCount() {
- String[] resourceName;
- for (Resource resource : Resource.values()) {
+ @ParameterizedTest
+ @EnumSource(mode = EnumSource.Mode.EXCLUDE,
// USER_LOCK, S3_SECRET_LOCK and PREFIX_LOCK disallow lock re-acquire by
// the same thread.
- if (resource != Resource.USER_LOCK &&
- resource != Resource.S3_SECRET_LOCK &&
- resource != Resource.PREFIX_LOCK) {
- resourceName = generateResourceName(resource);
- testLockHoldCountUtil(resource, resourceName);
- }
- }
+ names = { "PREFIX_LOCK", "S3_SECRET_LOCK", "USER_LOCK" })
+ void testLockHoldCount(Resource resource) {
+ String[] resourceName = generateResourceName(resource);
+ testLockHoldCountUtil(resource, resourceName);
}
private void testLockHoldCountUtil(Resource resource,
@@ -372,44 +347,36 @@ public class TestOzoneManagerLock {
lock.releaseReadLock(resource, resourceName);
assertEquals(0, lock.getReadHoldCount(resource, resourceName));
- assertFalse(
- lock.isWriteLockedByCurrentThread(resource, resourceName));
+ assertFalse(lock.isWriteLockedByCurrentThread(resource, resourceName));
assertEquals(0, lock.getWriteHoldCount(resource, resourceName));
lock.acquireWriteLock(resource, resourceName);
- assertTrue(
- lock.isWriteLockedByCurrentThread(resource, resourceName));
+ assertTrue(lock.isWriteLockedByCurrentThread(resource, resourceName));
assertEquals(1, lock.getWriteHoldCount(resource, resourceName));
lock.acquireWriteLock(resource, resourceName);
- assertTrue(
- lock.isWriteLockedByCurrentThread(resource, resourceName));
+ assertTrue(lock.isWriteLockedByCurrentThread(resource, resourceName));
assertEquals(2, lock.getWriteHoldCount(resource, resourceName));
lock.releaseWriteLock(resource, resourceName);
- assertTrue(
- lock.isWriteLockedByCurrentThread(resource, resourceName));
+ assertTrue(lock.isWriteLockedByCurrentThread(resource, resourceName));
assertEquals(1, lock.getWriteHoldCount(resource, resourceName));
lock.releaseWriteLock(resource, resourceName);
- assertFalse(
- lock.isWriteLockedByCurrentThread(resource, resourceName));
+ assertFalse(lock.isWriteLockedByCurrentThread(resource, resourceName));
assertEquals(0, lock.getWriteHoldCount(resource, resourceName));
}
- @Test
- public void testLockConcurrentStats() throws InterruptedException {
- String[] resourceName;
- for (Resource resource :
- Resource.values()) {
- resourceName = generateResourceName(resource);
- testReadLockConcurrentStats(resource, resourceName, 10);
- testWriteLockConcurrentStats(resource, resourceName, 5);
- testSyntheticReadWriteLockConcurrentStats(resource, resourceName, 10, 3);
- }
+ @ParameterizedTest
+ @EnumSource
+ void testLockConcurrentStats(Resource resource) throws InterruptedException {
+ String[] resourceName = generateResourceName(resource);
+ testReadLockConcurrentStats(resource, resourceName, 10);
+ testWriteLockConcurrentStats(resource, resourceName, 5);
+ testSyntheticReadWriteLockConcurrentStats(resource, resourceName, 10, 3);
}
- public void testReadLockConcurrentStats(Resource resource,
+ private void testReadLockConcurrentStats(Resource resource,
String[] resourceName,
int threadCount)
throws InterruptedException {
@@ -434,18 +401,14 @@ public class TestOzoneManagerLock {
}
String readHeldStat = lock.getOMLockMetrics().getReadLockHeldTimeMsStat();
- assertTrue(readHeldStat.contains("Samples = " + threadCount),
- "Expected " + threadCount +
- " samples in readLockHeldTimeMsStat: " + readHeldStat);
+ assertThat(readHeldStat).contains("Samples = " + threadCount);
String readWaitingStat =
lock.getOMLockMetrics().getReadLockWaitingTimeMsStat();
- assertTrue(readWaitingStat.contains("Samples = " + threadCount),
- "Expected " + threadCount +
- " samples in readLockWaitingTimeMsStat: " + readWaitingStat);
+ assertThat(readWaitingStat).contains("Samples = " + threadCount);
}
- public void testWriteLockConcurrentStats(Resource resource,
+ private void testWriteLockConcurrentStats(Resource resource,
String[] resourceName,
int threadCount)
throws InterruptedException {
@@ -470,18 +433,14 @@ public class TestOzoneManagerLock {
}
String writeHeldStat =
lock.getOMLockMetrics().getWriteLockHeldTimeMsStat();
- assertTrue(writeHeldStat.contains("Samples = " + threadCount),
- "Expected " + threadCount +
- " samples in writeLockHeldTimeMsStat: " + writeHeldStat);
+ assertThat(writeHeldStat).contains("Samples = " + threadCount);
String writeWaitingStat =
lock.getOMLockMetrics().getWriteLockWaitingTimeMsStat();
- assertTrue(writeWaitingStat.contains("Samples = " + threadCount),
- "Expected " + threadCount +
- " samples in writeLockWaitingTimeMsStat" + writeWaitingStat);
+ assertThat(writeWaitingStat).contains("Samples = " + threadCount);
}
- public void testSyntheticReadWriteLockConcurrentStats(
+ private void testSyntheticReadWriteLockConcurrentStats(
Resource resource, String[] resourceName,
int readThreadCount, int writeThreadCount)
throws InterruptedException {
@@ -525,49 +484,31 @@ public class TestOzoneManagerLock {
w.join();
}
- String readHeldStat = lock.getOMLockMetrics().getReadLockHeldTimeMsStat();
- assertTrue(readHeldStat.contains("Samples = " + readThreadCount),
- "Expected " + readThreadCount +
- " samples in readLockHeldTimeMsStat: " + readHeldStat);
+ final String readSamples = "Samples = " + readThreadCount;
+ assertThat(lock.getOMLockMetrics().getReadLockHeldTimeMsStat())
+ .contains(readSamples);
- String readWaitingStat =
- lock.getOMLockMetrics().getReadLockWaitingTimeMsStat();
- assertTrue(readWaitingStat.contains(
- "Samples = " + readThreadCount),
- "Expected " + readThreadCount +
- " samples in readLockWaitingTimeMsStat: " + readWaitingStat);
+ assertThat(lock.getOMLockMetrics().getReadLockWaitingTimeMsStat())
+ .contains(readSamples);
- String writeHeldStat =
lock.getOMLockMetrics().getWriteLockHeldTimeMsStat();
- assertTrue(writeHeldStat.contains(
- "Samples = " + writeThreadCount),
- "Expected " + writeThreadCount +
- " samples in writeLockHeldTimeMsStat: " + writeHeldStat);
+ final String writeSamples = "Samples = " + writeThreadCount;
+ assertThat(lock.getOMLockMetrics().getWriteLockHeldTimeMsStat())
+ .contains(writeSamples);
- String writeWaitingStat =
- lock.getOMLockMetrics().getWriteLockWaitingTimeMsStat();
- assertTrue(writeWaitingStat.contains(
- "Samples = " + writeThreadCount),
- "Expected " + writeThreadCount +
- " samples in writeLockWaitingTimeMsStat" + writeWaitingStat);
+ assertThat(lock.getOMLockMetrics().getWriteLockWaitingTimeMsStat())
+ .contains(writeSamples);
}
@Test
- public void testOMLockMetricsRecords() {
+ void testOMLockMetricsRecords() {
OMLockMetrics omLockMetrics = OMLockMetrics.create();
try {
MetricsCollectorImpl metricsCollector = new MetricsCollectorImpl();
omLockMetrics.getMetrics(metricsCollector, true);
- assertEquals(1, metricsCollector.getRecords().size());
-
- String omLockMetricsRecords = metricsCollector.getRecords().toString();
- assertTrue(omLockMetricsRecords.contains(
- "ReadLockWaitingTime"), omLockMetricsRecords);
- assertTrue(omLockMetricsRecords.contains("ReadLockHeldTime"),
- omLockMetricsRecords);
- assertTrue(omLockMetricsRecords.contains(
- "WriteLockWaitingTime"), omLockMetricsRecords);
- assertTrue(omLockMetricsRecords.contains("WriteLockHeldTime"),
- omLockMetricsRecords);
+ List<? extends MetricsRecord> metricsRecords =
metricsCollector.getRecords();
+ assertEquals(1, metricsRecords.size());
+ assertThat(metricsRecords.toString())
+ .contains("ReadLockWaitingTime", "ReadLockHeldTime",
"WriteLockWaitingTime", "WriteLockHeldTime");
} finally {
omLockMetrics.unRegister();
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]