diff --git a/app/server/appsmith-plugins/snowflakePlugin/src/main/java/com/external/plugins/SnowflakePlugin.java b/app/server/appsmith-plugins/snowflakePlugin/src/main/java/com/external/plugins/SnowflakePlugin.java index 89e0e71ebe..e178c61df4 100644 --- a/app/server/appsmith-plugins/snowflakePlugin/src/main/java/com/external/plugins/SnowflakePlugin.java +++ b/app/server/appsmith-plugins/snowflakePlugin/src/main/java/com/external/plugins/SnowflakePlugin.java @@ -189,12 +189,6 @@ public class SnowflakePlugin extends BasePlugin { properties.setProperty("maximunPoolSize", String.valueOf(MAXIMUM_POOL_SIZE)); properties.setProperty( SNOWFLAKE_DB_LOGIN_TIMEOUT_PROPERTY_KEY, String.valueOf(SNOWFLAKE_DB_LOGIN_TIMEOUT_VALUE_SEC)); - /** - * Setting the value for setInitializationFailTimeout to -1 to - * bypass any connection attempt and validation during startup - * @see https://www.javadoc.io/doc/com.zaxxer/HikariCP/latest/com/zaxxer/hikari/HikariConfig.html - */ - properties.setProperty("initializationFailTimeout", String.valueOf(-1)); properties.setProperty("connectionTimeoutMillis", String.valueOf(CONNECTION_TIMEOUT_MILLISECONDS)); return properties; } @@ -532,9 +526,6 @@ public class SnowflakePlugin extends BasePlugin { config.setMinimumIdle(Integer.parseInt(properties.get("minimumIdle").toString())); config.setMaximumPoolSize( Integer.parseInt(properties.get("maximunPoolSize").toString())); - - config.setInitializationFailTimeout( - Long.parseLong(properties.get("initializationFailTimeout").toString())); config.setConnectionTimeout( Long.parseLong(properties.get("connectionTimeoutMillis").toString())); return config; diff --git a/app/server/appsmith-plugins/snowflakePlugin/src/test/java/com/external/plugins/SnowflakePluginTest.java b/app/server/appsmith-plugins/snowflakePlugin/src/test/java/com/external/plugins/SnowflakePluginTest.java index 4d95a880d0..6c1e21fce3 100644 --- a/app/server/appsmith-plugins/snowflakePlugin/src/test/java/com/external/plugins/SnowflakePluginTest.java +++ b/app/server/appsmith-plugins/snowflakePlugin/src/test/java/com/external/plugins/SnowflakePluginTest.java @@ -21,7 +21,6 @@ import com.fasterxml.jackson.databind.type.TypeFactory; import com.zaxxer.hikari.HikariDataSource; import com.zaxxer.hikari.HikariPoolMXBean; import lombok.extern.slf4j.Slf4j; -import net.snowflake.client.jdbc.SnowflakeBasicDataSource; import net.snowflake.client.jdbc.SnowflakeReauthenticationRequest; import org.junit.jupiter.api.Test; import org.mockito.MockedStatic; @@ -186,9 +185,11 @@ public class SnowflakePluginTest { StepVerifier.create(pluginExecutor.testDatasource(datasourceConfiguration)) .assertNext(datasourceTestResult -> { assertNotNull(datasourceTestResult); - assertTrue(datasourceTestResult - .getInvalids() - .contains(SnowflakeErrorMessages.UNABLE_TO_CREATE_CONNECTION_ERROR_MSG)); + String expectedErrorMessage = + "Certificate for doesn't match any of the subject alternative names"; + Set invalids = datasourceTestResult.getInvalids(); + String errorMessage = invalids.iterator().next(); + assertTrue(errorMessage.contains(expectedErrorMessage)); }) .verifyComplete(); } @@ -351,15 +352,17 @@ public class SnowflakePluginTest { Mono datasourceCreateMono = pluginExecutor.datasourceCreate(datasourceConfiguration); - StepVerifier.create(datasourceCreateMono) - .assertNext(dataSource -> { - // These are null as these get set inside datasource object and not on HikariConfig itself - // For key pair authentication, username and password should be null - assertEquals(null, dataSource.getUsername()); - assertEquals(null, dataSource.getPassword()); - assertInstanceOf(SnowflakeBasicDataSource.class, dataSource.getDataSource()); - }) - .verifyComplete(); + StepVerifier.create(datasourceCreateMono).verifyErrorSatisfies(error -> { + // This error is getting thrown because the account name we are sending in datasource config is not valid + // snowflake account + // but this ensures that hikariConfig is constructed correctly without any issues + // and exception occurs only when we try to create hikari datasource from hikari config + // Thus test still validates the creation of hikari config successfully + assertTrue(error instanceof RuntimeException); + String expectedErrorMessage = + "Certificate for doesn't match any of the subject alternative names"; + assertTrue(error.getMessage().contains(expectedErrorMessage)); + }); } @Test @@ -378,14 +381,17 @@ public class SnowflakePluginTest { Mono datasourceCreateMono = pluginExecutor.datasourceCreate(datasourceConfiguration); - StepVerifier.create(datasourceCreateMono) - .assertNext(dataSource -> { - // Datasource object would be null in this case as it gets set only in case of key pair config - assertEquals("test", dataSource.getUsername()); - assertEquals("test", dataSource.getPassword()); - assertEquals(null, dataSource.getDataSource()); - }) - .verifyComplete(); + StepVerifier.create(datasourceCreateMono).verifyErrorSatisfies(error -> { + // This error is getting thrown because the account name we are sending in datasource config is not valid + // snowflake account + // but this ensures that hikariConfig is constructed correctly without any issues + // and exception occurs only when we try to create hikari datasource from hikari config + // Thus test still validates the creation of hikari config successfully + assertTrue(error instanceof RuntimeException); + String expectedErrorMessage = + "Certificate for doesn't match any of the subject alternative names"; + assertTrue(error.getMessage().contains(expectedErrorMessage)); + }); } public void testReadEncryptedPrivateKeyReturnsValidPrivateKey() throws Exception {