This is an automated email from the ASF dual-hosted git repository.

afs pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/jena.git

commit 727e351402acfe8c4deef7b1834db86057bac450
Author: Andy Seaborne <[email protected]>
AuthorDate: Sun Aug 2 17:26:29 2026 +0100

    GH-4084: ByteBufferPool test with Fuseki request
---
 .../jena/fuseki/main/TestFusekiServerBuild.java    | 47 +++++++++++++---------
 1 file changed, 28 insertions(+), 19 deletions(-)

diff --git 
a/jena-fuseki2/jena-fuseki-main/src/test/java/org/apache/jena/fuseki/main/TestFusekiServerBuild.java
 
b/jena-fuseki2/jena-fuseki-main/src/test/java/org/apache/jena/fuseki/main/TestFusekiServerBuild.java
index 1cf0eade9f..9be9056ad3 100644
--- 
a/jena-fuseki2/jena-fuseki-main/src/test/java/org/apache/jena/fuseki/main/TestFusekiServerBuild.java
+++ 
b/jena-fuseki2/jena-fuseki-main/src/test/java/org/apache/jena/fuseki/main/TestFusekiServerBuild.java
@@ -25,11 +25,14 @@ import static 
org.apache.jena.fuseki.main.FusekiTestLib.expect400;
 import static org.apache.jena.fuseki.main.FusekiTestLib.expect404;
 import static org.apache.jena.fuseki.main.FusekiTestLib.expectQuery400;
 import static org.apache.jena.fuseki.main.FusekiTestLib.expectQuery404;
+import static 
org.apache.jena.fuseki.main.sys.FusekiSystemConstants.jettyOutputBufferSize;
 import static org.junit.jupiter.api.Assertions.*;
 
 import java.io.IOException;
 import java.util.function.Consumer;
 
+import org.junit.jupiter.api.Test;
+
 import jakarta.servlet.ServletContext;
 import org.apache.jena.atlas.iterator.Iter;
 import org.apache.jena.atlas.logging.Log;
@@ -37,6 +40,7 @@ import org.apache.jena.atlas.logging.LogCtl;
 import org.apache.jena.atlas.web.TypedInputStream;
 import org.apache.jena.fuseki.Fuseki;
 import org.apache.jena.fuseki.FusekiException;
+import org.apache.jena.fuseki.main.runner.FusekiRunner;
 import org.apache.jena.fuseki.server.DataAccessPointRegistry;
 import org.apache.jena.fuseki.server.DataService;
 import org.apache.jena.fuseki.server.Operation;
@@ -54,13 +58,11 @@ import org.apache.jena.sparql.exec.RowSet;
 import org.apache.jena.sparql.exec.http.GSP;
 import org.apache.jena.sparql.exec.http.QueryExecHTTP;
 import org.apache.jena.sparql.sse.SSE;
-import org.apache.jena.fuseki.main.sys.FusekiSystemConstants;
 import org.apache.jena.system.Txn;
 import org.apache.jena.update.UpdateExecution;
 import org.eclipse.jetty.io.ArrayByteBufferPool;
 import org.eclipse.jetty.io.RetainableByteBuffer;
 import org.eclipse.jetty.server.Server;
-import org.junit.jupiter.api.Test;
 import org.slf4j.Logger;
 
 public class TestFusekiServerBuild {
@@ -91,32 +93,39 @@ public class TestFusekiServerBuild {
 
     @Test public void fuseki_build_byte_buffer_pool() {
         FusekiServer server = FusekiServer.create().port(0).build();
+        // Not started.
         Server jettyServer = server.getJettyServer();
         ArrayByteBufferPool pool = 
jettyServer.getBean(ArrayByteBufferPool.class);
         assertNotNull(pool);
-        assertTrue(pool.getMaxCapacity() >= 
FusekiSystemConstants.jettyOutputBufferSize);
-    }
-
-    @Test public void fuseki_build_byte_buffer_pool_no_bucket_acquire() {
-        FusekiServer server = FusekiServer.create().port(0).build();
-        Server jettyServer = server.getJettyServer();
-        ArrayByteBufferPool pool = 
jettyServer.getBean(ArrayByteBufferPool.class);
+        assertTrue(pool.getMaxCapacity() >= jettyOutputBufferSize);
 
-        int size = FusekiSystemConstants.jettyOutputBufferSize;
-        RetainableByteBuffer.Mutable buffer = pool.acquire(size, true);
+        RetainableByteBuffer.Mutable buffer = 
pool.acquire(jettyOutputBufferSize, true);
+        assertNotNull(buffer);
         buffer.release();
-
-        assertTrue(pool.getNoBucketDirectAcquires().isEmpty());
     }
 
-    @Test public void 
byte_buffer_pool_default_capacity_fails_no_bucket_check() {
-        ArrayByteBufferPool defaultPool = new ArrayByteBufferPool();
-        int size = FusekiSystemConstants.jettyOutputBufferSize;
+    @Test public void fuseki_byte_buffer_pool_request() {
+        FusekiServer server = FusekiRunner.serverBasic().construct("--port=0", 
"--mem", "/ds").start();
+        try {
+            String URL = server.datasetURL("/ds");
+
+            Server jettyServer = server.getJettyServer();
+            ArrayByteBufferPool pool = 
jettyServer.getBean(ArrayByteBufferPool.class);
+            assertTrue(pool.getMaxCapacity() >= jettyOutputBufferSize);
 
-        RetainableByteBuffer.Mutable buffer = defaultPool.acquire(size, true);
-        buffer.release();
+            // Before - nothing in the pool for a Fuseki-sized direct 
ByteBuffer.
+            int poolSizeBefore = pool.poolFor(jettyOutputBufferSize, 
true/*direct*/).size();
+            assertEquals(0, poolSizeBefore);
 
-        assertFalse(defaultPool.getNoBucketDirectAcquires().isEmpty());
+            // The request causes a new ArrayByteBufferPool item which is 
returned and then pooled.
+            QueryExec.service(URL).query("ASK{}").ask();
+
+            // After - one item in the pool
+            int poolSizeAfter = pool.poolFor(jettyOutputBufferSize, 
true).size();
+            assertEquals(1, poolSizeAfter);
+        } finally {
+            server.stop();
+        }
     }
 
     // The port in "testing/jetty.xml" is 1077

Reply via email to