Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
liyuanzhong001
DolphinScheduler
提交
7ca60c7e
DolphinScheduler
项目概览
liyuanzhong001
/
DolphinScheduler
与 Fork 源项目一致
Fork自
apache / DolphinScheduler
通知
11
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
DolphinScheduler
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
7ca60c7e
编写于
8月 24, 2020
作者:
B
break60
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'dev' of
https://github.com/apache/incubator-dolphinscheduler
into dev
上级
cab72aea
78eb07b3
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
268 addition
and
104 deletion
+268
-104
dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/controller/DataSourceController.java
...dolphinscheduler/api/controller/DataSourceController.java
+5
-5
dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/DataSourceService.java
...pache/dolphinscheduler/api/service/DataSourceService.java
+69
-71
dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/DataSourceServiceTest.java
...e/dolphinscheduler/api/service/DataSourceServiceTest.java
+193
-27
pom.xml
pom.xml
+1
-1
未找到文件。
dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/controller/DataSourceController.java
浏览文件 @
7ca60c7e
...
...
@@ -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
);
}
...
...
dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/DataSourceService.java
浏览文件 @
7ca60c7e
...
...
@@ -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
];
...
...
dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/DataSourceServiceTest.java
浏览文件 @
7ca60c7e
...
...
@@ -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
pom.xml
浏览文件 @
7ca60c7e
...
...
@@ -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>
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录