You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by ki...@apache.org on 2020/10/16 12:48:19 UTC

[shardingsphere] branch master updated: Optimize scaling unit tests. (#7814)

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

kimmking pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/shardingsphere.git


The following commit(s) were added to refs/heads/master by this push:
     new d4f7330  Optimize scaling unit tests. (#7814)
d4f7330 is described below

commit d4f7330c3abaff4be3b447b1a55013f8b7acbbbd
Author: 邱鹿 Lucas <lu...@163.com>
AuthorDate: Fri Oct 16 20:47:41 2020 +0800

    Optimize scaling unit tests. (#7814)
    
    * Optimize scaling unit tests.
    
    * Optimize scaling unit tests.
    
    Co-authored-by: qiulu3 <Lucas209910>
---
 .../scaling/web/HttpServerHandler.java             |   2 +-
 .../scaling/utils/ReflectionUtil.java              |  85 ++++++++++++++
 .../scaling/utils/ScalingConfigurationUtil.java    |  50 +++++++++
 .../scaling/web/HttpServerHandlerTest.java         |  62 +++--------
 .../job/preparer/ShardingScalingJobPreparer.java   |   2 +-
 .../scaling/core/ScalingJobControllerTest.java     | 123 ++++++++-------------
 .../check/AbstractDataConsistencyCheckerTest.java  |  31 ++----
 .../core/datasource/DataSourceManagerTest.java     |  31 ++----
 ...IncrementalPositionResumeBreakPointManager.java |   2 +-
 ...UtilTest.java => ScalingConfigurationUtil.java} |  49 ++++----
 10 files changed, 239 insertions(+), 198 deletions(-)

diff --git a/shardingsphere-scaling/shardingsphere-scaling-bootstrap/src/main/java/org/apache/shardingsphere/scaling/web/HttpServerHandler.java b/shardingsphere-scaling/shardingsphere-scaling-bootstrap/src/main/java/org/apache/shardingsphere/scaling/web/HttpServerHandler.java
index a21b5df..8c5b676 100644
--- a/shardingsphere-scaling/shardingsphere-scaling-bootstrap/src/main/java/org/apache/shardingsphere/scaling/web/HttpServerHandler.java
+++ b/shardingsphere-scaling/shardingsphere-scaling-bootstrap/src/main/java/org/apache/shardingsphere/scaling/web/HttpServerHandler.java
@@ -142,7 +142,7 @@ public final class HttpServerHandler extends SimpleChannelInboundHandler<FullHtt
     
     @Override
     public void exceptionCaught(final ChannelHandlerContext context, final Throwable cause) {
-        log.warn("Http request handle occur error:", cause);
+        log.error("Http request handle occur error:", cause);
         response(GSON.toJson(ResponseContentUtil.handleException(cause.toString())), context, HttpResponseStatus.INTERNAL_SERVER_ERROR);
         context.close();
     }
diff --git a/shardingsphere-scaling/shardingsphere-scaling-bootstrap/src/test/java/org/apache/shardingsphere/scaling/utils/ReflectionUtil.java b/shardingsphere-scaling/shardingsphere-scaling-bootstrap/src/test/java/org/apache/shardingsphere/scaling/utils/ReflectionUtil.java
index 1bb1e69..fb037e2 100644
--- a/shardingsphere-scaling/shardingsphere-scaling-bootstrap/src/test/java/org/apache/shardingsphere/scaling/utils/ReflectionUtil.java
+++ b/shardingsphere-scaling/shardingsphere-scaling-bootstrap/src/test/java/org/apache/shardingsphere/scaling/utils/ReflectionUtil.java
@@ -21,6 +21,8 @@ import lombok.AccessLevel;
 import lombok.NoArgsConstructor;
 
 import java.lang.reflect.Field;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
 
 @NoArgsConstructor(access = AccessLevel.PRIVATE)
 public final class ReflectionUtil {
@@ -68,4 +70,87 @@ public final class ReflectionUtil {
         }
         throw new ClassCastException("field " + fieldName + " is " + target.getClass().getName() + " can cast to " + valueClass.getName());
     }
+    
+    /**
+     * Get field value from instance target object.
+     *
+     * @param targetClass target class
+     * @param fieldName field name
+     * @param <T> expected value class
+     * @return target filed value
+     * @throws NoSuchFieldException no such field exception
+     * @throws IllegalAccessException illegal access exception
+     */
+    @SuppressWarnings("unchecked")
+    public static <T> T getStaticFieldValueFromClass(final Class<?> targetClass, final String fieldName) throws NoSuchFieldException, IllegalAccessException {
+        Field field = getFieldFromClass(targetClass, fieldName, true);
+        Object value = field.get(null);
+        if (null == value) {
+            return null;
+        }
+        if (value.getClass().isAssignableFrom(value.getClass())) {
+            return (T) value;
+        }
+        return null;
+    }
+    
+    /**
+     * Set field value into target object.
+     *
+     * @param target target object
+     * @param fieldName field name
+     * @param value target filed value
+     * @throws NoSuchFieldException no such field exception
+     * @throws IllegalAccessException illegal access exception
+     */
+    public static void setFieldValue(final Object target, final String fieldName, final Object value) throws NoSuchFieldException, IllegalAccessException {
+        setFieldValue(target.getClass(), target, fieldName, value);
+    }
+    
+    /**
+     * Set field value into target object.
+     *
+     * @param targetClass target class
+     * @param targetObject target object
+     * @param fieldName field name
+     * @param value target filed value
+     * @throws NoSuchFieldException no such field exception
+     * @throws IllegalAccessException illegal access exception
+     */
+    public static void setFieldValue(final Class<?> targetClass, final Object targetObject, final String fieldName, final Object value) throws NoSuchFieldException, IllegalAccessException {
+        Field field = getFieldFromClass(targetClass, fieldName, true);
+        field.setAccessible(true);
+        field.set(targetObject, value);
+    }
+    
+    /**
+     * Invoke method.
+     *
+     * @param target target object
+     * @param methodName method name
+     * @throws NoSuchMethodException no such field exception
+     * @throws InvocationTargetException invocation target exception
+     * @throws IllegalAccessException illegal access exception
+     */
+    public static void invokeMethod(final Object target, final String methodName) throws NoSuchMethodException, IllegalAccessException, InvocationTargetException {
+        invokeMethod(target, methodName, new Class[0], new Object[0]);
+    }
+    
+    /**
+     * Invoke method.
+     *
+     * @param target target object
+     * @param methodName method name
+     * @param parameterTypes parameter types
+     * @param parameterValues parameter values
+     * @throws NoSuchMethodException no such field exception
+     * @throws InvocationTargetException invocation target exception
+     * @throws IllegalAccessException illegal access exception
+     */
+    public static void invokeMethod(final Object target, final String methodName, final Class<?>[] parameterTypes, final Object[] parameterValues)
+            throws NoSuchMethodException, InvocationTargetException, IllegalAccessException {
+        Method method = target.getClass().getDeclaredMethod(methodName, parameterTypes);
+        method.setAccessible(true);
+        method.invoke(target, parameterValues);
+    }
 }
diff --git a/shardingsphere-scaling/shardingsphere-scaling-bootstrap/src/test/java/org/apache/shardingsphere/scaling/utils/ScalingConfigurationUtil.java b/shardingsphere-scaling/shardingsphere-scaling-bootstrap/src/test/java/org/apache/shardingsphere/scaling/utils/ScalingConfigurationUtil.java
new file mode 100644
index 0000000..6a48acc
--- /dev/null
+++ b/shardingsphere-scaling/shardingsphere-scaling-bootstrap/src/test/java/org/apache/shardingsphere/scaling/utils/ScalingConfigurationUtil.java
@@ -0,0 +1,50 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.shardingsphere.scaling.utils;
+
+import com.google.gson.Gson;
+import lombok.AccessLevel;
+import lombok.NoArgsConstructor;
+import org.apache.shardingsphere.scaling.core.config.ScalingConfiguration;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+
+/**
+ * Scaling configuration util.
+ */
+@NoArgsConstructor(access = AccessLevel.PRIVATE)
+public final class ScalingConfigurationUtil {
+    
+    private static final Gson GSON = new Gson();
+    
+    /**
+     * Init job config.
+     *
+     * @param configFile config file
+     * @return ScalingConfiguration
+     * @throws IOException IO exception
+     */
+    public static ScalingConfiguration initConfig(final String configFile) throws IOException {
+        try (InputStream fileInputStream = ScalingConfigurationUtil.class.getResourceAsStream(configFile);
+             InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream)) {
+            return GSON.fromJson(inputStreamReader, ScalingConfiguration.class);
+        }
+    }
+}
diff --git a/shardingsphere-scaling/shardingsphere-scaling-bootstrap/src/test/java/org/apache/shardingsphere/scaling/web/HttpServerHandlerTest.java b/shardingsphere-scaling/shardingsphere-scaling-bootstrap/src/test/java/org/apache/shardingsphere/scaling/web/HttpServerHandlerTest.java
index 1f44933..69edd67 100644
--- a/shardingsphere-scaling/shardingsphere-scaling-bootstrap/src/test/java/org/apache/shardingsphere/scaling/web/HttpServerHandlerTest.java
+++ b/shardingsphere-scaling/shardingsphere-scaling-bootstrap/src/test/java/org/apache/shardingsphere/scaling/web/HttpServerHandlerTest.java
@@ -28,13 +28,11 @@ import io.netty.handler.codec.http.HttpMethod;
 import io.netty.handler.codec.http.HttpVersion;
 import io.netty.util.CharsetUtil;
 import lombok.SneakyThrows;
-import org.apache.shardingsphere.scaling.core.config.ScalingConfiguration;
 import org.apache.shardingsphere.scaling.core.config.ScalingContext;
-import org.apache.shardingsphere.scaling.core.config.ScalingDataSourceConfiguration;
 import org.apache.shardingsphere.scaling.core.config.ServerConfiguration;
-import org.apache.shardingsphere.scaling.core.config.SyncConfiguration;
-import org.apache.shardingsphere.scaling.core.datasource.DataSourceManager;
-import org.apache.shardingsphere.scaling.core.utils.SyncConfigurationUtil;
+import org.apache.shardingsphere.scaling.core.execute.engine.ShardingScalingExecuteEngine;
+import org.apache.shardingsphere.scaling.utils.ReflectionUtil;
+import org.apache.shardingsphere.scaling.utils.ScalingConfigurationUtil;
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -42,12 +40,7 @@ import org.mockito.ArgumentCaptor;
 import org.mockito.Mock;
 import org.mockito.junit.MockitoJUnitRunner;
 
-import javax.sql.DataSource;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.sql.Connection;
-import java.sql.SQLException;
-import java.sql.Statement;
+import java.io.IOException;
 import java.util.HashMap;
 import java.util.Map;
 
@@ -61,29 +54,23 @@ public final class HttpServerHandlerTest {
     
     private static final Gson GSON = new Gson();
     
+    private final HttpServerHandler httpServerHandler = new HttpServerHandler();
+    
     @Mock
     private ChannelHandlerContext channelHandlerContext;
     
     private FullHttpRequest fullHttpRequest;
     
-    private HttpServerHandler httpServerHandler;
-    
-    private ScalingConfiguration scalingConfig;
-    
-    private SyncConfiguration syncConfiguration;
-    
     @Before
+    @SneakyThrows(ReflectiveOperationException.class)
     public void setUp() {
-        initConfig("/config.json");
         ScalingContext.getInstance().init(new ServerConfiguration());
-        httpServerHandler = new HttpServerHandler();
-        initTableData(syncConfiguration.getDumperConfiguration().getDataSourceConfiguration());
-        initTableData(syncConfiguration.getImporterConfiguration().getDataSourceConfiguration());
+        ReflectionUtil.setFieldValue(ScalingContext.getInstance(), "taskExecuteEngine", mock(ShardingScalingExecuteEngine.class));
     }
     
     @Test
     public void assertChannelReadStartSuccess() {
-        startScalingJob();
+        startScalingJob("/config.json");
         ArgumentCaptor<FullHttpResponse> argumentCaptor = ArgumentCaptor.forClass(FullHttpResponse.class);
         verify(channelHandlerContext).writeAndFlush(argumentCaptor.capture());
         FullHttpResponse fullHttpResponse = argumentCaptor.getValue();
@@ -92,8 +79,7 @@ public final class HttpServerHandlerTest {
     
     @Test
     public void assertShardingSphereJDBCTargetChannelReadStartSuccess() {
-        initConfig("/config_sharding_sphere_jdbc_target.json");
-        startScalingJob();
+        startScalingJob("/config_sharding_sphere_jdbc_target.json");
         ArgumentCaptor<FullHttpResponse> argumentCaptor = ArgumentCaptor.forClass(FullHttpResponse.class);
         verify(channelHandlerContext).writeAndFlush(argumentCaptor.capture());
         FullHttpResponse fullHttpResponse = argumentCaptor.getValue();
@@ -112,7 +98,7 @@ public final class HttpServerHandlerTest {
     
     @Test
     public void assertChannelReadProgressSuccess() {
-        startScalingJob();
+        startScalingJob("/config.json");
         fullHttpRequest = new DefaultFullHttpRequest(HttpVersion.HTTP_1_1, HttpMethod.GET, "/scaling/job/progress/1");
         httpServerHandler.channelRead0(channelHandlerContext, fullHttpRequest);
         ArgumentCaptor<FullHttpResponse> argumentCaptor = ArgumentCaptor.forClass(FullHttpResponse.class);
@@ -170,29 +156,11 @@ public final class HttpServerHandlerTest {
         httpServerHandler.exceptionCaught(channelHandlerContext, throwable);
         verify(channelHandlerContext).close();
     }
-
-    private void startScalingJob() {
-        ByteBuf byteBuf = Unpooled.copiedBuffer(GSON.toJson(scalingConfig), CharsetUtil.UTF_8);
+    
+    @SneakyThrows(IOException.class)
+    private void startScalingJob(final String configFile) {
+        ByteBuf byteBuf = Unpooled.copiedBuffer(GSON.toJson(ScalingConfigurationUtil.initConfig(configFile)), CharsetUtil.UTF_8);
         fullHttpRequest = new DefaultFullHttpRequest(HttpVersion.HTTP_1_1, HttpMethod.POST, "/scaling/job/start", byteBuf);
         httpServerHandler.channelRead0(channelHandlerContext, fullHttpRequest);
     }
-    
-    private void initConfig(final String configFile) {
-        InputStream fileInputStream = HttpServerHandlerTest.class.getResourceAsStream(configFile);
-        InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream);
-        scalingConfig = GSON.fromJson(inputStreamReader, ScalingConfiguration.class);
-        syncConfiguration = SyncConfigurationUtil.toSyncConfigurations(scalingConfig).iterator().next();
-    }
-    
-    @SneakyThrows(SQLException.class)
-    private void initTableData(final ScalingDataSourceConfiguration dataSourceConfig) {
-        DataSource dataSource = new DataSourceManager().getDataSource(dataSourceConfig);
-        try (Connection connection = dataSource.getConnection();
-             Statement statement = connection.createStatement()) {
-            statement.execute("DROP TABLE IF EXISTS t1");
-            statement.execute("CREATE TABLE t1 (id INT PRIMARY KEY, user_id VARCHAR(12))");
-            statement.execute("DROP TABLE IF EXISTS t2");
-            statement.execute("CREATE TABLE t2 (id INT PRIMARY KEY, user_id VARCHAR(12))");
-        }
-    }
 }
diff --git a/shardingsphere-scaling/shardingsphere-scaling-core/src/main/java/org/apache/shardingsphere/scaling/core/job/preparer/ShardingScalingJobPreparer.java b/shardingsphere-scaling/shardingsphere-scaling-core/src/main/java/org/apache/shardingsphere/scaling/core/job/preparer/ShardingScalingJobPreparer.java
index 8b6db59..e387ee6 100644
--- a/shardingsphere-scaling/shardingsphere-scaling-core/src/main/java/org/apache/shardingsphere/scaling/core/job/preparer/ShardingScalingJobPreparer.java
+++ b/shardingsphere-scaling/shardingsphere-scaling-core/src/main/java/org/apache/shardingsphere/scaling/core/job/preparer/ShardingScalingJobPreparer.java
@@ -77,7 +77,7 @@ public final class ShardingScalingJobPreparer {
             }
             shardingScalingJob.setDataConsistencyChecker(initDataConsistencyChecker(databaseType, shardingScalingJob));
         } catch (final PrepareFailedException ex) {
-            log.warn("Preparing sharding scaling job {} : {} failed", shardingScalingJob.getJobId(), shardingScalingJob.getJobName(), ex);
+            log.error("Preparing sharding scaling job {} : {} failed", shardingScalingJob.getJobId(), shardingScalingJob.getJobName(), ex);
             shardingScalingJob.setStatus(SyncTaskControlStatus.PREPARING_FAILURE.name());
         }
     }
diff --git a/shardingsphere-scaling/shardingsphere-scaling-core/src/test/java/org/apache/shardingsphere/scaling/core/ScalingJobControllerTest.java b/shardingsphere-scaling/shardingsphere-scaling-core/src/test/java/org/apache/shardingsphere/scaling/core/ScalingJobControllerTest.java
index 8b78517..5c829f9 100644
--- a/shardingsphere-scaling/shardingsphere-scaling-core/src/test/java/org/apache/shardingsphere/scaling/core/ScalingJobControllerTest.java
+++ b/shardingsphere-scaling/shardingsphere-scaling-core/src/test/java/org/apache/shardingsphere/scaling/core/ScalingJobControllerTest.java
@@ -17,16 +17,14 @@
 
 package org.apache.shardingsphere.scaling.core;
 
-import org.apache.shardingsphere.scaling.core.config.ScalingDataSourceConfiguration;
-import org.apache.shardingsphere.scaling.core.config.DumperConfiguration;
-import org.apache.shardingsphere.scaling.core.config.ImporterConfiguration;
-import org.apache.shardingsphere.scaling.core.config.JDBCScalingDataSourceConfiguration;
-import org.apache.shardingsphere.scaling.core.config.JobConfiguration;
-import org.apache.shardingsphere.scaling.core.config.ScalingConfiguration;
+import com.google.common.collect.Maps;
+import lombok.SneakyThrows;
+import org.apache.shardingsphere.scaling.core.check.DataConsistencyCheckResult;
+import org.apache.shardingsphere.scaling.core.check.DataConsistencyChecker;
 import org.apache.shardingsphere.scaling.core.config.ScalingContext;
 import org.apache.shardingsphere.scaling.core.config.ServerConfiguration;
-import org.apache.shardingsphere.scaling.core.config.SyncConfiguration;
 import org.apache.shardingsphere.scaling.core.exception.ScalingJobNotFoundException;
+import org.apache.shardingsphere.scaling.core.execute.engine.ShardingScalingExecuteEngine;
 import org.apache.shardingsphere.scaling.core.job.ScalingJobProgress;
 import org.apache.shardingsphere.scaling.core.job.ShardingScalingJob;
 import org.apache.shardingsphere.scaling.core.job.SyncProgress;
@@ -35,38 +33,32 @@ import org.apache.shardingsphere.scaling.core.job.position.resume.IncrementalPos
 import org.apache.shardingsphere.scaling.core.job.position.resume.ResumeBreakPointManagerFactory;
 import org.apache.shardingsphere.scaling.core.schedule.SyncTaskControlStatus;
 import org.apache.shardingsphere.scaling.core.util.ReflectionUtil;
+import org.apache.shardingsphere.scaling.core.util.ScalingConfigurationUtil;
 import org.junit.Before;
 import org.junit.Test;
 
-import java.util.HashMap;
+import java.io.IOException;
 import java.util.Map;
 
 import static org.hamcrest.CoreMatchers.is;
-import static org.hamcrest.CoreMatchers.not;
 import static org.junit.Assert.assertThat;
 import static org.junit.Assert.assertTrue;
+import static org.mockito.Mockito.mock;
 
 public final class ScalingJobControllerTest {
     
-    private static final String DATA_SOURCE_URL = "jdbc:h2:mem:test_db;DB_CLOSE_DELAY=-1;DATABASE_TO_UPPER=false;MODE=MySQL";
-    
-    private static final String USERNAME = "root";
-    
-    private static final String PASSWORD = "password";
-    
-    private ScalingJobController scalingJobController;
-    
-    private ShardingScalingJob shardingScalingJob;
+    private final ScalingJobController scalingJobController = new ScalingJobController();
     
     @Before
+    @SneakyThrows(ReflectiveOperationException.class)
     public void setUp() {
-        ScalingContext.getInstance().init(mockServerConfiguration());
-        scalingJobController = new ScalingJobController();
-        shardingScalingJob = mockShardingScalingJob();
+        ScalingContext.getInstance().init(new ServerConfiguration());
+        ReflectionUtil.setFieldValue(ScalingContext.getInstance(), "taskExecuteEngine", mock(ShardingScalingExecuteEngine.class));
     }
     
     @Test
-    public void assertStartPreparedJob() {
+    public void assertStartJob() {
+        ShardingScalingJob shardingScalingJob = mockShardingScalingJob();
         scalingJobController.start(shardingScalingJob);
         SyncProgress progress = scalingJobController.getProgresses(shardingScalingJob.getJobId());
         assertTrue(progress instanceof ScalingJobProgress);
@@ -77,22 +69,13 @@ public final class ScalingJobControllerTest {
     }
     
     @Test
-    public void assertStartPreparingFailureJob() {
-        ShardingScalingJob shardingScalingJob = mockPreparingFailureShardingScalingJob();
-        scalingJobController.start(shardingScalingJob);
-        SyncProgress progress = scalingJobController.getProgresses(shardingScalingJob.getJobId());
-        assertTrue(progress instanceof ScalingJobProgress);
-        assertThat(((ScalingJobProgress) progress).getIncrementalDataTasks().size(), is(0));
-        assertThat(((ScalingJobProgress) progress).getInventoryDataTasks().size(), is(0));
-    }
-    
-    @Test
     public void assertStopExistJob() {
+        ShardingScalingJob shardingScalingJob = mockShardingScalingJob();
         scalingJobController.start(shardingScalingJob);
         scalingJobController.stop(shardingScalingJob.getJobId());
         SyncProgress progress = scalingJobController.getProgresses(shardingScalingJob.getJobId());
         assertTrue(progress instanceof ScalingJobProgress);
-        assertThat(((ScalingJobProgress) progress).getStatus(), not("RUNNING"));
+        assertThat(((ScalingJobProgress) progress).getStatus(), is(SyncTaskControlStatus.STOPPED.name()));
     }
     
     @Test(expected = ScalingJobNotFoundException.class)
@@ -102,14 +85,14 @@ public final class ScalingJobControllerTest {
     }
     
     @Test
-    public void assertListShardingScalingJobs() {
+    public void assertListJobs() {
         assertThat(scalingJobController.listShardingScalingJobs().size(), is(0));
-        scalingJobController.start(shardingScalingJob);
+        scalingJobController.start(mockShardingScalingJob());
         assertThat(scalingJobController.listShardingScalingJobs().size(), is(1));
     }
     
     @Test
-    public void assertOnlyIncrementalDataTasks() throws NoSuchFieldException, IllegalAccessException {
+    public void assertIncrementalDataTasksOnly() throws NoSuchFieldException, IllegalAccessException {
         ReflectionUtil.setFieldValue(ResumeBreakPointManagerFactory.class, null, "clazz", IncrementalPositionResumeBreakPointManager.class);
         ShardingScalingJob shardingScalingJob = mockShardingScalingJob();
         scalingJobController.start(shardingScalingJob);
@@ -119,48 +102,38 @@ public final class ScalingJobControllerTest {
         ReflectionUtil.setFieldValue(ResumeBreakPointManagerFactory.class, null, "clazz", FakeResumeBreakPointManager.class);
     }
     
-    private ServerConfiguration mockServerConfiguration() {
-        ServerConfiguration result = new ServerConfiguration();
-        result.setBlockQueueSize(1000);
-        result.setPort(8080);
-        result.setPushTimeout(1000);
-        result.setWorkerThread(30);
-        return result;
-    }
-    
-    private ShardingScalingJob mockShardingScalingJob() {
-        ShardingScalingJob result = new ShardingScalingJob(mockScalingConfiguration());
-        result.getSyncConfigurations().add(new SyncConfiguration(3, mockDumperConfig(), mockImporterConfiguration()));
-        return result;
-    }
-    
-    private ScalingConfiguration mockScalingConfiguration() {
-        ScalingConfiguration result = new ScalingConfiguration();
-        result.setJobConfiguration(new JobConfiguration());
-        return result;
-    }
-    
-    private ImporterConfiguration mockImporterConfiguration() {
-        ImporterConfiguration result = new ImporterConfiguration();
-        result.setDataSourceConfiguration(new JDBCScalingDataSourceConfiguration(DATA_SOURCE_URL, USERNAME, PASSWORD));
-        return result;
+    @Test
+    public void assertCheckExistJob() {
+        ShardingScalingJob shardingScalingJob = mockShardingScalingJob();
+        scalingJobController.start(shardingScalingJob);
+        shardingScalingJob.setDataConsistencyChecker(new DataConsistencyChecker() {
+            @Override
+            public Map<String, DataConsistencyCheckResult> countCheck() {
+                Map<String, DataConsistencyCheckResult> result = Maps.newHashMapWithExpectedSize(1);
+                result.put("t1", new DataConsistencyCheckResult(1, 1));
+                return result;
+            }
+            
+            @Override
+            public Map<String, Boolean> dataCheck() {
+                Map<String, Boolean> result = Maps.newHashMapWithExpectedSize(1);
+                result.put("t1", true);
+                return result;
+            }
+        });
+        Map<String, DataConsistencyCheckResult> checkResult = scalingJobController.check(shardingScalingJob.getJobId());
+        assertTrue(checkResult.get("t1").isCountValid());
+        assertTrue(checkResult.get("t1").isDataValid());
     }
     
-    private DumperConfiguration mockDumperConfig() {
-        ScalingDataSourceConfiguration dataSourceConfig = new JDBCScalingDataSourceConfiguration(DATA_SOURCE_URL, USERNAME, PASSWORD);
-        DumperConfiguration result = new DumperConfiguration();
-        result.setDataSourceName("ds0");
-        result.setDataSourceConfiguration(dataSourceConfig);
-        Map<String, String> tableMap = new HashMap<>(1, 1);
-        tableMap.put("t_order", "t_order");
-        result.setTableNameMap(tableMap);
-        return result;
+    @Test(expected = ScalingJobNotFoundException.class)
+    public void assertCheckNotExistJob() {
+        ShardingScalingJob shardingScalingJob = mockShardingScalingJob();
+        scalingJobController.check(shardingScalingJob.getJobId());
     }
     
-    private ShardingScalingJob mockPreparingFailureShardingScalingJob() {
-        ShardingScalingJob result = new ShardingScalingJob(mockScalingConfiguration());
-        result.getSyncConfigurations().add(new SyncConfiguration(3, mockDumperConfig(), mockImporterConfiguration()));
-        result.setStatus(SyncTaskControlStatus.PREPARING_FAILURE.name());
-        return result;
+    @SneakyThrows(IOException.class)
+    private ShardingScalingJob mockShardingScalingJob() {
+        return ScalingConfigurationUtil.initJob("/config.json");
     }
 }
diff --git a/shardingsphere-scaling/shardingsphere-scaling-core/src/test/java/org/apache/shardingsphere/scaling/core/check/AbstractDataConsistencyCheckerTest.java b/shardingsphere-scaling/shardingsphere-scaling-core/src/test/java/org/apache/shardingsphere/scaling/core/check/AbstractDataConsistencyCheckerTest.java
index f82d351..84a0a51 100644
--- a/shardingsphere-scaling/shardingsphere-scaling-core/src/test/java/org/apache/shardingsphere/scaling/core/check/AbstractDataConsistencyCheckerTest.java
+++ b/shardingsphere-scaling/shardingsphere-scaling-core/src/test/java/org/apache/shardingsphere/scaling/core/check/AbstractDataConsistencyCheckerTest.java
@@ -17,19 +17,15 @@
 
 package org.apache.shardingsphere.scaling.core.check;
 
-import com.google.gson.Gson;
 import lombok.SneakyThrows;
 import org.apache.shardingsphere.scaling.core.config.ScalingDataSourceConfiguration;
-import org.apache.shardingsphere.scaling.core.config.ScalingConfiguration;
 import org.apache.shardingsphere.scaling.core.datasource.DataSourceManager;
 import org.apache.shardingsphere.scaling.core.job.ShardingScalingJob;
-import org.apache.shardingsphere.scaling.core.utils.SyncConfigurationUtil;
-import org.junit.Before;
+import org.apache.shardingsphere.scaling.core.util.ScalingConfigurationUtil;
 import org.junit.Test;
 
 import javax.sql.DataSource;
-import java.io.InputStream;
-import java.io.InputStreamReader;
+import java.io.IOException;
 import java.sql.Connection;
 import java.sql.SQLException;
 import java.sql.Statement;
@@ -41,20 +37,10 @@ import static org.junit.Assert.assertTrue;
 
 public final class AbstractDataConsistencyCheckerTest {
     
-    private static final Gson GSON = new Gson();
-    
-    private DataConsistencyChecker dataConsistencyChecker;
-    
-    private ShardingScalingJob shardingScalingJob;
-    
-    @Before
-    public void setUp() {
-        mockShardingScalingJob();
-        dataConsistencyChecker = DataConsistencyCheckerFactory.newInstance("H2", shardingScalingJob);
-    }
-    
     @Test
     public void assertCountCheck() {
+        ShardingScalingJob shardingScalingJob = mockShardingScalingJob();
+        DataConsistencyChecker dataConsistencyChecker = DataConsistencyCheckerFactory.newInstance("H2", shardingScalingJob);
         initTableData(shardingScalingJob.getSyncConfigurations().get(0).getDumperConfiguration().getDataSourceConfiguration());
         initTableData(shardingScalingJob.getSyncConfigurations().get(0).getImporterConfiguration().getDataSourceConfiguration());
         Map<String, DataConsistencyCheckResult> resultMap = dataConsistencyChecker.countCheck();
@@ -73,11 +59,8 @@ public final class AbstractDataConsistencyCheckerTest {
         }
     }
     
-    private void mockShardingScalingJob() {
-        InputStream fileInputStream = AbstractDataConsistencyCheckerTest.class.getResourceAsStream("/config.json");
-        InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream);
-        ScalingConfiguration scalingConfig = GSON.fromJson(inputStreamReader, ScalingConfiguration.class);
-        shardingScalingJob = new ShardingScalingJob(scalingConfig);
-        shardingScalingJob.getSyncConfigurations().addAll(SyncConfigurationUtil.toSyncConfigurations(scalingConfig));
+    @SneakyThrows(IOException.class)
+    private ShardingScalingJob mockShardingScalingJob() {
+        return ScalingConfigurationUtil.initJob("/config.json");
     }
 }
diff --git a/shardingsphere-scaling/shardingsphere-scaling-core/src/test/java/org/apache/shardingsphere/scaling/core/datasource/DataSourceManagerTest.java b/shardingsphere-scaling/shardingsphere-scaling-core/src/test/java/org/apache/shardingsphere/scaling/core/datasource/DataSourceManagerTest.java
index fe0eb43..9112e72 100644
--- a/shardingsphere-scaling/shardingsphere-scaling-core/src/test/java/org/apache/shardingsphere/scaling/core/datasource/DataSourceManagerTest.java
+++ b/shardingsphere-scaling/shardingsphere-scaling-core/src/test/java/org/apache/shardingsphere/scaling/core/datasource/DataSourceManagerTest.java
@@ -17,17 +17,15 @@
 
 package org.apache.shardingsphere.scaling.core.datasource;
 
-import com.google.gson.Gson;
-import org.apache.shardingsphere.scaling.core.config.ScalingConfiguration;
+import lombok.SneakyThrows;
 import org.apache.shardingsphere.scaling.core.config.SyncConfiguration;
-import org.apache.shardingsphere.scaling.core.utils.SyncConfigurationUtil;
 import org.apache.shardingsphere.scaling.core.util.ReflectionUtil;
+import org.apache.shardingsphere.scaling.core.util.ScalingConfigurationUtil;
 import org.junit.Before;
 import org.junit.Test;
 
 import javax.sql.DataSource;
-import java.io.InputStream;
-import java.io.InputStreamReader;
+import java.io.IOException;
 import java.util.List;
 import java.util.Map;
 
@@ -38,21 +36,12 @@ import static org.junit.Assert.assertThat;
 
 public final class DataSourceManagerTest {
     
-    private static final Gson GSON = new Gson();
-    
     private List<SyncConfiguration> syncConfigurations;
     
     @Before
+    @SneakyThrows(IOException.class)
     public void setUp() {
-        initConfig("/config.json");
-    }
-    
-    @Test
-    public void assertCreateWithConfiguration() throws NoSuchFieldException, IllegalAccessException {
-        DataSourceManager dataSourceManager = new DataSourceManager(syncConfigurations);
-        Map<?, ?> cachedDataSources = ReflectionUtil.getFieldValueFromClass(dataSourceManager, "cachedDataSources", Map.class);
-        assertNotNull(cachedDataSources);
-        assertThat(cachedDataSources.size(), is(2));
+        syncConfigurations = ScalingConfigurationUtil.initJob("/config.json").getSyncConfigurations();
     }
     
     @Test
@@ -65,16 +54,10 @@ public final class DataSourceManagerTest {
     @Test
     public void assertClose() throws NoSuchFieldException, IllegalAccessException {
         DataSourceManager dataSourceManager = new DataSourceManager(syncConfigurations);
-        dataSourceManager.close();
         Map<?, ?> cachedDataSources = ReflectionUtil.getFieldValueFromClass(dataSourceManager, "cachedDataSources", Map.class);
         assertNotNull(cachedDataSources);
+        assertThat(cachedDataSources.size(), is(2));
+        dataSourceManager.close();
         assertThat(cachedDataSources.size(), is(0));
     }
-    
-    private void initConfig(final String configFile) {
-        InputStream fileInputStream = DataSourceManagerTest.class.getResourceAsStream(configFile);
-        InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream);
-        ScalingConfiguration scalingConfig = GSON.fromJson(inputStreamReader, ScalingConfiguration.class);
-        syncConfigurations = (List<SyncConfiguration>) SyncConfigurationUtil.toSyncConfigurations(scalingConfig);
-    }
 }
diff --git a/shardingsphere-scaling/shardingsphere-scaling-core/src/test/java/org/apache/shardingsphere/scaling/core/job/position/resume/IncrementalPositionResumeBreakPointManager.java b/shardingsphere-scaling/shardingsphere-scaling-core/src/test/java/org/apache/shardingsphere/scaling/core/job/position/resume/IncrementalPositionResumeBreakPointManager.java
index 76d72cc..45ce657 100644
--- a/shardingsphere-scaling/shardingsphere-scaling-core/src/test/java/org/apache/shardingsphere/scaling/core/job/position/resume/IncrementalPositionResumeBreakPointManager.java
+++ b/shardingsphere-scaling/shardingsphere-scaling-core/src/test/java/org/apache/shardingsphere/scaling/core/job/position/resume/IncrementalPositionResumeBreakPointManager.java
@@ -27,7 +27,7 @@ import java.util.Map;
 public final class IncrementalPositionResumeBreakPointManager extends AbstractResumeBreakPointManager {
     
     public IncrementalPositionResumeBreakPointManager(final String databaseType, final String taskPath) {
-        getIncrementalPositionManagerMap().put("ds0", new FixtureNopManager(""));
+        getIncrementalPositionManagerMap().put("ds_0", new FixtureNopManager(""));
     }
     
     @Override
diff --git a/shardingsphere-scaling/shardingsphere-scaling-core/src/test/java/org/apache/shardingsphere/scaling/core/util/SyncConfigurationUtilTest.java b/shardingsphere-scaling/shardingsphere-scaling-core/src/test/java/org/apache/shardingsphere/scaling/core/util/ScalingConfigurationUtil.java
similarity index 50%
rename from shardingsphere-scaling/shardingsphere-scaling-core/src/test/java/org/apache/shardingsphere/scaling/core/util/SyncConfigurationUtilTest.java
rename to shardingsphere-scaling/shardingsphere-scaling-core/src/test/java/org/apache/shardingsphere/scaling/core/util/ScalingConfigurationUtil.java
index b78aafb..c20b5ad 100644
--- a/shardingsphere-scaling/shardingsphere-scaling-core/src/test/java/org/apache/shardingsphere/scaling/core/util/SyncConfigurationUtilTest.java
+++ b/shardingsphere-scaling/shardingsphere-scaling-core/src/test/java/org/apache/shardingsphere/scaling/core/util/ScalingConfigurationUtil.java
@@ -18,39 +18,38 @@
 package org.apache.shardingsphere.scaling.core.util;
 
 import com.google.gson.Gson;
+import lombok.AccessLevel;
+import lombok.NoArgsConstructor;
 import org.apache.shardingsphere.scaling.core.config.ScalingConfiguration;
-import org.apache.shardingsphere.scaling.core.config.SyncConfiguration;
+import org.apache.shardingsphere.scaling.core.job.ShardingScalingJob;
 import org.apache.shardingsphere.scaling.core.utils.SyncConfigurationUtil;
-import org.junit.Before;
-import org.junit.Test;
 
+import java.io.IOException;
 import java.io.InputStream;
 import java.io.InputStreamReader;
-import java.util.List;
 
-import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertThat;
-
-public final class SyncConfigurationUtilTest {
+/**
+ * Scaling configuration util.
+ */
+@NoArgsConstructor(access = AccessLevel.PRIVATE)
+public final class ScalingConfigurationUtil {
     
     private static final Gson GSON = new Gson();
     
-    private ScalingConfiguration scalingConfig;
-    
-    @Before
-    public void setUp() {
-        initConfig("/config.json");
-    }
-    
-    @Test
-    public void assertFilterByShardingDataSourceTables() {
-        List<SyncConfiguration> syncConfigs = (List<SyncConfiguration>) SyncConfigurationUtil.toSyncConfigurations(scalingConfig);
-        assertThat(syncConfigs.get(0).getDumperConfiguration().getTableNameMap().size(), is(1));
-    }
-    
-    private void initConfig(final String configFile) {
-        InputStream fileInputStream = SyncConfigurationUtilTest.class.getResourceAsStream(configFile);
-        InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream);
-        scalingConfig = GSON.fromJson(inputStreamReader, ScalingConfiguration.class);
+    /**
+     * Init job from config file.
+     *
+     * @param configFile config file
+     * @return ShardingScalingJob
+     * @throws IOException IO exception
+     */
+    public static ShardingScalingJob initJob(final String configFile) throws IOException {
+        try (InputStream fileInputStream = ScalingConfigurationUtil.class.getResourceAsStream(configFile);
+             InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream)) {
+            ScalingConfiguration scalingConfiguration = GSON.fromJson(inputStreamReader, ScalingConfiguration.class);
+            ShardingScalingJob shardingScalingJob = new ShardingScalingJob(scalingConfiguration);
+            shardingScalingJob.getSyncConfigurations().addAll(SyncConfigurationUtil.toSyncConfigurations(scalingConfiguration));
+            return shardingScalingJob;
+        }
     }
 }