aboutsummaryrefslogtreecommitdiffstats
path: root/service-monitor/src/test/java/com/yahoo/vespa/service/health/HealthMonitorManagerTest.java
diff options
context:
space:
mode:
authorHåkon Hallingstad <hakon@oath.com>2018-12-08 02:05:15 +0100
committerHåkon Hallingstad <hakon@oath.com>2018-12-08 02:05:15 +0100
commit4023a30a3dfd3fe231693cd1a300af9725bd008e (patch)
tree51c687a9404e17e3b99f2fd902b7d3b7fb32c79b /service-monitor/src/test/java/com/yahoo/vespa/service/health/HealthMonitorManagerTest.java
parent8009fe519c103479a3cf02ab6cb7dc7b460c4d80 (diff)
Monitor health of host infra applications
Diffstat (limited to 'service-monitor/src/test/java/com/yahoo/vespa/service/health/HealthMonitorManagerTest.java')
-rw-r--r--service-monitor/src/test/java/com/yahoo/vespa/service/health/HealthMonitorManagerTest.java73
1 files changed, 72 insertions, 1 deletions
diff --git a/service-monitor/src/test/java/com/yahoo/vespa/service/health/HealthMonitorManagerTest.java b/service-monitor/src/test/java/com/yahoo/vespa/service/health/HealthMonitorManagerTest.java
index 5195bf218b6..f420f5c1284 100644
--- a/service-monitor/src/test/java/com/yahoo/vespa/service/health/HealthMonitorManagerTest.java
+++ b/service-monitor/src/test/java/com/yahoo/vespa/service/health/HealthMonitorManagerTest.java
@@ -2,33 +2,51 @@
package com.yahoo.vespa.service.health;
import com.yahoo.config.model.api.ApplicationInfo;
+import com.yahoo.config.provision.HostName;
import com.yahoo.vespa.applicationmodel.ClusterId;
import com.yahoo.vespa.applicationmodel.ConfigId;
import com.yahoo.vespa.applicationmodel.ServiceStatus;
import com.yahoo.vespa.applicationmodel.ServiceType;
+import com.yahoo.vespa.flags.FeatureFlag;
import com.yahoo.vespa.service.duper.ConfigServerApplication;
+import com.yahoo.vespa.service.duper.ControllerHostApplication;
import com.yahoo.vespa.service.duper.DuperModelManager;
+import com.yahoo.vespa.service.duper.InfraApplication;
+import com.yahoo.vespa.service.duper.ProxyHostApplication;
import com.yahoo.vespa.service.duper.ZoneApplication;
import com.yahoo.vespa.service.monitor.ConfigserverUtil;
import org.junit.Before;
import org.junit.Test;
+import java.util.List;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+
import static org.junit.Assert.assertEquals;
+import static org.mockito.Matchers.any;
import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
public class HealthMonitorManagerTest {
private final ConfigServerApplication configServerApplication = new ConfigServerApplication();
private final DuperModelManager duperModel = mock(DuperModelManager.class);
- private final HealthMonitorManager manager = new HealthMonitorManager(duperModel);
+ private final FeatureFlag monitorInfra = mock(FeatureFlag.class);
+ private final ApplicationHealthMonitor monitor = mock(ApplicationHealthMonitor.class);
+ private final ApplicationHealthMonitorFactory monitorFactory = mock(ApplicationHealthMonitorFactory.class);
+ private final HealthMonitorManager manager = new HealthMonitorManager(duperModel, monitorInfra, monitorFactory);
@Before
public void setUp() {
when(duperModel.getConfigServerApplication()).thenReturn(configServerApplication);
+ when(monitorFactory.create(any())).thenReturn(monitor);
}
@Test
public void addRemove() {
+ when(monitorInfra.value()).thenReturn(false);
ApplicationInfo applicationInfo = ConfigserverUtil.makeExampleConfigServer();
manager.applicationActivated(applicationInfo);
manager.applicationRemoved(applicationInfo.getApplicationId());
@@ -36,6 +54,7 @@ public class HealthMonitorManagerTest {
@Test
public void withHostAdmin() {
+ when(monitorInfra.value()).thenReturn(false);
ServiceStatus status = manager.getStatus(
ZoneApplication.ZONE_APPLICATION_ID,
ClusterId.NODE_ADMIN,
@@ -43,4 +62,56 @@ public class HealthMonitorManagerTest {
new ConfigId("config-id-1"));
assertEquals(ServiceStatus.UP, status);
}
+
+ @Test
+ public void infrastructureApplication() {
+ when(monitorInfra.value()).thenReturn(false);
+
+ ProxyHostApplication proxyHostApplication = new ProxyHostApplication();
+ when(duperModel.isSupportedInfraApplication(proxyHostApplication.getApplicationId())).thenReturn(true);
+ List<HostName> hostnames = Stream.of("proxyhost1", "proxyhost2").map(HostName::from).collect(Collectors.toList());
+ ApplicationInfo proxyHostApplicationInfo = proxyHostApplication.makeApplicationInfo(hostnames);
+
+ manager.applicationActivated(proxyHostApplicationInfo);
+ verify(monitorFactory, never()).create(proxyHostApplicationInfo);
+
+ assertStatus(ServiceStatus.NOT_CHECKED, 0, proxyHostApplication, "proxyhost1");
+ }
+
+ @Test
+ public void infrastructureApplicationWithMonitoring() {
+ when(monitorInfra.value()).thenReturn(true);
+
+ ProxyHostApplication proxyHostApplication = new ProxyHostApplication();
+ when(duperModel.isSupportedInfraApplication(proxyHostApplication.getApplicationId())).thenReturn(true);
+ List<HostName> hostnames = Stream.of("proxyhost1", "proxyhost2").map(HostName::from).collect(Collectors.toList());
+ ApplicationInfo proxyHostApplicationInfo = proxyHostApplication.makeApplicationInfo(hostnames);
+
+ manager.applicationActivated(proxyHostApplicationInfo);
+ verify(monitorFactory, times(1)).create(proxyHostApplicationInfo);
+
+ when(monitor.getStatus(any(), any(), any(), any())).thenReturn(ServiceStatus.UP);
+ assertStatus(ServiceStatus.UP, 1, proxyHostApplication, "proxyhost1");
+
+ ControllerHostApplication controllerHostApplication = new ControllerHostApplication();
+ when(duperModel.isSupportedInfraApplication(controllerHostApplication.getApplicationId())).thenReturn(true);
+ assertStatus(ServiceStatus.NOT_CHECKED, 0, controllerHostApplication, "controllerhost1");
+ }
+
+ private void assertStatus(ServiceStatus expected, int verifyTimes, InfraApplication infraApplication, String hostname) {
+ ServiceStatus actual = manager.getStatus(
+ infraApplication.getApplicationId(),
+ infraApplication.getClusterId(),
+ infraApplication.getServiceType(),
+ infraApplication.configIdFor(HostName.from(hostname)));
+
+ assertEquals(expected, actual);
+
+ verify(monitor, times(verifyTimes)).getStatus(
+ infraApplication.getApplicationId(),
+ infraApplication.getClusterId(),
+ infraApplication.getServiceType(),
+ infraApplication.configIdFor(HostName.from(hostname)));
+
+ }
} \ No newline at end of file