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>2019-01-16 08:14:14 +0100
committerHåkon Hallingstad <hakon@oath.com>2019-01-16 08:14:14 +0100
commitc8aa5a5ba53c24206f390a1eee39ec3e704a5fc4 (patch)
treea1b5cbbda6b79263db725454fea7e750f75e2600 /service-monitor/src/test/java/com/yahoo/vespa/service/health/HealthMonitorManagerTest.java
parent7b210b2bda57003de6fff1dbe28348fe6685fa0c (diff)
Support monitoring health of tenant hosts
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.java93
1 files changed, 84 insertions, 9 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 061807ba76f..6e18bebf791 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
@@ -3,18 +3,16 @@ 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.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.TestZoneApplication;
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;
@@ -23,6 +21,7 @@ import java.util.stream.Stream;
import static org.junit.Assert.assertEquals;
import static org.mockito.Matchers.any;
+import static org.mockito.Matchers.eq;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
@@ -33,16 +32,17 @@ public class HealthMonitorManagerTest {
private final DuperModelManager duperModel = mock(DuperModelManager.class);
private final ApplicationHealthMonitor monitor = mock(ApplicationHealthMonitor.class);
private final ApplicationHealthMonitorFactory monitorFactory = mock(ApplicationHealthMonitorFactory.class);
- private final HealthMonitorManager manager = new HealthMonitorManager(duperModel, monitorFactory);
+ private HealthMonitorManager manager;
- @Before
- public void setUp() {
+ public void setUp(boolean monitorTenantHostHealth) {
+ manager = new HealthMonitorManager(duperModel, monitorTenantHostHealth, monitorFactory);
when(duperModel.getConfigServerApplication()).thenReturn(configServerApplication);
when(monitorFactory.create(any())).thenReturn(monitor);
}
@Test
public void addAndRemove() {
+ setUp(false);
ApplicationInfo applicationInfo = ConfigserverUtil.makeExampleConfigServer();
when(duperModel.isSupportedInfraApplication(applicationInfo.getApplicationId())).thenReturn(true);
@@ -57,16 +57,90 @@ public class HealthMonitorManagerTest {
@Test
public void withHostAdmin() {
+ setUp(false);
ServiceStatus status = manager.getStatus(
- ZoneApplication.ZONE_APPLICATION_ID,
- ClusterId.NODE_ADMIN,
- ServiceType.CONTAINER,
+ ZoneApplication.getApplicationId(),
+ ZoneApplication.getNodeAdminClusterId(),
+ ZoneApplication.getNodeAdminServiceType(),
new ConfigId("config-id-1"));
assertEquals(ServiceStatus.UP, status);
}
@Test
+ public void verifyZoneApplicationIsNotMonitoredByDefault() {
+ verifyZoneApplicationIsMonitored(false, false);
+ }
+
+ @Test
+ public void verifyZoneApplicationIsMonitored() {
+ verifyZoneApplicationIsMonitored(true, true);
+ }
+
+ private void verifyZoneApplicationIsMonitored(boolean monitorTenantHostHealth, boolean isMonitored) {
+ setUp(monitorTenantHostHealth);
+
+ ApplicationInfo zoneApplicationInfo = new TestZoneApplication.Builder()
+ .addNodeAdminCluster("h1", "h2")
+ .addRoutingCluster("r1")
+ .build()
+ .makeApplicationInfo();
+
+ verify(monitorFactory, times(0)).create(zoneApplicationInfo.getApplicationId());
+ verify(monitor, times(0)).monitor(any());
+ manager.applicationActivated(zoneApplicationInfo);
+ verify(monitorFactory, times(isMonitored ? 1 : 0)).create(zoneApplicationInfo.getApplicationId());
+ verify(monitor, times(isMonitored ? 1 : 0)).monitor(any());
+
+ when(monitor.getStatus(any(), any(), any(), any())).thenReturn(ServiceStatus.DOWN);
+ verifyNodeAdminGetStatus(0);
+ if (isMonitored) {
+ assertEquals(ServiceStatus.DOWN, getNodeAdminStatus());
+ verifyNodeAdminGetStatus(1);
+ } else {
+ assertEquals(ServiceStatus.UP, getNodeAdminStatus());
+ verifyNodeAdminGetStatus(0);
+ }
+
+ verifyRoutingGetStatus(0);
+ assertEquals(ServiceStatus.NOT_CHECKED, getRoutingStatus());
+ verifyRoutingGetStatus(0);
+ }
+
+ private void verifyNodeAdminGetStatus(int invocations) {
+ verify(monitor, times(invocations)).getStatus(
+ eq(ZoneApplication.getApplicationId()),
+ eq(ZoneApplication.getNodeAdminClusterId()),
+ any(),
+ any());
+ }
+
+ private void verifyRoutingGetStatus(int invocations) {
+ verify(monitor, times(invocations)).getStatus(
+ eq(ZoneApplication.getApplicationId()),
+ eq(ZoneApplication.getRoutingClusterId()),
+ any(),
+ any());
+ }
+
+ private ServiceStatus getNodeAdminStatus() {
+ return manager.getStatus(
+ ZoneApplication.getApplicationId(),
+ ZoneApplication.getNodeAdminClusterId(),
+ ZoneApplication.getNodeAdminServiceType(),
+ new ConfigId("foo"));
+ }
+
+ private ServiceStatus getRoutingStatus() {
+ return manager.getStatus(
+ ZoneApplication.getApplicationId(),
+ ZoneApplication.getRoutingClusterId(),
+ ZoneApplication.getRoutingServiceType(),
+ new ConfigId("bar"));
+ }
+
+ @Test
public void infrastructureApplication() {
+ setUp(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());
@@ -85,6 +159,7 @@ public class HealthMonitorManagerTest {
@Test
public void threadPoolSize() {
+ setUp(false);
assertEquals(9, HealthMonitorManager.THREAD_POOL_SIZE);
}