aboutsummaryrefslogtreecommitdiffstats
path: root/service-monitor/src/test/java/com/yahoo/vespa/service/model/ModelGeneratorTest.java
diff options
context:
space:
mode:
authorHåkon Hallingstad <hakon@oath.com>2018-12-06 14:38:57 +0100
committerHåkon Hallingstad <hakon@oath.com>2018-12-06 14:38:57 +0100
commit790f43668c9f6a1ed0e86cfec730a76c31666cf6 (patch)
tree1726ce9fae98dd7f2c533733d69f0458d96cf8af /service-monitor/src/test/java/com/yahoo/vespa/service/model/ModelGeneratorTest.java
parent0daac4e48cea934f1849d5be486c8506641214b6 (diff)
Make service monitors aware of infra applications in duper model.
- Notify monitors of infrastructure application activation. Live-flipping the content of the duper model is non-trivial and has been removed. - Split out DuperModel as a simple mutable and thread-unsafe container of the applications in the duper model, that also handles calls listeners on changes. The previous DuperModel has been renamed to DuperModelManager. - Replace SuperModelProvider::snapshot method (fast but difficult to use right) with registerListener. - Shorten the fully qualified package names by 1-2 levels for mosts classes. Next steps: - Make HA query the real orchestrator - Start experimenting with health monitoring of infra apps
Diffstat (limited to 'service-monitor/src/test/java/com/yahoo/vespa/service/model/ModelGeneratorTest.java')
-rw-r--r--service-monitor/src/test/java/com/yahoo/vespa/service/model/ModelGeneratorTest.java114
1 files changed, 114 insertions, 0 deletions
diff --git a/service-monitor/src/test/java/com/yahoo/vespa/service/model/ModelGeneratorTest.java b/service-monitor/src/test/java/com/yahoo/vespa/service/model/ModelGeneratorTest.java
new file mode 100644
index 00000000000..bcc136f80e3
--- /dev/null
+++ b/service-monitor/src/test/java/com/yahoo/vespa/service/model/ModelGeneratorTest.java
@@ -0,0 +1,114 @@
+// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+package com.yahoo.vespa.service.model;
+
+import com.yahoo.cloud.config.ConfigserverConfig;
+import com.yahoo.config.model.api.ApplicationInfo;
+import com.yahoo.config.provision.Environment;
+import com.yahoo.config.provision.RegionName;
+import com.yahoo.config.provision.Zone;
+import com.yahoo.vespa.applicationmodel.ApplicationInstance;
+import com.yahoo.vespa.applicationmodel.ApplicationInstanceReference;
+import com.yahoo.vespa.applicationmodel.ServiceCluster;
+import com.yahoo.vespa.applicationmodel.ServiceInstance;
+import com.yahoo.vespa.applicationmodel.ServiceStatus;
+import com.yahoo.vespa.service.monitor.ServiceModel;
+import com.yahoo.vespa.service.monitor.ConfigserverUtil;
+import com.yahoo.vespa.service.duper.ConfigServerApplication;
+import com.yahoo.vespa.service.slobrok.SlobrokMonitorManagerImpl;
+import org.junit.Test;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import static org.junit.Assert.assertEquals;
+import static org.mockito.Matchers.any;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+public class ModelGeneratorTest {
+ private final String ENVIRONMENT = "prod";
+ private final String REGION = "us-west-1";
+ private final String HOSTNAME = "hostname";
+ private final int PORT = 2;
+
+ @Test
+ public void toApplicationModel() throws Exception {
+ ModelGenerator modelGenerator = new ModelGenerator();
+
+ Zone zone = new Zone(Environment.from(ENVIRONMENT), RegionName.from(REGION));
+
+ SlobrokMonitorManagerImpl slobrokMonitorManager = mock(SlobrokMonitorManagerImpl.class);
+ when(slobrokMonitorManager.getStatus(any(), any(), any(), any()))
+ .thenReturn(ServiceStatus.UP);
+
+ ServiceModel serviceModel =
+ modelGenerator.toServiceModel(
+ getExampleApplicationInfos(),
+ zone,
+ slobrokMonitorManager);
+
+ Map<ApplicationInstanceReference,
+ ApplicationInstance> applicationInstances =
+ serviceModel.getAllApplicationInstances();
+
+ assertEquals(2, applicationInstances.size());
+
+ Iterator<Map.Entry<ApplicationInstanceReference,
+ ApplicationInstance>> iterator =
+ applicationInstances.entrySet().iterator();
+
+ ApplicationInstance applicationInstance1 = iterator.next().getValue();
+ ApplicationInstance applicationInstance2 = iterator.next().getValue();
+
+ if (applicationInstance1.applicationInstanceId().equals(
+ ConfigServerApplication.APPLICATION_INSTANCE_ID)) {
+ verifyConfigServerApplication(applicationInstance1);
+ verifyOtherApplication(applicationInstance2);
+ } else {
+ verifyConfigServerApplication(applicationInstance2);
+ verifyOtherApplication(applicationInstance1);
+ }
+ }
+
+ private List<ApplicationInfo> getExampleApplicationInfos() {
+ List<ApplicationInfo> applicationInfos = new ArrayList<>();
+ ConfigserverConfig config = ConfigserverUtil.createExampleConfigserverConfig();
+ applicationInfos.add(new ConfigServerApplication().makeApplicationInfoFromConfig(config));
+ applicationInfos.addAll(ExampleModel.createExampleSuperModelWithOneRpcPort(HOSTNAME, PORT).getAllApplicationInfos());
+ return applicationInfos;
+ }
+
+ private void verifyOtherApplication(ApplicationInstance applicationInstance) {
+ assertEquals(String.format("%s:%s:%s:%s:%s",
+ ExampleModel.TENANT,
+ ExampleModel.APPLICATION_NAME,
+ ENVIRONMENT,
+ REGION,
+ ExampleModel.INSTANCE_NAME),
+ applicationInstance.reference().toString());
+
+ assertEquals(ExampleModel.TENANT, applicationInstance.tenantId().toString());
+ Set<ServiceCluster> serviceClusters =
+ applicationInstance.serviceClusters();
+ assertEquals(1, serviceClusters.size());
+ ServiceCluster serviceCluster = serviceClusters.iterator().next();
+ assertEquals(ExampleModel.CLUSTER_ID, serviceCluster.clusterId().toString());
+ assertEquals(ExampleModel.SERVICE_TYPE, serviceCluster.serviceType().toString());
+ Set<ServiceInstance> serviceInstances =
+ serviceCluster.serviceInstances();
+ assertEquals(1, serviceClusters.size());
+ ServiceInstance serviceInstance = serviceInstances.iterator().next();
+ assertEquals(HOSTNAME, serviceInstance.hostName().toString());
+ assertEquals(ExampleModel.CONFIG_ID, serviceInstance.configId().toString());
+ assertEquals(ServiceStatus.UP, serviceInstance.serviceStatus());
+ }
+
+ private void verifyConfigServerApplication(
+ ApplicationInstance applicationInstance) {
+ assertEquals(ConfigServerApplication.APPLICATION_INSTANCE_ID,
+ applicationInstance.applicationInstanceId());
+ }
+}