diff --git a/.github/workflows/main_and_pr_workflow.yml b/.github/workflows/main_and_pr_workflow.yml index 42e00876..2622db25 100644 --- a/.github/workflows/main_and_pr_workflow.yml +++ b/.github/workflows/main_and_pr_workflow.yml @@ -20,7 +20,7 @@ jobs: uses: actions/setup-java@v3 with: java-version: ${{ matrix.java-version }} - distribution: 'oracle' + distribution: 'temurin' cache: gradle - name: Assemble with Gradle run: ./gradlew assemble @@ -35,8 +35,8 @@ jobs: - { opensearch-version: 2.19.2, java-version: 25 } - { opensearch-version: 3.0.0, java-version: 21 } - { opensearch-version: 3.0.0, java-version: 25 } - - { opensearch-version: 3.2.0, java-version: 21 } - - { opensearch-version: 3.2.0, java-version: 25 } + - { opensearch-version: 3.3.0, java-version: 21 } + - { opensearch-version: 3.3.0, java-version: 25 } runs-on: [ubuntu-latest] name: Check on ${{ matrix.runs-on }} with JDK ${{ matrix.entry.java-version }} against OpenSearch ${{ matrix.entry.opensearch-version }} runs-on: ${{ matrix.runs-on }} @@ -47,7 +47,7 @@ jobs: uses: actions/setup-java@v3 with: java-version: ${{ matrix.entry.java-version }} - distribution: 'oracle' + distribution: 'temurin' cache: gradle - name: Check with Gradle run: ./gradlew check -Psde.testcontainers.image-version=${{ matrix.entry.opensearch-version }} diff --git a/gradle.properties b/gradle.properties index a0381fba..7496d63c 100644 --- a/gradle.properties +++ b/gradle.properties @@ -6,4 +6,4 @@ org.gradle.jvmargs=--add-exports jdk.compiler/com.sun.tools.javac.api=ALL-UNNAME --add-exports jdk.compiler/com.sun.tools.javac.tree=ALL-UNNAMED \ --add-exports jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED -sde.testcontainers.image-version=3.2.0 +sde.testcontainers.image-version=3.3.0 diff --git a/settings.gradle.kts b/settings.gradle.kts index 13456d88..35d114af 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -8,18 +8,18 @@ rootProject.name = "spring-data-opensearch-parent" dependencyResolutionManagement { versionCatalogs { create("libs") { - version("jupiter", "5.13.1") - version("launcher", "1.13.1") + version("jupiter", "6.0.0") + version("launcher", "6.0.0") library("jupiter", "org.junit.jupiter", "junit-jupiter").versionRef("jupiter") library("jupiter-params", "org.junit.jupiter", "junit-jupiter-params").versionRef("jupiter") library("junit-platform-launcher", "org.junit.platform", "junit-platform-launcher").versionRef("launcher") } create("springLibs") { - version("spring", "6.2.11") + version("spring", "6.2.12") version("spring-boot", "3.5.5") - library("data-commons", "org.springframework.data:spring-data-commons:3.5.4") - library("data-elasticsearch", "org.springframework.data:spring-data-elasticsearch:5.5.4") + library("data-commons", "org.springframework.data:spring-data-commons:3.5.5") + library("data-elasticsearch", "org.springframework.data:spring-data-elasticsearch:5.5.5") library("web", "org.springframework", "spring-web").versionRef("spring") library("webflux", "org.springframework", "spring-webflux").versionRef("spring") library("context", "org.springframework", "spring-context").versionRef("spring") @@ -37,7 +37,7 @@ dependencyResolutionManagement { } create("opensearchLibs") { - version("opensearch", "3.2.0") + version("opensearch", "3.3.0") library("java-client", "org.opensearch.client:opensearch-java:3.2.0") library("client", "org.opensearch.client", "opensearch-rest-client").versionRef("opensearch") library("high-level-client", "org.opensearch.client", "opensearch-rest-high-level-client").versionRef("opensearch") diff --git a/spring-data-opensearch/src/test/java/org/springframework/data/elasticsearch/core/geo/GeoJsonIntegrationTests.java b/spring-data-opensearch/src/test/java/org/springframework/data/elasticsearch/core/geo/GeoJsonIntegrationTests.java index a5721dfb..71aa8278 100644 --- a/spring-data-opensearch/src/test/java/org/springframework/data/elasticsearch/core/geo/GeoJsonIntegrationTests.java +++ b/spring-data-opensearch/src/test/java/org/springframework/data/elasticsearch/core/geo/GeoJsonIntegrationTests.java @@ -16,6 +16,7 @@ package org.springframework.data.elasticsearch.core.geo; import static org.assertj.core.api.Assertions.*; +import static org.junit.jupiter.api.Assertions.assertThrows; import java.util.Arrays; @@ -23,8 +24,12 @@ import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Order; import org.junit.jupiter.api.Test; +import org.opensearch.OpenSearchException; +import org.opensearch.OpenSearchStatusException; +import org.opensearch.data.client.EnabledIfOpenSearchVersion; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.annotation.Id; +import org.springframework.data.elasticsearch.UncategorizedElasticsearchException; import org.springframework.data.elasticsearch.annotations.Document; import org.springframework.data.elasticsearch.annotations.Field; import org.springframework.data.elasticsearch.core.ElasticsearchOperations; @@ -115,7 +120,7 @@ void shouldWriteAndReadAnEntityWithGeoJsonProperties() { )); GeoJsonPolygon geoJsonPolygon = GeoJsonPolygon .of(new Point(12, 34), new Point(56, 78), new Point(90, 12), new Point(12, 34)) - .withInnerRing(new Point(21, 43), new Point(65, 87), new Point(9, 21), new Point(21, 43)); + .withInnerRing(new Point(21, 43), new Point(65, 57), new Point(19, 34), new Point(21, 43)); GeoJsonMultiPolygon geoJsonMultiPolygon = GeoJsonMultiPolygon .of(Arrays.asList(GeoJsonPolygon.of(new Point(12, 34), new Point(56, 78), new Point(90, 12), new Point(12, 34)), GeoJsonPolygon.of(new Point(21, 43), new Point(65, 87), new Point(9, 21), new Point(21, 43)))); @@ -146,6 +151,48 @@ void shouldWriteAndReadAnEntityWithGeoJsonProperties() { assertThat(result).isEqualTo(entity); } + + // region tests + @Test // DATAES-930 + @DisplayName("should not write illegal GeoJson properties") + @EnabledIfOpenSearchVersion(onOrAfter = "3.3.0", reason = "https://github.com/apache/lucene/pull/14974") + void shouldNotWriteIllegalGeoJsonProperties() { + + GeoJsonMultiLineString multiLineString = GeoJsonMultiLineString.of(Arrays.asList( // + GeoJsonLineString.of(new Point(12, 34), new Point(56, 78)), // + GeoJsonLineString.of(new Point(90, 12), new Point(34, 56)) // + )); + GeoJsonPolygon geoJsonPolygon = GeoJsonPolygon + .of(new Point(12, 34), new Point(56, 78), new Point(90, 12), new Point(12, 34)) + .withInnerRing(new Point(21, 43), new Point(65, 87), new Point(9, 21), new Point(21, 43)); + GeoJsonMultiPolygon geoJsonMultiPolygon = GeoJsonMultiPolygon + .of(Arrays.asList(GeoJsonPolygon.of(new Point(12, 34), new Point(56, 78), new Point(90, 12), new Point(12, 34)), + GeoJsonPolygon.of(new Point(21, 43), new Point(65, 87), new Point(9, 21), new Point(21, 43)))); + GeoJsonGeometryCollection geoJsonGeometryCollection = GeoJsonGeometryCollection + .of(Arrays.asList(GeoJsonPoint.of(12, 34), GeoJsonPolygon + .of(GeoJsonLineString.of(new Point(12, 34), new Point(56, 78), new Point(90, 12), new Point(12, 34))))); + + GeoJsonEntity entity = new GeoJsonEntity(); + entity.setId("42"); + entity.setPoint1(GeoJsonPoint.of(12, 34)); + entity.setPoint2(GeoJsonPoint.of(56, 78)); + entity.setMultiPoint1(GeoJsonMultiPoint.of(new Point(12, 34), new Point(56, 78), new Point(90, 12))); + entity.setMultiPoint2(GeoJsonMultiPoint.of(new Point(90, 12), new Point(56, 78), new Point(12, 34))); + entity.setLineString1(GeoJsonLineString.of(new Point(12, 34), new Point(56, 78), new Point(90, 12))); + entity.setLineString2(GeoJsonLineString.of(new Point(90, 12), new Point(56, 78), new Point(12, 34))); + entity.setMultiLineString1(multiLineString); + entity.setMultiLineString2(multiLineString); + entity.setPolygon1(geoJsonPolygon); + entity.setPolygon2(geoJsonPolygon); + entity.setMultiPolygon1(geoJsonMultiPolygon); + entity.setMultiPolygon2(geoJsonMultiPolygon); + entity.setGeometryCollection1(geoJsonGeometryCollection); + entity.setGeometryCollection2(geoJsonGeometryCollection); + + final UncategorizedElasticsearchException ex = assertThrows(UncategorizedElasticsearchException.class, + () -> operations.save(entity)); + assertThat(ex.getMessage()).contains("mapper_parsing_exception"); + } @Test // DATAES-931 @DisplayName("should find intersecting objects with Criteria query")