org.apache.solr.update.processor.AddSchemaFieldsUpdateProcessorFactoryTest.java Source code

Java tutorial

Introduction

Here is the source code for org.apache.solr.update.processor.AddSchemaFieldsUpdateProcessorFactoryTest.java

Source

/*
 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
 * The ASF licenses this file to You under the Apache License, Version 2.0
 * (the "License"); you may not use this file except in compliance with
 * the License.  You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package org.apache.solr.update.processor;

import java.io.File;
import java.util.Date;

import org.apache.commons.io.FileUtils;
import org.apache.solr.common.SolrInputDocument;
import org.apache.solr.schema.IndexSchema;
import org.joda.time.DateTime;
import org.joda.time.format.DateTimeFormat;
import org.joda.time.format.DateTimeFormatter;
import org.joda.time.format.ISODateTimeFormat;
import org.junit.After;
import org.junit.Before;

/**
 * Tests for the field mutating update processors
 * that parse Dates, Longs, Doubles, and Booleans.
 */
public class AddSchemaFieldsUpdateProcessorFactoryTest extends UpdateProcessorTestBase {
    private static final String SOLRCONFIG_XML = "solrconfig-add-schema-fields-update-processor-chains.xml";
    private static final String SCHEMA_XML = "schema-add-schema-fields-update-processor.xml";

    private static File tmpSolrHome;
    private static File tmpConfDir;

    private static final String collection = "collection1";
    private static final String confDir = collection + "/conf";

    @Before
    private void initManagedSchemaCore() throws Exception {
        tmpSolrHome = createTempDir().toFile();
        tmpConfDir = new File(tmpSolrHome, confDir);
        File testHomeConfDir = new File(TEST_HOME(), confDir);
        FileUtils.copyFileToDirectory(new File(testHomeConfDir, SOLRCONFIG_XML), tmpConfDir);
        FileUtils.copyFileToDirectory(new File(testHomeConfDir, SCHEMA_XML), tmpConfDir);

        // initCore will trigger an upgrade to managed schema, since the solrconfig*.xml has
        // <schemaFactory class="ManagedIndexSchemaFactory" ... />
        initCore(SOLRCONFIG_XML, SCHEMA_XML, tmpSolrHome.getPath());
    }

    public void testSingleField() throws Exception {
        IndexSchema schema = h.getCore().getLatestSchema();
        final String fieldName = "newfield1";
        assertNull(schema.getFieldOrNull(fieldName));
        String dateString = "2010-11-12T13:14:15.168Z";
        DateTimeFormatter dateTimeFormatter = ISODateTimeFormat.dateTime();
        Date date = dateTimeFormatter.parseDateTime(dateString).toDate();
        SolrInputDocument d = processAdd("add-fields-no-run-processor", doc(f("id", "1"), f(fieldName, date)));
        assertNotNull(d);
        schema = h.getCore().getLatestSchema();
        assertNotNull(schema.getFieldOrNull(fieldName));
        assertEquals("tdate", schema.getFieldType(fieldName).getTypeName());
    }

    public void testSingleFieldRoundTrip() throws Exception {
        IndexSchema schema = h.getCore().getLatestSchema();
        final String fieldName = "newfield2";
        assertNull(schema.getFieldOrNull(fieldName));
        Float floatValue = -13258.992f;
        SolrInputDocument d = processAdd("add-fields", doc(f("id", "2"), f(fieldName, floatValue)));
        assertNotNull(d);
        schema = h.getCore().getLatestSchema();
        assertNotNull(schema.getFieldOrNull(fieldName));
        assertEquals("tfloat", schema.getFieldType(fieldName).getTypeName());
        assertU(commit());
        assertQ(req("id:2"), "//arr[@name='" + fieldName + "']/float[.='" + floatValue.toString() + "']");
    }

    public void testSingleFieldMixedFieldTypesRoundTrip() throws Exception {
        IndexSchema schema = h.getCore().getLatestSchema();
        final String fieldName = "newfield3";
        assertNull(schema.getFieldOrNull(fieldName));
        Float fieldValue1 = -13258.0f;
        Double fieldValue2 = 8.4828800808E10;
        SolrInputDocument d = processAdd("add-fields", doc(f("id", "3"), f(fieldName, fieldValue1, fieldValue2)));
        assertNotNull(d);
        schema = h.getCore().getLatestSchema();
        assertNotNull(schema.getFieldOrNull(fieldName));
        assertEquals("tdouble", schema.getFieldType(fieldName).getTypeName());
        assertU(commit());
        assertQ(req("id:3"), "//arr[@name='" + fieldName + "']/double[.='" + fieldValue1.toString() + "']",
                "//arr[@name='" + fieldName + "']/double[.='" + fieldValue2.toString() + "']");
    }

    public void testSingleFieldDefaultFieldTypeRoundTrip() throws Exception {
        IndexSchema schema = h.getCore().getLatestSchema();
        final String fieldName = "newfield4";
        assertNull(schema.getFieldOrNull(fieldName));
        Float fieldValue1 = -13258.0f;
        Double fieldValue2 = 8.4828800808E10;
        String fieldValue3 = "blah blah";
        SolrInputDocument d = processAdd("add-fields",
                doc(f("id", "4"), f(fieldName, fieldValue1, fieldValue2, fieldValue3)));
        assertNotNull(d);
        schema = h.getCore().getLatestSchema();
        assertNotNull(schema.getFieldOrNull(fieldName));
        assertEquals("text", schema.getFieldType(fieldName).getTypeName());
        assertU(commit());
        assertQ(req("id:4"), "//arr[@name='" + fieldName + "']/str[.='" + fieldValue1.toString() + "']",
                "//arr[@name='" + fieldName + "']/str[.='" + fieldValue2.toString() + "']",
                "//arr[@name='" + fieldName + "']/str[.='" + fieldValue3.toString() + "']");
    }

    public void testMultipleFieldsRoundTrip() throws Exception {
        IndexSchema schema = h.getCore().getLatestSchema();
        final String fieldName1 = "newfield5";
        final String fieldName2 = "newfield6";
        assertNull(schema.getFieldOrNull(fieldName1));
        assertNull(schema.getFieldOrNull(fieldName2));
        Float field1Value1 = -13258.0f;
        Double field1Value2 = 8.4828800808E10;
        Long field1Value3 = 999L;
        Integer field2Value1 = 55123;
        Long field2Value2 = 1234567890123456789L;
        SolrInputDocument d = processAdd("add-fields",
                doc(f("id", "5"), f(fieldName1, field1Value1, field1Value2, field1Value3),
                        f(fieldName2, field2Value1, field2Value2)));
        assertNotNull(d);
        schema = h.getCore().getLatestSchema();
        assertNotNull(schema.getFieldOrNull(fieldName1));
        assertNotNull(schema.getFieldOrNull(fieldName2));
        assertEquals("tdouble", schema.getFieldType(fieldName1).getTypeName());
        assertEquals("tlong", schema.getFieldType(fieldName2).getTypeName());
        assertU(commit());
        assertQ(req("id:5"), "//arr[@name='" + fieldName1 + "']/double[.='" + field1Value1.toString() + "']",
                "//arr[@name='" + fieldName1 + "']/double[.='" + field1Value2.toString() + "']",
                "//arr[@name='" + fieldName1 + "']/double[.='" + field1Value3.doubleValue() + "']",
                "//arr[@name='" + fieldName2 + "']/long[.='" + field2Value1.toString() + "']",
                "//arr[@name='" + fieldName2 + "']/long[.='" + field2Value2.toString() + "']");
    }

    public void testParseAndAddMultipleFieldsRoundTrip() throws Exception {
        IndexSchema schema = h.getCore().getLatestSchema();
        final String fieldName1 = "newfield7";
        final String fieldName2 = "newfield8";
        final String fieldName3 = "newfield9";
        final String fieldName4 = "newfield10";
        assertNull(schema.getFieldOrNull(fieldName1));
        assertNull(schema.getFieldOrNull(fieldName2));
        assertNull(schema.getFieldOrNull(fieldName3));
        assertNull(schema.getFieldOrNull(fieldName4));
        String field1String1 = "-13,258.0";
        Float field1Value1 = -13258.0f;
        String field1String2 = "84,828,800,808.0";
        Double field1Value2 = 8.4828800808E10;
        String field1String3 = "999";
        Long field1Value3 = 999L;
        String field2String1 = "55,123";
        Integer field2Value1 = 55123;
        String field2String2 = "1,234,567,890,123,456,789";
        Long field2Value2 = 1234567890123456789L;
        String field3String1 = "blah-blah";
        String field3Value1 = field3String1;
        String field3String2 = "-5.28E-3";
        Double field3Value2 = -5.28E-3;
        String field4String1 = "1999-04-17 17:42";
        DateTimeFormatter dateTimeFormatter = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm").withZoneUTC();
        DateTime dateTime = dateTimeFormatter.parseDateTime(field4String1);
        Date field4Value1 = dateTime.toDate();
        DateTimeFormatter dateTimeFormatter2 = DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ss").withZoneUTC();
        String field4Value1String = dateTimeFormatter2.print(dateTime) + "Z";

        SolrInputDocument d = processAdd("parse-and-add-fields",
                doc(f("id", "6"), f(fieldName1, field1String1, field1String2, field1String3),
                        f(fieldName2, field2String1, field2String2), f(fieldName3, field3String1, field3String2),
                        f(fieldName4, field4String1)));
        assertNotNull(d);
        schema = h.getCore().getLatestSchema();
        assertNotNull(schema.getFieldOrNull(fieldName1));
        assertNotNull(schema.getFieldOrNull(fieldName2));
        assertNotNull(schema.getFieldOrNull(fieldName3));
        assertNotNull(schema.getFieldOrNull(fieldName4));
        assertEquals("tdouble", schema.getFieldType(fieldName1).getTypeName());
        assertEquals("tlong", schema.getFieldType(fieldName2).getTypeName());
        assertEquals("text", schema.getFieldType(fieldName3).getTypeName());
        assertEquals("tdate", schema.getFieldType(fieldName4).getTypeName());
        assertU(commit());
        assertQ(req("id:6"), "//arr[@name='" + fieldName1 + "']/double[.='" + field1Value1.toString() + "']",
                "//arr[@name='" + fieldName1 + "']/double[.='" + field1Value2.toString() + "']",
                "//arr[@name='" + fieldName1 + "']/double[.='" + field1Value3.doubleValue() + "']",
                "//arr[@name='" + fieldName2 + "']/long[.='" + field2Value1.toString() + "']",
                "//arr[@name='" + fieldName2 + "']/long[.='" + field2Value2.toString() + "']",
                "//arr[@name='" + fieldName3 + "']/str[.='" + field3String1 + "']",
                "//arr[@name='" + fieldName3 + "']/str[.='" + field3String2 + "']",
                "//arr[@name='" + fieldName4 + "']/date[.='" + field4Value1String + "']");
    }

    @After
    private void deleteCoreAndTempSolrHomeDirectory() throws Exception {
        deleteCore();
    }
}