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

joscorbe pushed a commit to branch OAK-11835
in repository https://gitbox.apache.org/repos/asf/jackrabbit-oak.git

commit 5a4bea300412c25d8e727543b2fbab38f1345205
Author: Jose Cordero <corde...@adobe.com>
AuthorDate: Tue Aug 5 04:11:14 2025 +0200

    OAK-11835: Added some test cases
---
 .../mongo/MongoDocumentNodeStoreBuilderBase.java   |   1 -
 .../DocumentNodeStoreServiceConfigurationTest.java |  85 +++++++++
 .../mongo/MongoConnectionPoolSettingsTest.java     | 193 +++++++++++++++++++++
 3 files changed, 278 insertions(+), 1 deletion(-)

diff --git 
a/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/mongo/MongoDocumentNodeStoreBuilderBase.java
 
b/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/mongo/MongoDocumentNodeStoreBuilderBase.java
index 1828a780ea..f561cb4959 100644
--- 
a/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/mongo/MongoDocumentNodeStoreBuilderBase.java
+++ 
b/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/mongo/MongoDocumentNodeStoreBuilderBase.java
@@ -164,7 +164,6 @@ public abstract class MongoDocumentNodeStoreBuilderBase<T 
extends MongoDocumentN
      * @return this builder.
      */
     public T setLeaseSocketTimeout(int timeoutMillis) {
-
         this.leaseSocketTimeout = timeoutMillis;
         return thisBuilder();
     }
diff --git 
a/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStoreServiceConfigurationTest.java
 
b/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStoreServiceConfigurationTest.java
index c0d587e3da..d2eaf2d9d4 100644
--- 
a/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStoreServiceConfigurationTest.java
+++ 
b/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStoreServiceConfigurationTest.java
@@ -363,6 +363,91 @@ public class DocumentNodeStoreServiceConfigurationTest {
         assertEquals(60000L, config.recoveryDelayMillis());
     }
 
+    @Test
+    public void mongoConnectionPoolDefaults() throws IOException {
+        Configuration config = createConfiguration();
+        
+        // Verify MongoDB connection pool defaults match MongoDB Java Driver 
defaults
+        assertEquals(100, config.mongoMaxPoolSize());
+        assertEquals(0, config.mongoMinPoolSize());
+        assertEquals(2, config.mongoMaxConnecting());
+        assertEquals(0, config.mongoMaxIdleTimeMS());
+        assertEquals(0, config.mongoMaxLifeTimeMS());
+        assertEquals(60000, config.mongoWaitQueueTimeoutMS());
+        assertEquals(10000, config.mongoConnectTimeoutMS());
+        assertEquals(0, config.mongoReadTimeoutMS());
+        assertEquals(5000, config.mongoHeartbeatFrequencyMS());
+        assertEquals(500, config.mongoMinHeartbeatFrequencyMS());
+        assertEquals(30000, config.mongoServerSelectionTimeoutMS());
+    }
+    
+    @Test
+    public void mongoConnectionPoolCustomValues() throws IOException {
+        // Set custom values for all MongoDB connection pool parameters
+        addConfigurationEntry(preset, "mongoMaxPoolSize", 50);
+        addConfigurationEntry(preset, "mongoMinPoolSize", 5);
+        addConfigurationEntry(preset, "mongoMaxConnecting", 3);
+        addConfigurationEntry(preset, "mongoMaxIdleTimeMS", 60000);
+        addConfigurationEntry(preset, "mongoMaxLifeTimeMS", 300000);
+        addConfigurationEntry(preset, "mongoWaitQueueTimeoutMS", 30000);
+        addConfigurationEntry(preset, "mongoConnectTimeoutMS", 5000);
+        addConfigurationEntry(preset, "mongoReadTimeoutMS", 20000);
+        addConfigurationEntry(preset, "mongoHeartbeatFrequencyMS", 15000);
+        addConfigurationEntry(preset, "mongoMinHeartbeatFrequencyMS", 1000);
+        addConfigurationEntry(preset, "mongoServerSelectionTimeoutMS", 10000);
+        
+        Configuration config = createConfiguration();
+        
+        // Verify custom values are properly applied
+        assertEquals(50, config.mongoMaxPoolSize());
+        assertEquals(5, config.mongoMinPoolSize());
+        assertEquals(3, config.mongoMaxConnecting());
+        assertEquals(60000, config.mongoMaxIdleTimeMS());
+        assertEquals(300000, config.mongoMaxLifeTimeMS());
+        assertEquals(30000, config.mongoWaitQueueTimeoutMS());
+        assertEquals(5000, config.mongoConnectTimeoutMS());
+        assertEquals(20000, config.mongoReadTimeoutMS());
+        assertEquals(15000, config.mongoHeartbeatFrequencyMS());
+        assertEquals(1000, config.mongoMinHeartbeatFrequencyMS());
+        assertEquals(10000, config.mongoServerSelectionTimeoutMS());
+    }
+    
+    @Test
+    public void mongoConnectionPoolZeroValues() throws IOException {
+        // Test zero values (should be allowed for "unlimited/disabled" 
semantics)
+        addConfigurationEntry(preset, "mongoMaxIdleTimeMS", 0);
+        addConfigurationEntry(preset, "mongoMaxLifeTimeMS", 0);
+        addConfigurationEntry(preset, "mongoConnectTimeoutMS", 0);
+        addConfigurationEntry(preset, "mongoReadTimeoutMS", 0);
+        addConfigurationEntry(preset, "mongoServerSelectionTimeoutMS", 0);
+        
+        Configuration config = createConfiguration();
+        
+        // Verify zero values are preserved (disabled/unlimited timeouts)
+        assertEquals(0, config.mongoMaxIdleTimeMS());
+        assertEquals(0, config.mongoMaxLifeTimeMS());
+        assertEquals(0, config.mongoConnectTimeoutMS());
+        assertEquals(0, config.mongoReadTimeoutMS());
+        assertEquals(0, config.mongoServerSelectionTimeoutMS());
+    }
+
+    @Test
+    public void mongoConnectionPoolSettingsIntegration() throws IOException {
+        // Set some custom MongoDB connection pool values
+        addConfigurationEntry(preset, "mongoMaxPoolSize", 50);
+        addConfigurationEntry(preset, "mongoReadTimeoutMS", 20000);
+        addConfigurationEntry(preset, "mongoConnectTimeoutMS", 5000);
+        addConfigurationEntry(preset, "mongoHeartbeatFrequencyMS", 15000);
+        
+        Configuration config = createConfiguration();
+        
+        // Verify the configuration values are read correctly
+        assertEquals(50, config.mongoMaxPoolSize());
+        assertEquals(20000, config.mongoReadTimeoutMS());
+        assertEquals(5000, config.mongoConnectTimeoutMS());
+        assertEquals(15000, config.mongoHeartbeatFrequencyMS());
+    }
+
     private Configuration createConfiguration() throws IOException {
         return DocumentNodeStoreServiceConfiguration.create(
                 context.componentContext(), configAdmin,
diff --git 
a/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/mongo/MongoConnectionPoolSettingsTest.java
 
b/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/mongo/MongoConnectionPoolSettingsTest.java
new file mode 100644
index 0000000000..9f9bcb4f28
--- /dev/null
+++ 
b/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/mongo/MongoConnectionPoolSettingsTest.java
@@ -0,0 +1,193 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.jackrabbit.oak.plugins.document.mongo;
+
+import com.mongodb.MongoClientSettings;
+import org.junit.Test;
+
+import java.lang.reflect.Field;
+import java.util.concurrent.TimeUnit;
+
+import static org.junit.Assert.*;
+
+/**
+ * Tests for MongoDB connection pool settings configuration.
+ * These are unit tests that verify MongoClientSettings are built correctly.
+ */
+public class MongoConnectionPoolSettingsTest {
+
+    /**
+     * Helper method to create a builder with URI and name set for testing,
+     * without actually connecting to MongoDB.
+     */
+    private MongoDocumentNodeStoreBuilder createTestBuilder() throws Exception 
{
+        MongoDocumentNodeStoreBuilder builder = new 
MongoDocumentNodeStoreBuilder();
+        
+        // Use reflection to set uri and name fields without connecting
+        Field uriField = 
MongoDocumentNodeStoreBuilderBase.class.getDeclaredField("uri");
+        uriField.setAccessible(true);
+        uriField.set(builder, "mongodb://localhost:27017");
+        
+        Field nameField = 
MongoDocumentNodeStoreBuilderBase.class.getDeclaredField("name");
+        nameField.setAccessible(true);
+        nameField.set(builder, "test");
+        
+        return builder;
+    }
+
+    @Test
+    public void testDefaultMongoClientSettings() throws Exception {
+        MongoDocumentNodeStoreBuilder builder = createTestBuilder();
+
+        // Test default connection (isLease = false)
+        MongoClientSettings settings = builder.buildMongoClientSettings(false);
+        assertNotNull(settings);
+        
+        // Verify default connection pool settings
+        assertEquals(100, settings.getConnectionPoolSettings().getMaxSize());
+        assertEquals(0, settings.getConnectionPoolSettings().getMinSize());
+        assertEquals(2, 
settings.getConnectionPoolSettings().getMaxConnecting());
+        
+        // Verify default socket settings
+        assertEquals(0, 
settings.getSocketSettings().getReadTimeout(TimeUnit.MILLISECONDS));
+        assertEquals(10000, 
settings.getSocketSettings().getConnectTimeout(TimeUnit.MILLISECONDS));
+        
+        // Verify default server settings
+        assertEquals(5000, 
settings.getServerSettings().getHeartbeatFrequency(TimeUnit.MILLISECONDS));
+        assertEquals(500, 
settings.getServerSettings().getMinHeartbeatFrequency(TimeUnit.MILLISECONDS));
+        
+        // Verify default cluster settings
+        assertEquals(30000, 
settings.getClusterSettings().getServerSelectionTimeout(TimeUnit.MILLISECONDS));
+    }
+
+    @Test
+    public void testCustomMongoClientSettings() throws Exception {
+        MongoDocumentNodeStoreBuilder builder = createTestBuilder()
+                // Set custom connection pool settings
+                .setMongoMaxPoolSize(57)
+                .setMongoMinPoolSize(13)
+                .setMongoMaxConnecting(7)
+                .setMongoMaxIdleTimeMS(61113)
+                .setMongoMaxLifeTimeMS(303030)
+                .setMongoWaitQueueTimeoutMS(41091)
+                // Set custom socket settings
+                .setMongoConnectTimeoutMS(5123)
+                .setMongoReadTimeoutMS(29011)
+                // Set custom server settings
+                .setMongoHeartbeatFrequencyMS(15013)
+                .setMongoMinHeartbeatFrequencyMS(1009)
+                // Set custom cluster settings
+                .setMongoServerSelectionTimeoutMS(10999);
+
+        // Test default connection (isLease = false)
+        MongoClientSettings settings = builder.buildMongoClientSettings(false);
+        
+        // Verify custom connection pool settings
+        assertEquals(57, settings.getConnectionPoolSettings().getMaxSize());
+        assertEquals(13, settings.getConnectionPoolSettings().getMinSize());
+        assertEquals(7, 
settings.getConnectionPoolSettings().getMaxConnecting());
+        assertEquals(61113, 
settings.getConnectionPoolSettings().getMaxConnectionIdleTime(TimeUnit.MILLISECONDS));
+        assertEquals(303030, 
settings.getConnectionPoolSettings().getMaxConnectionLifeTime(TimeUnit.MILLISECONDS));
+        assertEquals(41091, 
settings.getConnectionPoolSettings().getMaxWaitTime(TimeUnit.MILLISECONDS));
+        
+        // Verify custom socket settings
+        assertEquals(5123, 
settings.getSocketSettings().getConnectTimeout(TimeUnit.MILLISECONDS));
+        assertEquals(29011, 
settings.getSocketSettings().getReadTimeout(TimeUnit.MILLISECONDS));
+        
+        // Verify custom server settings
+        assertEquals(15013, 
settings.getServerSettings().getHeartbeatFrequency(TimeUnit.MILLISECONDS));
+        assertEquals(1009, 
settings.getServerSettings().getMinHeartbeatFrequency(TimeUnit.MILLISECONDS));
+        
+        // Verify custom cluster settings
+        assertEquals(10999, 
settings.getClusterSettings().getServerSelectionTimeout(TimeUnit.MILLISECONDS));
+    }
+
+    @Test
+    public void testLeaseConnectionSocketTimeout() throws Exception {
+        MongoDocumentNodeStoreBuilder builder = createTestBuilder()
+                .setMongoReadTimeoutMS(55001)  // Default connection timeout
+                .setLeaseSocketTimeout(33002); // Lease connection timeout
+
+        // Test default connection pool (isLease = false) - should use 
readTimeout
+        MongoClientSettings mainSettings = 
builder.buildMongoClientSettings(false);
+        assertEquals(55001, 
mainSettings.getSocketSettings().getReadTimeout(TimeUnit.MILLISECONDS));
+
+        // Test lease connection (isLease = true) - should use 
leaseSocketTimeout
+        MongoClientSettings leaseSettings = 
builder.buildMongoClientSettings(true);
+        assertEquals(33002, 
leaseSettings.getSocketSettings().getReadTimeout(TimeUnit.MILLISECONDS));
+    }
+
+    @Test
+    public void testZeroTimeoutValues() throws Exception {
+        MongoDocumentNodeStoreBuilder builder = createTestBuilder()
+                .setMongoMaxIdleTimeMS(0)           // Disabled
+                .setMongoMaxLifeTimeMS(0)           // Disabled
+                .setMongoConnectTimeoutMS(0)        // Disabled
+                .setMongoReadTimeoutMS(0)           // Disabled
+                .setMongoServerSelectionTimeoutMS(0); // Disabled
+
+        MongoClientSettings settings = builder.buildMongoClientSettings(false);
+        
+        // Verify zero values are preserved (unlimited/disabled timeouts)
+        assertEquals(0, 
settings.getConnectionPoolSettings().getMaxConnectionIdleTime(TimeUnit.MILLISECONDS));
+        assertEquals(0, 
settings.getConnectionPoolSettings().getMaxConnectionLifeTime(TimeUnit.MILLISECONDS));
+        assertEquals(0, 
settings.getSocketSettings().getConnectTimeout(TimeUnit.MILLISECONDS));
+        assertEquals(0, 
settings.getSocketSettings().getReadTimeout(TimeUnit.MILLISECONDS));
+        assertEquals(0, 
settings.getClusterSettings().getServerSelectionTimeout(TimeUnit.MILLISECONDS));
+    }
+
+    @Test
+    public void testMainConnectionWithoutReadTimeout() throws Exception {
+        MongoDocumentNodeStoreBuilder builder = createTestBuilder();
+        // Don't set readTimeout (should default to 0)
+
+        MongoClientSettings settings = builder.buildMongoClientSettings(false);
+        
+        // Main connection without explicit readTimeout should use 0 
(unlimited)
+        assertEquals(0, 
settings.getSocketSettings().getReadTimeout(TimeUnit.MILLISECONDS));
+    }
+
+    @Test
+    public void testLeaseConnectionWithDefaultTimeout() throws Exception {
+        MongoDocumentNodeStoreBuilder builder = createTestBuilder();
+        // Use default lease socket timeout (20000ms per 
DocumentNodeStoreService.DEFAULT_MONGO_LEASE_SO_TIMEOUT_MILLIS)
+
+        MongoClientSettings settings = builder.buildMongoClientSettings(true);
+        
+        // Lease connection should use default lease socket timeout 
+        assertEquals(60000, 
settings.getSocketSettings().getReadTimeout(TimeUnit.MILLISECONDS));
+    }
+
+    @Test
+    public void testBuilderSettersReturnCorrectValues() throws Exception {
+        MongoDocumentNodeStoreBuilder builder = createTestBuilder()
+                .setMongoMaxPoolSize(75)
+                .setMongoMinPoolSize(10)
+                .setMongoConnectTimeoutMS(15000);
+
+        // Test that setters return the builder itself
+        assertSame(builder, builder.setMongoMaxPoolSize(75));
+        
+        // Test that settings are applied correctly
+        MongoClientSettings settings = builder.buildMongoClientSettings(false);
+        assertEquals(75, settings.getConnectionPoolSettings().getMaxSize());
+        assertEquals(10, settings.getConnectionPoolSettings().getMinSize());
+        assertEquals(15000, 
settings.getSocketSettings().getConnectTimeout(TimeUnit.MILLISECONDS));
+    }
+} 
\ No newline at end of file

Reply via email to