1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
|
// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.vespa.config.server.model;
import com.yahoo.cloud.config.RoutingConfig;
import com.yahoo.config.application.api.ApplicationPackage;
import com.yahoo.config.model.NullConfigModelRegistry;
import com.yahoo.config.model.api.ApplicationInfo;
import com.yahoo.config.model.api.Model;
import com.yahoo.config.model.deploy.DeployState;
import com.yahoo.config.model.test.MockApplicationPackage;
import com.yahoo.config.provision.ApplicationId;
import com.yahoo.config.provision.TenantName;
import com.yahoo.vespa.config.server.tenant.TenantRepository;
import com.yahoo.vespa.model.VespaModel;
import org.junit.Test;
import org.xml.sax.SAXException;
import java.io.IOException;
import java.util.LinkedHashMap;
import java.util.LinkedHashSet;
import java.util.Map;
import java.util.Set;
import static org.hamcrest.Matchers.is;
import static org.junit.Assert.assertThat;
/**
* @author Christian Andersen
*/
@SuppressWarnings("removal") // For RoutingProducer
public class RoutingProducerTest {
@Test
public void testNodesFromRoutingAppOnly() throws Exception {
Map<TenantName, Set<ApplicationInfo>> testModel = createTestModel(new DeployState.Builder());
RoutingProducer producer = new RoutingProducer(testModel);
RoutingConfig.Builder builder = new RoutingConfig.Builder();
producer.getConfig(builder);
RoutingConfig config = new RoutingConfig(builder);
assertThat(config.hosts().size(), is(2));
assertThat(config.hosts(0), is("hosted-vespa.routing.yahoo.com"));
assertThat(config.hosts(1), is("hosted-vespa.routing2.yahoo.com"));
}
private Map<TenantName, Set<ApplicationInfo>> createTestModel(DeployState.Builder deployStateBuilder) throws IOException, SAXException {
Map<TenantName, Set<ApplicationInfo>> apps = new LinkedHashMap<>();
TenantName foo = TenantName.from("foo");
TenantName bar = TenantName.from("bar");
TenantName routing = TenantName.from(TenantRepository.HOSTED_VESPA_TENANT.value());
apps.put(foo, createTestApplications(foo, deployStateBuilder));
apps.put(bar, createTestApplications(bar, deployStateBuilder));
apps.put(routing, createTestApplications(routing, deployStateBuilder));
return apps;
}
private Set<ApplicationInfo> createTestApplications(TenantName tenant, DeployState.Builder deploystateBuilder) throws IOException, SAXException {
Set<ApplicationInfo> applicationInfos = new LinkedHashSet<>();
ApplicationId fooApp = new ApplicationId.Builder().tenant(tenant).applicationName("foo").build();
ApplicationId barApp = new ApplicationId.Builder().tenant(tenant).applicationName("bar").build();
ApplicationId routingApp = new ApplicationId.Builder().tenant(tenant).applicationName(RoutingProducer.ROUTING_APPLICATION.value()).build();
applicationInfos.add(createApplication(fooApp, deploystateBuilder));
applicationInfos.add(createApplication(barApp, deploystateBuilder));
applicationInfos.add(createApplication(routingApp, deploystateBuilder));
return applicationInfos;
}
private ApplicationInfo createApplication(ApplicationId appId, DeployState.Builder deploystateBuilder) throws IOException, SAXException {
return new ApplicationInfo(
appId,
3l,
createVespaModel(
createApplicationPackage(
appId.tenant() + "." + appId.application() + ".yahoo.com",
appId.tenant().value() + "." + appId.application().value() + "2.yahoo.com"),
deploystateBuilder));
}
private ApplicationPackage createApplicationPackage(String host1, String host2) {
String hosts = "<hosts><host name='" + host1 + "'><alias>node1</alias></host><host name='" + host2 + "'><alias>node2</alias></host></hosts>";
String services = "<services><admin version='2.0'><adminserver hostalias='node1' /><logserver hostalias='node1' /><slobroks><slobrok hostalias='node1' /><slobrok hostalias='node2' /></slobroks></admin>"
+ "<jdisc id='mydisc' version='1.0'>" +
" <aliases>" +
" <endpoint-alias>foo2.bar2.com</endpoint-alias>" +
" <service-alias>service1</service-alias>" +
" <endpoint-alias>foo1.bar1.com</endpoint-alias>" +
" </aliases>" +
" <nodes>" +
" <node hostalias='node1' />" +
" </nodes>" +
" <search/>" +
"</jdisc>" +
"</services>";
String deploymentInfo ="<?xml version='1.0' encoding='UTF-8'?>" +
"<deployment version='1.0'>" +
" <test />" +
" <prod global-service-id='mydisc'>" +
" <region active='true'>us-east</region>" +
" </prod>" +
"</deployment>";
return new MockApplicationPackage.Builder()
.withHosts(hosts)
.withServices(services)
.withDeploymentSpec(deploymentInfo)
.build();
}
private Model createVespaModel(ApplicationPackage applicationPackage, DeployState.Builder deployStateBuilder) throws IOException, SAXException {
return new VespaModel(new NullConfigModelRegistry(), deployStateBuilder.applicationPackage(applicationPackage).build());
}
}
|