summaryrefslogtreecommitdiffstats
path: root/service-monitor/src/test
diff options
context:
space:
mode:
authorHåkon Hallingstad <hakon@oath.com>2017-09-28 16:21:45 +0200
committerHåkon Hallingstad <hakon@oath.com>2017-09-28 16:21:45 +0200
commit2b145fd26c0b6a59d200a10c1bc107a92f6829f3 (patch)
tree146bc9182fc265508d1913c5a4ef06edc201c4af /service-monitor/src/test
parent12694e5879ae0261d1d92e81f7cb900d31a4a051 (diff)
Map SuperModel to ServiceModel
Diffstat (limited to 'service-monitor/src/test')
-rw-r--r--service-monitor/src/test/java/com/yahoo/vespa/service/monitor/ConfigServerApplicationTest.java61
-rw-r--r--service-monitor/src/test/java/com/yahoo/vespa/service/monitor/ExampleModel.java65
-rw-r--r--service-monitor/src/test/java/com/yahoo/vespa/service/monitor/ModelGeneratorTest.java107
-rw-r--r--service-monitor/src/test/java/com/yahoo/vespa/service/monitor/SlobrokMonitor2Test.java58
4 files changed, 291 insertions, 0 deletions
diff --git a/service-monitor/src/test/java/com/yahoo/vespa/service/monitor/ConfigServerApplicationTest.java b/service-monitor/src/test/java/com/yahoo/vespa/service/monitor/ConfigServerApplicationTest.java
new file mode 100644
index 00000000000..ec91507c846
--- /dev/null
+++ b/service-monitor/src/test/java/com/yahoo/vespa/service/monitor/ConfigServerApplicationTest.java
@@ -0,0 +1,61 @@
+// 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.monitor;
+
+import com.yahoo.vespa.applicationmodel.ApplicationInstance;
+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.junit.Assert.assertTrue;
+
+public class ConfigServerApplicationTest {
+ private static final String configServer1 = "cfg1.yahoo.com";
+ private static final String configServer2 = "cfg2.yahoo.com";
+ private static final String configServer3 = "cfg3.yahoo.com";
+ private static final List<String> configServerList = Stream.of(
+ configServer1,
+ configServer2,
+ configServer3).collect(Collectors.toList());
+
+ @Test
+ public void toApplicationInstance() throws Exception {
+ ConfigServerApplication application = new ConfigServerApplication();
+ ApplicationInstance<ServiceMonitorStatus> applicationInstance =
+ application.toApplicationInstance(configServerList);
+
+ // Backward compatibility check
+ assertEquals(
+ SlobrokAndConfigIntersector.configServerApplicationInstanceId(),
+ applicationInstance.applicationInstanceId());
+ assertEquals(
+ SlobrokAndConfigIntersector.syntheticHostedVespaTenantId(),
+ applicationInstance.tenantId());
+
+ assertEquals(
+ ConfigServerApplication.TENANT_ID.toString() +
+ ":" + ConfigServerApplication.APPLICATION_INSTANCE_ID,
+ applicationInstance.reference().toString());
+
+ assertEquals(
+ ConfigServerApplication.CLUSTER_ID,
+ applicationInstance.serviceClusters().iterator().next().clusterId());
+
+ assertEquals(
+ ServiceMonitorStatus.NOT_CHECKED,
+ applicationInstance
+ .serviceClusters().iterator().next()
+ .serviceInstances().iterator().next()
+ .serviceStatus());
+
+ assertTrue(configServerList.contains(
+ applicationInstance
+ .serviceClusters().iterator().next()
+ .serviceInstances().iterator().next()
+ .hostName()
+ .toString()));
+ }
+
+} \ No newline at end of file
diff --git a/service-monitor/src/test/java/com/yahoo/vespa/service/monitor/ExampleModel.java b/service-monitor/src/test/java/com/yahoo/vespa/service/monitor/ExampleModel.java
new file mode 100644
index 00000000000..d9766d65d3f
--- /dev/null
+++ b/service-monitor/src/test/java/com/yahoo/vespa/service/monitor/ExampleModel.java
@@ -0,0 +1,65 @@
+// 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.monitor;
+
+import com.yahoo.config.model.api.ApplicationInfo;
+import com.yahoo.config.model.api.HostInfo;
+import com.yahoo.config.model.api.Model;
+import com.yahoo.config.model.api.PortInfo;
+import com.yahoo.config.model.api.ServiceInfo;
+import com.yahoo.config.model.api.SuperModel;
+import com.yahoo.config.provision.ApplicationId;
+import com.yahoo.config.provision.ApplicationName;
+import com.yahoo.config.provision.InstanceName;
+import com.yahoo.config.provision.TenantName;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+public class ExampleModel {
+
+ static final String CLUSTER_ID = "cluster-id";
+ static final String SERVICE_NAME = "service-name";
+ static final String SERVICE_TYPE = "service-type";
+ static final String CONFIG_ID = "config-id";
+ static final String TENANT = "tenant";
+ static final String APPLICATION_NAME = "application";
+ public static final String INSTANCE_NAME = "default";
+
+ static SuperModel createExampleSuperModelWithOneRpcPort(String hostname, int rpcPort) {
+ Set<String> tags = Stream.of(SlobrokMonitor2.SLOBROK_RPC_PORT_TAG, "footag")
+ .collect(Collectors.toSet());
+ Map<String, String> properties = new HashMap<>();
+ properties.put(ModelGenerator.CLUSTER_ID_PROPERTY_NAME, CLUSTER_ID);
+ Set<PortInfo> portInfos = Stream.of(new PortInfo(rpcPort, tags)).collect(Collectors.toSet());
+ ServiceInfo serviceInfo = new ServiceInfo(
+ SERVICE_NAME,
+ SERVICE_TYPE,
+ portInfos,
+ properties,
+ CONFIG_ID,
+ hostname);
+ List<ServiceInfo> serviceInfos = Stream.of(serviceInfo).collect(Collectors.toList());
+ HostInfo hostInfo = new HostInfo(hostname, serviceInfos);
+ List<HostInfo> hostInfos = Stream.of(hostInfo).collect(Collectors.toList());
+
+ TenantName tenantName = TenantName.from(TENANT);
+ ApplicationName applicationName = ApplicationName.from(APPLICATION_NAME);
+ InstanceName instanceName = InstanceName.from(INSTANCE_NAME);
+ ApplicationId applicationId = ApplicationId.from(tenantName, applicationName, instanceName);
+ Model model = mock(Model.class);
+ when(model.getHosts()).thenReturn(hostInfos);
+ ApplicationInfo applicationInfo = new ApplicationInfo(applicationId, 1l, model);
+
+ Map<TenantName, Map<ApplicationId, ApplicationInfo>> applicationInfos = new HashMap<>();
+ applicationInfos.put(tenantName, new HashMap<>());
+ applicationInfos.get(tenantName).put(applicationId, applicationInfo);
+ return new SuperModel(applicationInfos);
+ }
+}
diff --git a/service-monitor/src/test/java/com/yahoo/vespa/service/monitor/ModelGeneratorTest.java b/service-monitor/src/test/java/com/yahoo/vespa/service/monitor/ModelGeneratorTest.java
new file mode 100644
index 00000000000..e54fdc51a3a
--- /dev/null
+++ b/service-monitor/src/test/java/com/yahoo/vespa/service/monitor/ModelGeneratorTest.java
@@ -0,0 +1,107 @@
+// 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.monitor;
+
+import com.yahoo.config.model.api.SuperModel;
+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 org.junit.Test;
+
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+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.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 {
+ SuperModel superModel =
+ ExampleModel.createExampleSuperModelWithOneRpcPort(HOSTNAME, PORT);
+ ModelGenerator modelGenerator = new ModelGenerator();
+
+ Zone zone = new Zone(Environment.from(ENVIRONMENT), RegionName.from(REGION));
+
+ List<String> configServerHosts = Stream.of("cfg1", "cfg2", "cfg3")
+ .collect(Collectors.toList());
+
+ SlobrokMonitor2 slobrokMonitor = mock(SlobrokMonitor2.class);
+ when(slobrokMonitor.getStatus(any(), any())).thenReturn(ServiceMonitorStatus.UP);
+
+ ServiceModel serviceModel =
+ modelGenerator.toServiceModel(
+ superModel,
+ zone,
+ configServerHosts,
+ slobrokMonitor);
+
+ Map<ApplicationInstanceReference,
+ ApplicationInstance<ServiceMonitorStatus>> applicationInstances =
+ serviceModel.getAllApplicationInstances();
+
+ assertEquals(2, applicationInstances.size());
+
+ Iterator<Map.Entry<ApplicationInstanceReference,
+ ApplicationInstance<ServiceMonitorStatus>>> iterator =
+ applicationInstances.entrySet().iterator();
+
+ ApplicationInstance<ServiceMonitorStatus> applicationInstance1 = iterator.next().getValue();
+ ApplicationInstance<ServiceMonitorStatus> applicationInstance2 = iterator.next().getValue();
+
+ if (applicationInstance1.applicationInstanceId().equals(
+ ConfigServerApplication.APPLICATION_INSTANCE_ID)) {
+ verifyConfigServerApplication(applicationInstance1);
+ verifyOtherApplication(applicationInstance2);
+ } else {
+ verifyConfigServerApplication(applicationInstance2);
+ verifyOtherApplication(applicationInstance1);
+ }
+ }
+
+ private void verifyOtherApplication(ApplicationInstance<ServiceMonitorStatus> 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<ServiceMonitorStatus>> serviceClusters =
+ applicationInstance.serviceClusters();
+ assertEquals(1, serviceClusters.size());
+ ServiceCluster<ServiceMonitorStatus> serviceCluster = serviceClusters.iterator().next();
+ assertEquals(ExampleModel.CLUSTER_ID, serviceCluster.clusterId().toString());
+ assertEquals(ExampleModel.SERVICE_TYPE, serviceCluster.serviceType().toString());
+ Set<ServiceInstance<ServiceMonitorStatus>> serviceInstances =
+ serviceCluster.serviceInstances();
+ assertEquals(1, serviceClusters.size());
+ ServiceInstance<ServiceMonitorStatus> serviceInstance = serviceInstances.iterator().next();
+ assertEquals(HOSTNAME, serviceInstance.hostName().toString());
+ assertEquals(ExampleModel.CONFIG_ID, serviceInstance.configId().toString());
+ assertEquals(ServiceMonitorStatus.UP, serviceInstance.serviceStatus());
+ }
+
+ private void verifyConfigServerApplication(
+ ApplicationInstance<ServiceMonitorStatus> applicationInstance) {
+ assertEquals(ConfigServerApplication.APPLICATION_INSTANCE_ID,
+ applicationInstance.applicationInstanceId());
+ }
+
+} \ No newline at end of file
diff --git a/service-monitor/src/test/java/com/yahoo/vespa/service/monitor/SlobrokMonitor2Test.java b/service-monitor/src/test/java/com/yahoo/vespa/service/monitor/SlobrokMonitor2Test.java
new file mode 100644
index 00000000000..242112694eb
--- /dev/null
+++ b/service-monitor/src/test/java/com/yahoo/vespa/service/monitor/SlobrokMonitor2Test.java
@@ -0,0 +1,58 @@
+// 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.monitor;
+
+import com.yahoo.config.model.api.SuperModel;
+import com.yahoo.jrt.slobrok.api.Mirror;
+import com.yahoo.jrt.slobrok.api.SlobrokList;
+import com.yahoo.vespa.applicationmodel.ConfigId;
+import com.yahoo.vespa.applicationmodel.ServiceType;
+import org.junit.Test;
+
+import java.util.Optional;
+
+import static org.junit.Assert.assertEquals;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+public class SlobrokMonitor2Test {
+ private final SlobrokList slobrokList = mock(SlobrokList.class);
+ private final Mirror mirror = mock(Mirror.class);
+ private SlobrokMonitor2 slobrokMonitor = new SlobrokMonitor2(slobrokList, mirror);
+
+ @Test
+ public void testLookup() {
+ assertEquals(
+ Optional.of("config.id"),
+ lookup("topleveldispatch", "config.id"));
+
+ assertEquals(
+ Optional.empty(),
+ lookup("adminserver", "config.id"));
+ }
+
+ private Optional<String> lookup(String serviceType, String configId) {
+ return slobrokMonitor.lookup(new ServiceType(serviceType), new ConfigId(configId));
+ }
+
+ @Test
+ public void testGetStatus() {
+ ServiceType serviceType = new ServiceType("topleveldispatch");
+ ConfigId configId = new ConfigId("config.id");
+ when(mirror.lookup("config.id")).thenReturn(new Mirror.Entry[1]);
+ assertEquals(ServiceMonitorStatus.UP, slobrokMonitor.getStatus(serviceType, configId));
+ }
+
+ @Test
+ public void testUpdateSlobrokList() {
+ final String hostname = "hostname";
+ final int port = 1;
+
+ SuperModel superModel = ExampleModel.createExampleSuperModelWithOneRpcPort(hostname, port);
+ slobrokMonitor.updateSlobrokList(superModel);
+
+ String[] expectedSpecs = new String[] {"tcp/" + hostname + ":" + port};
+ verify(slobrokList).setup(expectedSpecs);
+ }
+
+} \ No newline at end of file