diff options
author | Håkon Hallingstad <hakon@oath.com> | 2019-01-16 08:14:14 +0100 |
---|---|---|
committer | Håkon Hallingstad <hakon@oath.com> | 2019-01-16 08:14:14 +0100 |
commit | c8aa5a5ba53c24206f390a1eee39ec3e704a5fc4 (patch) | |
tree | a1b5cbbda6b79263db725454fea7e750f75e2600 /service-monitor/src/test/java/com/yahoo/vespa/service/health/HealthMonitorManagerTest.java | |
parent | 7b210b2bda57003de6fff1dbe28348fe6685fa0c (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.java | 93 |
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); } |