diff options
author | Jon Bratseth <bratseth@yahoo-inc.com> | 2016-06-15 23:09:44 +0200 |
---|---|---|
committer | Jon Bratseth <bratseth@yahoo-inc.com> | 2016-06-15 23:09:44 +0200 |
commit | 72231250ed81e10d66bfe70701e64fa5fe50f712 (patch) | |
tree | 2728bba1131a6f6e5bdf95afec7d7ff9358dac50 /config-application-package/src/test |
Publish
Diffstat (limited to 'config-application-package/src/test')
22 files changed, 1120 insertions, 0 deletions
diff --git a/config-application-package/src/test/java/com/yahoo/config/application/ConfigDefinitionDirTest.java b/config-application-package/src/test/java/com/yahoo/config/application/ConfigDefinitionDirTest.java new file mode 100644 index 00000000000..ada517c9a5c --- /dev/null +++ b/config-application-package/src/test/java/com/yahoo/config/application/ConfigDefinitionDirTest.java @@ -0,0 +1,67 @@ +// Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +package com.yahoo.config.application; + +import com.google.common.io.Files; +import com.yahoo.config.model.application.provider.Bundle; +import com.yahoo.io.IOUtils; +import org.junit.Test; + +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; +import java.util.jar.JarFile; + +import static org.hamcrest.CoreMatchers.is; +import static org.junit.Assert.assertThat; +import static org.junit.Assert.assertTrue; + +/** + * @author lulf + * @since 5.1 + */ +public class ConfigDefinitionDirTest { + private static final String bundleFileName = "com.yahoo.searcher1.jar"; + private static final File bundleFile = new File("src/test/resources/defdircomponent/" + bundleFileName); + + @Test + public void require_that_defs_are_added() throws IOException { + File defDir = Files.createTempDir(); + ConfigDefinitionDir dir = new ConfigDefinitionDir(defDir); + Bundle bundle = new Bundle(new JarFile(bundleFile), bundleFile); + assertThat(defDir.listFiles().length, is(0)); + dir.addConfigDefinitionsFromBundle(bundle, new ArrayList<Bundle>()); + assertThat(defDir.listFiles().length, is(1)); + } + + + @Test + public void require_that_conflicting_defs_are_not_added() throws IOException { + File defDir = Files.createTempDir(); + IOUtils.writeFile(new File(defDir, "foo.def"), "alreadyexists", false); + ConfigDefinitionDir dir = new ConfigDefinitionDir(defDir); + Bundle bundle = new Bundle(new JarFile(bundleFile), bundleFile); + ArrayList<Bundle> bundlesAdded = new ArrayList<>(); + + // Conflict with built-in config definition + try { + dir.addConfigDefinitionsFromBundle(bundle, bundlesAdded); + } catch (IllegalArgumentException e) { + assertTrue(e.getMessage().contains + ("The config definition with name 'bar.foo' contained in the bundle '" + + bundleFileName + + "' conflicts with a built-in config definition")); + } + bundlesAdded.add(bundle); + + // Conflict with another bundle + Bundle bundle2 = new Bundle(new JarFile(bundleFile), bundleFile); + try { + dir.addConfigDefinitionsFromBundle(bundle2, bundlesAdded); + } catch (IllegalArgumentException e) { + assertThat(e.getMessage(), + is("The config definition with name 'bar.foo' contained in the bundle '" + + bundleFileName + + "' conflicts with the same config definition in the bundle 'com.yahoo.searcher1.jar'. Please choose a different name.")); + } + } +} diff --git a/config-application-package/src/test/java/com/yahoo/config/application/IncludeProcessorTest.java b/config-application-package/src/test/java/com/yahoo/config/application/IncludeProcessorTest.java new file mode 100644 index 00000000000..07068e236cd --- /dev/null +++ b/config-application-package/src/test/java/com/yahoo/config/application/IncludeProcessorTest.java @@ -0,0 +1,81 @@ +// Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +package com.yahoo.config.application; + +import org.junit.Test; +import org.w3c.dom.Document; +import org.xml.sax.SAXException; + +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.ParserConfigurationException; +import javax.xml.stream.XMLStreamException; +import javax.xml.transform.*; +import java.io.*; +import java.nio.file.NoSuchFileException; + +/** + * @author lulf + * @since 5.22 + */ +public class IncludeProcessorTest { + @Test + public void testInclude() throws IOException, SAXException, XMLStreamException, ParserConfigurationException, TransformerException { + File app = new File("src/test/resources/multienvapp"); + DocumentBuilder docBuilder = Xml.getPreprocessDocumentBuilder(); + + String expected = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?><services xmlns:deploy=\"vespa\" xmlns:preprocess=\"properties\" version=\"1.0\">\n" + + " <preprocess:properties>\n" + + " <qrs.port>4099</qrs.port>\n" + + " <qrs.port>5000</qrs.port>\n" + + " </preprocess:properties>\n" + + " <preprocess:properties deploy:environment='prod'>\n" + + " <qrs.port deploy:region='us-west'>5001</qrs.port>" + + " <qrs.port deploy:region='us-east'>5002</qrs.port>" + + " </preprocess:properties>\n" + + " <admin version=\"2.0\">\n" + + " <adminserver hostalias=\"node0\"/>\n" + + " </admin>\n" + + " <admin deploy:environment=\"prod\" version=\"2.0\">\n" + + " <adminserver hostalias=\"node1\"/>\n" + + " </admin>\n" + + " <content id=\"foo\" version=\"1.0\">\n" + + " <redundancy>1</redundancy><documents>\n" + + " <document mode=\"index\" type=\"music.sd\"/>\n" + + "</documents><nodes>\n" + + " <node distribution-key=\"0\" hostalias=\"node0\"/>\n" + + "</nodes><nodes deploy:environment=\"prod\">\n" + + " <node distribution-key=\"0\" hostalias=\"node0\"/>\n" + + " <node distribution-key=\"1\" hostalias=\"node1\"/>\n" + + "</nodes><nodes deploy:environment=\"prod\" deploy:region=\"us-west\">\n" + + " <node distribution-key=\"0\" hostalias=\"node0\"/>\n" + + " <node distribution-key=\"1\" hostalias=\"node1\"/>\n" + + " <node distribution-key=\"2\" hostalias=\"node2\"/>\n" + + "</nodes></content>\n" + + "<jdisc id=\"stateless\" version=\"1.0\">\n" + + " <search deploy:environment=\"prod\">\n" + + " <chain id=\"common\">\n" + + " <searcher id=\"MySearcher1\" />\n" + + " <searcher deploy:environment=\"prod\" id=\"MySearcher2\" />\n" + + " </chain>\n" + + " </search>\n" + + " <search/>\n" + + " <component id=\"foo\" class=\"MyFoo\" bundle=\"foobundle\" />\n" + + " <component id=\"bar\" class=\"TestBar\" bundle=\"foobundle\" deploy:environment=\"dev\" />\n" + + " <component id=\"bar\" class=\"ProdBar\" bundle=\"foobundle\" deploy:environment=\"prod\" />\n" + + " <component id=\"baz\" class=\"ProdBaz\" bundle=\"foobundle\" deploy:environment=\"prod\" />\n" + + " <nodes>\n" + + " <node baseport=\"${qrs.port}\" hostalias=\"node0\"/>\n" + + " </nodes>\n" + + "</jdisc></services>"; + + Document doc = (new IncludeProcessor(app)).process(docBuilder.parse(Xml.getServices(app))); + System.out.println(Xml.documentAsString(doc)); + TestBase.assertDocument(expected, doc); + } + + @Test(expected = NoSuchFileException.class) + public void testRequiredIncludeIsDefault() throws ParserConfigurationException, IOException, SAXException, TransformerException { + File app = new File("src/test/resources/multienvapp_failrequired"); + DocumentBuilder docBuilder = Xml.getPreprocessDocumentBuilder(); + (new IncludeProcessor(app)).process(docBuilder.parse(Xml.getServices(app))); + } +} diff --git a/config-application-package/src/test/java/com/yahoo/config/application/OverrideProcessorTest.java b/config-application-package/src/test/java/com/yahoo/config/application/OverrideProcessorTest.java new file mode 100644 index 00000000000..54d0a3cc797 --- /dev/null +++ b/config-application-package/src/test/java/com/yahoo/config/application/OverrideProcessorTest.java @@ -0,0 +1,307 @@ +// Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +package com.yahoo.config.application; + +import com.yahoo.config.provision.Environment; +import com.yahoo.config.provision.RegionName; +import org.custommonkey.xmlunit.XMLUnit; +import org.junit.Test; +import org.w3c.dom.Document; +import org.xml.sax.SAXException; + +import javax.xml.parsers.ParserConfigurationException; +import javax.xml.stream.XMLStreamException; +import javax.xml.transform.TransformerException; +import java.io.IOException; +import java.io.StringReader; + +/** + * @author lulf + * @since 5.22 + */ +public class OverrideProcessorTest { + + static { + XMLUnit.setIgnoreWhitespace(true); + } + + private static final String input = + "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>" + + "<services xmlns:deploy=\"vespa\" xmlns:preprocess=\"?\" version=\"1.0\">" + + " <admin version=\"2.0\">" + + " <adminserver hostalias=\"node0\"/>" + + " </admin>" + + " <admin deploy:environment=\"prod\" version=\"2.0\">" + + " <adminserver hostalias=\"node1\"/>" + + " </admin>" + + " <content id=\"foo\" version=\"1.0\">" + + " <redundancy>1</redundancy>" + + " <documents>" + + " <document mode=\"index\" type=\"music.sd\"/>" + + " </documents>" + + " <nodes>" + + " <node distribution-key=\"0\" hostalias=\"node0\"/>" + + " </nodes>" + + " <nodes deploy:environment=\"prod\">" + + " <node distribution-key=\"0\" hostalias=\"node0\"/>" + + " <node distribution-key=\"1\" hostalias=\"node1\"/>" + + " </nodes>" + + " <nodes deploy:environment=\"staging\">" + + " <node distribution-key=\"0\" hostalias=\"node0\"/>" + + " <node deploy:region=\"us-west\" distribution-key=\"0\" hostalias=\"node1\"/>" + + " </nodes>" + + " <nodes deploy:environment=\"prod\" deploy:region=\"us-west\">" + + " <node distribution-key=\"0\" hostalias=\"node0\"/>" + + " <node distribution-key=\"1\" hostalias=\"node1\"/>" + + " <node distribution-key=\"2\" hostalias=\"node2\"/>" + + " </nodes>" + + " </content>" + + " <jdisc id=\"stateless\" version=\"1.0\">" + + " <search/>" + + " <component id=\"foo\" class=\"MyFoo\" bundle=\"foobundle\" />" + + " <component id=\"bar\" class=\"TestBar\" bundle=\"foobundle\" deploy:environment=\"staging\" />" + + " <component id=\"bar\" class=\"ProdBar\" bundle=\"foobundle\" deploy:environment=\"prod\" />" + + " <component id=\"baz\" class=\"ProdBaz\" bundle=\"foobundle\" deploy:environment=\"prod\" />" + + " <nodes>" + + " <node hostalias=\"node0\"/>" + + " </nodes>" + + " </jdisc>" + + "</services>"; + + + @Test + public void testParsingDefault() throws IOException, SAXException, XMLStreamException, ParserConfigurationException, TransformerException { + String expected = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>" + + "<services xmlns:deploy=\"vespa\" xmlns:preprocess=\"?\" version=\"1.0\">" + + " <admin version=\"2.0\">" + + " <adminserver hostalias=\"node0\"/>" + + " </admin>" + + " <content id=\"foo\" version=\"1.0\">" + + " <redundancy>1</redundancy>" + + " <documents>" + + " <document mode=\"index\" type=\"music.sd\"/>" + + " </documents>" + + " <nodes>" + + " <node distribution-key=\"0\" hostalias=\"node0\"/>" + + " </nodes>" + + " </content>" + + " <jdisc id=\"stateless\" version=\"1.0\">" + + " <search/>" + + " <component id=\"foo\" class=\"MyFoo\" bundle=\"foobundle\" />" + + " <nodes>" + + " <node hostalias=\"node0\"/>" + + " </nodes>" + + " </jdisc>" + + "</services>"; + assertOverride(Environment.test, RegionName.defaultName(), expected); + } + + @Test + public void testParsingEnvironmentAndRegion() throws ParserConfigurationException, IOException, SAXException, TransformerException { + String expected = + "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>" + + "<services xmlns:deploy=\"vespa\" xmlns:preprocess=\"?\" version=\"1.0\">" + + " <admin version=\"2.0\">" + + " <adminserver hostalias=\"node1\"/>" + + " </admin>" + + " <content id=\"foo\" version=\"1.0\">" + + " <redundancy>1</redundancy>" + + " <documents>" + + " <document mode=\"index\" type=\"music.sd\"/>" + + " </documents>" + + " <nodes>" + + " <node distribution-key=\"0\" hostalias=\"node0\"/>" + + " <node distribution-key=\"1\" hostalias=\"node1\"/>" + + " <node distribution-key=\"2\" hostalias=\"node2\"/>" + + " </nodes>" + + " </content>" + + " <jdisc id=\"stateless\" version=\"1.0\">" + + " <search/>" + + " <component id=\"foo\" class=\"MyFoo\" bundle=\"foobundle\" />" + + " <component id=\"bar\" class=\"ProdBar\" bundle=\"foobundle\" />" + + " <component id=\"baz\" class=\"ProdBaz\" bundle=\"foobundle\" />" + + " <nodes>" + + " <node hostalias=\"node0\"/>" + + " </nodes>" + + " </jdisc>" + + "</services>"; + assertOverride(Environment.from("prod"), RegionName.from("us-west"), expected); + } + + @Test + public void testParsingEnvironmentUnknownRegion() throws ParserConfigurationException, IOException, SAXException, TransformerException { + String expected = + "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>" + + "<services xmlns:deploy=\"vespa\" xmlns:preprocess=\"?\" version=\"1.0\">" + + " <admin version=\"2.0\">" + + " <adminserver hostalias=\"node1\"/>" + + " </admin>" + + " <content id=\"foo\" version=\"1.0\">" + + " <redundancy>1</redundancy>" + + " <documents>" + + " <document mode=\"index\" type=\"music.sd\"/>" + + " </documents>" + + " <nodes>" + + " <node distribution-key=\"0\" hostalias=\"node0\"/>" + + " <node distribution-key=\"1\" hostalias=\"node1\"/>" + + " </nodes>" + + " </content>" + + " <jdisc id=\"stateless\" version=\"1.0\">" + + " <search/>" + + " <component id=\"foo\" class=\"MyFoo\" bundle=\"foobundle\" />" + + " <component id=\"bar\" class=\"ProdBar\" bundle=\"foobundle\" />" + + " <component id=\"baz\" class=\"ProdBaz\" bundle=\"foobundle\" />" + + " <nodes>" + + " <node hostalias=\"node0\"/>" + + " </nodes>" + + " </jdisc>" + + "</services>"; + assertOverride(Environment.valueOf("prod"), RegionName.from("us-east"), expected); + } + + @Test + public void testParsingEnvironmentNoRegion() throws ParserConfigurationException, IOException, SAXException, TransformerException { + String expected = + "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>" + + "<services xmlns:deploy=\"vespa\" xmlns:preprocess=\"?\" version=\"1.0\">" + + " <admin version=\"2.0\">" + + " <adminserver hostalias=\"node1\"/>" + + " </admin>" + + " <content id=\"foo\" version=\"1.0\">" + + " <redundancy>1</redundancy>" + + " <documents>" + + " <document mode=\"index\" type=\"music.sd\"/>" + + " </documents>" + + " <nodes>" + + " <node distribution-key=\"0\" hostalias=\"node0\"/>" + + " <node distribution-key=\"1\" hostalias=\"node1\"/>" + + " </nodes>" + + " </content>" + + " <jdisc id=\"stateless\" version=\"1.0\">" + + " <search/>" + + " <component id=\"foo\" class=\"MyFoo\" bundle=\"foobundle\" />" + + " <component id=\"bar\" class=\"ProdBar\" bundle=\"foobundle\" />" + + " <component id=\"baz\" class=\"ProdBaz\" bundle=\"foobundle\" />" + + " <nodes>" + + " <node hostalias=\"node0\"/>" + + " </nodes>" + + " </jdisc>" + + "</services>"; + assertOverride(Environment.from("prod"), RegionName.defaultName(), expected); + } + + @Test + public void testParsingUnknownEnvironment() throws ParserConfigurationException, IOException, SAXException, TransformerException { + String expected = + "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>" + + "<services xmlns:deploy=\"vespa\" xmlns:preprocess=\"?\" version=\"1.0\">" + + " <admin version=\"2.0\">" + + " <adminserver hostalias=\"node0\"/>" + + " </admin>" + + " <content id=\"foo\" version=\"1.0\">" + + " <redundancy>1</redundancy>" + + " <documents>" + + " <document mode=\"index\" type=\"music.sd\"/>" + + " </documents>" + + " <nodes>" + + " <node distribution-key=\"0\" hostalias=\"node0\"/>" + + " </nodes>" + + " </content>" + + " <jdisc id=\"stateless\" version=\"1.0\">" + + " <search/>" + + " <component id=\"foo\" class=\"MyFoo\" bundle=\"foobundle\" />" + + " <nodes>" + + " <node hostalias=\"node0\"/>" + + " </nodes>" + + " </jdisc>" + + "</services>"; + assertOverride(Environment.from("dev"), RegionName.defaultName(), expected); + } + + @Test + public void testParsingUnknownEnvironmentUnknownRegion() throws ParserConfigurationException, IOException, SAXException, TransformerException { + String expected = + "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>" + + "<services xmlns:deploy=\"vespa\" xmlns:preprocess=\"?\" version=\"1.0\">" + + " <admin version=\"2.0\">" + + " <adminserver hostalias=\"node0\"/>" + + " </admin>" + + " <content id=\"foo\" version=\"1.0\">" + + " <redundancy>1</redundancy>" + + " <documents>" + + " <document mode=\"index\" type=\"music.sd\"/>" + + " </documents>" + + " <nodes>" + + " <node distribution-key=\"0\" hostalias=\"node0\"/>" + + " </nodes>" + + " </content>" + + " <jdisc id=\"stateless\" version=\"1.0\">" + + " <search/>" + + " <component id=\"foo\" class=\"MyFoo\" bundle=\"foobundle\" />" + + " <nodes>" + + " <node hostalias=\"node0\"/>" + + " </nodes>" + + " </jdisc>" + + "</services>"; + assertOverride(Environment.from("test"), RegionName.from("us-west"), expected); + } + + @Test + public void testParsingInheritEnvironment() throws ParserConfigurationException, IOException, SAXException, TransformerException { + String expected = + "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>" + + "<services xmlns:deploy=\"vespa\" xmlns:preprocess=\"?\" version=\"1.0\">" + + " <admin version=\"2.0\">" + + " <adminserver hostalias=\"node0\"/>" + + " </admin>" + + " <content id=\"foo\" version=\"1.0\">" + + " <redundancy>1</redundancy>" + + " <documents>" + + " <document mode=\"index\" type=\"music.sd\"/>" + + " </documents>" + + " <nodes>" + + " <node distribution-key=\"0\" hostalias=\"node1\"/>" + + " </nodes>" + + " </content>" + + " <jdisc id=\"stateless\" version=\"1.0\">" + + " <search/>" + + " <component id=\"foo\" class=\"MyFoo\" bundle=\"foobundle\" />" + + " <component id=\"bar\" class=\"TestBar\" bundle=\"foobundle\" />" + + " <nodes>" + + " <node hostalias=\"node0\"/>" + + " </nodes>" + + " </jdisc>" + + "</services>"; + assertOverride(Environment.from("staging"), RegionName.from("us-west"), expected); + } + + @Test(expected = IllegalArgumentException.class) + public void testParsingDifferentEnvInParentAndChild() throws ParserConfigurationException, IOException, SAXException, TransformerException { + String in = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>" + + "<services xmlns:deploy=\"vespa\" xmlns:preprocess=\"?\" version=\"1.0\">" + + " <admin deploy:environment=\"prod\" version=\"2.0\">" + + " <adminserver deploy:environment=\"test\" hostalias=\"node1\"/>" + + " </admin>" + + "</services>"; + Document inputDoc = Xml.getDocument(new StringReader(in)); + new OverrideProcessor(Environment.from("prod"), RegionName.from("us-west")).process(inputDoc); + } + + @Test(expected = IllegalArgumentException.class) + public void testParsingDifferentRegionInParentAndChild() throws ParserConfigurationException, IOException, SAXException, TransformerException { + String in = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>" + + "<services xmlns:deploy=\"vespa\" xmlns:preprocess=\"?\" version=\"1.0\">" + + " <admin deploy:region=\"us-west\" version=\"2.0\">" + + " <adminserver deploy:region=\"us-east\" hostalias=\"node1\"/>" + + " </admin>" + + "</services>"; + Document inputDoc = Xml.getDocument(new StringReader(in)); + new OverrideProcessor(Environment.defaultEnvironment(), RegionName.from("us-west")).process(inputDoc); + } + + private void assertOverride(Environment environment, RegionName region, String expected) throws TransformerException { + Document inputDoc = Xml.getDocument(new StringReader(input)); + Document newDoc = new OverrideProcessor(environment, region).process(inputDoc); + TestBase.assertDocument(expected, newDoc); + } + +} diff --git a/config-application-package/src/test/java/com/yahoo/config/application/PropertiesProcessorTest.java b/config-application-package/src/test/java/com/yahoo/config/application/PropertiesProcessorTest.java new file mode 100644 index 00000000000..c281bb28f17 --- /dev/null +++ b/config-application-package/src/test/java/com/yahoo/config/application/PropertiesProcessorTest.java @@ -0,0 +1,139 @@ +// Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +package com.yahoo.config.application; + +import org.custommonkey.xmlunit.XMLUnit; +import org.junit.Test; +import org.w3c.dom.Document; +import org.xml.sax.SAXException; + +import javax.xml.parsers.ParserConfigurationException; +import javax.xml.stream.XMLStreamException; +import javax.xml.transform.TransformerException; +import java.io.IOException; +import java.io.StringReader; +import java.util.Map; + +import static org.hamcrest.CoreMatchers.is; +import static org.junit.Assert.assertThat; + +/** + * @author musum + */ +public class PropertiesProcessorTest { + + static { + XMLUnit.setIgnoreWhitespace(true); + } + + @Test + public void testPropertyValues() throws ParserConfigurationException, TransformerException, SAXException, IOException { + String input = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>" + + "<services xmlns:deploy=\"vespa\" xmlns:preprocess=\"properties\" version=\"1.0\">" + + " <preprocess:properties>" + + " <slobrok.port>4099</slobrok.port>" + + " <redundancy>2</redundancy>" + + " </preprocess:properties>" + + " <admin version=\"2.0\">" + + " <adminserver hostalias=\"node0\"/>" + + " <slobroks>" + + " <slobrok hostalias=\"node1\" baseport=\"${slobrok.port}\"/>" + + " </slobroks>" + + " </admin>" + + "</services>"; + + PropertiesProcessor p = new PropertiesProcessor(); + p.process(Xml.getDocument(new StringReader(input))); + Map<String, String> properties = p.getProperties(); + assertThat(properties.size(), is(2)); + assertThat(properties.get("slobrok.port"), is("4099")); + assertThat(properties.get("redundancy"), is("2")); + } + + @Test + public void testPropertyApplying() throws IOException, SAXException, XMLStreamException, ParserConfigurationException, TransformerException { + String input = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>" + + "<services xmlns:deploy=\"vespa\" xmlns:preprocess=\"properties\" version=\"1.0\">" + + " <preprocess:properties>" + + " <slobrok.port>4099</slobrok.port>" + + " <redundancy>2</redundancy>" + + " <doctype>music</doctype>" + + " <zero>0</zero>" + + " </preprocess:properties>" + + " <admin version=\"2.0\">" + + " <adminserver hostalias=\"node0\"/>" + + " <slobroks>" + + " <slobrok hostalias=\"node1\" baseport=\"${slobrok.port}\"/>" + + " </slobroks>" + + " </admin>" + + " <content id=\"foo\" version=\"1.0\">" + + " <redundancy>${redundancy}</redundancy>" + + " <documents>" + + " <document mode=\"index\" type=\"${doctype}.sd\"/>" + + " </documents>" + + " <nodes>" + + " <node distribution-key=\"${zero}\" hostalias=\"node${zero}\"/>" + + " </nodes>" + + " </content>" + + "</services>"; + + String expected = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>" + + "<services xmlns:deploy=\"vespa\" xmlns:preprocess=\"properties\" version=\"1.0\">" + + " <admin version=\"2.0\">" + + " <adminserver hostalias=\"node0\"/>" + + " <slobroks>" + + " <slobrok hostalias=\"node1\" baseport=\"4099\"/>" + + " </slobroks>" + + " </admin>" + + " <content id=\"foo\" version=\"1.0\">" + + " <redundancy>2</redundancy>" + + " <documents>" + + " <document mode=\"index\" type=\"music.sd\"/>" + + " </documents>" + + " <nodes>" + + " <node distribution-key=\"0\" hostalias=\"node0\"/>" + + " </nodes>" + + " </content>" + + "</services>"; + + + Document inputDoc = Xml.getDocument(new StringReader(input)); + Document newDoc = new PropertiesProcessor().process(inputDoc); + TestBase.assertDocument(expected, newDoc); + } + + + // TODO: Check that warning is actually logged + @Test + public void testWarnIfDuplicatePropertyForSameEnvironment() throws IOException, SAXException, XMLStreamException, ParserConfigurationException, TransformerException { + String input = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>" + + "<services xmlns:deploy=\"vespa\" xmlns:preprocess=\"properties\" version=\"1.0\">" + + " <preprocess:properties>" + + " <slobrok.port>4099</slobrok.port>" + + " <slobrok.port>5000</slobrok.port>" + + " <redundancy>2</redundancy>" + + " </preprocess:properties>" + + " <admin version=\"2.0\">" + + " <adminserver hostalias=\"node0\"/>" + + " <slobroks>" + + " <slobrok hostalias=\"node1\" baseport=\"${slobrok.port}\"/>" + + " </slobroks>" + + " </admin>" + + "</services>"; + + + String expected = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>" + + "<services xmlns:deploy=\"vespa\" xmlns:preprocess=\"properties\" version=\"1.0\">" + + " <admin version=\"2.0\">" + + " <adminserver hostalias=\"node0\"/>" + + " <slobroks>" + + " <slobrok hostalias=\"node1\" baseport=\"5000\"/>" + // Should get the last defined value + " </slobroks>" + + " </admin>" + + "</services>"; + + Document inputDoc = Xml.getDocument(new StringReader(input)); + Document newDoc = new PropertiesProcessor().process(inputDoc); + TestBase.assertDocument(expected, newDoc); + } +} + diff --git a/config-application-package/src/test/java/com/yahoo/config/application/TestBase.java b/config-application-package/src/test/java/com/yahoo/config/application/TestBase.java new file mode 100644 index 00000000000..8967fe9afdf --- /dev/null +++ b/config-application-package/src/test/java/com/yahoo/config/application/TestBase.java @@ -0,0 +1,33 @@ +// Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +package com.yahoo.config.application; + +import org.custommonkey.xmlunit.Diff; +import org.custommonkey.xmlunit.XMLUnit; +import org.w3c.dom.Document; + +import java.io.Reader; +import java.io.StringReader; + +import static org.junit.Assert.assertTrue; + +/** + * Utilities for tests + * + * @author musum + */ +public class TestBase { + static { + XMLUnit.setIgnoreWhitespace(true); + } + + static void assertDocument(String expected, Document output) { + Document expectedDoc = Xml.getDocument(new StringReader(expected)); + Diff diff = new Diff(expectedDoc, output); + assertTrue(diff.toString(), diff.identical()); + } + + public static void assertDocument(String expectedDocument, Reader document) { + Document output = Xml.getDocument(document); + assertDocument(expectedDocument, output); + } +} diff --git a/config-application-package/src/test/java/com/yahoo/config/application/XmlPreprocessorTest.java b/config-application-package/src/test/java/com/yahoo/config/application/XmlPreprocessorTest.java new file mode 100644 index 00000000000..93d218cd2c4 --- /dev/null +++ b/config-application-package/src/test/java/com/yahoo/config/application/XmlPreprocessorTest.java @@ -0,0 +1,165 @@ +// Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +package com.yahoo.config.application; + +import com.yahoo.config.provision.Environment; +import com.yahoo.config.provision.RegionName; +import org.junit.Test; +import org.w3c.dom.Document; +import org.xml.sax.SAXException; + +import javax.xml.parsers.ParserConfigurationException; +import javax.xml.stream.XMLStreamException; +import javax.xml.transform.TransformerException; +import java.io.File; +import java.io.IOException; +import java.io.StringReader; + +/** + * @author musum + */ +public class XmlPreprocessorTest { + + private static final File appDir = new File("src/test/resources/multienvapp"); + private static final File services = new File(appDir, "services.xml"); + + @Test + public void testPreProcessing() throws IOException, SAXException, XMLStreamException, ParserConfigurationException, TransformerException { + String expectedDev = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?><services xmlns:deploy=\"vespa\" xmlns:preprocess=\"properties\" version=\"1.0\">\n" + + " <admin version=\"2.0\">\n" + + " <adminserver hostalias=\"node0\"/>\n" + + " </admin>\n" + + " <content id=\"foo\" version=\"1.0\">\n" + + " <redundancy>1</redundancy>\n" + + " <documents>\n" + + " <document mode=\"index\" type=\"music.sd\"/>\n" + + " </documents>\n" + + " <nodes>\n" + + " <node distribution-key=\"0\" hostalias=\"node0\"/>\n" + + " </nodes>\n" + + " </content>\n" + + " <jdisc id=\"stateless\" version=\"1.0\">\n" + + " <search/>\n" + + " <component bundle=\"foobundle\" class=\"MyFoo\" id=\"foo\"/>\n" + + " <component bundle=\"foobundle\" class=\"TestBar\" id=\"bar\"/>\n" + + " <nodes>\n" + + " <node hostalias=\"node0\" baseport=\"5000\"/>\n" + + " </nodes>\n" + + " </jdisc>\n" + + "</services>"; + + Document docDev = (new XmlPreProcessor(appDir, services, Environment.dev, RegionName.from("default")).run()); + TestBase.assertDocument(expectedDev, docDev); + + + String expectedUsWest = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?><services xmlns:deploy=\"vespa\" xmlns:preprocess=\"properties\" version=\"1.0\">\n" + + " <admin version=\"2.0\">\n" + + " <adminserver hostalias=\"node1\"/>\n" + + " </admin>\n" + + " <content id=\"foo\" version=\"1.0\">\n" + + " <redundancy>1</redundancy>\n" + + " <documents>\n" + + " <document mode=\"index\" type=\"music.sd\"/>\n" + + " </documents>\n" + + " <nodes>\n" + + " <node distribution-key=\"0\" hostalias=\"node0\"/>\n" + + " <node distribution-key=\"1\" hostalias=\"node1\"/>\n" + + " <node distribution-key=\"2\" hostalias=\"node2\"/>\n" + + " </nodes>\n" + + " </content>\n" + + " <jdisc id=\"stateless\" version=\"1.0\">\n" + + " <search>\n" + + " <chain id=\"common\">\n" + + " <searcher id=\"MySearcher1\"/>\n" + + " <searcher id=\"MySearcher2\"/>\n" + + " </chain>\n" + + " </search>\n" + + " <component bundle=\"foobundle\" class=\"MyFoo\" id=\"foo\"/>\n" + + " <component bundle=\"foobundle\" class=\"ProdBar\" id=\"bar\"/>\n" + + " <component bundle=\"foobundle\" class=\"ProdBaz\" id=\"baz\"/>\n" + + " <nodes>\n" + + " <node hostalias=\"node0\" baseport=\"5001\"/>\n" + + " </nodes>\n" + + " </jdisc>\n" + + "</services>"; + + Document docUsWest = (new XmlPreProcessor(appDir, services, Environment.prod, RegionName.from("us-west"))).run(); + System.out.println(Xml.documentAsString(docUsWest)); + TestBase.assertDocument(expectedUsWest, docUsWest); + + String expectedUsEast = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?><services xmlns:deploy=\"vespa\" xmlns:preprocess=\"properties\" version=\"1.0\">\n" + + " <admin version=\"2.0\">\n" + + " <adminserver hostalias=\"node1\"/>\n" + + " </admin>\n" + + " <content id=\"foo\" version=\"1.0\">\n" + + " <redundancy>1</redundancy>\n" + + " <documents>\n" + + " <document mode=\"index\" type=\"music.sd\"/>\n" + + " </documents>\n" + + " <nodes>\n" + + " <node distribution-key=\"0\" hostalias=\"node0\"/>\n" + + " <node distribution-key=\"1\" hostalias=\"node1\"/>\n" + + " </nodes>\n" + + " </content>\n" + + " <jdisc id=\"stateless\" version=\"1.0\">\n" + + " <search>\n" + + " <chain id=\"common\">\n" + + " <searcher id=\"MySearcher1\"/>\n" + + " <searcher id=\"MySearcher2\"/>\n" + + " </chain>\n" + + " </search>\n" + + " <component bundle=\"foobundle\" class=\"MyFoo\" id=\"foo\"/>\n" + + " <component bundle=\"foobundle\" class=\"ProdBar\" id=\"bar\"/>\n" + + " <component bundle=\"foobundle\" class=\"ProdBaz\" id=\"baz\"/>\n" + + " <nodes>\n" + + " <node hostalias=\"node0\" baseport=\"5002\"/>\n" + + " </nodes>\n" + + " </jdisc>\n" + + "</services>"; + + Document docUsEast = (new XmlPreProcessor(appDir, services, Environment.prod, RegionName.from("us-east"))).run(); + TestBase.assertDocument(expectedUsEast, docUsEast); + } + + @Test + public void testPropertiesWithOverlappingNames() throws IOException, SAXException, XMLStreamException, ParserConfigurationException, TransformerException { + String input = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>" + + "<services xmlns:deploy=\"vespa\" xmlns:preprocess=\"properties\" version=\"1.0\">" + + " <preprocess:properties>" + + " <sherpa.host>gamma-usnc1.dht.yahoo.com</sherpa.host>" + + " <sherpa.port>4080</sherpa.port>" + + " <lidspacecompaction_interval>3600</lidspacecompaction_interval>" + + " <lidspacecompaction_interval deploy:environment='prod'>36000</lidspacecompaction_interval>" + + " <lidspacecompaction_allowedlidbloat>50000</lidspacecompaction_allowedlidbloat>" + + " <lidspacecompaction_allowedlidbloat deploy:environment='prod'>50000000</lidspacecompaction_allowedlidbloat>" + + " <lidspacecompaction_allowedlidbloatfactor>0.01</lidspacecompaction_allowedlidbloatfactor>" + + " <lidspacecompaction_allowedlidbloatfactor deploy:environment='prod'>0.91</lidspacecompaction_allowedlidbloatfactor>" + + " </preprocess:properties>" + + " <config name='a'>" + + " <a>${lidspacecompaction_interval}</a>" + + " <b>${lidspacecompaction_allowedlidbloat}</b>" + + " <c>${lidspacecompaction_allowedlidbloatfactor}</c>" + + " <host>${sherpa.host}</host>" + + " <port>${sherpa.port}</port>" + + " </config>" + + " <admin version=\"2.0\">" + + " <adminserver hostalias=\"node0\"/>" + + " </admin>" + + "</services>"; + + String expectedProd = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>" + + "<services xmlns:deploy=\"vespa\" xmlns:preprocess=\"properties\" version=\"1.0\">" + + " <config name='a'>" + + " <a>36000</a>" + + " <b>50000000</b>" + + " <c>0.91</c>" + + " <host>gamma-usnc1.dht.yahoo.com</host>" + + " <port>4080</port>" + + " </config>" + + " <admin version=\"2.0\">" + + " <adminserver hostalias=\"node0\"/>" + + " </admin>" + + "</services>"; + Document docDev = (new XmlPreProcessor(appDir, new StringReader(input), Environment.prod, RegionName.from("default")).run()); + TestBase.assertDocument(expectedProd, docDev); + } +} diff --git a/config-application-package/src/test/java/com/yahoo/config/model/application/provider/FilesApplicationFileTest.java b/config-application-package/src/test/java/com/yahoo/config/model/application/provider/FilesApplicationFileTest.java new file mode 100644 index 00000000000..ac207de7231 --- /dev/null +++ b/config-application-package/src/test/java/com/yahoo/config/model/application/provider/FilesApplicationFileTest.java @@ -0,0 +1,23 @@ +// Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +package com.yahoo.config.model.application.provider; + +import com.google.common.io.Files; +import com.yahoo.config.application.api.ApplicationFile; +import com.yahoo.config.application.api.ApplicationFileTest; +import com.yahoo.path.Path; + +import java.io.File; + +/** + * @author lulf + * @since 5.1 + */ +public class FilesApplicationFileTest extends ApplicationFileTest { + + @Override + public ApplicationFile getApplicationFile(Path path) throws Exception { + File tmp = Files.createTempDir(); + writeAppTo(tmp); + return new FilesApplicationFile(path, new File(tmp, path.getRelative())); + } +} diff --git a/config-application-package/src/test/java/com/yahoo/config/model/application/provider/FilesApplicationPackageTest.java b/config-application-package/src/test/java/com/yahoo/config/model/application/provider/FilesApplicationPackageTest.java new file mode 100644 index 00000000000..77842a693b7 --- /dev/null +++ b/config-application-package/src/test/java/com/yahoo/config/model/application/provider/FilesApplicationPackageTest.java @@ -0,0 +1,100 @@ +// Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +package com.yahoo.config.model.application.provider; + +import com.yahoo.config.application.TestBase; +import com.yahoo.config.application.api.RuleConfigDeriver; +import com.yahoo.config.application.api.ApplicationPackage; +import com.yahoo.config.provision.Environment; +import com.yahoo.config.provision.RegionName; +import com.yahoo.config.provision.Zone; +import com.yahoo.io.IOUtils; +import org.junit.Rule; +import org.junit.Test; +import org.junit.rules.TemporaryFolder; +import org.xml.sax.SAXException; + +import javax.xml.parsers.ParserConfigurationException; +import javax.xml.transform.TransformerException; +import java.io.File; +import java.io.FileReader; +import java.io.IOException; + +import static org.hamcrest.CoreMatchers.is; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertThat; +import static org.junit.Assert.assertTrue; + +/** + * @author lulf + * @since 5.25 + */ +public class FilesApplicationPackageTest { + + @Rule + public TemporaryFolder temporaryFolder = new TemporaryFolder(); + + @Test + public void testPreprocessing() throws IOException, TransformerException, ParserConfigurationException, SAXException { + File appDir = temporaryFolder.newFolder(); + IOUtils.copyDirectory(new File("src/test/resources/multienvapp"), appDir); + assertTrue(new File(appDir, "services.xml").exists()); + assertTrue(new File(appDir, "hosts.xml").exists()); + FilesApplicationPackage app = FilesApplicationPackage.fromFile(appDir); + + ApplicationPackage processed = app.preprocess(new Zone(Environment.dev, RegionName.defaultName()), + new RuleConfigDeriver() { + @Override + public void derive(String ruleBaseDir, String outputDir) throws Exception { + } + }, + new BaseDeployLogger()); + assertTrue(new File(appDir, ".preprocessed").exists()); + String expectedServices = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?><services xmlns:deploy=\"vespa\" xmlns:preprocess=\"properties\" version=\"1.0\">\n" + + " <admin version=\"2.0\">\n" + + " <adminserver hostalias=\"node0\"/>\n" + + " </admin>\n" + + " <content id=\"foo\" version=\"1.0\">\n" + + " <redundancy>1</redundancy>\n" + + " <documents>\n" + + " <document mode=\"index\" type=\"music.sd\"/>\n" + + " </documents>\n" + + " <nodes>\n" + + " <node distribution-key=\"0\" hostalias=\"node0\"/>\n" + + " </nodes>\n" + + " </content>\n" + + " <jdisc id=\"stateless\" version=\"1.0\">\n" + + " <search/>\n" + + " <component bundle=\"foobundle\" class=\"MyFoo\" id=\"foo\"/>\n" + + " <component bundle=\"foobundle\" class=\"TestBar\" id=\"bar\"/>\n" + + " <nodes>\n" + + " <node hostalias=\"node0\" baseport=\"5000\"/>\n" + + " </nodes>\n" + + " </jdisc>\n" + + "</services>"; + TestBase.assertDocument(expectedServices, processed.getServices()); + String expectedHosts = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?><hosts xmlns:deploy=\"vespa\" xmlns:preprocess=\"properties\">\n" + + " <host name=\"bar.yahoo.com\">\n" + + " <alias>node1</alias>\n" + + " </host>\n" + + "</hosts>"; + TestBase.assertDocument(expectedHosts, processed.getHosts()); + } + + @Test + public void testDeploymentXmlNotAvailable() throws IOException, TransformerException, ParserConfigurationException, SAXException { + File appDir = new File("src/test/resources/multienvapp"); + assertFalse(new File(appDir, "deployment.xml").exists()); + FilesApplicationPackage app = FilesApplicationPackage.fromFile(appDir); + assertFalse(app.getDeployment().isPresent()); + } + + @Test + public void testDeploymentXml() throws IOException, TransformerException, ParserConfigurationException, SAXException { + File appDir = new File("src/test/resources/app-with-deployment"); + final File deployment = new File(appDir, "deployment.xml"); + assertTrue(deployment.exists()); + FilesApplicationPackage app = FilesApplicationPackage.fromFile(appDir); + assertTrue(app.getDeployment().isPresent()); + assertThat(IOUtils.readAll(new FileReader(deployment)), is(IOUtils.readAll(app.getDeployment().get()))); + } +}
\ No newline at end of file diff --git a/config-application-package/src/test/java/com/yahoo/config/model/application/provider/PreGeneratedFileRegistryTestCase.java b/config-application-package/src/test/java/com/yahoo/config/model/application/provider/PreGeneratedFileRegistryTestCase.java new file mode 100644 index 00000000000..15b7b32f26e --- /dev/null +++ b/config-application-package/src/test/java/com/yahoo/config/model/application/provider/PreGeneratedFileRegistryTestCase.java @@ -0,0 +1,43 @@ +// Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +package com.yahoo.config.model.application.provider; + +import com.yahoo.config.application.api.FileRegistry; +import org.junit.Test; + +import java.io.StringReader; +import java.util.Arrays; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; + +/** + * @author tonytv + */ +public class PreGeneratedFileRegistryTestCase { + @Test + public void importAndExport() { + FileRegistry fileRegistry = new MockFileRegistry(); + String serializedRegistry = PreGeneratedFileRegistry.exportRegistry(fileRegistry); + + PreGeneratedFileRegistry importedRegistry = + PreGeneratedFileRegistry.importRegistry( + new StringReader(serializedRegistry)); + + assertTrue(importedRegistry.getPaths().containsAll( + Arrays.asList( + MockFileRegistry.entry1.relativePath, + MockFileRegistry.entry2.relativePath))); + + assertEquals(2, importedRegistry.getPaths().size()); + + checkConsistentEntry(MockFileRegistry.entry1, importedRegistry); + checkConsistentEntry(MockFileRegistry.entry2, importedRegistry); + + assertEquals(fileRegistry.fileSourceHost(), + importedRegistry.fileSourceHost()); + } + + void checkConsistentEntry(FileRegistry.Entry entry, FileRegistry registry) { + assertEquals(entry.reference, registry.addFile(entry.relativePath)); + } +} diff --git a/config-application-package/src/test/java/com/yahoo/config/model/application/provider/StaticConfigDefinitionRepoTest.java b/config-application-package/src/test/java/com/yahoo/config/model/application/provider/StaticConfigDefinitionRepoTest.java new file mode 100644 index 00000000000..3cc51718b41 --- /dev/null +++ b/config-application-package/src/test/java/com/yahoo/config/model/application/provider/StaticConfigDefinitionRepoTest.java @@ -0,0 +1,42 @@ +// Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +package com.yahoo.config.model.application.provider; + +import com.yahoo.config.model.application.provider.StaticConfigDefinitionRepo; +import com.yahoo.config.model.api.ConfigDefinitionRepo; +import com.yahoo.io.IOUtils; +import com.yahoo.vespa.config.ConfigDefinitionKey; +import org.junit.Rule; +import org.junit.Test; +import org.junit.rules.TemporaryFolder; + +import java.io.File; +import java.io.IOException; + +import static org.hamcrest.core.Is.is; +import static org.junit.Assert.assertThat; + +/** + * @author lulf + * @since 5.10 + */ +public class StaticConfigDefinitionRepoTest { + @Rule + public TemporaryFolder folder = new TemporaryFolder(); + + @Test + public void testThatRepoIsCorrectlyInitialized() throws IOException { + File topDir = folder.newFolder(); + File defDir = new File(topDir, "classes"); + defDir.mkdir(); + addFile(defDir, new ConfigDefinitionKey("foo", "foons"), "namespace=foons\nval int\n"); + addFile(defDir, new ConfigDefinitionKey("bar", "barns"), "namespace=barns\nval string\n"); + ConfigDefinitionRepo repo = new StaticConfigDefinitionRepo(defDir); + assertThat(repo.getConfigDefinitions().size(), is(2)); + } + + private void addFile(File defDir, ConfigDefinitionKey key, String content) throws IOException { + String fileName = key.getNamespace() + "." + key.getName() + ".def"; + File def = new File(defDir, fileName); + IOUtils.writeFile(def, content, false); + } +} diff --git a/config-application-package/src/test/resources/app-with-deployment/deployment.xml b/config-application-package/src/test/resources/app-with-deployment/deployment.xml new file mode 100644 index 00000000000..053e7a485c3 --- /dev/null +++ b/config-application-package/src/test/resources/app-with-deployment/deployment.xml @@ -0,0 +1,9 @@ +<!-- Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. --> +<deployment version='1.0'> + <test /> + <staging /> + <prod> + <region active="true">us-east</region> + <region active="false">us-west-1</region> + </prod> +</deployment> diff --git a/config-application-package/src/test/resources/app-with-deployment/hosts.xml b/config-application-package/src/test/resources/app-with-deployment/hosts.xml new file mode 100644 index 00000000000..a9116028e2b --- /dev/null +++ b/config-application-package/src/test/resources/app-with-deployment/hosts.xml @@ -0,0 +1,10 @@ +<!-- Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. --> +<hosts xmlns:deploy="vespa" xmlns:preprocess="properties"> + <preprocess:properties> + <node1.hostname>foo.yahoo.com</node1.hostname> + <node1.hostname deploy:environment="dev">bar.yahoo.com</node1.hostname> + </preprocess:properties> + <host name="${node1.hostname}"> + <alias>node1</alias> + </host> +</hosts> diff --git a/config-application-package/src/test/resources/app-with-deployment/searchdefinitions/music.sd b/config-application-package/src/test/resources/app-with-deployment/searchdefinitions/music.sd new file mode 100644 index 00000000000..2d7217a0542 --- /dev/null +++ b/config-application-package/src/test/resources/app-with-deployment/searchdefinitions/music.sd @@ -0,0 +1,8 @@ +# Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +search music { + document music { + field f type string { + indexing: index | summary + } + } +} diff --git a/config-application-package/src/test/resources/app-with-deployment/services.xml b/config-application-package/src/test/resources/app-with-deployment/services.xml new file mode 100644 index 00000000000..52f247d29f0 --- /dev/null +++ b/config-application-package/src/test/resources/app-with-deployment/services.xml @@ -0,0 +1,12 @@ +<!-- Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. --> +<services version='1.0'> + <admin version='2.0'> + <adminserver hostalias='node0'/> + </admin> + <content version='1.0' id='foo'> + <redundancy>1</redundancy> + <documents> + <document type="music.sd" mode="index" /> + </documents> + </content> +</services> diff --git a/config-application-package/src/test/resources/defdircomponent/com.yahoo.searcher1.jar b/config-application-package/src/test/resources/defdircomponent/com.yahoo.searcher1.jar Binary files differnew file mode 100644 index 00000000000..437246152db --- /dev/null +++ b/config-application-package/src/test/resources/defdircomponent/com.yahoo.searcher1.jar diff --git a/config-application-package/src/test/resources/multienvapp/content/content_foo.xml b/config-application-package/src/test/resources/multienvapp/content/content_foo.xml new file mode 100644 index 00000000000..e7221a0eeff --- /dev/null +++ b/config-application-package/src/test/resources/multienvapp/content/content_foo.xml @@ -0,0 +1,6 @@ +<!-- Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. --> +<redundancy>1</redundancy> +<documents> + <document type="music.sd" mode="index" /> +</documents> +<preprocess:include file="content_nodes.xml" /> diff --git a/config-application-package/src/test/resources/multienvapp/content/content_nodes.xml b/config-application-package/src/test/resources/multienvapp/content/content_nodes.xml new file mode 100644 index 00000000000..883c2354ea5 --- /dev/null +++ b/config-application-package/src/test/resources/multienvapp/content/content_nodes.xml @@ -0,0 +1,13 @@ +<!-- Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. --> +<nodes> + <node hostalias="node0" distribution-key="0" /> +</nodes> +<nodes deploy:environment="prod"> + <node hostalias="node0" distribution-key="0" /> + <node hostalias="node1" distribution-key="1" /> +</nodes> +<nodes deploy:environment="prod" deploy:region="us-west"> + <node hostalias="node0" distribution-key="0" /> + <node hostalias="node1" distribution-key="1" /> + <node hostalias="node2" distribution-key="2" /> +</nodes> diff --git a/config-application-package/src/test/resources/multienvapp/hosts.xml b/config-application-package/src/test/resources/multienvapp/hosts.xml new file mode 100644 index 00000000000..a9116028e2b --- /dev/null +++ b/config-application-package/src/test/resources/multienvapp/hosts.xml @@ -0,0 +1,10 @@ +<!-- Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. --> +<hosts xmlns:deploy="vespa" xmlns:preprocess="properties"> + <preprocess:properties> + <node1.hostname>foo.yahoo.com</node1.hostname> + <node1.hostname deploy:environment="dev">bar.yahoo.com</node1.hostname> + </preprocess:properties> + <host name="${node1.hostname}"> + <alias>node1</alias> + </host> +</hosts> diff --git a/config-application-package/src/test/resources/multienvapp/jdisc.xml b/config-application-package/src/test/resources/multienvapp/jdisc.xml new file mode 100644 index 00000000000..7b2486966f7 --- /dev/null +++ b/config-application-package/src/test/resources/multienvapp/jdisc.xml @@ -0,0 +1,17 @@ +<!-- Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. --> +<jdisc id='stateless' version='1.0'> + <search deploy:environment="prod"> + <chain id="common"> + <searcher id="MySearcher1" /> + <searcher deploy:environment="prod" id="MySearcher2" /> + </chain> + </search> + <search /> + <component id="foo" class="MyFoo" bundle="foobundle" /> + <component id="bar" class="TestBar" bundle="foobundle" deploy:environment="dev" /> + <component id="bar" class="ProdBar" bundle="foobundle" deploy:environment="prod" /> + <component id="baz" class="ProdBaz" bundle="foobundle" deploy:environment="prod" /> + <nodes> + <node hostalias='node0' baseport="${qrs.port}"/> + </nodes> +</jdisc> diff --git a/config-application-package/src/test/resources/multienvapp/searchdefinitions/music.sd b/config-application-package/src/test/resources/multienvapp/searchdefinitions/music.sd new file mode 100644 index 00000000000..2d7217a0542 --- /dev/null +++ b/config-application-package/src/test/resources/multienvapp/searchdefinitions/music.sd @@ -0,0 +1,8 @@ +# Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +search music { + document music { + field f type string { + indexing: index | summary + } + } +} diff --git a/config-application-package/src/test/resources/multienvapp/services.xml b/config-application-package/src/test/resources/multienvapp/services.xml new file mode 100644 index 00000000000..c06e37feabf --- /dev/null +++ b/config-application-package/src/test/resources/multienvapp/services.xml @@ -0,0 +1,23 @@ +<!-- Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. --> +<services version='1.0' xmlns:deploy="vespa" xmlns:preprocess="properties"> + <preprocess:properties> + <qrs.port>4099</qrs.port> + <qrs.port>5000</qrs.port> + </preprocess:properties> + + <preprocess:properties deploy:environment='prod'> + <qrs.port deploy:region='us-west'>5001</qrs.port> + <qrs.port deploy:region='us-east'>5002</qrs.port> + </preprocess:properties> + <admin version='2.0'> + <adminserver hostalias='node0'/> + </admin> + <admin version='2.0' deploy:environment='prod'> + <adminserver hostalias='node1'/> + </admin> + <preprocess:include file='jdisc.xml'/> + <content version='1.0' id='foo'> + <preprocess:include file='content/content_foo.xml'/> + </content> + <preprocess:include file='doesnotexist.xml' required='false' /> +</services> diff --git a/config-application-package/src/test/resources/multienvapp_failrequired/services.xml b/config-application-package/src/test/resources/multienvapp_failrequired/services.xml new file mode 100644 index 00000000000..3063fd7eb09 --- /dev/null +++ b/config-application-package/src/test/resources/multienvapp_failrequired/services.xml @@ -0,0 +1,4 @@ +<!-- Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. --> +<services version='1.0' xmlns:deploy="vespa" xmlns:preprocess="properties"> + <preprocess:include file='doesnotexist.xml' /> +</services> |