You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@dolphinscheduler.apache.org by le...@apache.org on 2020/05/27 07:52:10 UTC
[incubator-dolphinscheduler] branch dev-1.3.0 updated: When update
the data source, the host and port show error (#2821)
This is an automated email from the ASF dual-hosted git repository.
leonbao pushed a commit to branch dev-1.3.0
in repository https://gitbox.apache.org/repos/asf/incubator-dolphinscheduler.git
The following commit(s) were added to refs/heads/dev-1.3.0 by this push:
new fadb69b When update the data source,the host and port show error (#2821)
fadb69b is described below
commit fadb69b18134c1160deac9db9a3084217f5aee8f
Author: lgcareer <18...@163.com>
AuthorDate: Wed May 27 15:51:58 2020 +0800
When update the data source,the host and port show error (#2821)
* When update the data source,the host and port show error
* update DataSourceServiceTest
* update DataSourceServiceTest
* update DataSourceServiceTest
---
.../api/service/DataSourceService.java | 41 ++++++++++----
.../api/service/DataSourceServiceTest.java | 65 +++++++++++++++++++---
.../apache/dolphinscheduler/common/Constants.java | 5 ++
.../dao/datasource/OracleDataSource.java | 12 ++--
4 files changed, 96 insertions(+), 27 deletions(-)
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 afa13b7..b2b4251 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
@@ -211,12 +211,20 @@ public class DataSourceService extends BaseService{
String parameter = dataSource.getConnectionParams();
BaseDataSource datasourceForm = DataSourceFactory.getDatasource(dataSource.getType(), parameter);
+ DbConnectType connectType = null;
+ String hostSeperator = Constants.DOUBLE_SLASH;
+ if(DbType.ORACLE.equals(dataSource.getType())){
+ connectType = ((OracleDataSource) datasourceForm).getConnectType();
+ if(DbConnectType.ORACLE_SID.equals(connectType)){
+ hostSeperator = Constants.AT_SIGN;
+ }
+ }
String database = datasourceForm.getDatabase();
// jdbc connection params
String other = datasourceForm.getOther();
String address = datasourceForm.getAddress();
- String[] hostsPorts = getHostsAndPort(address);
+ String[] hostsPorts = getHostsAndPort(address,hostSeperator);
// ip host
String host = hostsPorts[0];
// prot
@@ -252,6 +260,10 @@ public class DataSourceService extends BaseService{
map.put(NAME, dataSourceName);
map.put(NOTE, desc);
map.put(TYPE, dataSourceType);
+ if (connectType != null) {
+ map.put(Constants.ORACLE_DB_CONNECT_TYPE, connectType);
+ }
+
map.put(HOST, host);
map.put(PORT, port);
map.put(PRINCIPAL, datasourceForm.getPrincipal());
@@ -478,13 +490,10 @@ public class DataSourceService extends BaseService{
String password, DbConnectType connectType, String other) {
String address = buildAddress(type, host, port, connectType);
-
- String jdbcUrl;
- if (Constants.ORACLE.equals(type.name())
- && connectType == DbConnectType.ORACLE_SID) {
- jdbcUrl = address + ":" + database;
- } else {
- jdbcUrl = address + "/" + database;
+ Map<String, Object> parameterMap = new LinkedHashMap<String, Object>(6);
+ String jdbcUrl = address + "/" + database;
+ if (Constants.ORACLE.equals(type.name())) {
+ parameterMap.put(Constants.ORACLE_DB_CONNECT_TYPE, connectType);
}
if (CommonUtils.getKerberosStartupState() &&
@@ -505,7 +514,6 @@ public class DataSourceService extends BaseService{
separator = ";";
}
- Map<String, Object> parameterMap = new LinkedHashMap<String, Object>(6);
parameterMap.put(Constants.ADDRESS, address);
parameterMap.put(Constants.DATABASE, database);
parameterMap.put(Constants.JDBC_URL, jdbcUrl);
@@ -675,12 +683,23 @@ public class DataSourceService extends BaseService{
/**
* get host and port by address
*
- * @param address
+ * @param address address
* @return sting array: [host,port]
*/
private String[] getHostsAndPort(String address) {
+ return getHostsAndPort(address,Constants.DOUBLE_SLASH);
+ }
+
+ /**
+ * get host and port by address
+ *
+ * @param address address
+ * @param separator separator
+ * @return sting array: [host,port]
+ */
+ private String[] getHostsAndPort(String address,String separator) {
String[] result = new String[2];
- String[] tmpArray = address.split(Constants.DOUBLE_SLASH);
+ String[] tmpArray = address.split(separator);
String hostsAndPorts = tmpArray[tmpArray.length - 1];
StringBuilder hosts = new StringBuilder();
String[] hostPortArray = hostsAndPorts.split(Constants.COMMA);
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 e47103f..d0714ff 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
@@ -16,38 +16,85 @@
*/
package org.apache.dolphinscheduler.api.service;
-import org.apache.dolphinscheduler.api.ApiApplicationServer;
import org.apache.dolphinscheduler.api.enums.Status;
+import org.apache.dolphinscheduler.api.utils.Result;
import org.apache.dolphinscheduler.common.Constants;
import org.apache.dolphinscheduler.common.enums.DbType;
import org.apache.dolphinscheduler.common.enums.UserType;
+import org.apache.dolphinscheduler.dao.entity.DataSource;
import org.apache.dolphinscheduler.dao.entity.User;
+import org.apache.dolphinscheduler.dao.mapper.DataSourceMapper;
import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
+import org.mockito.InjectMocks;
+import org.mockito.Mock;
+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 org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.boot.test.context.SpringBootTest;
-import org.springframework.test.context.junit4.SpringRunner;
+import java.util.ArrayList;
+import java.util.List;
import java.util.Map;
-@RunWith(SpringRunner.class)
-@SpringBootTest(classes = ApiApplicationServer.class)
+@RunWith(PowerMockRunner.class)
+@PowerMockIgnore({"sun.security.*", "javax.net.*"})
public class DataSourceServiceTest {
private static final Logger logger = LoggerFactory.getLogger(DataSourceServiceTest.class);
- @Autowired
+ @InjectMocks
private DataSourceService dataSourceService;
+ @Mock
+ private DataSourceMapper dataSourceMapper;
@Test
- public void queryDataSourceList(){
+ public void queryDataSourceListTest(){
User loginUser = new User();
- loginUser.setId(27);
loginUser.setUserType(UserType.GENERAL_USER);
Map<String, Object> map = dataSourceService.queryDataSourceList(loginUser, DbType.MYSQL.ordinal());
Assert.assertEquals(Status.SUCCESS, map.get(Constants.STATUS));
}
+
+ @Test
+ 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());
+ }
+
+ @Test
+ 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());
+
+ PowerMockito.when(dataSourceMapper.selectById(Mockito.anyInt())).thenReturn(getOracleDataSource());
+ result = dataSourceService.queryDataSource(Mockito.anyInt());
+ Assert.assertEquals(((Status)result.get(Constants.STATUS)).getCode(),Status.SUCCESS.getCode());
+ }
+
+
+ private List<DataSource> getDataSourceList(){
+
+ List<DataSource> dataSources = new ArrayList<>();
+ dataSources.add(getOracleDataSource());
+ return dataSources;
+ }
+
+ private DataSource getOracleDataSource(){
+ DataSource dataSource = new DataSource();
+ dataSource.setName("test");
+ dataSource.setNote("Note");
+ dataSource.setType(DbType.ORACLE);
+ dataSource.setConnectionParams("{\"connectType\":\"ORACLE_SID\",\"address\":\"jdbc:oracle:thin:@192.168.xx.xx:49161\",\"database\":\"XE\",\"jdbcUrl\":\"jdbc:oracle:thin:@192.168.xx.xx:49161/XE\",\"user\":\"system\",\"password\":\"oracle\"}");
+
+ return dataSource;
+ }
}
\ No newline at end of file
diff --git a/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/Constants.java b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/Constants.java
index 686dce3..df04e9a 100644
--- a/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/Constants.java
+++ b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/Constants.java
@@ -234,6 +234,10 @@ public final class Constants {
* EQUAL SIGN
*/
public static final String EQUAL_SIGN = "=";
+ /**
+ * AT SIGN
+ */
+ public static final String AT_SIGN = "@";
public static final String WORKER_MAX_CPULOAD_AVG = "worker.max.cpuload.avg";
@@ -916,6 +920,7 @@ public final class Constants {
public static final String JDBC_URL = "jdbcUrl";
public static final String PRINCIPAL = "principal";
public static final String OTHER = "other";
+ public static final String ORACLE_DB_CONNECT_TYPE = "connectType";
/**
diff --git a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/datasource/OracleDataSource.java b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/datasource/OracleDataSource.java
index 7666ca7..78fed24 100644
--- a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/datasource/OracleDataSource.java
+++ b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/datasource/OracleDataSource.java
@@ -19,22 +19,20 @@ package org.apache.dolphinscheduler.dao.datasource;
import org.apache.dolphinscheduler.common.Constants;
import org.apache.dolphinscheduler.common.enums.DbConnectType;
import org.apache.dolphinscheduler.common.enums.DbType;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
/**
* data source of Oracle
*/
public class OracleDataSource extends BaseDataSource {
- private DbConnectType type;
+ private DbConnectType connectType;
- public DbConnectType getType() {
- return type;
+ public DbConnectType getConnectType() {
+ return connectType;
}
- public void setType(DbConnectType type) {
- this.type = type;
+ public void setConnectType(DbConnectType connectType) {
+ this.connectType = connectType;
}
/**