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(); + } }