Merge pull request from s1monw/fix_query_base_test

Cleanup QueryTest framework and be more strict
This commit is contained in:
Simon Willnauer 2015-09-10 13:12:26 +02:00
commit feb5bdb23e
51 changed files with 198 additions and 118 deletions
core/src
main/java/org/elasticsearch/index/query
test/java/org/elasticsearch/index/query

@ -99,6 +99,13 @@ public class HasParentQueryBuilder extends AbstractQueryBuilder<HasParentQueryBu
return score; return score;
} }
/**
* Returns the parents type name
*/
public String type() {
return type;
}
/** /**
* Returns inner hit definition in the scope of this query and reusing the defined type and query. * Returns inner hit definition in the scope of this query and reusing the defined type and query.
*/ */

@ -30,7 +30,7 @@ import java.io.IOException;
*/ */
public class NotQueryParser extends BaseQueryParser<NotQueryBuilder> { public class NotQueryParser extends BaseQueryParser<NotQueryBuilder> {
private static final ParseField QUERY_FIELD = new ParseField("filter", "query"); private static final ParseField QUERY_FIELD = new ParseField("query", "filter");
@Inject @Inject
public NotQueryParser() { public NotQueryParser() {
@ -78,7 +78,7 @@ public class NotQueryParser extends BaseQueryParser<NotQueryBuilder> {
} }
if (!queryFound) { if (!queryFound) {
throw new QueryParsingException(parseContext, "filter is required when using `not` query"); throw new QueryParsingException(parseContext, "query is required when using `not` query");
} }
NotQueryBuilder notQueryBuilder = new NotQueryBuilder(query); NotQueryBuilder notQueryBuilder = new NotQueryBuilder(query);

@ -39,10 +39,7 @@ import org.elasticsearch.index.mapper.MappedFieldType;
import org.elasticsearch.indices.cache.query.terms.TermsLookup; import org.elasticsearch.indices.cache.query.terms.TermsLookup;
import java.io.IOException; import java.io.IOException;
import java.util.ArrayList; import java.util.*;
import java.util.Arrays;
import java.util.List;
import java.util.Objects;
/** /**
* A filter for a field based on several terms matching on any of them. * A filter for a field based on several terms matching on any of them.
@ -51,16 +48,29 @@ public class TermsQueryBuilder extends AbstractQueryBuilder<TermsQueryBuilder> {
public static final String NAME = "terms"; public static final String NAME = "terms";
static final TermsQueryBuilder PROTOTYPE = new TermsQueryBuilder(null); static final TermsQueryBuilder PROTOTYPE = new TermsQueryBuilder("");
public static final boolean DEFAULT_DISABLE_COORD = false; public static final boolean DEFAULT_DISABLE_COORD = false;
private final String fieldName; private final String fieldName;
private List<Object> values; private final List<Object> values;
@Deprecated
private String minimumShouldMatch; private String minimumShouldMatch;
@Deprecated
private boolean disableCoord = DEFAULT_DISABLE_COORD; private boolean disableCoord = DEFAULT_DISABLE_COORD;
private TermsLookup termsLookup; private TermsLookup termsLookup;
TermsQueryBuilder(String fieldName, List<Object> values, String minimumShouldMatch, boolean disableCoord, TermsLookup termsLookup) {
this.fieldName = fieldName;
if (values == null && termsLookup == null) {
throw new IllegalArgumentException("No value specified for terms query");
}
this.values = values;
this.disableCoord = disableCoord;
this.minimumShouldMatch = minimumShouldMatch;
this.termsLookup = termsLookup;
}
/** /**
* A filter for a field based on several terms matching on any of them. * A filter for a field based on several terms matching on any of them.
* *
@ -128,6 +138,7 @@ public class TermsQueryBuilder extends AbstractQueryBuilder<TermsQueryBuilder> {
*/ */
public TermsQueryBuilder(String fieldName) { public TermsQueryBuilder(String fieldName) {
this.fieldName = fieldName; this.fieldName = fieldName;
this.values = null;
} }
/** /**
@ -176,7 +187,7 @@ public class TermsQueryBuilder extends AbstractQueryBuilder<TermsQueryBuilder> {
return this; return this;
} }
public boolean disableCoord() { boolean disableCoord() {
return this.disableCoord; return this.disableCoord;
} }
@ -308,7 +319,9 @@ public class TermsQueryBuilder extends AbstractQueryBuilder<TermsQueryBuilder> {
if (minimumShouldMatch != null) { if (minimumShouldMatch != null) {
builder.field("minimum_should_match", minimumShouldMatch); builder.field("minimum_should_match", minimumShouldMatch);
} }
builder.field("disable_coord", disableCoord); if (disableCoord != DEFAULT_DISABLE_COORD) {
builder.field("disable_coord", disableCoord);
}
printBoostAndQueryName(builder); printBoostAndQueryName(builder);
builder.endObject(); builder.endObject();
} }
@ -391,14 +404,15 @@ public class TermsQueryBuilder extends AbstractQueryBuilder<TermsQueryBuilder> {
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
@Override @Override
protected TermsQueryBuilder doReadFrom(StreamInput in) throws IOException { protected TermsQueryBuilder doReadFrom(StreamInput in) throws IOException {
TermsQueryBuilder termsQueryBuilder = new TermsQueryBuilder(in.readString()); String field = in.readString();
TermsLookup lookup = null;
if (in.readBoolean()) { if (in.readBoolean()) {
termsQueryBuilder.termsLookup = TermsLookup.readTermsLookupFrom(in); lookup = TermsLookup.readTermsLookupFrom(in);
} }
termsQueryBuilder.values = ((List<Object>) in.readGenericValue()); List<Object> values = (List<Object>) in.readGenericValue();
termsQueryBuilder.minimumShouldMatch = in.readOptionalString(); String minimumShouldMatch = in.readOptionalString();
termsQueryBuilder.disableCoord = in.readBoolean(); boolean disableCoord = in.readBoolean();
return termsQueryBuilder; return new TermsQueryBuilder(field, values, minimumShouldMatch, disableCoord, lookup);
} }
@Override @Override

@ -104,16 +104,7 @@ public class TermsQueryParser extends BaseQueryParser {
if (fieldName == null) { if (fieldName == null) {
throw new QueryParsingException(parseContext, "terms query requires a field name, followed by array of terms or a document lookup specification"); throw new QueryParsingException(parseContext, "terms query requires a field name, followed by array of terms or a document lookup specification");
} }
TermsQueryBuilder termsQueryBuilder; return new TermsQueryBuilder(fieldName, values, minShouldMatch, disableCoord, termsLookup)
if (values == null) {
termsQueryBuilder = new TermsQueryBuilder(fieldName);
} else {
termsQueryBuilder = new TermsQueryBuilder(fieldName, values);
}
return termsQueryBuilder
.disableCoord(disableCoord)
.minimumShouldMatch(minShouldMatch)
.termsLookup(termsLookup)
.boost(boost) .boost(boost)
.queryName(queryName); .queryName(queryName);
} }

@ -89,7 +89,7 @@ import static org.hamcrest.Matchers.not;
import static org.hamcrest.Matchers.notNullValue; import static org.hamcrest.Matchers.notNullValue;
import static org.hamcrest.Matchers.nullValue; import static org.hamcrest.Matchers.nullValue;
public abstract class BaseQueryTestCase<QB extends AbstractQueryBuilder<QB>> extends ESTestCase { // TODO rename this AbstractQueryTestCase public abstract class AbstractQueryTestCase<QB extends AbstractQueryBuilder<QB>> extends ESTestCase {
private static final GeohashGenerator geohashGenerator = new GeohashGenerator(); private static final GeohashGenerator geohashGenerator = new GeohashGenerator();
protected static final String STRING_FIELD_NAME = "mapped_string"; protected static final String STRING_FIELD_NAME = "mapped_string";
@ -126,6 +126,8 @@ public abstract class BaseQueryTestCase<QB extends AbstractQueryBuilder<QB>> ext
private static NamedWriteableRegistry namedWriteableRegistry; private static NamedWriteableRegistry namedWriteableRegistry;
private static String[] randomTypes;
/** /**
* Setup for the whole base test class. * Setup for the whole base test class.
* @throws IOException * @throws IOException
@ -135,7 +137,7 @@ public abstract class BaseQueryTestCase<QB extends AbstractQueryBuilder<QB>> ext
// we have to prefer CURRENT since with the range of versions we support it's rather unlikely to get the current actually. // we have to prefer CURRENT since with the range of versions we support it's rather unlikely to get the current actually.
Version version = randomBoolean() ? Version.CURRENT : VersionUtils.randomVersionBetween(random(), Version.V_2_0_0_beta1, Version.CURRENT); Version version = randomBoolean() ? Version.CURRENT : VersionUtils.randomVersionBetween(random(), Version.V_2_0_0_beta1, Version.CURRENT);
Settings settings = Settings.settingsBuilder() Settings settings = Settings.settingsBuilder()
.put("name", BaseQueryTestCase.class.toString()) .put("name", AbstractQueryTestCase.class.toString())
.put("path.home", createTempDir()) .put("path.home", createTempDir())
.build(); .build();
Settings indexSettings = Settings.settingsBuilder() Settings indexSettings = Settings.settingsBuilder()
@ -203,19 +205,13 @@ public abstract class BaseQueryTestCase<QB extends AbstractQueryBuilder<QB>> ext
queryParserService = null; queryParserService = null;
currentTypes = null; currentTypes = null;
namedWriteableRegistry = null; namedWriteableRegistry = null;
randomTypes = null;
} }
@Before @Before
public void beforeTest() { public void beforeTest() {
//set some random types to be queried as part the search request, before each test //set some random types to be queried as part the search request, before each test
String[] types = getRandomTypes(); randomTypes = getRandomTypes();
//some query (e.g. range query) have a different behaviour depending on whether the current search context is set or not
//which is why we randomly set the search context, which will internally also do QueryParseContext.setTypes(types)
if (randomBoolean()) {
QueryShardContext.setTypes(types);
} else {
setSearchContext(types); // TODO should this be set after we parsed and before we build the query? it makes more sense?
}
} }
protected void setSearchContext(String[] types) { protected void setSearchContext(String[] types) {
@ -274,18 +270,25 @@ public abstract class BaseQueryTestCase<QB extends AbstractQueryBuilder<QB>> ext
* Parses the query provided as string argument and compares it with the expected result provided as argument as a {@link QueryBuilder} * Parses the query provided as string argument and compares it with the expected result provided as argument as a {@link QueryBuilder}
*/ */
protected void assertParsedQuery(String queryAsString, QueryBuilder<?> expectedQuery) throws IOException { protected void assertParsedQuery(String queryAsString, QueryBuilder<?> expectedQuery) throws IOException {
QueryBuilder<?> newQuery = parseQuery(queryAsString); assertParsedQuery(queryAsString, expectedQuery, ParseFieldMatcher.STRICT);
}
protected void assertParsedQuery(String queryAsString, QueryBuilder<?> expectedQuery, ParseFieldMatcher matcher) throws IOException {
QueryBuilder<?> newQuery = parseQuery(queryAsString, matcher);
assertNotSame(newQuery, expectedQuery); assertNotSame(newQuery, expectedQuery);
assertEquals(expectedQuery, newQuery); assertEquals(expectedQuery, newQuery);
assertEquals(expectedQuery.hashCode(), newQuery.hashCode()); assertEquals(expectedQuery.hashCode(), newQuery.hashCode());
} }
protected QueryBuilder<?> parseQuery(String queryAsString) throws IOException { protected QueryBuilder<?> parseQuery(String queryAsString) throws IOException {
return parseQuery(queryAsString, ParseFieldMatcher.STRICT);
}
protected QueryBuilder<?> parseQuery(String queryAsString, ParseFieldMatcher matcher) throws IOException {
XContentParser parser = XContentFactory.xContent(queryAsString).createParser(queryAsString); XContentParser parser = XContentFactory.xContent(queryAsString).createParser(queryAsString);
QueryParseContext context = createParseContext(); QueryParseContext context = createParseContext();
context.reset(parser); context.reset(parser);
// TODO this should set context.parseFieldMatcher(ParseFieldMatcher.STRICT); context.parseFieldMatcher(matcher);
// all our builders should only create non-deprecated XContent.
return context.parseInnerQueryBuilder(); return context.parseInnerQueryBuilder();
} }
@ -299,22 +302,30 @@ public abstract class BaseQueryTestCase<QB extends AbstractQueryBuilder<QB>> ext
context.setAllowUnmappedFields(true); context.setAllowUnmappedFields(true);
QB firstQuery = createTestQueryBuilder(); QB firstQuery = createTestQueryBuilder();
setSearchContext(randomTypes); // only set search context for toQuery to be more realistic
Query firstLuceneQuery = firstQuery.toQuery(context); Query firstLuceneQuery = firstQuery.toQuery(context);
assertLuceneQuery(firstQuery, firstLuceneQuery, context); assertLuceneQuery(firstQuery, firstLuceneQuery, context);
SearchContext.removeCurrent(); // remove after assertLuceneQuery since the assertLuceneQuery impl might access the context as well
QB secondQuery = copyQuery(firstQuery); QB secondQuery = copyQuery(firstQuery);
//query _name never should affect the result of toQuery, we randomly set it to make sure //query _name never should affect the result of toQuery, we randomly set it to make sure
if (randomBoolean()) { if (randomBoolean()) {
secondQuery.queryName(secondQuery.queryName() == null ? randomAsciiOfLengthBetween(1, 30) : secondQuery.queryName() + randomAsciiOfLengthBetween(1, 10)); secondQuery.queryName(secondQuery.queryName() == null ? randomAsciiOfLengthBetween(1, 30) : secondQuery.queryName() + randomAsciiOfLengthBetween(1, 10));
} }
setSearchContext(randomTypes); // only set search context for toQuery to be more realistic
Query secondLuceneQuery = secondQuery.toQuery(context); Query secondLuceneQuery = secondQuery.toQuery(context);
assertLuceneQuery(secondQuery, secondLuceneQuery, context); assertLuceneQuery(secondQuery, secondLuceneQuery, context);
SearchContext.removeCurrent(); // remove after assertLuceneQuery since the assertLuceneQuery impl might access the context as well
assertThat("two equivalent query builders lead to different lucene queries", secondLuceneQuery, equalTo(firstLuceneQuery)); assertThat("two equivalent query builders lead to different lucene queries", secondLuceneQuery, equalTo(firstLuceneQuery));
//if the initial lucene query is null, changing its boost won't have any effect, we shouldn't test that //if the initial lucene query is null, changing its boost won't have any effect, we shouldn't test that
if (firstLuceneQuery != null && supportsBoostAndQueryName()) { if (firstLuceneQuery != null && supportsBoostAndQueryName()) {
secondQuery.boost(firstQuery.boost() + 1f + randomFloat()); secondQuery.boost(firstQuery.boost() + 1f + randomFloat());
setSearchContext(randomTypes); // only set search context for toQuery to be more realistic
Query thirdLuceneQuery = secondQuery.toQuery(context); Query thirdLuceneQuery = secondQuery.toQuery(context);
SearchContext.removeCurrent();
assertThat("modifying the boost doesn't affect the corresponding lucene query", firstLuceneQuery, not(equalTo(thirdLuceneQuery))); assertThat("modifying the boost doesn't affect the corresponding lucene query", firstLuceneQuery, not(equalTo(thirdLuceneQuery)));
} }
} }
@ -363,6 +374,13 @@ public abstract class BaseQueryTestCase<QB extends AbstractQueryBuilder<QB>> ext
@Test @Test
public void testSerialization() throws IOException { public void testSerialization() throws IOException {
QB testQuery = createTestQueryBuilder(); QB testQuery = createTestQueryBuilder();
assertSerialization(testQuery);
}
/**
* Serialize the given query builder and asserts that both are equal
*/
protected QB assertSerialization(QB testQuery) throws IOException {
try (BytesStreamOutput output = new BytesStreamOutput()) { try (BytesStreamOutput output = new BytesStreamOutput()) {
testQuery.writeTo(output); testQuery.writeTo(output);
try (StreamInput in = new NamedWriteableAwareStreamInput(StreamInput.wrap(output.bytes()), namedWriteableRegistry)) { try (StreamInput in = new NamedWriteableAwareStreamInput(StreamInput.wrap(output.bytes()), namedWriteableRegistry)) {
@ -371,6 +389,7 @@ public abstract class BaseQueryTestCase<QB extends AbstractQueryBuilder<QB>> ext
assertEquals(deserializedQuery, testQuery); assertEquals(deserializedQuery, testQuery);
assertEquals(deserializedQuery.hashCode(), testQuery.hashCode()); assertEquals(deserializedQuery.hashCode(), testQuery.hashCode());
assertNotSame(deserializedQuery, testQuery); assertNotSame(deserializedQuery, testQuery);
return (QB) deserializedQuery;
} }
} }
} }
@ -451,9 +470,9 @@ public abstract class BaseQueryTestCase<QB extends AbstractQueryBuilder<QB>> ext
} }
/** /**
* create a random value for either {@link BaseQueryTestCase#BOOLEAN_FIELD_NAME}, {@link BaseQueryTestCase#INT_FIELD_NAME}, * create a random value for either {@link AbstractQueryTestCase#BOOLEAN_FIELD_NAME}, {@link AbstractQueryTestCase#INT_FIELD_NAME},
* {@link BaseQueryTestCase#DOUBLE_FIELD_NAME}, {@link BaseQueryTestCase#STRING_FIELD_NAME} or * {@link AbstractQueryTestCase#DOUBLE_FIELD_NAME}, {@link AbstractQueryTestCase#STRING_FIELD_NAME} or
* {@link BaseQueryTestCase#DATE_FIELD_NAME}, or a String value by default * {@link AbstractQueryTestCase#DATE_FIELD_NAME}, or a String value by default
*/ */
protected static Object getRandomValueForFieldName(String fieldName) { protected static Object getRandomValueForFieldName(String fieldName) {
Object value; Object value;

@ -26,7 +26,7 @@ import java.util.Map;
import static org.hamcrest.Matchers.is; import static org.hamcrest.Matchers.is;
public abstract class BaseTermQueryTestCase<QB extends BaseTermQueryBuilder<QB>> extends BaseQueryTestCase<QB> { public abstract class AbstractTermQueryTestCase<QB extends BaseTermQueryBuilder<QB>> extends AbstractQueryTestCase<QB> {
@Override @Override
protected final QB doCreateTestQueryBuilder() { protected final QB doCreateTestQueryBuilder() {

@ -30,7 +30,7 @@ import java.util.*;
import static org.hamcrest.CoreMatchers.*; import static org.hamcrest.CoreMatchers.*;
@SuppressWarnings("deprecation") @SuppressWarnings("deprecation")
public class AndQueryBuilderTests extends BaseQueryTestCase<AndQueryBuilder> { public class AndQueryBuilderTests extends AbstractQueryTestCase<AndQueryBuilder> {
/** /**
* @return a AndQueryBuilder with random limit between 0 and 20 * @return a AndQueryBuilder with random limit between 0 and 20

@ -31,7 +31,7 @@ import java.util.*;
import static org.hamcrest.CoreMatchers.equalTo; import static org.hamcrest.CoreMatchers.equalTo;
import static org.hamcrest.CoreMatchers.instanceOf; import static org.hamcrest.CoreMatchers.instanceOf;
public class BoolQueryBuilderTests extends BaseQueryTestCase<BoolQueryBuilder> { public class BoolQueryBuilderTests extends AbstractQueryTestCase<BoolQueryBuilder> {
@Override @Override
protected BoolQueryBuilder doCreateTestQueryBuilder() { protected BoolQueryBuilder doCreateTestQueryBuilder() {

@ -28,7 +28,7 @@ import java.io.IOException;
import static org.hamcrest.CoreMatchers.instanceOf; import static org.hamcrest.CoreMatchers.instanceOf;
import static org.hamcrest.CoreMatchers.nullValue; import static org.hamcrest.CoreMatchers.nullValue;
public class BoostingQueryBuilderTests extends BaseQueryTestCase<BoostingQueryBuilder> { public class BoostingQueryBuilderTests extends AbstractQueryTestCase<BoostingQueryBuilder> {
@Override @Override
protected BoostingQueryBuilder doCreateTestQueryBuilder() { protected BoostingQueryBuilder doCreateTestQueryBuilder() {

@ -29,7 +29,7 @@ import static org.hamcrest.Matchers.equalTo;
import static org.hamcrest.Matchers.instanceOf; import static org.hamcrest.Matchers.instanceOf;
import static org.hamcrest.Matchers.is; import static org.hamcrest.Matchers.is;
public class CommonTermsQueryBuilderTests extends BaseQueryTestCase<CommonTermsQueryBuilder> { public class CommonTermsQueryBuilderTests extends AbstractQueryTestCase<CommonTermsQueryBuilder> {
@Override @Override
protected CommonTermsQueryBuilder doCreateTestQueryBuilder() { protected CommonTermsQueryBuilder doCreateTestQueryBuilder() {

@ -27,7 +27,7 @@ import java.io.IOException;
import static org.hamcrest.CoreMatchers.*; import static org.hamcrest.CoreMatchers.*;
public class ConstantScoreQueryBuilderTests extends BaseQueryTestCase<ConstantScoreQueryBuilder> { public class ConstantScoreQueryBuilderTests extends AbstractQueryTestCase<ConstantScoreQueryBuilder> {
/** /**
* @return a {@link ConstantScoreQueryBuilder} with random boost between 0.1f and 2.0f * @return a {@link ConstantScoreQueryBuilder} with random boost between 0.1f and 2.0f

@ -31,7 +31,7 @@ import java.util.Map;
import static org.hamcrest.CoreMatchers.*; import static org.hamcrest.CoreMatchers.*;
public class DisMaxQueryBuilderTests extends BaseQueryTestCase<DisMaxQueryBuilder> { public class DisMaxQueryBuilderTests extends AbstractQueryTestCase<DisMaxQueryBuilder> {
/** /**
* @return a {@link DisMaxQueryBuilder} with random inner queries * @return a {@link DisMaxQueryBuilder} with random inner queries

@ -32,7 +32,7 @@ import java.util.Collection;
import static org.hamcrest.CoreMatchers.equalTo; import static org.hamcrest.CoreMatchers.equalTo;
import static org.hamcrest.CoreMatchers.instanceOf; import static org.hamcrest.CoreMatchers.instanceOf;
public class ExistsQueryBuilderTests extends BaseQueryTestCase<ExistsQueryBuilder> { public class ExistsQueryBuilderTests extends AbstractQueryTestCase<ExistsQueryBuilder> {
@Override @Override
protected ExistsQueryBuilder doCreateTestQueryBuilder() { protected ExistsQueryBuilder doCreateTestQueryBuilder() {

@ -28,7 +28,7 @@ import java.io.IOException;
import static org.hamcrest.CoreMatchers.*; import static org.hamcrest.CoreMatchers.*;
@SuppressWarnings("deprecation") @SuppressWarnings("deprecation")
public class FQueryFilterBuilderTests extends BaseQueryTestCase<FQueryFilterBuilder> { public class FQueryFilterBuilderTests extends AbstractQueryTestCase<FQueryFilterBuilder> {
/** /**
* @return a FQueryFilterBuilder with random inner query * @return a FQueryFilterBuilder with random inner query

@ -29,7 +29,7 @@ import java.io.IOException;
import static org.hamcrest.CoreMatchers.equalTo; import static org.hamcrest.CoreMatchers.equalTo;
import static org.hamcrest.CoreMatchers.instanceOf; import static org.hamcrest.CoreMatchers.instanceOf;
public class FieldMaskingSpanQueryBuilderTests extends BaseQueryTestCase<FieldMaskingSpanQueryBuilder> { public class FieldMaskingSpanQueryBuilderTests extends AbstractQueryTestCase<FieldMaskingSpanQueryBuilder> {
@Override @Override
protected FieldMaskingSpanQueryBuilder doCreateTestQueryBuilder() { protected FieldMaskingSpanQueryBuilder doCreateTestQueryBuilder() {

@ -31,7 +31,7 @@ import static org.hamcrest.CoreMatchers.instanceOf;
import static org.hamcrest.CoreMatchers.nullValue; import static org.hamcrest.CoreMatchers.nullValue;
@SuppressWarnings("deprecation") @SuppressWarnings("deprecation")
public class FilteredQueryBuilderTests extends BaseQueryTestCase<FilteredQueryBuilder> { public class FilteredQueryBuilderTests extends AbstractQueryTestCase<FilteredQueryBuilder> {
@Override @Override
protected FilteredQueryBuilder doCreateTestQueryBuilder() { protected FilteredQueryBuilder doCreateTestQueryBuilder() {

@ -32,7 +32,7 @@ import java.io.IOException;
import static org.hamcrest.Matchers.instanceOf; import static org.hamcrest.Matchers.instanceOf;
import static org.hamcrest.Matchers.is; import static org.hamcrest.Matchers.is;
public class FuzzyQueryBuilderTests extends BaseQueryTestCase<FuzzyQueryBuilder> { public class FuzzyQueryBuilderTests extends AbstractQueryTestCase<FuzzyQueryBuilder> {
@Override @Override
protected FuzzyQueryBuilder doCreateTestQueryBuilder() { protected FuzzyQueryBuilder doCreateTestQueryBuilder() {

@ -34,7 +34,7 @@ import static org.hamcrest.Matchers.equalTo;
import static org.hamcrest.Matchers.instanceOf; import static org.hamcrest.Matchers.instanceOf;
import static org.hamcrest.Matchers.notNullValue; import static org.hamcrest.Matchers.notNullValue;
public class GeoDistanceRangeQueryTests extends BaseQueryTestCase<GeoDistanceRangeQueryBuilder> { public class GeoDistanceRangeQueryTests extends AbstractQueryTestCase<GeoDistanceRangeQueryBuilder> {
@Override @Override
protected GeoDistanceRangeQueryBuilder doCreateTestQueryBuilder() { protected GeoDistanceRangeQueryBuilder doCreateTestQueryBuilder() {

@ -34,7 +34,7 @@ import static org.hamcrest.Matchers.equalTo;
import static org.hamcrest.Matchers.instanceOf; import static org.hamcrest.Matchers.instanceOf;
import static org.hamcrest.Matchers.notNullValue; import static org.hamcrest.Matchers.notNullValue;
public class GeohashCellQueryBuilderTests extends BaseQueryTestCase<GeohashCellQuery.Builder> { public class GeohashCellQueryBuilderTests extends AbstractQueryTestCase<Builder> {
@Override @Override
protected Builder doCreateTestQueryBuilder() { protected Builder doCreateTestQueryBuilder() {

@ -40,7 +40,7 @@ import java.io.IOException;
import static org.elasticsearch.test.StreamsUtils.copyToStringFromClasspath; import static org.elasticsearch.test.StreamsUtils.copyToStringFromClasspath;
import static org.hamcrest.CoreMatchers.instanceOf; import static org.hamcrest.CoreMatchers.instanceOf;
public class HasChildQueryBuilderTests extends BaseQueryTestCase<HasChildQueryBuilder> { public class HasChildQueryBuilderTests extends AbstractQueryTestCase<HasChildQueryBuilder> {
protected static final String PARENT_TYPE = "parent"; protected static final String PARENT_TYPE = "parent";
protected static final String CHILD_TYPE = "child"; protected static final String CHILD_TYPE = "child";
@ -108,7 +108,7 @@ public class HasChildQueryBuilderTests extends BaseQueryTestCase<HasChildQueryBu
return new HasChildQueryBuilder(CHILD_TYPE, return new HasChildQueryBuilder(CHILD_TYPE,
RandomQueryBuilder.createQuery(random()), max, min, RandomQueryBuilder.createQuery(random()), max, min,
RandomPicks.randomFrom(random(), ScoreType.values()), RandomPicks.randomFrom(random(), ScoreType.values()),
SearchContext.current() == null ? null : new QueryInnerHits("inner_hits_name", innerHit)); randomBoolean() ? null : new QueryInnerHits("inner_hits_name", innerHit));
} }
@Override @Override

@ -40,7 +40,7 @@ import java.util.Arrays;
import static org.hamcrest.CoreMatchers.instanceOf; import static org.hamcrest.CoreMatchers.instanceOf;
public class HasParentQueryBuilderTests extends BaseQueryTestCase<HasParentQueryBuilder> { public class HasParentQueryBuilderTests extends AbstractQueryTestCase<HasParentQueryBuilder> {
protected static final String PARENT_TYPE = "parent"; protected static final String PARENT_TYPE = "parent";
protected static final String CHILD_TYPE = "child"; protected static final String CHILD_TYPE = "child";
@ -105,7 +105,7 @@ public class HasParentQueryBuilderTests extends BaseQueryTestCase<HasParentQuery
InnerHitsBuilder.InnerHit innerHit = new InnerHitsBuilder.InnerHit().setSize(100).addSort(STRING_FIELD_NAME, SortOrder.ASC); InnerHitsBuilder.InnerHit innerHit = new InnerHitsBuilder.InnerHit().setSize(100).addSort(STRING_FIELD_NAME, SortOrder.ASC);
return new HasParentQueryBuilder(PARENT_TYPE, return new HasParentQueryBuilder(PARENT_TYPE,
RandomQueryBuilder.createQuery(random()),randomBoolean(), RandomQueryBuilder.createQuery(random()),randomBoolean(),
SearchContext.current() == null ? null : new QueryInnerHits("inner_hits_name", innerHit)); randomBoolean() ? null : new QueryInnerHits("inner_hits_name", innerHit));
} }
@Override @Override
@ -160,37 +160,35 @@ public class HasParentQueryBuilderTests extends BaseQueryTestCase<HasParentQuery
builder.field("type", "foo"); // deprecated builder.field("type", "foo"); // deprecated
builder.endObject(); builder.endObject();
builder.endObject(); builder.endObject();
String queryAsString = builder.string();
QueryShardContext shardContext = createShardContext();
QueryParseContext context = shardContext.parseContext();
XContentParser parser = XContentFactory.xContent(XContentType.JSON).createParser(queryAsString);
context.reset(parser);
context.parseFieldMatcher(ParseFieldMatcher.STRICT);
try { try {
context.parseInnerQueryBuilder(); parseQuery(builder.string());
fail("type is deprecated"); fail("type is deprecated");
} catch (IllegalArgumentException ex) { } catch (IllegalArgumentException ex) {
assertEquals("Deprecated field [type] used, expected [parent_type] instead", ex.getMessage()); assertEquals("Deprecated field [type] used, expected [parent_type] instead", ex.getMessage());
} }
HasParentQueryBuilder queryBuilder = (HasParentQueryBuilder) parseQuery(builder.string(), ParseFieldMatcher.EMPTY);
assertEquals("foo", queryBuilder.type());
boolean score = randomBoolean();
String key = RandomPicks.randomFrom(random(), Arrays.asList("score_mode", "scoreMode", "score_type", "scoreType")); String key = RandomPicks.randomFrom(random(), Arrays.asList("score_mode", "scoreMode", "score_type", "scoreType"));
builder = XContentFactory.jsonBuilder().prettyPrint(); builder = XContentFactory.jsonBuilder().prettyPrint();
builder.startObject(); builder.startObject();
builder.startObject("has_parent"); builder.startObject("has_parent");
builder.field("query"); builder.field("query");
EmptyQueryBuilder.PROTOTYPE.toXContent(builder, ToXContent.EMPTY_PARAMS); EmptyQueryBuilder.PROTOTYPE.toXContent(builder, ToXContent.EMPTY_PARAMS);
builder.field(key, "score"); builder.field(key, score ? "score": "none");
builder.field("parent_type", "foo");
builder.endObject(); builder.endObject();
builder.endObject(); builder.endObject();
queryAsString = builder.string();
parser = XContentFactory.xContent(XContentType.JSON).createParser(queryAsString);
context.reset(parser);
context.parseFieldMatcher(ParseFieldMatcher.STRICT);
try { try {
context.parseInnerQueryBuilder(); parseQuery(builder.string());
fail(key + " is deprecated"); fail(key + " is deprecated");
} catch (IllegalArgumentException ex) { } catch (IllegalArgumentException ex) {
assertEquals("Deprecated field [" + key + "] used, replaced by [score]", ex.getMessage()); assertEquals("Deprecated field [" + key + "] used, replaced by [score]", ex.getMessage());
} }
queryBuilder = (HasParentQueryBuilder) parseQuery(builder.string(), ParseFieldMatcher.EMPTY);
assertEquals(score, queryBuilder.score());
} }
} }

@ -33,7 +33,7 @@ import java.util.Map;
import static org.hamcrest.CoreMatchers.equalTo; import static org.hamcrest.CoreMatchers.equalTo;
import static org.hamcrest.CoreMatchers.instanceOf; import static org.hamcrest.CoreMatchers.instanceOf;
public class IdsQueryBuilderTests extends BaseQueryTestCase<IdsQueryBuilder> { public class IdsQueryBuilderTests extends AbstractQueryTestCase<IdsQueryBuilder> {
/** /**
* check that parser throws exception on missing values field * check that parser throws exception on missing values field

@ -24,7 +24,7 @@ import org.junit.Test;
import java.io.IOException; import java.io.IOException;
public class IndicesQueryBuilderTests extends BaseQueryTestCase<IndicesQueryBuilder> { public class IndicesQueryBuilderTests extends AbstractQueryTestCase<IndicesQueryBuilder> {
@Override @Override
protected IndicesQueryBuilder doCreateTestQueryBuilder() { protected IndicesQueryBuilder doCreateTestQueryBuilder() {

@ -26,7 +26,7 @@ import java.io.IOException;
import static org.hamcrest.CoreMatchers.instanceOf; import static org.hamcrest.CoreMatchers.instanceOf;
public class LimitQueryBuilderTests extends BaseQueryTestCase<LimitQueryBuilder> { public class LimitQueryBuilderTests extends AbstractQueryTestCase<LimitQueryBuilder> {
/** /**
* @return a LimitQueryBuilder with random limit between 0 and 20 * @return a LimitQueryBuilder with random limit between 0 and 20

@ -26,7 +26,7 @@ import java.io.IOException;
import static org.hamcrest.CoreMatchers.instanceOf; import static org.hamcrest.CoreMatchers.instanceOf;
public class MatchAllQueryBuilderTests extends BaseQueryTestCase<MatchAllQueryBuilder> { public class MatchAllQueryBuilderTests extends AbstractQueryTestCase<MatchAllQueryBuilder> {
@Override @Override
protected MatchAllQueryBuilder doCreateTestQueryBuilder() { protected MatchAllQueryBuilder doCreateTestQueryBuilder() {

@ -27,7 +27,7 @@ import java.io.IOException;
import static org.hamcrest.CoreMatchers.equalTo; import static org.hamcrest.CoreMatchers.equalTo;
import static org.hamcrest.CoreMatchers.instanceOf; import static org.hamcrest.CoreMatchers.instanceOf;
public class MatchNoneQueryBuilderTests extends BaseQueryTestCase { public class MatchNoneQueryBuilderTests extends AbstractQueryTestCase {
@Override @Override
protected boolean supportsBoostAndQueryName() { protected boolean supportsBoostAndQueryName() {

@ -26,7 +26,7 @@ import java.io.IOException;
import static org.hamcrest.Matchers.is; import static org.hamcrest.Matchers.is;
public class MissingQueryBuilderTests extends BaseQueryTestCase<MissingQueryBuilder> { public class MissingQueryBuilderTests extends AbstractQueryTestCase<MissingQueryBuilder> {
@Override @Override
protected MissingQueryBuilder doCreateTestQueryBuilder() { protected MissingQueryBuilder doCreateTestQueryBuilder() {

@ -23,6 +23,7 @@ import org.apache.lucene.search.BooleanClause;
import org.apache.lucene.search.BooleanQuery; import org.apache.lucene.search.BooleanQuery;
import org.apache.lucene.search.MatchAllDocsQuery; import org.apache.lucene.search.MatchAllDocsQuery;
import org.apache.lucene.search.Query; import org.apache.lucene.search.Query;
import org.elasticsearch.common.ParseFieldMatcher;
import org.junit.Test; import org.junit.Test;
import java.io.IOException; import java.io.IOException;
@ -31,7 +32,7 @@ import java.util.Map;
import static org.hamcrest.CoreMatchers.*; import static org.hamcrest.CoreMatchers.*;
public class NotQueryBuilderTests extends BaseQueryTestCase<NotQueryBuilder> { public class NotQueryBuilderTests extends AbstractQueryTestCase<NotQueryBuilder> {
/** /**
* @return a NotQueryBuilder with random limit between 0 and 20 * @return a NotQueryBuilder with random limit between 0 and 20
@ -69,15 +70,6 @@ public class NotQueryBuilderTests extends BaseQueryTestCase<NotQueryBuilder> {
@Override @Override
protected Map<String, NotQueryBuilder> getAlternateVersions() { protected Map<String, NotQueryBuilder> getAlternateVersions() {
Map<String, NotQueryBuilder> alternateVersions = new HashMap<>(); Map<String, NotQueryBuilder> alternateVersions = new HashMap<>();
NotQueryBuilder testQuery1 = new NotQueryBuilder(createTestQueryBuilder().innerQuery());
String contentString1 = "{\n" +
" \"not\" : {\n" +
" \"filter\" : " + testQuery1.innerQuery().toString() + "\n" +
" }\n" +
"}";
alternateVersions.put(contentString1, testQuery1);
QueryBuilder innerQuery = createTestQueryBuilder().innerQuery(); QueryBuilder innerQuery = createTestQueryBuilder().innerQuery();
//not doesn't support empty query when query/filter element is not specified //not doesn't support empty query when query/filter element is not specified
if (innerQuery != EmptyQueryBuilder.PROTOTYPE) { if (innerQuery != EmptyQueryBuilder.PROTOTYPE) {
@ -90,6 +82,24 @@ public class NotQueryBuilderTests extends BaseQueryTestCase<NotQueryBuilder> {
return alternateVersions; return alternateVersions;
} }
public void testDeprecatedXContent() throws IOException {
String deprecatedJson = "{\n" +
" \"not\" : {\n" +
" \"filter\" : " + EmptyQueryBuilder.PROTOTYPE.toString() + "\n" +
" }\n" +
"}";
try {
parseQuery(deprecatedJson);
fail("filter is deprecated");
} catch (IllegalArgumentException ex) {
assertEquals("Deprecated field [filter] used, expected [query] instead", ex.getMessage());
}
NotQueryBuilder queryBuilder = (NotQueryBuilder) parseQuery(deprecatedJson, ParseFieldMatcher.EMPTY);
assertEquals(EmptyQueryBuilder.PROTOTYPE, queryBuilder.innerQuery());
}
@Test @Test
public void testValidate() { public void testValidate() {
QueryBuilder innerQuery = null; QueryBuilder innerQuery = null;

@ -30,7 +30,7 @@ import java.util.*;
import static org.hamcrest.CoreMatchers.*; import static org.hamcrest.CoreMatchers.*;
@SuppressWarnings("deprecation") @SuppressWarnings("deprecation")
public class OrQueryBuilderTests extends BaseQueryTestCase<OrQueryBuilder> { public class OrQueryBuilderTests extends AbstractQueryTestCase<OrQueryBuilder> {
/** /**
* @return an OrQueryBuilder with random limit between 0 and 20 * @return an OrQueryBuilder with random limit between 0 and 20

@ -29,7 +29,7 @@ import static org.hamcrest.Matchers.equalTo;
import static org.hamcrest.Matchers.instanceOf; import static org.hamcrest.Matchers.instanceOf;
import static org.hamcrest.Matchers.is; import static org.hamcrest.Matchers.is;
public class PrefixQueryBuilderTests extends BaseQueryTestCase<PrefixQueryBuilder> { public class PrefixQueryBuilderTests extends AbstractQueryTestCase<PrefixQueryBuilder> {
@Override @Override
protected PrefixQueryBuilder doCreateTestQueryBuilder() { protected PrefixQueryBuilder doCreateTestQueryBuilder() {

@ -28,7 +28,7 @@ import java.io.IOException;
import static org.hamcrest.CoreMatchers.*; import static org.hamcrest.CoreMatchers.*;
@SuppressWarnings("deprecation") @SuppressWarnings("deprecation")
public class QueryFilterBuilderTests extends BaseQueryTestCase<QueryFilterBuilder> { public class QueryFilterBuilderTests extends AbstractQueryTestCase<QueryFilterBuilder> {
@Override @Override
protected QueryFilterBuilder doCreateTestQueryBuilder() { protected QueryFilterBuilder doCreateTestQueryBuilder() {

@ -35,7 +35,7 @@ import static org.hamcrest.CoreMatchers.equalTo;
import static org.hamcrest.CoreMatchers.instanceOf; import static org.hamcrest.CoreMatchers.instanceOf;
import static org.hamcrest.Matchers.*; import static org.hamcrest.Matchers.*;
public class QueryStringQueryBuilderTests extends BaseQueryTestCase<QueryStringQueryBuilder> { public class QueryStringQueryBuilderTests extends AbstractQueryTestCase<QueryStringQueryBuilder> {
@Override @Override
protected QueryStringQueryBuilder doCreateTestQueryBuilder() { protected QueryStringQueryBuilder doCreateTestQueryBuilder() {

@ -62,7 +62,7 @@ public class RandomQueryBuilder {
// for now, only use String Rangequeries for MultiTerm test, numeric and date makes little sense // for now, only use String Rangequeries for MultiTerm test, numeric and date makes little sense
// see issue #12123 for discussion // see issue #12123 for discussion
// Prefix / Fuzzy / RegEx / Wildcard can go here later once refactored and they have random query generators // Prefix / Fuzzy / RegEx / Wildcard can go here later once refactored and they have random query generators
RangeQueryBuilder query = new RangeQueryBuilder(BaseQueryTestCase.STRING_FIELD_NAME); RangeQueryBuilder query = new RangeQueryBuilder(AbstractQueryTestCase.STRING_FIELD_NAME);
query.from("a" + RandomStrings.randomAsciiOfLengthBetween(r, 1, 10)); query.from("a" + RandomStrings.randomAsciiOfLengthBetween(r, 1, 10));
query.to("z" + RandomStrings.randomAsciiOfLengthBetween(r, 1, 10)); query.to("z" + RandomStrings.randomAsciiOfLengthBetween(r, 1, 10));
return query; return query;

@ -31,7 +31,7 @@ import java.io.IOException;
import static org.hamcrest.Matchers.instanceOf; import static org.hamcrest.Matchers.instanceOf;
import static org.hamcrest.Matchers.is; import static org.hamcrest.Matchers.is;
public class RangeQueryBuilderTests extends BaseQueryTestCase<RangeQueryBuilder> { public class RangeQueryBuilderTests extends AbstractQueryTestCase<RangeQueryBuilder> {
@Override @Override
protected RangeQueryBuilder doCreateTestQueryBuilder() { protected RangeQueryBuilder doCreateTestQueryBuilder() {

@ -30,7 +30,7 @@ import java.util.List;
import static org.hamcrest.Matchers.instanceOf; import static org.hamcrest.Matchers.instanceOf;
import static org.hamcrest.Matchers.is; import static org.hamcrest.Matchers.is;
public class RegexpQueryBuilderTests extends BaseQueryTestCase<RegexpQueryBuilder> { public class RegexpQueryBuilderTests extends AbstractQueryTestCase<RegexpQueryBuilder> {
@Override @Override
protected RegexpQueryBuilder doCreateTestQueryBuilder() { protected RegexpQueryBuilder doCreateTestQueryBuilder() {

@ -31,7 +31,7 @@ import java.util.Map;
import static org.hamcrest.Matchers.instanceOf; import static org.hamcrest.Matchers.instanceOf;
import static org.hamcrest.Matchers.is; import static org.hamcrest.Matchers.is;
public class ScriptQueryBuilderTests extends BaseQueryTestCase<ScriptQueryBuilder> { public class ScriptQueryBuilderTests extends AbstractQueryTestCase<ScriptQueryBuilder> {
@Override @Override
protected ScriptQueryBuilder doCreateTestQueryBuilder() { protected ScriptQueryBuilder doCreateTestQueryBuilder() {

@ -32,7 +32,7 @@ import java.util.*;
import static org.hamcrest.Matchers.*; import static org.hamcrest.Matchers.*;
public class SimpleQueryStringBuilderTests extends BaseQueryTestCase<SimpleQueryStringBuilder> { public class SimpleQueryStringBuilderTests extends AbstractQueryTestCase<SimpleQueryStringBuilder> {
@Override @Override
protected SimpleQueryStringBuilder doCreateTestQueryBuilder() { protected SimpleQueryStringBuilder doCreateTestQueryBuilder() {

@ -28,7 +28,7 @@ import java.io.IOException;
import static org.hamcrest.CoreMatchers.equalTo; import static org.hamcrest.CoreMatchers.equalTo;
import static org.hamcrest.CoreMatchers.instanceOf; import static org.hamcrest.CoreMatchers.instanceOf;
public class SpanContainingQueryBuilderTests extends BaseQueryTestCase<SpanContainingQueryBuilder> { public class SpanContainingQueryBuilderTests extends AbstractQueryTestCase<SpanContainingQueryBuilder> {
@Override @Override
protected SpanContainingQueryBuilder doCreateTestQueryBuilder() { protected SpanContainingQueryBuilder doCreateTestQueryBuilder() {

@ -30,7 +30,7 @@ import java.io.IOException;
import static org.elasticsearch.index.query.QueryBuilders.spanTermQuery; import static org.elasticsearch.index.query.QueryBuilders.spanTermQuery;
import static org.hamcrest.CoreMatchers.instanceOf; import static org.hamcrest.CoreMatchers.instanceOf;
public class SpanFirstQueryBuilderTests extends BaseQueryTestCase<SpanFirstQueryBuilder> { public class SpanFirstQueryBuilderTests extends AbstractQueryTestCase<SpanFirstQueryBuilder> {
@Override @Override
protected SpanFirstQueryBuilder doCreateTestQueryBuilder() { protected SpanFirstQueryBuilder doCreateTestQueryBuilder() {

@ -29,7 +29,7 @@ import java.io.IOException;
import static org.hamcrest.CoreMatchers.equalTo; import static org.hamcrest.CoreMatchers.equalTo;
import static org.hamcrest.CoreMatchers.instanceOf; import static org.hamcrest.CoreMatchers.instanceOf;
public class SpanMultiTermQueryBuilderTests extends BaseQueryTestCase<SpanMultiTermQueryBuilder> { public class SpanMultiTermQueryBuilderTests extends AbstractQueryTestCase<SpanMultiTermQueryBuilder> {
@Override @Override
protected SpanMultiTermQueryBuilder doCreateTestQueryBuilder() { protected SpanMultiTermQueryBuilder doCreateTestQueryBuilder() {

@ -30,7 +30,7 @@ import java.util.Iterator;
import static org.hamcrest.CoreMatchers.equalTo; import static org.hamcrest.CoreMatchers.equalTo;
import static org.hamcrest.CoreMatchers.instanceOf; import static org.hamcrest.CoreMatchers.instanceOf;
public class SpanNearQueryBuilderTests extends BaseQueryTestCase<SpanNearQueryBuilder> { public class SpanNearQueryBuilderTests extends AbstractQueryTestCase<SpanNearQueryBuilder> {
@Override @Override
protected SpanNearQueryBuilder doCreateTestQueryBuilder() { protected SpanNearQueryBuilder doCreateTestQueryBuilder() {

@ -31,7 +31,7 @@ import static org.elasticsearch.index.query.QueryBuilders.spanNearQuery;
import static org.elasticsearch.index.query.QueryBuilders.spanTermQuery; import static org.elasticsearch.index.query.QueryBuilders.spanTermQuery;
import static org.hamcrest.Matchers.*; import static org.hamcrest.Matchers.*;
public class SpanNotQueryBuilderTests extends BaseQueryTestCase<SpanNotQueryBuilder> { public class SpanNotQueryBuilderTests extends AbstractQueryTestCase<SpanNotQueryBuilder> {
@Override @Override
protected SpanNotQueryBuilder doCreateTestQueryBuilder() { protected SpanNotQueryBuilder doCreateTestQueryBuilder() {

@ -30,7 +30,7 @@ import java.util.Iterator;
import static org.hamcrest.CoreMatchers.equalTo; import static org.hamcrest.CoreMatchers.equalTo;
import static org.hamcrest.CoreMatchers.instanceOf; import static org.hamcrest.CoreMatchers.instanceOf;
public class SpanOrQueryBuilderTests extends BaseQueryTestCase<SpanOrQueryBuilder> { public class SpanOrQueryBuilderTests extends AbstractQueryTestCase<SpanOrQueryBuilder> {
@Override @Override
protected SpanOrQueryBuilder doCreateTestQueryBuilder() { protected SpanOrQueryBuilder doCreateTestQueryBuilder() {

@ -30,7 +30,7 @@ import java.io.IOException;
import static org.hamcrest.CoreMatchers.equalTo; import static org.hamcrest.CoreMatchers.equalTo;
import static org.hamcrest.CoreMatchers.instanceOf; import static org.hamcrest.CoreMatchers.instanceOf;
public class SpanTermQueryBuilderTests extends BaseTermQueryTestCase<SpanTermQueryBuilder> { public class SpanTermQueryBuilderTests extends AbstractTermQueryTestCase<SpanTermQueryBuilder> {
@Override @Override
protected SpanTermQueryBuilder createQueryBuilder(String fieldName, Object value) { protected SpanTermQueryBuilder createQueryBuilder(String fieldName, Object value) {

@ -28,7 +28,7 @@ import java.io.IOException;
import static org.hamcrest.CoreMatchers.equalTo; import static org.hamcrest.CoreMatchers.equalTo;
import static org.hamcrest.CoreMatchers.instanceOf; import static org.hamcrest.CoreMatchers.instanceOf;
public class SpanWithinQueryBuilderTests extends BaseQueryTestCase<SpanWithinQueryBuilder> { public class SpanWithinQueryBuilderTests extends AbstractQueryTestCase<SpanWithinQueryBuilder> {
@Override @Override
protected SpanWithinQueryBuilder doCreateTestQueryBuilder() { protected SpanWithinQueryBuilder doCreateTestQueryBuilder() {

@ -33,7 +33,7 @@ import java.util.Map;
import static org.hamcrest.Matchers.is; import static org.hamcrest.Matchers.is;
public class TemplateQueryBuilderTests extends BaseQueryTestCase<TemplateQueryBuilder> { public class TemplateQueryBuilderTests extends AbstractQueryTestCase<TemplateQueryBuilder> {
/** /**
* The query type all template tests will be based on. * The query type all template tests will be based on.

@ -30,7 +30,7 @@ import java.io.IOException;
import static org.hamcrest.CoreMatchers.equalTo; import static org.hamcrest.CoreMatchers.equalTo;
import static org.hamcrest.CoreMatchers.instanceOf; import static org.hamcrest.CoreMatchers.instanceOf;
public class TermQueryBuilderTests extends BaseTermQueryTestCase<TermQueryBuilder> { public class TermQueryBuilderTests extends AbstractTermQueryTestCase<TermQueryBuilder> {
/** /**
* @return a TermQuery with random field name and value, optional random boost and queryname * @return a TermQuery with random field name and value, optional random boost and queryname

@ -19,11 +19,13 @@
package org.elasticsearch.index.query; package org.elasticsearch.index.query;
import com.carrotsearch.randomizedtesting.generators.RandomPicks;
import org.apache.lucene.index.Term; import org.apache.lucene.index.Term;
import org.apache.lucene.search.BooleanClause; import org.apache.lucene.search.BooleanClause;
import org.apache.lucene.search.BooleanQuery; import org.apache.lucene.search.BooleanQuery;
import org.apache.lucene.search.Query; import org.apache.lucene.search.Query;
import org.apache.lucene.search.TermQuery; import org.apache.lucene.search.TermQuery;
import org.elasticsearch.common.ParseFieldMatcher;
import org.elasticsearch.common.settings.Settings; import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.index.search.termslookup.TermsLookupFetchService; import org.elasticsearch.index.search.termslookup.TermsLookupFetchService;
import org.elasticsearch.indices.cache.query.terms.TermsLookup; import org.elasticsearch.indices.cache.query.terms.TermsLookup;
@ -33,12 +35,13 @@ import org.junit.Test;
import java.io.IOException; import java.io.IOException;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator; import java.util.Iterator;
import java.util.List; import java.util.List;
import static org.hamcrest.Matchers.*; import static org.hamcrest.Matchers.*;
public class TermsQueryBuilderTests extends BaseQueryTestCase<TermsQueryBuilder> { public class TermsQueryBuilderTests extends AbstractQueryTestCase<TermsQueryBuilder> {
private MockTermsLookupFetchService termsLookupFetchService; private MockTermsLookupFetchService termsLookupFetchService;
@ -65,12 +68,6 @@ public class TermsQueryBuilderTests extends BaseQueryTestCase<TermsQueryBuilder>
query = new TermsQueryBuilder(randomBoolean() ? randomAsciiOfLengthBetween(1,10) : STRING_FIELD_NAME); query = new TermsQueryBuilder(randomBoolean() ? randomAsciiOfLengthBetween(1,10) : STRING_FIELD_NAME);
query.termsLookup(randomTermsLookup()); query.termsLookup(randomTermsLookup());
} }
if (randomBoolean()) {
query.minimumShouldMatch(randomInt(100) + "%");
}
if (randomBoolean()) {
query.disableCoord(randomBoolean());
}
return query; return query;
} }
@ -201,6 +198,50 @@ public class TermsQueryBuilderTests extends BaseQueryTestCase<TermsQueryBuilder>
assertThat(termsQueryBuilder.validate().validationErrors().size(), is(1)); assertThat(termsQueryBuilder.validate().validationErrors().size(), is(1));
} }
public void testDeprecatedXContent() throws IOException {
String query = "{\n" +
" \"terms\": {\n" +
" \"field\": [\n" +
" \"blue\",\n" +
" \"pill\"\n" +
" ],\n" +
" \"disable_coord\": true\n" +
" }\n" +
"}";
try {
parseQuery(query);
fail("disable_coord is deprecated");
} catch (IllegalArgumentException ex) {
assertEquals("Deprecated field [disable_coord] used, replaced by [Use [bool] query instead]", ex.getMessage());
}
TermsQueryBuilder queryBuilder = (TermsQueryBuilder) parseQuery(query, ParseFieldMatcher.EMPTY);
TermsQueryBuilder copy = assertSerialization(queryBuilder);
assertTrue(queryBuilder.disableCoord());
assertTrue(copy.disableCoord());
String randomMinShouldMatch = RandomPicks.randomFrom(random(), Arrays.asList("min_match", "min_should_match", "minimum_should_match"));
query = "{\n" +
" \"terms\": {\n" +
" \"field\": [\n" +
" \"blue\",\n" +
" \"pill\"\n" +
" ],\n" +
" \"" + randomMinShouldMatch +"\": \"42%\"\n" +
" }\n" +
"}";
try {
parseQuery(query);
fail(randomMinShouldMatch + " is deprecated");
} catch (IllegalArgumentException ex) {
assertEquals("Deprecated field [" + randomMinShouldMatch + "] used, replaced by [Use [bool] query instead]", ex.getMessage());
}
queryBuilder = (TermsQueryBuilder) parseQuery(query, ParseFieldMatcher.EMPTY);
copy = assertSerialization(queryBuilder);
assertEquals("42%", queryBuilder.minimumShouldMatch());
assertEquals("42%", copy.minimumShouldMatch());
}
private static class MockTermsLookupFetchService extends TermsLookupFetchService { private static class MockTermsLookupFetchService extends TermsLookupFetchService {
private List<Object> randomTerms = new ArrayList<>(); private List<Object> randomTerms = new ArrayList<>();

@ -29,7 +29,7 @@ import java.io.IOException;
import static org.hamcrest.Matchers.*; import static org.hamcrest.Matchers.*;
public class TypeQueryBuilderTests extends BaseQueryTestCase<TypeQueryBuilder> { public class TypeQueryBuilderTests extends AbstractQueryTestCase<TypeQueryBuilder> {
@Override @Override
protected TypeQueryBuilder doCreateTestQueryBuilder() { protected TypeQueryBuilder doCreateTestQueryBuilder() {

@ -28,7 +28,7 @@ import java.io.IOException;
import static org.hamcrest.Matchers.instanceOf; import static org.hamcrest.Matchers.instanceOf;
import static org.hamcrest.Matchers.is; import static org.hamcrest.Matchers.is;
public class WildcardQueryBuilderTests extends BaseQueryTestCase<WildcardQueryBuilder> { public class WildcardQueryBuilderTests extends AbstractQueryTestCase<WildcardQueryBuilder> {
@Override @Override
protected WildcardQueryBuilder doCreateTestQueryBuilder() { protected WildcardQueryBuilder doCreateTestQueryBuilder() {

@ -29,7 +29,7 @@ import java.io.IOException;
import static org.hamcrest.Matchers.equalTo; import static org.hamcrest.Matchers.equalTo;
import static org.hamcrest.Matchers.is; import static org.hamcrest.Matchers.is;
public class WrapperQueryBuilderTests extends BaseQueryTestCase<WrapperQueryBuilder> { public class WrapperQueryBuilderTests extends AbstractQueryTestCase<WrapperQueryBuilder> {
@Override @Override
protected boolean supportsBoostAndQueryName() { protected boolean supportsBoostAndQueryName() {