diff --git a/src/executor/QueryStorageExecutor.h b/src/executor/QueryStorageExecutor.h
index 158aa18cbc4d6bedc52c85955ae971b72e732221..3526d7fca15e4adb3d153f74cf1cd479833884fd 100644
--- a/src/executor/QueryStorageExecutor.h
+++ b/src/executor/QueryStorageExecutor.h
@@ -34,50 +34,60 @@ protected:
                            << it->first;
             }
             if (completeness == 0 || isCompleteRequire) {
-                LOG(ERROR) << "Request to storage failed in executor `" << name_ << "'";
-                return Status::Error("Request to storage failed in executor.");
+                return handleErrorCode(failedCodes.begin()->second,
+                                       failedCodes.begin()->first);
             }
             return Result::State::kPartialSuccess;
         }
         return Result::State::kSuccess;
     }
 
-    Status handleErrorCode(nebula::storage::cpp2::ErrorCode code, PartitionID partId) {
+    Status handleErrorCode(nebula::storage::cpp2::ErrorCode code, PartitionID partId) const {
         switch (code) {
             case storage::cpp2::ErrorCode::E_INVALID_VID:
-                return Status::Error("Invalid vid.");
+                return Status::Error("Storage Error: Invalid vid.");
             case storage::cpp2::ErrorCode::E_INVALID_FIELD_VALUE: {
-                std::string error = "Invalid field value: may be the filed is not NULL "
-                             "or without default value or wrong schema.";
+                std::string error = "Storage Error: Invalid field value: "
+                                    "may be the filed is not NULL "
+                                    "or without default value or wrong schema.";
                 return Status::Error(std::move(error));
             }
+            case storage::cpp2::ErrorCode::E_LEADER_CHANGED:
+                return Status::Error("Storage Error: Leader changed.");
             case storage::cpp2::ErrorCode::E_INVALID_FILTER:
-                return Status::Error("Invalid filter.");
+                return Status::Error("Storage Error: Invalid filter.");
             case storage::cpp2::ErrorCode::E_INVALID_UPDATER:
-                return Status::Error("Invalid Update col or yield col.");
+                return Status::Error("Storage Error: Invalid Update col or yield col.");
+            case storage::cpp2::ErrorCode::E_INVALID_SPACEVIDLEN:
+                return Status::Error("Storage Error: Invalid space vid len.");
+            case storage::cpp2::ErrorCode::E_SPACE_NOT_FOUND:
+                return Status::Error("Storage Error: Space not found.");
             case storage::cpp2::ErrorCode::E_TAG_NOT_FOUND:
-                return Status::Error("Tag not found.");
+                return Status::Error("Storage Error: Tag not found.");
             case storage::cpp2::ErrorCode::E_TAG_PROP_NOT_FOUND:
-                return Status::Error("Tag prop not found.");
+                return Status::Error("Storage Error: Tag prop not found.");
             case storage::cpp2::ErrorCode::E_EDGE_NOT_FOUND:
-                return Status::Error("Edge not found.");
+                return Status::Error("Storage Error: Edge not found.");
             case storage::cpp2::ErrorCode::E_EDGE_PROP_NOT_FOUND:
-                return Status::Error("Edge prop not found.");
+                return Status::Error("Storage Error: Edge prop not found.");
+            case storage::cpp2::ErrorCode::E_INDEX_NOT_FOUND:
+                return Status::Error("Storage Error: Index not found.");
             case storage::cpp2::ErrorCode::E_INVALID_DATA:
-                return Status::Error("Invalid data, may be wrong value type.");
+                return Status::Error("Storage Error: Invalid data, may be wrong value type.");
             case storage::cpp2::ErrorCode::E_NOT_NULLABLE:
-                return Status::Error("The not null field cannot be null.");
+                return Status::Error("Storage Error: The not null field cannot be null.");
             case storage::cpp2::ErrorCode::E_FIELD_UNSET:
-                return Status::Error("The not null field doesn't have a default value.");
+                return Status::Error("Storage Error: "
+                                     "The not null field doesn't have a default value.");
             case storage::cpp2::ErrorCode::E_OUT_OF_RANGE:
-                return Status::Error("Out of range value.");
+                return Status::Error("Storage Error: Out of range value.");
             case storage::cpp2::ErrorCode::E_ATOMIC_OP_FAILED:
-                return Status::Error("Atomic operation failed.");
+                return Status::Error("Storage Error: Atomic operation failed.");
             case storage::cpp2::ErrorCode::E_FILTER_OUT:
                 return Status::OK();
             default:
-                auto status = Status::Error("Unknown error, part: %d, error code: %d.",
-                                            partId, static_cast<int32_t>(code));
+                auto status = Status::Error("Storage Error: part: %d, error code: %d.",
+                                             partId, static_cast<int32_t>(code));
                 LOG(ERROR) << status;
                 return status;
         }
diff --git a/src/mock/CMakeLists.txt b/src/mock/CMakeLists.txt
deleted file mode 100644
index 3fa18b6e3f65ccf704751dc20ca20276777f752a..0000000000000000000000000000000000000000
--- a/src/mock/CMakeLists.txt
+++ /dev/null
@@ -1,18 +0,0 @@
-# Copyright (c) 2020 vesoft inc. All rights reserved.
-#
-# This source code is licensed under Apache 2.0 License,
-# attached with Common Clause Condition 1.0, found in the LICENSES directory.
-#
-
-nebula_add_library(
-    mock_obj OBJECT
-    MetaCache.cpp
-    StorageCache.cpp
-    MockMetaServiceHandler.cpp
-    MockStorageServiceHandler.cpp
-    test/TestMain.cpp
-    test/TestEnv.cpp
-    test/TestBase.cpp
-)
-
-# nebula_add_subdirectory(test)
diff --git a/src/mock/MetaCache.cpp b/src/mock/MetaCache.cpp
deleted file mode 100644
index d04a2b2bc08f3bb126a935131782215314c79dcc..0000000000000000000000000000000000000000
--- a/src/mock/MetaCache.cpp
+++ /dev/null
@@ -1,947 +0,0 @@
-/* Copyright (c) 2020 vesoft inc. All rights reserved.
- *
- * This source code is licensed under Apache 2.0 License,
- * attached with Common Clause Condition 1.0, found in the LICENSES directory.
- */
-
-#include "mock/MetaCache.h"
-#include "MetaCache.h"
-#include "common/network/NetworkUtils.h"
-
-namespace nebula {
-namespace graph {
-
-#define CHECK_SPACE_ID(spaceId) \
-    auto spaceIter = cache_.find(spaceId); \
-        if (spaceIter == cache_.end()) { \
-        return Status::Error("SpaceID `%d' not found", spaceId); \
-    }
-
-Status MetaCache::createSpace(const meta::cpp2::CreateSpaceReq &req, GraphSpaceID &spaceId) {
-    folly::RWSpinLock::WriteHolder holder(lock_);
-    auto ifNotExists = req.get_if_not_exists();
-    auto properties = req.get_properties();
-    auto spaceName = properties.get_space_name();
-    const auto findIter = spaceIndex_.find(spaceName);
-    if (ifNotExists && findIter != spaceIndex_.end()) {
-        spaceId = findIter->second;
-        return Status::OK();
-    }
-    if (findIter != spaceIndex_.end()) {
-        return Status::Error("Space `%s' existed", spaceName.c_str());
-    }
-    spaceId = ++id_;
-    spaceIndex_.emplace(spaceName, spaceId);
-    meta::cpp2::SpaceItem space;
-    space.set_space_id(spaceId);
-    space.set_properties(std::move(properties));
-    spaces_[spaceId] = space;
-    auto &vid = space.get_properties().get_vid_type();
-    auto vidSize = vid.__isset.type_length ? *vid.get_type_length() : 0;
-    VLOG(1) << "space name: " << space.get_properties().get_space_name()
-            << ", partition_num: " << space.get_properties().get_partition_num()
-            << ", replica_factor: " << space.get_properties().get_replica_factor()
-            << ", vid_size: " << vidSize;
-    cache_[spaceId] = SpaceInfoCache();
-    roles_.emplace(spaceId, UserRoles());
-    return Status::OK();
-}
-
-StatusOr<meta::cpp2::SpaceItem> MetaCache::getSpace(const meta::cpp2::GetSpaceReq &req) {
-    folly::RWSpinLock::ReadHolder holder(lock_);
-    auto findIter = spaceIndex_.find(req.get_space_name());
-    if (findIter == spaceIndex_.end()) {
-        LOG(ERROR) << "Space " << req.get_space_name().c_str() << " not found";
-        return Status::Error("Space `%s' not found", req.get_space_name().c_str());
-    }
-    const auto spaceInfo = spaces_.find(findIter->second);
-    DCHECK(spaceInfo != spaces_.end());
-    auto &properties = spaceInfo->second.get_properties();
-    auto& vid = properties.get_vid_type();
-    VLOG(1) << "space name: " << properties.get_space_name()
-            << ", partition_num: " << properties.get_partition_num()
-            << ", replica_factor: " << properties.get_replica_factor()
-            << ", vid_size: " << (vid.__isset.type_length ? *vid.get_type_length() : 0);
-    return spaceInfo->second;
-}
-
-StatusOr<std::vector<meta::cpp2::IdName>> MetaCache::listSpaces() {
-    folly::RWSpinLock::ReadHolder holder(lock_);
-    std::vector<meta::cpp2::IdName> spaces;
-    for (const auto &index : spaceIndex_) {
-        meta::cpp2::IdName idName;
-        idName.set_id(to(index.second, EntryType::SPACE));
-        idName.set_name(index.first);
-        spaces.emplace_back(idName);
-    }
-    return spaces;
-}
-
-Status MetaCache::dropSpace(const meta::cpp2::DropSpaceReq &req) {
-    folly::RWSpinLock::WriteHolder holder(lock_);
-    auto spaceName  = req.get_space_name();
-    auto findIter = spaceIndex_.find(spaceName);
-    auto ifExists = req.get_if_exists();
-
-    if (ifExists && findIter == spaceIndex_.end()) {
-        Status::OK();
-    }
-
-    if (findIter == spaceIndex_.end()) {
-        return Status::Error("Space `%s' not existed", req.get_space_name().c_str());
-    }
-    auto id = findIter->second;
-    spaces_.erase(id);
-    cache_.erase(id);
-    roles_.erase(id);
-    spaceIndex_.erase(spaceName);
-    return Status::OK();
-}
-
-Status MetaCache::createTag(const meta::cpp2::CreateTagReq &req, TagID &tagId) {
-    folly::RWSpinLock::WriteHolder holder(lock_);
-    CHECK_SPACE_ID(req.get_space_id());
-    auto ifNotExists = req.get_if_not_exists();
-    auto tagName = req.get_tag_name();
-    auto &tagSchemas = spaceIter->second.tagSchemas_;
-    auto findIter = tagSchemas.find(tagName);
-    if (ifNotExists && findIter != tagSchemas.end()) {
-        tagId = findIter->second.get_tag_id();
-        return Status::OK();
-    }
-
-    tagId = ++id_;
-    meta::cpp2::TagItem tagItem;
-    tagItem.set_tag_id(tagId);
-    tagItem.set_tag_name(tagName);
-    tagItem.set_version(0);
-    tagItem.set_schema(req.get_schema());
-    tagSchemas[tagName] = std::move(tagItem);
-    return Status::OK();
-}
-
-StatusOr<meta::cpp2::Schema> MetaCache::getTag(const meta::cpp2::GetTagReq &req) {
-    folly::RWSpinLock::ReadHolder holder(lock_);
-    CHECK_SPACE_ID(req.get_space_id());
-    auto tagName = req.get_tag_name();
-    auto &tagSchemas = spaceIter->second.tagSchemas_;
-    auto findIter = tagSchemas.find(tagName);
-    if (findIter == tagSchemas.end()) {
-        LOG(ERROR) << "Tag name: " << tagName << " not found";
-        return Status::Error("Not found");
-    }
-    return findIter->second.get_schema();
-}
-
-StatusOr<std::vector<meta::cpp2::TagItem>>
-MetaCache::listTags(const meta::cpp2::ListTagsReq &req) {
-    folly::RWSpinLock::ReadHolder holder(lock_);
-    CHECK_SPACE_ID(req.get_space_id());
-    std::vector<meta::cpp2::TagItem> tagItems;
-    for (const auto& item : spaceIter->second.tagSchemas_) {
-        tagItems.emplace_back(item.second);
-    }
-    return tagItems;
-}
-
-Status MetaCache::dropTag(const meta::cpp2::DropTagReq& req) {
-    folly::RWSpinLock::WriteHolder holder(lock_);
-    CHECK_SPACE_ID(req.get_space_id());
-    auto ifExists = req.get_if_exists();
-    auto tagName = req.get_tag_name();
-    auto &tagSchemas = spaceIter->second.tagSchemas_;
-    auto findIter = tagSchemas.find(tagName);
-    if (ifExists && findIter == tagSchemas.end()) {
-        return Status::OK();
-    }
-    if (findIter == tagSchemas.end()) {
-        return Status::Error("Tag `%s' not existed", req.get_tag_name().c_str());
-    }
-
-    tagSchemas.erase(findIter);
-    return Status::OK();
-}
-
-Status MetaCache::createEdge(const meta::cpp2::CreateEdgeReq &req, EdgeType &edgeType) {
-    folly::RWSpinLock::WriteHolder holder(lock_);
-    CHECK_SPACE_ID(req.get_space_id());
-    auto ifNotExists = req.get_if_not_exists();
-    auto edgeName = req.get_edge_name();
-    auto &edgeSchemas = spaceIter->second.edgeSchemas_;
-    auto findIter = edgeSchemas.find(edgeName);
-    if (ifNotExists && findIter != edgeSchemas.end()) {
-        edgeType = findIter->second.get_edge_type();
-        return Status::OK();
-    }
-
-    edgeType = ++id_;
-    meta::cpp2::EdgeItem edgeItem;
-    edgeItem.set_edge_type(edgeType);
-    edgeItem.set_edge_name(edgeName);
-    edgeItem.set_version(0);
-    edgeItem.set_schema(req.get_schema());
-    edgeSchemas[edgeName] = std::move(edgeItem);
-    return Status::OK();
-}
-
-StatusOr<meta::cpp2::Schema> MetaCache::getEdge(const meta::cpp2::GetEdgeReq &req) {
-    folly::RWSpinLock::ReadHolder holder(lock_);
-    CHECK_SPACE_ID(req.get_space_id());
-    auto edgeName = req.get_edge_name();
-    auto &edgeSchemas = spaceIter->second.edgeSchemas_;
-    auto findIter = edgeSchemas.find(edgeName);
-    if (findIter == edgeSchemas.end()) {
-        return Status::Error("Not found");
-    }
-    return findIter->second.get_schema();
-}
-
-StatusOr<std::vector<meta::cpp2::EdgeItem>>
-MetaCache::listEdges(const meta::cpp2::ListEdgesReq &req) {
-    folly::RWSpinLock::ReadHolder holder(lock_);
-    CHECK_SPACE_ID(req.get_space_id());
-    std::vector<meta::cpp2::EdgeItem> edgeItems;
-    for (const auto& item : spaceIter->second.edgeSchemas_) {
-        edgeItems.emplace_back(item.second);
-    }
-    return edgeItems;
-}
-
-Status MetaCache::dropEdge(const meta::cpp2::DropEdgeReq& req) {
-    folly::RWSpinLock::WriteHolder holder(lock_);
-    CHECK_SPACE_ID(req.get_space_id());
-    auto ifExists = req.get_if_exists();
-    auto edgeName = req.get_edge_name();
-    auto &edgeSchemas = spaceIter->second.edgeSchemas_;
-    auto findIter = edgeSchemas.find(edgeName);
-    if (ifExists && findIter == edgeSchemas.end()) {
-        return Status::OK();
-    }
-
-    if (findIter == edgeSchemas.end()) {
-        return Status::Error("Edge `%s' not existed", req.get_edge_name().c_str());
-    }
-
-    edgeSchemas.erase(findIter);
-    return Status::OK();
-}
-
-Status MetaCache::AlterTag(const meta::cpp2::AlterTagReq &req) {
-    folly::RWSpinLock::WriteHolder holder(lock_);
-    CHECK_SPACE_ID(req.get_space_id());
-    auto tagName = req.get_tag_name();
-    auto &tagSchemas = spaceIter->second.tagSchemas_;
-    auto findIter = tagSchemas.find(tagName);
-    if (findIter == tagSchemas.end()) {
-        return Status::Error("Tag `%s' not existed", req.get_tag_name().c_str());
-    }
-
-    auto &schema = findIter->second.schema;
-    auto items = req.get_tag_items();
-    auto prop = req.get_schema_prop();
-    auto status = alterColumnDefs(schema, items);
-    if (!status.ok()) {
-        return status;
-    }
-    return alterSchemaProp(schema, prop);
-}
-
-Status MetaCache::AlterEdge(const meta::cpp2::AlterEdgeReq &req) {
-    folly::RWSpinLock::WriteHolder holder(lock_);
-    CHECK_SPACE_ID(req.get_space_id());
-    auto edgeName = req.get_edge_name();
-    auto &edgeSchemas = spaceIter->second.edgeSchemas_;
-    auto findIter = edgeSchemas.find(edgeName);
-    if (findIter == edgeSchemas.end()) {
-        return Status::Error("Edge `%s' not existed", req.get_edge_name().c_str());
-    }
-
-    auto &schema = findIter->second.schema;
-    auto items = req.get_edge_items();
-    auto prop = req.get_schema_prop();
-    auto status = alterColumnDefs(schema, items);
-    if (!status.ok()) {
-        return status;
-    }
-    return alterSchemaProp(schema, prop);
-}
-
-Status MetaCache::createTagIndex(const meta::cpp2::CreateTagIndexReq& req, IndexID &indexId) {
-    folly::RWSpinLock::WriteHolder holder(lock_);
-    CHECK_SPACE_ID(req.get_space_id());
-    auto ifNotExists = req.get_if_not_exists();
-    auto tagName = req.get_tag_name();
-    auto indexName = req.get_index_name();
-    auto &tagIndexes = spaceIter->second.tagIndexes_;
-    auto findIndexIter = tagIndexes.find(indexName);
-    if (ifNotExists && findIndexIter != tagIndexes.end()) {
-        indexId = findIndexIter->second.get_index_id();
-        return Status::OK();
-    }
-    if (findIndexIter != tagIndexes.end()) {
-        LOG(INFO) << "\tIndex already exist";
-        return Status::Error("Index already exist");
-    }
-
-    if (req.get_fields().empty()) {
-        return Status::Error("column is empty");
-    }
-
-    auto &tagSchemas = spaceIter->second.tagSchemas_;
-    auto findTagIter = tagSchemas.find(tagName);
-    if (findTagIter == tagSchemas.end()) {
-        return Status::Error("Tag Not found");
-    }
-    auto tagId = findTagIter->second.get_tag_id();
-
-    indexId = ++id_;
-    meta::cpp2::IndexItem indexItem;
-    meta::cpp2::SchemaID schemaID;
-    schemaID.set_tag_id(tagId);
-    indexItem.set_schema_id(std::move(schemaID));
-    indexItem.set_schema_name(tagName);
-    indexItem.set_index_id(indexId);
-    indexItem.set_index_name(indexName);
-
-    std::vector<meta::cpp2::ColumnDef> columns;
-    for (auto &field : req.get_fields()) {
-        meta::cpp2::ColumnDef column;
-        column.set_name(std::move(field));
-        columns.emplace_back(std::move(column));
-    }
-    indexItem.set_fields(std::move(columns));
-    tagIndexes[indexName] = std::move(indexItem);
-    return Status::OK();
-}
-
-Status MetaCache::createEdgeIndex(const meta::cpp2::CreateEdgeIndexReq& req, IndexID &indexId) {
-    folly::RWSpinLock::WriteHolder holder(lock_);
-    CHECK_SPACE_ID(req.get_space_id());
-    auto ifNotExists = req.get_if_not_exists();
-    auto edgeName = req.get_edge_name();
-    auto indexName = req.get_index_name();
-    auto &edgeIndexes = spaceIter->second.edgeIndexes_;
-    auto findIndexIter = edgeIndexes.find(indexName);
-    if (ifNotExists && findIndexIter != edgeIndexes.end()) {
-        indexId = findIndexIter->second.get_index_id();
-        return Status::OK();
-    }
-    if (findIndexIter != edgeIndexes.end()) {
-        return Status::Error("Index already exist");
-    }
-
-    if (req.get_fields().empty()) {
-        return Status::Error("column is empty");
-    }
-
-    auto &edgeSchemas = spaceIter->second.edgeSchemas_;
-    auto findEdgeIter = edgeSchemas.find(edgeName);
-    if (findEdgeIter == edgeSchemas.end()) {
-        return Status::Error("Edge Not found");
-    }
-    auto edgeType = findEdgeIter->second.get_edge_type();
-
-    indexId = ++id_;
-    meta::cpp2::IndexItem indexItem;
-    meta::cpp2::SchemaID schemaID;
-    schemaID.set_edge_type(edgeType);
-    indexItem.set_schema_id(std::move(schemaID));
-    indexItem.set_schema_name(edgeName);
-    indexItem.set_index_id(indexId);
-    indexItem.set_index_name(indexName);
-
-    std::vector<meta::cpp2::ColumnDef> columns;
-    for (auto &field : req.get_fields()) {
-        meta::cpp2::ColumnDef column;
-        column.set_name(std::move(field));
-        columns.emplace_back(std::move(column));
-    }
-    indexItem.set_fields(std::move(columns));
-    edgeIndexes[indexName] = std::move(indexItem);
-    return Status::OK();
-}
-
-Status MetaCache::dropTagIndex(const meta::cpp2::DropTagIndexReq&) {
-    return Status::OK();
-}
-
-Status MetaCache::dropTagIndex(const meta::cpp2::DropEdgeIndexReq&) {
-    return Status::OK();
-}
-
-Status MetaCache::regConfigs(const std::vector<meta::cpp2::ConfigItem>&) {
-    return Status::OK();
-}
-
-Status MetaCache::setConfig(const meta::cpp2::ConfigItem&) {
-    return Status::OK();
-}
-
-Status MetaCache::heartBeat(const meta::cpp2::HBReq& req) {
-    folly::RWSpinLock::WriteHolder holder(lock_);
-    auto host = req.get_host();
-    if (host.port == 0) {
-        return Status::OK();
-    }
-    hostSet_.emplace(std::move(host));
-    return Status::OK();
-}
-
-std::vector<meta::cpp2::HostItem> MetaCache::listHosts() {
-    folly::RWSpinLock::WriteHolder holder(lock_);
-    std::vector<meta::cpp2::HostItem> hosts;
-    for (auto& spaceIdIt : spaceIndex_) {
-        auto spaceName = spaceIdIt.first;
-        for (auto &h : hostSet_) {
-            meta::cpp2::HostItem host;
-            host.set_hostAddr(h);
-            host.set_status(meta::cpp2::HostStatus::ONLINE);
-            std::unordered_map<std::string, std::vector<PartitionID>> leaderParts;
-            std::vector<PartitionID> parts = {1};
-            leaderParts.emplace(spaceName, parts);
-            host.set_leader_parts(leaderParts);
-            host.set_all_parts(std::move(leaderParts));
-        }
-    }
-    return hosts;
-}
-
-std::unordered_map<PartitionID, std::vector<HostAddr>> MetaCache::getParts() {
-    folly::RWSpinLock::WriteHolder holder(lock_);
-    std::unordered_map<PartitionID, std::vector<HostAddr>> parts;
-    parts[1] = {};
-    for (auto &h : hostSet_) {
-        parts[1].emplace_back(h);
-    }
-    return parts;
-}
-
-////////////////////////////////////////////// ACL related mock ////////////////////////////////////
-meta::cpp2::ExecResp MetaCache::createUser(const meta::cpp2::CreateUserReq& req) {
-    meta::cpp2::ExecResp resp;
-    folly::RWSpinLock::WriteHolder wh(userLock_);
-    const auto user = users_.find(req.get_account());
-    if (user != users_.end()) {  // already exists
-        resp.set_code(req.get_if_not_exists() ?
-                    meta::cpp2::ErrorCode::SUCCEEDED :
-                    meta::cpp2::ErrorCode::E_EXISTED);
-        return resp;
-    }
-
-    auto result = users_.emplace(req.get_account(), UserInfo{req.get_encoded_pwd()});
-    resp.set_code(result.second ?
-                  meta::cpp2::ErrorCode::SUCCEEDED :
-                  meta::cpp2::ErrorCode::E_UNKNOWN);
-    return resp;
-}
-
-meta::cpp2::ExecResp MetaCache::dropUser(const meta::cpp2::DropUserReq& req) {
-    meta::cpp2::ExecResp resp;
-    folly::RWSpinLock::WriteHolder wh(userLock_);
-    const auto user = users_.find(req.get_account());
-    if (user == users_.end()) {  // not exists
-        resp.set_code(req.get_if_exists() ?
-                    meta::cpp2::ErrorCode::SUCCEEDED :
-                    meta::cpp2::ErrorCode::E_NOT_FOUND);
-        return resp;
-    }
-
-    auto result = users_.erase(req.get_account());
-    resp.set_code(result == 1 ?
-                  meta::cpp2::ErrorCode::SUCCEEDED :
-                  meta::cpp2::ErrorCode::E_UNKNOWN);
-    return resp;
-}
-
-meta::cpp2::ExecResp MetaCache::alterUser(const meta::cpp2::AlterUserReq& req) {
-    meta::cpp2::ExecResp resp;
-    folly::RWSpinLock::WriteHolder wh(userLock_);
-    auto user = users_.find(req.get_account());
-    if (user == users_.end()) {  // not exists
-        resp.set_code(meta::cpp2::ErrorCode::E_NOT_FOUND);
-        return resp;
-    }
-    user->second.password = req.get_encoded_pwd();
-    resp.set_code(meta::cpp2::ErrorCode::SUCCEEDED);
-    return resp;
-}
-
-meta::cpp2::ExecResp MetaCache::grantRole(const meta::cpp2::GrantRoleReq& req) {
-    meta::cpp2::ExecResp resp;
-    const auto &item = req.get_role_item();
-    {
-        folly::RWSpinLock::ReadHolder spaceRH(roleLock_);
-        folly::RWSpinLock::ReadHolder userRH(userLock_);
-        // find space
-        auto space = roles_.find(item.get_space_id());
-        if (space == roles_.end()) {
-            resp.set_code(meta::cpp2::ErrorCode::E_NOT_FOUND);
-            return resp;
-        }
-        // find user
-        auto user = users_.find(item.get_user_id());
-        if (user == users_.end()) {
-            resp.set_code(meta::cpp2::ErrorCode::E_NOT_FOUND);
-            return resp;
-        }
-    }
-    folly::RWSpinLock::WriteHolder roleWH(roleLock_);
-    // space
-    auto space = roles_.find(item.get_space_id());
-    // user
-    auto user = space->second.find(item.get_user_id());
-    if (user == space->second.end()) {
-        space->second.emplace(item.get_user_id(),
-                              std::unordered_set<meta::cpp2::RoleType>{item.get_role_type()});
-    } else {
-        user->second.emplace(item.get_role_type());
-    }
-    resp.set_code(meta::cpp2::ErrorCode::SUCCEEDED);
-    return resp;
-}
-
-meta::cpp2::ExecResp MetaCache::revokeRole(const meta::cpp2::RevokeRoleReq& req) {
-    meta::cpp2::ExecResp resp;
-    const auto &item = req.get_role_item();
-    folly::RWSpinLock::WriteHolder rolesWH(roleLock_);
-    // find space
-    auto space = roles_.find(item.get_space_id());
-    if (space == roles_.end()) {
-        resp.set_code(meta::cpp2::ErrorCode::E_NOT_FOUND);
-        return resp;
-    }
-    // find user
-    auto user = space->second.find(item.get_user_id());
-    if (user == space->second.end()) {
-        resp.set_code(meta::cpp2::ErrorCode::E_NOT_FOUND);
-        return resp;
-    }
-    // find role
-    auto role = user->second.find(item.get_role_type());
-    if (role == user->second.end()) {
-        resp.set_code(meta::cpp2::ErrorCode::E_NOT_FOUND);
-        return resp;
-    }
-    user->second.erase(item.get_role_type());
-    resp.set_code(meta::cpp2::ErrorCode::SUCCEEDED);
-    return resp;
-}
-
-meta::cpp2::ListUsersResp MetaCache::listUsers(const meta::cpp2::ListUsersReq&) {
-    meta::cpp2::ListUsersResp resp;
-    folly::RWSpinLock::ReadHolder rh(userLock_);
-    std::unordered_map<std::string, std::string> users;
-    for (const auto &user : users_) {
-        users.emplace(user.first, user.second.password);
-    }
-    resp.set_code(meta::cpp2::ErrorCode::SUCCEEDED);
-    resp.set_users(std::move(users));
-    return resp;
-}
-
-meta::cpp2::ListRolesResp MetaCache::listRoles(const meta::cpp2::ListRolesReq& req) {
-    meta::cpp2::ListRolesResp resp;
-    folly::RWSpinLock::ReadHolder rh(roleLock_);
-    std::vector<meta::cpp2::RoleItem> items;
-    const auto space = roles_.find(req.get_space_id());
-    if (space == roles_.end()) {
-        resp.set_code(meta::cpp2::ErrorCode::E_NOT_FOUND);
-        return resp;
-    }
-    for (const auto &user : space->second) {
-        for (const auto &role : user.second) {
-            meta::cpp2::RoleItem item;
-            item.set_space_id(space->first);
-            item.set_user_id(user.first);
-            item.set_role_type(role);
-            items.emplace_back(std::move(item));
-        }
-    }
-    resp.set_code(meta::cpp2::ErrorCode::SUCCEEDED);
-    resp.set_roles(std::move(items));
-    return resp;
-}
-
-meta::cpp2::ExecResp MetaCache::changePassword(const meta::cpp2::ChangePasswordReq& req) {
-    meta::cpp2::ExecResp resp;
-    folly::RWSpinLock::WriteHolder wh(userLock_);
-    auto user = users_.find(req.get_account());
-    if (user == users_.end()) {
-        resp.set_code(meta::cpp2::ErrorCode::E_NOT_FOUND);
-        return resp;
-    }
-    if (user->second.password != req.get_old_encoded_pwd()) {
-        resp.set_code(meta::cpp2::ErrorCode::E_INVALID_PASSWORD);
-    }
-    user->second.password = req.get_new_encoded_pwd();
-    resp.set_code(meta::cpp2::ErrorCode::SUCCEEDED);
-    return resp;
-}
-
-meta::cpp2::ListRolesResp MetaCache::getUserRoles(const meta::cpp2::GetUserRolesReq& req) {
-    meta::cpp2::ListRolesResp resp;
-    {
-        folly::RWSpinLock::ReadHolder userRH(userLock_);
-        // find user
-        auto user = users_.find(req.get_account());
-        if (user == users_.end()) {
-            resp.set_code(meta::cpp2::ErrorCode::E_NOT_FOUND);
-            return resp;
-        }
-    }
-
-    folly::RWSpinLock::ReadHolder roleRH(roleLock_);
-    std::vector<meta::cpp2::RoleItem> items;
-    for (const auto& space : roles_) {
-        const auto& user = space.second.find(req.get_account());
-        if (user != space.second.end()) {
-            for (const auto & role : user->second) {
-                meta::cpp2::RoleItem item;
-                item.set_space_id(space.first);
-                item.set_user_id(user->first);
-                item.set_role_type(role);
-                items.emplace_back(std::move(item));
-            }
-        }
-    }
-    resp.set_code(meta::cpp2::ErrorCode::SUCCEEDED);
-    resp.set_roles(std::move(items));
-    return resp;
-}
-
-ErrorOr<meta::cpp2::ErrorCode, int64_t> MetaCache::balanceSubmit(std::vector<HostAddr> dels) {
-    folly::RWSpinLock::ReadHolder rh(lock_);
-    for (const auto &job : balanceJobs_) {
-        if (job.second.status == meta::cpp2::TaskResult::IN_PROGRESS) {
-            return meta::cpp2::ErrorCode::E_BALANCER_RUNNING;
-        }
-    }
-    std::vector<BalanceTask> jobs;
-    for (const auto &spaceInfo : spaces_) {
-        for (PartitionID i = 1; i <= spaceInfo.second.get_properties().get_partition_num(); ++i) {
-            for (const auto &host : hostSet_) {  // Note mock partition in each host here
-                if (std::find(dels.begin(), dels.end(), host) != dels.end()) {
-                    continue;
-                }
-                jobs.emplace_back(BalanceTask{
-                    // mock
-                    spaceInfo.first,
-                    i,
-                    host,
-                    host,
-                    meta::cpp2::TaskResult::IN_PROGRESS,
-                });
-            }
-        }
-    }
-    auto jobId = incId();
-    balanceTasks_.emplace(jobId, std::move(jobs));
-    balanceJobs_.emplace(jobId, BalanceJob{
-        meta::cpp2::TaskResult::IN_PROGRESS,
-    });
-    return jobId;
-}
-
-ErrorOr<meta::cpp2::ErrorCode, int64_t> MetaCache::balanceStop() {
-    for (auto &job : balanceJobs_) {
-        if (job.second.status == meta::cpp2::TaskResult::IN_PROGRESS) {
-            job.second.status = meta::cpp2::TaskResult::FAILED;
-            return job.first;
-        }
-    }
-    return meta::cpp2::ErrorCode::E_NO_RUNNING_BALANCE_PLAN;
-}
-
-meta::cpp2::ErrorCode MetaCache::balanceLeaders() {
-    return meta::cpp2::ErrorCode::SUCCEEDED;
-}
-
-ErrorOr<meta::cpp2::ErrorCode, std::vector<meta::cpp2::BalanceTask>>
-MetaCache::showBalance(int64_t id) {
-    const auto job = balanceTasks_.find(id);
-    if (job == balanceTasks_.end()) {
-        return meta::cpp2::ErrorCode::E_NOT_FOUND;
-    }
-    std::vector<meta::cpp2::BalanceTask> result;
-    result.reserve(job->second.size());
-    for (const auto &task : job->second) {
-        meta::cpp2::BalanceTask taskInfo;
-        std::stringstream idStr;
-        idStr << "[";
-        idStr << id << ", ";
-        idStr << task.space << ":" << task.part << ", ";
-        idStr << task.from << "->" << task.to;
-        idStr << "]";
-        taskInfo.set_id(idStr.str());
-        taskInfo.set_result(task.status);
-        result.emplace_back(std::move(taskInfo));
-    }
-    return result;
-}
-
-ErrorOr<meta::cpp2::ErrorCode, meta::cpp2::AdminJobResult>
-MetaCache::runAdminJob(const meta::cpp2::AdminJobReq& req) {
-    meta::cpp2::AdminJobResult result;
-    switch (req.get_op()) {
-        case meta::cpp2::AdminJobOp::ADD: {
-            folly::RWSpinLock::WriteHolder wh(jobLock_);
-            auto jobId = incId();
-            jobs_.emplace(jobId, JobDesc{
-                req.get_cmd(),
-                req.get_paras(),
-                meta::cpp2::JobStatus::QUEUE,
-                0,
-                0
-            });
-            std::vector<TaskDesc> descs;
-            int32_t iTask = 0;
-            for (const auto &host : hostSet_) {
-                descs.reserve(hostSet_.size());
-                descs.emplace_back(TaskDesc{
-                    ++iTask,
-                    host,
-                    meta::cpp2::JobStatus::QUEUE,
-                    0,
-                    0
-                });
-            }
-            tasks_.emplace(jobId, std::move(descs));
-            result.set_job_id(jobId);
-            return result;
-        }
-        case meta::cpp2::AdminJobOp::RECOVER: {
-            uint32_t jobNum = 0;
-            folly::RWSpinLock::WriteHolder wh(jobLock_);
-            for (auto &job : jobs_) {
-                if (job.second.status_ == meta::cpp2::JobStatus::FAILED) {
-                    job.second.status_ = meta::cpp2::JobStatus::QUEUE;
-                    ++jobNum;
-                }
-            }
-            result.set_recovered_job_num(jobNum);
-            return result;
-        }
-        case meta::cpp2::AdminJobOp::SHOW: {
-            folly::RWSpinLock::ReadHolder rh(jobLock_);
-            auto ret = checkJobId(req);
-            if (!ok(ret)) {
-                return error(ret);
-            }
-            auto job = value(ret);
-            result.set_job_id(job->first);
-            std::vector<meta::cpp2::JobDesc> jobsDesc;
-            meta::cpp2::JobDesc jobDesc;
-            jobDesc.set_id(job->first);
-            jobDesc.set_cmd(job->second.cmd_);
-            jobDesc.set_status(job->second.status_);
-            jobDesc.set_start_time(job->second.startTime_);
-            jobDesc.set_stop_time(job->second.stopTime_);
-            jobsDesc.emplace_back(std::move(jobDesc));
-            result.set_job_desc(std::move(jobsDesc));
-
-            // tasks
-            const auto tasks = tasks_.find(job->first);
-            if (tasks == tasks_.end()) {
-                LOG(FATAL) << "Impossible not find tasks of job id " << job->first;
-            }
-            std::vector<meta::cpp2::TaskDesc> tasksDesc;
-            for (const auto &task : tasks->second) {
-                meta::cpp2::TaskDesc taskDesc;
-                taskDesc.set_job_id(job->first);
-                taskDesc.set_task_id(task.iTask_);
-                taskDesc.set_host(task.dest_);
-                taskDesc.set_status(task.status_);
-                taskDesc.set_start_time(task.startTime_);
-                taskDesc.set_stop_time(task.stopTime_);
-                tasksDesc.emplace_back(std::move(taskDesc));
-            }
-            result.set_task_desc(std::move(tasksDesc));
-            return result;
-        }
-        case meta::cpp2::AdminJobOp::SHOW_All: {
-            std::vector<meta::cpp2::JobDesc> jobsDesc;
-            folly::RWSpinLock::ReadHolder rh(jobLock_);
-            for (const auto &job : jobs_) {
-                meta::cpp2::JobDesc jobDesc;
-                jobDesc.set_id(job.first);
-                jobDesc.set_cmd(job.second.cmd_);
-                jobDesc.set_status(job.second.status_);
-                jobDesc.set_start_time(job.second.startTime_);
-                jobDesc.set_stop_time(job.second.stopTime_);
-                jobsDesc.emplace_back(std::move(jobDesc));
-            }
-            result.set_job_desc(std::move(jobsDesc));
-            return result;
-        }
-        case meta::cpp2::AdminJobOp::STOP: {
-            folly::RWSpinLock::WriteHolder wh(jobLock_);
-            auto ret = checkJobId(req);
-            if (!ok(ret)) {
-                return error(ret);
-            }
-            auto job = value(ret);
-            if (job->second.status_ != meta::cpp2::JobStatus::QUEUE &&
-                job->second.status_ != meta::cpp2::JobStatus::RUNNING) {
-                return meta::cpp2::ErrorCode::E_CONFLICT;
-            }
-            job->second.status_ = meta::cpp2::JobStatus::STOPPED;
-            return result;
-        }
-    }
-    return meta::cpp2::ErrorCode::E_INVALID_PARM;
-}
-
-Status MetaCache::alterColumnDefs(meta::cpp2::Schema &schema,
-                                  const std::vector<meta::cpp2::AlterSchemaItem> &items) {
-    std::vector<meta::cpp2::ColumnDef> columns = schema.columns;
-    for (auto& item : items) {
-        auto& cols = item.get_schema().get_columns();
-        auto op = item.op;
-        for (auto& col : cols) {
-            switch (op) {
-                case meta::cpp2::AlterSchemaOp::ADD:
-                    for (auto it = schema.columns.begin(); it != schema.columns.end(); ++it) {
-                        if (it->get_name() == col.get_name()) {
-                            return Status::Error("Column existing: `%s'", col.get_name().c_str());
-                        }
-                    }
-                    columns.emplace_back(col);
-                    break;
-                case meta::cpp2::AlterSchemaOp::CHANGE: {
-                    bool isOk = false;
-                    for (auto it = columns.begin(); it != columns.end(); ++it) {
-                        auto colName = col.get_name();
-                        if (colName == it->get_name()) {
-                            // If this col is ttl_col, change not allowed
-                            if (schema.schema_prop.__isset.ttl_col &&
-                                (*schema.schema_prop.get_ttl_col() == colName)) {
-                                return Status::Error("Column: `%s' as ttl_col, change not allowed",
-                                                     colName.c_str());
-                            }
-                            *it = col;
-                            isOk = true;
-                            break;
-                        }
-                    }
-                    if (!isOk) {
-                        return Status::Error("Column not found: `%s'", col.get_name().c_str());
-                    }
-                    break;
-                }
-                case meta::cpp2::AlterSchemaOp::DROP: {
-                    bool isOk = false;
-                    for (auto it = columns.begin(); it != columns.end(); ++it) {
-                        auto colName = col.get_name();
-                        if (colName == it->get_name()) {
-                            if (schema.schema_prop.__isset.ttl_col &&
-                                (*schema.schema_prop.get_ttl_col() == colName)) {
-                                schema.schema_prop.set_ttl_duration(0);
-                                schema.schema_prop.set_ttl_col("");
-                            }
-                            columns.erase(it);
-                            isOk = true;
-                            break;
-                        }
-                    }
-                    if (!isOk) {
-                        return Status::Error("Column not found: `%s'", col.get_name().c_str());
-                    }
-                    break;
-                }
-                default:
-                    return Status::Error("Alter schema operator not supported");
-            }
-        }
-    }
-    schema.columns = std::move(columns);
-    return Status::OK();
-}
-
-Status MetaCache::alterSchemaProp(meta::cpp2::Schema &schema,
-                                  const meta::cpp2::SchemaProp &alterSchemaProp) {
-    meta::cpp2::SchemaProp schemaProp = schema.get_schema_prop();
-    if (alterSchemaProp.__isset.ttl_duration) {
-        // Graph check  <=0 to = 0
-        schemaProp.set_ttl_duration(*alterSchemaProp.get_ttl_duration());
-    }
-    if (alterSchemaProp.__isset.ttl_col) {
-        auto ttlCol = *alterSchemaProp.get_ttl_col();
-        // Disable ttl, ttl_col is empty, ttl_duration is 0
-        if (ttlCol.empty()) {
-            schemaProp.set_ttl_duration(0);
-            schemaProp.set_ttl_col(ttlCol);
-            return Status::OK();
-        }
-
-        auto existed = false;
-        for (auto& col : schema.columns) {
-            if (col.get_name() == ttlCol) {
-                // Only integer and timestamp columns can be used as ttl_col
-                if (col.type.type != meta::cpp2::PropertyType::INT32 &&
-                    col.type.type != meta::cpp2::PropertyType::INT64 &&
-                    col.type.type != meta::cpp2::PropertyType::TIMESTAMP) {
-                    return Status::Error("TTL column type illegal");
-                }
-                existed = true;
-                schemaProp.set_ttl_col(ttlCol);
-                break;
-            }
-        }
-
-        if (!existed) {
-            return Status::Error("TTL column not found: `%s'", ttlCol.c_str());
-        }
-    }
-
-    // Disable implicit TTL mode
-    if ((schemaProp.get_ttl_duration() && (*schemaProp.get_ttl_duration() != 0)) &&
-        (!schemaProp.get_ttl_col() || (schemaProp.get_ttl_col() &&
-                                       schemaProp.get_ttl_col()->empty()))) {
-        return Status::Error("Implicit ttl_col not support");
-    }
-
-    schema.set_schema_prop(std::move(schemaProp));
-    return Status::OK();
-}
-
-Status MetaCache::createSnapshot() {
-    folly::RWSpinLock::WriteHolder holder(lock_);
-    if (cache_.empty()) {
-        return Status::OK();
-    }
-    meta::cpp2::Snapshot snapshot;
-    char ch[60];
-    std::time_t t = std::time(nullptr);
-    std::strftime(ch, sizeof(ch), "%Y_%m_%d_%H_%M_%S", localtime(&t));
-    auto snapshotName = folly::stringPrintf("SNAPSHOT_%s", ch);
-    snapshot.set_name(snapshotName);
-    snapshot.set_status(meta::cpp2::SnapshotStatus::VALID);
-    DCHECK(!hostSet_.empty());
-    snapshot.set_hosts(network::NetworkUtils::toHostsStr(
-            std::vector<HostAddr>(hostSet_.begin(), hostSet_.end())));
-    snapshots_[snapshotName] = std::move(snapshot);
-    return Status::OK();
-}
-
-Status MetaCache::dropSnapshot(const meta::cpp2::DropSnapshotReq& req) {
-    folly::RWSpinLock::WriteHolder holder(lock_);
-    auto name = req.get_name();
-    auto find = snapshots_.find(name);
-    if (find == snapshots_.end()) {
-        return Status::Error("`%s' is nonexistent", name.c_str());
-    }
-    snapshots_.erase(find);
-    return Status::OK();
-}
-
-StatusOr<std::vector<meta::cpp2::Snapshot>> MetaCache::listSnapshots() {
-    folly::RWSpinLock::ReadHolder holder(lock_);
-    std::vector<meta::cpp2::Snapshot> snapshots;
-    for (auto& snapshot : snapshots_) {
-        snapshots.emplace_back(snapshot.second);
-    }
-    return snapshots;
-}
-
-}  // namespace graph
-}  // namespace nebula
diff --git a/src/mock/MetaCache.h b/src/mock/MetaCache.h
deleted file mode 100644
index b99c121f802cbd4f72e53e11f5a56f1ca88eeb3b..0000000000000000000000000000000000000000
--- a/src/mock/MetaCache.h
+++ /dev/null
@@ -1,247 +0,0 @@
-/* Copyright (c) 2020 vesoft inc. All rights reserved.
- *
- * This source code is licensed under Apache 2.0 License,
- * attached with Common Clause Condition 1.0, found in the LICENSES directory.
- */
-
-#ifndef EXECUTOR_METACACHE_H_
-#define EXECUTOR_METACACHE_H_
-
-#include "common/base/Base.h"
-#include "common/base/StatusOr.h"
-#include "common/base/ErrorOr.h"
-#include "common/interface/gen-cpp2/meta_types.h"
-
-namespace nebula {
-namespace graph {
-
-class MetaCache final {
-public:
-    static MetaCache& instance() {
-        static MetaCache instance;
-        return instance;
-    }
-
-    Status createSpace(const meta::cpp2::CreateSpaceReq &req, GraphSpaceID &spaceId);
-
-    StatusOr<meta::cpp2::SpaceItem> getSpace(const meta::cpp2::GetSpaceReq &req);
-
-    StatusOr<std::vector<meta::cpp2::IdName>> listSpaces();
-
-    Status dropSpace(const meta::cpp2::DropSpaceReq &req);
-
-    Status createTag(const meta::cpp2::CreateTagReq &req, TagID &tagId);
-
-    StatusOr<meta::cpp2::Schema> getTag(const meta::cpp2::GetTagReq &req);
-
-    StatusOr<std::vector<meta::cpp2::TagItem>> listTags(const meta::cpp2::ListTagsReq &req);
-
-    Status createEdge(const meta::cpp2::CreateEdgeReq &req, EdgeType &edgeType);
-
-    StatusOr<meta::cpp2::Schema> getEdge(const meta::cpp2::GetEdgeReq &req);
-
-    StatusOr<std::vector<meta::cpp2::EdgeItem>> listEdges(const meta::cpp2::ListEdgesReq &req);
-
-    Status dropTag(const meta::cpp2::DropTagReq &req);
-
-    Status dropEdge(const meta::cpp2::DropEdgeReq &req);
-
-    Status AlterTag(const meta::cpp2::AlterTagReq &req);
-
-    Status AlterEdge(const meta::cpp2::AlterEdgeReq &req);
-
-    Status createTagIndex(const meta::cpp2::CreateTagIndexReq &req, IndexID &indexId);
-
-    Status createEdgeIndex(const meta::cpp2::CreateEdgeIndexReq &req, IndexID &indexId);
-
-    Status dropTagIndex(const meta::cpp2::DropTagIndexReq &req);
-
-    Status dropTagIndex(const meta::cpp2::DropEdgeIndexReq &req);
-
-    Status regConfigs(const std::vector<meta::cpp2::ConfigItem> &items);
-
-    Status setConfig(const meta::cpp2::ConfigItem &req);
-
-    Status heartBeat(const meta::cpp2::HBReq &req);
-
-    std::vector<meta::cpp2::HostItem> listHosts();
-
-    std::unordered_map<PartitionID, std::vector<HostAddr>> getParts();
-
-////////////////////////////////////////////// ACL related mock ////////////////////////////////////
-    meta::cpp2::ExecResp createUser(const meta::cpp2::CreateUserReq& req);
-
-    meta::cpp2::ExecResp dropUser(const meta::cpp2::DropUserReq& req);
-
-    meta::cpp2::ExecResp alterUser(const meta::cpp2::AlterUserReq& req);
-
-    meta::cpp2::ExecResp grantRole(const meta::cpp2::GrantRoleReq& req);
-
-    meta::cpp2::ExecResp revokeRole(const meta::cpp2::RevokeRoleReq& req);
-
-    meta::cpp2::ListUsersResp listUsers(const meta::cpp2::ListUsersReq& req);
-
-    meta::cpp2::ListRolesResp listRoles(const meta::cpp2::ListRolesReq& req);
-
-    meta::cpp2::ExecResp changePassword(const meta::cpp2::ChangePasswordReq& req);
-
-    meta::cpp2::ListRolesResp getUserRoles(const meta::cpp2::GetUserRolesReq& req);
-
-    ErrorOr<meta::cpp2::ErrorCode, int64_t> balanceSubmit(std::vector<HostAddr> dels);
-    ErrorOr<meta::cpp2::ErrorCode, int64_t> balanceStop();
-    meta::cpp2::ErrorCode                   balanceLeaders();
-    ErrorOr<meta::cpp2::ErrorCode, std::vector<meta::cpp2::BalanceTask>>
-    showBalance(int64_t id);
-
-    ErrorOr<meta::cpp2::ErrorCode, meta::cpp2::AdminJobResult>
-    runAdminJob(const meta::cpp2::AdminJobReq& req);
-
-    Status createSnapshot();
-
-    Status dropSnapshot(const meta::cpp2::DropSnapshotReq& req);
-
-    StatusOr<std::vector<meta::cpp2::Snapshot>> listSnapshots();
-
-private:
-    MetaCache() = default;
-
-    int64_t incId() {
-        return ++id_;
-    }
-
-    Status alterColumnDefs(meta::cpp2::Schema &schema,
-                           const std::vector<meta::cpp2::AlterSchemaItem> &items);
-
-    Status alterSchemaProp(meta::cpp2::Schema &schema,
-                           const meta::cpp2::SchemaProp &alterSchemaProp);
-
-
-private:
-    enum class EntryType : int8_t {
-        SPACE       = 0x01,
-        TAG         = 0x02,
-        EDGE        = 0x03,
-        INDEX       = 0x04,
-        CONFIG      = 0x05,
-    };
-
-    template<class T>
-    std::enable_if_t<std::is_integral<T>::value, meta::cpp2::ID>
-    to(T id, EntryType type) {
-        meta::cpp2::ID thriftID;
-        switch (type) {
-            case EntryType::SPACE:
-                thriftID.set_space_id(static_cast<GraphSpaceID>(id));
-                break;
-            case EntryType::TAG:
-                thriftID.set_tag_id(static_cast<TagID>(id));
-                break;
-            case EntryType::EDGE:
-                thriftID.set_edge_type(static_cast<EdgeType>(id));
-                break;
-            case EntryType::CONFIG:
-                break;
-            case EntryType::INDEX:
-                thriftID.set_index_id(static_cast<IndexID>(id));
-                break;
-            }
-        return thriftID;
-    }
-
-private:
-    using HostMap = std::unordered_map<std::pair<GraphSpaceID, PartitionID>, HostAddr>;
-    using TagSchemas = std::unordered_map<std::string, meta::cpp2::TagItem>;
-    using EdgeSchemas = std::unordered_map<std::string, meta::cpp2::EdgeItem>;
-    using Indexes = std::unordered_map<std::string, meta::cpp2::IndexItem>;
-
-    struct SpaceInfoCache {
-        TagSchemas              tagSchemas_;
-        EdgeSchemas             edgeSchemas_;
-        Indexes                 tagIndexes_;
-        Indexes                 edgeIndexes_;
-    };
-
-    std::unordered_set<HostAddr>                             hostSet_;
-    std::unordered_map<std::string, GraphSpaceID>            spaceIndex_;
-    std::unordered_map<GraphSpaceID, SpaceInfoCache>         cache_;
-    std::unordered_map<GraphSpaceID, meta::cpp2::SpaceItem>  spaces_;
-    int64_t                                                  id_{0};
-    std::unordered_map<std::string, meta::cpp2::Snapshot>    snapshots_;
-    mutable folly::RWSpinLock                                lock_;
-
-///////////////////////////////////////////// ACL cache ////////////////////////////////////////////
-    struct UserInfo {
-        std::string password;
-        // revserved
-    };
-
-    // username -> UserInfo
-    std::unordered_map<std::string, UserInfo>  users_;
-    mutable folly::RWSpinLock                  userLock_;
-    // authority
-    using UserRoles =
-        std::unordered_map<std::string/*user*/, std::unordered_set<meta::cpp2::RoleType>>;
-    std::unordered_map<GraphSpaceID, UserRoles> roles_;
-    mutable folly::RWSpinLock                   roleLock_;
-
-////////////////////////////////////////////// Balance /////////////////////////////////////////////
-    struct BalanceTask {
-        GraphSpaceID           space;
-        PartitionID            part;
-        HostAddr               from;
-        HostAddr               to;
-        meta::cpp2::TaskResult status;
-    };
-    struct BalanceJob {
-        meta::cpp2::TaskResult status;
-    };
-    std::unordered_map<int64_t, std::vector<BalanceTask>> balanceTasks_;
-    std::unordered_map<int64_t, BalanceJob>               balanceJobs_;
-
-////////////////////////////////////////////// Job /////////////////////////////////////////////////
-    struct JobDesc {
-        meta::cpp2::AdminCmd            cmd_;  // compact, flush ...
-        std::vector<std::string>        paras_;
-        meta::cpp2::JobStatus           status_;
-        int64_t                         startTime_;
-        int64_t                         stopTime_;
-    };
-    struct TaskDesc {
-        int32_t                         iTask_;
-        nebula::HostAddr                dest_;
-        meta::cpp2::JobStatus           status_;
-        int64_t                         startTime_;
-        int64_t                         stopTime_;
-    };
-
-    ErrorOr<meta::cpp2::ErrorCode, std::unordered_map<int64_t, JobDesc>::iterator>
-    checkJobId(const meta::cpp2::AdminJobReq& req) {
-        const auto &params = req.get_paras();
-        if (params.empty()) {
-            return meta::cpp2::ErrorCode::E_INVALID_PARM;
-        }
-        int64_t jobId;
-        try {
-            jobId = folly::to<int64_t>(params.front());
-        } catch (std::exception &e) {
-            LOG(ERROR) << e.what();
-            return meta::cpp2::ErrorCode::E_INVALID_PARM;
-        }
-        const auto job = jobs_.find(jobId);
-        if (job == jobs_.end()) {
-            return meta::cpp2::ErrorCode::E_INVALID_PARM;
-        }
-        return job;
-    }
-
-
-    mutable folly::RWSpinLock                          jobLock_;
-    // jobId => jobs
-    std::unordered_map<int64_t, JobDesc>               jobs_;
-    // jobId => tasks
-    std::unordered_map<int64_t, std::vector<TaskDesc>> tasks_;
-};
-
-}  // namespace graph
-}  // namespace nebula
-#endif  // EXECUTOR_METACACHE_H_
diff --git a/src/mock/MockMetaServiceHandler.cpp b/src/mock/MockMetaServiceHandler.cpp
deleted file mode 100644
index 74d4b4e055c891d9724559f4596a96ba6fb9b345..0000000000000000000000000000000000000000
--- a/src/mock/MockMetaServiceHandler.cpp
+++ /dev/null
@@ -1,654 +0,0 @@
-/* Copyright (c) 2020 vesoft inc. All rights reserved.
- *
- * This source code is licensed under Apache 2.0 License,
- * attached with Common Clause Condition 1.0, found in the LICENSES directory.
- */
-
-#include "mock/MockMetaServiceHandler.h"
-
-#include "common/time/WallClock.h"
-#include "mock/MetaCache.h"
-
-namespace nebula {
-namespace graph {
-
-#define RETURN_SUCCESSED() \
-    folly::Promise<meta::cpp2::ExecResp> promise; \
-    auto future = promise.getFuture(); \
-    meta::cpp2::ExecResp resp; \
-    resp.set_code(meta::cpp2::ErrorCode::SUCCEEDED); \
-    promise.setValue(std::move(resp)); \
-    return future;
-
-folly::Future<meta::cpp2::ExecResp>
-MockMetaServiceHandler::future_createSpace(const meta::cpp2::CreateSpaceReq& req) {
-    folly::Promise<meta::cpp2::ExecResp> promise;
-    auto future = promise.getFuture();
-    meta::cpp2::ExecResp resp;
-    GraphSpaceID spaceId;
-    auto status = MetaCache::instance().createSpace(req, spaceId);
-    if (!status.ok()) {
-        resp.set_code(meta::cpp2::ErrorCode::E_UNKNOWN);
-        promise.setValue(std::move(resp));
-        return future;
-    }
-    resp.set_code(meta::cpp2::ErrorCode::SUCCEEDED);
-    meta::cpp2::ID id;
-    id.set_space_id(spaceId);
-    resp.set_id(id);
-    promise.setValue(std::move(resp));
-    return future;
-}
-
-folly::Future<meta::cpp2::ExecResp>
-MockMetaServiceHandler::future_dropSpace(const meta::cpp2::DropSpaceReq &req) {
-    folly::Promise<meta::cpp2::ExecResp> promise;
-    auto future = promise.getFuture();
-    meta::cpp2::ExecResp resp;
-    auto status = MetaCache::instance().dropSpace(req);
-    if (!status.ok()) {
-        resp.set_code(meta::cpp2::ErrorCode::E_UNKNOWN);
-        promise.setValue(std::move(resp));
-        return future;
-    }
-    resp.set_code(meta::cpp2::ErrorCode::SUCCEEDED);
-    promise.setValue(std::move(resp));
-    return future;
-}
-
-folly::Future<meta::cpp2::ListSpacesResp>
-MockMetaServiceHandler::future_listSpaces(const meta::cpp2::ListSpacesReq&) {
-    folly::Promise<meta::cpp2::ListSpacesResp> promise;
-    auto future = promise.getFuture();
-    auto status = MetaCache::instance().listSpaces();
-    meta::cpp2::ListSpacesResp resp;
-    if (!status.ok()) {
-        resp.set_code(meta::cpp2::ErrorCode::E_UNKNOWN);
-        promise.setValue(std::move(resp));
-        return future;
-    }
-    resp.set_code(meta::cpp2::ErrorCode::SUCCEEDED);
-    resp.set_spaces(std::move(status).value());
-    promise.setValue(std::move(resp));
-    return future;
-}
-
-folly::Future<meta::cpp2::AdminJobResp>
-MockMetaServiceHandler::future_runAdminJob(const meta::cpp2::AdminJobReq& req) {
-    meta::cpp2::AdminJobResp resp;
-    auto result = MetaCache::instance().runAdminJob(req);
-    if (!ok(result)) {
-        resp.set_code(result.left());
-        return resp;
-    }
-    resp.set_code(meta::cpp2::ErrorCode::SUCCEEDED);
-    resp.set_result(std::move(result).right());
-    return resp;
-}
-
-folly::Future<meta::cpp2::GetSpaceResp>
-MockMetaServiceHandler::future_getSpace(const meta::cpp2::GetSpaceReq& req) {
-    folly::Promise<meta::cpp2::GetSpaceResp> promise;
-    auto future = promise.getFuture();
-    auto status = MetaCache::instance().getSpace(req);
-    meta::cpp2::GetSpaceResp resp;
-    if (!status.ok()) {
-        resp.set_code(meta::cpp2::ErrorCode::E_UNKNOWN);
-        promise.setValue(std::move(resp));
-        return future;
-    }
-    auto spaceInfo = std::move(status).value();
-    resp.set_code(meta::cpp2::ErrorCode::SUCCEEDED);
-    resp.set_item(std::move(spaceInfo));
-    promise.setValue(std::move(resp));
-    return future;
-}
-
-folly::Future<meta::cpp2::ListHostsResp>
-MockMetaServiceHandler::future_listHosts(const meta::cpp2::ListHostsReq&) {
-    folly::Promise<meta::cpp2::ListHostsResp> promise;
-    auto future = promise.getFuture();
-    meta::cpp2::ListHostsResp resp;
-    resp.set_code(meta::cpp2::ErrorCode::SUCCEEDED);
-    resp.set_hosts(MetaCache::instance().listHosts());
-    promise.setValue(resp);
-    return future;
-}
-
-folly::Future<meta::cpp2::ListPartsResp>
-MockMetaServiceHandler::future_listParts(const meta::cpp2::ListPartsReq&) {
-    folly::Promise<meta::cpp2::ListPartsResp> promise;
-    auto future = promise.getFuture();
-    meta::cpp2::ListPartsResp resp;
-    resp.set_code(meta::cpp2::ErrorCode::SUCCEEDED);
-    promise.setValue(std::move(resp));
-    return future;
-}
-
-folly::Future<meta::cpp2::GetPartsAllocResp>
-MockMetaServiceHandler::future_getPartsAlloc(const meta::cpp2::GetPartsAllocReq&) {
-    folly::Promise<meta::cpp2::GetPartsAllocResp> promise;
-    auto future = promise.getFuture();
-    meta::cpp2::GetPartsAllocResp resp;
-    resp.set_code(meta::cpp2::ErrorCode::SUCCEEDED);
-    resp.set_parts(MetaCache::instance().getParts());
-    promise.setValue(resp);
-    return future;
-}
-
-folly::Future<meta::cpp2::ExecResp>
-MockMetaServiceHandler::future_multiPut(const meta::cpp2::MultiPutReq&) {
-    RETURN_SUCCESSED();
-}
-
-folly::Future<meta::cpp2::GetResp>
-MockMetaServiceHandler::future_get(const meta::cpp2::GetReq&) {
-    folly::Promise<meta::cpp2::GetResp> promise;
-    auto future = promise.getFuture();
-    meta::cpp2::GetResp resp;
-    resp.set_code(meta::cpp2::ErrorCode::SUCCEEDED);
-    promise.setValue(std::move(resp));
-    return future;
-}
-
-folly::Future<meta::cpp2::MultiGetResp>
-MockMetaServiceHandler::future_multiGet(const meta::cpp2::MultiGetReq&) {
-    folly::Promise<meta::cpp2::MultiGetResp> promise;
-    auto future = promise.getFuture();
-    meta::cpp2::MultiGetResp resp;
-    resp.set_code(meta::cpp2::ErrorCode::SUCCEEDED);
-    promise.setValue(std::move(resp));
-    return future;
-}
-
-folly::Future<meta::cpp2::ScanResp>
-MockMetaServiceHandler::future_scan(const meta::cpp2::ScanReq&) {
-    folly::Promise<meta::cpp2::ScanResp> promise;
-    auto future = promise.getFuture();
-    meta::cpp2::ScanResp resp;
-    resp.set_code(meta::cpp2::ErrorCode::SUCCEEDED);
-    promise.setValue(std::move(resp));
-    return future;
-}
-
-folly::Future<meta::cpp2::ExecResp>
-MockMetaServiceHandler::future_remove(const meta::cpp2::RemoveReq&) {
-    RETURN_SUCCESSED();
-}
-
-folly::Future<meta::cpp2::ExecResp>
-MockMetaServiceHandler::future_removeRange(const meta::cpp2::RemoveRangeReq&) {
-    RETURN_SUCCESSED();
-}
-
-folly::Future<meta::cpp2::ExecResp>
-MockMetaServiceHandler::future_createTag(const meta::cpp2::CreateTagReq& req) {
-    folly::Promise<meta::cpp2::ExecResp> promise;
-    auto future = promise.getFuture();
-    meta::cpp2::ExecResp resp;
-    TagID tagId = 0;
-    auto status = MetaCache::instance().createTag(req, tagId);
-    if (!status.ok()) {
-        resp.set_code(meta::cpp2::ErrorCode::E_UNKNOWN);
-        promise.setValue(std::move(resp));
-        return future;
-    }
-    resp.set_code(meta::cpp2::ErrorCode::SUCCEEDED);
-    meta::cpp2::ID id;
-    id.set_tag_id(tagId);
-    resp.set_id(std::move(id));
-    promise.setValue(std::move(resp));
-    return future;
-}
-
-folly::Future<meta::cpp2::ExecResp>
-MockMetaServiceHandler::future_alterTag(const meta::cpp2::AlterTagReq &req) {
-    folly::Promise<meta::cpp2::ExecResp> promise;
-    auto future = promise.getFuture();
-    meta::cpp2::ExecResp resp;
-    auto status = MetaCache::instance().AlterTag(req);
-    if (!status.ok()) {
-        LOG(ERROR) << status;
-        resp.set_code(meta::cpp2::ErrorCode::E_UNKNOWN);
-        promise.setValue(std::move(resp));
-        return future;
-    }
-    resp.set_code(meta::cpp2::ErrorCode::SUCCEEDED);
-    promise.setValue(std::move(resp));
-    return future;
-}
-
-folly::Future<meta::cpp2::ExecResp>
-MockMetaServiceHandler::future_dropTag(const meta::cpp2::DropTagReq& req) {
-    folly::Promise<meta::cpp2::ExecResp> promise;
-    auto future = promise.getFuture();
-    meta::cpp2::ExecResp resp;
-    auto status = MetaCache::instance().dropTag(req);
-    if (!status.ok()) {
-        resp.set_code(meta::cpp2::ErrorCode::E_UNKNOWN);
-        promise.setValue(std::move(resp));
-        return future;
-    }
-    resp.set_code(meta::cpp2::ErrorCode::SUCCEEDED);
-    promise.setValue(std::move(resp));
-    return future;
-}
-
-folly::Future<meta::cpp2::GetTagResp>
-MockMetaServiceHandler::future_getTag(const meta::cpp2::GetTagReq& req) {
-    folly::Promise<meta::cpp2::GetTagResp> promise;
-    auto future = promise.getFuture();
-    meta::cpp2::GetTagResp resp;
-    auto status = MetaCache::instance().getTag(req);
-    if (!status.ok()) {
-        resp.set_code(meta::cpp2::ErrorCode::E_UNKNOWN);
-        promise.setValue(std::move(resp));
-        return future;
-    }
-    resp.set_code(meta::cpp2::ErrorCode::SUCCEEDED);
-    resp.set_schema(std::move(status).value());
-    promise.setValue(std::move(resp));
-    return future;
-}
-
-folly::Future<meta::cpp2::ListTagsResp>
-MockMetaServiceHandler::future_listTags(const meta::cpp2::ListTagsReq& req) {
-    folly::Promise<meta::cpp2::ListTagsResp> promise;
-    auto future = promise.getFuture();
-    auto status = MetaCache::instance().listTags(req);
-    meta::cpp2::ListTagsResp resp;
-    if (!status.ok()) {
-        resp.set_code(meta::cpp2::ErrorCode::E_UNKNOWN);
-        promise.setValue(std::move(resp));
-        return future;
-    }
-
-    resp.set_code(meta::cpp2::ErrorCode::SUCCEEDED);
-    resp.set_tags(std::move(status).value());
-    promise.setValue(std::move(resp));
-    return future;
-}
-
-folly::Future<meta::cpp2::ExecResp>
-MockMetaServiceHandler::future_createEdge(const meta::cpp2::CreateEdgeReq& req) {
-    folly::Promise<meta::cpp2::ExecResp> promise;
-    auto future = promise.getFuture();
-    meta::cpp2::ExecResp resp;
-    EdgeType edgeType;
-    auto status = MetaCache::instance().createEdge(req, edgeType);
-    if (!status.ok()) {
-        resp.set_code(meta::cpp2::ErrorCode::E_UNKNOWN);
-        promise.setValue(std::move(resp));
-        return future;
-    }
-    resp.set_code(meta::cpp2::ErrorCode::SUCCEEDED);
-    meta::cpp2::ID id;
-    id.set_edge_type(edgeType);
-    resp.set_id(std::move(id));
-    promise.setValue(std::move(resp));
-    return future;
-}
-
-folly::Future<meta::cpp2::ExecResp>
-MockMetaServiceHandler::future_alterEdge(const meta::cpp2::AlterEdgeReq &req) {
-    folly::Promise<meta::cpp2::ExecResp> promise;
-    auto future = promise.getFuture();
-    meta::cpp2::ExecResp resp;
-    auto status = MetaCache::instance().AlterEdge(req);
-    if (!status.ok()) {
-        resp.set_code(meta::cpp2::ErrorCode::E_UNKNOWN);
-        promise.setValue(std::move(resp));
-        return future;
-    }
-    resp.set_code(meta::cpp2::ErrorCode::SUCCEEDED);
-    promise.setValue(std::move(resp));
-    return future;
-}
-
-folly::Future<meta::cpp2::ExecResp>
-MockMetaServiceHandler::future_dropEdge(const meta::cpp2::DropEdgeReq& req) {
-    folly::Promise<meta::cpp2::ExecResp> promise;
-    auto future = promise.getFuture();
-    meta::cpp2::ExecResp resp;
-    auto status = MetaCache::instance().dropEdge(req);
-    if (!status.ok()) {
-        resp.set_code(meta::cpp2::ErrorCode::E_UNKNOWN);
-        promise.setValue(std::move(resp));
-        return future;
-    }
-    resp.set_code(meta::cpp2::ErrorCode::SUCCEEDED);
-    promise.setValue(std::move(resp));
-    return future;
-}
-
-folly::Future<meta::cpp2::GetEdgeResp>
-MockMetaServiceHandler::future_getEdge(const meta::cpp2::GetEdgeReq& req) {
-    folly::Promise<meta::cpp2::GetEdgeResp> promise;
-    auto future = promise.getFuture();
-    meta::cpp2::GetEdgeResp resp;
-    auto status = MetaCache::instance().getEdge(req);
-    if (!status.ok()) {
-        resp.set_code(meta::cpp2::ErrorCode::E_UNKNOWN);
-        promise.setValue(std::move(resp));
-        return future;
-    }
-    resp.set_code(meta::cpp2::ErrorCode::SUCCEEDED);
-    resp.set_schema(std::move(status).value());
-    promise.setValue(std::move(resp));
-    return future;
-}
-
-folly::Future<meta::cpp2::ListEdgesResp>
-MockMetaServiceHandler::future_listEdges(const meta::cpp2::ListEdgesReq& req) {
-    folly::Promise<meta::cpp2::ListEdgesResp> promise;
-    auto future = promise.getFuture();
-    meta::cpp2::ListEdgesResp resp;
-    auto status = MetaCache::instance().listEdges(req);
-    if (!status.ok()) {
-        resp.set_code(meta::cpp2::ErrorCode::E_UNKNOWN);
-        promise.setValue(std::move(resp));
-        return future;
-    }
-
-    resp.set_code(meta::cpp2::ErrorCode::SUCCEEDED);
-    resp.set_edges(std::move(status).value());
-    promise.setValue(std::move(resp));
-    return future;
-}
-
-folly::Future<meta::cpp2::ExecResp>
-MockMetaServiceHandler::future_createTagIndex(const meta::cpp2::CreateTagIndexReq& req) {
-    folly::Promise<meta::cpp2::ExecResp> promise;
-    auto future = promise.getFuture();
-    meta::cpp2::ExecResp resp;
-    IndexID indexId = 0;
-    auto status = MetaCache::instance().createTagIndex(req, indexId);
-    if (!status.ok()) {
-        resp.set_code(meta::cpp2::ErrorCode::E_UNKNOWN);
-        promise.setValue(std::move(resp));
-        return future;
-    }
-    resp.set_code(meta::cpp2::ErrorCode::SUCCEEDED);
-    meta::cpp2::ID id;
-    id.set_index_id(indexId);
-    resp.set_id(std::move(id));
-    promise.setValue(std::move(resp));
-    return future;
-}
-
-folly::Future<meta::cpp2::ExecResp>
-MockMetaServiceHandler::future_dropTagIndex(const meta::cpp2::DropTagIndexReq&) {
-    RETURN_SUCCESSED();
-}
-
-folly::Future<meta::cpp2::GetTagIndexResp>
-MockMetaServiceHandler::future_getTagIndex(const meta::cpp2::GetTagIndexReq&) {
-    folly::Promise<meta::cpp2::GetTagIndexResp> promise;
-    auto future = promise.getFuture();
-    meta::cpp2::GetTagIndexResp resp;
-    resp.set_code(meta::cpp2::ErrorCode::SUCCEEDED);
-    promise.setValue(std::move(resp));
-    return future;
-}
-
-folly::Future<meta::cpp2::ListTagIndexesResp>
-MockMetaServiceHandler::future_listTagIndexes(const meta::cpp2::ListTagIndexesReq&) {
-    folly::Promise<meta::cpp2::ListTagIndexesResp> promise;
-    auto future = promise.getFuture();
-    meta::cpp2::ListTagIndexesResp resp;
-    resp.set_code(meta::cpp2::ErrorCode::SUCCEEDED);
-    promise.setValue(std::move(resp));
-    return future;
-}
-
-folly::Future<meta::cpp2::ExecResp>
-MockMetaServiceHandler::future_rebuildTagIndex(const meta::cpp2::RebuildIndexReq&) {
-    RETURN_SUCCESSED();
-}
-
-folly::Future<meta::cpp2::ListIndexStatusResp>
-MockMetaServiceHandler::future_listTagIndexStatus(const meta::cpp2::ListIndexStatusReq&) {
-    folly::Promise<meta::cpp2::ListIndexStatusResp> promise;
-    auto future = promise.getFuture();
-    meta::cpp2::ListIndexStatusResp resp;
-    resp.set_code(meta::cpp2::ErrorCode::SUCCEEDED);
-    promise.setValue(std::move(resp));
-    return future;
-}
-
-folly::Future<meta::cpp2::ExecResp>
-MockMetaServiceHandler::future_createEdgeIndex(const meta::cpp2::CreateEdgeIndexReq&) {
-    RETURN_SUCCESSED();
-}
-
-folly::Future<meta::cpp2::ExecResp>
-MockMetaServiceHandler::future_dropEdgeIndex(const meta::cpp2::DropEdgeIndexReq&) {
-    RETURN_SUCCESSED();
-}
-
-folly::Future<meta::cpp2::GetEdgeIndexResp>
-MockMetaServiceHandler::future_getEdgeIndex(const meta::cpp2::GetEdgeIndexReq&) {
-    folly::Promise<meta::cpp2::GetEdgeIndexResp> promise;
-    auto future = promise.getFuture();
-    meta::cpp2::GetEdgeIndexResp resp;
-    resp.set_code(meta::cpp2::ErrorCode::SUCCEEDED);
-    promise.setValue(std::move(resp));
-    return future;
-}
-
-folly::Future<meta::cpp2::ListEdgeIndexesResp>
-MockMetaServiceHandler::future_listEdgeIndexes(const meta::cpp2::ListEdgeIndexesReq&) {
-    folly::Promise<meta::cpp2::ListEdgeIndexesResp> promise;
-    auto future = promise.getFuture();
-    meta::cpp2::ListEdgeIndexesResp resp;
-    resp.set_code(meta::cpp2::ErrorCode::SUCCEEDED);
-    promise.setValue(std::move(resp));
-    return future;
-}
-
-folly::Future<meta::cpp2::ExecResp>
-MockMetaServiceHandler::future_rebuildEdgeIndex(const meta::cpp2::RebuildIndexReq&) {
-    RETURN_SUCCESSED();
-}
-
-folly::Future<meta::cpp2::ListIndexStatusResp>
-MockMetaServiceHandler::future_listEdgeIndexStatus(const meta::cpp2::ListIndexStatusReq&) {
-    folly::Promise<meta::cpp2::ListIndexStatusResp> promise;
-    auto future = promise.getFuture();
-    meta::cpp2::ListIndexStatusResp resp;
-    resp.set_code(meta::cpp2::ErrorCode::SUCCEEDED);
-    promise.setValue(std::move(resp));
-    return future;
-}
-
-folly::Future<meta::cpp2::HBResp>
-MockMetaServiceHandler::future_heartBeat(const meta::cpp2::HBReq& req) {
-    folly::Promise<meta::cpp2::HBResp> promise;
-    auto future = promise.getFuture();
-    meta::cpp2::HBResp resp;
-    auto status = MetaCache::instance().heartBeat(req);
-    if (!status.ok()) {
-        resp.set_code(meta::cpp2::ErrorCode::E_UNKNOWN);
-        promise.setValue(std::move(resp));
-        return future;
-    }
-
-    resp.set_code(meta::cpp2::ErrorCode::SUCCEEDED);
-    resp.set_cluster_id(clusterId_);
-    resp.set_last_update_time_in_ms(time::WallClock::fastNowInMilliSec());
-    promise.setValue(std::move(resp));
-    return future;
-}
-
-folly::Future<meta::cpp2::ExecResp>
-MockMetaServiceHandler::future_createUser(const meta::cpp2::CreateUserReq& req) {
-    return MetaCache::instance().createUser(req);
-}
-
-folly::Future<meta::cpp2::ExecResp>
-MockMetaServiceHandler::future_dropUser(const meta::cpp2::DropUserReq& req) {
-    return MetaCache::instance().dropUser(req);
-}
-
-folly::Future<meta::cpp2::ExecResp>
-MockMetaServiceHandler::future_alterUser(const meta::cpp2::AlterUserReq& req) {
-    return MetaCache::instance().alterUser(req);
-}
-
-folly::Future<meta::cpp2::ExecResp>
-MockMetaServiceHandler::future_grantRole(const meta::cpp2::GrantRoleReq& req) {
-    return MetaCache::instance().grantRole(req);
-}
-
-folly::Future<meta::cpp2::ExecResp>
-MockMetaServiceHandler::future_revokeRole(const meta::cpp2::RevokeRoleReq& req) {
-    return MetaCache::instance().revokeRole(req);
-}
-
-folly::Future<meta::cpp2::ListUsersResp>
-MockMetaServiceHandler::future_listUsers(const meta::cpp2::ListUsersReq& req) {
-    return MetaCache::instance().listUsers(req);
-}
-
-folly::Future<meta::cpp2::ListRolesResp>
-MockMetaServiceHandler::future_listRoles(const meta::cpp2::ListRolesReq& req) {
-    return MetaCache::instance().listRoles(req);
-}
-
-folly::Future<meta::cpp2::ExecResp>
-MockMetaServiceHandler::future_changePassword(const meta::cpp2::ChangePasswordReq& req) {
-    return MetaCache::instance().changePassword(req);
-}
-
-folly::Future<meta::cpp2::ListRolesResp>
-MockMetaServiceHandler::future_getUserRoles(const meta::cpp2::GetUserRolesReq& req) {
-    return MetaCache::instance().getUserRoles(req);
-}
-
-folly::Future<meta::cpp2::BalanceResp>
-MockMetaServiceHandler::future_balance(const meta::cpp2::BalanceReq& req) {
-    meta::cpp2::BalanceResp resp;
-    if (req.__isset.id) {
-        // show
-        auto result = MetaCache::instance().showBalance(*req.get_id());
-        if (ok(result)) {
-            resp.set_code(meta::cpp2::ErrorCode::SUCCEEDED);
-            resp.set_tasks(std::move(result).right());
-        } else {
-            resp.set_code(result.left());
-        }
-    } else if (req.__isset.stop) {
-        // stop
-        auto result = MetaCache::instance().balanceStop();
-        if (ok(result)) {
-            resp.set_code(meta::cpp2::ErrorCode::SUCCEEDED);
-            resp.set_id(result.right());
-        } else {
-            resp.set_code(result.left());
-        }
-    } else {
-        ErrorOr<meta::cpp2::ErrorCode, int64_t> result;
-        // submit
-        if (req.__isset.host_del) {
-            result = MetaCache::instance().balanceSubmit(*req.get_host_del());
-        } else {
-            result = MetaCache::instance().balanceSubmit({});
-        }
-        if (ok(result)) {
-            resp.set_code(meta::cpp2::ErrorCode::SUCCEEDED);
-            resp.set_id(result.right());
-        } else {
-            resp.set_code(result.left());
-        }
-    }
-    return resp;
-}
-
-folly::Future<meta::cpp2::ExecResp>
-MockMetaServiceHandler::future_leaderBalance(const meta::cpp2::LeaderBalanceReq&) {
-    meta::cpp2::ExecResp resp;
-    auto result = MetaCache::instance().balanceLeaders();
-    resp.set_code(result);
-    return resp;
-}
-
-folly::Future<meta::cpp2::ExecResp>
-MockMetaServiceHandler::future_regConfig(const meta::cpp2::RegConfigReq&) {
-    RETURN_SUCCESSED();
-}
-
-folly::Future<meta::cpp2::GetConfigResp>
-MockMetaServiceHandler::future_getConfig(const meta::cpp2::GetConfigReq&) {
-    folly::Promise<meta::cpp2::GetConfigResp> promise;
-    auto future = promise.getFuture();
-    meta::cpp2::GetConfigResp resp;
-    resp.set_code(meta::cpp2::ErrorCode::SUCCEEDED);
-    promise.setValue(std::move(resp));
-    return future;
-}
-
-folly::Future<meta::cpp2::ExecResp>
-MockMetaServiceHandler::future_setConfig(const meta::cpp2::SetConfigReq&) {
-    RETURN_SUCCESSED();
-}
-
-folly::Future<meta::cpp2::ListConfigsResp>
-MockMetaServiceHandler::future_listConfigs(const meta::cpp2::ListConfigsReq&) {
-    folly::Promise<meta::cpp2::ListConfigsResp> promise;
-    auto future = promise.getFuture();
-    meta::cpp2::ListConfigsResp resp;
-    resp.set_code(meta::cpp2::ErrorCode::SUCCEEDED);
-    promise.setValue(std::move(resp));
-    return future;
-}
-
-folly::Future<meta::cpp2::ExecResp>
-MockMetaServiceHandler::future_createSnapshot(const meta::cpp2::CreateSnapshotReq&) {
-    folly::Promise<meta::cpp2::ExecResp> promise;
-    auto future = promise.getFuture();
-    meta::cpp2::ExecResp resp;
-    auto status = MetaCache::instance().createSnapshot();
-    if (!status.ok()) {
-        resp.set_code(meta::cpp2::ErrorCode::E_UNKNOWN);
-        promise.setValue(std::move(resp));
-        return future;
-    }
-    resp.set_code(meta::cpp2::ErrorCode::SUCCEEDED);
-    promise.setValue(std::move(resp));
-    return future;
-}
-
-folly::Future<meta::cpp2::ExecResp>
-MockMetaServiceHandler::future_dropSnapshot(const meta::cpp2::DropSnapshotReq& req) {
-    folly::Promise<meta::cpp2::ExecResp> promise;
-    auto future = promise.getFuture();
-    meta::cpp2::ExecResp resp;
-    auto status = MetaCache::instance().dropSnapshot(req);
-    if (!status.ok()) {
-        resp.set_code(meta::cpp2::ErrorCode::E_UNKNOWN);
-        promise.setValue(std::move(resp));
-        return future;
-    }
-    resp.set_code(meta::cpp2::ErrorCode::SUCCEEDED);
-    promise.setValue(std::move(resp));
-    return future;
-}
-
-folly::Future<meta::cpp2::ListSnapshotsResp>
-MockMetaServiceHandler::future_listSnapshots(const meta::cpp2::ListSnapshotsReq&) {
-    folly::Promise<meta::cpp2::ListSnapshotsResp> promise;
-    auto future = promise.getFuture();
-    meta::cpp2::ListSnapshotsResp resp;
-    auto status = MetaCache::instance().listSnapshots();
-    if (!status.ok()) {
-        resp.set_code(meta::cpp2::ErrorCode::E_UNKNOWN);
-        promise.setValue(std::move(resp));
-        return future;
-    }
-    resp.set_code(meta::cpp2::ErrorCode::SUCCEEDED);
-    resp.set_snapshots(std::move(status).value());
-    promise.setValue(std::move(resp));
-    return future;
-}
-}  // namespace graph
-}  // namespace nebula
diff --git a/src/mock/StorageCache.cpp b/src/mock/StorageCache.cpp
deleted file mode 100644
index a1228d14a9d2e4922590ff82f9889596c1e2146c..0000000000000000000000000000000000000000
--- a/src/mock/StorageCache.cpp
+++ /dev/null
@@ -1,191 +0,0 @@
-/* Copyright (c) 2020 vesoft inc. All rights reserved.
- *
- * This source code is licensed under Apache 2.0 License,
- * attached with Common Clause Condition 1.0, found in the LICENSES directory.
- */
-
-#include "mock/StorageCache.h"
-
-DECLARE_int32(heartbeat_interval_secs);
-
-namespace nebula {
-namespace graph {
-
-StorageCache::StorageCache(uint16_t metaPort) {
-    FLAGS_heartbeat_interval_secs = 1;
-    auto threadPool = std::make_shared<folly::IOThreadPoolExecutor>(1);
-    auto hostStatus = network::NetworkUtils::resolveHost("127.0.0.1", metaPort);
-    meta::MetaClientOptions options;
-    options.serviceName_ = "StorageCache";
-    metaClient_ = std::make_unique<meta::MetaClient>(threadPool,
-                                                     std::move(hostStatus).value(), options);
-    metaClient_->waitForMetadReady();
-    mgr_ = std::make_unique<meta::ServerBasedSchemaManager>();
-    mgr_->init(metaClient_.get());
-}
-
-Status StorageCache::addVertices(const storage::cpp2::AddVerticesRequest& req) {
-    folly::RWSpinLock::WriteHolder holder(lock_);
-    auto spaceId = req.get_space_id();
-    auto spaceFind = cache_.find(spaceId);
-    SpaceDataInfo *spaceDataInfo = nullptr;
-    if (spaceFind != cache_.end()) {
-        spaceDataInfo = &spaceFind->second;
-    } else {
-        cache_[spaceId] = SpaceDataInfo();
-        spaceDataInfo = &cache_[spaceId];
-    }
-
-    std::unordered_map<TagID, std::vector<std::string>> propNames;
-    for (auto &prop : req.get_prop_names()) {
-        propNames[prop.first] = prop.second;
-    }
-
-    auto &parts = req.get_parts();
-    for (auto &part : parts) {
-        for (auto &vertex : part.second) {
-            auto vId = vertex.get_id();
-            auto findV = spaceDataInfo->vertices.find(vId.getStr());
-            std::unordered_map<TagID,
-                               std::unordered_map<std::string, Value>> *vertexInfo = nullptr;
-            if (findV != spaceDataInfo->vertices.end()) {
-                vertexInfo = &findV->second;
-            } else {
-                spaceDataInfo->vertices[vId.getStr()] = {};
-                vertexInfo = &spaceDataInfo->vertices[vId.getStr()];
-            }
-
-            for (auto &tag : vertex.get_tags()) {
-                auto tagId = tag.get_tag_id();
-                auto propValues = tag.get_props();
-                if (propValues.size() != propNames[tagId].size()) {
-                    return Status::Error("Wrong size");
-                }
-                auto ret = getTagWholeValue(spaceId, tagId, propValues, propNames[tagId]);
-                if (!ret.ok()) {
-                    LOG(ERROR) << ret.status();
-                    return ret.status();
-                }
-                (*vertexInfo)[tagId] = std::move(ret).value();
-            }
-        }
-    }
-    return Status::OK();
-}
-
-Status StorageCache::addEdges(const storage::cpp2::AddEdgesRequest& req) {
-    folly::RWSpinLock::WriteHolder holder(lock_);
-    auto spaceId = req.get_space_id();
-    auto spaceFind = cache_.find(spaceId);
-    SpaceDataInfo *spaceDataInfo = nullptr;
-    if (spaceFind != cache_.end()) {
-        spaceDataInfo = &spaceFind->second;
-    } else {
-        cache_[spaceId] = SpaceDataInfo();
-        spaceDataInfo = &cache_[spaceId];
-    }
-
-    std::vector<std::string> propNames = req.get_prop_names();
-    auto &parts = req.get_parts();
-    for (auto &part : parts) {
-        for (auto &edge : part.second) {
-            storage::cpp2::EdgeKey edgeKey;
-            edgeKey.set_src(edge.key.get_src());
-            auto edgeType = edge.key.get_edge_type();
-            edgeKey.set_edge_type(edgeType);
-            edgeKey.set_ranking(edge.key.get_ranking());
-            edgeKey.set_dst(edge.key.get_dst());
-            auto propValues = edge.get_props();
-            if (propValues.size() != propNames.size()) {
-                LOG(ERROR) << "Wrong size, propValues.size : " << propValues.size()
-                           << ", propNames.size : " << propNames.size();
-                return Status::Error("Wrong size");
-            }
-            auto ret = getEdgeWholeValue(spaceId, edgeType, propValues, propNames);
-            if (!ret.ok()) {
-                LOG(ERROR) << ret.status();
-                return ret.status();
-            }
-            spaceDataInfo->edges[edgeKey] = std::move(ret).value();
-        }
-    }
-    return Status::OK();
-}
-
-StatusOr<std::unordered_map<std::string, Value>>
-StorageCache::getTagWholeValue(const GraphSpaceID spaceId,
-                               const TagID tagId,
-                               const std::vector<Value>& props,
-                               const std::vector<std::string> &names) {
-    if (props.size() != names.size()) {
-        return Status::Error("Wrong size between props and names");
-    }
-    auto schema = mgr_->getTagSchema(spaceId, tagId);
-    if (schema == nullptr) {
-        return Status::Error("TagId `%d' not exist", tagId);
-    }
-    return getPropertyInfo(schema, props, names);
-}
-
-StatusOr<std::unordered_map<std::string, Value>>
-StorageCache::getEdgeWholeValue(const GraphSpaceID spaceId,
-                                const EdgeType edgeType,
-                                const std::vector<Value>& props,
-                                const std::vector<std::string> &names) {
-    if (props.size() != names.size()) {
-        return Status::Error("Wrong size between props and names");
-    }
-    auto schema = mgr_->getEdgeSchema(spaceId, std::abs(edgeType));
-    if (schema == nullptr) {
-        return Status::Error("EdgeType `%d' not exist", edgeType);
-    }
-    return getPropertyInfo(schema, props, names);
-}
-
-StatusOr<std::unordered_map<std::string, Value>>
-StorageCache::getPropertyInfo(std::shared_ptr<const meta::NebulaSchemaProvider> schema,
-                              const std::vector<Value>& props,
-                              const std::vector<std::string> &names) {
-    auto number = schema->getNumFields();
-    if (number == 0 && props.size() == 0) {
-        return {};
-    }
-    if (number == 0 && props.size() != 0) {
-        return Status::Error("Wrong value about empty schema");
-    }
-
-    std::bitset<32> indexBitSet;
-    std::unordered_map<std::string, Value> propertyInfo;
-    auto index = 0u;
-    for (auto &item : names) {
-        auto filed = schema->field(item);
-        if (filed != nullptr) {
-            indexBitSet.set(index);
-            if (!filed->nullable() && props[index].isNull()) {
-                return Status::Error("Wrong null type `%s'", item.c_str());
-            }
-            propertyInfo.emplace(item, props[index]);
-        } else {
-            return Status::Error("Wrong prop name `%s'", item.c_str());
-        }
-        index++;
-    }
-
-    if (schema->getNumFields() != indexBitSet.count()) {
-        for (auto i = 0u; i < schema->getNumFields(); i++) {
-            if (indexBitSet[i] != 1) {
-                auto field = schema->field(i);
-                if (field != nullptr && !field->hasDefault()) {
-                    return Status::Error("Prop name `%s' without default value",
-                                         field->name());
-                }
-                VLOG(1) << "Add default value, filed name: " << field->name();
-                propertyInfo.emplace(field->name(), field->defaultValue());
-            }
-        }
-    }
-
-    return propertyInfo;
-}
-}  // namespace graph
-}  // namespace nebula
diff --git a/src/mock/StorageCache.h b/src/mock/StorageCache.h
deleted file mode 100644
index 57d8ceeafb980e32323f7707ac2fd1a04873327c..0000000000000000000000000000000000000000
--- a/src/mock/StorageCache.h
+++ /dev/null
@@ -1,79 +0,0 @@
-/* Copyright (c) 2020 vesoft inc. All rights reserved.
- *
- * This source code is licensed under Apache 2.0 License,
- * attached with Common Clause Condition 1.0, found in the LICENSES directory.
- */
-
-#ifndef EXECUTOR_STORAGECACHE_H_
-#define EXECUTOR_STORAGECACHE_H_
-
-#include "common/base/Base.h"
-#include "common/base/StatusOr.h"
-#include "common/interface/gen-cpp2/storage_types.h"
-#include "common/clients/meta/MetaClient.h"
-#include "common/meta/ServerBasedSchemaManager.h"
-
-namespace nebula {
-namespace graph {
-
-struct EdgeHasher {
-    std::size_t operator()(const storage::cpp2::EdgeKey& k) const {
-        std::size_t hash_val = 0;
-        hash_val ^= ((std::hash<Value>()(k.get_src())) << 1);
-        hash_val ^= ((std::hash<int32_t>()(k.get_edge_type())) << 1);
-        hash_val ^= ((std::hash<int64_t>()(k.get_ranking())) << 1);
-        hash_val ^= ((std::hash<Value>()(k.get_dst())) << 1);
-        return hash_val;
-    }
-};
-
-using VerticesInfo = std::unordered_map<VertexID,
-                     std::unordered_map<TagID, std::unordered_map<std::string, Value>>>;
-using EdgesInfo = std::unordered_map<storage::cpp2::EdgeKey,
-                                     std::unordered_map<std::string, Value>, EdgeHasher>;
-
-class StorageCache final {
-public:
-    explicit StorageCache(uint16_t metaPort);
-
-    ~StorageCache() = default;
-
-    Status addVertices(const storage::cpp2::AddVerticesRequest& req);
-
-    Status addEdges(const storage::cpp2::AddEdgesRequest& req);
-
-private:
-    StatusOr<std::unordered_map<std::string, Value>>
-    getTagWholeValue(const GraphSpaceID spaceId,
-                     const TagID tagId,
-                     const std::vector<Value>& props,
-                     const std::vector<std::string> &names);
-
-    StatusOr<std::unordered_map<std::string, Value>>
-    getEdgeWholeValue(const GraphSpaceID spaceId,
-                      const EdgeType edgeType,
-                      const std::vector<Value>& props,
-                      const std::vector<std::string> &names);
-
-    StatusOr<std::unordered_map<std::string, Value>>
-    getPropertyInfo(std::shared_ptr<const meta::NebulaSchemaProvider> schema,
-                    const std::vector<Value>& props,
-                    const std::vector<std::string> &names);
-
-private:
-    struct SpaceDataInfo {
-        SpaceDataInfo() = default;
-        ~SpaceDataInfo() = default;
-        VerticesInfo     vertices;
-        EdgesInfo        edges;
-    };
-
-    std::unordered_map<GraphSpaceID, SpaceDataInfo>   cache_;
-    mutable folly::RWSpinLock                         lock_;
-    std::unique_ptr<meta::MetaClient>                 metaClient_;
-    std::unique_ptr<meta::ServerBasedSchemaManager>   mgr_;
-};
-
-}  // namespace graph
-}  // namespace nebula
-#endif  // EXECUTOR_STORAGECACHE_H_
diff --git a/src/mock/test/AdminJobTest.cpp b/src/mock/test/AdminJobTest.cpp
deleted file mode 100644
index e9cb5308cf97017759cb882d8b8c23502972380f..0000000000000000000000000000000000000000
--- a/src/mock/test/AdminJobTest.cpp
+++ /dev/null
@@ -1,176 +0,0 @@
-/* Copyright (c) 2020 vesoft inc. All rights reserved.
- *
- * This source code is licensed under Apache 2.0 License,
- * attached with Common Clause Condition 1.0, found in the LICENSES directory.
- */
-
-#include "common/base/Status.h"
-#include "common/network/NetworkUtils.h"
-#include "common/interface/gen-cpp2/common_types.h"
-#include "mock/test/TestEnv.h"
-#include "mock/test/TestBase.h"
-#include <gtest/gtest.h>
-
-DECLARE_int32(heartbeat_interval_secs);
-
-namespace nebula {
-namespace graph {
-
-class AdminJobTest : public TestBase {
-public:
-    void SetUp() override {
-        TestBase::SetUp();
-        client_ = gEnv->getGraphClient();
-        ASSERT_NE(nullptr, client_);
-    };
-
-    void TearDown() override {
-        TestBase::TearDown();
-        client_.reset();
-    };
-
-protected:
-    std::unique_ptr<GraphClient>     client_;
-};
-
-TEST_F(AdminJobTest, Error) {
-    {
-        // submit without space
-        cpp2::ExecutionResponse resp;
-        std::string query = "SUBMIT JOB COMPACT";
-        client_->execute(query, resp);
-        // TODO(shylock) semantic error?
-        ASSERT_ERROR_CODE(resp, cpp2::ErrorCode::E_SEMANTIC_ERROR);
-    }
-    {
-        // show one not exists
-        cpp2::ExecutionResponse resp;
-        std::string query = "SHOW JOB 233";
-        client_->execute(query, resp);
-        ASSERT_ERROR_CODE(resp, cpp2::ErrorCode::E_EXECUTION_ERROR);
-    }
-    {
-        // stop one not exists
-        cpp2::ExecutionResponse resp;
-        std::string query = "STOP JOB 233";
-        client_->execute(query, resp);
-        ASSERT_ERROR_CODE(resp, cpp2::ErrorCode::E_EXECUTION_ERROR);
-    }
-}
-
-TEST_F(AdminJobTest, Base) {
-    {
-        cpp2::ExecutionResponse resp;
-        std::string query = "CREATE SPACE space_for_default(partition_num=9, replica_factor=1);";
-        client_->execute(query, resp);
-        ASSERT_ERROR_CODE(resp, cpp2::ErrorCode::SUCCEEDED);
-    }
-    sleep(FLAGS_heartbeat_interval_secs + 1);
-    {
-        cpp2::ExecutionResponse resp;
-        std::string query = "USE space_for_default;";
-        client_->execute(query, resp);
-        ASSERT_ERROR_CODE(resp, cpp2::ErrorCode::SUCCEEDED);
-    }
-    {
-        // submit
-        cpp2::ExecutionResponse resp;
-        std::string query = "SUBMIT JOB COMPACT";
-        client_->execute(query, resp);
-        ASSERT_ERROR_CODE(resp, cpp2::ErrorCode::SUCCEEDED);
-
-        DataSet expected({"New Job Id"});
-        expected.emplace_back(Row({
-            2
-        }));
-        ASSERT_TRUE(verifyDataSetWithoutOrder(resp, expected));
-    }
-    {
-        // submit
-        cpp2::ExecutionResponse resp;
-        std::string query = "SUBMIT JOB FLUSH";
-        client_->execute(query, resp);
-        ASSERT_ERROR_CODE(resp, cpp2::ErrorCode::SUCCEEDED);
-
-        DataSet expected({"New Job Id"});
-        expected.emplace_back(Row({
-            3
-        }));
-        ASSERT_TRUE(verifyDataSetWithoutOrder(resp, expected));
-    }
-    {
-        // show all
-        cpp2::ExecutionResponse resp;
-        std::string query = "SHOW JOBS";
-        client_->execute(query, resp);
-        ASSERT_ERROR_CODE(resp, cpp2::ErrorCode::SUCCEEDED);
-
-        nebula::DataSet expected({"Job Id", "Command", "Status", "Start Time", "Stop Time"});
-        expected.emplace_back(Row({
-            2, "COMPACT", "QUEUE", 0, 0,
-        }));
-        expected.emplace_back(Row({
-            3, "FLUSH", "QUEUE", 0, 0
-        }));
-        ASSERT_TRUE(verifyDataSetWithoutOrder(resp, expected));
-    }
-    // TODO current not support should move it into show
-    /*
-    {
-        // show one
-        cpp2::ExecutionResponse resp;
-        std::string query = "SHOW JOB 2";
-        client_->execute(query, resp);
-        ASSERT_ERROR_CODE(resp, cpp2::ErrorCode::SUCCEEDED);
-
-        nebula::DataSet expected(
-            {"Job Id(TaskId)", "Command(Dest)", "Status", "Start Time", "Stop Time"});
-        expected.emplace_back(Row({2, "COMPACT", "QUEUE", 0, 0}));
-        expected.emplace_back(Row({1, "127.0.0.1", "QUEUE", 0, 0}));
-        ASSERT_TRUE(verifyDataSetWithoutOrder(resp, expected));
-    }
-    {
-        // stop one
-        cpp2::ExecutionResponse resp;
-        std::string query = "STOP JOB 2";
-        client_->execute(query, resp);
-        ASSERT_ERROR_CODE(resp, cpp2::ErrorCode::SUCCEEDED);
-
-        nebula::DataSet expected({"Result"});
-        expected.emplace_back(Row({"Job stopped"}));
-        ASSERT_TRUE(verifyDataSetWithoutOrder(resp, expected));
-    }
-    {
-        // show all
-        cpp2::ExecutionResponse resp;
-        std::string query = "SHOW JOBS";
-        client_->execute(query, resp);
-        ASSERT_ERROR_CODE(resp, cpp2::ErrorCode::SUCCEEDED);
-
-        nebula::DataSet expected({"Job Id", "Command", "Status", "Start Time", "Stop Time"});
-        expected.emplace_back(Row({
-            2, "COMPACT", "STOPPED", 0, 0,
-        }));
-        expected.emplace_back(Row({
-            3, "FLUSH", "QUEUE", 0, 0
-        }));
-        ASSERT_TRUE(verifyDataSetWithoutOrder(resp, expected));
-    }
-    {
-        // recover
-        cpp2::ExecutionResponse resp;
-        std::string query = "RECOVER JOB";
-        client_->execute(query, resp);
-        ASSERT_ERROR_CODE(resp, cpp2::ErrorCode::SUCCEEDED);
-
-        nebula::DataSet expected({"Recovered job num"});
-        expected.emplace_back(Row({
-            0
-        }));
-        ASSERT_TRUE(verifyDataSetWithoutOrder(resp, expected));
-    }
-    */
-}
-
-}   // namespace graph
-}   // namespace nebula
diff --git a/src/mock/test/CMakeLists.txt b/src/mock/test/CMakeLists.txt
deleted file mode 100644
index 8171efc8683a930973b60007d76bd982b3f86a7e..0000000000000000000000000000000000000000
--- a/src/mock/test/CMakeLists.txt
+++ /dev/null
@@ -1,150 +0,0 @@
-# Copyright (c) 2020 vesoft inc. All rights reserved.
-#
-# This source code is licensed under Apache 2.0 License,
-# attached with Common Clause Condition 1.0, found in the LICENSES directory.
-#
-
-set(GRAPH_TEST_LIB
-    $<TARGET_OBJECTS:mock_obj>
-    $<TARGET_OBJECTS:util_obj>
-    $<TARGET_OBJECTS:service_obj>
-    $<TARGET_OBJECTS:session_obj>
-    $<TARGET_OBJECTS:query_engine_obj>
-    $<TARGET_OBJECTS:graph_flags_obj>
-    $<TARGET_OBJECTS:parser_obj>
-    $<TARGET_OBJECTS:validator_obj>
-    $<TARGET_OBJECTS:expr_visitor_obj>
-    $<TARGET_OBJECTS:planner_obj>
-    $<TARGET_OBJECTS:executor_obj>
-    $<TARGET_OBJECTS:scheduler_obj>
-    $<TARGET_OBJECTS:idgenerator_obj>
-    $<TARGET_OBJECTS:context_obj>
-    $<TARGET_OBJECTS:graph_auth_obj>
-    $<TARGET_OBJECTS:optimizer_obj>
-    $<TARGET_OBJECTS:common_time_function_obj>
-    $<TARGET_OBJECTS:common_expression_obj>
-    $<TARGET_OBJECTS:common_http_client_obj>
-    $<TARGET_OBJECTS:common_network_obj>
-    $<TARGET_OBJECTS:common_process_obj>
-    $<TARGET_OBJECTS:common_graph_client_obj>
-    $<TARGET_OBJECTS:common_storage_client_base_obj>
-    $<TARGET_OBJECTS:common_graph_storage_client_obj>
-    $<TARGET_OBJECTS:common_meta_client_obj>
-    $<TARGET_OBJECTS:common_stats_obj>
-    $<TARGET_OBJECTS:common_meta_thrift_obj>
-    $<TARGET_OBJECTS:common_graph_thrift_obj>
-    $<TARGET_OBJECTS:common_common_thrift_obj>
-    $<TARGET_OBJECTS:common_storage_thrift_obj>
-    $<TARGET_OBJECTS:common_thrift_obj>
-    $<TARGET_OBJECTS:common_meta_obj>
-    $<TARGET_OBJECTS:common_thread_obj>
-    $<TARGET_OBJECTS:common_time_obj>
-    $<TARGET_OBJECTS:common_fs_obj>
-    $<TARGET_OBJECTS:common_base_obj>
-    $<TARGET_OBJECTS:common_concurrent_obj>
-    $<TARGET_OBJECTS:common_datatypes_obj>
-    $<TARGET_OBJECTS:common_conf_obj>
-    $<TARGET_OBJECTS:common_file_based_cluster_id_man_obj>
-    $<TARGET_OBJECTS:common_charset_obj>
-    $<TARGET_OBJECTS:common_function_manager_obj>
-    $<TARGET_OBJECTS:common_http_client_obj>
-    $<TARGET_OBJECTS:common_encryption_obj>
-    $<TARGET_OBJECTS:common_agg_function_obj>
-    $<TARGET_OBJECTS:common_time_utils_obj>
-)
-
-nebula_add_test(
-    NAME
-        mock_server_test
-    SOURCES
-        TestMock.cpp
-    OBJECTS
-        ${GRAPH_TEST_LIB}
-    LIBRARIES
-        ${THRIFT_LIBRARIES}
-        gtest
-        gtest_main
-        proxygenhttpserver
-        proxygenlib
-        wangle
-)
-
-nebula_add_test(
-    NAME
-        schema_test
-    SOURCES
-        SchemaTest.cpp
-    OBJECTS
-        ${GRAPH_TEST_LIB}
-    LIBRARIES
-        ${THRIFT_LIBRARIES}
-        proxygenhttpserver
-        proxygenlib
-        wangle
-        gtest
-        gtest_main
-)
-
-nebula_add_test(
-    NAME
-        acl_test
-    SOURCES
-        ACLTest.cpp
-    OBJECTS
-        ${GRAPH_TEST_LIB}
-    LIBRARIES
-        ${THRIFT_LIBRARIES}
-        gtest
-        gtest_main
-        proxygenhttpserver
-        proxygenlib
-        wangle
-)
-
-nebula_add_test(
-    NAME
-        balance_test
-    SOURCES
-        BalanceTest.cpp
-    OBJECTS
-        ${GRAPH_TEST_LIB}
-    LIBRARIES
-        proxygenhttpserver
-        proxygenlib
-        ${THRIFT_LIBRARIES}
-        wangle
-        gtest
-        gtest_main
-)
-
-nebula_add_test(
-    NAME
-        admin_job_test
-    SOURCES
-        AdminJobTest.cpp
-    OBJECTS
-        ${GRAPH_TEST_LIB}
-    LIBRARIES
-        proxygenhttpserver
-        proxygenlib
-        ${THRIFT_LIBRARIES}
-        wangle
-        gtest
-        gtest_main
-)
-
-nebula_add_test(
-    NAME
-        snapshot_test
-    SOURCES
-        SnapshotTest.cpp
-    OBJECTS
-        ${GRAPH_TEST_LIB}
-    LIBRARIES
-        ${THRIFT_LIBRARIES}
-        proxygenhttpserver
-        proxygenlib
-        wangle
-        gtest
-        gtest_main
-)
diff --git a/src/mock/test/SchemaTest.cpp b/src/mock/test/SchemaTest.cpp
deleted file mode 100644
index 3d26963378029273200d6ab6646e35872e982da2..0000000000000000000000000000000000000000
--- a/src/mock/test/SchemaTest.cpp
+++ /dev/null
@@ -1,474 +0,0 @@
-/* Copyright (c) 2020 vesoft inc. All rights reserved.
- *
- * This source code is licensed under Apache 2.0 License,
- * attached with Common Clause Condition 1.0, found in the LICENSES directory.
- */
-
-#include "common/base/Status.h"
-#include "common/network/NetworkUtils.h"
-#include "common/interface/gen-cpp2/common_types.h"
-#include "mock/test/TestEnv.h"
-#include "mock/test/TestBase.h"
-#include <gtest/gtest.h>
-
-DECLARE_int32(heartbeat_interval_secs);
-
-namespace nebula {
-namespace graph {
-class SchemaTest : public TestBase {
-public:
-    void SetUp() override {
-        TestBase::SetUp();
-    };
-
-    void TearDown() override {
-        TestBase::TearDown();
-    };
-
-    static void SetUpTestCase() {
-        client_ = gEnv->getGraphClient();
-        ASSERT_NE(nullptr, client_);
-    }
-
-    static void TearDownTestCase() {
-        client_.reset();
-    }
-
-protected:
-    static std::unique_ptr<GraphClient>     client_;
-};
-
-std::unique_ptr<GraphClient> SchemaTest::client_{nullptr};
-
-TEST_F(SchemaTest, TestSpace) {
-    {
-        cpp2::ExecutionResponse resp;
-        std::string query = "CREATE SPACE space_for_default(partition_num=9, replica_factor=1);";
-        auto code = client_->execute(query, resp);
-        ASSERT_EQ(cpp2::ErrorCode::SUCCEEDED, code);
-    }
-    {
-        cpp2::ExecutionResponse resp;
-        std::string query = "CREATE SPACE space_set_vid_type(partition_num=9, "
-                            "replica_factor=1, vid_type=FIXED_STRING(20));";
-        auto code = client_->execute(query, resp);
-        ASSERT_EQ(cpp2::ErrorCode::SUCCEEDED, code);
-    }
-    {
-        cpp2::ExecutionResponse resp;
-        std::string query = "DESC SPACE space_for_default;";
-        auto code = client_->execute(query, resp);
-        ASSERT_EQ(cpp2::ErrorCode::SUCCEEDED, code);
-        std::vector<std::string> colNames = {"ID", "Name", "Partition Number", "Replica Factor",
-                                             "Charset", "Collate", "Vid Type"};
-        ASSERT_TRUE(verifyColNames(resp, colNames));
-        std::vector<Value> values = {1, "space_for_default", 9,
-                                     1, "utf8", "utf8_bin", "FIXED_STRING(8)"};
-        ASSERT_TRUE(verifyValues(resp, values));
-    }
-    {
-        cpp2::ExecutionResponse resp;
-        std::string query = "CREATE SPACE space_2("
-                            "partition_num=9, replica_factor=1, vid_type=FIXED_STRING(20));";
-        auto code = client_->execute(query, resp);
-        ASSERT_EQ(cpp2::ErrorCode::SUCCEEDED, code);
-    }
-    {
-        cpp2::ExecutionResponse resp;
-        std::string query = "SHOW SPACES;";
-        auto code = client_->execute(query, resp);
-        ASSERT_EQ(cpp2::ErrorCode::SUCCEEDED, code);
-        std::vector<std::string> colNames = {"Name"};
-        ASSERT_TRUE(verifyColNames(resp, colNames));
-        std::vector<std::vector<Value>> values = {
-            {"space_2"},
-            {"space_for_default"},
-            {"space_set_vid_type"}
-        };
-        ASSERT_TRUE(verifyValues(resp, values));
-    }
-    // Show Create space
-    std::string createSpaceStr;
-    {
-        cpp2::ExecutionResponse resp;
-        std::string query = "SHOW CREATE SPACE space_2";
-        auto code = client_->execute(query, resp);
-        ASSERT_EQ(cpp2::ErrorCode::SUCCEEDED, code);
-        createSpaceStr = "CREATE SPACE `space_2` ("
-                         "partition_num = 9, "
-                         "replica_factor = 1, "
-                         "charset = utf8, "
-                         "collate = utf8_bin, "
-                         "vid_type = FIXED_STRING(20))";
-        std::vector<std::string> colNames = {"Space", "Create Space"};
-        ASSERT_TRUE(verifyColNames(resp, colNames));
-        std::vector<Value> values = {"space_2", createSpaceStr};
-        ASSERT_TRUE(verifyValues(resp, values));
-    }
-    // Drop space
-    {
-        cpp2::ExecutionResponse resp;
-        std::string query = "DROP SPACE space_2";
-        auto code = client_->execute(query, resp);
-        ASSERT_EQ(cpp2::ErrorCode::SUCCEEDED, code);
-    }
-    {
-        cpp2::ExecutionResponse resp;
-        std::string query = "SHOW SPACES;";
-        auto code = client_->execute(query, resp);
-        ASSERT_EQ(cpp2::ErrorCode::SUCCEEDED, code);
-        std::vector<std::string> colNames = {"Name"};
-        ASSERT_TRUE(verifyColNames(resp, colNames));
-        std::vector<std::vector<Value>> values = {{"space_for_default"}, {"space_set_vid_type"}};
-        ASSERT_TRUE(verifyValues(resp, values));
-    }
-    // use show create space result
-    {
-        cpp2::ExecutionResponse resp;
-        auto code = client_->execute(createSpaceStr, resp);
-        ASSERT_EQ(cpp2::ErrorCode::SUCCEEDED, code);
-
-        std::string query = "SHOW SPACES;";
-        code = client_->execute(query, resp);
-        ASSERT_EQ(cpp2::ErrorCode::SUCCEEDED, code);
-        std::vector<std::string> colNames = {"Name"};
-        ASSERT_TRUE(verifyColNames(resp, colNames));
-        std::vector<std::vector<Value>> values = {
-            {"space_2"},
-            {"space_for_default"},
-            {"space_set_vid_type"}
-        };
-        ASSERT_TRUE(verifyValues(resp, values));
-    }
-}
-
-TEST_F(SchemaTest, TestTag) {
-    sleep(FLAGS_heartbeat_interval_secs + 1);
-    {
-        cpp2::ExecutionResponse resp;
-        std::string query = "USE space_for_default";
-        auto code = client_->execute(query, resp);
-        ASSERT_EQ(cpp2::ErrorCode::SUCCEEDED, code);
-    }
-    {
-        cpp2::ExecutionResponse resp;
-        std::string query = "CREATE TAG student(name STRING NOT NULL, "
-                            "age INT8 DEFAULT 18, grade FIXED_STRING(10), start INT64 DEFAULT 2020)"
-                            " ttl_duration = 3600, ttl_col = \"start\";";
-        auto code = client_->execute(query, resp);
-        ASSERT_EQ(cpp2::ErrorCode::SUCCEEDED, code);
-    }
-    {
-        cpp2::ExecutionResponse resp;
-        std::string query = "DESC TAG student;";
-        auto code = client_->execute(query, resp);
-        ASSERT_EQ(cpp2::ErrorCode::SUCCEEDED, code);
-        ASSERT_TRUE(resp.__isset.data);
-        std::vector<std::string> colNames = {"Field", "Type", "Null", "Default"};
-        ASSERT_TRUE(verifyColNames(resp, colNames));
-        std::vector<std::vector<Value>> values = {
-                {"name", "string", "NO",  Value::kEmpty},
-                {"age", "int8", "YES", 18},
-                {"grade", "fixed_string(10)", "YES", Value::kEmpty},
-                {"start", "int64", "YES", 2020}};
-        ASSERT_TRUE(verifyValues(resp, values));
-    }
-    {
-        cpp2::ExecutionResponse resp;
-        std::string query = "CREATE TAG person(name STRING DEFAULT \"\", amount FLOAT);";
-        auto code = client_->execute(query, resp);
-        ASSERT_EQ(cpp2::ErrorCode::SUCCEEDED, code);
-    }
-    {
-        cpp2::ExecutionResponse resp;
-        std::string query = "SHOW TAGS;";
-        auto code = client_->execute(query, resp);
-        ASSERT_EQ(cpp2::ErrorCode::SUCCEEDED, code);
-        std::vector<std::string> colNames = {"Name"};
-        ASSERT_TRUE(verifyColNames(resp, colNames));
-        std::vector<std::vector<Value>> values = {{"person"}, {"student"}};
-        ASSERT_TRUE(verifyValues(resp, values));
-    }
-    // Show Create tag
-    std::string createTagStr;
-    {
-        cpp2::ExecutionResponse resp;
-        std::string query = "SHOW CREATE TAG student";
-        auto code = client_->execute(query, resp);
-        ASSERT_EQ(cpp2::ErrorCode::SUCCEEDED, code);
-        createTagStr = "CREATE TAG `student` (\n"
-                        " `name` string NOT NULL,\n"
-                        " `age` int8 NULL DEFAULT 18,\n"
-                        " `grade` fixed_string(10) NULL,\n"
-                        " `start` int64 NULL DEFAULT 2020\n"
-                        ") ttl_duration = 3600, ttl_col = \"start\"";
-        std::vector<std::string> colNames = {"Tag", "Create Tag"};
-        ASSERT_TRUE(verifyColNames(resp, colNames));
-        std::vector<Value> values = {"student", createTagStr};
-        ASSERT_TRUE(verifyValues(resp, values));
-    }
-    {
-        cpp2::ExecutionResponse resp;
-        std::string query = "DROP TAG student;";
-        auto code = client_->execute(query, resp);
-        ASSERT_EQ(cpp2::ErrorCode::SUCCEEDED, code);
-    }
-    {
-        cpp2::ExecutionResponse resp;
-        std::string query = "SHOW TAGS;";
-        auto code = client_->execute(query, resp);
-        ASSERT_EQ(cpp2::ErrorCode::SUCCEEDED, code);
-        std::vector<std::string> colNames = {"Name"};
-        ASSERT_TRUE(verifyColNames(resp, colNames));
-        std::vector<Value> values = {"person"};
-        ASSERT_TRUE(verifyValues(resp, values));
-    }
-    // Check the show create tag result is ok
-    {
-        cpp2::ExecutionResponse resp;
-        auto code = client_->execute(createTagStr, resp);
-        ASSERT_EQ(cpp2::ErrorCode::SUCCEEDED, code);
-
-        std::string query = "SHOW TAGS;";
-        code = client_->execute(query, resp);
-        ASSERT_EQ(cpp2::ErrorCode::SUCCEEDED, code);
-        std::vector<std::string> colNames = {"Name"};
-        ASSERT_TRUE(verifyColNames(resp, colNames));
-        std::vector<std::vector<Value>> values = {{"person"}, {"student"}};
-        ASSERT_TRUE(verifyValues(resp, values));
-    }
-    {
-        cpp2::ExecutionResponse resp;
-        std::string query = "CREATE SPACE A; USE A; "
-                            "CREATE TAG tag1(name STRING, age INT8, grade FIXED_STRING(10));";
-        auto code = client_->execute(query, resp);
-        ASSERT_EQ(cpp2::ErrorCode::SUCCEEDED, code);
-    }
-}
-
-TEST_F(SchemaTest, TestEdge) {
-    {
-        cpp2::ExecutionResponse resp;
-        std::string query = "USE space_for_default; "
-                            "CREATE EDGE schoolmate(start int NOT NULL, end int);";
-        auto code = client_->execute(query, resp);
-        ASSERT_EQ(cpp2::ErrorCode::SUCCEEDED, code);
-    }
-    {
-        cpp2::ExecutionResponse resp;
-        std::string query = "DESC EDGE schoolmate;";
-        auto code = client_->execute(query, resp);
-        ASSERT_EQ(cpp2::ErrorCode::SUCCEEDED, code);
-        ASSERT_TRUE(resp.__isset.data);
-        std::vector<std::string> colNames = {"Field", "Type", "Null", "Default"};
-        ASSERT_TRUE(verifyColNames(resp, colNames));
-        std::vector<std::vector<Value>> values = {
-                {"start", "int64", "NO", Value::kEmpty},
-                {"end", "int64", "YES", Value::kEmpty}};
-        ASSERT_TRUE(verifyValues(resp, values));
-    }
-    {
-        cpp2::ExecutionResponse resp;
-        std::string query = "CREATE EDGE like(name STRING NOT NULL DEFAULT \"\", amount FLOAT);";
-        auto code = client_->execute(query, resp);
-        ASSERT_EQ(cpp2::ErrorCode::SUCCEEDED, code);
-    }
-    {
-        cpp2::ExecutionResponse resp;
-        std::string query = "SHOW EDGES;";
-        auto code = client_->execute(query, resp);
-        ASSERT_EQ(cpp2::ErrorCode::SUCCEEDED, code);
-        std::vector<std::string> colNames = {"Name"};
-        ASSERT_TRUE(verifyColNames(resp, colNames));
-        std::vector<std::vector<Value>> values = {{"like"}, {"schoolmate"}};
-        ASSERT_TRUE(verifyValues(resp, values));
-    }
-    // Show Create edge
-    std::string createEdgeStr;
-    {
-        cpp2::ExecutionResponse resp;
-        std::string query = "SHOW CREATE EDGE like";
-        auto code = client_->execute(query, resp);
-        ASSERT_EQ(cpp2::ErrorCode::SUCCEEDED, code);
-        createEdgeStr = "CREATE EDGE `like` (\n"
-                        " `name` string NOT NULL DEFAULT \"\",\n"
-                        " `amount` float NULL\n"
-                        ") ttl_duration = 0, ttl_col = \"\"";
-        std::vector<std::string> colNames = {"Edge", "Create Edge"};
-        ASSERT_TRUE(verifyColNames(resp, colNames));
-        std::vector<Value> values = {"like", createEdgeStr};
-        ASSERT_TRUE(verifyValues(resp, values));
-    }
-    {
-        cpp2::ExecutionResponse resp;
-        std::string query = "DROP EDGE like;";
-        auto code = client_->execute(query, resp);
-        ASSERT_EQ(cpp2::ErrorCode::SUCCEEDED, code);
-    }
-    {
-        cpp2::ExecutionResponse resp;
-        std::string query = "SHOW EDGES;";
-        auto code = client_->execute(query, resp);
-        ASSERT_EQ(cpp2::ErrorCode::SUCCEEDED, code);
-        std::vector<std::string> colNames = {"Name"};
-        ASSERT_TRUE(verifyColNames(resp, colNames));
-        std::vector<Value> values = {"schoolmate"};
-        ASSERT_TRUE(verifyValues(resp, values));
-    }
-    // Check the show create edge result is ok
-    {
-        cpp2::ExecutionResponse resp;
-        auto code = client_->execute(createEdgeStr, resp);
-        ASSERT_EQ(cpp2::ErrorCode::SUCCEEDED, code);
-
-        std::string query = "SHOW EDGES;";
-        code = client_->execute(query, resp);
-        ASSERT_EQ(cpp2::ErrorCode::SUCCEEDED, code);
-        std::vector<std::string> colNames = {"Name"};
-        ASSERT_TRUE(verifyColNames(resp, colNames));
-        std::vector<std::vector<Value>> values = {{"like"}, {"schoolmate"}};
-        ASSERT_TRUE(verifyValues(resp, values));
-    }
-    {
-        cpp2::ExecutionResponse resp;
-        std::string query = "CREATE SPACE B; USE B; "
-                            "CREATE EDGE edge1(name STRING, age INT8, grade FIXED_STRING(10));";
-        auto code = client_->execute(query, resp);
-        ASSERT_EQ(cpp2::ErrorCode::SUCCEEDED, code);
-    }
-}
-
-TEST_F(SchemaTest, TestAlterTag) {
-    {
-        cpp2::ExecutionResponse resp;
-        std::string query = "CREATE TAG alterTag(col1 STRING, col2 INT8, "
-                            "col3 DOUBLE, col4 FIXED_STRING(10));";
-        auto code = client_->execute(query, resp);
-        ASSERT_EQ(cpp2::ErrorCode::SUCCEEDED, code);
-    }
-    {
-        cpp2::ExecutionResponse resp;
-        std::string query = "ALTER TAG alterTag "
-                            "ADD (col5 TIMESTAMP, col6 DATE NOT NULL), "
-                            "CHANGE (col2 INT8 DEFAULT 10), "
-                            "DROP (col4)";
-        auto code = client_->execute(query, resp);
-        ASSERT_EQ(cpp2::ErrorCode::SUCCEEDED, code);
-    }
-    {
-        cpp2::ExecutionResponse resp;
-        std::string query = "DESC TAG alterTag;";
-        auto code = client_->execute(query, resp);
-        ASSERT_EQ(cpp2::ErrorCode::SUCCEEDED, code);
-        ASSERT_TRUE(resp.__isset.data);
-        std::vector<std::string> colNames = {"Field", "Type", "Null", "Default"};
-        ASSERT_TRUE(verifyColNames(resp, colNames));
-        std::vector<std::vector<Value>> values = {
-                {Value("col1"), Value("string"), Value("YES"), Value()},
-                {Value("col2"), Value("int8"), Value("YES"), Value(10)},
-                {Value("col3"), Value("double"), Value("YES"), Value()},
-                {Value("col5"), Value("timestamp"), Value("YES"), Value()},
-                {Value("col6"), Value("date"), Value("NO"), Value()}};
-        ASSERT_TRUE(verifyValues(resp, values));
-    }
-}
-
-TEST_F(SchemaTest, TestAlterEdge) {
-    {
-        cpp2::ExecutionResponse resp;
-        std::string query = "CREATE EDGE alterEdge(col1 STRING, col2 INT8, "
-                            "col3 DOUBLE, col4 FIXED_STRING(10));";
-        auto code = client_->execute(query, resp);
-        ASSERT_EQ(cpp2::ErrorCode::SUCCEEDED, code);
-        }
-        {
-        cpp2::ExecutionResponse resp;
-        std::string query = "ALTER EDGE alterEdge "
-                            "ADD (col5 TIMESTAMP, col6 DATE NOT NULL), "
-                            "CHANGE (col2 INT8 DEFAULT 10), "
-                            "DROP (col4)";
-        auto code = client_->execute(query, resp);
-        ASSERT_EQ(cpp2::ErrorCode::SUCCEEDED, code);
-    }
-    {
-        cpp2::ExecutionResponse resp;
-        std::string query = "DESC EDGE alterEdge;";
-        auto code = client_->execute(query, resp);
-        ASSERT_EQ(cpp2::ErrorCode::SUCCEEDED, code);
-        ASSERT_TRUE(resp.__isset.data);
-        std::vector<std::string> colNames = {"Field", "Type", "Null", "Default"};
-        ASSERT_TRUE(verifyColNames(resp, colNames));
-        std::vector<std::vector<Value>> values = {
-                {Value("col1"), Value("string"), Value("YES"), Value()},
-                {Value("col2"), Value("int8"), Value("YES"), Value(10)},
-                {Value("col3"), Value("double"), Value("YES"), Value()},
-                {Value("col5"), Value("timestamp"), Value("YES"), Value()},
-                {Value("col6"), Value("date"), Value("NO"), Value()}};
-        ASSERT_TRUE(verifyValues(resp, values));
-    }
-}
-
-TEST_F(SchemaTest, TestInsert) {
-    sleep(FLAGS_heartbeat_interval_secs + 1);
-    {
-        cpp2::ExecutionResponse resp;
-        std::string query = "USE space_for_default;";
-        auto code = client_->execute(query, resp);
-        ASSERT_EQ(cpp2::ErrorCode::SUCCEEDED, code);
-    }
-    {
-        cpp2::ExecutionResponse resp;
-        std::string query = "USE space_for_default; INSERT VERTEX student(name, age, grade) "
-                            "VALUES \"Tom\":(\"Tom\", 18, \"three\");";
-        auto code = client_->execute(query, resp);
-        ASSERT_EQ(cpp2::ErrorCode::SUCCEEDED, code);
-    }
-    {
-        cpp2::ExecutionResponse resp;
-        std::string query = "INSERT VERTEX student(name, age, grade) "
-                            "VALUES \"Lily\":(\"Lily\", 18, \"three\");";
-        auto code = client_->execute(query, resp);
-        ASSERT_EQ(cpp2::ErrorCode::SUCCEEDED, code);
-    }
-    {
-        cpp2::ExecutionResponse resp;
-        std::string query = "INSERT VERTEX student(name, age, grade) "
-                            "VALUES \"Tom\":(\"Tom\", 18, \"three\");"
-                            "INSERT VERTEX student(name, age, grade) "
-                            "VALUES \"Tom\":(\"Tom\", 18, \"three\");";
-        auto code = client_->execute(query, resp);
-        ASSERT_EQ(cpp2::ErrorCode::SUCCEEDED, code);
-    }
-    {
-        cpp2::ExecutionResponse resp;
-        std::string query = "INSERT VERTEX student(name, age, grade) "
-                            "VALUES 100:(\"100\", 17, \"three\");";
-        auto code = client_->execute(query, resp);
-        ASSERT_NE(cpp2::ErrorCode::SUCCEEDED, code);
-    }
-    {
-        cpp2::ExecutionResponse resp;
-        std::string query = "INSERT EDGE schoolmate(start, end) "
-                            "VALUES \"Tom\"->\"Lily\":(2009, 2011)";
-        auto code = client_->execute(query, resp);
-        ASSERT_EQ(cpp2::ErrorCode::SUCCEEDED, code);
-    }
-    {
-        cpp2::ExecutionResponse resp;
-        std::string query = "INSERT EDGE schoolmate(start, end) "
-                            "VALUES \"Tom\"->\"Lily\":(2009, 2011)";
-        auto code = client_->execute(query, resp);
-        ASSERT_EQ(cpp2::ErrorCode::SUCCEEDED, code);
-    }
-    {
-        cpp2::ExecutionResponse resp;
-        std::string query = "INSERT EDGE schoolmate(start, end) "
-                            "VALUES \"Tom\"->\"Lily\":(2009, 2011);"
-                            "INSERT EDGE schoolmate(start, end) "
-                            "VALUES \"Tom\"->\"Lily\":(2009, 2011)";
-        auto code = client_->execute(query, resp);
-        ASSERT_EQ(cpp2::ErrorCode::SUCCEEDED, code);
-    }
-}
-}   // namespace graph
-}   // namespace nebula
diff --git a/src/mock/test/TestMock.cpp b/src/mock/test/TestMock.cpp
deleted file mode 100644
index 93f8de033b41c3544e818dece7f0c72ca4e7fe7b..0000000000000000000000000000000000000000
--- a/src/mock/test/TestMock.cpp
+++ /dev/null
@@ -1,207 +0,0 @@
-/* Copyright (c) 2020 vesoft inc. All rights reserved.
- *
- * This source code is licensed under Apache 2.0 License,
- * attached with Common Clause Condition 1.0, found in the LICENSES directory.
- */
-
-#include "common/base/Status.h"
-#include "common/network/NetworkUtils.h"
-#include "common/interface/gen-cpp2/common_types.h"
-#include "mock/test/TestEnv.h"
-#include "mock/test/TestBase.h"
-#include "context/QueryExpressionContext.h"
-#include <gtest/gtest.h>
-
-DECLARE_int32(heartbeat_interval_secs);
-
-namespace nebula {
-namespace graph {
-class MockServerTest : public TestBase {
-public:
-    void SetUp() override {
-        TestBase::SetUp();
-    };
-
-    void TearDown() override {
-        TestBase::TearDown();
-    };
-};
-
-TEST_F(MockServerTest, TestMeta) {
-    GraphSpaceID spaceId1 = 0;
-    GraphSpaceID spaceId2 = 0;
-    auto metaClient = gEnv->getMetaClient();
-    // Test space
-    {
-        // Create space
-        std::string spaceName1 = "TEST_SPACE1";
-        meta::cpp2::SpaceDesc spaceDesc1;
-        spaceDesc1.set_space_name(spaceName1);
-        spaceDesc1.set_partition_num(10);
-        spaceDesc1.set_replica_factor(1);
-        bool ifNotExists = true;
-        auto status = metaClient->createSpace(spaceDesc1, ifNotExists).get();
-        spaceId1 = status.value();
-
-        std::string spaceName2 = "TEST_SPACE2";
-        meta::cpp2::SpaceDesc spaceDesc2;
-        spaceDesc2.set_space_name(spaceName2);
-        spaceDesc2.set_partition_num(100);
-        spaceDesc2.set_replica_factor(3);
-        status = metaClient->createSpace(spaceDesc2, ifNotExists).get();
-        spaceId2 = status.value();
-
-        // Get space
-        auto getStatus = metaClient->getSpace(spaceName1).get();
-        ASSERT_TRUE(getStatus.ok());
-        ASSERT_EQ(spaceId1, getStatus.value().get_space_id());
-        ASSERT_EQ(10, getStatus.value().get_properties().get_partition_num());
-        ASSERT_EQ(1, getStatus.value().get_properties().get_replica_factor());
-        ASSERT_EQ(8, *getStatus.value().get_properties().get_vid_type().get_type_length());
-
-        getStatus = metaClient->getSpace(spaceName2).get();
-        ASSERT_TRUE(getStatus.ok());
-        ASSERT_EQ(spaceId2, getStatus.value().get_space_id());
-        ASSERT_EQ(100, getStatus.value().get_properties().get_partition_num());
-        ASSERT_EQ(3, getStatus.value().get_properties().get_replica_factor());
-        ASSERT_EQ(8, *getStatus.value().get_properties().get_vid_type().get_type_length());
-
-        // List spaces
-        auto listStatus = metaClient->listSpaces().get();
-        ASSERT_TRUE(listStatus.ok());
-        auto spaces = listStatus.value();
-        ASSERT_EQ(2, spaces.size());
-
-        std::vector<meta::SpaceIdName> expected;
-        expected.emplace_back(spaceId2, spaceName2);
-        expected.emplace_back(spaceId1, spaceName1);
-        ASSERT_EQ(expected, spaces);
-    }
-    QueryExpressionContext ctx;
-    // Test tag
-    {
-        // Create tag
-        for (auto i = 0u; i < 10; i++) {
-            meta::cpp2::Schema tagSchema;
-            meta::cpp2::ColumnDef col;
-            col.set_name(folly::stringPrintf("col_%d", i));
-            col.type.set_type(meta::cpp2::PropertyType::STRING);
-            ConstantExpression defaultValue("NULL");
-            col.set_default_value(defaultValue.encode());
-            std::vector<meta::cpp2::ColumnDef> cols;
-            cols.emplace_back(col);
-            tagSchema.set_columns(std::move(cols));
-            auto status = metaClient->createTagSchema(spaceId1,
-                    folly::stringPrintf("tag_%d", i), tagSchema, false).get();
-            ASSERT_TRUE(status.ok());
-        }
-
-        // Get tag
-        for (auto i = 0u; i < 10; i++) {
-            auto status = metaClient->getTagSchema(spaceId1,
-                    folly::stringPrintf("tag_%d", i)).get();
-            ASSERT_TRUE(status.ok());
-            auto schema = status.value();
-            ASSERT_EQ(1, schema.get_columns().size());
-            ASSERT_EQ(folly::stringPrintf("col_%d", i), schema.get_columns()[0].get_name());
-            ASSERT_EQ(meta::cpp2::PropertyType::STRING,
-                      schema.get_columns()[0].get_type().get_type());
-            ASSERT_EQ("NULL", Expression::decode(
-                    *schema.get_columns()[0].get_default_value())->eval(ctx(nullptr)).getStr());
-        }
-
-        // List tags
-        auto listStatus = metaClient->listTagSchemas(spaceId1).get();
-        ASSERT_TRUE(listStatus.ok());
-        ASSERT_EQ(10, listStatus.value().size());
-
-        // Drop tag
-        for (auto i = 5u; i < 10; i++) {
-            auto status = metaClient->dropTagSchema(spaceId1,
-                    folly::stringPrintf("tag_%d", i), true).get();
-            ASSERT_TRUE(status.ok());
-        }
-
-        // List tags
-        listStatus = metaClient->listTagSchemas(spaceId1).get();
-        ASSERT_TRUE(listStatus.ok());
-        ASSERT_EQ(5, listStatus.value().size());
-    }
-
-    // Test edge
-    {
-        // Create edge
-        for (auto i = 0u; i < 10; i++) {
-            meta::cpp2::Schema edgeSchema;
-            meta::cpp2::ColumnDef col;
-            col.set_name(folly::stringPrintf("col_%d", i));
-            col.type.set_type(meta::cpp2::PropertyType::STRING);
-            ConstantExpression defaultValue("NULL");
-            col.set_default_value(defaultValue.encode());
-            std::vector<meta::cpp2::ColumnDef> cols;
-            cols.emplace_back(col);
-            edgeSchema.set_columns(std::move(cols));
-            auto status = metaClient->createEdgeSchema(spaceId1,
-                    folly::stringPrintf("edge_%d", i), edgeSchema, false).get();
-            ASSERT_TRUE(status.ok());
-        }
-
-        // Get edge
-        for (auto i = 0u; i < 10; i++) {
-            auto status = metaClient->getEdgeSchema(spaceId1,
-                    folly::stringPrintf("edge_%d", i)).get();
-            ASSERT_TRUE(status.ok());
-            auto schema = status.value();
-            ASSERT_EQ(1, schema.get_columns().size());
-            ASSERT_EQ(folly::stringPrintf("col_%d", i), schema.get_columns()[0].get_name());
-            ASSERT_EQ(meta::cpp2::PropertyType::STRING,
-                      schema.get_columns()[0].get_type().get_type());
-            ASSERT_EQ("NULL", Expression::decode(
-                    *schema.get_columns()[0].get_default_value())->eval(ctx(nullptr)).getStr());
-        }
-
-        // List edges
-        auto listStatus = metaClient->listEdgeSchemas(spaceId1).get();
-        ASSERT_TRUE(listStatus.ok());
-        ASSERT_EQ(10, listStatus.value().size());
-
-        // Drop edge
-        for (auto i = 5u; i < 10; i++) {
-            auto status = metaClient->dropEdgeSchema(spaceId1,
-                    folly::stringPrintf("edge_%d", i), true).get();
-            ASSERT_TRUE(status.ok());
-        }
-
-        // List edges
-        listStatus = metaClient->listEdgeSchemas(spaceId1).get();
-        ASSERT_TRUE(listStatus.ok());
-        ASSERT_EQ(5, listStatus.value().size());
-    }
-    sleep(FLAGS_heartbeat_interval_secs + 1);
-}
-
-TEST_F(MockServerTest, DISABLED_TestStorage) {
-    auto storageClient = gEnv->getStorageClient();
-    GraphSpaceID space = 1;
-    std::vector<Value> props;
-    props.emplace_back("hello");
-    storage::cpp2::NewTag tag;
-    tag.set_tag_id(3);
-    tag.set_props(std::move(props));
-    std::vector<storage::cpp2::NewTag> tags;
-    tags.emplace_back(tag);
-
-    storage::cpp2::NewVertex vertex;
-    vertex.set_id("2020");
-    vertex.set_tags(std::move(tags));
-    std::vector<storage::cpp2::NewVertex> vertices;
-    vertices.emplace_back(std::move(vertex));
-
-    std::unordered_map<TagID, std::vector<std::string>> propNames;
-    propNames[3] = {"col"};
-    auto resp = storageClient->addVertices(space, vertices, propNames, false).get();
-    ASSERT_TRUE(resp.succeeded());
-}
-
-}   // namespace graph
-}   // namespace nebula
diff --git a/tests/mutate/test_insert_2.py b/tests/mutate/test_insert_2.py
index b1ecdd6a4356d8be2ab9399d3281820aae896dad..287fafea9b00c9c17eead2dd26f61a0e36dfffad 100644
--- a/tests/mutate/test_insert_2.py
+++ b/tests/mutate/test_insert_2.py
@@ -32,10 +32,12 @@ class TestInsert2(NebulaTestSuite):
     def test_insert_out_of_range_id_size(self):
         resp = self.execute('INSERT VERTEX student(name, age) VALUES "12345678901":("Tom", "2")')
         self.check_resp_failed(resp)
+        self.check_error_msg(resp, 'Storage Error: Invalid vid.')
 
     def test_insert_not_null_prop(self):
         resp = self.execute('INSERT VERTEX student(name, age) VALUES "Tom":(NULL, 12)')
         self.check_resp_failed(resp)
+        self.check_error_msg(resp, "Storage Error: The not null field cannot be null.")
 
     def test_insert_with_fix_string(self):
         # succeeded