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

jin pushed a commit to branch pd-store
in repository https://gitbox.apache.org/repos/asf/incubator-hugegraph.git


The following commit(s) were added to refs/heads/pd-store by this push:
     new 67aba571c fix(pd-store): intro `Useless` annotation & refactor and 
mark the failed tests in `hg-pd-test` (#2480)
67aba571c is described below

commit 67aba571ccc0ca575eabe6292d604be40b720edf
Author: V_Galaxy <[email protected]>
AuthorDate: Tue Mar 19 15:58:56 2024 +0800

    fix(pd-store): intro `Useless` annotation & refactor and mark the failed 
tests in `hg-pd-test` (#2480)
    
    * add value for Useless annotation
    
    ---------
    
    Co-authored-by: github-actions[bot] 
<41898282+github-actions[bot]@users.noreply.github.com>
---
 .github/workflows/pd-store.yml                     |  25 +-
 .../apache/hugegraph/pd/client/Discoverable.java   |   2 +
 .../hugegraph/pd/client/DiscoveryClient.java       |   2 +
 .../hugegraph/pd/client/DiscoveryClientImpl.java   |   2 +
 .../apache/hugegraph/pd/client/LicenseClient.java  |   2 +
 .../org/apache/hugegraph/pd/common/Useless.java}   |  35 +-
 .../org/apache/hugegraph/pd/ConfigService.java     |   7 +-
 .../org/apache/hugegraph/pd/raft/RaftEngine.java   |   3 +
 hugegraph-pd/hg-pd-test/pom.xml                    |   4 +-
 .../apache/hugegraph/pd/PartitionCacheTest.java    |   2 +
 .../apache/hugegraph/pd/PartitionServiceTest.java  |  45 --
 .../apache/hugegraph/pd/StoreNodeServiceTest.java  | 485 ---------------------
 .../java/org/apache/hugegraph/pd/UnitTestBase.java |   3 +
 .../apache/hugegraph/pd/client/PDClientTest.java   |   3 +
 .../pd/{ => client}/StoreRegisterTest.java         |   6 +-
 .../org/apache/hugegraph/pd/clitools/MainTest.java |   4 +-
 .../hugegraph/pd/common/CommonSuiteTest.java       |   5 -
 .../hugegraph/pd/common/MetadataKeyHelperTest.java | 217 ---------
 .../org/apache/hugegraph/pd/core/BaseCoreTest.java |   3 +-
 .../pd/{service => core}/ConfigServiceTest.java    |   3 +-
 .../pd/{service => core}/IdServiceTest.java        |   3 +-
 .../pd/{service => core}/KvServiceTest.java        |   3 +-
 .../pd/{service => core}/LogServiceTest.java       |   3 +-
 .../pd/{ => core}/MonitorServiceTest.java          |  18 +-
 .../apache/hugegraph/pd/core/PDCoreSuiteTest.java  |  14 +-
 .../PdTestBase.java => core/PDCoreTestBase.java}   |   4 +-
 .../pd/{service => core}/PartitionServiceTest.java |  24 +-
 .../StoreMonitorDataServiceTest.java               |   4 +-
 .../{service => core}/StoreNodeServiceNewTest.java |   4 +-
 .../hugegraph/pd/core/StoreNodeServiceTest.java    | 374 +++++++++++++++-
 .../pd/{service => core}/StoreServiceTest.java     |   6 +-
 .../{service => core}/TaskScheduleServiceTest.java |   4 +-
 .../pd/core/meta/MetadataKeyHelperTest.java        | 192 ++++++++
 .../pd/{ => core}/store/HgKVStoreImplTest.java     |  13 +-
 .../org/apache/hugegraph/pd/grpc/BaseGrpcTest.java |   3 +-
 .../apache/hugegraph/pd/grpc/GrpcSuiteTest.java    |   3 +-
 .../pd/{service => rest}/BaseServerTest.java       |   2 +-
 .../PDRestSuiteTest.java}                          |   6 +-
 .../pd/{service => rest}/RestApiTest.java          |   2 +-
 .../hugegraph/pd/service/ServerSuiteTest.java      |  42 --
 hugegraph-pd/pom.xml                               |   4 +-
 41 files changed, 709 insertions(+), 877 deletions(-)

diff --git a/.github/workflows/pd-store.yml b/.github/workflows/pd-store.yml
index 2a8469666..b3abff59d 100644
--- a/.github/workflows/pd-store.yml
+++ b/.github/workflows/pd-store.yml
@@ -45,29 +45,30 @@ jobs:
         run: |
           mvn clean package -U -Dmaven.javadoc.skip=true 
-Dmaven.test.skip=true -ntp
 
-      - name: Prepare env and service
+      - name: Run common test
         run: |
-          $TRAVIS_DIR/start-pd.sh
+          mvn test -pl hugegraph-pd/hg-pd-test -am -P pd-common-test
 
-      - name: Run client test
+      - name: Run core test
         run: |
-          mvn test -pl hugegraph-pd/hg-pd-test -am -P pd-client-test 
-Dmaven.test.failure.ignore=true
+          mvn test -pl hugegraph-pd/hg-pd-test -am -P pd-core-test
 
-      - name: Run core test
+      # The above tests do not require starting a PD instance.
+      - name: Prepare env and service
         run: |
-          mvn test -pl hugegraph-pd/hg-pd-test -am -P pd-core-test 
-Dmaven.test.failure.ignore=true
+          $TRAVIS_DIR/start-pd.sh
 
-      - name: Run cli-tools test
+      - name: Run client test
         run: |
-          mvn test -pl hugegraph-pd/hg-pd-test -am -P pd-cli-tools-test 
-Dmaven.test.failure.ignore=true
+          mvn test -pl hugegraph-pd/hg-pd-test -am -P pd-client-test
 
-      - name: Run common test
+      - name: Run cli-tools test
         run: |
-          mvn test -pl hugegraph-pd/hg-pd-test -am -P pd-common-test 
-Dmaven.test.failure.ignore=true
+          mvn test -pl hugegraph-pd/hg-pd-test -am -P pd-cli-tools-test
 
-      - name: Run service test
+      - name: Run rest test
         run: |
-          mvn test -pl hugegraph-pd/hg-pd-test -am -P pd-service-test 
-Dmaven.test.failure.ignore=true
+          mvn test -pl hugegraph-pd/hg-pd-test -am -P pd-rest-test
 
       - name: Upload coverage to Codecov
         uses: codecov/[email protected]
diff --git 
a/hugegraph-pd/hg-pd-client/src/main/java/org/apache/hugegraph/pd/client/Discoverable.java
 
b/hugegraph-pd/hg-pd-client/src/main/java/org/apache/hugegraph/pd/client/Discoverable.java
index abdcac414..713657bd5 100644
--- 
a/hugegraph-pd/hg-pd-client/src/main/java/org/apache/hugegraph/pd/client/Discoverable.java
+++ 
b/hugegraph-pd/hg-pd-client/src/main/java/org/apache/hugegraph/pd/client/Discoverable.java
@@ -17,9 +17,11 @@
 
 package org.apache.hugegraph.pd.client;
 
+import org.apache.hugegraph.pd.common.Useless;
 import org.apache.hugegraph.pd.grpc.discovery.NodeInfos;
 import org.apache.hugegraph.pd.grpc.discovery.Query;
 
+@Useless
 public interface Discoverable {
 
     NodeInfos getNodeInfos(Query query);
diff --git 
a/hugegraph-pd/hg-pd-client/src/main/java/org/apache/hugegraph/pd/client/DiscoveryClient.java
 
b/hugegraph-pd/hg-pd-client/src/main/java/org/apache/hugegraph/pd/client/DiscoveryClient.java
index 890e9e586..fe1546ae6 100644
--- 
a/hugegraph-pd/hg-pd-client/src/main/java/org/apache/hugegraph/pd/client/DiscoveryClient.java
+++ 
b/hugegraph-pd/hg-pd-client/src/main/java/org/apache/hugegraph/pd/client/DiscoveryClient.java
@@ -28,6 +28,7 @@ import java.util.function.Consumer;
 import java.util.function.Function;
 
 import org.apache.hugegraph.pd.common.PDException;
+import org.apache.hugegraph.pd.common.Useless;
 import org.apache.hugegraph.pd.grpc.discovery.DiscoveryServiceGrpc;
 import org.apache.hugegraph.pd.grpc.discovery.NodeInfo;
 import org.apache.hugegraph.pd.grpc.discovery.NodeInfos;
@@ -38,6 +39,7 @@ import io.grpc.ManagedChannel;
 import io.grpc.ManagedChannelBuilder;
 import lombok.extern.slf4j.Slf4j;
 
+@Useless
 @Slf4j
 public abstract class DiscoveryClient implements Closeable, Discoverable {
 
diff --git 
a/hugegraph-pd/hg-pd-client/src/main/java/org/apache/hugegraph/pd/client/DiscoveryClientImpl.java
 
b/hugegraph-pd/hg-pd-client/src/main/java/org/apache/hugegraph/pd/client/DiscoveryClientImpl.java
index 1208370d3..b6b3e9820 100644
--- 
a/hugegraph-pd/hg-pd-client/src/main/java/org/apache/hugegraph/pd/client/DiscoveryClientImpl.java
+++ 
b/hugegraph-pd/hg-pd-client/src/main/java/org/apache/hugegraph/pd/client/DiscoveryClientImpl.java
@@ -20,9 +20,11 @@ package org.apache.hugegraph.pd.client;
 import java.util.Map;
 import java.util.function.Consumer;
 
+import org.apache.hugegraph.pd.common.Useless;
 import org.apache.hugegraph.pd.grpc.discovery.NodeInfo;
 import org.apache.hugegraph.pd.grpc.discovery.RegisterType;
 
+@Useless
 public class DiscoveryClientImpl extends DiscoveryClient {
 
     private final String id;
diff --git 
a/hugegraph-pd/hg-pd-client/src/main/java/org/apache/hugegraph/pd/client/LicenseClient.java
 
b/hugegraph-pd/hg-pd-client/src/main/java/org/apache/hugegraph/pd/client/LicenseClient.java
index a96185e5a..d9a2ef5fe 100644
--- 
a/hugegraph-pd/hg-pd-client/src/main/java/org/apache/hugegraph/pd/client/LicenseClient.java
+++ 
b/hugegraph-pd/hg-pd-client/src/main/java/org/apache/hugegraph/pd/client/LicenseClient.java
@@ -18,6 +18,7 @@
 package org.apache.hugegraph.pd.client;
 
 import org.apache.hugegraph.pd.common.KVPair;
+import org.apache.hugegraph.pd.common.Useless;
 import org.apache.hugegraph.pd.grpc.PDGrpc;
 import org.apache.hugegraph.pd.grpc.Pdpb;
 
@@ -27,6 +28,7 @@ import io.grpc.stub.AbstractBlockingStub;
 import io.grpc.stub.AbstractStub;
 import lombok.extern.slf4j.Slf4j;
 
+@Useless
 @Slf4j
 public class LicenseClient extends AbstractClient {
 
diff --git 
a/hugegraph-pd/hg-pd-test/src/main/java/org/apache/hugegraph/pd/common/CommonSuiteTest.java
 
b/hugegraph-pd/hg-pd-common/src/main/java/org/apache/hugegraph/pd/common/Useless.java
similarity index 60%
copy from 
hugegraph-pd/hg-pd-test/src/main/java/org/apache/hugegraph/pd/common/CommonSuiteTest.java
copy to 
hugegraph-pd/hg-pd-common/src/main/java/org/apache/hugegraph/pd/common/Useless.java
index 6f676c606..ec000f750 100644
--- 
a/hugegraph-pd/hg-pd-test/src/main/java/org/apache/hugegraph/pd/common/CommonSuiteTest.java
+++ 
b/hugegraph-pd/hg-pd-common/src/main/java/org/apache/hugegraph/pd/common/Useless.java
@@ -17,27 +17,18 @@
 
 package org.apache.hugegraph.pd.common;
 
-import org.apache.hugegraph.pd.service.IdServiceTest;
-import org.apache.hugegraph.pd.service.KvServiceTest;
-import org.junit.runner.RunWith;
-import org.junit.runners.Suite;
-
-import lombok.extern.slf4j.Slf4j;
-
-
-@RunWith(Suite.class)
[email protected]({
-        PartitionUtilsTest.class,
-        PartitionCacheTest.class,
-        MetadataKeyHelperTest.class,
-        KvServiceTest.class,
-        HgAssertTest.class,
-        KVPairTest.class,
-        IdServiceTest.class
-})
-
-@Slf4j
-public class CommonSuiteTest {
-
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * The "Useless" annotation indicates that the annotated object can be safely 
removed without
+ * affecting existing functionality, including objects that are only 
referenced in tests.
+ */
+@Target({ElementType.FIELD, ElementType.METHOD, ElementType.CONSTRUCTOR, 
ElementType.TYPE})
+@Retention(RetentionPolicy.SOURCE)
+public @interface Useless {
 
+    String value() default "Remove or handle it later";
 }
diff --git 
a/hugegraph-pd/hg-pd-core/src/main/java/org/apache/hugegraph/pd/ConfigService.java
 
b/hugegraph-pd/hg-pd-core/src/main/java/org/apache/hugegraph/pd/ConfigService.java
index 2557745c8..4a05b57ee 100644
--- 
a/hugegraph-pd/hg-pd-core/src/main/java/org/apache/hugegraph/pd/ConfigService.java
+++ 
b/hugegraph-pd/hg-pd-core/src/main/java/org/apache/hugegraph/pd/ConfigService.java
@@ -18,6 +18,7 @@
 package org.apache.hugegraph.pd;
 
 import java.util.List;
+import java.util.Objects;
 
 import org.apache.hugegraph.pd.common.PDException;
 import org.apache.hugegraph.pd.config.PDConfig;
@@ -128,7 +129,11 @@ public class ConfigService implements RaftStateListener {
      * @throws PDException when io error
      */
     public int getPartitionCount() throws PDException {
-        return getPDConfig().getPartitionCount();
+        Metapb.PDConfig config = getPDConfig();
+        if (Objects.nonNull(config)) {
+            return config.getPartitionCount();
+        }
+        return pdConfig.getInitialPartitionCount();
     }
 
     @Override
diff --git 
a/hugegraph-pd/hg-pd-core/src/main/java/org/apache/hugegraph/pd/raft/RaftEngine.java
 
b/hugegraph-pd/hg-pd-core/src/main/java/org/apache/hugegraph/pd/raft/RaftEngine.java
index f3089ed07..6882585a0 100644
--- 
a/hugegraph-pd/hg-pd-core/src/main/java/org/apache/hugegraph/pd/raft/RaftEngine.java
+++ 
b/hugegraph-pd/hg-pd-core/src/main/java/org/apache/hugegraph/pd/raft/RaftEngine.java
@@ -159,6 +159,9 @@ public class RaftEngine {
     }
 
     public boolean isLeader() {
+        if (Objects.isNull(this.raftNode)) {
+            return false;
+        }
         return this.raftNode.isLeader(true);
     }
 
diff --git a/hugegraph-pd/hg-pd-test/pom.xml b/hugegraph-pd/hg-pd-test/pom.xml
index 19e1855d8..b41c5a2a2 100644
--- a/hugegraph-pd/hg-pd-test/pom.xml
+++ b/hugegraph-pd/hg-pd-test/pom.xml
@@ -292,14 +292,14 @@
                         </configuration>
                     </execution>
                     <execution>
-                        <id>pd-service-test</id>
+                        <id>pd-rest-test</id>
                         <configuration>
                             <testSourceDirectory>${basedir}/src/main/java/
                             </testSourceDirectory>
                             <testClassesDirectory>${basedir}/target/classes/
                             </testClassesDirectory>
                             <includes>
-                                <include>**/ServerSuiteTest.java</include>
+                                <include>**/PDRestSuiteTest.java</include>
                             </includes>
                         </configuration>
                     </execution>
diff --git 
a/hugegraph-pd/hg-pd-test/src/main/java/org/apache/hugegraph/pd/PartitionCacheTest.java
 
b/hugegraph-pd/hg-pd-test/src/main/java/org/apache/hugegraph/pd/PartitionCacheTest.java
index 71efa70ec..f01ba966d 100644
--- 
a/hugegraph-pd/hg-pd-test/src/main/java/org/apache/hugegraph/pd/PartitionCacheTest.java
+++ 
b/hugegraph-pd/hg-pd-test/src/main/java/org/apache/hugegraph/pd/PartitionCacheTest.java
@@ -24,12 +24,14 @@ import java.util.Map;
 
 import org.apache.hugegraph.pd.common.KVPair;
 import org.apache.hugegraph.pd.common.PartitionCache;
+import org.apache.hugegraph.pd.common.Useless;
 import org.apache.hugegraph.pd.grpc.Metapb;
 
 import com.google.common.collect.Range;
 import com.google.common.collect.RangeMap;
 import com.google.common.collect.TreeRangeMap;
 
+@Useless("can be merged to org.apache.hugegraph.pd.common.PartitionCacheTest")
 public class PartitionCacheTest {
 
     // @Test
diff --git 
a/hugegraph-pd/hg-pd-test/src/main/java/org/apache/hugegraph/pd/PartitionServiceTest.java
 
b/hugegraph-pd/hg-pd-test/src/main/java/org/apache/hugegraph/pd/PartitionServiceTest.java
deleted file mode 100644
index 82fd4c9bd..000000000
--- 
a/hugegraph-pd/hg-pd-test/src/main/java/org/apache/hugegraph/pd/PartitionServiceTest.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * 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.hugegraph.pd;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-
-import org.apache.hugegraph.pd.grpc.Metapb;
-import org.junit.Test;
-
-public class PartitionServiceTest {
-    @Test
-    public void testPartitionHeartbeat() {
-        List<Metapb.Shard> shardList = new ArrayList<>();
-        shardList.add(Metapb.Shard.newBuilder().setStoreId(1).build());
-        shardList.add(Metapb.Shard.newBuilder().setStoreId(2).build());
-        shardList.add(Metapb.Shard.newBuilder().setStoreId(3).build());
-        shardList = new ArrayList<>(shardList);
-        Metapb.PartitionStats stats = Metapb.PartitionStats.newBuilder()
-                                                           
.addAllShard(shardList).build();
-        List<Metapb.Shard> shardList2 = new ArrayList<>(stats.getShardList());
-        Collections.shuffle(shardList2);
-        shardList2.forEach(shard -> {
-            System.out.println(shard.getStoreId());
-        });
-
-
-    }
-}
diff --git 
a/hugegraph-pd/hg-pd-test/src/main/java/org/apache/hugegraph/pd/StoreNodeServiceTest.java
 
b/hugegraph-pd/hg-pd-test/src/main/java/org/apache/hugegraph/pd/StoreNodeServiceTest.java
deleted file mode 100644
index c8f0ce39e..000000000
--- 
a/hugegraph-pd/hg-pd-test/src/main/java/org/apache/hugegraph/pd/StoreNodeServiceTest.java
+++ /dev/null
@@ -1,485 +0,0 @@
-/*
- * 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.hugegraph.pd;
-
-import java.io.File;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.concurrent.ExecutionException;
-import java.util.concurrent.atomic.AtomicReference;
-
-import org.apache.commons.io.FileUtils;
-import org.apache.hugegraph.pd.common.PDException;
-import org.apache.hugegraph.pd.config.PDConfig;
-import org.apache.hugegraph.pd.grpc.Metapb;
-import org.apache.hugegraph.pd.grpc.pulse.ChangeShard;
-import org.apache.hugegraph.pd.grpc.pulse.CleanPartition;
-import org.apache.hugegraph.pd.grpc.pulse.DbCompaction;
-import org.apache.hugegraph.pd.grpc.pulse.MovePartition;
-import org.apache.hugegraph.pd.grpc.pulse.PartitionKeyRange;
-import org.apache.hugegraph.pd.grpc.pulse.SplitPartition;
-import org.apache.hugegraph.pd.grpc.pulse.TransferLeader;
-import org.junit.Assert;
-import org.junit.BeforeClass;
-
-public class StoreNodeServiceTest {
-    static PDConfig pdConfig;
-
-    @BeforeClass
-    public static void init() throws Exception {
-        String path = "tmp/unitTest";
-        deleteDirectory(new File(path));
-        pdConfig = new PDConfig() {{
-            this.setClusterId(100);
-            this.setInitialStoreList(
-                    
"127.0.0.1:8500,127.0.0.1:8501,127.0.0.1:8502,127.0.0.1:8503,127.0.0.1:8504," +
-                    "127.0.0.1:8505");
-        }};
-
-        pdConfig.setStore(new PDConfig().new Store() {{
-            this.setMaxDownTime(3600);
-            this.setKeepAliveTimeout(3600);
-        }});
-
-        pdConfig.setPartition(new PDConfig().new Partition() {{
-            this.setShardCount(3);
-            this.setMaxShardsPerStore(3);
-        }});
-        pdConfig.setRaft(new PDConfig().new Raft() {{
-            this.setEnable(false);
-        }});
-        pdConfig.setDiscovery(new PDConfig().new Discovery());
-        pdConfig.setDataPath(path);
-        ConfigService configService = new ConfigService(pdConfig);
-        pdConfig = configService.loadConfig();
-    }
-
-    public static byte[] intToByteArray(int i) {
-        byte[] result = new byte[4];
-        result[0] = (byte) ((i >> 24) & 0xFF);
-        result[1] = (byte) ((i >> 16) & 0xFF);
-        result[2] = (byte) ((i >> 8) & 0xFF);
-        result[3] = (byte) (i & 0xFF);
-        return result;
-    }
-
-    public static void deleteDirectory(File dir) {
-        try {
-            FileUtils.deleteDirectory(dir);
-        } catch (IOException e) {
-            System.out.printf("Failed to start ....,%s%n", e.getMessage());
-        }
-    }
-
-    // @Test
-    public void testStoreNodeService() throws PDException {
-        Assert.assertEquals(pdConfig.getPartition().getTotalCount(),
-                            (long) pdConfig.getInitialStoreMap().size() *
-                            pdConfig.getPartition().getMaxShardsPerStore()
-                            / pdConfig.getPartition().getShardCount());
-        StoreNodeService storeService = new StoreNodeService(pdConfig);
-        int count = 6;
-        Metapb.Store[] stores = new Metapb.Store[count];
-        for (int i = 0; i < count; i++) {
-            Metapb.Store store = Metapb.Store.newBuilder()
-                                             .setId(0)
-                                             .setAddress("127.0.0.1:850" + i)
-                                             .setDeployPath("/data")
-                                             
.addLabels(Metapb.StoreLabel.newBuilder()
-                                                                         
.setKey("namespace")
-                                                                         
.setValue("default")
-                                                                         
.build())
-                                             .build();
-            stores[i] = storeService.register(store);
-            System.out.println("新注册store, id = " + stores[i].getId());
-        }
-        Assert.assertEquals(count, storeService.getStores("").size());
-
-        for (Metapb.Store store : stores) {
-            Metapb.StoreStats stats = Metapb.StoreStats.newBuilder()
-                                                       
.setStoreId(store.getId())
-                                                       .build();
-            storeService.heartBeat(stats);
-        }
-
-        Assert.assertEquals(6, storeService.getActiveStores("").size());
-
-        Metapb.Graph graph = Metapb.Graph.newBuilder()
-                                         .setGraphName("defaultGH")
-                                         .setPartitionCount(10)
-                                         .build();
-        // 分配shard
-        List<Metapb.Shard> shards = storeService.allocShards(graph, 1);
-
-
-        Assert.assertEquals(3, shards.size());
-
-        Assert.assertEquals(pdConfig.getPartition().getTotalCount(),
-                            storeService.getShardGroups().size());        // 
设置leader
-        Metapb.Shard leader = Metapb.Shard.newBuilder(shards.get(0))
-                                          
.setRole(Metapb.ShardRole.Leader).build();
-        shards = new ArrayList<>(shards);
-        shards.set(0, leader);
-        // 增加shard
-        pdConfig.getPartition().setShardCount(5);
-
-        Metapb.ShardGroup shardGroup = Metapb.ShardGroup.newBuilder()
-                                                        .setId(1)
-                                                        
.addAllShards(shards).build();
-        shards = storeService.reallocShards(shardGroup);
-
-        Assert.assertEquals(5, shards.size());
-        // 减少shard
-        pdConfig.getPartition().setShardCount(3);
-        shards = storeService.reallocShards(shardGroup);
-        Assert.assertEquals(3, shards.size());
-        // 包含leader,leader不能被删除
-        Assert.assertTrue(shards.contains(leader));
-
-        // 减少shard
-        pdConfig.getPartition().setShardCount(1);
-        graph = Metapb.Graph.newBuilder(graph).build();
-        shards = storeService.reallocShards(shardGroup);
-        Assert.assertEquals(1, shards.size());
-        // 包含leader,leader不能被删除
-        Assert.assertTrue(shards.contains(leader));
-
-        for (Metapb.Store store : stores) {
-            storeService.removeStore(store.getId());
-        }
-        Assert.assertEquals(0, storeService.getStores("").size());
-
-
-    }
-
-    // @Test
-    public void testSplitPartition() throws PDException {
-        StoreNodeService storeService = new StoreNodeService(pdConfig);
-        PartitionService partitionService = new PartitionService(pdConfig, 
storeService);
-
-        storeService.init(partitionService);
-        partitionService.addInstructionListener(new 
PartitionInstructionListener() {
-
-            @Override
-            public void changeShard(Metapb.Partition partition, ChangeShard 
changeShard) throws
-                                                                               
          PDException {
-
-            }
-
-            @Override
-            public void transferLeader(Metapb.Partition partition,
-                                       TransferLeader transferLeader) throws 
PDException {
-
-            }
-
-            @Override
-            public void splitPartition(Metapb.Partition partition,
-                                       SplitPartition splitPartition) throws 
PDException {
-                splitPartition.getNewPartitionList().forEach(p -> {
-                    System.out.println("SplitPartition " + p.getId() + " " + 
p.getStartKey() + "," +
-                                       p.getEndKey());
-                });
-            }
-
-            @Override
-            public void dbCompaction(Metapb.Partition partition, DbCompaction 
dbCompaction) throws
-                                                                               
             PDException {
-
-            }
-
-            @Override
-            public void movePartition(Metapb.Partition partition,
-                                      MovePartition movePartition) throws 
PDException {
-
-            }
-
-            @Override
-            public void cleanPartition(Metapb.Partition partition,
-                                       CleanPartition cleanPartition) throws 
PDException {
-
-            }
-
-            @Override
-            public void changePartitionKeyRange(Metapb.Partition partition,
-                                                PartitionKeyRange 
partitionKeyRange) throws
-                                                                               
      PDException {
-
-            }
-        });
-        int count = 6;
-        Metapb.Store[] stores = new Metapb.Store[count];
-        for (int i = 0; i < count; i++) {
-            Metapb.Store store = Metapb.Store.newBuilder()
-                                             .setId(0)
-                                             .setAddress("127.0.0.1:850" + i)
-                                             .setDeployPath("/data")
-                                             
.addLabels(Metapb.StoreLabel.newBuilder()
-                                                                         
.setKey("namespace")
-                                                                         
.setValue("default")
-                                                                         
.build())
-                                             .build();
-            stores[i] = storeService.register(store);
-            System.out.println("新注册store, id = " + 
Long.toHexString(stores[i].getId()));
-        }
-        Assert.assertEquals(count, storeService.getStores().size());
-
-        Metapb.Graph graph = Metapb.Graph.newBuilder()
-                                         .setGraphName("defaultGH")
-                                         .build();
-        Metapb.PartitionShard ptShard =
-                partitionService.getPartitionByCode(graph.getGraphName(), 0);
-        System.out.println(ptShard.getPartition().getId());
-        {
-            Metapb.Partition pt = ptShard.getPartition();
-            System.out.println(pt.getId() + " " + pt.getStartKey() + "," + 
pt.getEndKey());
-        }
-
-        Assert.assertEquals(6, storeService.getShardGroups().size());
-        // storeService.splitShardGroups(ptShard.getPartition().getId(), 4);
-        Assert.assertEquals(9, storeService.getShardGroups().size());
-        storeService.getShardGroups().forEach(shardGroup -> {
-            System.out.println("shardGroup id = " + shardGroup.getId());
-        });
-    }
-
-    // @Test
-    public void testPartitionService() throws PDException, ExecutionException,
-                                              InterruptedException {
-        StoreNodeService storeService = new StoreNodeService(pdConfig);
-        int count = 6;
-        Metapb.Store[] stores = new Metapb.Store[count];
-        for (int i = 0; i < count; i++) {
-            Metapb.Store store = Metapb.Store.newBuilder()
-                                             .setId(0)
-                                             .setAddress(String.valueOf(i))
-                                             .setDeployPath("/data")
-                                             
.addLabels(Metapb.StoreLabel.newBuilder()
-                                                                         
.setKey("namespace")
-                                                                         
.setValue("default")
-                                                                         
.build())
-                                             .build();
-            stores[i] = storeService.register(store);
-            System.out.println("新注册store, id = " + 
Long.toHexString(stores[i].getId()));
-        }
-        Assert.assertEquals(count, storeService.getStores("").size());
-
-
-        PartitionService partitionService = new PartitionService(pdConfig, 
storeService);
-
-        Metapb.Graph graph = Metapb.Graph.newBuilder()
-                                         .setGraphName("defaultGH")
-
-                                         .setPartitionCount(10)
-                                         .build();
-        // 申请分区
-        Metapb.PartitionShard[] partitions = new Metapb.PartitionShard[10];
-        for (int i = 0; i < partitions.length; i++) {
-            partitions[i] =
-                    partitionService.getPartitionShard(graph.getGraphName(), 
intToByteArray(i));
-            Assert.assertEquals(3, 
storeService.getShardGroup(i).getShardsCount());
-        }
-        System.out.println(
-                "分区数量: " + 
partitionService.getPartitions(graph.getGraphName()).size());
-
-        int[] caseNo = {0}; //1 测试增加shard, 2 //测试store下线
-
-        Metapb.Shard leader = null;
-        int[] finalCaseNo = caseNo;
-
-        partitionService.addInstructionListener(new 
PartitionInstructionListener() {
-
-            @Override
-            public void changeShard(Metapb.Partition partition, ChangeShard 
changeShard) throws
-                                                                               
          PDException {
-                switch (finalCaseNo[0]) {
-                    case 2:
-                        Assert.assertEquals(5, 
storeService.getShardGroup(partition.getId())
-                                                           .getShardsCount());
-                        break;
-                    case 3:
-                        
storeService.getShardGroup(partition.getId()).getShardsList()
-                                    .forEach(shard -> {
-                                        
Assert.assertNotEquals(shard.getStoreId(),
-                                                               
stores[0].getId());
-                                    });
-                        break;
-                }
-
-            }
-
-            @Override
-            public void transferLeader(Metapb.Partition partition, 
TransferLeader transferLeader) {
-
-            }
-
-            @Override
-            public void splitPartition(Metapb.Partition partition, 
SplitPartition splitPartition) {
-            }
-
-            @Override
-            public void dbCompaction(Metapb.Partition partition, DbCompaction 
dbCompaction) throws
-                                                                               
             PDException {
-
-            }
-
-            @Override
-            public void movePartition(Metapb.Partition partition,
-                                      MovePartition movePartition) throws 
PDException {
-
-            }
-
-            @Override
-            public void cleanPartition(Metapb.Partition partition,
-                                       CleanPartition cleanPartition) throws 
PDException {
-
-            }
-
-            @Override
-            public void changePartitionKeyRange(Metapb.Partition partition,
-                                                PartitionKeyRange 
partitionKeyRange)
-                    throws PDException {
-
-            }
-        });
-        Metapb.Partition partition = partitions[0].getPartition();
-        leader = Metapb.Shard.newBuilder(
-                
storeService.getShardGroup(partition.getId()).getShardsList().get(0)).build();
-        Metapb.Shard finalLeader = leader;
-        partitionService.addStatusListener(new PartitionStatusListener() {
-            @Override
-            public void onPartitionChanged(Metapb.Partition partition,
-                                           Metapb.Partition newPartition) {
-
-            }
-
-            @Override
-            public void onPartitionRemoved(Metapb.Partition partition) {
-
-            }
-        });
-        // 测试修改图
-        caseNo[0] = 1;
-        partitionService.updateGraph(graph);
-        for (int i = 0; i < partitions.length; i++) {
-            partitions[i] =
-                    partitionService.getPartitionShard(graph.getGraphName(), 
intToByteArray(i));
-            Assert.assertEquals(3, 
storeService.getShardGroup(i).getShardsCount());
-        }
-
-        graph = Metapb.Graph.newBuilder(graph)
-                            .setGraphName("defaultGH")
-
-                            .setPartitionCount(10)
-                            .build();
-        caseNo[0] = 2;
-        partitionService.updateGraph(graph);
-
-        // 测试store离线
-        caseNo[0] = 3;
-        partitionService.storeOffline(stores[0]);
-
-
-        Metapb.PartitionStats stats = Metapb.PartitionStats.newBuilder()
-                                                           
.addGraphName(partition.getGraphName())
-                                                           
.setId(partition.getId())
-                                                           .setLeader(
-                                                                   
Metapb.Shard.newBuilder(leader)
-                                                                               
.setRole(
-                                                                               
        Metapb.ShardRole.Leader))
-                                                           .build();
-        // 测试leader飘移
-        caseNo[0] = 4;
-        partitionService.partitionHeartbeat(stats);
-        AtomicReference<Metapb.Shard> shard = new AtomicReference<>();
-        Metapb.PartitionShard ss =
-                
partitionService.getPartitionShardById(partition.getGraphName(), 
partition.getId());
-        storeService.getShardList(partition.getId()).forEach(s -> {
-            if (s.getRole() == Metapb.ShardRole.Leader) {
-                Assert.assertNull(shard.get());
-                shard.set(s);
-            }
-        });
-
-        Assert.assertEquals(leader.getStoreId(), shard.get().getStoreId());
-
-    }
-
-    // @Test
-    public void testMergeGraphParams() throws PDException {
-        StoreNodeService storeService = new StoreNodeService(pdConfig);
-        PartitionService partitionService = new PartitionService(pdConfig, 
storeService);
-
-        Metapb.Graph dfGraph = Metapb.Graph.newBuilder()
-
-                                           .setPartitionCount(
-                                                   
pdConfig.getPartition().getTotalCount())
-
-                                           .build();
-
-        Metapb.Graph graph1 = Metapb.Graph.newBuilder()
-                                          .setGraphName("test")
-                                          .setPartitionCount(20)
-
-                                          .build();
-
-        Metapb.Graph graph2 = Metapb.Graph.newBuilder()
-                                          .setGraphName("test")
-                                          .setPartitionCount(7).build();
-        Metapb.Graph graph3 = Metapb.Graph.newBuilder()
-                                          .setGraphName("test")
-                                          .build();
-        Metapb.Graph graph4 = Metapb.Graph.newBuilder()
-                                          .setGraphName("test")
-                                          .build();
-
-        Metapb.Graph graph = 
Metapb.Graph.newBuilder(dfGraph).mergeFrom(graph2).build();
-        Assert.assertEquals(graph2.getGraphName(), graph.getGraphName());
-
-        Assert.assertEquals(graph2.getPartitionCount(), 
graph.getPartitionCount());
-
-
-        graph = Metapb.Graph.newBuilder(dfGraph).mergeFrom(graph3).build();
-        Assert.assertEquals(graph3.getGraphName(), graph.getGraphName());
-
-        Assert.assertEquals(dfGraph.getPartitionCount(), 
graph.getPartitionCount());
-
-
-        graph = Metapb.Graph.newBuilder(dfGraph).mergeFrom(graph4).build();
-        Assert.assertEquals(graph4.getGraphName(), graph.getGraphName());
-
-        Assert.assertEquals(dfGraph.getPartitionCount(), 
graph.getPartitionCount());
-
-    }
-
-    // @Test
-    public void test() {
-        int[] n = new int[3];
-
-
-        if (++n[2] > 1) {
-            System.out.println(n[2]);
-        }
-        if (++n[2] > 1) {
-            System.out.println(n[2]);
-        }
-        if (++n[2] > 1) {
-            System.out.println(n[2]);
-        }
-    }
-}
diff --git 
a/hugegraph-pd/hg-pd-test/src/main/java/org/apache/hugegraph/pd/UnitTestBase.java
 
b/hugegraph-pd/hg-pd-test/src/main/java/org/apache/hugegraph/pd/UnitTestBase.java
index 35ada8416..e1ca5adaf 100644
--- 
a/hugegraph-pd/hg-pd-test/src/main/java/org/apache/hugegraph/pd/UnitTestBase.java
+++ 
b/hugegraph-pd/hg-pd-test/src/main/java/org/apache/hugegraph/pd/UnitTestBase.java
@@ -19,6 +19,9 @@ package org.apache.hugegraph.pd;
 
 import java.io.File;
 
+import org.apache.hugegraph.pd.common.Useless;
+
+@Useless
 public class UnitTestBase {
     public static boolean deleteDir(File dir) {
         if (dir.isDirectory()) {
diff --git 
a/hugegraph-pd/hg-pd-test/src/main/java/org/apache/hugegraph/pd/client/PDClientTest.java
 
b/hugegraph-pd/hg-pd-test/src/main/java/org/apache/hugegraph/pd/client/PDClientTest.java
index 5d068c02f..470e3548f 100644
--- 
a/hugegraph-pd/hg-pd-test/src/main/java/org/apache/hugegraph/pd/client/PDClientTest.java
+++ 
b/hugegraph-pd/hg-pd-test/src/main/java/org/apache/hugegraph/pd/client/PDClientTest.java
@@ -25,6 +25,7 @@ import org.apache.hugegraph.pd.common.PDException;
 import org.apache.hugegraph.pd.grpc.MetaTask;
 import org.apache.hugegraph.pd.grpc.Metapb;
 import org.apache.hugegraph.pd.grpc.Pdpb;
+import org.junit.Ignore;
 import org.junit.Test;
 import org.mockito.Mockito;
 
@@ -161,6 +162,7 @@ public class PDClientTest extends BaseClientTest {
         }
     }
 
+    @Ignore
     @Test
     public void testUpdatePartitionLeader() {
         System.out.println("updatePartitionLeader start");
@@ -398,6 +400,7 @@ public class PDClientTest extends BaseClientTest {
         }
     }
 
+    @Ignore
     @Test
     public void testDelPartition() {
         try {
diff --git 
a/hugegraph-pd/hg-pd-test/src/main/java/org/apache/hugegraph/pd/StoreRegisterTest.java
 
b/hugegraph-pd/hg-pd-test/src/main/java/org/apache/hugegraph/pd/client/StoreRegisterTest.java
similarity index 95%
rename from 
hugegraph-pd/hg-pd-test/src/main/java/org/apache/hugegraph/pd/StoreRegisterTest.java
rename to 
hugegraph-pd/hg-pd-test/src/main/java/org/apache/hugegraph/pd/client/StoreRegisterTest.java
index 48877273f..5826b3858 100644
--- 
a/hugegraph-pd/hg-pd-test/src/main/java/org/apache/hugegraph/pd/StoreRegisterTest.java
+++ 
b/hugegraph-pd/hg-pd-test/src/main/java/org/apache/hugegraph/pd/client/StoreRegisterTest.java
@@ -15,15 +15,11 @@
  * limitations under the License.
  */
 
-package org.apache.hugegraph.pd;
+package org.apache.hugegraph.pd.client;
 
 import java.nio.charset.StandardCharsets;
 import java.util.List;
 
-import org.apache.hugegraph.pd.client.PDClient;
-import org.apache.hugegraph.pd.client.PDConfig;
-import org.apache.hugegraph.pd.client.PDPulse;
-import org.apache.hugegraph.pd.client.PDPulseImpl;
 import org.apache.hugegraph.pd.common.KVPair;
 import org.apache.hugegraph.pd.common.PDException;
 import org.apache.hugegraph.pd.grpc.Metapb;
diff --git 
a/hugegraph-pd/hg-pd-test/src/main/java/org/apache/hugegraph/pd/clitools/MainTest.java
 
b/hugegraph-pd/hg-pd-test/src/main/java/org/apache/hugegraph/pd/clitools/MainTest.java
index 526558ac9..8b2f5f831 100644
--- 
a/hugegraph-pd/hg-pd-test/src/main/java/org/apache/hugegraph/pd/clitools/MainTest.java
+++ 
b/hugegraph-pd/hg-pd-test/src/main/java/org/apache/hugegraph/pd/clitools/MainTest.java
@@ -20,8 +20,8 @@ package org.apache.hugegraph.pd.clitools;
 import java.util.Arrays;
 import java.util.List;
 
-import org.apache.hugegraph.pd.clitools.Main;
 import org.apache.hugegraph.pd.common.PDException;
+import org.junit.Ignore;
 import org.junit.Test;
 
 import lombok.extern.slf4j.Slf4j;
@@ -48,6 +48,7 @@ public class MainTest extends BaseCliToolsTest {
         }
     }
 
+    @Ignore
     @Test
     public void getConfig() throws PDException {
         Main.main(new String[]{"127.0.0.1:8686", "config", "enableBatchLoad"});
@@ -63,6 +64,7 @@ public class MainTest extends BaseCliToolsTest {
         Main.main(new String[]{"127.0.0.1:8686", "config", 
"enableBatchLoad=false"});
     }
 
+    @Ignore
     @Test
     public void getConfig2() throws PDException {
         Main.main(new String[]{"127.0.0.1:8686", "config", "shardCount"});
diff --git 
a/hugegraph-pd/hg-pd-test/src/main/java/org/apache/hugegraph/pd/common/CommonSuiteTest.java
 
b/hugegraph-pd/hg-pd-test/src/main/java/org/apache/hugegraph/pd/common/CommonSuiteTest.java
index 6f676c606..0395711ca 100644
--- 
a/hugegraph-pd/hg-pd-test/src/main/java/org/apache/hugegraph/pd/common/CommonSuiteTest.java
+++ 
b/hugegraph-pd/hg-pd-test/src/main/java/org/apache/hugegraph/pd/common/CommonSuiteTest.java
@@ -17,8 +17,6 @@
 
 package org.apache.hugegraph.pd.common;
 
-import org.apache.hugegraph.pd.service.IdServiceTest;
-import org.apache.hugegraph.pd.service.KvServiceTest;
 import org.junit.runner.RunWith;
 import org.junit.runners.Suite;
 
@@ -29,11 +27,8 @@ import lombok.extern.slf4j.Slf4j;
 @Suite.SuiteClasses({
         PartitionUtilsTest.class,
         PartitionCacheTest.class,
-        MetadataKeyHelperTest.class,
-        KvServiceTest.class,
         HgAssertTest.class,
         KVPairTest.class,
-        IdServiceTest.class
 })
 
 @Slf4j
diff --git 
a/hugegraph-pd/hg-pd-test/src/main/java/org/apache/hugegraph/pd/common/MetadataKeyHelperTest.java
 
b/hugegraph-pd/hg-pd-test/src/main/java/org/apache/hugegraph/pd/common/MetadataKeyHelperTest.java
deleted file mode 100644
index ea239ed93..000000000
--- 
a/hugegraph-pd/hg-pd-test/src/main/java/org/apache/hugegraph/pd/common/MetadataKeyHelperTest.java
+++ /dev/null
@@ -1,217 +0,0 @@
-/*
- * 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.hugegraph.pd.common;
-
-import static org.assertj.core.api.Assertions.assertThat;
-
-import org.apache.hugegraph.pd.grpc.Metapb;
-import org.apache.hugegraph.pd.meta.MetadataKeyHelper;
-import org.junit.Test;
-
-public class MetadataKeyHelperTest {
-
-    @Test
-    public void testGetStoreInfoKey() {
-        assertThat(MetadataKeyHelper.getStoreInfoKey(0L)).contains(
-                MetadataKeyHelper.getDelimiter());
-    }
-
-    @Test
-    public void testGetActiveStoreKey() {
-        assertThat(MetadataKeyHelper.getActiveStoreKey(0L)).contains(
-                MetadataKeyHelper.getDelimiter());
-    }
-
-    @Test
-    public void testGetActiveStorePrefix() {
-        assertThat(MetadataKeyHelper.getActiveStorePrefix()).contains(
-                MetadataKeyHelper.getDelimiter());
-    }
-
-    @Test
-    public void testGetStorePrefix() {
-        assertThat(MetadataKeyHelper.getStorePrefix()).contains(
-                MetadataKeyHelper.getDelimiter());
-    }
-
-    @Test
-    public void testGetStoreStatusKey() {
-        assertThat(MetadataKeyHelper.getStoreStatusKey(0L)).contains(
-                MetadataKeyHelper.getDelimiter());
-    }
-
-    @Test
-    public void testGetShardGroupKey() {
-        assertThat(MetadataKeyHelper.getShardGroupKey(0L)).contains(
-                MetadataKeyHelper.getDelimiter());
-    }
-
-    @Test
-    public void testGetShardGroupPrefix() {
-        assertThat(MetadataKeyHelper.getShardGroupPrefix()).contains(
-                MetadataKeyHelper.getDelimiter());
-    }
-
-    @Test
-    public void testGetPartitionKey() {
-        assertThat(MetadataKeyHelper.getPartitionKey("graphName", 0)).contains(
-                MetadataKeyHelper.getDelimiter());
-    }
-
-    @Test
-    public void testGetPartitionPrefix() {
-        assertThat(MetadataKeyHelper.getPartitionPrefix("graphName")).contains(
-                MetadataKeyHelper.getDelimiter());
-    }
-
-    @Test
-    public void testGetShardKey() {
-        assertThat(MetadataKeyHelper.getShardKey(0L, 0)).contains(
-                MetadataKeyHelper.getDelimiter());
-    }
-
-    @Test
-    public void testGetShardPrefix() {
-        assertThat(MetadataKeyHelper.getShardPrefix(0L)).contains(
-                MetadataKeyHelper.getDelimiter());
-    }
-
-    @Test
-    public void testGetGraphKey() {
-        assertThat(MetadataKeyHelper.getGraphKey("graphName")).contains(
-                MetadataKeyHelper.getDelimiter());
-    }
-
-    @Test
-    public void testGetGraphPrefix() {
-        assertThat(MetadataKeyHelper.getGraphPrefix()).contains(
-                MetadataKeyHelper.getDelimiter());
-    }
-
-    @Test
-    public void testGetPartitionStatusKey() {
-        assertThat(MetadataKeyHelper.getPartitionStatusKey("graphName",
-                                                           0)).contains(
-                MetadataKeyHelper.getDelimiter());
-    }
-
-    @Test
-    public void testGetPartitionStatusPrefixKey() {
-        assertThat(MetadataKeyHelper.getPartitionStatusPrefixKey(
-                "graphName")).contains(MetadataKeyHelper.getDelimiter());
-    }
-
-    @Test
-    public void testGetGraphSpaceKey() {
-        assertThat(MetadataKeyHelper.getGraphSpaceKey("graphSpace")).contains(
-                MetadataKeyHelper.getDelimiter());
-    }
-
-    @Test
-    public void testGetPdConfigKey() {
-        assertThat(MetadataKeyHelper.getPdConfigKey("configKey")).contains(
-                MetadataKeyHelper.getDelimiter());
-    }
-
-    @Test
-    public void testGetQueueItemPrefix() {
-        assertThat(MetadataKeyHelper.getQueueItemPrefix()).contains(
-                MetadataKeyHelper.getDelimiter());
-    }
-
-    @Test
-    public void testGetQueueItemKey() {
-        assertThat(MetadataKeyHelper.getQueueItemKey("itemId")).contains(
-                MetadataKeyHelper.getDelimiter());
-    }
-
-    @Test
-    public void testGetSpitTaskKey() {
-        assertThat(MetadataKeyHelper.getSplitTaskKey("graphName", 0)).contains(
-                MetadataKeyHelper.getDelimiter());
-    }
-
-    @Test
-    public void testGetSpitTaskPrefix() {
-        assertThat(MetadataKeyHelper.getSplitTaskPrefix("graph0")).contains(
-                MetadataKeyHelper.getDelimiter());
-    }
-
-    @Test
-    public void testGetLogKey() {
-        // Setup
-        final Metapb.LogRecord record = Metapb.LogRecord.newBuilder()
-                                                        .setAction("value")
-                                                        .setTimestamp(0L)
-                                                        .build();
-
-        // Run the test
-        final byte[] result = MetadataKeyHelper.getLogKey(record);
-
-        // Verify the results
-        assertThat(result).contains(MetadataKeyHelper.getDelimiter());
-    }
-
-    @Test
-    public void testGetLogKeyPrefix() {
-        assertThat(MetadataKeyHelper.getLogKeyPrefix("action", 0L)).contains(
-                MetadataKeyHelper.getDelimiter());
-    }
-
-    @Test
-    public void testGetKVPrefix() {
-        assertThat(MetadataKeyHelper.getKVPrefix("prefix", "key")).contains(
-                MetadataKeyHelper.getDelimiter());
-    }
-
-    @Test
-    public void testGetKVTTLPrefix() {
-        assertThat(MetadataKeyHelper.getKVTTLPrefix("ttlPrefix", "prefix",
-                                                    "key")).contains(
-                MetadataKeyHelper.getDelimiter());
-    }
-
-    @Test
-    public void testGetKVWatchKeyPrefix1() {
-        assertThat(
-                MetadataKeyHelper.getKVWatchKeyPrefix("key", "watchDelimiter",
-                                                      0L)).contains(
-                String.valueOf(MetadataKeyHelper.getDelimiter()));
-    }
-
-    @Test
-    public void testGetKVWatchKeyPrefix2() {
-        assertThat(MetadataKeyHelper.getKVWatchKeyPrefix("key",
-                                                         
"watchDelimiter")).contains(
-                String.valueOf(MetadataKeyHelper.getDelimiter()));
-    }
-
-    @Test
-    public void testGetDelimiter() {
-        assertThat(MetadataKeyHelper.getDelimiter()).isEqualTo('/');
-    }
-
-    @Test
-    public void testGetStringBuilderHelper() {
-        try {
-            MetadataKeyHelper.getStringBuilderHelper();
-        } catch (Exception e) {
-
-        }
-    }
-}
diff --git 
a/hugegraph-pd/hg-pd-test/src/main/java/org/apache/hugegraph/pd/core/BaseCoreTest.java
 
b/hugegraph-pd/hg-pd-test/src/main/java/org/apache/hugegraph/pd/core/BaseCoreTest.java
index dddbffb08..c2e7f652a 100644
--- 
a/hugegraph-pd/hg-pd-test/src/main/java/org/apache/hugegraph/pd/core/BaseCoreTest.java
+++ 
b/hugegraph-pd/hg-pd-test/src/main/java/org/apache/hugegraph/pd/core/BaseCoreTest.java
@@ -22,11 +22,12 @@ import java.io.IOException;
 
 import org.apache.commons.io.FileUtils;
 import org.apache.hugegraph.pd.ConfigService;
+import org.apache.hugegraph.pd.common.Useless;
 import org.apache.hugegraph.pd.config.PDConfig;
 import org.junit.After;
 import org.junit.BeforeClass;
 
-
+@Useless
 public class BaseCoreTest {
 
     static org.apache.hugegraph.pd.config.PDConfig pdConfig;
diff --git 
a/hugegraph-pd/hg-pd-test/src/main/java/org/apache/hugegraph/pd/service/ConfigServiceTest.java
 
b/hugegraph-pd/hg-pd-test/src/main/java/org/apache/hugegraph/pd/core/ConfigServiceTest.java
similarity index 97%
rename from 
hugegraph-pd/hg-pd-test/src/main/java/org/apache/hugegraph/pd/service/ConfigServiceTest.java
rename to 
hugegraph-pd/hg-pd-test/src/main/java/org/apache/hugegraph/pd/core/ConfigServiceTest.java
index faeacd834..c6a7c12c8 100644
--- 
a/hugegraph-pd/hg-pd-test/src/main/java/org/apache/hugegraph/pd/service/ConfigServiceTest.java
+++ 
b/hugegraph-pd/hg-pd-test/src/main/java/org/apache/hugegraph/pd/core/ConfigServiceTest.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.hugegraph.pd.service;
+package org.apache.hugegraph.pd.core;
 
 import java.util.List;
 
@@ -23,6 +23,7 @@ import org.apache.hugegraph.pd.ConfigService;
 import org.apache.hugegraph.pd.IdService;
 import org.apache.hugegraph.pd.config.PDConfig;
 import org.apache.hugegraph.pd.grpc.Metapb;
+import org.apache.hugegraph.pd.rest.BaseServerTest;
 import org.junit.Assert;
 import org.junit.Before;
 import org.junit.Test;
diff --git 
a/hugegraph-pd/hg-pd-test/src/main/java/org/apache/hugegraph/pd/service/IdServiceTest.java
 
b/hugegraph-pd/hg-pd-test/src/main/java/org/apache/hugegraph/pd/core/IdServiceTest.java
similarity index 97%
rename from 
hugegraph-pd/hg-pd-test/src/main/java/org/apache/hugegraph/pd/service/IdServiceTest.java
rename to 
hugegraph-pd/hg-pd-test/src/main/java/org/apache/hugegraph/pd/core/IdServiceTest.java
index dd0d3feb2..dae690d89 100644
--- 
a/hugegraph-pd/hg-pd-test/src/main/java/org/apache/hugegraph/pd/service/IdServiceTest.java
+++ 
b/hugegraph-pd/hg-pd-test/src/main/java/org/apache/hugegraph/pd/core/IdServiceTest.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.hugegraph.pd.service;
+package org.apache.hugegraph.pd.core;
 
 import java.io.File;
 
@@ -23,6 +23,7 @@ import org.apache.commons.io.FileUtils;
 import org.apache.hugegraph.pd.IdService;
 import org.apache.hugegraph.pd.config.PDConfig;
 import org.apache.hugegraph.pd.meta.IdMetaStore;
+import org.apache.hugegraph.pd.rest.BaseServerTest;
 import org.junit.Assert;
 import org.junit.Test;
 
diff --git 
a/hugegraph-pd/hg-pd-test/src/main/java/org/apache/hugegraph/pd/service/KvServiceTest.java
 
b/hugegraph-pd/hg-pd-test/src/main/java/org/apache/hugegraph/pd/core/KvServiceTest.java
similarity index 95%
rename from 
hugegraph-pd/hg-pd-test/src/main/java/org/apache/hugegraph/pd/service/KvServiceTest.java
rename to 
hugegraph-pd/hg-pd-test/src/main/java/org/apache/hugegraph/pd/core/KvServiceTest.java
index 02870b219..8b8175013 100644
--- 
a/hugegraph-pd/hg-pd-test/src/main/java/org/apache/hugegraph/pd/service/KvServiceTest.java
+++ 
b/hugegraph-pd/hg-pd-test/src/main/java/org/apache/hugegraph/pd/core/KvServiceTest.java
@@ -15,10 +15,11 @@
  * limitations under the License.
  */
 
-package org.apache.hugegraph.pd.service;
+package org.apache.hugegraph.pd.core;
 
 import org.apache.hugegraph.pd.KvService;
 import org.apache.hugegraph.pd.config.PDConfig;
+import org.apache.hugegraph.pd.rest.BaseServerTest;
 import org.junit.Assert;
 import org.junit.Test;
 
diff --git 
a/hugegraph-pd/hg-pd-test/src/main/java/org/apache/hugegraph/pd/service/LogServiceTest.java
 
b/hugegraph-pd/hg-pd-test/src/main/java/org/apache/hugegraph/pd/core/LogServiceTest.java
similarity index 95%
rename from 
hugegraph-pd/hg-pd-test/src/main/java/org/apache/hugegraph/pd/service/LogServiceTest.java
rename to 
hugegraph-pd/hg-pd-test/src/main/java/org/apache/hugegraph/pd/core/LogServiceTest.java
index 266db76c5..ad6c7bfbb 100644
--- 
a/hugegraph-pd/hg-pd-test/src/main/java/org/apache/hugegraph/pd/service/LogServiceTest.java
+++ 
b/hugegraph-pd/hg-pd-test/src/main/java/org/apache/hugegraph/pd/core/LogServiceTest.java
@@ -15,13 +15,14 @@
  * limitations under the License.
  */
 
-package org.apache.hugegraph.pd.service;
+package org.apache.hugegraph.pd.core;
 
 import java.util.List;
 
 import org.apache.hugegraph.pd.LogService;
 import org.apache.hugegraph.pd.config.PDConfig;
 import org.apache.hugegraph.pd.grpc.Metapb;
+import org.apache.hugegraph.pd.rest.BaseServerTest;
 import org.junit.Assert;
 import org.junit.Before;
 import org.junit.Test;
diff --git 
a/hugegraph-pd/hg-pd-test/src/main/java/org/apache/hugegraph/pd/MonitorServiceTest.java
 
b/hugegraph-pd/hg-pd-test/src/main/java/org/apache/hugegraph/pd/core/MonitorServiceTest.java
similarity index 89%
rename from 
hugegraph-pd/hg-pd-test/src/main/java/org/apache/hugegraph/pd/MonitorServiceTest.java
rename to 
hugegraph-pd/hg-pd-test/src/main/java/org/apache/hugegraph/pd/core/MonitorServiceTest.java
index 25272127f..546d288f2 100644
--- 
a/hugegraph-pd/hg-pd-test/src/main/java/org/apache/hugegraph/pd/MonitorServiceTest.java
+++ 
b/hugegraph-pd/hg-pd-test/src/main/java/org/apache/hugegraph/pd/core/MonitorServiceTest.java
@@ -15,17 +15,20 @@
  * limitations under the License.
  */
 
-package org.apache.hugegraph.pd;
+package org.apache.hugegraph.pd.core;
 
 import java.util.concurrent.ExecutionException;
 
+import org.apache.hugegraph.pd.PartitionService;
+import org.apache.hugegraph.pd.StoreNodeService;
+import org.apache.hugegraph.pd.TaskScheduleService;
 import org.apache.hugegraph.pd.common.PDException;
 import org.apache.hugegraph.pd.config.PDConfig;
 import org.apache.hugegraph.pd.grpc.Metapb;
 import org.junit.Assert;
 import org.junit.BeforeClass;
-
-// import org.junit.Test;
+import org.junit.Ignore;
+import org.junit.Test;
 
 public class MonitorServiceTest {
     static PDConfig pdConfig;
@@ -35,6 +38,8 @@ public class MonitorServiceTest {
         pdConfig = new PDConfig() {{
             this.setClusterId(100);
             this.setPatrolInterval(1);
+            
this.setInitialStoreList("127.0.0.1:8500,127.0.0.1:8501,127.0.0.1:8502," +
+                                     
"127.0.0.1:8503,127.0.0.1:8504,127.0.0.1:8505");
         }};
 
         //pdConfig.setEtcd(new PDConfig().new Etcd() {{
@@ -51,6 +56,10 @@ public class MonitorServiceTest {
             this.setTotalCount(10);
         }});
 
+        pdConfig.setRaft(new PDConfig().new Raft() {{
+            this.setEnable(false);
+        }});
+
         clearClusterData();
     }
 
@@ -67,7 +76,8 @@ public class MonitorServiceTest {
         //client.close();
     }
 
-    // @Test
+    @Ignore
+    @Test
     public void testPatrolStores() throws PDException, InterruptedException {
         StoreNodeService storeService = new StoreNodeService(pdConfig);
         PartitionService partitionService = new PartitionService(pdConfig, 
storeService);
diff --git 
a/hugegraph-pd/hg-pd-test/src/main/java/org/apache/hugegraph/pd/core/PDCoreSuiteTest.java
 
b/hugegraph-pd/hg-pd-test/src/main/java/org/apache/hugegraph/pd/core/PDCoreSuiteTest.java
index 3f616e212..71a8d972a 100644
--- 
a/hugegraph-pd/hg-pd-test/src/main/java/org/apache/hugegraph/pd/core/PDCoreSuiteTest.java
+++ 
b/hugegraph-pd/hg-pd-test/src/main/java/org/apache/hugegraph/pd/core/PDCoreSuiteTest.java
@@ -18,6 +18,7 @@
 package org.apache.hugegraph.pd.core;
 
 import org.apache.hugegraph.pd.core.meta.MetadataKeyHelperTest;
+import org.apache.hugegraph.pd.core.store.HgKVStoreImplTest;
 import org.junit.runner.RunWith;
 import org.junit.runners.Suite;
 
@@ -26,8 +27,19 @@ import lombok.extern.slf4j.Slf4j;
 
 @RunWith(Suite.class)
 @Suite.SuiteClasses({
+        MetadataKeyHelperTest.class,
+        HgKVStoreImplTest.class,
+        ConfigServiceTest.class,
+        IdServiceTest.class,
+        KvServiceTest.class,
+        LogServiceTest.class,
+        MonitorServiceTest.class,
+        PartitionServiceTest.class,
+        StoreMonitorDataServiceTest.class,
+        StoreNodeServiceNewTest.class,
         StoreNodeServiceTest.class,
-        MetadataKeyHelperTest.class
+        StoreServiceTest.class,
+        TaskScheduleServiceTest.class
 })
 
 @Slf4j
diff --git 
a/hugegraph-pd/hg-pd-test/src/main/java/org/apache/hugegraph/pd/service/PdTestBase.java
 
b/hugegraph-pd/hg-pd-test/src/main/java/org/apache/hugegraph/pd/core/PDCoreTestBase.java
similarity index 99%
rename from 
hugegraph-pd/hg-pd-test/src/main/java/org/apache/hugegraph/pd/service/PdTestBase.java
rename to 
hugegraph-pd/hg-pd-test/src/main/java/org/apache/hugegraph/pd/core/PDCoreTestBase.java
index 50eadb3a6..244fe2e9b 100644
--- 
a/hugegraph-pd/hg-pd-test/src/main/java/org/apache/hugegraph/pd/service/PdTestBase.java
+++ 
b/hugegraph-pd/hg-pd-test/src/main/java/org/apache/hugegraph/pd/core/PDCoreTestBase.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.hugegraph.pd.service;
+package org.apache.hugegraph.pd.core;
 
 import java.io.File;
 
@@ -42,7 +42,7 @@ import org.apache.hugegraph.pd.raft.RaftEngine;
 import org.junit.AfterClass;
 import org.junit.BeforeClass;
 
-public class PdTestBase {
+public class PDCoreTestBase {
     private static final String DATA_PATH = "/tmp/pd_data";
     private static PDConfig pdConfig;
     private static StoreNodeService storeNodeService;
diff --git 
a/hugegraph-pd/hg-pd-test/src/main/java/org/apache/hugegraph/pd/service/PartitionServiceTest.java
 
b/hugegraph-pd/hg-pd-test/src/main/java/org/apache/hugegraph/pd/core/PartitionServiceTest.java
similarity index 85%
rename from 
hugegraph-pd/hg-pd-test/src/main/java/org/apache/hugegraph/pd/service/PartitionServiceTest.java
rename to 
hugegraph-pd/hg-pd-test/src/main/java/org/apache/hugegraph/pd/core/PartitionServiceTest.java
index 0a16402d3..47815318a 100644
--- 
a/hugegraph-pd/hg-pd-test/src/main/java/org/apache/hugegraph/pd/service/PartitionServiceTest.java
+++ 
b/hugegraph-pd/hg-pd-test/src/main/java/org/apache/hugegraph/pd/core/PartitionServiceTest.java
@@ -15,10 +15,12 @@
  * limitations under the License.
  */
 
-package org.apache.hugegraph.pd.service;
+package org.apache.hugegraph.pd.core;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 
+import java.util.ArrayList;
+import java.util.Collections;
 import java.util.List;
 
 import org.apache.hugegraph.pd.PartitionService;
@@ -30,7 +32,7 @@ import org.apache.hugegraph.pd.grpc.pulse.CleanType;
 import org.junit.Before;
 import org.junit.Test;
 
-public class PartitionServiceTest extends PdTestBase {
+public class PartitionServiceTest extends PDCoreTestBase {
 
     private PartitionService service;
 
@@ -130,4 +132,22 @@ public class PartitionServiceTest extends PdTestBase {
         }
 
     }
+
+    @Test
+    public void testPartitionHeartbeat() {
+        List<Metapb.Shard> shardList = new ArrayList<>();
+        shardList.add(Metapb.Shard.newBuilder().setStoreId(1).build());
+        shardList.add(Metapb.Shard.newBuilder().setStoreId(2).build());
+        shardList.add(Metapb.Shard.newBuilder().setStoreId(3).build());
+        shardList = new ArrayList<>(shardList);
+        Metapb.PartitionStats stats = Metapb.PartitionStats.newBuilder()
+                                                           
.addAllShard(shardList).build();
+        List<Metapb.Shard> shardList2 = new ArrayList<>(stats.getShardList());
+        Collections.shuffle(shardList2);
+        shardList2.forEach(shard -> {
+            System.out.println(shard.getStoreId());
+        });
+
+
+    }
 }
diff --git 
a/hugegraph-pd/hg-pd-test/src/main/java/org/apache/hugegraph/pd/service/StoreMonitorDataServiceTest.java
 
b/hugegraph-pd/hg-pd-test/src/main/java/org/apache/hugegraph/pd/core/StoreMonitorDataServiceTest.java
similarity index 96%
rename from 
hugegraph-pd/hg-pd-test/src/main/java/org/apache/hugegraph/pd/service/StoreMonitorDataServiceTest.java
rename to 
hugegraph-pd/hg-pd-test/src/main/java/org/apache/hugegraph/pd/core/StoreMonitorDataServiceTest.java
index 21a2a37dd..8b17a38eb 100644
--- 
a/hugegraph-pd/hg-pd-test/src/main/java/org/apache/hugegraph/pd/service/StoreMonitorDataServiceTest.java
+++ 
b/hugegraph-pd/hg-pd-test/src/main/java/org/apache/hugegraph/pd/core/StoreMonitorDataServiceTest.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.hugegraph.pd.service;
+package org.apache.hugegraph.pd.core;
 
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertTrue;
@@ -29,7 +29,7 @@ import org.apache.hugegraph.pd.grpc.Metapb;
 import org.junit.Before;
 import org.junit.Test;
 
-public class StoreMonitorDataServiceTest extends PdTestBase {
+public class StoreMonitorDataServiceTest extends PDCoreTestBase {
 
     StoreMonitorDataService service;
 
diff --git 
a/hugegraph-pd/hg-pd-test/src/main/java/org/apache/hugegraph/pd/service/StoreNodeServiceNewTest.java
 
b/hugegraph-pd/hg-pd-test/src/main/java/org/apache/hugegraph/pd/core/StoreNodeServiceNewTest.java
similarity index 95%
rename from 
hugegraph-pd/hg-pd-test/src/main/java/org/apache/hugegraph/pd/service/StoreNodeServiceNewTest.java
rename to 
hugegraph-pd/hg-pd-test/src/main/java/org/apache/hugegraph/pd/core/StoreNodeServiceNewTest.java
index 10d098d1f..199a02e65 100644
--- 
a/hugegraph-pd/hg-pd-test/src/main/java/org/apache/hugegraph/pd/service/StoreNodeServiceNewTest.java
+++ 
b/hugegraph-pd/hg-pd-test/src/main/java/org/apache/hugegraph/pd/core/StoreNodeServiceNewTest.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.hugegraph.pd.service;
+package org.apache.hugegraph.pd.core;
 
 import static org.junit.Assert.assertNotNull;
 import static org.junit.jupiter.api.Assertions.assertEquals;
@@ -26,7 +26,7 @@ import org.apache.hugegraph.pd.grpc.Metapb;
 import org.junit.Before;
 import org.junit.Test;
 
-public class StoreNodeServiceNewTest extends PdTestBase {
+public class StoreNodeServiceNewTest extends PDCoreTestBase {
     private StoreNodeService service;
 
     @Before
diff --git 
a/hugegraph-pd/hg-pd-test/src/main/java/org/apache/hugegraph/pd/core/StoreNodeServiceTest.java
 
b/hugegraph-pd/hg-pd-test/src/main/java/org/apache/hugegraph/pd/core/StoreNodeServiceTest.java
index c8c7bcf15..8180ab862 100644
--- 
a/hugegraph-pd/hg-pd-test/src/main/java/org/apache/hugegraph/pd/core/StoreNodeServiceTest.java
+++ 
b/hugegraph-pd/hg-pd-test/src/main/java/org/apache/hugegraph/pd/core/StoreNodeServiceTest.java
@@ -17,30 +17,94 @@
 
 package org.apache.hugegraph.pd.core;
 
+import java.io.File;
+import java.io.IOException;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.atomic.AtomicReference;
 
+import org.apache.commons.io.FileUtils;
+import org.apache.hugegraph.pd.ConfigService;
+import org.apache.hugegraph.pd.PartitionInstructionListener;
 import org.apache.hugegraph.pd.PartitionService;
+import org.apache.hugegraph.pd.PartitionStatusListener;
 import org.apache.hugegraph.pd.StoreNodeService;
 import org.apache.hugegraph.pd.common.PDException;
+import org.apache.hugegraph.pd.config.PDConfig;
 import org.apache.hugegraph.pd.grpc.Metapb;
+import org.apache.hugegraph.pd.grpc.pulse.ChangeShard;
+import org.apache.hugegraph.pd.grpc.pulse.CleanPartition;
+import org.apache.hugegraph.pd.grpc.pulse.DbCompaction;
+import org.apache.hugegraph.pd.grpc.pulse.MovePartition;
+import org.apache.hugegraph.pd.grpc.pulse.PartitionKeyRange;
+import org.apache.hugegraph.pd.grpc.pulse.SplitPartition;
+import org.apache.hugegraph.pd.grpc.pulse.TransferLeader;
 import org.junit.Assert;
+import org.junit.BeforeClass;
+import org.junit.Ignore;
 import org.junit.Test;
 
-import lombok.extern.slf4j.Slf4j;
+public class StoreNodeServiceTest {
+    static PDConfig pdConfig;
 
-@Slf4j
-public class StoreNodeServiceTest extends BaseCoreTest {
+    @BeforeClass
+    public static void init() throws Exception {
+        String path = "tmp/unitTest";
+        deleteDirectory(new File(path));
+        pdConfig = new PDConfig() {{
+            this.setClusterId(100);
+            this.setInitialStoreList(
+                    
"127.0.0.1:8500,127.0.0.1:8501,127.0.0.1:8502,127.0.0.1:8503,127.0.0.1:8504," +
+                    "127.0.0.1:8505");
+        }};
 
+        pdConfig.setStore(new PDConfig().new Store() {{
+            this.setMaxDownTime(3600);
+            this.setKeepAliveTimeout(3600);
+        }});
 
+        pdConfig.setPartition(new PDConfig().new Partition() {{
+            this.setShardCount(3);
+            this.setMaxShardsPerStore(3);
+        }});
+        pdConfig.setRaft(new PDConfig().new Raft() {{
+            this.setEnable(false);
+        }});
+        pdConfig.setDiscovery(new PDConfig().new Discovery());
+        pdConfig.setDataPath(path);
+        ConfigService configService = new ConfigService(pdConfig);
+        pdConfig = configService.loadConfig();
+    }
+
+    public static byte[] intToByteArray(int i) {
+        byte[] result = new byte[4];
+        result[0] = (byte) ((i >> 24) & 0xFF);
+        result[1] = (byte) ((i >> 16) & 0xFF);
+        result[2] = (byte) ((i >> 8) & 0xFF);
+        result[3] = (byte) (i & 0xFF);
+        return result;
+    }
+
+    public static void deleteDirectory(File dir) {
+        try {
+            FileUtils.deleteDirectory(dir);
+        } catch (IOException e) {
+            System.out.printf("Failed to start ....,%s%n", e.getMessage());
+        }
+    }
+
+    @Ignore
     @Test
     public void testStoreNodeService() throws PDException {
         Assert.assertEquals(pdConfig.getPartition().getTotalCount(),
-                            pdConfig.getInitialStoreMap().size() *
+                            (long) pdConfig.getInitialStoreMap().size() *
                             pdConfig.getPartition().getMaxShardsPerStore()
                             / pdConfig.getPartition().getShardCount());
         StoreNodeService storeService = new StoreNodeService(pdConfig);
-        storeService.init(new PartitionService(pdConfig, storeService));
+        PartitionService partitionService = new PartitionService(pdConfig, 
storeService);
+        storeService.init(partitionService);
+
         int count = 6;
         Metapb.Store[] stores = new Metapb.Store[count];
         for (int i = 0; i < count; i++) {
@@ -76,9 +140,9 @@ public class StoreNodeServiceTest extends BaseCoreTest {
 
 
         Assert.assertEquals(3, shards.size());
-        // 设置leader
+
         Assert.assertEquals(pdConfig.getPartition().getTotalCount(),
-                            storeService.getShardGroups().size());
+                            storeService.getShardGroups().size());        // 
设置leader
         Metapb.Shard leader = Metapb.Shard.newBuilder(shards.get(0))
                                           
.setRole(Metapb.ShardRole.Leader).build();
         shards = new ArrayList<>(shards);
@@ -115,5 +179,301 @@ public class StoreNodeServiceTest extends BaseCoreTest {
 
     }
 
+    // @Test
+    public void testSplitPartition() throws PDException {
+        StoreNodeService storeService = new StoreNodeService(pdConfig);
+        PartitionService partitionService = new PartitionService(pdConfig, 
storeService);
+        storeService.init(partitionService);
+        partitionService.addInstructionListener(new 
PartitionInstructionListener() {
+
+            @Override
+            public void changeShard(Metapb.Partition partition, ChangeShard 
changeShard) throws
+                                                                               
          PDException {
+
+            }
+
+            @Override
+            public void transferLeader(Metapb.Partition partition,
+                                       TransferLeader transferLeader) throws 
PDException {
+
+            }
+
+            @Override
+            public void splitPartition(Metapb.Partition partition,
+                                       SplitPartition splitPartition) throws 
PDException {
+                splitPartition.getNewPartitionList().forEach(p -> {
+                    System.out.println("SplitPartition " + p.getId() + " " + 
p.getStartKey() + "," +
+                                       p.getEndKey());
+                });
+            }
+
+            @Override
+            public void dbCompaction(Metapb.Partition partition, DbCompaction 
dbCompaction) throws
+                                                                               
             PDException {
+
+            }
+
+            @Override
+            public void movePartition(Metapb.Partition partition,
+                                      MovePartition movePartition) throws 
PDException {
+
+            }
+
+            @Override
+            public void cleanPartition(Metapb.Partition partition,
+                                       CleanPartition cleanPartition) throws 
PDException {
+
+            }
+
+            @Override
+            public void changePartitionKeyRange(Metapb.Partition partition,
+                                                PartitionKeyRange 
partitionKeyRange) throws
+                                                                               
      PDException {
+
+            }
+        });
+        int count = 6;
+        Metapb.Store[] stores = new Metapb.Store[count];
+        for (int i = 0; i < count; i++) {
+            Metapb.Store store = Metapb.Store.newBuilder()
+                                             .setId(0)
+                                             .setAddress("127.0.0.1:850" + i)
+                                             .setDeployPath("/data")
+                                             
.addLabels(Metapb.StoreLabel.newBuilder()
+                                                                         
.setKey("namespace")
+                                                                         
.setValue("default")
+                                                                         
.build())
+                                             .build();
+            stores[i] = storeService.register(store);
+            System.out.println("新注册store, id = " + 
Long.toHexString(stores[i].getId()));
+        }
+        Assert.assertEquals(count, storeService.getStores().size());
+
+        Metapb.Graph graph = Metapb.Graph.newBuilder()
+                                         .setGraphName("defaultGH")
+                                         .build();
+        Metapb.PartitionShard ptShard =
+                partitionService.getPartitionByCode(graph.getGraphName(), 0);
+        System.out.println(ptShard.getPartition().getId());
+        {
+            Metapb.Partition pt = ptShard.getPartition();
+            System.out.println(pt.getId() + " " + pt.getStartKey() + "," + 
pt.getEndKey());
+        }
+
+        Assert.assertEquals(6, storeService.getShardGroups().size());
+        // storeService.splitShardGroups(ptShard.getPartition().getId(), 4);
+        Assert.assertEquals(9, storeService.getShardGroups().size());
+        storeService.getShardGroups().forEach(shardGroup -> {
+            System.out.println("shardGroup id = " + shardGroup.getId());
+        });
+    }
 
+    // @Test
+    public void testPartitionService() throws PDException, ExecutionException,
+                                              InterruptedException {
+        StoreNodeService storeService = new StoreNodeService(pdConfig);
+        int count = 6;
+        Metapb.Store[] stores = new Metapb.Store[count];
+        for (int i = 0; i < count; i++) {
+            Metapb.Store store = Metapb.Store.newBuilder()
+                                             .setId(0)
+                                             .setAddress("127.0.0.1:850" + i)
+                                             .setDeployPath("/data")
+                                             
.addLabels(Metapb.StoreLabel.newBuilder()
+                                                                         
.setKey("namespace")
+                                                                         
.setValue("default")
+                                                                         
.build())
+                                             .build();
+            stores[i] = storeService.register(store);
+            System.out.println("新注册store, id = " + 
Long.toHexString(stores[i].getId()));
+        }
+        Assert.assertEquals(count, storeService.getStores("").size());
+
+
+        PartitionService partitionService = new PartitionService(pdConfig, 
storeService);
+
+        Metapb.Graph graph = Metapb.Graph.newBuilder()
+                                         .setGraphName("defaultGH")
+
+                                         .setPartitionCount(10)
+                                         .build();
+        // 申请分区
+        Metapb.PartitionShard[] partitions = new Metapb.PartitionShard[10];
+        for (int i = 0; i < partitions.length; i++) {
+            partitions[i] =
+                    partitionService.getPartitionShard(graph.getGraphName(), 
intToByteArray(i));
+            Assert.assertEquals(3, 
storeService.getShardGroup(i).getShardsCount());
+        }
+        System.out.println(
+                "分区数量: " + 
partitionService.getPartitions(graph.getGraphName()).size());
+
+        int[] caseNo = {0}; //1 测试增加shard, 2 //测试store下线
+
+        Metapb.Shard leader = null;
+        int[] finalCaseNo = caseNo;
+
+        partitionService.addInstructionListener(new 
PartitionInstructionListener() {
+
+            @Override
+            public void changeShard(Metapb.Partition partition, ChangeShard 
changeShard) throws
+                                                                               
          PDException {
+                switch (finalCaseNo[0]) {
+                    case 2:
+                        Assert.assertEquals(5, 
storeService.getShardGroup(partition.getId())
+                                                           .getShardsCount());
+                        break;
+                    case 3:
+                        
storeService.getShardGroup(partition.getId()).getShardsList()
+                                    .forEach(shard -> {
+                                        
Assert.assertNotEquals(shard.getStoreId(),
+                                                               
stores[0].getId());
+                                    });
+                        break;
+                }
+
+            }
+
+            @Override
+            public void transferLeader(Metapb.Partition partition, 
TransferLeader transferLeader) {
+
+            }
+
+            @Override
+            public void splitPartition(Metapb.Partition partition, 
SplitPartition splitPartition) {
+            }
+
+            @Override
+            public void dbCompaction(Metapb.Partition partition, DbCompaction 
dbCompaction) throws
+                                                                               
             PDException {
+
+            }
+
+            @Override
+            public void movePartition(Metapb.Partition partition,
+                                      MovePartition movePartition) throws 
PDException {
+
+            }
+
+            @Override
+            public void cleanPartition(Metapb.Partition partition,
+                                       CleanPartition cleanPartition) throws 
PDException {
+
+            }
+
+            @Override
+            public void changePartitionKeyRange(Metapb.Partition partition,
+                                                PartitionKeyRange 
partitionKeyRange)
+                    throws PDException {
+
+            }
+        });
+        Metapb.Partition partition = partitions[0].getPartition();
+        leader = Metapb.Shard.newBuilder(
+                
storeService.getShardGroup(partition.getId()).getShardsList().get(0)).build();
+        Metapb.Shard finalLeader = leader;
+        partitionService.addStatusListener(new PartitionStatusListener() {
+            @Override
+            public void onPartitionChanged(Metapb.Partition partition,
+                                           Metapb.Partition newPartition) {
+
+            }
+
+            @Override
+            public void onPartitionRemoved(Metapb.Partition partition) {
+
+            }
+        });
+        // 测试修改图
+        caseNo[0] = 1;
+        partitionService.updateGraph(graph);
+        for (int i = 0; i < partitions.length; i++) {
+            partitions[i] =
+                    partitionService.getPartitionShard(graph.getGraphName(), 
intToByteArray(i));
+            Assert.assertEquals(3, 
storeService.getShardGroup(i).getShardsCount());
+        }
+
+        graph = Metapb.Graph.newBuilder(graph)
+                            .setGraphName("defaultGH")
+
+                            .setPartitionCount(10)
+                            .build();
+        caseNo[0] = 2;
+        partitionService.updateGraph(graph);
+
+        // 测试store离线
+        caseNo[0] = 3;
+        partitionService.storeOffline(stores[0]);
+
+
+        Metapb.PartitionStats stats = Metapb.PartitionStats.newBuilder()
+                                                           
.addGraphName(partition.getGraphName())
+                                                           
.setId(partition.getId())
+                                                           .setLeader(
+                                                                   
Metapb.Shard.newBuilder(leader)
+                                                                               
.setRole(
+                                                                               
        Metapb.ShardRole.Leader))
+                                                           .build();
+        // 测试leader飘移
+        caseNo[0] = 4;
+        partitionService.partitionHeartbeat(stats);
+        AtomicReference<Metapb.Shard> shard = new AtomicReference<>();
+        Metapb.PartitionShard ss =
+                
partitionService.getPartitionShardById(partition.getGraphName(), 
partition.getId());
+        storeService.getShardList(partition.getId()).forEach(s -> {
+            if (s.getRole() == Metapb.ShardRole.Leader) {
+                Assert.assertNull(shard.get());
+                shard.set(s);
+            }
+        });
+
+        Assert.assertEquals(leader.getStoreId(), shard.get().getStoreId());
+
+    }
+
+    // @Test
+    public void testMergeGraphParams() throws PDException {
+        StoreNodeService storeService = new StoreNodeService(pdConfig);
+        PartitionService partitionService = new PartitionService(pdConfig, 
storeService);
+
+        Metapb.Graph dfGraph = Metapb.Graph.newBuilder()
+
+                                           .setPartitionCount(
+                                                   
pdConfig.getPartition().getTotalCount())
+
+                                           .build();
+
+        Metapb.Graph graph1 = Metapb.Graph.newBuilder()
+                                          .setGraphName("test")
+                                          .setPartitionCount(20)
+
+                                          .build();
+
+        Metapb.Graph graph2 = Metapb.Graph.newBuilder()
+                                          .setGraphName("test")
+                                          .setPartitionCount(7).build();
+        Metapb.Graph graph3 = Metapb.Graph.newBuilder()
+                                          .setGraphName("test")
+                                          .build();
+        Metapb.Graph graph4 = Metapb.Graph.newBuilder()
+                                          .setGraphName("test")
+                                          .build();
+
+        Metapb.Graph graph = 
Metapb.Graph.newBuilder(dfGraph).mergeFrom(graph2).build();
+        Assert.assertEquals(graph2.getGraphName(), graph.getGraphName());
+
+        Assert.assertEquals(graph2.getPartitionCount(), 
graph.getPartitionCount());
+
+
+        graph = Metapb.Graph.newBuilder(dfGraph).mergeFrom(graph3).build();
+        Assert.assertEquals(graph3.getGraphName(), graph.getGraphName());
+
+        Assert.assertEquals(dfGraph.getPartitionCount(), 
graph.getPartitionCount());
+
+
+        graph = Metapb.Graph.newBuilder(dfGraph).mergeFrom(graph4).build();
+        Assert.assertEquals(graph4.getGraphName(), graph.getGraphName());
+
+        Assert.assertEquals(dfGraph.getPartitionCount(), 
graph.getPartitionCount());
+
+    }
 }
diff --git 
a/hugegraph-pd/hg-pd-test/src/main/java/org/apache/hugegraph/pd/service/StoreServiceTest.java
 
b/hugegraph-pd/hg-pd-test/src/main/java/org/apache/hugegraph/pd/core/StoreServiceTest.java
similarity index 99%
rename from 
hugegraph-pd/hg-pd-test/src/main/java/org/apache/hugegraph/pd/service/StoreServiceTest.java
rename to 
hugegraph-pd/hg-pd-test/src/main/java/org/apache/hugegraph/pd/core/StoreServiceTest.java
index af17db1c7..73f8b6223 100644
--- 
a/hugegraph-pd/hg-pd-test/src/main/java/org/apache/hugegraph/pd/service/StoreServiceTest.java
+++ 
b/hugegraph-pd/hg-pd-test/src/main/java/org/apache/hugegraph/pd/core/StoreServiceTest.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.hugegraph.pd.service;
+package org.apache.hugegraph.pd.core;
 
 import static org.assertj.core.api.Assertions.assertThat;
 import static org.mockito.Mockito.mock;
@@ -33,7 +33,9 @@ import org.apache.hugegraph.pd.StoreStatusListener;
 import org.apache.hugegraph.pd.config.PDConfig;
 import org.apache.hugegraph.pd.grpc.MetaTask;
 import org.apache.hugegraph.pd.grpc.Metapb;
+import org.apache.hugegraph.pd.rest.BaseServerTest;
 import org.junit.Before;
+import org.junit.Ignore;
 import org.junit.Test;
 
 public class StoreServiceTest {
@@ -287,6 +289,7 @@ public class StoreServiceTest {
         final Metapb.Store result = this.service.updateStore(store);
     }
 
+    @Ignore
     @Test
     public void testStoreTurnoff() throws Exception {
         // Setup
@@ -491,6 +494,7 @@ public class StoreServiceTest {
         }
     }
 
+    @Ignore
     @Test
     public void testGetTombStores() throws Exception {
         // Setup
diff --git 
a/hugegraph-pd/hg-pd-test/src/main/java/org/apache/hugegraph/pd/service/TaskScheduleServiceTest.java
 
b/hugegraph-pd/hg-pd-test/src/main/java/org/apache/hugegraph/pd/core/TaskScheduleServiceTest.java
similarity index 97%
rename from 
hugegraph-pd/hg-pd-test/src/main/java/org/apache/hugegraph/pd/service/TaskScheduleServiceTest.java
rename to 
hugegraph-pd/hg-pd-test/src/main/java/org/apache/hugegraph/pd/core/TaskScheduleServiceTest.java
index d4686f0c5..4b70845ad 100644
--- 
a/hugegraph-pd/hg-pd-test/src/main/java/org/apache/hugegraph/pd/service/TaskScheduleServiceTest.java
+++ 
b/hugegraph-pd/hg-pd-test/src/main/java/org/apache/hugegraph/pd/core/TaskScheduleServiceTest.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.hugegraph.pd.service;
+package org.apache.hugegraph.pd.core;
 
 import static org.junit.Assert.assertTrue;
 
@@ -28,7 +28,7 @@ import org.apache.hugegraph.pd.grpc.Metapb;
 import org.junit.Before;
 import org.junit.Test;
 
-public class TaskScheduleServiceTest extends PdTestBase {
+public class TaskScheduleServiceTest extends PDCoreTestBase {
 
     TaskScheduleService service;
 
diff --git 
a/hugegraph-pd/hg-pd-test/src/main/java/org/apache/hugegraph/pd/core/meta/MetadataKeyHelperTest.java
 
b/hugegraph-pd/hg-pd-test/src/main/java/org/apache/hugegraph/pd/core/meta/MetadataKeyHelperTest.java
index 7d38b9e13..03aa0e785 100644
--- 
a/hugegraph-pd/hg-pd-test/src/main/java/org/apache/hugegraph/pd/core/meta/MetadataKeyHelperTest.java
+++ 
b/hugegraph-pd/hg-pd-test/src/main/java/org/apache/hugegraph/pd/core/meta/MetadataKeyHelperTest.java
@@ -17,8 +17,10 @@
 
 package org.apache.hugegraph.pd.core.meta;
 
+import static org.assertj.core.api.Assertions.assertThat;
 import static org.junit.Assert.assertArrayEquals;
 
+import org.apache.hugegraph.pd.grpc.Metapb;
 import org.apache.hugegraph.pd.meta.MetadataKeyHelper;
 import org.junit.Test;
 
@@ -31,4 +33,194 @@ public class MetadataKeyHelperTest {
         var key2 = MetadataKeyHelper.getMoveTaskPrefix("foo");
         assertArrayEquals(key2, "TASK_MOVE/foo".getBytes());
     }
+
+    @Test
+    public void testGetStoreInfoKey() {
+        assertThat(MetadataKeyHelper.getStoreInfoKey(0L)).contains(
+                MetadataKeyHelper.getDelimiter());
+    }
+
+    @Test
+    public void testGetActiveStoreKey() {
+        assertThat(MetadataKeyHelper.getActiveStoreKey(0L)).contains(
+                MetadataKeyHelper.getDelimiter());
+    }
+
+    @Test
+    public void testGetActiveStorePrefix() {
+        assertThat(MetadataKeyHelper.getActiveStorePrefix()).contains(
+                MetadataKeyHelper.getDelimiter());
+    }
+
+    @Test
+    public void testGetStorePrefix() {
+        assertThat(MetadataKeyHelper.getStorePrefix()).contains(
+                MetadataKeyHelper.getDelimiter());
+    }
+
+    @Test
+    public void testGetStoreStatusKey() {
+        assertThat(MetadataKeyHelper.getStoreStatusKey(0L)).contains(
+                MetadataKeyHelper.getDelimiter());
+    }
+
+    @Test
+    public void testGetShardGroupKey() {
+        assertThat(MetadataKeyHelper.getShardGroupKey(0L)).contains(
+                MetadataKeyHelper.getDelimiter());
+    }
+
+    @Test
+    public void testGetShardGroupPrefix() {
+        assertThat(MetadataKeyHelper.getShardGroupPrefix()).contains(
+                MetadataKeyHelper.getDelimiter());
+    }
+
+    @Test
+    public void testGetPartitionKey() {
+        assertThat(MetadataKeyHelper.getPartitionKey("graphName", 0)).contains(
+                MetadataKeyHelper.getDelimiter());
+    }
+
+    @Test
+    public void testGetPartitionPrefix() {
+        assertThat(MetadataKeyHelper.getPartitionPrefix("graphName")).contains(
+                MetadataKeyHelper.getDelimiter());
+    }
+
+    @Test
+    public void testGetShardKey() {
+        assertThat(MetadataKeyHelper.getShardKey(0L, 0)).contains(
+                MetadataKeyHelper.getDelimiter());
+    }
+
+    @Test
+    public void testGetShardPrefix() {
+        assertThat(MetadataKeyHelper.getShardPrefix(0L)).contains(
+                MetadataKeyHelper.getDelimiter());
+    }
+
+    @Test
+    public void testGetGraphKey() {
+        assertThat(MetadataKeyHelper.getGraphKey("graphName")).contains(
+                MetadataKeyHelper.getDelimiter());
+    }
+
+    @Test
+    public void testGetGraphPrefix() {
+        assertThat(MetadataKeyHelper.getGraphPrefix()).contains(
+                MetadataKeyHelper.getDelimiter());
+    }
+
+    @Test
+    public void testGetPartitionStatusKey() {
+        assertThat(MetadataKeyHelper.getPartitionStatusKey("graphName",
+                                                           0)).contains(
+                MetadataKeyHelper.getDelimiter());
+    }
+
+    @Test
+    public void testGetPartitionStatusPrefixKey() {
+        assertThat(MetadataKeyHelper.getPartitionStatusPrefixKey(
+                "graphName")).contains(MetadataKeyHelper.getDelimiter());
+    }
+
+    @Test
+    public void testGetGraphSpaceKey() {
+        assertThat(MetadataKeyHelper.getGraphSpaceKey("graphSpace")).contains(
+                MetadataKeyHelper.getDelimiter());
+    }
+
+    @Test
+    public void testGetPdConfigKey() {
+        assertThat(MetadataKeyHelper.getPdConfigKey("configKey")).contains(
+                MetadataKeyHelper.getDelimiter());
+    }
+
+    @Test
+    public void testGetQueueItemPrefix() {
+        assertThat(MetadataKeyHelper.getQueueItemPrefix()).contains(
+                MetadataKeyHelper.getDelimiter());
+    }
+
+    @Test
+    public void testGetQueueItemKey() {
+        assertThat(MetadataKeyHelper.getQueueItemKey("itemId")).contains(
+                MetadataKeyHelper.getDelimiter());
+    }
+
+    @Test
+    public void testGetSpitTaskKey() {
+        assertThat(MetadataKeyHelper.getSplitTaskKey("graphName", 0)).contains(
+                MetadataKeyHelper.getDelimiter());
+    }
+
+    @Test
+    public void testGetSpitTaskPrefix() {
+        assertThat(MetadataKeyHelper.getSplitTaskPrefix("graph0")).contains(
+                MetadataKeyHelper.getDelimiter());
+    }
+
+    @Test
+    public void testGetLogKey() {
+        // Setup
+        final Metapb.LogRecord record = Metapb.LogRecord.newBuilder()
+                                                        .setAction("value")
+                                                        .setTimestamp(0L)
+                                                        .build();
+
+        // Run the test
+        final byte[] result = MetadataKeyHelper.getLogKey(record);
+
+        // Verify the results
+        assertThat(result).contains(MetadataKeyHelper.getDelimiter());
+    }
+
+    @Test
+    public void testGetLogKeyPrefix() {
+        assertThat(MetadataKeyHelper.getLogKeyPrefix("action", 0L)).contains(
+                MetadataKeyHelper.getDelimiter());
+    }
+
+    @Test
+    public void testGetKVPrefix() {
+        assertThat(MetadataKeyHelper.getKVPrefix("prefix", "key")).contains(
+                MetadataKeyHelper.getDelimiter());
+    }
+
+    @Test
+    public void testGetKVTTLPrefix() {
+        assertThat(MetadataKeyHelper.getKVTTLPrefix("ttlPrefix", "prefix",
+                                                    "key")).contains(
+                MetadataKeyHelper.getDelimiter());
+    }
+
+    @Test
+    public void testGetKVWatchKeyPrefix1() {
+        assertThat(
+                MetadataKeyHelper.getKVWatchKeyPrefix("key", "watchDelimiter",
+                                                      0L)).contains(
+                String.valueOf(MetadataKeyHelper.getDelimiter()));
+    }
+
+    @Test
+    public void testGetKVWatchKeyPrefix2() {
+        assertThat(MetadataKeyHelper.getKVWatchKeyPrefix("key",
+                                                         
"watchDelimiter")).contains(
+                String.valueOf(MetadataKeyHelper.getDelimiter()));
+    }
+
+    @Test
+    public void testGetDelimiter() {
+        assertThat(MetadataKeyHelper.getDelimiter()).isEqualTo('/');
+    }
+
+    @Test
+    public void testGetStringBuilderHelper() {
+        try {
+            MetadataKeyHelper.getStringBuilderHelper();
+        } catch (Exception e) {
+
+        }
+    }
 }
diff --git 
a/hugegraph-pd/hg-pd-test/src/main/java/org/apache/hugegraph/pd/store/HgKVStoreImplTest.java
 
b/hugegraph-pd/hg-pd-test/src/main/java/org/apache/hugegraph/pd/core/store/HgKVStoreImplTest.java
similarity index 93%
rename from 
hugegraph-pd/hg-pd-test/src/main/java/org/apache/hugegraph/pd/store/HgKVStoreImplTest.java
rename to 
hugegraph-pd/hg-pd-test/src/main/java/org/apache/hugegraph/pd/core/store/HgKVStoreImplTest.java
index 342ac9bc4..cfd5299ea 100644
--- 
a/hugegraph-pd/hg-pd-test/src/main/java/org/apache/hugegraph/pd/store/HgKVStoreImplTest.java
+++ 
b/hugegraph-pd/hg-pd-test/src/main/java/org/apache/hugegraph/pd/core/store/HgKVStoreImplTest.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.hugegraph.pd.store;
+package org.apache.hugegraph.pd.core.store;
 
 import java.io.File;
 import java.io.IOException;
@@ -24,8 +24,11 @@ import java.nio.file.Paths;
 import org.apache.commons.io.FileUtils;
 import org.apache.hugegraph.pd.common.PDException;
 import org.apache.hugegraph.pd.config.PDConfig;
+import org.apache.hugegraph.pd.store.HgKVStore;
+import org.apache.hugegraph.pd.store.HgKVStoreImpl;
 import org.junit.Assert;
 import org.junit.BeforeClass;
+import org.junit.Test;
 
 public class HgKVStoreImplTest {
     static final String testPath = "tmp/test";
@@ -43,7 +46,7 @@ public class HgKVStoreImplTest {
         }};
     }
 
-    // @Test
+    @Test
     public void Test() throws PDException {
         HgKVStore kvStore = new HgKVStoreImpl();
         kvStore.init(pdConfig);
@@ -63,9 +66,11 @@ public class HgKVStoreImplTest {
 
         kvStore.removeByPrefix("k".getBytes());
         Assert.assertEquals(0, kvStore.scanPrefix("k".getBytes()).size());
+
+        kvStore.close();
     }
 
-    // @Test
+    @Test
     public void TestSnapshot() throws PDException {
         HgKVStore kvStore = new HgKVStoreImpl();
         kvStore.init(pdConfig);
@@ -101,5 +106,7 @@ public class HgKVStoreImplTest {
             kvStore.put(key, value);
         }
         Assert.assertEquals(200, kvStore.scanPrefix("k".getBytes()).size());
+
+        kvStore.close();
     }
 }
diff --git 
a/hugegraph-pd/hg-pd-test/src/main/java/org/apache/hugegraph/pd/grpc/BaseGrpcTest.java
 
b/hugegraph-pd/hg-pd-test/src/main/java/org/apache/hugegraph/pd/grpc/BaseGrpcTest.java
index 0e768d611..4ed8b3935 100644
--- 
a/hugegraph-pd/hg-pd-test/src/main/java/org/apache/hugegraph/pd/grpc/BaseGrpcTest.java
+++ 
b/hugegraph-pd/hg-pd-test/src/main/java/org/apache/hugegraph/pd/grpc/BaseGrpcTest.java
@@ -17,10 +17,11 @@
 
 package org.apache.hugegraph.pd.grpc;
 
+import org.apache.hugegraph.pd.common.Useless;
 import org.junit.After;
 import org.junit.BeforeClass;
 
-
+@Useless
 public class BaseGrpcTest {
 
     @BeforeClass
diff --git 
a/hugegraph-pd/hg-pd-test/src/main/java/org/apache/hugegraph/pd/grpc/GrpcSuiteTest.java
 
b/hugegraph-pd/hg-pd-test/src/main/java/org/apache/hugegraph/pd/grpc/GrpcSuiteTest.java
index b994a1fd2..44ffdf064 100644
--- 
a/hugegraph-pd/hg-pd-test/src/main/java/org/apache/hugegraph/pd/grpc/GrpcSuiteTest.java
+++ 
b/hugegraph-pd/hg-pd-test/src/main/java/org/apache/hugegraph/pd/grpc/GrpcSuiteTest.java
@@ -17,12 +17,13 @@
 
 package org.apache.hugegraph.pd.grpc;
 
+import org.apache.hugegraph.pd.common.Useless;
 import org.junit.runner.RunWith;
 import org.junit.runners.Suite;
 
 import lombok.extern.slf4j.Slf4j;
 
-
+@Useless
 @RunWith(Suite.class)
 @Suite.SuiteClasses({
 })
diff --git 
a/hugegraph-pd/hg-pd-test/src/main/java/org/apache/hugegraph/pd/service/BaseServerTest.java
 
b/hugegraph-pd/hg-pd-test/src/main/java/org/apache/hugegraph/pd/rest/BaseServerTest.java
similarity index 97%
rename from 
hugegraph-pd/hg-pd-test/src/main/java/org/apache/hugegraph/pd/service/BaseServerTest.java
rename to 
hugegraph-pd/hg-pd-test/src/main/java/org/apache/hugegraph/pd/rest/BaseServerTest.java
index e9092a631..5c397e809 100644
--- 
a/hugegraph-pd/hg-pd-test/src/main/java/org/apache/hugegraph/pd/service/BaseServerTest.java
+++ 
b/hugegraph-pd/hg-pd-test/src/main/java/org/apache/hugegraph/pd/rest/BaseServerTest.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.hugegraph.pd.service;
+package org.apache.hugegraph.pd.rest;
 
 import java.io.File;
 import java.net.http.HttpClient;
diff --git 
a/hugegraph-pd/hg-pd-test/src/main/java/org/apache/hugegraph/pd/grpc/GrpcSuiteTest.java
 
b/hugegraph-pd/hg-pd-test/src/main/java/org/apache/hugegraph/pd/rest/PDRestSuiteTest.java
similarity index 90%
copy from 
hugegraph-pd/hg-pd-test/src/main/java/org/apache/hugegraph/pd/grpc/GrpcSuiteTest.java
copy to 
hugegraph-pd/hg-pd-test/src/main/java/org/apache/hugegraph/pd/rest/PDRestSuiteTest.java
index b994a1fd2..d16d21208 100644
--- 
a/hugegraph-pd/hg-pd-test/src/main/java/org/apache/hugegraph/pd/grpc/GrpcSuiteTest.java
+++ 
b/hugegraph-pd/hg-pd-test/src/main/java/org/apache/hugegraph/pd/rest/PDRestSuiteTest.java
@@ -15,19 +15,19 @@
  * limitations under the License.
  */
 
-package org.apache.hugegraph.pd.grpc;
+package org.apache.hugegraph.pd.rest;
 
 import org.junit.runner.RunWith;
 import org.junit.runners.Suite;
 
 import lombok.extern.slf4j.Slf4j;
 
-
 @RunWith(Suite.class)
 @Suite.SuiteClasses({
+        RestApiTest.class,
 })
 
 @Slf4j
-public class GrpcSuiteTest {
+public class PDRestSuiteTest {
 
 }
diff --git 
a/hugegraph-pd/hg-pd-test/src/main/java/org/apache/hugegraph/pd/service/RestApiTest.java
 
b/hugegraph-pd/hg-pd-test/src/main/java/org/apache/hugegraph/pd/rest/RestApiTest.java
similarity index 99%
rename from 
hugegraph-pd/hg-pd-test/src/main/java/org/apache/hugegraph/pd/service/RestApiTest.java
rename to 
hugegraph-pd/hg-pd-test/src/main/java/org/apache/hugegraph/pd/rest/RestApiTest.java
index 7e5fec381..b3165ab30 100644
--- 
a/hugegraph-pd/hg-pd-test/src/main/java/org/apache/hugegraph/pd/service/RestApiTest.java
+++ 
b/hugegraph-pd/hg-pd-test/src/main/java/org/apache/hugegraph/pd/rest/RestApiTest.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.hugegraph.pd.service;
+package org.apache.hugegraph.pd.rest;
 
 import java.io.IOException;
 import java.net.URI;
diff --git 
a/hugegraph-pd/hg-pd-test/src/main/java/org/apache/hugegraph/pd/service/ServerSuiteTest.java
 
b/hugegraph-pd/hg-pd-test/src/main/java/org/apache/hugegraph/pd/service/ServerSuiteTest.java
deleted file mode 100644
index fe8c0ed04..000000000
--- 
a/hugegraph-pd/hg-pd-test/src/main/java/org/apache/hugegraph/pd/service/ServerSuiteTest.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * 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.hugegraph.pd.service;
-
-import org.junit.runner.RunWith;
-import org.junit.runners.Suite;
-
-import lombok.extern.slf4j.Slf4j;
-
-
-@RunWith(Suite.class)
[email protected]({
-        RestApiTest.class,
-        ConfigServiceTest.class,
-        IdServiceTest.class,
-        KvServiceTest.class,
-        LogServiceTest.class,
-        StoreServiceTest.class,
-        StoreNodeServiceNewTest.class,
-        StoreMonitorDataServiceTest.class,
-        TaskScheduleServiceTest.class,
-        PartitionServiceTest.class
-})
-
-@Slf4j
-public class ServerSuiteTest {
-}
diff --git a/hugegraph-pd/pom.xml b/hugegraph-pd/pom.xml
index e7ccdce9b..11b508024 100644
--- a/hugegraph-pd/pom.xml
+++ b/hugegraph-pd/pom.xml
@@ -245,7 +245,7 @@
             </build>
         </profile>
         <profile>
-            <id>pd-service-test</id>
+            <id>pd-rest-test</id>
             <activation>
                 <activeByDefault>true</activeByDefault>
             </activation>
@@ -257,7 +257,7 @@
                         <version>2.20</version>
                         <executions>
                             <execution>
-                                <id>pd-service-test</id>
+                                <id>pd-rest-test</id>
                                 <goals>
                                     <goal>test</goal>
                                 </goals>

Reply via email to