diff options
author | Håkon Hallingstad <hakon@oath.com> | 2018-12-08 02:05:15 +0100 |
---|---|---|
committer | Håkon Hallingstad <hakon@oath.com> | 2018-12-08 02:05:15 +0100 |
commit | 4023a30a3dfd3fe231693cd1a300af9725bd008e (patch) | |
tree | 51c687a9404e17e3b99f2fd902b7d3b7fb32c79b /service-monitor/src/test/java/com/yahoo/vespa/service/health/HealthMonitorManagerTest.java | |
parent | 8009fe519c103479a3cf02ab6cb7dc7b460c4d80 (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.java | 73 |
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 |