You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@dolphinscheduler.apache.org by ca...@apache.org on 2022/11/14 03:30:16 UTC
[dolphinscheduler] branch dev updated: [Improvement-12838][UT] Improve the ut of datasource (#12839)
This is an automated email from the ASF dual-hosted git repository.
caishunfeng pushed a commit to branch dev
in repository https://gitbox.apache.org/repos/asf/dolphinscheduler.git
The following commit(s) were added to refs/heads/dev by this push:
new 813c44b22b [Improvement-12838][UT] Improve the ut of datasource (#12839)
813c44b22b is described below
commit 813c44b22b3561f4c32524781ef395892512aef8
Author: rickchengx <38...@users.noreply.github.com>
AuthorDate: Mon Nov 14 11:30:10 2022 +0800
[Improvement-12838][UT] Improve the ut of datasource (#12839)
---
.../api/service/impl/DataSourceServiceImpl.java | 2 +-
.../api/service/DataSourceServiceTest.java | 127 ++++++++++++---------
2 files changed, 73 insertions(+), 56 deletions(-)
diff --git a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/DataSourceServiceImpl.java b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/DataSourceServiceImpl.java
index 4848c04ec9..6b1214dacc 100644
--- a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/DataSourceServiceImpl.java
+++ b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/DataSourceServiceImpl.java
@@ -182,7 +182,7 @@ public class DataSourceServiceImpl extends BaseServiceImpl implements DataSource
}
// check name can use or not
- if (!dataSource.getName().trim().equals(dataSource.getName()) && checkName(dataSource.getName())) {
+ if (!dataSourceParam.getName().trim().equals(dataSource.getName()) && checkName(dataSourceParam.getName())) {
logger.warn("Datasource with the same name already exists, name:{}.", dataSource.getName());
putMsg(result, Status.DATASOURCE_EXIST);
return result;
diff --git a/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/DataSourceServiceTest.java b/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/DataSourceServiceTest.java
index 216d3650b6..c5ba3c9fd2 100644
--- a/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/DataSourceServiceTest.java
+++ b/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/DataSourceServiceTest.java
@@ -17,8 +17,6 @@
package org.apache.dolphinscheduler.api.service;
-import static org.apache.dolphinscheduler.api.constants.ApiFuncIdentificationConstant.DATASOURCE_DELETE;
-
import org.apache.dolphinscheduler.api.enums.Status;
import org.apache.dolphinscheduler.api.permission.ResourcePermissionCheckService;
import org.apache.dolphinscheduler.api.service.impl.BaseServiceImpl;
@@ -55,6 +53,7 @@ import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
+import java.util.concurrent.ExecutionException;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
@@ -89,7 +88,15 @@ public class DataSourceServiceTest {
@Mock
private ResourcePermissionCheckService resourcePermissionCheckService;
- public void createDataSourceTest() {
+ private void passResourcePermissionCheckService() {
+ Mockito.when(resourcePermissionCheckService.operationPermissionCheck(Mockito.any(), Mockito.anyInt(),
+ Mockito.anyString(), Mockito.any())).thenReturn(true);
+ Mockito.when(resourcePermissionCheckService.resourcePermissionCheck(Mockito.any(), Mockito.any(),
+ Mockito.anyInt(), Mockito.any())).thenReturn(true);
+ }
+
+ @Test
+ public void createDataSourceTest() throws ExecutionException {
User loginUser = getAdminUser();
String dataSourceName = "dataSource01";
String dataSourceDesc = "test dataSource";
@@ -102,47 +109,51 @@ public class DataSourceServiceTest {
postgreSqlDatasourceParam.setDatabase("dolphinscheduler");
postgreSqlDatasourceParam.setUserName("postgres");
postgreSqlDatasourceParam.setPassword("");
+ postgreSqlDatasourceParam.setName(dataSourceName);
+
+ // USER_NO_OPERATION_PERM
+ Result result = dataSourceService.createDataSource(loginUser, postgreSqlDatasourceParam);
+ Assertions.assertEquals(Status.USER_NO_OPERATION_PERM.getCode(), result.getCode().intValue());
- // data source exits
+ // DATASOURCE_EXIST
List<DataSource> dataSourceList = new ArrayList<>();
DataSource dataSource = new DataSource();
dataSource.setName(dataSourceName);
dataSourceList.add(dataSource);
Mockito.when(dataSourceMapper.queryDataSourceByName(dataSourceName.trim())).thenReturn(dataSourceList);
+ passResourcePermissionCheckService();
Result dataSourceExitsResult = dataSourceService.createDataSource(loginUser, postgreSqlDatasourceParam);
Assertions.assertEquals(Status.DATASOURCE_EXIST.getCode(), dataSourceExitsResult.getCode().intValue());
- ConnectionParam connectionParam = DataSourceUtils.buildConnectionParams(postgreSqlDatasourceParam);
- DbType dataSourceType = postgreSqlDatasourceParam.getType();
- // data source exits
- Mockito.when(dataSourceMapper.queryDataSourceByName(dataSourceName.trim())).thenReturn(null);
- Result connectionResult =
- new Result(Status.DATASOURCE_CONNECT_FAILED.getCode(), Status.DATASOURCE_CONNECT_FAILED.getMsg());
-
- Mockito.doReturn(connectionResult).when(dataSourceService).checkConnection(dataSourceType, connectionParam);
- Result connectFailedResult = dataSourceService.createDataSource(loginUser, postgreSqlDatasourceParam);
- Assertions.assertEquals(Status.DATASOURCE_CONNECT_FAILED.getCode(), connectFailedResult.getCode().intValue());
-
- // data source exits
- Mockito.when(dataSourceMapper.queryDataSourceByName(dataSourceName.trim())).thenReturn(null);
- connectionResult = new Result(Status.SUCCESS.getCode(), Status.SUCCESS.getMsg());
- Mockito.when(dataSourceService.checkConnection(dataSourceType, connectionParam)).thenReturn(connectionResult);
- Result notValidError = dataSourceService.createDataSource(loginUser, postgreSqlDatasourceParam);
- Assertions.assertEquals(Status.REQUEST_PARAMS_NOT_VALID_ERROR.getCode(), notValidError.getCode().intValue());
+ try (
+ MockedStatic<DataSourceClientProvider> mockedStaticDataSourceClientProvider =
+ Mockito.mockStatic(DataSourceClientProvider.class)) {
+ // DATASOURCE_CONNECT_FAILED
+ DataSourceClientProvider clientProvider = Mockito.mock(DataSourceClientProvider.class);
+ mockedStaticDataSourceClientProvider.when(DataSourceClientProvider::getInstance).thenReturn(clientProvider);
- // success
- Mockito.when(dataSourceMapper.queryDataSourceByName(dataSourceName.trim())).thenReturn(null);
- Mockito.when(dataSourceService.checkConnection(dataSourceType, connectionParam)).thenReturn(connectionResult);
- Result success = dataSourceService.createDataSource(loginUser, postgreSqlDatasourceParam);
- Assertions.assertEquals(Status.SUCCESS.getCode(), success.getCode().intValue());
+ Mockito.when(dataSourceMapper.queryDataSourceByName(dataSourceName.trim())).thenReturn(null);
+ Mockito.when(clientProvider.getConnection(Mockito.any(), Mockito.any())).thenReturn(null);
+ Result connectFailedResult = dataSourceService.createDataSource(loginUser, postgreSqlDatasourceParam);
+ Assertions.assertEquals(Status.DATASOURCE_CONNECT_FAILED.getCode(),
+ connectFailedResult.getCode().intValue());
+
+ // SUCCESS
+ Connection connection = Mockito.mock(Connection.class);
+ Mockito.when(clientProvider.getConnection(Mockito.any(), Mockito.any())).thenReturn(connection);
+ Result success = dataSourceService.createDataSource(loginUser, postgreSqlDatasourceParam);
+ Assertions.assertEquals(Status.SUCCESS.getCode(), success.getCode().intValue());
+ }
}
- public void updateDataSourceTest() {
+ @Test
+ public void updateDataSourceTest() throws ExecutionException {
User loginUser = getAdminUser();
int dataSourceId = 12;
String dataSourceName = "dataSource01";
String dataSourceDesc = "test dataSource";
+ String dataSourceUpdateName = "dataSource01-update";
PostgreSQLDataSourceParamDTO postgreSqlDatasourceParam = new PostgreSQLDataSourceParamDTO();
postgreSqlDatasourceParam.setDatabase(dataSourceName);
@@ -152,13 +163,15 @@ public class DataSourceServiceTest {
postgreSqlDatasourceParam.setDatabase("dolphinscheduler");
postgreSqlDatasourceParam.setUserName("postgres");
postgreSqlDatasourceParam.setPassword("");
+ postgreSqlDatasourceParam.setName(dataSourceUpdateName);
- // data source not exits
+ // RESOURCE_NOT_EXIST
Mockito.when(dataSourceMapper.selectById(dataSourceId)).thenReturn(null);
Result resourceNotExits =
dataSourceService.updateDataSource(dataSourceId, loginUser, postgreSqlDatasourceParam);
Assertions.assertEquals(Status.RESOURCE_NOT_EXIST.getCode(), resourceNotExits.getCode().intValue());
- // user no operation perm
+
+ // USER_NO_OPERATION_PERM
DataSource dataSource = new DataSource();
dataSource.setUserId(0);
Mockito.when(dataSourceMapper.selectById(dataSourceId)).thenReturn(dataSource);
@@ -166,35 +179,43 @@ public class DataSourceServiceTest {
dataSourceService.updateDataSource(dataSourceId, loginUser, postgreSqlDatasourceParam);
Assertions.assertEquals(Status.USER_NO_OPERATION_PERM.getCode(), userNoOperationPerm.getCode().intValue());
- // data source name exits
- dataSource.setUserId(-1);
+ // DATASOURCE_EXIST
+ dataSource.setName(dataSourceName);
+ dataSource.setType(DbType.POSTGRESQL);
+ dataSource.setConnectionParams(
+ JSONUtils.toJsonString(DataSourceUtils.buildConnectionParams(postgreSqlDatasourceParam)));
+
+ DataSource anotherDataSource = new DataSource();
+ anotherDataSource.setName(dataSourceUpdateName);
List<DataSource> dataSourceList = new ArrayList<>();
- dataSourceList.add(dataSource);
+ dataSourceList.add(anotherDataSource);
Mockito.when(dataSourceMapper.selectById(dataSourceId)).thenReturn(dataSource);
- Mockito.when(dataSourceMapper.queryDataSourceByName(dataSourceName)).thenReturn(dataSourceList);
+ Mockito.when(dataSourceMapper.queryDataSourceByName(postgreSqlDatasourceParam.getName()))
+ .thenReturn(dataSourceList);
+ passResourcePermissionCheckService();
Result dataSourceNameExist =
dataSourceService.updateDataSource(dataSourceId, loginUser, postgreSqlDatasourceParam);
Assertions.assertEquals(Status.DATASOURCE_EXIST.getCode(), dataSourceNameExist.getCode().intValue());
- // data source connect failed
- DbType dataSourceType = postgreSqlDatasourceParam.getType();
- ConnectionParam connectionParam = DataSourceUtils.buildConnectionParams(postgreSqlDatasourceParam);
- Mockito.when(dataSourceMapper.selectById(dataSourceId)).thenReturn(dataSource);
- Mockito.when(dataSourceMapper.queryDataSourceByName(dataSourceName)).thenReturn(null);
- Result connectionResult = new Result(Status.SUCCESS.getCode(), Status.SUCCESS.getMsg());
- Mockito.when(dataSourceService.checkConnection(dataSourceType, connectionParam)).thenReturn(connectionResult);
- Result connectFailed = dataSourceService.updateDataSource(dataSourceId, loginUser, postgreSqlDatasourceParam);
- Assertions.assertEquals(Status.DATASOURCE_CONNECT_FAILED.getCode(), connectFailed.getCode().intValue());
+ try (
+ MockedStatic<DataSourceClientProvider> mockedStaticDataSourceClientProvider =
+ Mockito.mockStatic(DataSourceClientProvider.class)) {
+ // DATASOURCE_CONNECT_FAILED
+ DataSourceClientProvider clientProvider = Mockito.mock(DataSourceClientProvider.class);
+ mockedStaticDataSourceClientProvider.when(DataSourceClientProvider::getInstance).thenReturn(clientProvider);
- // success
- Mockito.when(dataSourceMapper.selectById(dataSourceId)).thenReturn(dataSource);
- Mockito.when(dataSourceMapper.queryDataSourceByName(dataSourceName)).thenReturn(null);
- connectionResult =
- new Result(Status.DATASOURCE_CONNECT_FAILED.getCode(), Status.DATASOURCE_CONNECT_FAILED.getMsg());
- Mockito.when(dataSourceService.checkConnection(dataSourceType, connectionParam)).thenReturn(connectionResult);
- Result success = dataSourceService.updateDataSource(dataSourceId, loginUser, postgreSqlDatasourceParam);
- Assertions.assertEquals(Status.SUCCESS.getCode(), success.getCode().intValue());
+ Mockito.when(clientProvider.getConnection(Mockito.any(), Mockito.any())).thenReturn(null);
+ Mockito.when(dataSourceMapper.queryDataSourceByName(postgreSqlDatasourceParam.getName())).thenReturn(null);
+ Result connectFailed =
+ dataSourceService.updateDataSource(dataSourceId, loginUser, postgreSqlDatasourceParam);
+ Assertions.assertEquals(Status.CONNECTION_TEST_FAILURE.getCode(), connectFailed.getCode().intValue());
+ // SUCCESS
+ Connection connection = Mockito.mock(Connection.class);
+ Mockito.when(clientProvider.getConnection(Mockito.any(), Mockito.any())).thenReturn(connection);
+ Result success = dataSourceService.updateDataSource(dataSourceId, loginUser, postgreSqlDatasourceParam);
+ Assertions.assertEquals(Status.SUCCESS.getCode(), success.getCode().intValue());
+ }
}
@Test
@@ -239,10 +260,7 @@ public class DataSourceServiceTest {
loginUser.setUserType(UserType.ADMIN_USER);
loginUser.setId(1);
dataSource.setId(22);
- Mockito.when(resourcePermissionCheckService.operationPermissionCheck(AuthorizationType.DATASOURCE,
- loginUser.getId(), DATASOURCE_DELETE, baseServiceLogger)).thenReturn(true);
- Mockito.when(resourcePermissionCheckService.resourcePermissionCheck(AuthorizationType.DATASOURCE,
- new Object[]{dataSource.getId()}, 0, baseServiceLogger)).thenReturn(true);
+ passResourcePermissionCheckService();
Mockito.when(dataSourceMapper.selectById(dataSourceId)).thenReturn(dataSource);
Assertions.assertEquals(result.getCode(), dataSourceService.delete(loginUser, dataSourceId).getCode());
@@ -486,7 +504,6 @@ public class DataSourceServiceTest {
MockedStatic<DataSourceClientProvider> mockedStaticDataSourceClientProvider =
Mockito.mockStatic(DataSourceClientProvider.class)) {
DataSourceClientProvider clientProvider = Mockito.mock(DataSourceClientProvider.class);
- Mockito.when(DataSourceClientProvider.getInstance()).thenReturn(clientProvider);
mockedStaticDataSourceClientProvider.when(DataSourceClientProvider::getInstance).thenReturn(clientProvider);
Result result = dataSourceService.checkConnection(dataSourceType, connectionParam);