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>