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 <35402259+pay...@users.noreply.github.com>
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();
+  }
 }

Reply via email to