This is an automated email from the ASF dual-hosted git repository.
payert pushed a commit to branch branch-2.7
in repository https://gitbox.apache.org/repos/asf/ambari.git
The following commit(s) were added to refs/heads/branch-2.7 by this push:
new 9260f12 AMBARI-25638 FindBugs: Class defines equals() and uses
Object.hashCode() (#3301)
9260f12 is described below
commit 9260f1281e617e760740657927c3637e491a9edc
Author: Tamas Payer <[email protected]>
AuthorDate: Tue Apr 20 15:40:18 2021 +0200
AMBARI-25638 FindBugs: Class defines equals() and uses Object.hashCode()
(#3301)
* Refactor equals() and add hashCode()
---
.../ambari/server/state/alert/MetricSource.java | 27 ++++++++-------
.../metric/system/impl/MetricsSourceTest.java | 38 ++++++++++++++++++++++
2 files changed, 54 insertions(+), 11 deletions(-)
diff --git
a/ambari-server/src/main/java/org/apache/ambari/server/state/alert/MetricSource.java
b/ambari-server/src/main/java/org/apache/ambari/server/state/alert/MetricSource.java
index cb6fd3b..d81deaf 100644
---
a/ambari-server/src/main/java/org/apache/ambari/server/state/alert/MetricSource.java
+++
b/ambari-server/src/main/java/org/apache/ambari/server/state/alert/MetricSource.java
@@ -20,13 +20,14 @@ package org.apache.ambari.server.state.alert;
import static java.util.stream.Collectors.toMap;
import static java.util.stream.IntStream.range;
-import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import java.util.Optional;
import org.apache.ambari.server.controller.jmx.JMXMetricHolder;
import org.apache.ambari.server.state.UriInfo;
+import org.apache.commons.collections.CollectionUtils;
+import org.apache.commons.collections.ListUtils;
import org.springframework.expression.spel.standard.SpelExpressionParser;
import org.springframework.expression.spel.support.StandardEvaluationContext;
@@ -137,18 +138,22 @@ public class MetricSource extends Source {
@Override
public boolean equals(Object object) {
- if (!JmxInfo.class.isInstance(object)) {
- return false;
+ if (object instanceof JmxInfo) {
+ JmxInfo other = (JmxInfo) object;
+ if (propertyList == null) {
+ return other.propertyList == null;
+ } else {
+ // !!! even if out of order, this is enough to fail
+ return other.propertyList != null &&
+
CollectionUtils.isEqualCollection(ListUtils.unmodifiableList(propertyList),
ListUtils.unmodifiableList(other.propertyList));
+ }
}
+ return false;
+ }
- JmxInfo other = (JmxInfo)object;
-
- List<String> list1 = new ArrayList<>(propertyList);
- List<String> list2 = new ArrayList<>(other.propertyList);
-
- // !!! even if out of order, this is enough to fail
- return list1.equals(list2);
-
+ @Override
+ public int hashCode() {
+ return Objects.hash(propertyList);
}
public String getUrlSuffix() {
diff --git
a/ambari-server/src/test/java/org/apache/ambari/server/metric/system/impl/MetricsSourceTest.java
b/ambari-server/src/test/java/org/apache/ambari/server/metric/system/impl/MetricsSourceTest.java
index 351d2aa..7411018 100644
---
a/ambari-server/src/test/java/org/apache/ambari/server/metric/system/impl/MetricsSourceTest.java
+++
b/ambari-server/src/test/java/org/apache/ambari/server/metric/system/impl/MetricsSourceTest.java
@@ -20,11 +20,15 @@ package org.apache.ambari.server.metric.system.impl;
import static java.util.Collections.singletonList;
import static junit.framework.Assert.assertEquals;
+import static junit.framework.Assert.assertFalse;
+import static junit.framework.Assert.assertTrue;
import static org.easymock.EasyMock.capture;
import static org.easymock.EasyMock.expectLastCall;
import static org.easymock.EasyMock.replay;
import static org.easymock.EasyMock.verify;
+import java.util.Arrays;
+import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -185,4 +189,38 @@ public class MetricsSourceTest {
assertEquals("custom", deserialized.getValue().toString());
assertEquals(singletonList("prop1"), deserialized.getPropertyList());
}
+
+ @Test
+ public void testJmxInfoEquality() {
+ MetricSource.JmxInfo jmxInfo = new MetricSource.JmxInfo();
+ MetricSource.JmxInfo otherJmxInfo = null;
+
+ assertFalse(jmxInfo.equals(otherJmxInfo));
+
+ otherJmxInfo = new MetricSource.JmxInfo();
+
+ assertTrue(jmxInfo.equals(otherJmxInfo));
+ assertTrue(otherJmxInfo.equals(jmxInfo));
+ assertEquals(jmxInfo.hashCode(), otherJmxInfo.hashCode());
+
+ jmxInfo.setPropertyList(Arrays.asList("a", "b", "c", "d"));
+ assertFalse(jmxInfo.equals(otherJmxInfo));
+ assertFalse(otherJmxInfo.equals(jmxInfo));
+ assertFalse(jmxInfo.hashCode() == otherJmxInfo.hashCode());
+
+ otherJmxInfo.setPropertyList(Arrays.asList("a", "b", "c", "d"));
+ assertTrue(jmxInfo.equals(otherJmxInfo));
+ assertTrue(otherJmxInfo.equals(jmxInfo));
+ assertEquals(jmxInfo.hashCode(), otherJmxInfo.hashCode());
+
+ jmxInfo.setPropertyList(Collections.emptyList());
+ assertFalse(jmxInfo.equals(otherJmxInfo));
+ assertFalse(otherJmxInfo.equals(jmxInfo));
+ assertFalse(jmxInfo.hashCode() == otherJmxInfo.hashCode());
+
+ otherJmxInfo.setPropertyList(Arrays.asList("b", "c", "d", "a"));
+ assertFalse(jmxInfo.equals(otherJmxInfo));
+ assertFalse(otherJmxInfo.equals(jmxInfo));
+ assertFalse(jmxInfo.hashCode() == otherJmxInfo.hashCode());
+ }
}