| /* |
| * 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; |
| |
| import org.apache.lucene.index.IndexWriter; |
| import org.apache.lucene.util.TestUtil; |
| import org.apache.solr.SolrTestCaseJ4; |
| |
| import java.util.Locale; |
| |
| import org.junit.After; |
| import org.junit.BeforeClass; |
| import org.junit.Test; |
| |
| public class TestExceedMaxTermLength extends SolrTestCaseJ4 { |
| |
| public final static String TEST_SOLRCONFIG_NAME = "solrconfig.xml"; |
| public final static String TEST_SCHEMAXML_NAME = "schema11.xml"; |
| |
| private final static int minTestTermLength = IndexWriter.MAX_TERM_LENGTH + 1; |
| private final static int maxTestTermLength = IndexWriter.MAX_TERM_LENGTH * 2; |
| |
| @BeforeClass |
| public static void beforeTests() throws Exception { |
| initCore(TEST_SOLRCONFIG_NAME, TEST_SCHEMAXML_NAME); |
| } |
| |
| @After |
| public void cleanup() throws Exception { |
| assertU(delQ("*:*")); |
| assertU(commit()); |
| } |
| |
| @Test |
| public void testExceededMaxTermLength(){ |
| |
| // problematic field |
| final String longFieldName = "cat"; |
| final String longFieldValue = TestUtil.randomSimpleString(random(), |
| minTestTermLength, |
| maxTestTermLength); |
| |
| final String okayFieldName = TestUtil.randomSimpleString(random(), 1, 50) + "_sS" ; //Dynamic field |
| final String okayFieldValue = TestUtil.randomSimpleString(random(), |
| minTestTermLength, |
| maxTestTermLength); |
| |
| boolean includeOkayFields = random().nextBoolean(); |
| |
| if(random().nextBoolean()) { |
| //Use XML |
| String doc; |
| if(includeOkayFields) { |
| doc = adoc("id", "1", longFieldName, longFieldValue, okayFieldName, okayFieldValue); |
| } else { |
| doc = adoc("id", "1", longFieldName, longFieldValue); |
| } |
| assertFailedU(doc); |
| } else { |
| //Use JSON |
| try { |
| if(includeOkayFields) { |
| String jsonStr = "[{'id':'1','%s':'%s', '%s': '%s'}]"; |
| jsonStr = String.format(Locale.ROOT, jsonStr, longFieldName, longFieldValue, |
| okayFieldName, okayFieldValue); |
| updateJ(json(jsonStr), null); |
| } else { |
| String jsonStr = "[{'id':'1','%s':'%s'}]"; |
| jsonStr = String.format(Locale.ROOT, jsonStr, longFieldName, longFieldValue); |
| updateJ(json(jsonStr), null); |
| } |
| } catch (Exception e) { |
| //expected |
| String msg= e.getCause().getMessage(); |
| assertTrue(msg.contains("one immense term in field=\"cat\"")); |
| } |
| |
| } |
| |
| assertU(commit()); |
| |
| assertQ(req("q", "*:*"), "//*[@numFound='0']"); |
| } |
| |
| @Test |
| public void testExceededMaxTermLengthWithLimitingFilter(){ |
| |
| // problematic field |
| final String longFieldName = "cat_length"; |
| final String longFieldValue = TestUtil.randomSimpleString(random(), |
| minTestTermLength, |
| maxTestTermLength); |
| |
| final String okayFieldName = TestUtil.randomSimpleString(random(), 1, 50) + "_sS" ; //Dynamic field |
| final String okayFieldValue = TestUtil.randomSimpleString(random(), |
| minTestTermLength, |
| maxTestTermLength); |
| |
| boolean includeOkayFields = random().nextBoolean(); |
| |
| if(random().nextBoolean()) { |
| //Use XML |
| String doc; |
| if(includeOkayFields) { |
| doc = adoc("id", "1", longFieldName, longFieldValue, okayFieldName, okayFieldValue); |
| } else { |
| doc = adoc("id", "1", longFieldName, longFieldValue); |
| } |
| assertU(doc); |
| } else { |
| //Use JSON |
| String jsonStr = null; |
| try { |
| if(includeOkayFields) { |
| jsonStr = "[{'id':'1','%s':'%s', '%s': '%s'}]"; |
| jsonStr = String.format(Locale.ROOT, jsonStr, longFieldName, longFieldValue, |
| okayFieldName, okayFieldValue); |
| updateJ(json(jsonStr), null); |
| } else { |
| jsonStr = "[{'id':'1','%s':'%s'}]"; |
| jsonStr = String.format(Locale.ROOT, jsonStr, longFieldName, longFieldValue); |
| updateJ(json(jsonStr), null); |
| } |
| } catch (Exception e) { |
| fail("Should not have failed adding doc " + jsonStr); |
| String msg= e.getCause().getMessage(); |
| assertTrue(msg.contains("one immense term in field=\"cat\"")); |
| } |
| |
| } |
| |
| assertU(commit()); |
| |
| assertQ(req("q", "*:*"), "//*[@numFound='1']"); |
| } |
| } |