@@ -397,6 +397,8 @@ public void testParseGeoPoint() throws IOException {
397397 parser .nextToken ();
398398 GeoPoint point = GeoUtils .parseGeoPoint (parser );
399399 assertThat (point , equalTo (new GeoPoint (lat , lon )));
400+ assertThat (parser .currentToken (), is (Token .END_OBJECT ));
401+ assertNull (parser .nextToken ());
400402 }
401403 json = jsonBuilder ().startObject ().field ("lat" , String .valueOf (lat )).field ("lon" , String .valueOf (lon )).endObject ();
402404 try (XContentParser parser = createParser (json )) {
@@ -438,6 +440,21 @@ public void testParseGeoPointStringZValueError() throws IOException {
438440 }
439441 }
440442
443+ public void testParseGeoPointArrayZValueError () throws IOException {
444+ double lat = randomDouble () * 180 - 90 + randomIntBetween (-1000 , 1000 ) * 180 ;
445+ double lon = randomDouble () * 360 - 180 + randomIntBetween (-1000 , 1000 ) * 360 ;
446+ double alt = randomDouble () * 1000 ;
447+ XContentBuilder json = jsonBuilder ().startArray ().value (lat ).value (lon ).value (alt ).endArray ();
448+ try (XContentParser parser = createParser (json )) {
449+ parser .nextToken ();
450+ Exception e = expectThrows (ElasticsearchParseException .class ,
451+ () -> GeoUtils .parseGeoPoint (parser , new GeoPoint (), false ));
452+ assertThat (e .getMessage (), containsString ("but [ignore_z_value] parameter is [false]" ));
453+ assertThat (parser .currentToken (), is (Token .END_ARRAY ));
454+ assertNull (parser .nextToken ());
455+ }
456+ }
457+
441458 public void testParseGeoPointGeohash () throws IOException {
442459 for (int i = 0 ; i < 100 ; i ++) {
443460 int geoHashLength = randomIntBetween (1 , GeoHashUtils .PRECISION );
@@ -451,6 +468,8 @@ public void testParseGeoPointGeohash() throws IOException {
451468 GeoPoint point = GeoUtils .parseGeoPoint (parser );
452469 assertThat (point .lat (), allOf (lessThanOrEqualTo (90.0 ), greaterThanOrEqualTo (-90.0 )));
453470 assertThat (point .lon (), allOf (lessThanOrEqualTo (180.0 ), greaterThanOrEqualTo (-180.0 )));
471+ assertThat (parser .currentToken (), is (Token .END_OBJECT ));
472+ assertNull (parser .nextToken ());
454473 }
455474 json = jsonBuilder ().startObject ().field ("geohash" , geohashBuilder .toString ()).endObject ();
456475 try (XContentParser parser = createParser (json )) {
@@ -470,6 +489,8 @@ public void testParseGeoPointGeohashWrongType() throws IOException {
470489 parser .nextToken ();
471490 Exception e = expectThrows (ElasticsearchParseException .class , () -> GeoUtils .parseGeoPoint (parser ));
472491 assertThat (e .getMessage (), containsString ("geohash must be a string" ));
492+ assertThat (parser .currentToken (), is (Token .END_OBJECT ));
493+ assertNull (parser .nextToken ());
473494 }
474495 }
475496
@@ -480,6 +501,8 @@ public void testParseGeoPointLatNoLon() throws IOException {
480501 parser .nextToken ();
481502 Exception e = expectThrows (ElasticsearchParseException .class , () -> GeoUtils .parseGeoPoint (parser ));
482503 assertThat (e .getMessage (), is ("field [lon] missing" ));
504+ assertThat (parser .currentToken (), is (Token .END_OBJECT ));
505+ assertNull (parser .nextToken ());
483506 }
484507 }
485508
@@ -490,6 +513,8 @@ public void testParseGeoPointLonNoLat() throws IOException {
490513 parser .nextToken ();
491514 Exception e = expectThrows (ElasticsearchParseException .class , () -> GeoUtils .parseGeoPoint (parser ));
492515 assertThat (e .getMessage (), is ("field [lat] missing" ));
516+ assertThat (parser .currentToken (), is (Token .END_OBJECT ));
517+ assertNull (parser .nextToken ());
493518 }
494519 }
495520
@@ -500,6 +525,8 @@ public void testParseGeoPointLonWrongType() throws IOException {
500525 parser .nextToken ();
501526 Exception e = expectThrows (ElasticsearchParseException .class , () -> GeoUtils .parseGeoPoint (parser ));
502527 assertThat (e .getMessage (), is ("longitude must be a number" ));
528+ assertThat (parser .currentToken (), is (Token .END_OBJECT ));
529+ assertNull (parser .nextToken ());
503530 }
504531 }
505532
@@ -510,6 +537,8 @@ public void testParseGeoPointLatWrongType() throws IOException {
510537 parser .nextToken ();
511538 Exception e = expectThrows (ElasticsearchParseException .class , () -> GeoUtils .parseGeoPoint (parser ));
512539 assertThat (e .getMessage (), is ("latitude must be a number" ));
540+ assertThat (parser .currentToken (), is (Token .END_OBJECT ));
541+ assertNull (parser .nextToken ());
513542 }
514543 }
515544
@@ -578,6 +607,9 @@ public void testParseGeoPointArrayWrongType() throws IOException {
578607 }
579608 Exception e = expectThrows (ElasticsearchParseException .class , () -> GeoUtils .parseGeoPoint (parser ));
580609 assertThat (e .getMessage (), is ("numeric value expected" ));
610+ assertThat (parser .currentToken (), is (Token .END_ARRAY ));
611+ assertThat (parser .nextToken (), is (Token .END_OBJECT ));
612+ assertNull (parser .nextToken ());
581613 }
582614 }
583615
0 commit comments