Skip to content

Commit bd5e16d

Browse files
authored
move geo_shape query builder tests to spatial module (#88588)
1 parent 498e1c5 commit bd5e16d

File tree

10 files changed

+429
-269
lines changed

10 files changed

+429
-269
lines changed
Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
/*
2+
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
3+
* or more contributor license agreements. Licensed under the Elastic License
4+
* 2.0 and the Server Side Public License, v 1; you may not use this file except
5+
* in compliance with, at your election, the Elastic License 2.0 or the Server
6+
* Side Public License, v 1.
7+
*/
8+
9+
package org.elasticsearch.index.query;
10+
11+
import org.apache.lucene.document.LatLonDocValuesField;
12+
import org.apache.lucene.document.LatLonPoint;
13+
import org.apache.lucene.geo.GeoEncodingUtils;
14+
import org.apache.lucene.search.IndexOrDocValuesQuery;
15+
import org.apache.lucene.search.MatchNoDocsQuery;
16+
import org.apache.lucene.search.Query;
17+
import org.elasticsearch.index.mapper.GeoPointFieldMapper;
18+
import org.elasticsearch.index.mapper.MappedFieldType;
19+
import org.elasticsearch.search.geo.GeoBoundingBoxQueryBuilderTestCase;
20+
21+
import java.io.IOException;
22+
23+
@SuppressWarnings("checkstyle:MissingJavadocMethod")
24+
public class GeoBoundingBoxQueryBuilderGeoPointTests extends GeoBoundingBoxQueryBuilderTestCase {
25+
26+
@Override
27+
protected String getFieldName() {
28+
return randomFrom(GEO_POINT_FIELD_NAME, GEO_POINT_ALIAS_FIELD_NAME);
29+
}
30+
31+
@Override
32+
protected void doAssertLuceneQuery(GeoBoundingBoxQueryBuilder queryBuilder, Query query, SearchExecutionContext context)
33+
throws IOException {
34+
final MappedFieldType fieldType = context.getFieldType(queryBuilder.fieldName());
35+
if (fieldType == null) {
36+
assertTrue("Found no indexed geo query.", query instanceof MatchNoDocsQuery);
37+
}
38+
assertEquals(GeoPointFieldMapper.GeoPointFieldType.class, fieldType.getClass());
39+
assertEquals(IndexOrDocValuesQuery.class, query.getClass());
40+
Query indexQuery = ((IndexOrDocValuesQuery) query).getIndexQuery();
41+
String expectedFieldName = expectedFieldName(queryBuilder.fieldName());
42+
double qMinLat = GeoEncodingUtils.decodeLatitude(GeoEncodingUtils.encodeLatitude(queryBuilder.bottomRight().lat()));
43+
double qMaxLat = GeoEncodingUtils.decodeLatitude(GeoEncodingUtils.encodeLatitude(queryBuilder.topLeft().lat()));
44+
double qMinLon = GeoEncodingUtils.decodeLongitude(GeoEncodingUtils.encodeLongitude(queryBuilder.topLeft().lon()));
45+
double qMaxLon = GeoEncodingUtils.decodeLongitude(GeoEncodingUtils.encodeLongitude(queryBuilder.bottomRight().lon()));
46+
assertEquals(LatLonPoint.newBoxQuery(expectedFieldName, qMinLat, qMaxLat, qMinLon, qMaxLon), indexQuery);
47+
Query dvQuery = ((IndexOrDocValuesQuery) query).getRandomAccessQuery();
48+
assertEquals(LatLonDocValuesField.newSlowBoxQuery(expectedFieldName, qMinLat, qMaxLat, qMinLon, qMaxLon), dvQuery);
49+
}
50+
51+
public void testValidation() {
52+
PointTester[] testers = { new TopTester(), new LeftTester(), new BottomTester(), new RightTester() };
53+
54+
for (PointTester tester : testers) {
55+
GeoBoundingBoxQueryBuilder builder = createTestQueryBuilder();
56+
tester.invalidateCoordinate(builder.setValidationMethod(GeoValidationMethod.COERCE), false);
57+
QueryValidationException except = builder.checkLatLon();
58+
assertNull(
59+
"validation w/ coerce should ignore invalid "
60+
+ tester.getClass().getName()
61+
+ " coordinate: "
62+
+ tester.invalidCoordinate
63+
+ " ",
64+
except
65+
);
66+
67+
tester.invalidateCoordinate(builder.setValidationMethod(GeoValidationMethod.STRICT), false);
68+
except = builder.checkLatLon();
69+
assertNotNull(
70+
"validation w/o coerce should detect invalid coordinate: "
71+
+ tester.getClass().getName()
72+
+ " coordinate: "
73+
+ tester.invalidCoordinate,
74+
except
75+
);
76+
}
77+
}
78+
}
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
/*
2+
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
3+
* or more contributor license agreements. Licensed under the Elastic License
4+
* 2.0 and the Server Side Public License, v 1; you may not use this file except
5+
* in compliance with, at your election, the Elastic License 2.0 or the Server
6+
* Side Public License, v 1.
7+
*/
8+
9+
package org.elasticsearch.index.query;
10+
11+
import org.apache.lucene.document.LatLonDocValuesField;
12+
import org.apache.lucene.document.LatLonPoint;
13+
import org.apache.lucene.geo.GeoEncodingUtils;
14+
import org.apache.lucene.search.IndexOrDocValuesQuery;
15+
import org.apache.lucene.search.MatchNoDocsQuery;
16+
import org.apache.lucene.search.Query;
17+
import org.elasticsearch.index.mapper.GeoPointFieldMapper;
18+
import org.elasticsearch.index.mapper.MappedFieldType;
19+
import org.elasticsearch.search.geo.GeoDistanceQueryBuilderTestCase;
20+
21+
import java.io.IOException;
22+
23+
@SuppressWarnings("checkstyle:MissingJavadocMethod")
24+
public class GeoDistanceQueryBuilderGeoPointTests extends GeoDistanceQueryBuilderTestCase {
25+
26+
@Override
27+
protected String getFieldName() {
28+
return randomFrom(GEO_POINT_FIELD_NAME, GEO_POINT_ALIAS_FIELD_NAME);
29+
}
30+
31+
@Override
32+
protected void doAssertLuceneQuery(GeoDistanceQueryBuilder queryBuilder, Query query, SearchExecutionContext context)
33+
throws IOException {
34+
final MappedFieldType fieldType = context.getFieldType(queryBuilder.fieldName());
35+
if (fieldType == null) {
36+
assertTrue("Found no indexed geo query.", query instanceof MatchNoDocsQuery);
37+
}
38+
assertEquals(GeoPointFieldMapper.GeoPointFieldType.class, fieldType.getClass());
39+
assertEquals(IndexOrDocValuesQuery.class, query.getClass());
40+
Query indexQuery = ((IndexOrDocValuesQuery) query).getIndexQuery();
41+
String expectedFieldName = expectedFieldName(queryBuilder.fieldName());
42+
double qLat = GeoEncodingUtils.decodeLatitude(GeoEncodingUtils.encodeLatitude(queryBuilder.point().lat()));
43+
double qLon = GeoEncodingUtils.decodeLongitude(GeoEncodingUtils.encodeLongitude(queryBuilder.point().lon()));
44+
assertEquals(LatLonPoint.newDistanceQuery(expectedFieldName, qLat, qLon, queryBuilder.distance()), indexQuery);
45+
Query dvQuery = ((IndexOrDocValuesQuery) query).getRandomAccessQuery();
46+
assertEquals(LatLonDocValuesField.newSlowDistanceQuery(expectedFieldName, qLat, qLon, queryBuilder.distance()), dvQuery);
47+
}
48+
}

server/src/test/java/org/elasticsearch/index/query/GeoShapeQueryBuilderGeoPointTests.java

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,23 +10,25 @@
1010
import org.elasticsearch.common.geo.ShapeRelation;
1111
import org.elasticsearch.geo.GeometryTestUtils;
1212
import org.elasticsearch.geometry.Geometry;
13+
import org.elasticsearch.search.geo.GeoShapeQueryBuilderTestCase;
1314

14-
public class GeoShapeQueryBuilderGeoPointTests extends GeoShapeQueryBuilderTests {
15+
public class GeoShapeQueryBuilderGeoPointTests extends GeoShapeQueryBuilderTestCase {
1516

16-
protected String fieldName() {
17-
return GEO_POINT_FIELD_NAME;
17+
protected String getFieldName() {
18+
return randomFrom(GEO_POINT_FIELD_NAME, GEO_POINT_ALIAS_FIELD_NAME);
1819
}
1920

21+
@Override
2022
protected GeoShapeQueryBuilder doCreateTestQueryBuilder(boolean indexedShape) {
2123
Geometry geometry = GeometryTestUtils.randomPolygon(false);
2224
GeoShapeQueryBuilder builder;
2325
clearShapeFields();
2426
if (indexedShape == false) {
25-
builder = new GeoShapeQueryBuilder(fieldName(), geometry);
27+
builder = new GeoShapeQueryBuilder(getFieldName(), geometry);
2628
} else {
2729
indexedShapeToReturn = geometry;
2830
indexedShapeId = randomAlphaOfLengthBetween(3, 20);
29-
builder = new GeoShapeQueryBuilder(fieldName(), indexedShapeId);
31+
builder = new GeoShapeQueryBuilder(getFieldName(), indexedShapeId);
3032
if (randomBoolean()) {
3133
indexedShapeIndex = randomAlphaOfLengthBetween(3, 20);
3234
builder.indexedShapeIndex(indexedShapeIndex);
@@ -49,5 +51,4 @@ protected GeoShapeQueryBuilder doCreateTestQueryBuilder(boolean indexedShape) {
4951
}
5052
return builder;
5153
}
52-
5354
}

server/src/test/java/org/elasticsearch/index/query/GeoShapeQueryBuilderGeoShapeTests.java

Lines changed: 0 additions & 100 deletions
This file was deleted.

0 commit comments

Comments
 (0)