Prechádzať zdrojové kódy

AMBARI-18318 - Agent heartbeat handler would always handle 'UNHEALTHY' state as 'UNKNOWN' (Hemanth Yamijala via jonathanhurley)

Jonathan Hurley 9 rokov pred
rodič
commit
4334b3e73a

+ 1 - 0
ambari-server/src/main/java/org/apache/ambari/server/alerts/AgentHeartbeatAlertRunnable.java

@@ -111,6 +111,7 @@ public class AgentHeartbeatAlertRunnable extends AlertRunnable {
         case UNHEALTHY:
           alertState = AlertState.CRITICAL;
           alertText = MessageFormat.format(UNHEALTHY_MSG, hostName);
+          break;
         default:
           alertState = AlertState.UNKNOWN;
           alertText = MessageFormat.format(UNKNOWN_MSG, hostName, hostState);

+ 36 - 1
ambari-server/src/test/java/org/apache/ambari/server/alerts/AgentHeartbeatAlertRunnableTest.java

@@ -179,7 +179,7 @@ public class AgentHeartbeatAlertRunnableTest {
   }
 
   @Test
-  public void testUnhealthyAlert() {
+  public void testLostHeartbeatAlert() {
     EasyMock.reset(m_host);
     expect(m_host.getState()).andReturn(HostState.HEARTBEAT_LOST).atLeastOnce();
     replay(m_host);
@@ -213,6 +213,41 @@ public class AgentHeartbeatAlertRunnableTest {
     verify(m_definition, m_host, m_cluster, m_clusters, m_definitionDao);
   }
 
+  @Test
+  public void testUnhealthyHostAlert() {
+    EasyMock.reset(m_host);
+    expect(m_host.getState()).andReturn(HostState.UNHEALTHY).atLeastOnce();
+    replay(m_host);
+
+    // precondition that no events were fired
+    assertEquals(0,
+        m_listener.getAlertEventReceivedCount(AlertReceivedEvent.class));
+
+    // instantiate and inject mocks
+    AgentHeartbeatAlertRunnable runnable = new AgentHeartbeatAlertRunnable(
+        m_definition.getDefinitionName());
+
+    m_injector.injectMembers(runnable);
+
+    // run the alert
+    runnable.run();
+
+    assertEquals(1,
+        m_listener.getAlertEventReceivedCount(AlertReceivedEvent.class));
+
+    List<AlertEvent> events = m_listener.getAlertEventInstances(AlertReceivedEvent.class);
+    assertEquals(1, events.size());
+
+    AlertReceivedEvent event = (AlertReceivedEvent) events.get(0);
+    Alert alert = event.getAlert();
+    assertEquals("AMBARI", alert.getService());
+    assertEquals("AMBARI_SERVER", alert.getComponent());
+    assertEquals(AlertState.CRITICAL, alert.getState());
+    assertEquals(DEFINITION_NAME, alert.getName());
+
+    verify(m_definition, m_host, m_cluster, m_clusters, m_definitionDao);
+  }
+
   /**
    *
    */