This is an automated email from the ASF dual-hosted git repository.
hapylestat 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 66bb30c AMBARI-25636 FindBugs: Comparison of String parameter using
== or != (#3299) (tpayer via dgrinenko)
66bb30c is described below
commit 66bb30ce9e2f46887a7df69f72e0959e76485736
Author: Tamas Payer <[email protected]>
AuthorDate: Thu Mar 25 09:55:30 2021 +0100
AMBARI-25636 FindBugs: Comparison of String parameter using == or !=
(#3299) (tpayer via dgrinenko)
---
.../apache/ambari/server/state/host/HostImpl.java | 28 +++++++--
.../ambari/server/state/host/HostImplTest.java | 69 +++++++++++++++++++++-
2 files changed, 90 insertions(+), 7 deletions(-)
diff --git
a/ambari-server/src/main/java/org/apache/ambari/server/state/host/HostImpl.java
b/ambari-server/src/main/java/org/apache/ambari/server/state/host/HostImpl.java
index f2a9e88..e563955 100644
---
a/ambari-server/src/main/java/org/apache/ambari/server/state/host/HostImpl.java
+++
b/ambari-server/src/main/java/org/apache/ambari/server/state/host/HostImpl.java
@@ -85,6 +85,7 @@ import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import com.google.common.annotations.VisibleForTesting;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import com.google.inject.Inject;
@@ -320,6 +321,12 @@ public class HostImpl implements Host {
maintMap = ensureMaintMap(hostEntity.getHostStateEntity());
}
+ @VisibleForTesting
+ HostImpl(HostEntity hostEntity, Gson gson, HostDAO hostDAO, HostStateDAO
hostStateDAO, AmbariEventPublisher publisher) {
+ this(hostEntity, gson, hostDAO, hostStateDAO);
+ this.ambariEventPublisher = publisher;
+ }
+
@Override
public int compareTo(Object o) {
if ((o != null ) && (o instanceof Host)) {
@@ -957,18 +964,27 @@ public class HostImpl implements Host {
}
}
-
@Override
public String getStatus() {
return status;
}
+ /**
+ * Sets the Host's status.
+ *
+ * @param status Host Status string representation of the Host's status
+ * @throws IllegalArgumentException if <code>status</code> is
<code>null</code> or {@link HealthStatus} enum has no such constant name.
+ */
@Override
public void setStatus(String status) {
- if (this.status != status) {
- ambariEventPublisher.publish(new HostStatusUpdateEvent(getHostName(),
status));
+ if (status == null) {
+ throw new IllegalArgumentException("Host status cannot be null");
+ }
+ String newStatus = HealthStatus.valueOf(status).name();
+ if (!newStatus.equals(this.status)) {
+ ambariEventPublisher.publish(new HostStatusUpdateEvent(getHostName(),
newStatus));
+ this.status = newStatus;
}
- this.status = status;
}
@Override
@@ -1323,8 +1339,8 @@ public class HostImpl implements Host {
// for every host component, if it matches the desired repo and has
reported
// the correct version then we're good
for (HostComponentStateEntity hostComponentState : hostComponentStates) {
- ServiceComponentDesiredStateEntity desiredComponmentState =
hostComponentState.getServiceComponentDesiredStateEntity();
- RepositoryVersionEntity desiredRepositoryVersion =
desiredComponmentState.getDesiredRepositoryVersion();
+ ServiceComponentDesiredStateEntity desiredComponentState =
hostComponentState.getServiceComponentDesiredStateEntity();
+ RepositoryVersionEntity desiredRepositoryVersion =
desiredComponentState.getDesiredRepositoryVersion();
ComponentInfo componentInfo = ambariMetaInfo.getComponent(
desiredRepositoryVersion.getStackName(),
desiredRepositoryVersion.getStackVersion(),
diff --git
a/ambari-server/src/test/java/org/apache/ambari/server/state/host/HostImplTest.java
b/ambari-server/src/test/java/org/apache/ambari/server/state/host/HostImplTest.java
index d8195c2..c914c05 100644
---
a/ambari-server/src/test/java/org/apache/ambari/server/state/host/HostImplTest.java
+++
b/ambari-server/src/test/java/org/apache/ambari/server/state/host/HostImplTest.java
@@ -17,15 +17,24 @@
*/
package org.apache.ambari.server.state.host;
+import static org.easymock.EasyMock.anyObject;
import static org.easymock.EasyMock.expect;
+import static org.easymock.EasyMock.expectLastCall;
import static org.junit.Assert.assertEquals;
import java.util.Map;
+
+import org.apache.ambari.server.events.HostStatusUpdateEvent;
+import org.apache.ambari.server.events.publishers.AmbariEventPublisher;
import org.apache.ambari.server.orm.dao.HostDAO;
import org.apache.ambari.server.orm.dao.HostStateDAO;
import org.apache.ambari.server.orm.entities.HostEntity;
import org.apache.ambari.server.orm.entities.HostStateEntity;
+
+import org.apache.ambari.server.state.Host;
+import org.apache.ambari.server.state.HostHealthStatus;
+
import org.easymock.EasyMockSupport;
import org.junit.Test;
@@ -66,7 +75,7 @@ public class HostImplTest extends EasyMockSupport {
}
@Test
- public void testGetHealthStatus() throws Exception {
+ public void testGetHealthStatus() {
HostEntity hostEntity = createNiceMock(HostEntity.class);
HostStateEntity hostStateEntity = createNiceMock(HostStateEntity.class);
@@ -93,4 +102,62 @@ public class HostImplTest extends EasyMockSupport {
verifyAll();
}
+
+ @Test(expected = IllegalArgumentException.class)
+ public void testSetStatusWithNull() {
+ HostEntity hostEntity = createNiceMock(HostEntity.class);
+ HostDAO hostDAO = createNiceMock(HostDAO.class);
+ HostStateDAO hostStateDAO = createNiceMock(HostStateDAO.class);
+
+ expect(hostEntity.getHostId()).andReturn(1L).anyTimes();
+ replayAll();
+
+ Host host = new HostImpl(hostEntity, new Gson(), hostDAO, hostStateDAO);
+ host.setStatus(null);
+ }
+
+ @Test(expected = IllegalArgumentException.class)
+ public void testSetStatusWithIllegalState() {
+ HostEntity hostEntity = createNiceMock(HostEntity.class);
+ HostDAO hostDAO = createNiceMock(HostDAO.class);
+ HostStateDAO hostStateDAO = createNiceMock(HostStateDAO.class);
+
+ expect(hostEntity.getHostId()).andReturn(1L).anyTimes();
+ replayAll();
+
+ Host host = new HostImpl(hostEntity, new Gson(), hostDAO, hostStateDAO);
+ host.setStatus("illegal status");
+ }
+
+ @Test
+ public void testSetStatusWithValidArgs() {
+ HostEntity hostEntity = createNiceMock(HostEntity.class);
+ HostDAO hostDAO = createNiceMock(HostDAO.class);
+ HostStateDAO hostStateDAO = createNiceMock(HostStateDAO.class);
+ AmbariEventPublisher eventPublisher =
createNiceMock(AmbariEventPublisher.class);
+
+ expect(hostEntity.getHostName()).andReturn("host1").anyTimes();
+ expect(hostEntity.getHostId()).andReturn(1L).anyTimes();
+
+ eventPublisher.publish(anyObject(HostStatusUpdateEvent.class));
+ expectLastCall().times(4);
+
+ replayAll();
+
+ Host host = new HostImpl(hostEntity, new Gson(), hostDAO, hostStateDAO,
eventPublisher);
+
+ host.setStatus(HostHealthStatus.HealthStatus.UNHEALTHY.name());
+ assertEquals(HostHealthStatus.HealthStatus.UNHEALTHY.name(),
host.getStatus());
+
+ host.setStatus(HostHealthStatus.HealthStatus.HEALTHY.name());
+ assertEquals(HostHealthStatus.HealthStatus.HEALTHY.name(),
host.getStatus());
+
+ host.setStatus(HostHealthStatus.HealthStatus.ALERT.name());
+ assertEquals(HostHealthStatus.HealthStatus.ALERT.name(), host.getStatus());
+
+ host.setStatus(HostHealthStatus.HealthStatus.UNKNOWN.name());
+ assertEquals(HostHealthStatus.HealthStatus.UNKNOWN.name(),
host.getStatus());
+
+ verifyAll();
+ }
}