From 239759a2b79bc645448f9d683c1a9e3b56450f0c Mon Sep 17 00:00:00 2001 From: Okapist Date: Sun, 5 Oct 2025 20:57:09 +0300 Subject: [PATCH 1/2] migrate to jdk25 --- .github/workflows/auto-jdk-matrix.yml | 2 +- .github/workflows/auto-os-matrix.yml | 2 +- .github/workflows/javadoc.yml | 2 +- README.md | 5 +- pom.xml | 26 ++++---- .../memory/internal/ResourceImpl.java | 12 ++-- .../memory/internal/WritableMemoryImpl.java | 12 ++-- .../memory/internal/Buffer2Test.java | 19 ++---- .../internal/BufferReadWriteSafetyTest.java | 52 +++++++-------- .../internal/MemoryReadWriteSafetyTest.java | 66 +++++++++---------- .../memory/internal/ResourceTest.java | 21 ++---- .../memory/internal/WritableMemoryTest.java | 13 ++-- 12 files changed, 102 insertions(+), 130 deletions(-) diff --git a/.github/workflows/auto-jdk-matrix.yml b/.github/workflows/auto-jdk-matrix.yml index 381222ac..0a19cb2c 100644 --- a/.github/workflows/auto-jdk-matrix.yml +++ b/.github/workflows/auto-jdk-matrix.yml @@ -20,7 +20,7 @@ jobs: strategy: fail-fast: false matrix: - jdk: [ 21 ] # LTS versions only + jdk: [ 25 ] # LTS versions only os: [ ubuntu-latest ] include: # - os: windows-latest diff --git a/.github/workflows/auto-os-matrix.yml b/.github/workflows/auto-os-matrix.yml index c267b559..25931906 100644 --- a/.github/workflows/auto-os-matrix.yml +++ b/.github/workflows/auto-os-matrix.yml @@ -21,7 +21,7 @@ jobs: fail-fast: false matrix: - jdk: [ 21 ] + jdk: [ 25 ] os: [ windows-latest, ubuntu-latest, macos-latest ] include: - os: windows-latest diff --git a/.github/workflows/javadoc.yml b/.github/workflows/javadoc.yml index 4511b39a..4586e1d5 100644 --- a/.github/workflows/javadoc.yml +++ b/.github/workflows/javadoc.yml @@ -14,7 +14,7 @@ jobs: - name: Setup Java uses: actions/setup-java@v4 with: - java-version: '21' + java-version: '25' distribution: 'temurin' - name: Echo Java Version diff --git a/README.md b/README.md index 208862dc..467ce6d3 100644 --- a/README.md +++ b/README.md @@ -72,8 +72,8 @@ Starting with release *datasketches-memory-5.0.0*, this Memory component support ### Runtime Notes: * There are no run-time dependencies. * The DataSketches Java Memory Component is not thread-safe. -* This Release, based on Java 21, leverages the new Java Foreign Function & Memory (FFM) API [JEP 442](https://openjdk.org/jeps/442), which is in its third Preview and will require the JVM flag *--enable-preview* at run-time. -* We recommend Eclipse Adoptium/Temurin 21.0.5+11 or later as earlier releases of 21 have bugs that affect this product. +* This Release, based on Java 25, leverages the new Java Foreign Function & Memory (FFM) API [JEP 454](https://openjdk.org/jeps/454). +* We recommend Eclipse Adoptium/Temurin 25.0.0+36-LTS or later as earlier releases of 25 have bugs that affect this product. * This component is not designed as a Java Module, so the Jar file should be part of the application classpath. ## Build Instructions @@ -83,7 +83,6 @@ __NOTES:__ As a result, the directory elements of the full absolute path of the target installation directory must qualify as Java identifiers. In other words, the directory elements must not have any space characters (or non-Java identifier characters) in any of the path elements. This is required by the Oracle Java Specification in order to ensure location-independent access to resources: [See Oracle Location-Independent Access to Resources](https://docs.oracle.com/javase/8/docs/technotes/guides/lang/resources.html) -* The compile command line must contain the JVM flag *--enable-preview* (see [JEP 442](https://openjdk.org/jeps/442)). #### Build & Test Dependencies diff --git a/pom.xml b/pom.xml index f31639a5..83204c59 100644 --- a/pom.xml +++ b/pom.xml @@ -82,11 +82,10 @@ under the License. 3.6.3 - 21 - --enable-preview + 25 ${java.version} ${java.version} - -Xmx4g -Duser.language=en -Duser.country=US -Dfile.encoding=UTF-8 ${enable.preview} + -Xmx4g -Duser.language=en -Duser.country=US -Dfile.encoding=UTF-8 UTF-8 ${charset.encoding} ${charset.encoding} @@ -115,7 +114,7 @@ under the License. 4.3.0 - 0.8.12 + 0.8.13 2.18.0 @@ -154,11 +153,6 @@ under the License. org.apache.maven.plugins maven-compiler-plugin ${maven-compiler-plugin.version} - - - ${enable.preview} - - @@ -182,7 +176,7 @@ under the License. - ${java.version}, + ${java.version} [${maven.version},4.0.0) @@ -229,9 +223,6 @@ under the License. org.apache.datasketches.memory/internal public - - ${enable.preview} - @@ -276,7 +267,6 @@ under the License. maven-surefire-plugin ${maven-surefire-failsafe-plugins.version} - ${enable.preview} false false true @@ -431,6 +421,14 @@ under the License. pl.project13.maven git-commit-id-plugin + + org.apache.maven.plugins + maven-compiler-plugin + + 25 + 25 + + diff --git a/src/main/java/org/apache/datasketches/memory/internal/ResourceImpl.java b/src/main/java/org/apache/datasketches/memory/internal/ResourceImpl.java index f2e271f2..4304d566 100644 --- a/src/main/java/org/apache/datasketches/memory/internal/ResourceImpl.java +++ b/src/main/java/org/apache/datasketches/memory/internal/ResourceImpl.java @@ -19,7 +19,10 @@ package org.apache.datasketches.memory.internal; -import static org.apache.datasketches.memory.internal.Util.characterPad; +import org.apache.datasketches.memory.MemoryRequestServer; +import org.apache.datasketches.memory.Resource; +import org.apache.datasketches.memory.WritableBuffer; +import org.apache.datasketches.memory.WritableMemory; import java.lang.foreign.Arena; import java.lang.foreign.MemorySegment; @@ -29,10 +32,7 @@ import java.nio.ByteOrder; import java.util.Objects; -import org.apache.datasketches.memory.MemoryRequestServer; -import org.apache.datasketches.memory.Resource; -import org.apache.datasketches.memory.WritableBuffer; -import org.apache.datasketches.memory.WritableMemory; +import static org.apache.datasketches.memory.internal.Util.characterPad; /** * Implements the root Resource methods plus some common static variables and check methods. @@ -387,7 +387,7 @@ public MemorySegment getMemorySegment() { @Override public final long getRelativeOffset(final Resource that) { final ResourceImpl that2 = (ResourceImpl) that; - return this.seg.segmentOffset(that2.seg); + return that2.seg.address() - this.seg.address(); } @Override diff --git a/src/main/java/org/apache/datasketches/memory/internal/WritableMemoryImpl.java b/src/main/java/org/apache/datasketches/memory/internal/WritableMemoryImpl.java index 339c434b..5de73cc6 100644 --- a/src/main/java/org/apache/datasketches/memory/internal/WritableMemoryImpl.java +++ b/src/main/java/org/apache/datasketches/memory/internal/WritableMemoryImpl.java @@ -19,8 +19,7 @@ package org.apache.datasketches.memory.internal; -import static java.nio.channels.FileChannel.MapMode.READ_ONLY; -import static java.nio.channels.FileChannel.MapMode.READ_WRITE; +import org.apache.datasketches.memory.*; import java.io.ByteArrayOutputStream; import java.io.File; @@ -36,11 +35,8 @@ import java.util.Objects; import java.util.Set; -import org.apache.datasketches.memory.Buffer; -import org.apache.datasketches.memory.Memory; -import org.apache.datasketches.memory.MemoryRequestServer; -import org.apache.datasketches.memory.WritableBuffer; -import org.apache.datasketches.memory.WritableMemory; +import static java.nio.channels.FileChannel.MapMode.READ_ONLY; +import static java.nio.channels.FileChannel.MapMode.READ_WRITE; /** * Common base of native-ordered and non-native-ordered {@link WritableMemory} implementations. @@ -165,7 +161,7 @@ public static WritableMemory wrapByteBuffer( * @throws IllegalArgumentException if file is not readable. * @throws IOException if mapping is not successful. */ - @SuppressWarnings({"resource","preview"}) + @SuppressWarnings("resource") public static WritableMemory wrapMap( final File file, final long fileOffsetBytes, diff --git a/src/test/java/org/apache/datasketches/memory/internal/Buffer2Test.java b/src/test/java/org/apache/datasketches/memory/internal/Buffer2Test.java index fff8a718..b3c26cd6 100644 --- a/src/test/java/org/apache/datasketches/memory/internal/Buffer2Test.java +++ b/src/test/java/org/apache/datasketches/memory/internal/Buffer2Test.java @@ -19,21 +19,14 @@ package org.apache.datasketches.memory.internal; -import static org.testng.Assert.assertEquals; -import static org.testng.Assert.assertFalse; -import static org.testng.Assert.assertNotNull; -import static org.testng.Assert.assertTrue; +import org.apache.datasketches.memory.*; +import org.testng.annotations.Test; import java.lang.foreign.Arena; import java.nio.ByteBuffer; import java.nio.ByteOrder; -import org.apache.datasketches.memory.Resource; -import org.apache.datasketches.memory.Buffer; -import org.apache.datasketches.memory.Memory; -import org.apache.datasketches.memory.WritableBuffer; -import org.apache.datasketches.memory.WritableMemory; -import org.testng.annotations.Test; +import static org.testng.Assert.*; public class Buffer2Test { @@ -352,7 +345,7 @@ public void testAsMemory() { } } - @Test(expectedExceptions = UnsupportedOperationException.class) + @Test(expectedExceptions = { IllegalArgumentException.class, UnsupportedOperationException.class }) public void testROByteBuffer() { byte[] arr = new byte[64]; ByteBuffer roBB = ByteBuffer.wrap(arr).asReadOnlyBuffer(); @@ -361,7 +354,7 @@ public void testROByteBuffer() { wbuf.putByte(0, (byte) 1); } - @Test(expectedExceptions = UnsupportedOperationException.class) + @Test(expectedExceptions = { IllegalArgumentException.class, UnsupportedOperationException.class }) public void testROByteBuffer2() { byte[] arr = new byte[64]; ByteBuffer roBB = ByteBuffer.wrap(arr).asReadOnlyBuffer(); @@ -370,7 +363,7 @@ public void testROByteBuffer2() { wbuf.putByteArray(arr, 0, 64); } - @Test(expectedExceptions = UnsupportedOperationException.class) + @Test(expectedExceptions = { IllegalArgumentException.class, UnsupportedOperationException.class }) public void testIllegalFill() { byte[] arr = new byte[64]; ByteBuffer roBB = ByteBuffer.wrap(arr).asReadOnlyBuffer(); diff --git a/src/test/java/org/apache/datasketches/memory/internal/BufferReadWriteSafetyTest.java b/src/test/java/org/apache/datasketches/memory/internal/BufferReadWriteSafetyTest.java index 4e375d6b..0e781207 100644 --- a/src/test/java/org/apache/datasketches/memory/internal/BufferReadWriteSafetyTest.java +++ b/src/test/java/org/apache/datasketches/memory/internal/BufferReadWriteSafetyTest.java @@ -19,140 +19,140 @@ package org.apache.datasketches.memory.internal; -import java.nio.ByteBuffer; - import org.apache.datasketches.memory.Buffer; import org.apache.datasketches.memory.WritableBuffer; import org.apache.datasketches.memory.WritableMemory; import org.testng.annotations.Test; +import java.nio.ByteBuffer; + public class BufferReadWriteSafetyTest { // Test various operations with read-only Buffer private final WritableBuffer buf = (WritableBuffer) Buffer.wrap(ByteBuffer.allocate(8)); - @Test(expectedExceptions = UnsupportedOperationException.class) + @Test(expectedExceptions = { IllegalArgumentException.class, UnsupportedOperationException.class }) public void testPutByte() { buf.setPosition(0); buf.putByte(0, (byte) 1); } - @Test(expectedExceptions = UnsupportedOperationException.class) + @Test(expectedExceptions = { IllegalArgumentException.class, UnsupportedOperationException.class }) public void testPutBytePositional() { buf.setPosition(0); buf.putByte((byte) 1); } - @Test(expectedExceptions = UnsupportedOperationException.class) + @Test(expectedExceptions = { IllegalArgumentException.class, UnsupportedOperationException.class }) public void testPutShort() { buf.setPosition(0); buf.putShort(0, (short) 1); } - @Test(expectedExceptions = UnsupportedOperationException.class) + @Test(expectedExceptions = { IllegalArgumentException.class, UnsupportedOperationException.class }) public void testPutShortPositional() { buf.setPosition(0); buf.putShort((short) 1); } - @Test(expectedExceptions = UnsupportedOperationException.class) + @Test(expectedExceptions = { IllegalArgumentException.class, UnsupportedOperationException.class }) public void testPutChar() { buf.setPosition(0); buf.putChar(0, (char) 1); } - @Test(expectedExceptions = UnsupportedOperationException.class) + @Test(expectedExceptions = { IllegalArgumentException.class, UnsupportedOperationException.class }) public void testPutCharPositional() { buf.setPosition(0); buf.putChar((char) 1); } - @Test(expectedExceptions = UnsupportedOperationException.class) + @Test(expectedExceptions = { IllegalArgumentException.class, UnsupportedOperationException.class }) public void testPutInt() { buf.setPosition(0); buf.putInt(0, 1); } - @Test(expectedExceptions = UnsupportedOperationException.class) + @Test(expectedExceptions = { IllegalArgumentException.class, UnsupportedOperationException.class }) public void testPutIntPositional() { buf.setPosition(0); buf.putInt(1); } - @Test(expectedExceptions = UnsupportedOperationException.class) + @Test(expectedExceptions = { IllegalArgumentException.class, UnsupportedOperationException.class }) public void testPutLong() { buf.setPosition(0); buf.putLong(0, 1); } - @Test(expectedExceptions = UnsupportedOperationException.class) + @Test(expectedExceptions = { IllegalArgumentException.class, UnsupportedOperationException.class }) public void testPutLongPositional() { buf.setPosition(0); buf.putLong(1); } - @Test(expectedExceptions = UnsupportedOperationException.class) + @Test(expectedExceptions = { IllegalArgumentException.class, UnsupportedOperationException.class }) public void testPutFloat() { buf.setPosition(0); buf.putFloat(0, 1); } - @Test(expectedExceptions = UnsupportedOperationException.class) + @Test(expectedExceptions = { IllegalArgumentException.class, UnsupportedOperationException.class }) public void testPutFloatPositional() { buf.setPosition(0); buf.putFloat(1); } - @Test(expectedExceptions = UnsupportedOperationException.class) + @Test(expectedExceptions = { IllegalArgumentException.class, UnsupportedOperationException.class }) public void testPutDouble() { buf.setPosition(0); buf.putDouble(0, 1); } - @Test(expectedExceptions = UnsupportedOperationException.class) + @Test(expectedExceptions = { IllegalArgumentException.class, UnsupportedOperationException.class }) public void testPutDoublePositional() { buf.setPosition(0); buf.putDouble(1); } - @Test(expectedExceptions = UnsupportedOperationException.class) + @Test(expectedExceptions = { IllegalArgumentException.class, UnsupportedOperationException.class }) public void testPutByteArray() { buf.setPosition(0); buf.putByteArray(new byte[] {1}, 0, 1); } - @Test(expectedExceptions = UnsupportedOperationException.class) + @Test(expectedExceptions = { IllegalArgumentException.class, UnsupportedOperationException.class }) public void testPutShortArray() { buf.setPosition(0); buf.putShortArray(new short[] {1}, 0, 1); } - @Test(expectedExceptions = UnsupportedOperationException.class) + @Test(expectedExceptions = { IllegalArgumentException.class, UnsupportedOperationException.class }) public void testPutCharArray() { buf.setPosition(0); buf.putCharArray(new char[] {1}, 0, 1); } - @Test(expectedExceptions = UnsupportedOperationException.class) + @Test(expectedExceptions = { IllegalArgumentException.class, UnsupportedOperationException.class }) public void testPutIntArray() { buf.setPosition(0); buf.putIntArray(new int[] {1}, 0, 1); } - @Test(expectedExceptions = UnsupportedOperationException.class) + @Test(expectedExceptions = { IllegalArgumentException.class, UnsupportedOperationException.class }) public void testPutLongArray() { buf.setPosition(0); buf.putLongArray(new long[] {1}, 0, 1); } - @Test(expectedExceptions = UnsupportedOperationException.class) + @Test(expectedExceptions = { IllegalArgumentException.class, UnsupportedOperationException.class }) public void testPutFloatArray() { buf.setPosition(0); buf.putFloatArray(new float[] {1}, 0, 1); } - @Test(expectedExceptions = UnsupportedOperationException.class) + @Test(expectedExceptions = { IllegalArgumentException.class, UnsupportedOperationException.class }) public void testDoubleByteArray() { buf.setPosition(0); buf.putDoubleArray(new double[] {1}, 0, 1); @@ -160,19 +160,19 @@ public void testDoubleByteArray() { // Now, test that various ways to obtain a read-only buffer produce a read-only buffer indeed - @Test(expectedExceptions = UnsupportedOperationException.class) + @Test(expectedExceptions = { IllegalArgumentException.class, UnsupportedOperationException.class }) public void testWritableMemoryAsBuffer() { WritableBuffer buf1 = (WritableBuffer) WritableMemory.allocate(8).asBuffer(); buf1.putInt(1); } - @Test(expectedExceptions = UnsupportedOperationException.class) + @Test(expectedExceptions = { IllegalArgumentException.class, UnsupportedOperationException.class }) public void testWritableBufferRegion() { WritableBuffer buf1 = (WritableBuffer) WritableMemory.allocate(8).asWritableBuffer().region(); buf1.putInt(1); } - @Test(expectedExceptions = UnsupportedOperationException.class) + @Test(expectedExceptions = { IllegalArgumentException.class, UnsupportedOperationException.class }) public void testWritableBufferDuplicate() { WritableBuffer buf1 = (WritableBuffer) WritableMemory.allocate(8).asWritableBuffer().duplicate(); buf1.putInt(1); diff --git a/src/test/java/org/apache/datasketches/memory/internal/MemoryReadWriteSafetyTest.java b/src/test/java/org/apache/datasketches/memory/internal/MemoryReadWriteSafetyTest.java index 25a54eb1..cdcedf2b 100644 --- a/src/test/java/org/apache/datasketches/memory/internal/MemoryReadWriteSafetyTest.java +++ b/src/test/java/org/apache/datasketches/memory/internal/MemoryReadWriteSafetyTest.java @@ -19,6 +19,11 @@ package org.apache.datasketches.memory.internal; +import org.apache.datasketches.memory.Memory; +import org.apache.datasketches.memory.WritableMemory; +import org.testng.annotations.BeforeClass; +import org.testng.annotations.Test; + import java.io.File; import java.io.IOException; import java.io.RandomAccessFile; @@ -26,13 +31,6 @@ import java.nio.ByteBuffer; import java.nio.ByteOrder; -import org.apache.datasketches.memory.Memory; -import org.apache.datasketches.memory.WritableMemory; -import org.testng.annotations.Test; - -import org.testng.annotations.AfterClass; -import org.testng.annotations.BeforeClass; - public class MemoryReadWriteSafetyTest { // Test various operations with read-only Memory @@ -49,145 +47,145 @@ public void allocate() { // mem.close(); // } - @Test(expectedExceptions = UnsupportedOperationException.class) + @Test(expectedExceptions = { IllegalArgumentException.class, UnsupportedOperationException.class }) public void testPutByte() { mem.putByte(0, (byte) 1); } - @Test(expectedExceptions = UnsupportedOperationException.class) + @Test(expectedExceptions = { IllegalArgumentException.class, UnsupportedOperationException.class }) public void testPutShort() { mem.putShort(0, (short) 1); } - @Test(expectedExceptions = UnsupportedOperationException.class) + @Test(expectedExceptions = { IllegalArgumentException.class, UnsupportedOperationException.class }) public void testPutChar() { mem.putChar(0, (char) 1); } - @Test(expectedExceptions = UnsupportedOperationException.class) + @Test(expectedExceptions = { IllegalArgumentException.class, UnsupportedOperationException.class }) public void testPutInt() { mem.putInt(0, 1); } - @Test(expectedExceptions = UnsupportedOperationException.class) + @Test(expectedExceptions = { IllegalArgumentException.class, UnsupportedOperationException.class }) public void testPutLong() { mem.putLong(0, 1); } - @Test(expectedExceptions = UnsupportedOperationException.class) + @Test(expectedExceptions = { IllegalArgumentException.class, UnsupportedOperationException.class }) public void testPutFloat() { mem.putFloat(0, 1); } - @Test(expectedExceptions = UnsupportedOperationException.class) + @Test(expectedExceptions = { IllegalArgumentException.class, UnsupportedOperationException.class }) public void testPutDouble() { mem.putDouble(0, 1); } - @Test(expectedExceptions = UnsupportedOperationException.class) + @Test(expectedExceptions = { IllegalArgumentException.class, UnsupportedOperationException.class }) public void testPutByteArray() { mem.putByteArray(0, new byte[] {1}, 0, 1); } - @Test(expectedExceptions = UnsupportedOperationException.class) + @Test(expectedExceptions = { IllegalArgumentException.class, UnsupportedOperationException.class }) public void testPutShortArray() { mem.putShortArray(0, new short[] {1}, 0, 1); } - @Test(expectedExceptions = UnsupportedOperationException.class) + @Test(expectedExceptions = { IllegalArgumentException.class, UnsupportedOperationException.class }) public void testPutCharArray() { mem.putCharArray(0, new char[] {1}, 0, 1); } - @Test(expectedExceptions = UnsupportedOperationException.class) + @Test(expectedExceptions = { IllegalArgumentException.class, UnsupportedOperationException.class }) public void testPutIntArray() { mem.putIntArray(0, new int[] {1}, 0, 1); } - @Test(expectedExceptions = UnsupportedOperationException.class) + @Test(expectedExceptions = { IllegalArgumentException.class, UnsupportedOperationException.class }) public void testPutLongArray() { mem.putLongArray(0, new long[] {1}, 0, 1); } - @Test(expectedExceptions = UnsupportedOperationException.class) + @Test(expectedExceptions = { IllegalArgumentException.class, UnsupportedOperationException.class }) public void testPutFloatArray() { mem.putFloatArray(0, new float[] {1}, 0, 1); } - @Test(expectedExceptions = UnsupportedOperationException.class) + @Test(expectedExceptions = { IllegalArgumentException.class, UnsupportedOperationException.class }) public void testDoubleByteArray() { mem.putDoubleArray(0, new double[] {1}, 0, 1); } // Now, test that various ways to obtain a read-only memory produce a read-only memory indeed - @Test(expectedExceptions = UnsupportedOperationException.class) + @Test(expectedExceptions = { IllegalArgumentException.class, UnsupportedOperationException.class }) public void testWritableMemoryRegion() { WritableMemory mem1 = (WritableMemory) WritableMemory.allocate(8).region(0, 8); mem1.putInt(0, 1); } - @Test(expectedExceptions = UnsupportedOperationException.class) + @Test(expectedExceptions = { IllegalArgumentException.class, UnsupportedOperationException.class }) public void testByteArrayWrap() { WritableMemory mem1 = (WritableMemory) Memory.wrap(new byte[8]); mem1.putInt(0, 1); } - @Test(expectedExceptions = UnsupportedOperationException.class) + @Test(expectedExceptions = { IllegalArgumentException.class, UnsupportedOperationException.class }) public void testByteArrayWrapWithBO() { WritableMemory mem1 = (WritableMemory) Memory.wrap(new byte[8], ByteOrder.nativeOrder()); mem1.putInt(0, 1); } - @Test(expectedExceptions = UnsupportedOperationException.class) + @Test(expectedExceptions = { IllegalArgumentException.class, UnsupportedOperationException.class }) public void testByteArrayWrapWithOffsetsAndBO() { WritableMemory mem1 = (WritableMemory) Memory.wrap(new byte[8], 0, 4, ByteOrder.nativeOrder()); mem1.putInt(0, 1); } - @Test(expectedExceptions = UnsupportedOperationException.class) + @Test(expectedExceptions = { IllegalArgumentException.class, UnsupportedOperationException.class }) public void testShortArrayWrap() { WritableMemory mem1 = (WritableMemory) Memory.wrap(new short[8]); mem1.putInt(0, 1); } - @Test(expectedExceptions = UnsupportedOperationException.class) + @Test(expectedExceptions = { IllegalArgumentException.class, UnsupportedOperationException.class }) public void testCharArrayWrap() { WritableMemory mem1 = (WritableMemory) Memory.wrap(new char[8]); mem1.putInt(0, 1); } - @Test(expectedExceptions = UnsupportedOperationException.class) + @Test(expectedExceptions = { IllegalArgumentException.class, UnsupportedOperationException.class }) public void testIntArrayWrap() { WritableMemory mem1 = (WritableMemory) Memory.wrap(new int[8]); mem1.putInt(0, 1); } - @Test(expectedExceptions = UnsupportedOperationException.class) + @Test(expectedExceptions = { IllegalArgumentException.class, UnsupportedOperationException.class }) public void testLongArrayWrap() { WritableMemory mem1 = (WritableMemory) Memory.wrap(new long[8]); mem1.putInt(0, 1); } - @Test(expectedExceptions = UnsupportedOperationException.class) + @Test(expectedExceptions = { IllegalArgumentException.class, UnsupportedOperationException.class }) public void testFloatArrayWrap() { WritableMemory mem1 = (WritableMemory) Memory.wrap(new float[8]); mem1.putInt(0, 1); } - @Test(expectedExceptions = UnsupportedOperationException.class) + @Test(expectedExceptions = { IllegalArgumentException.class, UnsupportedOperationException.class }) public void testDoubleArrayWrap() { WritableMemory mem1 = (WritableMemory) Memory.wrap(new double[8]); mem1.putInt(0, 1); } - @Test(expectedExceptions = UnsupportedOperationException.class) + @Test(expectedExceptions = { IllegalArgumentException.class, UnsupportedOperationException.class }) public void testByteBufferWrap() { WritableMemory mem1 = (WritableMemory) Memory.wrap(ByteBuffer.allocate(8)); mem1.putInt(0, 1); } - @Test(expectedExceptions = UnsupportedOperationException.class) + @Test(expectedExceptions = { IllegalArgumentException.class, UnsupportedOperationException.class }) public void testMapFile() throws Exception { File tempFile = File.createTempFile("test", null); tempFile.deleteOnExit(); @@ -202,7 +200,7 @@ public void testMapFile() throws Exception { } @SuppressWarnings("resource") - @Test(expectedExceptions = UnsupportedOperationException.class) + @Test(expectedExceptions = { IllegalArgumentException.class, UnsupportedOperationException.class }) public void testMapFileWithOffsetsAndBO() throws Exception { File tempFile = File.createTempFile("test", "test"); tempFile.deleteOnExit(); diff --git a/src/test/java/org/apache/datasketches/memory/internal/ResourceTest.java b/src/test/java/org/apache/datasketches/memory/internal/ResourceTest.java index 5be59c85..0931960a 100644 --- a/src/test/java/org/apache/datasketches/memory/internal/ResourceTest.java +++ b/src/test/java/org/apache/datasketches/memory/internal/ResourceTest.java @@ -19,24 +19,14 @@ package org.apache.datasketches.memory.internal; -import java.lang.foreign.Arena; -import static org.testng.Assert.assertEquals; -import static org.testng.Assert.assertFalse; -import static org.testng.Assert.assertTrue; -import static org.testng.Assert.fail; -import static java.lang.foreign.ValueLayout.JAVA_BYTE; +import org.apache.datasketches.memory.*; +import org.testng.annotations.Test; +import java.lang.foreign.Arena; import java.lang.foreign.MemorySegment; -import java.lang.foreign.ValueLayout; -import java.lang.foreign.ValueLayout.OfByte; import java.nio.ByteOrder; -import org.apache.datasketches.memory.Buffer; -import org.apache.datasketches.memory.Memory; -import org.apache.datasketches.memory.MemoryRequestServer; -import org.apache.datasketches.memory.Resource; -import org.apache.datasketches.memory.WritableMemory; -import org.testng.annotations.Test; +import static org.testng.Assert.*; public class ResourceTest { private static final MemoryRequestServer memReqSvr = Resource.defaultMemReqSvr; @@ -208,8 +198,7 @@ public void checkParseJavaVersion() { ResourceImpl.parseJavaVersion("20"); fail(); } catch (IllegalArgumentException e) { } - ResourceImpl.parseJavaVersion("21"); - ResourceImpl.parseJavaVersion("22"); + ResourceImpl.parseJavaVersion("25"); } @Test diff --git a/src/test/java/org/apache/datasketches/memory/internal/WritableMemoryTest.java b/src/test/java/org/apache/datasketches/memory/internal/WritableMemoryTest.java index 0305f8cf..1c4dac95 100644 --- a/src/test/java/org/apache/datasketches/memory/internal/WritableMemoryTest.java +++ b/src/test/java/org/apache/datasketches/memory/internal/WritableMemoryTest.java @@ -19,17 +19,15 @@ package org.apache.datasketches.memory.internal; -import static org.testng.Assert.assertEquals; -import static org.testng.Assert.assertFalse; -import static org.testng.Assert.assertTrue; +import org.apache.datasketches.memory.Memory; +import org.apache.datasketches.memory.WritableMemory; +import org.testng.annotations.Test; import java.nio.ByteBuffer; import java.nio.ByteOrder; import java.util.concurrent.ThreadLocalRandom; -import org.apache.datasketches.memory.Memory; -import org.apache.datasketches.memory.WritableMemory; -import org.testng.annotations.Test; +import static org.testng.Assert.*; public class WritableMemoryTest { @@ -166,7 +164,8 @@ public void checkOwnerClientCase() { Memory client2 = owner.region(0, owner.getCapacity()); //create a readOnly region (MemorySegment) from owner try { ((WritableMemory) client2).putInt(0, 3); //now you cannot make client2 writable - } catch (UnsupportedOperationException e) { } + } + catch (UnsupportedOperationException | IllegalArgumentException e) { } } @Test From ba73e166fd1db89bc7d643d6a522432fdebd6bb6 Mon Sep 17 00:00:00 2001 From: Okapist Date: Sun, 5 Oct 2025 21:06:34 +0300 Subject: [PATCH 2/2] migrate to jdk25 --- .../internal/AllocateDirectMapMemoryTest.java | 14 ++++---- .../AllocateDirectWritableMapMemoryTest.java | 36 +++++++++---------- .../memory/internal/MemoryTest.java | 33 ++++++++--------- .../memory/internal/UtilTest.java | 14 +++++--- 4 files changed, 48 insertions(+), 49 deletions(-) diff --git a/src/test/java/org/apache/datasketches/memory/internal/AllocateDirectMapMemoryTest.java b/src/test/java/org/apache/datasketches/memory/internal/AllocateDirectMapMemoryTest.java index 07c6f108..a356477b 100644 --- a/src/test/java/org/apache/datasketches/memory/internal/AllocateDirectMapMemoryTest.java +++ b/src/test/java/org/apache/datasketches/memory/internal/AllocateDirectMapMemoryTest.java @@ -23,20 +23,17 @@ package org.apache.datasketches.memory.internal; -import static org.apache.datasketches.memory.internal.ResourceImpl.LS; -import static org.apache.datasketches.memory.internal.Util.getResourceFile; -import static org.testng.Assert.assertEquals; -import static org.testng.Assert.assertFalse; -import static org.testng.Assert.assertTrue; -import static org.testng.Assert.fail; +import org.apache.datasketches.memory.Memory; +import org.testng.annotations.Test; import java.io.File; import java.io.IOException; import java.lang.foreign.Arena; import java.nio.ByteOrder; -import org.apache.datasketches.memory.Memory; -import org.testng.annotations.Test; +import static org.apache.datasketches.memory.internal.ResourceImpl.LS; +import static org.apache.datasketches.memory.internal.Util.getResourceFile; +import static org.testng.Assert.*; public class AllocateDirectMapMemoryTest { @@ -50,6 +47,7 @@ public void simpleMap() throws IOException { } //The Try-With-Resources will throw since it is already closed catch (IllegalStateException e) { /* OK */ } if (mem != null) { assertFalse(mem.isAlive()); } + UtilTest.setGettysburgAddressFileToReadWrite(); } @Test diff --git a/src/test/java/org/apache/datasketches/memory/internal/AllocateDirectWritableMapMemoryTest.java b/src/test/java/org/apache/datasketches/memory/internal/AllocateDirectWritableMapMemoryTest.java index 38e0fc15..31981d6e 100644 --- a/src/test/java/org/apache/datasketches/memory/internal/AllocateDirectWritableMapMemoryTest.java +++ b/src/test/java/org/apache/datasketches/memory/internal/AllocateDirectWritableMapMemoryTest.java @@ -23,38 +23,38 @@ package org.apache.datasketches.memory.internal; -import static java.nio.charset.StandardCharsets.UTF_8; -import static org.apache.datasketches.memory.internal.ResourceImpl.LS; -import static org.apache.datasketches.memory.internal.ResourceImpl.NON_NATIVE_BYTE_ORDER; -import static org.apache.datasketches.memory.internal.Util.getResourceFile; -import static org.testng.Assert.assertEquals; -import static org.testng.Assert.assertFalse; -import static org.testng.Assert.assertTrue; - -import java.io.File; -import java.io.FileNotFoundException; -import java.io.IOException; -import java.io.PrintWriter; -import java.io.UnsupportedEncodingException; -import java.lang.foreign.Arena; -import java.nio.ByteOrder; -import java.nio.file.InvalidPathException; - import org.apache.datasketches.memory.Memory; import org.apache.datasketches.memory.MemoryRequestServer; import org.apache.datasketches.memory.Resource; import org.apache.datasketches.memory.WritableMemory; +import org.testng.annotations.AfterClass; import org.testng.annotations.BeforeClass; import org.testng.annotations.Test; +import java.io.*; +import java.lang.foreign.Arena; +import java.nio.ByteOrder; +import java.nio.file.InvalidPathException; + +import static java.nio.charset.StandardCharsets.UTF_8; +import static org.apache.datasketches.memory.internal.ResourceImpl.LS; +import static org.apache.datasketches.memory.internal.ResourceImpl.NON_NATIVE_BYTE_ORDER; +import static org.apache.datasketches.memory.internal.Util.getResourceFile; +import static org.testng.Assert.*; + public class AllocateDirectWritableMapMemoryTest { private final MemoryRequestServer memReqSvr = Resource.defaultMemReqSvr; @BeforeClass - public void setReadOnly() throws IOException { + public void setReadOnly() { UtilTest.setGettysburgAddressFileToReadOnly(); } + @AfterClass + public void clearReadOnly() { + UtilTest.setGettysburgAddressFileToReadWrite(); + } + @Test public void simpleMap() throws IllegalArgumentException, InvalidPathException, IllegalStateException, UnsupportedOperationException, IOException, SecurityException { diff --git a/src/test/java/org/apache/datasketches/memory/internal/MemoryTest.java b/src/test/java/org/apache/datasketches/memory/internal/MemoryTest.java index 86f8fa68..3bf8f22a 100644 --- a/src/test/java/org/apache/datasketches/memory/internal/MemoryTest.java +++ b/src/test/java/org/apache/datasketches/memory/internal/MemoryTest.java @@ -23,38 +23,33 @@ package org.apache.datasketches.memory.internal; -import static org.apache.datasketches.memory.internal.ResourceImpl.LS; -import static org.apache.datasketches.memory.internal.ResourceImpl.NATIVE_BYTE_ORDER; -import static org.apache.datasketches.memory.internal.ResourceImpl.NON_NATIVE_BYTE_ORDER; -import static org.testng.Assert.assertEquals; -import static org.testng.Assert.assertFalse; -import static org.testng.Assert.assertNotNull; -import static org.testng.Assert.assertNull; -import static org.testng.Assert.assertTrue; - -import java.io.IOException; +import org.apache.datasketches.memory.*; +import org.testng.annotations.AfterClass; +import org.testng.annotations.BeforeClass; +import org.testng.annotations.Test; +import org.testng.collections.Lists; + import java.lang.foreign.Arena; import java.nio.ByteBuffer; import java.nio.ByteOrder; import java.util.List; -import org.apache.datasketches.memory.Memory; -import org.apache.datasketches.memory.MemoryRequestServer; -import org.apache.datasketches.memory.Resource; -import org.apache.datasketches.memory.WritableBuffer; -import org.apache.datasketches.memory.WritableMemory; -import org.testng.annotations.BeforeClass; -import org.testng.annotations.Test; -import org.testng.collections.Lists; +import static org.apache.datasketches.memory.internal.ResourceImpl.*; +import static org.testng.Assert.*; public class MemoryTest { final MemoryRequestServer myMemReqSvr = Resource.defaultMemReqSvr; @BeforeClass - public void setReadOnly() throws IOException { + public void setReadOnly() { UtilTest.setGettysburgAddressFileToReadOnly(); } + @AfterClass + public void clearReadOnly() { + UtilTest.setGettysburgAddressFileToReadWrite(); + } + @Test public void checkDirectRoundTrip() throws Exception { int n = 1024; //longs diff --git a/src/test/java/org/apache/datasketches/memory/internal/UtilTest.java b/src/test/java/org/apache/datasketches/memory/internal/UtilTest.java index de276e9f..02f531d4 100644 --- a/src/test/java/org/apache/datasketches/memory/internal/UtilTest.java +++ b/src/test/java/org/apache/datasketches/memory/internal/UtilTest.java @@ -23,9 +23,7 @@ package org.apache.datasketches.memory.internal; -import static java.nio.file.Files.readString; -import static org.apache.datasketches.memory.internal.Util.getResourceFile; -import static org.testng.Assert.assertTrue; +import org.testng.annotations.Test; import java.io.File; import java.io.IOException; @@ -35,7 +33,9 @@ import java.nio.file.attribute.PosixFileAttributes; import java.nio.file.attribute.PosixFilePermissions; -import org.testng.annotations.Test; +import static java.nio.file.Files.readString; +import static org.apache.datasketches.memory.internal.Util.getResourceFile; +import static org.testng.Assert.assertTrue; public class UtilTest { @@ -56,6 +56,12 @@ static final File setGettysburgAddressFileToReadOnly() { return file; } + static final File setGettysburgAddressFileToReadWrite() { + File file = getResourceFile("GettysburgAddress.txt"); + if (!file.setWritable(true)) { throw new IllegalStateException("File could not set Read-Only"); } + return file; + } + //Resources @Test