summaryrefslogtreecommitdiffstats
path: root/config-model/src/test/java/com/yahoo
diff options
context:
space:
mode:
authorJon Bratseth <bratseth@yahoo-inc.com>2017-12-14 18:47:08 +0100
committerJon Bratseth <bratseth@yahoo-inc.com>2017-12-14 18:47:08 +0100
commitff0b4082e7d328b5cf5dfe0e79d27471c3afdb50 (patch)
tree865e46af8d4c406418050383a4e25c761b2dce3d /config-model/src/test/java/com/yahoo
parent597f59619a0e08f75a0e60ac09da7e5aea538404 (diff)
parentb27bada7c6b22d83557c6592d8c00fea2a6c35fe (diff)
Merge with master
Diffstat (limited to 'config-model/src/test/java/com/yahoo')
-rw-r--r--config-model/src/test/java/com/yahoo/searchdefinition/processing/ImportedFieldsInSummaryValidatorTestCase.java39
-rw-r--r--config-model/src/test/java/com/yahoo/searchdefinition/processing/ImportedFieldsResolverTestCase.java15
-rw-r--r--config-model/src/test/java/com/yahoo/vespa/model/admin/AdminTestCase.java25
-rwxr-xr-xconfig-model/src/test/java/com/yahoo/vespa/model/builder/xml/dom/DomAdminV2BuilderTest.java5
-rw-r--r--config-model/src/test/java/com/yahoo/vespa/model/clients/test/Gateway20TestCase.java65
-rw-r--r--config-model/src/test/java/com/yahoo/vespa/model/container/configserver/TestOptions.java7
-rw-r--r--config-model/src/test/java/com/yahoo/vespa/model/container/xml/ContainerModelBuilderTest.java38
-rw-r--r--config-model/src/test/java/com/yahoo/vespa/model/container/xml/JettyContainerModelBuilderTest.java55
-rw-r--r--config-model/src/test/java/com/yahoo/vespa/model/content/ContentSearchClusterTest.java34
-rw-r--r--config-model/src/test/java/com/yahoo/vespa/model/content/DistributorTest.java79
-rw-r--r--config-model/src/test/java/com/yahoo/vespa/model/content/utils/ContentClusterBuilder.java27
-rw-r--r--config-model/src/test/java/com/yahoo/vespa/model/content/utils/ContentClusterUtils.java6
-rw-r--r--config-model/src/test/java/com/yahoo/vespa/model/content/utils/DocType.java54
13 files changed, 263 insertions, 186 deletions
diff --git a/config-model/src/test/java/com/yahoo/searchdefinition/processing/ImportedFieldsInSummaryValidatorTestCase.java b/config-model/src/test/java/com/yahoo/searchdefinition/processing/ImportedFieldsInSummaryValidatorTestCase.java
new file mode 100644
index 00000000000..4e1f8f1edd7
--- /dev/null
+++ b/config-model/src/test/java/com/yahoo/searchdefinition/processing/ImportedFieldsInSummaryValidatorTestCase.java
@@ -0,0 +1,39 @@
+package com.yahoo.searchdefinition.processing;
+
+import com.yahoo.document.DataType;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.ExpectedException;
+
+/**
+ * @author geirst
+ */
+public class ImportedFieldsInSummaryValidatorTestCase {
+
+ @Rule
+ public final ExpectedException exceptionRule = ExpectedException.none();
+
+ @Test
+ public void validator_fails_if_imported_predicate_field_is_used_in_document_summary() {
+ exceptionRule.expect(IllegalArgumentException.class);
+ exceptionRule.expectMessage("For search 'child', document summary 'my_summary', " +
+ "imported summary field 'my_predicate_field': Is of type predicate. Not supported in document summaries");
+ new SearchModel()
+ .addImportedField("my_predicate_field", "ref", "predicate_field")
+ .addSummaryField("my_predicate_field", DataType.PREDICATE)
+ .resolve();
+ }
+
+ private static class SearchModel extends ImportedFieldsResolverTestCase.SearchModel {
+
+ public SearchModel() {
+ super();
+ }
+
+ public void resolve() {
+ super.resolve();
+ new ImportedFieldsInSummayValidator(childSearch, null, null, null).process();
+ }
+ }
+}
+
diff --git a/config-model/src/test/java/com/yahoo/searchdefinition/processing/ImportedFieldsResolverTestCase.java b/config-model/src/test/java/com/yahoo/searchdefinition/processing/ImportedFieldsResolverTestCase.java
index 5d270bc085a..9f7c7458738 100644
--- a/config-model/src/test/java/com/yahoo/searchdefinition/processing/ImportedFieldsResolverTestCase.java
+++ b/config-model/src/test/java/com/yahoo/searchdefinition/processing/ImportedFieldsResolverTestCase.java
@@ -18,6 +18,8 @@ import com.yahoo.searchdefinition.document.SDField;
import com.yahoo.searchdefinition.document.TemporaryImportedField;
import com.yahoo.searchdefinition.document.TemporarySDField;
import com.yahoo.tensor.TensorType;
+import com.yahoo.vespa.documentmodel.DocumentSummary;
+import com.yahoo.vespa.documentmodel.SummaryField;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.ExpectedException;
@@ -107,7 +109,7 @@ public class ImportedFieldsResolverTestCase {
.resolve();
}
- private static class SearchModel {
+ static class SearchModel {
private final ApplicationPackage app = MockApplicationPackage.createEmpty();
public final Search grandParentSearch;
@@ -124,6 +126,7 @@ public class ImportedFieldsResolverTestCase {
parentSearch.getDocument().addField(createField("attribute_and_index", DataType.INT, "{ attribute | index }"));
parentSearch.getDocument().addField(new TemporarySDField("not_attribute", DataType.INT));
parentSearch.getDocument().addField(createField("tensor_field", new TensorDataType(TensorType.fromSpec("tensor(x[])")), "{ attribute }"));
+ parentSearch.getDocument().addField(createField("predicate_field", DataType.PREDICATE, "{ attribute }"));
addRefField(parentSearch, grandParentSearch, "ref");
addImportedField(parentSearch, "ancient_field", "ref", "ancient_field");
@@ -163,6 +166,16 @@ public class ImportedFieldsResolverTestCase {
return this;
}
+ public SearchModel addSummaryField(String fieldName, DataType dataType) {
+ DocumentSummary summary = childSearch.getSummary("my_summary");
+ if (summary == null) {
+ summary = new DocumentSummary("my_summary");
+ childSearch.addSummary(summary);
+ }
+ summary.add(new SummaryField(fieldName, dataType));
+ return this;
+ }
+
public void resolve() {
resolve(grandParentSearch);
resolve(parentSearch);
diff --git a/config-model/src/test/java/com/yahoo/vespa/model/admin/AdminTestCase.java b/config-model/src/test/java/com/yahoo/vespa/model/admin/AdminTestCase.java
index 946624a1cdb..fed9000f72b 100644
--- a/config-model/src/test/java/com/yahoo/vespa/model/admin/AdminTestCase.java
+++ b/config-model/src/test/java/com/yahoo/vespa/model/admin/AdminTestCase.java
@@ -8,7 +8,6 @@ import com.yahoo.cloud.config.SentinelConfig;
import com.yahoo.config.model.ApplicationConfigProducerRoot;
import com.yahoo.config.model.deploy.DeployProperties;
import com.yahoo.config.model.deploy.DeployState;
-import com.yahoo.config.model.test.MockApplicationPackage;
import com.yahoo.config.model.test.TestDriver;
import com.yahoo.config.model.test.TestRoot;
import com.yahoo.config.provision.ApplicationId;
@@ -24,11 +23,9 @@ import com.yahoo.vespa.model.container.component.Component;
import com.yahoo.vespa.model.container.component.StatisticsComponent;
import com.yahoo.vespa.model.test.utils.VespaModelCreatorWithFilePkg;
import com.yahoo.vespa.model.test.utils.VespaModelCreatorWithMockPkg;
-import org.junit.Ignore;
import org.junit.Test;
import java.util.Set;
-import java.util.stream.IntStream;
import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertEquals;
@@ -288,7 +285,7 @@ public class AdminTestCase {
" <admin version='2.0'>" +
" <adminserver hostalias='node0' />" +
" <filedistribution>" +
- " <disabled>true</disabled>" +
+ " <disableFiledistributor>true</disableFiledistributor>" +
" </filedistribution>" +
" </admin>" +
"</services>";
@@ -307,4 +304,24 @@ public class AdminTestCase {
assertThat(sentinelConfig.service(2).name(), is("logd"));
// No filedistributor service
}
+
+ @Test
+ public void testDisableFileDistributorForAllApps() {
+ DeployState state = new DeployState.Builder()
+ .disableFiledistributor(true)
+ .properties(
+ new DeployProperties.Builder().
+ zone(new Zone(Environment.dev, RegionName.from("baz"))).
+ applicationId(new ApplicationId.Builder().
+ tenant("quux").
+ applicationName("foo").instanceName("bim").build()).build()).build();
+ TestRoot root = new TestDriver().buildModel(state);
+ String localhost = HostName.getLocalhost();
+ SentinelConfig sentinelConfig = root.getConfig(SentinelConfig.class, "hosts/" + localhost);
+ assertThat(sentinelConfig.service().size(), is(3));
+ assertThat(sentinelConfig.service(0).name(), is("logserver"));
+ assertThat(sentinelConfig.service(1).name(), is("slobrok"));
+ assertThat(sentinelConfig.service(2).name(), is("logd"));
+ }
+
}
diff --git a/config-model/src/test/java/com/yahoo/vespa/model/builder/xml/dom/DomAdminV2BuilderTest.java b/config-model/src/test/java/com/yahoo/vespa/model/builder/xml/dom/DomAdminV2BuilderTest.java
index 6c1bf6c9748..446ceb686e8 100755
--- a/config-model/src/test/java/com/yahoo/vespa/model/builder/xml/dom/DomAdminV2BuilderTest.java
+++ b/config-model/src/test/java/com/yahoo/vespa/model/builder/xml/dom/DomAdminV2BuilderTest.java
@@ -207,7 +207,10 @@ public class DomAdminV2BuilderTest extends DomBuilderTest {
}
private Admin buildAdmin(Element xml, boolean multitenant, List<ConfigServerSpec> configServerSpecs) {
- final DomAdminV2Builder domAdminBuilder = new DomAdminV2Builder(ConfigModelContext.ApplicationType.DEFAULT, root.getDeployState().getFileRegistry(), multitenant, configServerSpecs);
+ final DomAdminV2Builder domAdminBuilder =
+ new DomAdminV2Builder(ConfigModelContext.ApplicationType.DEFAULT,
+ root.getDeployState().getFileRegistry(), multitenant,
+ configServerSpecs, root.getDeployState().disableFiledistributor());
Admin admin = domAdminBuilder.build(root, xml);
admin.addPerHostServices(root.getHostSystem().getHosts(), new DeployProperties.Builder().build());
return admin;
diff --git a/config-model/src/test/java/com/yahoo/vespa/model/clients/test/Gateway20TestCase.java b/config-model/src/test/java/com/yahoo/vespa/model/clients/test/Gateway20TestCase.java
deleted file mode 100644
index e7df151a3c4..00000000000
--- a/config-model/src/test/java/com/yahoo/vespa/model/clients/test/Gateway20TestCase.java
+++ /dev/null
@@ -1,65 +0,0 @@
-// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-package com.yahoo.vespa.model.clients.test;
-
-import com.yahoo.container.ComponentsConfig;
-import com.yahoo.container.QrConfig;
-import com.yahoo.container.QrConfig.Builder;
-import com.yahoo.net.HostName;
-import com.yahoo.vespa.model.VespaModel;
-import com.yahoo.vespa.model.test.utils.VespaModelCreatorWithFilePkg;
-import org.junit.Test;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-
-import static org.junit.Assert.*;
-
-/**
- * @author Gunnar Gauslaa Bergem
- */
-public class Gateway20TestCase {
-
- private static String hostname = HostName.getLocalhost(); // Using the same way of getting hostname as filedistribution model
-
- @Test
- public void testSimpleDocprocV3() throws Exception {
- VespaModel model = new VespaModelCreatorWithFilePkg("src/test/cfg/clients/simpleconfig.v2.docprocv3").create();
- QrConfig qrConfig = new QrConfig((Builder) model.getConfig(new QrConfig.Builder(), "container/container.0"));
- assertEquals(qrConfig.rpc().enabled(), true);
- assertEquals("filedistribution/" + hostname, qrConfig.filedistributor().configid());
- assertEquals("container.container.0", qrConfig.discriminator());
-
- ComponentsConfig componentsConfig = new ComponentsConfig((ComponentsConfig.Builder) model.getConfig(new ComponentsConfig.Builder(), "container/container.0"));
- ArrayList<String> components = new ArrayList<>();
- for (ComponentsConfig.Components component : componentsConfig.components()) {
- components.add(component.id());
- }
- List<String> expectedComponents = Arrays.asList("com.yahoo.docproc.jdisc.DocumentProcessingHandler",
- "com.yahoo.feedhandler.VespaFeedHandler",
- "com.yahoo.feedhandler.VespaFeedHandlerCompatibility",
- "com.yahoo.feedhandler.VespaFeedHandlerGet",
- "com.yahoo.feedhandler.VespaFeedHandlerRemove",
- "com.yahoo.feedhandler.VespaFeedHandlerRemoveLocation",
- "com.yahoo.feedhandler.VespaFeedHandlerStatus",
- "com.yahoo.feedhandler.VespaFeedHandlerVisit",
- "com.yahoo.search.handler.SearchHandler",
- "com.yahoo.container.jdisc.state.StateHandler");
- assertTrue(components.containsAll(expectedComponents));
- }
-
- @Test
- public void testAdvanced() throws Exception {
- VespaModel model = new VespaModelCreatorWithFilePkg("src/test/cfg/clients/advancedconfig.v2").create();
-
- QrConfig qrConfig = new QrConfig((Builder) model.getConfig(new QrConfig.Builder(), "container/container.0"));
- assertEquals(qrConfig.rpc().enabled(), true);
- assertEquals(qrConfig.filedistributor().configid(), "filedistribution/" + hostname);
- assertEquals("container.container.0", qrConfig.discriminator());
-
- qrConfig = new QrConfig((Builder) model.getConfig(new QrConfig.Builder(), "container/container.0"));
- assertEquals(qrConfig.rpc().enabled(), true);
- assertEquals(qrConfig.filedistributor().configid(), "filedistribution/" + hostname);
- }
-
-}
diff --git a/config-model/src/test/java/com/yahoo/vespa/model/container/configserver/TestOptions.java b/config-model/src/test/java/com/yahoo/vespa/model/container/configserver/TestOptions.java
index e2c8f2e2c52..1784fe0e974 100644
--- a/config-model/src/test/java/com/yahoo/vespa/model/container/configserver/TestOptions.java
+++ b/config-model/src/test/java/com/yahoo/vespa/model/container/configserver/TestOptions.java
@@ -6,8 +6,7 @@ import com.yahoo.vespa.model.container.configserver.option.CloudConfigOptions;
import java.util.Optional;
/**
- * @author lulf
- * @since 5.
+ * @author Ulf Lilleengen
*/
public class TestOptions implements CloudConfigOptions {
private Optional<Integer> rpcPort = Optional.empty();
@@ -20,6 +19,7 @@ public class TestOptions implements CloudConfigOptions {
private Optional<Boolean> useVespaVersionInRequest = Optional.empty();
private Optional<Boolean> hostedVespa = Optional.empty();
private Optional<Integer> numParallelTenantLoaders = Optional.empty();
+ private Optional<Boolean> disableFiledistributor = Optional.empty();
@Override
public Optional<Integer> rpcPort() {
@@ -118,6 +118,9 @@ public class TestOptions implements CloudConfigOptions {
@Override
public Optional<String> loadBalancerAddress() { return Optional.empty(); }
+ @Override
+ public Optional<Boolean> disableFiledistributor() { return disableFiledistributor; }
+
public TestOptions numParallelTenantLoaders(int numLoaders) {
this.numParallelTenantLoaders = Optional.of(numLoaders);
return this;
diff --git a/config-model/src/test/java/com/yahoo/vespa/model/container/xml/ContainerModelBuilderTest.java b/config-model/src/test/java/com/yahoo/vespa/model/container/xml/ContainerModelBuilderTest.java
index d09211aea45..5e093bdb32a 100644
--- a/config-model/src/test/java/com/yahoo/vespa/model/container/xml/ContainerModelBuilderTest.java
+++ b/config-model/src/test/java/com/yahoo/vespa/model/container/xml/ContainerModelBuilderTest.java
@@ -16,6 +16,7 @@ import com.yahoo.config.provision.Environment;
import com.yahoo.config.provision.RegionName;
import com.yahoo.config.provision.Zone;
import com.yahoo.container.ComponentsConfig;
+import com.yahoo.container.QrConfig;
import com.yahoo.container.config.StatisticsRequestHandler;
import com.yahoo.container.core.ChainsConfig;
import com.yahoo.container.core.VipStatusConfig;
@@ -25,6 +26,7 @@ import com.yahoo.container.jdisc.JdiscBindingsConfig;
import com.yahoo.container.servlet.ServletConfigConfig;
import com.yahoo.container.usability.BindingsOverviewHandler;
import com.yahoo.jdisc.http.ServletPathsConfig;
+import com.yahoo.net.HostName;
import com.yahoo.prelude.cluster.QrMonitorConfig;
import com.yahoo.vespa.model.AbstractService;
import com.yahoo.vespa.model.VespaModel;
@@ -61,7 +63,6 @@ import static org.junit.Assert.fail;
/**
* @author gjoranv
- * @since 5.1.9
*/
public class ContainerModelBuilderTest extends ContainerModelBuilderTestBase {
@@ -571,6 +572,41 @@ public class ContainerModelBuilderTest extends ContainerModelBuilderTestBase {
assertEquals(ContainerModelBuilder.HOSTED_VESPA_STATUS_FILE, vipStatusConfig.statusfile());
}
+ @Test
+ public void qrconfig_is_produced() throws IOException, SAXException {
+ String servicesXml =
+ "<services>" +
+ "<admin version='3.0'>" +
+ " <nodes count='1'/>" +
+ "</admin>" +
+ "<jdisc id ='default' version='1.0'>" +
+ " <nodes>" +
+ " <node hostalias='node1' />" +
+ " </nodes>" +
+ "</jdisc>" +
+ "</services>";
+
+ ApplicationPackage applicationPackage = new MockApplicationPackage.Builder()
+ .withServices(servicesXml)
+ .build();
+ VespaModel model = new VespaModel(new NullConfigModelRegistry(), new DeployState.Builder()
+ .applicationPackage(applicationPackage)
+ .properties(new DeployProperties.Builder().build())
+ .build());
+
+ String hostname = HostName.getLocalhost(); // Using the same way of getting hostname as filedistribution model
+
+ QrConfig config = model.getConfig(QrConfig.class, "default/container.0");
+ assertEquals("default.container.0", config.discriminator());
+ assertEquals(19102, config.rpc().port());
+ assertEquals("vespa/service/default/container.0", config.rpc().slobrokId());
+ assertEquals(true, config.rpc().enabled());
+ assertEquals("", config.rpc().host());
+ assertEquals(false, config.restartOnDeploy());
+ assertEquals(false, config.coveragereports());
+ assertEquals("filedistribution/" + hostname, config.filedistributor().configid());
+ }
+
private Element generateContainerElementWithRenderer(String rendererId) {
return DomBuilderTest.parse(
"<jdisc id='default' version='1.0'>",
diff --git a/config-model/src/test/java/com/yahoo/vespa/model/container/xml/JettyContainerModelBuilderTest.java b/config-model/src/test/java/com/yahoo/vespa/model/container/xml/JettyContainerModelBuilderTest.java
index 1e24b055095..54c4aabf44c 100644
--- a/config-model/src/test/java/com/yahoo/vespa/model/container/xml/JettyContainerModelBuilderTest.java
+++ b/config-model/src/test/java/com/yahoo/vespa/model/container/xml/JettyContainerModelBuilderTest.java
@@ -7,6 +7,7 @@ import com.yahoo.container.bundle.BundleInstantiationSpecification;
import com.yahoo.container.jdisc.FilterBindingsProvider;
import com.yahoo.jdisc.http.ConnectorConfig;
import com.yahoo.jdisc.http.ssl.DefaultSslKeyStoreConfigurator;
+import com.yahoo.jdisc.http.ssl.DefaultSslTrustStoreConfigurator;
import com.yahoo.vespa.model.container.ContainerCluster;
import com.yahoo.vespa.model.container.component.SimpleComponent;
import com.yahoo.vespa.model.container.http.ConnectorFactory;
@@ -16,7 +17,9 @@ import org.w3c.dom.Element;
import org.xml.sax.SAXException;
import java.io.IOException;
+import java.util.Arrays;
import java.util.List;
+import java.util.Set;
import static com.yahoo.jdisc.http.ConnectorConfig.Ssl.KeyStoreType;
import static org.hamcrest.CoreMatchers.equalTo;
@@ -28,7 +31,6 @@ import static org.junit.Assert.assertThat;
/**
* @author einarmr
- * @since 5.15
*/
public class JettyContainerModelBuilderTest extends ContainerModelBuilderTestBase {
@@ -190,12 +192,13 @@ public class JettyContainerModelBuilderTest extends ContainerModelBuilderTestBas
}
@Test
- public void ssl_keystore_configurator_can_be_overriden() throws IOException, SAXException {
+ public void ssl_keystore_and_truststore_configurator_can_be_overriden() throws IOException, SAXException {
Element clusterElem = DomBuilderTest.parse(
"<jdisc id='default' version='1.0' jetty='true'>",
" <http>",
" <server port='9000' id='foo'>",
" <ssl-keystore-configurator class='com.yahoo.MySslKeyStoreConfigurator' bundle='mybundle'/>",
+ " <ssl-truststore-configurator class='com.yahoo.MySslTrustStoreConfigurator' bundle='mybundle'/>",
" </server>",
" <server port='9001' id='bar'/>",
" </http>",
@@ -204,27 +207,47 @@ public class JettyContainerModelBuilderTest extends ContainerModelBuilderTestBas
createModel(root, clusterElem);
ContainerCluster cluster = (ContainerCluster) root.getChildren().get("default");
List<ConnectorFactory> connectorFactories = cluster.getChildrenByTypeRecursive(ConnectorFactory.class);
-
{
ConnectorFactory firstConnector = connectorFactories.get(0);
- assertThat(firstConnector.getInjectedComponentIds(), hasItem("ssl-keystore-configurator@foo"));
- assertThat(firstConnector.getInjectedComponentIds().size(), equalTo(1));
- SimpleComponent sslKeystoreConfigurator = firstConnector.getChildrenByTypeRecursive(SimpleComponent.class).get(0);
- BundleInstantiationSpecification spec = sslKeystoreConfigurator.model.bundleInstantiationSpec;
- assertThat(spec.classId.toString(), is("com.yahoo.MySslKeyStoreConfigurator"));
- assertThat(spec.bundle.toString(), is("mybundle"));
+ assertConnectorHasInjectedComponents(firstConnector, "ssl-keystore-configurator@foo", "ssl-truststore-configurator@foo");
+ assertComponentHasClassNameAndBundle(getChildComponent(firstConnector, 0),
+ "com.yahoo.MySslKeyStoreConfigurator",
+ "mybundle");
+ assertComponentHasClassNameAndBundle(getChildComponent(firstConnector, 1),
+ "com.yahoo.MySslTrustStoreConfigurator",
+ "mybundle");
}
{
- ConnectorFactory secondFactory = connectorFactories.get(1);
- assertThat(secondFactory.getInjectedComponentIds(), hasItem("ssl-keystore-configurator@bar"));
- assertThat(secondFactory.getInjectedComponentIds().size(), equalTo(1));
- SimpleComponent sslKeystoreConfigurator = secondFactory.getChildrenByTypeRecursive(SimpleComponent.class).get(0);
- BundleInstantiationSpecification spec = sslKeystoreConfigurator.model.bundleInstantiationSpec;
- assertThat(spec.classId.toString(), is(DefaultSslKeyStoreConfigurator.class.getName()));
- assertThat(spec.bundle.toString(), is("jdisc_http_service"));
+ ConnectorFactory secondConnector = connectorFactories.get(1);
+ assertConnectorHasInjectedComponents(secondConnector, "ssl-keystore-configurator@bar", "ssl-truststore-configurator@bar");
+ assertComponentHasClassNameAndBundle(getChildComponent(secondConnector, 0),
+ DefaultSslKeyStoreConfigurator.class.getName(),
+ "jdisc_http_service");
+ assertComponentHasClassNameAndBundle(getChildComponent(secondConnector, 1),
+ DefaultSslTrustStoreConfigurator.class.getName(),
+ "jdisc_http_service");
}
}
+ private static void assertConnectorHasInjectedComponents(ConnectorFactory connectorFactory, String... componentNames) {
+ Set<String> injectedComponentIds = connectorFactory.getInjectedComponentIds();
+ assertThat(injectedComponentIds.size(), equalTo(componentNames.length));
+ Arrays.stream(componentNames)
+ .forEach(name -> assertThat(injectedComponentIds, hasItem(name)));
+ }
+
+ private static SimpleComponent getChildComponent(ConnectorFactory connectorFactory, int index) {
+ return connectorFactory.getChildrenByTypeRecursive(SimpleComponent.class).get(index);
+ }
+
+ private static void assertComponentHasClassNameAndBundle(SimpleComponent simpleComponent,
+ String className,
+ String bundleName) {
+ BundleInstantiationSpecification spec = simpleComponent.model.bundleInstantiationSpec;
+ assertThat(spec.classId.toString(), is(className));
+ assertThat(spec.bundle.toString(), is(bundleName));
+ }
+
private void assertJettyServerInConfig() {
ContainerCluster cluster = (ContainerCluster) root.getChildren().get("default");
List<JettyHttpServer> jettyServers = cluster.getChildrenByTypeRecursive(JettyHttpServer.class);
diff --git a/config-model/src/test/java/com/yahoo/vespa/model/content/ContentSearchClusterTest.java b/config-model/src/test/java/com/yahoo/vespa/model/content/ContentSearchClusterTest.java
index 5f18b28d6ce..41bba055a50 100644
--- a/config-model/src/test/java/com/yahoo/vespa/model/content/ContentSearchClusterTest.java
+++ b/config-model/src/test/java/com/yahoo/vespa/model/content/ContentSearchClusterTest.java
@@ -1,9 +1,11 @@
// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.vespa.model.content;
+import com.yahoo.vespa.config.content.core.BucketspacesConfig;
import com.yahoo.vespa.config.search.core.ProtonConfig;
import com.yahoo.vespa.model.content.cluster.ContentCluster;
import com.yahoo.vespa.model.content.utils.ContentClusterBuilder;
+import com.yahoo.vespa.model.content.utils.DocType;
import com.yahoo.vespa.model.content.utils.SearchDefinitionBuilder;
import org.junit.Test;
@@ -15,6 +17,7 @@ import static com.yahoo.config.model.test.TestUtil.joinLines;
import static com.yahoo.vespa.model.content.utils.ContentClusterUtils.createCluster;
import static com.yahoo.vespa.model.content.utils.SearchDefinitionBuilder.createSearchDefinitions;
import static junit.framework.TestCase.assertEquals;
+import static junit.framework.TestCase.assertFalse;
/**
* Unit tests for content search cluster.
@@ -36,8 +39,8 @@ public class ContentSearchClusterTest {
private static ContentCluster createClusterWithGlobalType() throws Exception {
return createCluster(new ContentClusterBuilder().docTypes(Arrays.asList(
- new ContentClusterBuilder.DocType("global", true),
- new ContentClusterBuilder.DocType("regular"))).getXml(),
+ DocType.indexGlobal("global"),
+ DocType.index("regular"))).getXml(),
createSearchDefinitions("global", "regular"));
}
@@ -108,10 +111,31 @@ public class ContentSearchClusterTest {
.content("field ref_to_c type reference<c> { indexing: attribute }").build());
searchDefinitions.add(new SearchDefinitionBuilder().name("c").build());
return createCluster(new ContentClusterBuilder().docTypes(Arrays.asList(
- new ContentClusterBuilder.DocType("a"),
- new ContentClusterBuilder.DocType("b", true),
- new ContentClusterBuilder.DocType("c", true))).getXml(),
+ DocType.index("a"),
+ DocType.indexGlobal("b"),
+ DocType.indexGlobal("c"))).getXml(),
searchDefinitions);
}
+ private static BucketspacesConfig getBucketspacesConfig(ContentCluster cluster) {
+ BucketspacesConfig.Builder builder = new BucketspacesConfig.Builder();
+ cluster.getConfig(builder);
+ return new BucketspacesConfig(builder);
+ }
+
+ private static void assertDocumentType(String expName, String expBucketSpace, BucketspacesConfig.Documenttype docType) {
+ assertEquals(expName, docType.name());
+ assertEquals(expBucketSpace, docType.bucketspace());
+ }
+
+ @Test
+ public void require_that_bucket_spaces_config_is_produced_for_content_cluster() throws Exception {
+ BucketspacesConfig config = getBucketspacesConfig(createClusterWithGlobalType());
+ assertEquals(2, config.documenttype().size());
+ assertDocumentType("global", "global", config.documenttype(0));
+ assertDocumentType("regular", "default", config.documenttype(1));
+ // Safeguard against flipping the switch
+ assertFalse(config.enable_multiple_bucket_spaces());
+ }
+
}
diff --git a/config-model/src/test/java/com/yahoo/vespa/model/content/DistributorTest.java b/config-model/src/test/java/com/yahoo/vespa/model/content/DistributorTest.java
index d4e804d3f95..48b7ccdad6b 100644
--- a/config-model/src/test/java/com/yahoo/vespa/model/content/DistributorTest.java
+++ b/config-model/src/test/java/com/yahoo/vespa/model/content/DistributorTest.java
@@ -1,23 +1,22 @@
// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.vespa.model.content;
-import com.yahoo.vespa.config.content.core.BucketspacesConfig;
import com.yahoo.vespa.config.content.core.StorCommunicationmanagerConfig;
import com.yahoo.vespa.config.content.core.StorDistributormanagerConfig;
import com.yahoo.vespa.config.content.core.StorServerConfig;
import com.yahoo.config.model.test.MockRoot;
import com.yahoo.vespa.model.content.cluster.ContentCluster;
import com.yahoo.vespa.model.content.utils.ContentClusterUtils;
+import com.yahoo.vespa.model.content.utils.DocType;
import com.yahoo.vespa.model.test.utils.ApplicationPackageUtils;
import org.junit.Test;
-import java.util.Arrays;
import java.util.List;
-import java.util.stream.Collectors;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertThat;
import static org.hamcrest.Matchers.*;
+
/**
* Test for content DistributorCluster.
*/
@@ -303,100 +302,48 @@ public class DistributorTest {
return new StorDistributormanagerConfig(builder);
}
- private static class DocDef {
- public final String type;
- public final String mode;
- public final boolean global;
-
- private DocDef(String type, String mode, boolean global) {
- this.type = type;
- this.mode = mode;
- this.global = global;
- }
-
- public static DocDef storeOnly(String type) {
- return new DocDef(type, "store-only", false);
- }
-
- public static DocDef index(String type) {
- return new DocDef(type, "index", false);
- }
-
- public static DocDef indexGlobal(String type) {
- return new DocDef(type, "index", true);
- }
-
- public static DocDef streaming(String type) {
- return new DocDef(type, "streaming", false);
- }
- }
-
- private String generateXmlForDocDefs(DocDef... defs) {
+ private String generateXmlForDocTypes(DocType... docTypes) {
return "<content id='storage'>\n" +
- " <documents>\n" +
- Arrays.stream(defs)
- .map(def -> String.format(" <document type='%s' mode='%s' global='%s'/>",
- def.type, def.mode, (def.global ? "true" : "false")))
- .collect(Collectors.joining("\n")) +
- "\n </documents>\n" +
- "</content>";
+ DocType.listToXml(docTypes) +
+ "\n</content>";
}
@Test
public void bucket_activation_disabled_if_no_documents_in_indexed_mode() {
StorDistributormanagerConfig config = clusterXmlToConfig(
- generateXmlForDocDefs(DocDef.storeOnly("music")));
+ generateXmlForDocTypes(DocType.storeOnly("music")));
assertThat(config.disable_bucket_activation(), is(true));
}
@Test
public void bucket_activation_enabled_with_single_indexed_document() {
StorDistributormanagerConfig config = clusterXmlToConfig(
- generateXmlForDocDefs(DocDef.index("music")));
+ generateXmlForDocTypes(DocType.index("music")));
assertThat(config.disable_bucket_activation(), is(false));
}
@Test
public void bucket_activation_enabled_with_multiple_indexed_documents() {
StorDistributormanagerConfig config = clusterXmlToConfig(
- generateXmlForDocDefs(DocDef.index("music"),
- DocDef.index("movies")));
+ generateXmlForDocTypes(DocType.index("music"),
+ DocType.index("movies")));
assertThat(config.disable_bucket_activation(), is(false));
}
@Test
public void bucket_activation_enabled_if_at_least_one_document_indexed() {
StorDistributormanagerConfig config = clusterXmlToConfig(
- generateXmlForDocDefs(DocDef.storeOnly("music"),
- DocDef.streaming("bunnies"),
- DocDef.index("movies")));
+ generateXmlForDocTypes(DocType.storeOnly("music"),
+ DocType.streaming("bunnies"),
+ DocType.index("movies")));
assertThat(config.disable_bucket_activation(), is(false));
}
@Test
public void bucket_activation_disabled_for_single_streaming_type() {
StorDistributormanagerConfig config = clusterXmlToConfig(
- generateXmlForDocDefs(DocDef.streaming("music")));
+ generateXmlForDocTypes(DocType.streaming("music")));
assertThat(config.disable_bucket_activation(), is(true));
}
- private BucketspacesConfig clusterXmlToBucketspacesConfig(String xml) {
- BucketspacesConfig.Builder builder = new BucketspacesConfig.Builder();
- parse(xml).getConfig(builder);
- return new BucketspacesConfig(builder);
- }
-
- private void assertDocumentType(String expName, String expBucketSpace, BucketspacesConfig.Documenttype docType) {
- assertEquals(expName, docType.name());
- assertEquals(expBucketSpace, docType.bucketspace());
- }
-
- @Test
- public void bucket_spaces_config_is_produced_for_distributor_cluster() {
- BucketspacesConfig config = clusterXmlToBucketspacesConfig(
- generateXmlForDocDefs(DocDef.index("music"), DocDef.indexGlobal("movies")));
- assertEquals(2, config.documenttype().size());
- assertDocumentType("movies", "global", config.documenttype(0));
- assertDocumentType("music", "default", config.documenttype(1));
- }
}
diff --git a/config-model/src/test/java/com/yahoo/vespa/model/content/utils/ContentClusterBuilder.java b/config-model/src/test/java/com/yahoo/vespa/model/content/utils/ContentClusterBuilder.java
index 592e90efd22..95c57bb544c 100644
--- a/config-model/src/test/java/com/yahoo/vespa/model/content/utils/ContentClusterBuilder.java
+++ b/config-model/src/test/java/com/yahoo/vespa/model/content/utils/ContentClusterBuilder.java
@@ -18,29 +18,10 @@ import static com.yahoo.config.model.test.TestUtil.joinLines;
*/
public class ContentClusterBuilder {
- public static class DocType {
- private final String name;
- private final boolean global;
-
- public DocType(String name, boolean global) {
- this.name = name;
- this.global = global;
- }
-
- public DocType(String name) {
- this(name, false);
- }
-
- public String toXml() {
- return (global ? "<document mode='index' type='" + name + "' global='true'/>" :
- "<document mode='index' type='" + name + "'/>");
- }
- }
-
private String name = "mycluster";
private int redundancy = 1;
private int searchableCopies = 1;
- private List<DocType> docTypes = Arrays.asList(new DocType("test"));
+ private List<DocType> docTypes = Arrays.asList(DocType.index("test"));
private String groupXml = getSimpleGroupXml();
private Optional<String> dispatchXml = Optional.empty();
private Optional<Double> protonDiskLimit = Optional.empty();
@@ -66,7 +47,7 @@ public class ContentClusterBuilder {
public ContentClusterBuilder docTypes(String ... docTypes) {
this.docTypes = Arrays.asList(docTypes).stream().
- map(type -> new DocType(type)).
+ map(type -> DocType.index(type)).
collect(Collectors.toList());
return this;
}
@@ -103,9 +84,7 @@ public class ContentClusterBuilder {
public String getXml() {
String xml = joinLines("<content version='1.0' id='" + name + "'>",
" <redundancy>" + redundancy + "</redundancy>",
- " <documents>",
- docTypes.stream().map(DocType::toXml).collect(Collectors.joining("\n")),
- " </documents>",
+ DocType.listToXml(docTypes),
" <engine>",
" <proton>",
" <searchable-copies>" + searchableCopies + "</searchable-copies>",
diff --git a/config-model/src/test/java/com/yahoo/vespa/model/content/utils/ContentClusterUtils.java b/config-model/src/test/java/com/yahoo/vespa/model/content/utils/ContentClusterUtils.java
index 3a2633ed7b7..e557e3674b5 100644
--- a/config-model/src/test/java/com/yahoo/vespa/model/content/utils/ContentClusterUtils.java
+++ b/config-model/src/test/java/com/yahoo/vespa/model/content/utils/ContentClusterUtils.java
@@ -4,6 +4,7 @@ package com.yahoo.vespa.model.content.utils;
import com.yahoo.config.application.api.ApplicationPackage;
import com.yahoo.config.model.ConfigModelContext;
import com.yahoo.config.model.api.HostProvisioner;
+import com.yahoo.config.model.application.provider.MockFileRegistry;
import com.yahoo.config.model.deploy.DeployState;
import com.yahoo.config.model.provision.InMemoryProvisioner;
import com.yahoo.config.model.provision.SingleNodeProvisioner;
@@ -11,9 +12,11 @@ import com.yahoo.config.model.test.MockApplicationPackage;
import com.yahoo.config.model.test.MockRoot;
import com.yahoo.text.XML;
import com.yahoo.vespa.model.admin.Admin;
+import com.yahoo.vespa.model.admin.FileDistributionOptions;
import com.yahoo.vespa.model.admin.monitoring.DefaultMonitoring;
import com.yahoo.vespa.model.admin.monitoring.builder.Metrics;
import com.yahoo.vespa.model.content.cluster.ContentCluster;
+import com.yahoo.vespa.model.filedistribution.FileDistributionConfigProducer;
import org.w3c.dom.Document;
import java.util.Collections;
@@ -57,7 +60,8 @@ public class ContentClusterUtils {
public static ContentCluster createCluster(String clusterXml, MockRoot root) throws Exception {
Document doc = XML.getDocument(clusterXml);
- Admin admin = new Admin(root, new DefaultMonitoring("vespa", 60), new Metrics(), Collections.emptyMap(), false);
+ Admin admin = new Admin(root, new DefaultMonitoring("vespa", 60), new Metrics(), Collections.emptyMap(), false,
+ new FileDistributionConfigProducer.Builder(FileDistributionOptions.defaultOptions()).build(root, new MockFileRegistry()));
ConfigModelContext context = ConfigModelContext.create(null, root.getDeployState(), null, root, null);
return new ContentCluster.Builder(admin).build(Collections.emptyList(), context, doc.getDocumentElement());
diff --git a/config-model/src/test/java/com/yahoo/vespa/model/content/utils/DocType.java b/config-model/src/test/java/com/yahoo/vespa/model/content/utils/DocType.java
new file mode 100644
index 00000000000..3a5f679509b
--- /dev/null
+++ b/config-model/src/test/java/com/yahoo/vespa/model/content/utils/DocType.java
@@ -0,0 +1,54 @@
+package com.yahoo.vespa.model.content.utils;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * Definition of a document type used for testing.
+ *
+ * @author geirst
+ */
+public class DocType {
+ private final String type;
+ private final String mode;
+ private final boolean global;
+
+ private DocType(String type, String mode, boolean global) {
+ this.type = type;
+ this.mode = mode;
+ this.global = global;
+ }
+
+ public String toXml() {
+ return (global ? "<document mode='" + mode + "' type='" + type + "' global='true'/>" :
+ "<document mode='" + mode + "' type='" + type + "'/>");
+ }
+
+ public static DocType storeOnly(String type) {
+ return new DocType(type, "store-only", false);
+ }
+
+ public static DocType index(String type) {
+ return new DocType(type, "index", false);
+ }
+
+ public static DocType indexGlobal(String type) {
+ return new DocType(type, "index", true);
+ }
+
+ public static DocType streaming(String type) {
+ return new DocType(type, "streaming", false);
+ }
+
+ public static String listToXml(DocType... docTypes) {
+ return listToXml(Arrays.asList(docTypes));
+ }
+
+ public static String listToXml(List<DocType> docTypes) {
+ return "<documents>\n" +
+ docTypes.stream().map(DocType::toXml).collect(Collectors.joining("\n")) + "\n" +
+ "</documents>";
+ }
+
+}