diff --git a/config/src/test/java/com/alibaba/nacos/config/server/service/datasource/ExternalDataSourcePropertiesTest.java b/config/src/test/java/com/alibaba/nacos/config/server/service/datasource/ExternalDataSourcePropertiesTest.java new file mode 100644 index 00000000000..d9adc79dd12 --- /dev/null +++ b/config/src/test/java/com/alibaba/nacos/config/server/service/datasource/ExternalDataSourcePropertiesTest.java @@ -0,0 +1,113 @@ +package com.alibaba.nacos.config.server.service.datasource; + +import java.util.List; + +import org.junit.Assert; +import org.junit.Test; +import org.springframework.mock.env.MockEnvironment; + +import com.zaxxer.hikari.HikariDataSource; + +public class ExternalDataSourcePropertiesTest { + + public static final String JDBC_URL = + "jdbc:mysql://127.0.0.1:3306/nacos_devtest?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC"; + public static final String PASSWORD = "nacos"; + public static final String USERNAME = "nacos_devtest"; + + @Test + public void external_datasource_normaly() { + HikariDataSource expectedDataSource = new HikariDataSource(); + expectedDataSource.setJdbcUrl(JDBC_URL); + expectedDataSource.setUsername(USERNAME); + expectedDataSource.setPassword(PASSWORD); + MockEnvironment environment = new MockEnvironment(); + environment.setProperty("db.num", "1"); + environment.setProperty("db.user", USERNAME); + environment.setProperty("db.password", PASSWORD); + environment.setProperty("db.url.0", JDBC_URL); + List dataSources = new ExternalDataSourceProperties().build(environment, (dataSource -> { + Assert.assertEquals(dataSource.getJdbcUrl(), expectedDataSource.getJdbcUrl()); + Assert.assertEquals(dataSource.getUsername(), expectedDataSource.getUsername()); + Assert.assertEquals(dataSource.getPassword(), expectedDataSource.getPassword()); + + })); + Assert.assertEquals(dataSources.size(), 1); + } + + @Test + public void external_datasource_to_assert_multi_jdbc_url() { + + HikariDataSource expectedDataSource = new HikariDataSource(); + expectedDataSource.setJdbcUrl(JDBC_URL); + expectedDataSource.setUsername(USERNAME); + expectedDataSource.setPassword(PASSWORD); + MockEnvironment environment = new MockEnvironment(); + environment.setProperty("db.num", "2"); + environment.setProperty("db.user", USERNAME); + environment.setProperty("db.password", PASSWORD); + environment.setProperty("db.url.0", JDBC_URL); + environment.setProperty("db.url.1", JDBC_URL); + List dataSources = new ExternalDataSourceProperties().build(environment, (dataSource -> { + Assert.assertEquals(dataSource.getJdbcUrl(), expectedDataSource.getJdbcUrl()); + Assert.assertEquals(dataSource.getUsername(), expectedDataSource.getUsername()); + Assert.assertEquals(dataSource.getPassword(), expectedDataSource.getPassword()); + + })); + Assert.assertEquals(dataSources.size(), 2); + } + + @Test + public void external_datasource_to_assert_multi_password_and_username() { + + HikariDataSource expectedDataSource = new HikariDataSource(); + expectedDataSource.setJdbcUrl(JDBC_URL); + expectedDataSource.setUsername(USERNAME); + expectedDataSource.setPassword(PASSWORD); + MockEnvironment environment = new MockEnvironment(); + environment.setProperty("db.num", "2"); + environment.setProperty("db.user.0", USERNAME); + environment.setProperty("db.user.1", USERNAME); + environment.setProperty("db.password.0", PASSWORD); + environment.setProperty("db.password.1", PASSWORD); + environment.setProperty("db.url.0", JDBC_URL); + environment.setProperty("db.url.1", JDBC_URL); + List dataSources = new ExternalDataSourceProperties().build(environment, (dataSource -> { + Assert.assertEquals(dataSource.getJdbcUrl(), expectedDataSource.getJdbcUrl()); + Assert.assertEquals(dataSource.getUsername(), expectedDataSource.getUsername()); + Assert.assertEquals(dataSource.getPassword(), expectedDataSource.getPassword()); + + })); + Assert.assertEquals(dataSources.size(), 2); + } + + @Test(expected = IllegalArgumentException.class) + public void external_datasource_to_assert_illegal_argument() { + + MockEnvironment environment = new MockEnvironment(); + new ExternalDataSourceProperties().build(environment, null); + + } + + @Test(expected = IllegalArgumentException.class) + public void external_datasource_to_assert_illegal_argument_2() { + + HikariDataSource expectedDataSource = new HikariDataSource(); + expectedDataSource.setJdbcUrl(JDBC_URL); + expectedDataSource.setUsername(USERNAME); + expectedDataSource.setPassword(PASSWORD); + MockEnvironment environment = new MockEnvironment(); + // error num of db + environment.setProperty("db.num", "2"); + environment.setProperty("db.user", USERNAME); + environment.setProperty("db.password", PASSWORD); + environment.setProperty("db.url.0", JDBC_URL); + List dataSources = new ExternalDataSourceProperties().build(environment, (dataSource -> { + Assert.assertEquals(dataSource.getJdbcUrl(), expectedDataSource.getJdbcUrl()); + Assert.assertEquals(dataSource.getUsername(), expectedDataSource.getUsername()); + Assert.assertEquals(dataSource.getPassword(), expectedDataSource.getPassword()); + + })); + } + +}