summaryrefslogtreecommitdiffstats
path: root/config-model/src/test/java/com/yahoo/schema/SchemaImporterTestCase.java
diff options
context:
space:
mode:
Diffstat (limited to 'config-model/src/test/java/com/yahoo/schema/SchemaImporterTestCase.java')
-rw-r--r--config-model/src/test/java/com/yahoo/schema/SchemaImporterTestCase.java189
1 files changed, 189 insertions, 0 deletions
diff --git a/config-model/src/test/java/com/yahoo/schema/SchemaImporterTestCase.java b/config-model/src/test/java/com/yahoo/schema/SchemaImporterTestCase.java
new file mode 100644
index 00000000000..e93dd0e0a8f
--- /dev/null
+++ b/config-model/src/test/java/com/yahoo/schema/SchemaImporterTestCase.java
@@ -0,0 +1,189 @@
+// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+package com.yahoo.schema;
+
+import com.yahoo.config.model.application.provider.BaseDeployLogger;
+import com.yahoo.document.DataType;
+import com.yahoo.search.query.profile.QueryProfileRegistry;
+import com.yahoo.schema.document.Attribute;
+import com.yahoo.schema.document.RankType;
+import com.yahoo.schema.document.SDDocumentType;
+import com.yahoo.schema.document.SDField;
+import com.yahoo.schema.document.Stemming;
+import com.yahoo.schema.parser.ParseException;
+import com.yahoo.schema.processing.MakeAliases;
+import com.yahoo.vespa.documentmodel.SummaryTransform;
+import com.yahoo.vespa.model.container.search.QueryProfiles;
+import org.junit.Test;
+
+import java.io.IOException;
+import java.util.Iterator;
+
+import static com.google.common.collect.testing.Helpers.assertEmpty;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
+/**
+ * Tests importing of search definitions
+ *
+ * @author bratseth
+ */
+public class SchemaImporterTestCase extends AbstractSchemaTestCase {
+
+ @Test
+ @SuppressWarnings("deprecation")
+ public void testSimpleImporting() throws IOException, ParseException {
+ RankProfileRegistry rankProfileRegistry = new RankProfileRegistry();
+ ApplicationBuilder sb = new ApplicationBuilder(rankProfileRegistry, new QueryProfileRegistry());
+ sb.addSchemaFile("src/test/examples/simple.sd");
+ sb.build(true);
+ Schema schema = sb.getSchema();
+ assertEquals("simple", schema.getName());
+ assertTrue(schema.hasDocument());
+
+ SDDocumentType document = schema.getDocument();
+ assertEquals("simple", document.getName());
+ assertEquals(23, document.getFieldCount());
+
+ SDField field;
+ Attribute attribute;
+
+ new MakeAliases(schema, new BaseDeployLogger(), rankProfileRegistry, new QueryProfiles()).process(true, false);
+
+ // First field
+ field = (SDField) document.getField("title");
+ assertEquals(DataType.STRING, field.getDataType());
+ assertEquals("{ input title | tokenize normalize stem:\"BEST\" | summary title | index title; }", field.getIndexingScript().toString());
+ assertFalse(schema.getIndex("default").isPrefix());
+ assertTrue(schema.getIndex("title").isPrefix());
+ Iterator<String> titleAliases = schema.getIndex("title").aliasIterator();
+ assertEquals("aliaz", titleAliases.next());
+ assertEquals("analias.totitle", titleAliases.next());
+ assertEquals("analias.todefault",
+ schema.getIndex("default").aliasIterator().next());
+ assertEquals(RankType.IDENTITY, field.getRankType());
+ assertEquals(0, field.getAttributes().size());
+ assertNull(field.getStemming());
+ assertTrue(field.getNormalizing().doRemoveAccents());
+ assertTrue(field.isHeader());
+
+ // Second field
+ field = (SDField) document.getField("description");
+ assertEquals(RankType.ABOUT, field.getRankType());
+ assertEquals(SummaryTransform.NONE,
+ field.getSummaryField("description").getTransform());
+ assertEquals(SummaryTransform.DYNAMICTEASER,
+ field.getSummaryField("dyndesc").getTransform());
+ assertNull(field.getStemming());
+ assertTrue(field.getNormalizing().doRemoveAccents());
+ assertEquals("hallo", schema.getIndex("description").aliasIterator().next());
+
+ // Third field
+ field = (SDField) document.getField("chatter");
+ assertEquals(RankType.ABOUT, field.getRankType());
+ assertNull(field.getStemming());
+ assertTrue(field.getNormalizing().doRemoveAccents());
+
+ // Fourth field
+ field = (SDField) document.getField("category");
+ assertEquals(0, field.getAttributes().size());
+ assertEquals(Stemming.NONE, field.getStemming());
+ assertFalse(field.getNormalizing().doRemoveAccents());
+
+ // Fifth field
+ field = (SDField) document.getField("popularity");
+ assertEquals("{ input popularity | attribute popularity; }",
+ field.getIndexingScript().toString());
+
+ // Sixth field
+ field = (SDField) document.getField("measurement");
+ assertEquals(DataType.INT, field.getDataType());
+ assertEquals(RankType.EMPTY, field.getRankType());
+ assertEquals(1, field.getAttributes().size());
+
+ // Seventh field
+ field = schema.getConcreteField("categories");
+ assertEquals("{ input categories_src | lowercase | normalize | tokenize normalize stem:\"BEST\" | index categories; }",
+ field.getIndexingScript().toString());
+ assertTrue(field.isHeader());
+
+ // Eight field
+ field= schema.getConcreteField("categoriesagain");
+ assertEquals("{ input categoriesagain_src | lowercase | normalize | tokenize normalize stem:\"BEST\" | index categoriesagain; }",
+ field.getIndexingScript().toString());
+ assertTrue(field.isHeader());
+
+ // Ninth field
+ field= schema.getConcreteField("exactemento");
+ assertEquals("{ input exactemento_src | lowercase | tokenize normalize stem:\"BEST\" | index exactemento | summary exactemento; }",
+ field.getIndexingScript().toString());
+
+ // Tenth field
+ field = schema.getConcreteField("category_arr");
+ assertEquals(1, field.getAttributes().size());
+ attribute = field.getAttributes().get("category_arr");
+ assertNotNull(attribute);
+ assertEquals("category_arr", attribute.getName());
+ assertEquals(Attribute.Type.STRING, attribute.getType());
+ assertEquals(Attribute.CollectionType.ARRAY, attribute.getCollectionType());
+ assertTrue(field.isHeader());
+
+ // Eleventh field
+ field = schema.getConcreteField("measurement_arr");
+ assertEquals(1, field.getAttributes().size());
+ attribute = field.getAttributes().get("measurement_arr");
+ assertEquals("measurement_arr", attribute.getName());
+ assertEquals(Attribute.Type.INTEGER, attribute.getType());
+ assertEquals(Attribute.CollectionType.ARRAY, attribute.getCollectionType());
+
+ // Rank Profiles
+ RankProfile profile = rankProfileRegistry.get(schema, "default");
+ assertNotNull(profile);
+ assertEmpty(profile.inheritedNames());
+ assertNull(profile.getDeclaredRankSetting("measurement", RankProfile.RankSetting.Type.RANKTYPE));
+ assertEquals(RankType.EMPTY,
+ profile.getRankSetting("measurement", RankProfile.RankSetting.Type.RANKTYPE).getValue());
+ profile = rankProfileRegistry.get(schema, "experimental");
+ assertNotNull(profile);
+ assertEquals("default", profile.inheritedNames().get(0));
+ assertEquals(RankType.IDENTITY,
+ profile.getDeclaredRankSetting("measurement", RankProfile.RankSetting.Type.RANKTYPE).getValue());
+
+ profile = rankProfileRegistry.get(schema, "other");
+ assertNotNull(profile);
+ assertEquals("experimental", profile.inheritedNames().get(0));
+
+ // The extra-document field
+ SDField exact = schema.getConcreteField("exact");
+ assertNotNull("Extra field was parsed", exact);
+ assertEquals("exact", exact.getName());
+ assertEquals(Stemming.NONE, exact.getStemming());
+ assertFalse(exact.getNormalizing().doRemoveAccents());
+ assertEquals("{ input title . \" \" . input category | tokenize | summary exact | index exact; }",
+ exact.getIndexingScript().toString());
+ assertEquals(RankType.IDENTITY, exact.getRankType());
+ }
+
+ @Test
+ public void testDocumentImporting() throws IOException, ParseException {
+ try {
+ // Having two documents in one sd-file is illegal.
+ ApplicationBuilder.buildFromFile("src/test/examples/documents.sd");
+ fail();
+ } catch (IllegalArgumentException e) {
+ }
+ }
+
+ @Test
+ public void testIdImporting() throws IOException, ParseException {
+ Schema schema = ApplicationBuilder.buildFromFile("src/test/examples/strange.sd");
+ SDField idecidemyide = (SDField)schema.getDocument().getField("idecidemyide");
+ assertEquals(5, idecidemyide.getId());
+ SDField sodoi = (SDField) schema.getDocument().getField("sodoi");
+ assertEquals(7, sodoi.getId());
+ }
+
+}