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

lidongdai pushed a commit to branch dev
in repository https://gitbox.apache.org/repos/asf/incubator-dolphinscheduler.git


The following commit(s) were added to refs/heads/dev by this push:
     new 78eb07b  [Improvement-3558][API] Improve `DataSourceServiceTest.java` 
(#3579)
78eb07b is described below

commit 78eb07b361967a054df6f1435899cee963843855
Author: easycode <[email protected]>
AuthorDate: Mon Aug 24 16:36:02 2020 +0800

    [Improvement-3558][API] Improve `DataSourceServiceTest.java` (#3579)
    
    * Fixed this bug "multiple threads creating folders will result in multiple 
identical folders" #3487
    
    * 1. Improvement `DataSourceServiceTest` #3558
    2. Get rid of some useless arguments to functions in the 
`DataSourceService` class
    
    * The rollback `ResourceService.java`
    
    * The rollback `ResourceService.java`
    
    * The rollback `ResourceService.java`
    
    * 1.Modify code styles.
    2.Make improvement according to Yichao Yang's advice. Thank you very much 
for guidance.@Yichao Yang
    
    * Modify code styles.
    
    * Circumventing the checkConnection problem
    
    * Modify code styles.
---
 .../api/controller/DataSourceController.java       |  10 +-
 .../api/service/DataSourceService.java             | 140 +++++++------
 .../api/service/DataSourceServiceTest.java         | 220 ++++++++++++++++++---
 pom.xml                                            |   2 +-
 4 files changed, 268 insertions(+), 104 deletions(-)

diff --git 
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/controller/DataSourceController.java
 
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/controller/DataSourceController.java
index a34d61a..4bdaa36 100644
--- 
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/controller/DataSourceController.java
+++ 
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/controller/DataSourceController.java
@@ -100,7 +100,7 @@ public class DataSourceController extends BaseController {
                                    @RequestParam(value = "other") String 
other) {
         logger.info("login user {} create datasource name: {}, note: {}, type: 
{}, host: {}, port: {}, database : {}, principal: {}, userName : {}, 
connectType: {}, other: {}",
                 loginUser.getUserName(), name, note, type, host, port, 
database, principal, userName, connectType, other);
-        String parameter = dataSourceService.buildParameter(name, note, type, 
host, port, database, principal, userName, password, connectType, other);
+        String parameter = dataSourceService.buildParameter(type, host, port, 
database, principal, userName, password, connectType, other);
         Map<String, Object> result = 
dataSourceService.createDataSource(loginUser, name, note, type, parameter);
         return returnDataList(result);
     }
@@ -155,7 +155,7 @@ public class DataSourceController extends BaseController {
                                    @RequestParam(value = "other") String 
other) {
         logger.info("login user {} updateProcessInstance datasource name: {}, 
note: {}, type: {}, connectType: {}, other: {}",
                 loginUser.getUserName(), name, note, type, connectType, other);
-        String parameter = dataSourceService.buildParameter(name, note, type, 
host, port, database, principal, userName, password, connectType, other);
+        String parameter = dataSourceService.buildParameter(type, host, port, 
database, principal, userName, password, connectType, other);
         Map<String, Object> dataSource = 
dataSourceService.updateDataSource(id, loginUser, name, note, type, parameter);
         return returnDataList(dataSource);
     }
@@ -280,7 +280,7 @@ public class DataSourceController extends BaseController {
                                     @RequestParam(value = "other") String 
other) {
         logger.info("login user {}, connect datasource: {}, note: {}, type: 
{}, connectType: {}, other: {}",
                 loginUser.getUserName(), name, note, type, connectType, other);
-        String parameter = dataSourceService.buildParameter(name, note, type, 
host, port, database, principal, userName, password, connectType, other);
+        String parameter = dataSourceService.buildParameter(type, host, port, 
database, principal, userName, password, connectType, other);
         Boolean isConnection = dataSourceService.checkConnection(type, 
parameter);
         Result result = new Result();
 
@@ -310,7 +310,7 @@ public class DataSourceController extends BaseController {
                                  @RequestParam("id") int id) {
         logger.info("connection test, login user:{}, id:{}", 
loginUser.getUserName(), id);
 
-        Boolean isConnection = dataSourceService.connectionTest(loginUser, id);
+        Boolean isConnection = dataSourceService.connectionTest(id);
         Result result = new Result();
 
         if (isConnection) {
@@ -361,7 +361,7 @@ public class DataSourceController extends BaseController {
         logger.info("login user {}, verfiy datasource name: {}",
                 loginUser.getUserName(), name);
 
-        return dataSourceService.verifyDataSourceName(loginUser, name);
+        return dataSourceService.verifyDataSourceName(name);
     }
 
 
diff --git 
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/DataSourceService.java
 
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/DataSourceService.java
index 49ed52b..69ab666 100644
--- 
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/DataSourceService.java
+++ 
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/DataSourceService.java
@@ -53,7 +53,7 @@ import static 
org.apache.dolphinscheduler.common.utils.PropertyUtils.getString;
  * datasource service
  */
 @Service
-public class DataSourceService extends BaseService{
+public class DataSourceService extends BaseService {
 
     private static final Logger logger = 
LoggerFactory.getLogger(DataSourceService.class);
 
@@ -65,7 +65,6 @@ public class DataSourceService extends BaseService{
     public static final String PRINCIPAL = "principal";
     public static final String DATABASE = "database";
     public static final String USER_NAME = "userName";
-    public static final String PASSWORD = Constants.PASSWORD;
     public static final String OTHER = "other";
 
 
@@ -80,9 +79,9 @@ public class DataSourceService extends BaseService{
      * create data source
      *
      * @param loginUser login user
-     * @param name data source name
-     * @param desc data source description
-     * @param type data source type
+     * @param name      data source name
+     * @param desc      data source description
+     * @param type      data source type
      * @param parameter datasource parameters
      * @return create result code
      */
@@ -131,11 +130,11 @@ public class DataSourceService extends BaseService{
      * updateProcessInstance datasource
      *
      * @param loginUser login user
-     * @param name data source name
-     * @param desc data source description
-     * @param type data source type
+     * @param name      data source name
+     * @param desc      data source description
+     * @param type      data source type
      * @param parameter datasource parameters
-     * @param id data source id
+     * @param id        data source id
      * @return update result code
      */
     public Map<String, Object> updateDataSource(int id, User loginUser, String 
name, String desc, DbType type, String parameter) {
@@ -148,13 +147,13 @@ public class DataSourceService extends BaseService{
             return result;
         }
 
-        if(!hasPerm(loginUser, dataSource.getUserId())){
+        if (!hasPerm(loginUser, dataSource.getUserId())) {
             putMsg(result, Status.USER_NO_OPERATION_PERM);
             return result;
         }
 
         //check name can use or not
-        if(!name.trim().equals(dataSource.getName()) && checkName(name)){
+        if (!name.trim().equals(dataSource.getName()) && checkName(name)) {
             putMsg(result, Status.DATASOURCE_EXIST);
             return result;
         }
@@ -199,6 +198,7 @@ public class DataSourceService extends BaseService{
 
     /**
      * updateProcessInstance datasource
+     *
      * @param id datasource id
      * @return data source detail
      */
@@ -220,11 +220,11 @@ public class DataSourceService extends BaseService{
         String parameter = dataSource.getConnectionParams();
 
         BaseDataSource datasourceForm = 
DataSourceFactory.getDatasource(dataSource.getType(), parameter);
-        DbConnectType  connectType = null;
+        DbConnectType connectType = null;
         String hostSeperator = Constants.DOUBLE_SLASH;
-        if(DbType.ORACLE.equals(dataSource.getType())){
+        if (DbType.ORACLE.equals(dataSource.getType())) {
             connectType = ((OracleDataSource) datasourceForm).getConnectType();
-            if(DbConnectType.ORACLE_SID.equals(connectType)){
+            if (DbConnectType.ORACLE_SID.equals(connectType)) {
                 hostSeperator = Constants.AT_SIGN;
             }
         }
@@ -233,7 +233,7 @@ public class DataSourceService extends BaseService{
         String other = datasourceForm.getOther();
         String address = datasourceForm.getAddress();
 
-        String[] hostsPorts = getHostsAndPort(address,hostSeperator);
+        String[] hostsPorts = getHostsAndPort(address, hostSeperator);
         // ip host
         String host = hostsPorts[0];
         // prot
@@ -285,14 +285,13 @@ public class DataSourceService extends BaseService{
         return result;
     }
 
-
     /**
      * query datasource list by keyword
      *
      * @param loginUser login user
      * @param searchVal search value
-     * @param pageNo page number
-     * @param pageSize page size
+     * @param pageNo    page number
+     * @param pageSize  page size
      * @return data source list page
      */
     public Map<String, Object> queryDataSourceListPaging(User loginUser, 
String searchVal, Integer pageNo, Integer pageSize) {
@@ -302,14 +301,14 @@ public class DataSourceService extends BaseService{
 
         if (isAdmin(loginUser)) {
             dataSourceList = dataSourceMapper.selectPaging(dataSourcePage, 0, 
searchVal);
-        }else{
+        } else {
             dataSourceList = dataSourceMapper.selectPaging(dataSourcePage, 
loginUser.getId(), searchVal);
         }
 
-        List<DataSource> dataSources = dataSourceList.getRecords();
+        List<DataSource> dataSources = dataSourceList != null ? 
dataSourceList.getRecords() : new ArrayList<>();
         handlePasswd(dataSources);
         PageInfo pageInfo = new PageInfo<Resource>(pageNo, pageSize);
-        pageInfo.setTotalCount((int)(dataSourceList.getTotal()));
+        pageInfo.setTotalCount((int) (dataSourceList != null ? 
dataSourceList.getTotal() : 0L));
         pageInfo.setLists(dataSources);
         result.put(Constants.DATA_LIST, pageInfo);
         putMsg(result, Status.SUCCESS);
@@ -319,14 +318,15 @@ public class DataSourceService extends BaseService{
 
     /**
      * handle datasource connection password for safety
+     *
      * @param dataSourceList
      */
     private void handlePasswd(List<DataSource> dataSourceList) {
 
         for (DataSource dataSource : dataSourceList) {
 
-            String connectionParams  = dataSource.getConnectionParams();
-            ObjectNode  object = JSONUtils.parseObject(connectionParams);
+            String connectionParams = dataSource.getConnectionParams();
+            ObjectNode object = JSONUtils.parseObject(connectionParams);
             object.put(Constants.PASSWORD, Constants.XXXXXX);
             dataSource.setConnectionParams(object.toString());
 
@@ -337,7 +337,7 @@ public class DataSourceService extends BaseService{
      * query data resource list
      *
      * @param loginUser login user
-     * @param type data source type
+     * @param type      data source type
      * @return data source list page
      */
     public Map<String, Object> queryDataSourceList(User loginUser, Integer 
type) {
@@ -347,7 +347,7 @@ public class DataSourceService extends BaseService{
 
         if (isAdmin(loginUser)) {
             datasourceList = dataSourceMapper.listAllDataSourceByType(type);
-        }else{
+        } else {
             datasourceList = 
dataSourceMapper.queryDataSourceByType(loginUser.getId(), type);
         }
 
@@ -360,11 +360,10 @@ public class DataSourceService extends BaseService{
     /**
      * verify datasource exists
      *
-     * @param loginUser login user
-     * @param name datasource name
+     * @param name      datasource name
      * @return true if data datasource not exists, otherwise return false
      */
-    public Result verifyDataSourceName(User loginUser, String name) {
+    public Result verifyDataSourceName(String name) {
         Result result = new Result();
         List<DataSource> dataSourceList = 
dataSourceMapper.queryDataSourceByName(name);
         if (dataSourceList != null && dataSourceList.size() > 0) {
@@ -380,7 +379,7 @@ public class DataSourceService extends BaseService{
     /**
      * get connection
      *
-     * @param dbType datasource type
+     * @param dbType    datasource type
      * @param parameter parameter
      * @return connection for datasource
      */
@@ -399,18 +398,18 @@ public class DataSourceService extends BaseService{
                     break;
                 case HIVE:
                 case SPARK:
-                    if (CommonUtils.getKerberosStartupState())  {
-                            
System.setProperty(org.apache.dolphinscheduler.common.Constants.JAVA_SECURITY_KRB5_CONF,
-                                    
getString(org.apache.dolphinscheduler.common.Constants.JAVA_SECURITY_KRB5_CONF_PATH));
-                            Configuration configuration = new Configuration();
-                            
configuration.set(org.apache.dolphinscheduler.common.Constants.HADOOP_SECURITY_AUTHENTICATION,
 "kerberos");
-                            
UserGroupInformation.setConfiguration(configuration);
-                            
UserGroupInformation.loginUserFromKeytab(getString(org.apache.dolphinscheduler.common.Constants.LOGIN_USER_KEY_TAB_USERNAME),
-                                    
getString(org.apache.dolphinscheduler.common.Constants.LOGIN_USER_KEY_TAB_PATH));
+                    if (CommonUtils.getKerberosStartupState()) {
+                        
System.setProperty(org.apache.dolphinscheduler.common.Constants.JAVA_SECURITY_KRB5_CONF,
+                                
getString(org.apache.dolphinscheduler.common.Constants.JAVA_SECURITY_KRB5_CONF_PATH));
+                        Configuration configuration = new Configuration();
+                        
configuration.set(org.apache.dolphinscheduler.common.Constants.HADOOP_SECURITY_AUTHENTICATION,
 "kerberos");
+                        UserGroupInformation.setConfiguration(configuration);
+                        
UserGroupInformation.loginUserFromKeytab(getString(org.apache.dolphinscheduler.common.Constants.LOGIN_USER_KEY_TAB_USERNAME),
+                                
getString(org.apache.dolphinscheduler.common.Constants.LOGIN_USER_KEY_TAB_PATH));
                     }
-                    if (dbType == DbType.HIVE){
+                    if (dbType == DbType.HIVE) {
                         datasource = JSONUtils.parseObject(parameter, 
HiveDataSource.class);
-                    }else if (dbType == DbType.SPARK){
+                    } else if (dbType == DbType.SPARK) {
                         datasource = JSONUtils.parseObject(parameter, 
SparkDataSource.class);
                     }
                     Class.forName(Constants.ORG_APACHE_HIVE_JDBC_HIVE_DRIVER);
@@ -439,20 +438,19 @@ public class DataSourceService extends BaseService{
                     break;
             }
 
-            if(datasource != null){
+            if (datasource != null) {
                 connection = 
DriverManager.getConnection(datasource.getJdbcUrl(), datasource.getUser(), 
datasource.getPassword());
             }
         } catch (Exception e) {
-            logger.error(e.getMessage(),e);
+            logger.error(e.getMessage(), e);
         }
         return connection;
     }
 
-
     /**
      * check connection
      *
-     * @param type data source type
+     * @param type      data source type
      * @param parameter data source parameters
      * @return true if connect successfully, otherwise false
      */
@@ -470,35 +468,35 @@ public class DataSourceService extends BaseService{
         return isConnection;
     }
 
-
     /**
      * test connection
      *
-     * @param loginUser login user
      * @param id datasource id
      * @return connect result code
      */
-    public boolean connectionTest(User loginUser, int id) {
+    public boolean connectionTest(int id) {
         DataSource dataSource = dataSourceMapper.selectById(id);
-        return checkConnection(dataSource.getType(), 
dataSource.getConnectionParams());
+        if (dataSource != null) {
+            return checkConnection(dataSource.getType(), 
dataSource.getConnectionParams());
+        } else {
+            return false;
+        }
     }
 
     /**
      * build paramters
      *
-     * @param name data source name
-     * @param desc data source description
-     * @param type data source  type
-     * @param host data source  host
-     * @param port data source port
-     * @param database data source database name
-     * @param userName user name
-     * @param password password
-     * @param other other parameters
+     * @param type      data source  type
+     * @param host      data source  host
+     * @param port      data source port
+     * @param database  data source database name
+     * @param userName  user name
+     * @param password  password
+     * @param other     other parameters
      * @param principal principal
      * @return datasource parameter
      */
-    public String buildParameter(String name, String desc, DbType type, String 
host,
+    public String buildParameter(DbType type, String host,
                                  String port, String database, String 
principal, String userName,
                                  String password, DbConnectType connectType, 
String other) {
 
@@ -510,7 +508,7 @@ public class DataSourceService extends BaseService{
         }
 
         if (CommonUtils.getKerberosStartupState() &&
-                (type == DbType.HIVE || type == DbType.SPARK)){
+                (type == DbType.HIVE || type == DbType.SPARK)) {
             jdbcUrl += ";principal=" + principal;
         }
 
@@ -535,14 +533,14 @@ public class DataSourceService extends BaseService{
         parameterMap.put(Constants.USER, userName);
         parameterMap.put(Constants.PASSWORD, 
CommonUtils.encodePassword(password));
         if (CommonUtils.getKerberosStartupState() &&
-                (type == DbType.HIVE || type == DbType.SPARK)){
-            parameterMap.put(Constants.PRINCIPAL,principal);
+                (type == DbType.HIVE || type == DbType.SPARK)) {
+            parameterMap.put(Constants.PRINCIPAL, principal);
         }
         if (other != null && !"".equals(other)) {
             Map<String, String> map = JSONUtils.toMap(other);
             if (map.size() > 0) {
                 StringBuilder otherSb = new StringBuilder();
-                for (Map.Entry<String, String> entry: map.entrySet()) {
+                for (Map.Entry<String, String> entry : map.entrySet()) {
                     otherSb.append(String.format("%s=%s%s", entry.getKey(), 
entry.getValue(), separator));
                 }
                 if (!Constants.DB2.equals(type.name())) {
@@ -553,7 +551,7 @@ public class DataSourceService extends BaseService{
 
         }
 
-        if(logger.isDebugEnabled()){
+        if (logger.isDebugEnabled()) {
             logger.info("parameters map:{}", 
JSONUtils.toJsonString(parameterMap));
         }
         return JSONUtils.toJsonString(parameterMap);
@@ -605,7 +603,7 @@ public class DataSourceService extends BaseService{
     /**
      * delete datasource
      *
-     * @param loginUser login user
+     * @param loginUser    login user
      * @param datasourceId data source id
      * @return delete result code
      */
@@ -615,12 +613,12 @@ public class DataSourceService extends BaseService{
         try {
             //query datasource by id
             DataSource dataSource = dataSourceMapper.selectById(datasourceId);
-            if(dataSource == null){
+            if (dataSource == null) {
                 logger.error("resource id {} not exist", datasourceId);
                 putMsg(result, Status.RESOURCE_NOT_EXIST);
                 return result;
             }
-            if(!hasPerm(loginUser, dataSource.getUserId())){
+            if (!hasPerm(loginUser, dataSource.getUserId())) {
                 putMsg(result, Status.USER_NO_OPERATION_PERM);
                 return result;
             }
@@ -628,7 +626,7 @@ public class DataSourceService extends BaseService{
             datasourceUserMapper.deleteByDatasourceId(datasourceId);
             putMsg(result, Status.SUCCESS);
         } catch (Exception e) {
-            logger.error("delete datasource error",e);
+            logger.error("delete datasource error", e);
             throw new RuntimeException("delete datasource error");
         }
         return result;
@@ -638,7 +636,7 @@ public class DataSourceService extends BaseService{
      * unauthorized datasource
      *
      * @param loginUser login user
-     * @param userId user id
+     * @param userId    user id
      * @return unauthed data source result code
      */
     public Map<String, Object> unauthDatasource(User loginUser, Integer 
userId) {
@@ -679,7 +677,7 @@ public class DataSourceService extends BaseService{
      * authorized datasource
      *
      * @param loginUser login user
-     * @param userId user id
+     * @param userId    user id
      * @return authorized result code
      */
     public Map<String, Object> authedDatasource(User loginUser, Integer 
userId) {
@@ -700,11 +698,11 @@ public class DataSourceService extends BaseService{
     /**
      * get host and port by address
      *
-     * @param address   address
+     * @param address address
      * @return sting array: [host,port]
      */
     private String[] getHostsAndPort(String address) {
-        return getHostsAndPort(address,Constants.DOUBLE_SLASH);
+        return getHostsAndPort(address, Constants.DOUBLE_SLASH);
     }
 
     /**
@@ -714,7 +712,7 @@ public class DataSourceService extends BaseService{
      * @param separator separator
      * @return sting array: [host,port]
      */
-    private String[] getHostsAndPort(String address,String separator) {
+    private String[] getHostsAndPort(String address, String separator) {
         String[] result = new String[2];
         String[] tmpArray = address.split(separator);
         String hostsAndPorts = tmpArray[tmpArray.length - 1];
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 c185868..789e5f6 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
@@ -22,10 +22,14 @@ import org.apache.dolphinscheduler.common.Constants;
 import org.apache.dolphinscheduler.common.enums.DbConnectType;
 import org.apache.dolphinscheduler.common.enums.DbType;
 import org.apache.dolphinscheduler.common.enums.UserType;
+import org.apache.dolphinscheduler.common.utils.JSONUtils;
 import org.apache.dolphinscheduler.common.utils.PropertyUtils;
+import org.apache.dolphinscheduler.dao.datasource.DataSourceFactory;
+import org.apache.dolphinscheduler.dao.datasource.MySQLDataSource;
 import org.apache.dolphinscheduler.dao.entity.DataSource;
 import org.apache.dolphinscheduler.dao.entity.User;
 import org.apache.dolphinscheduler.dao.mapper.DataSourceMapper;
+import org.apache.dolphinscheduler.dao.mapper.DataSourceUserMapper;
 import org.junit.Assert;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -35,8 +39,6 @@ import org.mockito.Mockito;
 import org.powermock.api.mockito.PowerMockito;
 import org.powermock.core.classloader.annotations.PowerMockIgnore;
 import org.powermock.modules.junit4.PowerMockRunner;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -45,16 +47,172 @@ import java.util.Map;
 @RunWith(PowerMockRunner.class)
 @PowerMockIgnore({"sun.security.*", "javax.net.*"})
 public class DataSourceServiceTest {
-    private static final Logger logger = 
LoggerFactory.getLogger(DataSourceServiceTest.class);
 
     @InjectMocks
     private DataSourceService dataSourceService;
     @Mock
     private DataSourceMapper dataSourceMapper;
+    @Mock
+    private DataSourceUserMapper datasourceUserMapper;
+
+    public void createDataSourceTest() {
+        User loginUser = getAdminUser();
+
+        String dataSourceName = "dataSource01";
+        String dataSourceDesc = "test dataSource";
+        DbType dataSourceType = DbType.POSTGRESQL;
+        String parameter = dataSourceService.buildParameter(dataSourceType, 
"172.16.133.200", "5432", "dolphinscheduler", null, "postgres", "", null, null);
+
+        // data source exits
+        List<DataSource> dataSourceList = new ArrayList<>();
+        DataSource dataSource = new DataSource();
+        dataSource.setName(dataSourceName);
+        dataSourceList.add(dataSource);
+        
PowerMockito.when(dataSourceMapper.queryDataSourceByName(dataSourceName.trim())).thenReturn(dataSourceList);
+        Map<String, Object> dataSourceExitsResult = 
dataSourceService.createDataSource(loginUser, dataSourceName, dataSourceDesc, 
dataSourceType, parameter);
+        Assert.assertEquals(Status.DATASOURCE_EXIST, 
dataSourceExitsResult.get(Constants.STATUS));
+
+        // data source exits
+        
PowerMockito.when(dataSourceMapper.queryDataSourceByName(dataSourceName.trim())).thenReturn(null);
+        PowerMockito.when(dataSourceService.checkConnection(dataSourceType, 
parameter)).thenReturn(false);
+        Map<String, Object> connectFailedResult = 
dataSourceService.createDataSource(loginUser, dataSourceName, dataSourceDesc, 
dataSourceType, parameter);
+        Assert.assertEquals(Status.DATASOURCE_CONNECT_FAILED, 
connectFailedResult.get(Constants.STATUS));
+
+        // data source exits
+        
PowerMockito.when(dataSourceMapper.queryDataSourceByName(dataSourceName.trim())).thenReturn(null);
+        PowerMockito.when(dataSourceService.checkConnection(dataSourceType, 
parameter)).thenReturn(true);
+        PowerMockito.when(DataSourceFactory.getDatasource(dataSourceType, 
parameter)).thenReturn(null);
+        Map<String, Object> notValidError = 
dataSourceService.createDataSource(loginUser, dataSourceName, dataSourceDesc, 
dataSourceType, parameter);
+        Assert.assertEquals(Status.REQUEST_PARAMS_NOT_VALID_ERROR, 
notValidError.get(Constants.STATUS));
+
+        // success
+        
PowerMockito.when(dataSourceMapper.queryDataSourceByName(dataSourceName.trim())).thenReturn(null);
+        PowerMockito.when(dataSourceService.checkConnection(dataSourceType, 
parameter)).thenReturn(true);
+        PowerMockito.when(DataSourceFactory.getDatasource(dataSourceType, 
parameter)).thenReturn(JSONUtils.parseObject(parameter, MySQLDataSource.class));
+        Map<String, Object> success = 
dataSourceService.createDataSource(loginUser, dataSourceName, dataSourceDesc, 
dataSourceType, parameter);
+        Assert.assertEquals(Status.SUCCESS, success.get(Constants.STATUS));
+    }
+
+    public void updateDataSourceTest() {
+        User loginUser = getAdminUser();
+
+        int dataSourceId = 12;
+        String dataSourceName = "dataSource01";
+        String dataSourceDesc = "test dataSource";
+        DbType dataSourceType = DbType.POSTGRESQL;
+        String parameter = dataSourceService.buildParameter(dataSourceType, 
"172.16.133.200", "5432", "dolphinscheduler", null, "postgres", "", null, null);
+
+        // data source not exits
+        
PowerMockito.when(dataSourceMapper.selectById(dataSourceId)).thenReturn(null);
+        Map<String, Object> resourceNotExits = 
dataSourceService.updateDataSource(dataSourceId, loginUser, dataSourceName, 
dataSourceDesc, dataSourceType, parameter);
+        Assert.assertEquals(Status.RESOURCE_NOT_EXIST, 
resourceNotExits.get(Constants.STATUS));
+        // user no operation perm
+        DataSource dataSource = new DataSource();
+        dataSource.setUserId(0);
+        
PowerMockito.when(dataSourceMapper.selectById(dataSourceId)).thenReturn(dataSource);
+        Map<String, Object> userNoOperationPerm = 
dataSourceService.updateDataSource(dataSourceId, loginUser, dataSourceName, 
dataSourceDesc, dataSourceType, parameter);
+        Assert.assertEquals(Status.USER_NO_OPERATION_PERM, 
userNoOperationPerm.get(Constants.STATUS));
+
+        // data source name exits
+        dataSource.setUserId(-1);
+        List<DataSource> dataSourceList = new ArrayList<>();
+        dataSourceList.add(dataSource);
+        
PowerMockito.when(dataSourceMapper.selectById(dataSourceId)).thenReturn(dataSource);
+        
PowerMockito.when(dataSourceMapper.queryDataSourceByName(dataSourceName)).thenReturn(dataSourceList);
+        Map<String, Object> dataSourceNameExist = 
dataSourceService.updateDataSource(dataSourceId, loginUser, dataSourceName, 
dataSourceDesc, dataSourceType, parameter);
+        Assert.assertEquals(Status.DATASOURCE_EXIST, 
dataSourceNameExist.get(Constants.STATUS));
+
+        // data source connect failed
+        
PowerMockito.when(dataSourceMapper.selectById(dataSourceId)).thenReturn(dataSource);
+        
PowerMockito.when(dataSourceMapper.queryDataSourceByName(dataSourceName)).thenReturn(null);
+        PowerMockito.when(dataSourceService.checkConnection(dataSourceType, 
parameter)).thenReturn(true);
+        Map<String, Object> connectFailed = 
dataSourceService.updateDataSource(dataSourceId, loginUser, dataSourceName, 
dataSourceDesc, dataSourceType, parameter);
+        Assert.assertEquals(Status.DATASOURCE_CONNECT_FAILED, 
connectFailed.get(Constants.STATUS));
+
+        //success
+        
PowerMockito.when(dataSourceMapper.selectById(dataSourceId)).thenReturn(dataSource);
+        
PowerMockito.when(dataSourceMapper.queryDataSourceByName(dataSourceName)).thenReturn(null);
+        PowerMockito.when(dataSourceService.checkConnection(dataSourceType, 
parameter)).thenReturn(false);
+        Map<String, Object> success = 
dataSourceService.updateDataSource(dataSourceId, loginUser, dataSourceName, 
dataSourceDesc, dataSourceType, parameter);
+        Assert.assertEquals(Status.SUCCESS, 
connectFailed.get(Constants.STATUS));
+
+    }
+
+    @Test
+    public void queryDataSourceListPagingTest() {
+        User loginUser = getAdminUser();
+        String searchVal = "";
+        int pageNo = 1;
+        int pageSize = 10;
+        Map<String, Object> success = 
dataSourceService.queryDataSourceListPaging(loginUser, searchVal, pageNo, 
pageSize);
+        Assert.assertEquals(Status.SUCCESS, success.get(Constants.STATUS));
+    }
+
+    @Test
+    public void connectionTest() {
+        int dataSourceId = -1;
+        
PowerMockito.when(dataSourceMapper.selectById(dataSourceId)).thenReturn(null);
+        Assert.assertFalse(dataSourceService.connectionTest(dataSourceId));
+    }
 
     @Test
-    public void queryDataSourceListTest(){
+    public void deleteTest() {
+        User loginUser = getAdminUser();
+        int dataSourceId = 1;
+        Result result = new Result();
 
+        //resource not exist
+        dataSourceService.putMsg(result, Status.RESOURCE_NOT_EXIST);
+        
PowerMockito.when(dataSourceMapper.selectById(dataSourceId)).thenReturn(null);
+        Assert.assertEquals(result.getCode(), 
dataSourceService.delete(loginUser, dataSourceId).getCode());
+
+        // user no operation perm
+        dataSourceService.putMsg(result, Status.USER_NO_OPERATION_PERM);
+        DataSource dataSource = new DataSource();
+        dataSource.setUserId(0);
+        
PowerMockito.when(dataSourceMapper.selectById(dataSourceId)).thenReturn(dataSource);
+        Assert.assertEquals(result.getCode(), 
dataSourceService.delete(loginUser, dataSourceId).getCode());
+
+        // success
+        dataSourceService.putMsg(result, Status.SUCCESS);
+        dataSource.setUserId(-1);
+        
PowerMockito.when(dataSourceMapper.selectById(dataSourceId)).thenReturn(dataSource);
+        Assert.assertEquals(result.getCode(), 
dataSourceService.delete(loginUser, dataSourceId).getCode());
+
+    }
+
+    @Test
+    public void unauthDatasourceTest() {
+        User loginUser = getAdminUser();
+        int userId = -1;
+
+        //user no operation perm
+        Map<String, Object> noOperationPerm = 
dataSourceService.unauthDatasource(loginUser, userId);
+        Assert.assertEquals(Status.USER_NO_OPERATION_PERM, 
noOperationPerm.get(Constants.STATUS));
+
+        //success
+        loginUser.setUserType(UserType.ADMIN_USER);
+        Map<String, Object> success = 
dataSourceService.unauthDatasource(loginUser, userId);
+        Assert.assertEquals(Status.SUCCESS, success.get(Constants.STATUS));
+    }
+
+    @Test
+    public void authedDatasourceTest() {
+        User loginUser = getAdminUser();
+        int userId = -1;
+
+        //user no operation perm
+        Map<String, Object> noOperationPerm = 
dataSourceService.authedDatasource(loginUser, userId);
+        Assert.assertEquals(Status.USER_NO_OPERATION_PERM, 
noOperationPerm.get(Constants.STATUS));
+
+        //success
+        loginUser.setUserType(UserType.ADMIN_USER);
+        Map<String, Object> success = 
dataSourceService.authedDatasource(loginUser, userId);
+        Assert.assertEquals(Status.SUCCESS, success.get(Constants.STATUS));
+    }
+
+    @Test
+    public void queryDataSourceListTest() {
         User loginUser = new User();
         loginUser.setUserType(UserType.GENERAL_USER);
         Map<String, Object> map = 
dataSourceService.queryDataSourceList(loginUser, DbType.MYSQL.ordinal());
@@ -62,35 +220,34 @@ public class DataSourceServiceTest {
     }
 
     @Test
-    public void verifyDataSourceNameTest(){
+    public void verifyDataSourceNameTest() {
         User loginUser = new User();
         loginUser.setUserType(UserType.GENERAL_USER);
         String dataSourceName = "dataSource1";
         
PowerMockito.when(dataSourceMapper.queryDataSourceByName(dataSourceName)).thenReturn(getDataSourceList());
-        Result result = dataSourceService.verifyDataSourceName(loginUser, 
dataSourceName);
-        Assert.assertEquals(Status.DATASOURCE_EXIST.getMsg(),result.getMsg());
+        Result result = dataSourceService.verifyDataSourceName(dataSourceName);
+        Assert.assertEquals(Status.DATASOURCE_EXIST.getMsg(), result.getMsg());
     }
 
     @Test
-    public void queryDataSourceTest(){
+    public void queryDataSourceTest() {
         
PowerMockito.when(dataSourceMapper.selectById(Mockito.anyInt())).thenReturn(null);
         Map<String, Object> result = 
dataSourceService.queryDataSource(Mockito.anyInt());
-        
Assert.assertEquals(((Status)result.get(Constants.STATUS)).getCode(),Status.RESOURCE_NOT_EXIST.getCode());
+        Assert.assertEquals(((Status) result.get(Constants.STATUS)).getCode(), 
Status.RESOURCE_NOT_EXIST.getCode());
 
         
PowerMockito.when(dataSourceMapper.selectById(Mockito.anyInt())).thenReturn(getOracleDataSource());
         result = dataSourceService.queryDataSource(Mockito.anyInt());
-        
Assert.assertEquals(((Status)result.get(Constants.STATUS)).getCode(),Status.SUCCESS.getCode());
+        Assert.assertEquals(((Status) result.get(Constants.STATUS)).getCode(), 
Status.SUCCESS.getCode());
     }
 
+    private List<DataSource> getDataSourceList() {
 
-    private List<DataSource> getDataSourceList(){
-
-        List<DataSource> dataSources =  new ArrayList<>();
+        List<DataSource> dataSources = new ArrayList<>();
         dataSources.add(getOracleDataSource());
         return dataSources;
     }
 
-    private DataSource getOracleDataSource(){
+    private DataSource getOracleDataSource() {
         DataSource dataSource = new DataSource();
         dataSource.setName("test");
         dataSource.setNote("Note");
@@ -101,31 +258,40 @@ public class DataSourceServiceTest {
     }
 
     @Test
-    public void buildParameter(){
-        String param = dataSourceService.buildParameter("","", DbType.ORACLE, 
"192.168.9.1","1521","im"
-                ,"","test","test", DbConnectType.ORACLE_SERVICE_NAME,"");
+    public void buildParameter() {
+        String param = dataSourceService.buildParameter(DbType.ORACLE, 
"192.168.9.1", "1521", "im"
+                , "", "test", "test", DbConnectType.ORACLE_SERVICE_NAME, "");
         String expected = 
"{\"connectType\":\"ORACLE_SERVICE_NAME\",\"type\":\"ORACLE_SERVICE_NAME\",\"address\":\"jdbc:oracle:thin:@//192.168.9.1:1521\",\"database\":\"im\",\"jdbcUrl\":\"jdbc:oracle:thin:@//192.168.9.1:1521/im\",\"user\":\"test\",\"password\":\"test\"}";
         Assert.assertEquals(expected, param);
     }
 
     @Test
-    public void buildParameterWithDecodePassword(){
-        PropertyUtils.setValue(Constants.DATASOURCE_ENCRYPTION_ENABLE,"true");
-        String param = dataSourceService.buildParameter("name","desc", 
DbType.MYSQL, "192.168.9.1","1521","im"
-                ,"","test","123456", null,"");
+    public void buildParameterWithDecodePassword() {
+        PropertyUtils.setValue(Constants.DATASOURCE_ENCRYPTION_ENABLE, "true");
+        String param = dataSourceService.buildParameter(DbType.MYSQL, 
"192.168.9.1", "1521", "im"
+                , "", "test", "123456", null, "");
         String expected = 
"{\"type\":null,\"address\":\"jdbc:mysql://192.168.9.1:1521\",\"database\":\"im\",\"jdbcUrl\":\"jdbc:mysql://192.168.9.1:1521/im\",\"user\":\"test\",\"password\":\"IUAjJCVeJipNVEl6TkRVMg==\"}";
         Assert.assertEquals(expected, param);
 
 
-        PropertyUtils.setValue(Constants.DATASOURCE_ENCRYPTION_ENABLE,"false");
-        param = dataSourceService.buildParameter("name","desc", DbType.MYSQL, 
"192.168.9.1","1521","im"
-                ,"","test","123456", null,"");
+        PropertyUtils.setValue(Constants.DATASOURCE_ENCRYPTION_ENABLE, 
"false");
+        param = dataSourceService.buildParameter(DbType.MYSQL, "192.168.9.1", 
"1521", "im"
+                , "", "test", "123456", null, "");
         expected = 
"{\"type\":null,\"address\":\"jdbc:mysql://192.168.9.1:1521\",\"database\":\"im\",\"jdbcUrl\":\"jdbc:mysql://192.168.9.1:1521/im\",\"user\":\"test\",\"password\":\"123456\"}";
         Assert.assertEquals(expected, param);
     }
 
-
-
-
+    /**
+     * get Mock Admin User
+     *
+     * @return admin user
+     */
+    private User getAdminUser() {
+        User loginUser = new User();
+        loginUser.setId(-1);
+        loginUser.setUserName("admin");
+        loginUser.setUserType(UserType.GENERAL_USER);
+        return loginUser;
+    }
 
 }
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
index 49e00ba..2c6dc9d 100644
--- a/pom.xml
+++ b/pom.xml
@@ -724,7 +724,7 @@
                         
<include>**/api/service/BaseDAGServiceTest.java</include>
                         <include>**/api/service/BaseServiceTest.java</include>
                         
<include>**/api/service/DataAnalysisServiceTest.java</include>
-                        
<!--<include>**/api/service/DataSourceServiceTest.java</include>-->
+                        
<include>**/api/service/DataSourceServiceTest.java</include>
                         
<include>**/api/service/ExecutorService2Test.java</include>
                         
<include>**/api/service/ExecutorServiceTest.java</include>
                         
<include>**/api/service/LoggerServiceTest.java</include>

Reply via email to