blob: 9bf502b77d23dc6f3150e6b83dbb871b9d434d47 [file] [log] [blame]
/*
* 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']");
}
}