diff --git a/app/client/cypress/fixtures/gitImport.json b/app/client/cypress/fixtures/gitImport.json index 1e09e17ba447..0e23e769600a 100644 --- a/app/client/cypress/fixtures/gitImport.json +++ b/app/client/cypress/fixtures/gitImport.json @@ -743,7 +743,7 @@ "userPermissions": [], "name": "DEFAULT_REST_DATASOURCE", "pluginId": "restapi-plugin", - "datasourceConfiguration": { "url": "hhttp://host.docker.internal:5001/v1/mock-api" }, + "datasourceConfiguration": { "url": "http://host.docker.internal:5001/v1/mock-api" }, "invalids": [], "messages": [], "isValid": true, diff --git a/app/server/appsmith-interfaces/pom.xml b/app/server/appsmith-interfaces/pom.xml index 83d43f4e569f..00ac85011d6b 100644 --- a/app/server/appsmith-interfaces/pom.xml +++ b/app/server/appsmith-interfaces/pom.xml @@ -65,8 +65,7 @@ org.springframework.data spring-data-mongodb - 4.0.0 - compile + provided @@ -127,7 +126,7 @@ commons-io commons-io - 2.7 + 2.13.0 compile diff --git a/app/server/appsmith-plugins/anthropicPlugin/pom.xml b/app/server/appsmith-plugins/anthropicPlugin/pom.xml index 5a863b84f775..58b09491e771 100644 --- a/app/server/appsmith-plugins/anthropicPlugin/pom.xml +++ b/app/server/appsmith-plugins/anthropicPlugin/pom.xml @@ -89,7 +89,6 @@ org.springframework.boot spring-boot-starter-webflux - ${spring-boot.version} test diff --git a/app/server/appsmith-plugins/appsmithAiPlugin/pom.xml b/app/server/appsmith-plugins/appsmithAiPlugin/pom.xml index aac406577ba0..b32c6ef5a7ac 100644 --- a/app/server/appsmith-plugins/appsmithAiPlugin/pom.xml +++ b/app/server/appsmith-plugins/appsmithAiPlugin/pom.xml @@ -82,7 +82,6 @@ org.springframework.boot spring-boot-starter-webflux - ${spring-boot.version} test diff --git a/app/server/appsmith-plugins/googleAiPlugin/pom.xml b/app/server/appsmith-plugins/googleAiPlugin/pom.xml index 9c8ba07e5c97..e0465720eca6 100644 --- a/app/server/appsmith-plugins/googleAiPlugin/pom.xml +++ b/app/server/appsmith-plugins/googleAiPlugin/pom.xml @@ -89,7 +89,6 @@ org.springframework.boot spring-boot-starter-webflux - ${spring-boot.version} test diff --git a/app/server/appsmith-plugins/googleSheetsPlugin/pom.xml b/app/server/appsmith-plugins/googleSheetsPlugin/pom.xml index c427e9f9409b..18e43347b6d7 100644 --- a/app/server/appsmith-plugins/googleSheetsPlugin/pom.xml +++ b/app/server/appsmith-plugins/googleSheetsPlugin/pom.xml @@ -107,7 +107,6 @@ org.springframework.boot spring-boot-starter-webflux - ${spring-boot.version} test diff --git a/app/server/appsmith-plugins/graphqlPlugin/pom.xml b/app/server/appsmith-plugins/graphqlPlugin/pom.xml index a7959f291eb6..18edfe50df55 100644 --- a/app/server/appsmith-plugins/graphqlPlugin/pom.xml +++ b/app/server/appsmith-plugins/graphqlPlugin/pom.xml @@ -133,7 +133,6 @@ org.springframework.boot spring-boot-starter-webflux - ${spring-boot.version} test diff --git a/app/server/appsmith-plugins/mongoPlugin/src/test/java/com/external/plugins/MongoPluginErrorsTest.java b/app/server/appsmith-plugins/mongoPlugin/src/test/java/com/external/plugins/MongoPluginErrorsTest.java index 035b9df192fb..6e5a2cdd0cf1 100644 --- a/app/server/appsmith-plugins/mongoPlugin/src/test/java/com/external/plugins/MongoPluginErrorsTest.java +++ b/app/server/appsmith-plugins/mongoPlugin/src/test/java/com/external/plugins/MongoPluginErrorsTest.java @@ -17,10 +17,13 @@ import com.fasterxml.jackson.databind.node.ArrayNode; import com.mongodb.MongoCommandException; import com.mongodb.MongoSecurityException; +import com.mongodb.reactivestreams.client.ListCollectionNamesPublisher; import com.mongodb.reactivestreams.client.MongoClient; import com.mongodb.reactivestreams.client.MongoDatabase; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; +import org.reactivestreams.Subscriber; +import org.reactivestreams.Subscription; import org.testcontainers.containers.MongoDBContainer; import org.testcontainers.junit.jupiter.Container; import org.testcontainers.junit.jupiter.Testcontainers; @@ -54,6 +57,7 @@ import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertTrue; import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.doAnswer; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.spy; @@ -236,8 +240,28 @@ public void testGetStructureReadPermissionError() { when(mockConnection.getDatabase(any())).thenReturn(mockDatabase); MongoCommandException mockMongoCmdException = mock(MongoCommandException.class); - when(mockDatabase.listCollectionNames()).thenReturn(Mono.error(mockMongoCmdException)); + // Mock the ListCollectionNamesPublisher + ListCollectionNamesPublisher mockPublisher = mock(ListCollectionNamesPublisher.class); + + // Create a mock subscription + Subscription mockSubscription = mock(Subscription.class); + + // Simulate an error when calling listCollectionNames + when(mockDatabase.listCollectionNames()).thenReturn(mockPublisher); when(mockMongoCmdException.getErrorCode()).thenReturn(13); + // Mock the subscribe method to simulate an error + doAnswer(invocation -> { + // Extract the Subscriber passed to the subscribe method + Subscriber subscriber = invocation.getArgument(0); + + subscriber.onSubscribe(mockSubscription); // Provide a subscription + // Call the Subscriber's onError method to simulate an error + subscriber.onError(mockMongoCmdException); + + return null; // Since subscribe returns void + }) + .when(mockPublisher) + .subscribe(any()); DatasourceConfiguration dsConfig = createDatasourceConfiguration(); Mono structureMono = pluginExecutor diff --git a/app/server/appsmith-plugins/mongoPlugin/src/test/java/com/external/plugins/MongoPluginStaleConnTest.java b/app/server/appsmith-plugins/mongoPlugin/src/test/java/com/external/plugins/MongoPluginStaleConnTest.java index accf9e106764..b93f4cebc1e0 100644 --- a/app/server/appsmith-plugins/mongoPlugin/src/test/java/com/external/plugins/MongoPluginStaleConnTest.java +++ b/app/server/appsmith-plugins/mongoPlugin/src/test/java/com/external/plugins/MongoPluginStaleConnTest.java @@ -9,10 +9,13 @@ import com.appsmith.external.models.Endpoint; import com.appsmith.external.models.SSLDetails; import com.mongodb.MongoSocketWriteException; +import com.mongodb.reactivestreams.client.ListCollectionNamesPublisher; import com.mongodb.reactivestreams.client.MongoClient; import com.mongodb.reactivestreams.client.MongoDatabase; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; +import org.reactivestreams.Subscriber; +import org.reactivestreams.Subscription; import org.testcontainers.containers.MongoDBContainer; import org.testcontainers.junit.jupiter.Container; import org.testcontainers.junit.jupiter.Testcontainers; @@ -30,8 +33,11 @@ import static com.external.plugins.constants.FieldName.SMART_SUBSTITUTION; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyString; +import static org.mockito.Mockito.doAnswer; import static org.mockito.Mockito.doReturn; +import static org.mockito.Mockito.mock; import static org.mockito.Mockito.spy; +import static org.mockito.Mockito.when; /** * Unit tests for MongoPlugin @@ -125,7 +131,27 @@ public void testStaleConnectionOnIllegalStateExceptionOnGetStructure() { MongoClient spyMongoClient = spy(MongoClient.class); MongoDatabase spyMongoDatabase = spy(MongoDatabase.class); doReturn(spyMongoDatabase).when(spyMongoClient).getDatabase(anyString()); - doReturn(Mono.error(new IllegalStateException())).when(spyMongoDatabase).listCollectionNames(); + // Mock the ListCollectionNamesPublisher + ListCollectionNamesPublisher mockPublisher = mock(ListCollectionNamesPublisher.class); + + // Create a mock subscription + Subscription mockSubscription = mock(Subscription.class); + + // Simulate an error when calling listCollectionNames + when(spyMongoDatabase.listCollectionNames()).thenReturn(mockPublisher); + // Mock the subscribe method to simulate an error + doAnswer(invocation -> { + // Extract the Subscriber passed to the subscribe method + Subscriber subscriber = invocation.getArgument(0); + + subscriber.onSubscribe(mockSubscription); // Provide a subscription + // Call the Subscriber's onError method to simulate an error + subscriber.onError(new IllegalStateException()); + + return null; // Since subscribe returns void + }) + .when(mockPublisher) + .subscribe(any()); DatasourceConfiguration dsConfig = createDatasourceConfiguration(); Mono structureMono = pluginExecutor.getStructure(spyMongoClient, dsConfig, null); @@ -139,9 +165,27 @@ public void testStaleConnectionOnMongoSocketWriteExceptionOnGetStructure() { MongoClient spyMongoClient = spy(MongoClient.class); MongoDatabase spyMongoDatabase = spy(MongoDatabase.class); doReturn(spyMongoDatabase).when(spyMongoClient).getDatabase(anyString()); - doReturn(Mono.error(new MongoSocketWriteException("", null, null))) - .when(spyMongoDatabase) - .listCollectionNames(); + // Mock the ListCollectionNamesPublisher + ListCollectionNamesPublisher mockPublisher = mock(ListCollectionNamesPublisher.class); + + // Create a mock subscription + Subscription mockSubscription = mock(Subscription.class); + + // Simulate an error when calling listCollectionNames + when(spyMongoDatabase.listCollectionNames()).thenReturn(mockPublisher); + // Mock the subscribe method to simulate an error + doAnswer(invocation -> { + // Extract the Subscriber passed to the subscribe method + Subscriber subscriber = invocation.getArgument(0); + + subscriber.onSubscribe(mockSubscription); // Provide a subscription + // Call the Subscriber's onError method to simulate an error + subscriber.onError(new MongoSocketWriteException("", null, null)); + + return null; // Since subscribe returns void + }) + .when(mockPublisher) + .subscribe(any()); DatasourceConfiguration dsConfig = createDatasourceConfiguration(); Mono structureMono = pluginExecutor.getStructure(spyMongoClient, dsConfig, null); diff --git a/app/server/appsmith-plugins/openAiPlugin/pom.xml b/app/server/appsmith-plugins/openAiPlugin/pom.xml index f19ad0b6bf57..ad65e91c1727 100644 --- a/app/server/appsmith-plugins/openAiPlugin/pom.xml +++ b/app/server/appsmith-plugins/openAiPlugin/pom.xml @@ -101,7 +101,6 @@ org.springframework.boot spring-boot-starter-webflux - ${spring-boot.version} test diff --git a/app/server/appsmith-plugins/restApiPlugin/pom.xml b/app/server/appsmith-plugins/restApiPlugin/pom.xml index 775003d9ea5d..60e52b9f1284 100644 --- a/app/server/appsmith-plugins/restApiPlugin/pom.xml +++ b/app/server/appsmith-plugins/restApiPlugin/pom.xml @@ -89,7 +89,6 @@ org.springframework.boot spring-boot-starter-webflux - ${spring-boot.version} test diff --git a/app/server/appsmith-plugins/snowflakePlugin/pom.xml b/app/server/appsmith-plugins/snowflakePlugin/pom.xml index c545d22dd8c0..679251691988 100644 --- a/app/server/appsmith-plugins/snowflakePlugin/pom.xml +++ b/app/server/appsmith-plugins/snowflakePlugin/pom.xml @@ -79,7 +79,6 @@ org.springframework.boot spring-boot-starter-webflux - ${spring-boot.version} test diff --git a/app/server/appsmith-server/pom.xml b/app/server/appsmith-server/pom.xml index e9e91196b150..033b93315bbb 100644 --- a/app/server/appsmith-server/pom.xml +++ b/app/server/appsmith-server/pom.xml @@ -116,7 +116,6 @@ org.springframework.boot spring-boot-starter-webflux - ${spring-boot.version} io.projectreactor @@ -202,7 +201,7 @@ commons-io commons-io - 2.7 + 2.13.0 commons-validator @@ -221,13 +220,13 @@ io.micrometer micrometer-tracing-bridge-brave - 1.0.0 + 1.3.4 io.zipkin.reporter2 zipkin-reporter-brave - + @@ -315,7 +314,7 @@ org.springdoc springdoc-openapi-starter-webflux-ui - 2.0.0 + 2.6.0 @@ -368,11 +367,7 @@ org.mockito mockito-inline ${mockito.version} - - - org.mockito - mockito-core - ${mockito.version} + test org.jgrapht @@ -390,6 +385,12 @@ 1.10.0 + + commons-codec + commons-codec + 1.17.1 + + com.appsmith reactiveCaching diff --git a/app/server/appsmith-server/src/main/java/com/appsmith/server/configurations/InstanceConfig.java b/app/server/appsmith-server/src/main/java/com/appsmith/server/configurations/InstanceConfig.java index 0e150ab57d1e..879780c0bb71 100644 --- a/app/server/appsmith-server/src/main/java/com/appsmith/server/configurations/InstanceConfig.java +++ b/app/server/appsmith-server/src/main/java/com/appsmith/server/configurations/InstanceConfig.java @@ -22,7 +22,7 @@ @Slf4j @RequiredArgsConstructor @Component -@Observed(name = "Server startup") +@Observed(name = "serverStartup") public class InstanceConfig implements ApplicationListener { private final ConfigService configService; diff --git a/app/server/pom.xml b/app/server/pom.xml index ccee774a5e50..1bd3cba3ad89 100644 --- a/app/server/pom.xml +++ b/app/server/pom.xml @@ -7,7 +7,7 @@ org.springframework.boot spring-boot-starter-parent - 3.0.9 + 3.3.3 @@ -31,7 +31,6 @@ 2.17.0 17 true - 1.4.14 ${java.version} ${java.version} 4.4.0 @@ -48,8 +47,7 @@ 2.0 true 2.36.0 - 3.0.9 - 1.19.3 + 1.20.1 diff --git a/app/server/reactive-caching/pom.xml b/app/server/reactive-caching/pom.xml index c375907b16cc..3321b759e1cc 100644 --- a/app/server/reactive-caching/pom.xml +++ b/app/server/reactive-caching/pom.xml @@ -32,7 +32,6 @@ org.springframework.boot spring-boot-starter-webflux - ${spring-boot.version}