Add proper longitude validation in geo_polygon_query (#30497)
Fixes longitude validation in geo_polygon_query builder. The queries with wrong longitude currently fail but only later during polygon with quite complicated error message. Fixes #30488
This commit is contained in:
parent
df17f85e14
commit
2a79d9234b
|
@ -177,7 +177,7 @@ public class GeoPolygonQueryBuilder extends AbstractQueryBuilder<GeoPolygonQuery
|
|||
throw new QueryShardException(context, "illegal latitude value [{}] for [{}]", point.lat(),
|
||||
GeoPolygonQueryBuilder.NAME);
|
||||
}
|
||||
if (!GeoUtils.isValidLongitude(point.lat())) {
|
||||
if (!GeoUtils.isValidLongitude(point.lon())) {
|
||||
throw new QueryShardException(context, "illegal longitude value [{}] for [{}]", point.lon(),
|
||||
GeoPolygonQueryBuilder.NAME);
|
||||
}
|
||||
|
|
|
@ -254,4 +254,38 @@ public class GeoPolygonQueryBuilderTests extends AbstractQueryTestCase<GeoPolygo
|
|||
QueryShardException e = expectThrows(QueryShardException.class, () -> failingQueryBuilder.toQuery(createShardContext()));
|
||||
assertThat(e.getMessage(), containsString("failed to find geo_point field [unmapped]"));
|
||||
}
|
||||
|
||||
public void testPointValidation() throws IOException {
|
||||
assumeTrue("test runs only when at least a type is registered", getCurrentTypes().length > 0);
|
||||
QueryShardContext context = createShardContext();
|
||||
String queryInvalidLat = "{\n" +
|
||||
" \"geo_polygon\":{\n" +
|
||||
" \"" + GEO_POINT_FIELD_NAME + "\":{\n" +
|
||||
" \"points\":[\n" +
|
||||
" [-70, 140],\n" +
|
||||
" [-80, 30],\n" +
|
||||
" [-90, 20]\n" +
|
||||
" ]\n" +
|
||||
" }\n" +
|
||||
" }\n" +
|
||||
"}\n";
|
||||
|
||||
QueryShardException e1 = expectThrows(QueryShardException.class, () -> parseQuery(queryInvalidLat).toQuery(context));
|
||||
assertThat(e1.getMessage(), containsString("illegal latitude value [140.0] for [geo_polygon]"));
|
||||
|
||||
String queryInvalidLon = "{\n" +
|
||||
" \"geo_polygon\":{\n" +
|
||||
" \"" + GEO_POINT_FIELD_NAME + "\":{\n" +
|
||||
" \"points\":[\n" +
|
||||
" [-70, 40],\n" +
|
||||
" [-80, 30],\n" +
|
||||
" [-190, 20]\n" +
|
||||
" ]\n" +
|
||||
" }\n" +
|
||||
" }\n" +
|
||||
"}\n";
|
||||
|
||||
QueryShardException e2 = expectThrows(QueryShardException.class, () -> parseQuery(queryInvalidLon).toQuery(context));
|
||||
assertThat(e2.getMessage(), containsString("illegal longitude value [-190.0] for [geo_polygon]"));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,9 +1,4 @@
|
|||
{
|
||||
"filtered": {
|
||||
"query": {
|
||||
"match_all": {}
|
||||
},
|
||||
"filter": {
|
||||
"geo_polygon": {
|
||||
"location": {
|
||||
"points": {
|
||||
|
@ -16,5 +11,3 @@
|
|||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,9 +1,4 @@
|
|||
{
|
||||
"filtered": {
|
||||
"query": {
|
||||
"match_all": {}
|
||||
},
|
||||
"filter": {
|
||||
"geo_polygon": {
|
||||
"location": {
|
||||
"points": [
|
||||
|
@ -14,9 +9,6 @@
|
|||
"something_else": {
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,12 +1,5 @@
|
|||
{
|
||||
"filtered": {
|
||||
"query": {
|
||||
"match_all": {}
|
||||
},
|
||||
"filter": {
|
||||
"geo_polygon": {
|
||||
"location": ["WRONG"]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,9 +1,4 @@
|
|||
{
|
||||
"filtered": {
|
||||
"query": {
|
||||
"match_all": {}
|
||||
},
|
||||
"filter": {
|
||||
"geo_polygon": {
|
||||
"location": {
|
||||
"points": [
|
||||
|
@ -15,5 +10,3 @@
|
|||
"bla": true
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,9 +1,4 @@
|
|||
{
|
||||
"filtered": {
|
||||
"query": {
|
||||
"match_all": {}
|
||||
},
|
||||
"filter": {
|
||||
"geo_polygon": {
|
||||
"location": {
|
||||
"points": [
|
||||
|
@ -15,5 +10,3 @@
|
|||
"bla": ["array"]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue