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

laiyingchun pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-pegasus.git


The following commit(s) were added to refs/heads/master by this push:
     new 1409d090e refactor(thirdparty): Bump googletest to 1.14.0 (#1689)
1409d090e is described below

commit 1409d090e12aff7f2ecde2d5a4ab7b8b90a57070
Author: Yingchun Lai <[email protected]>
AuthorDate: Fri Nov 24 07:55:34 2023 +0800

    refactor(thirdparty): Bump googletest to 1.14.0 (#1689)
    
    This patch update the googletest to 1.14.0 which is the lateset release 
currently.
    The s2 CMake options have to be changed because it depends on googletest, I 
will
    update these again soon in a following patch.
    IWYU generate many changes automatically in this patch, most of them are 
change
    including gtest/gtest.h from angle brackets to quotes, we will fix in 
another
    patch(it's a TODO in 
https://github.com/apache/incubator-pegasus/issues/1349)
    The changes in src/block_service/test/hdfs_service_test.cpp is one of the 
benfits
    of bump googletest to 1.14.0, now we can use `GTEST_SKIP()` macro.
    This patch also add the missing parameterized for 
`cold_backup_context_test`.
---
 .licenserc.yaml                                    |  2 +-
 src/aio/test/aio.cpp                               |  5 +----
 src/base/test/redact_sensitive_string_test.cpp     |  4 +---
 src/base/test/utils_test.cpp                       |  4 +---
 src/base/test/value_manager_test.cpp               |  4 +---
 src/base/test/value_schema_test.cpp                |  4 +---
 .../test/block_service_manager_test.cpp            |  6 ++----
 src/block_service/test/fds_service_test.cpp        |  4 +---
 src/block_service/test/hdfs_service_test.cpp       | 22 ++++------------------
 src/block_service/test/local_service_test.cpp      |  5 +----
 src/client/test/ddl_client_test.cpp                |  5 +----
 src/common/test/common_test.cpp                    |  5 ++---
 src/common/test/duplication_common_test.cpp        |  4 +---
 src/common/test/fs_manager_test.cpp                |  6 +-----
 src/common/test/replication_common_test.cpp        |  5 +----
 src/failure_detector/test/failure_detector.cpp     |  5 ++---
 src/geo/test/geo_test.cpp                          |  5 +----
 src/geo/test/latlng_codec_test.cpp                 |  4 +---
 src/http/test/http_client_test.cpp                 |  3 ++-
 src/http/test/http_server_test.cpp                 |  5 +----
 src/http/test/perf_counter_http_service_test.cpp   |  4 +---
 src/http/test/uri_decoder_test.cpp                 |  4 +---
 src/meta/test/backup_test.cpp                      |  4 +---
 src/meta/test/cluster_balance_policy_test.cpp      |  5 +----
 src/meta/test/copy_replica_operation_test.cpp      |  5 +----
 src/meta/test/dump_file.cpp                        |  6 ++----
 src/meta/test/duplication_info_test.cpp            |  5 +----
 src/meta/test/ford_fulkerson_test.cpp              |  5 +----
 src/meta/test/json_compacity.cpp                   |  4 +---
 src/meta/test/meta_app_envs_test.cpp               |  4 +---
 src/meta/test/meta_app_operation_test.cpp          |  4 +---
 src/meta/test/meta_backup_test.cpp                 |  4 +---
 src/meta/test/meta_bulk_load_ingestion_test.cpp    |  5 +----
 src/meta/test/meta_bulk_load_service_test.cpp      |  4 +---
 src/meta/test/meta_data.cpp                        |  5 +----
 src/meta/test/meta_duplication_service_test.cpp    |  4 +---
 src/meta/test/meta_http_service_test.cpp           |  5 +----
 src/meta/test/meta_mauanl_compaction_test.cpp      |  5 +----
 src/meta/test/meta_partition_guardian_test.cpp     |  4 +---
 src/meta/test/meta_service_test.cpp                |  5 ++---
 src/meta/test/meta_split_service_test.cpp          |  4 +---
 src/meta/test/meta_state/meta_state_service.cpp    |  6 +-----
 src/meta/test/meta_state_service_utils_test.cpp    |  4 +---
 src/meta/test/meta_test_base.cpp                   |  5 +----
 src/meta/test/server_state_restore_test.cpp        |  4 +---
 src/meta/test/server_state_test.cpp                |  4 +---
 src/meta/test/state_sync_test.cpp                  |  4 +---
 src/meta/test/update_configuration_test.cpp        |  4 +---
 src/nfs/test/main.cpp                              |  5 +----
 src/perf_counter/perf_counter_atomic.cpp           |  1 +
 src/perf_counter/test/perf_counter_test.cpp        |  5 +----
 src/perf_counter/test/perf_counters_test.cpp       |  4 +---
 src/redis_protocol/proxy_ut/redis_proxy_test.cpp   |  4 +---
 .../backup/test/replica_backup_manager_test.cpp    |  5 +----
 .../bulk_load/test/replica_bulk_loader_test.cpp    |  5 +----
 .../test/dup_replica_http_service_test.cpp         |  5 +----
 .../test/duplication_sync_timer_test.cpp           |  6 +-----
 .../test/load_from_private_log_test.cpp            |  6 +-----
 .../duplication/test/mutation_batch_test.cpp       |  6 ++----
 .../test/replica_duplicator_manager_test.cpp       |  5 +----
 .../duplication/test/replica_duplicator_test.cpp   |  5 +----
 .../duplication/test/replica_follower_test.cpp     |  6 +-----
 .../duplication/test/ship_mutation_test.cpp        |  7 ++-----
 src/replica/split/test/replica_split_test.cpp      |  6 +-----
 src/replica/test/cold_backup_context_test.cpp      |  5 +----
 src/replica/test/log_block_test.cpp                |  5 +----
 src/replica/test/log_file_test.cpp                 |  5 +----
 src/replica/test/main.cpp                          |  5 +++--
 src/replica/test/mutation_log_learn_test.cpp       |  6 +-----
 src/replica/test/mutation_log_test.cpp             |  6 ++----
 src/replica/test/open_replica_test.cpp             |  6 +-----
 src/replica/test/replica_disk_migrate_test.cpp     |  5 +----
 src/replica/test/replica_disk_test.cpp             |  5 +----
 src/replica/test/replica_http_service_test.cpp     |  5 +----
 src/replica/test/replica_learn_test.cpp            |  6 +-----
 src/replica/test/replica_test.cpp                  |  7 ++-----
 src/replica/test/throttling_controller_test.cpp    |  4 +---
 src/runtime/rpc/asio_net_provider.cpp              | 18 ++++++++++++++++++
 src/runtime/rpc/asio_rpc_session.cpp               | 13 +++++++++++++
 src/runtime/task/hpc_task_queue.cpp                |  2 ++
 src/runtime/task/simple_task_queue.cpp             |  1 +
 src/runtime/test/address_test.cpp                  |  4 +---
 src/runtime/test/async_call.cpp                    |  5 +----
 src/runtime/test/client_negotiation_test.cpp       |  4 +---
 src/runtime/test/corrupt_message.cpp               |  2 +-
 src/runtime/test/host_port_test.cpp                |  4 +---
 src/runtime/test/lpc.cpp                           |  4 +---
 src/runtime/test/main.cpp                          |  2 +-
 src/runtime/test/message_reader_test.cpp           |  4 +---
 src/runtime/test/message_utils_test.cpp            |  4 +---
 src/runtime/test/meta_access_controller_test.cpp   |  4 +---
 src/runtime/test/negotiation_manager_test.cpp      |  5 +----
 src/runtime/test/netprovider.cpp                   |  4 +---
 src/runtime/test/pipeline_test.cpp                 |  6 ++----
 .../test/ranger_resource_policy_manager_test.cpp   |  4 +---
 src/runtime/test/ranger_resource_policy_test.cpp   |  5 +----
 .../test/replica_access_controller_test.cpp        |  4 +---
 src/runtime/test/rpc.cpp                           |  4 +---
 src/runtime/test/rpc_holder_test.cpp               |  4 +---
 src/runtime/test/rpc_message.cpp                   |  4 +---
 src/runtime/test/server_negotiation_test.cpp       |  4 +---
 src/runtime/test/service_api_c.cpp                 |  4 +---
 src/runtime/test/sim_lock.cpp                      |  4 +---
 src/runtime/test/task_engine.cpp                   |  4 +---
 src/runtime/test/task_test.cpp                     |  5 ++---
 src/runtime/test/thrift_message_parser_test.cpp    |  4 +---
 src/server/test/capacity_unit_calculator_test.cpp  |  6 +-----
 src/server/test/compaction_filter_rule_test.cpp    |  4 +---
 src/server/test/compaction_operation_test.cpp      |  4 +---
 src/server/test/hashkey_transform_test.cpp         |  4 +---
 src/server/test/hotkey_collector_test.cpp          |  5 +----
 src/server/test/hotspot_partition_test.cpp         |  6 +-----
 src/server/test/manual_compact_service_test.cpp    |  5 +----
 .../test/pegasus_compression_options_test.cpp      |  6 +-----
 .../test/pegasus_mutation_duplicator_test.cpp      |  6 ++----
 src/server/test/pegasus_server_impl_test.cpp       |  8 ++------
 src/server/test/pegasus_server_write_test.cpp      |  6 +-----
 src/server/test/pegasus_value_schema_test.cpp      |  5 ++---
 .../test/pegasus_write_service_impl_test.cpp       |  6 ++----
 src/server/test/pegasus_write_service_test.cpp     |  6 +-----
 src/server/test/rocksdb_wrapper_test.cpp           |  5 +----
 .../backup_restore/test_backup_and_restore.cpp     |  4 +---
 .../function_test/base_api/integration_test.cpp    |  4 +---
 src/test/function_test/base_api/test_basic.cpp     |  4 +---
 src/test/function_test/base_api/test_batch_get.cpp |  7 ++-----
 .../base_api/test_check_and_mutate.cpp             |  4 +---
 .../function_test/base_api/test_check_and_set.cpp  |  4 +---
 src/test/function_test/base_api/test_copy.cpp      |  6 +-----
 src/test/function_test/base_api/test_incr.cpp      |  4 +---
 .../function_test/base_api/test_range_read.cpp     |  4 +---
 src/test/function_test/base_api/test_recall.cpp    |  4 +---
 src/test/function_test/base_api/test_scan.cpp      |  6 +-----
 src/test/function_test/base_api/test_ttl.cpp       |  4 +---
 .../function_test/bulk_load/test_bulk_load.cpp     |  4 +---
 .../detect_hotspot/test_detect_hotspot.cpp         |  4 +---
 .../function_test/partition_split/test_split.cpp   |  4 +---
 src/test/function_test/recovery/test_recovery.cpp  |  5 +----
 src/test/function_test/restore/test_restore.cpp    |  4 +---
 src/test/function_test/throttle/test_throttle.cpp  |  5 +----
 src/test/function_test/utils/global_env.cpp        |  2 +-
 src/test/function_test/utils/test_util.cpp         |  3 ---
 src/test_util/test_util.cpp                        |  3 ---
 src/utils/test/TokenBucketTest.cpp                 |  6 ++----
 src/utils/test/autoref_ptr_test.cpp                |  7 ++-----
 src/utils/test/binary_reader_test.cpp              |  5 +----
 src/utils/test/command_manager_test.cpp            |  5 ++---
 src/utils/test/configuration.cpp                   |  4 +---
 src/utils/test/endian_test.cpp                     |  4 +---
 src/utils/test/env.cpp                             |  6 +-----
 src/utils/test/fail_point_test.cpp                 |  6 ++----
 src/utils/test/file_system_test.cpp                |  5 +----
 src/utils/test/file_utils.cpp                      |  6 +-----
 src/utils/test/flag_test.cpp                       |  4 +---
 src/utils/test/fmt_logging_test.cpp                |  4 +---
 src/utils/test/hostname_test.cpp                   |  4 +---
 src/utils/test/join_point_test.cpp                 |  5 ++---
 src/utils/test/json_helper_test.cpp                |  5 +----
 src/utils/test/latency_tracer_test.cpp             |  6 ++----
 src/utils/test/lock.std.cpp                        |  6 ++----
 src/utils/test/logger.cpp                          |  5 +----
 src/utils/test/long_adder_test.cpp                 |  5 +----
 src/utils/test/memutil_test.cpp                    |  7 +++----
 src/utils/test/nth_element_test.cpp                |  5 +----
 src/utils/test/output_utils_test.cpp               |  5 ++---
 src/utils/test/priority_queue.cpp                  |  4 +---
 src/utils/test/rand_test.cpp                       |  5 ++---
 src/utils/test/sema.cpp                            |  7 +++----
 src/utils/test/smart_pointers_test.cpp             |  6 ++----
 src/utils/test/string_conv_test.cpp                |  5 +----
 src/utils/test/string_view_test.cpp                |  5 ++---
 src/utils/test/time_utils_test.cpp                 |  4 +---
 .../token_bucket_throttling_controller_test.cpp    |  5 ++---
 src/utils/test/token_buckets_test.cpp              |  4 +---
 src/utils/test/utils.cpp                           |  6 ++----
 src/zookeeper/test/distributed_lock_zookeeper.cpp  |  5 +----
 thirdparty/CMakeLists.txt                          | 10 ++++++----
 thirdparty/fix_s2_build_with_cxx17.patch           | 13 +++++++++++++
 thirdparty/fix_s2_for_aarch64.patch                | 10 ----------
 178 files changed, 261 insertions(+), 634 deletions(-)

diff --git a/.licenserc.yaml b/.licenserc.yaml
index ccda24093..d6b536082 100644
--- a/.licenserc.yaml
+++ b/.licenserc.yaml
@@ -70,7 +70,7 @@ header:
     - 'thirdparty/fix_libevent_for_macos.patch'
     - 'thirdparty/fix_prometheus-cpp_limits.patch'
     - 'thirdparty/fix_rocksdb-cmake-PORTABLE-option.patch'
-    - 'thirdparty/fix_s2_for_aarch64.patch'
+    - 'thirdparty/fix_s2_build_with_cxx17.patch'
     - 'thirdparty/fix_thrift_for_cpp11.patch'
     # TODO(yingchun): shell/* files are import from thirdparties, we can move 
them to thirdparty later.
     # Copyright (c) 2016, Adi Shavit
diff --git a/src/aio/test/aio.cpp b/src/aio/test/aio.cpp
index 2fadded6d..93148c650 100644
--- a/src/aio/test/aio.cpp
+++ b/src/aio/test/aio.cpp
@@ -25,10 +25,6 @@
  */
 
 #include <fmt/core.h>
-// IWYU pragma: no_include <gtest/gtest-param-test.h>
-// IWYU pragma: no_include <gtest/gtest-message.h>
-// IWYU pragma: no_include <gtest/gtest-test-part.h>
-#include <gtest/gtest.h>
 #include <rocksdb/status.h>
 #include <string.h>
 #include <algorithm>
@@ -41,6 +37,7 @@
 
 #include "aio/aio_task.h"
 #include "aio/file_io.h"
+#include "gtest/gtest.h"
 #include "runtime/task/task_code.h"
 #include "runtime/tool_api.h"
 #include "test_util/test_util.h"
diff --git a/src/base/test/redact_sensitive_string_test.cpp 
b/src/base/test/redact_sensitive_string_test.cpp
index d0bbcd7c6..b4a9f55a1 100644
--- a/src/base/test/redact_sensitive_string_test.cpp
+++ b/src/base/test/redact_sensitive_string_test.cpp
@@ -17,12 +17,10 @@
  * under the License.
  */
 
-// IWYU pragma: no_include <gtest/gtest-message.h>
-// IWYU pragma: no_include <gtest/gtest-test-part.h>
-#include <gtest/gtest.h>
 #include <string>
 
 #include "base/pegasus_utils.h"
+#include "gtest/gtest.h"
 
 const std::string test_string = "pegasus";
 
diff --git a/src/base/test/utils_test.cpp b/src/base/test/utils_test.cpp
index ad7dcc337..ec5a34cf2 100644
--- a/src/base/test/utils_test.cpp
+++ b/src/base/test/utils_test.cpp
@@ -17,13 +17,11 @@
  * under the License.
  */
 
-// IWYU pragma: no_include <gtest/gtest-message.h>
-// IWYU pragma: no_include <gtest/gtest-test-part.h>
-#include <gtest/gtest.h>
 #include <list>
 #include <string>
 
 #include "../pegasus_utils.h"
+#include "gtest/gtest.h"
 
 namespace pegasus {
 namespace utils {
diff --git a/src/base/test/value_manager_test.cpp 
b/src/base/test/value_manager_test.cpp
index 8bfff2c57..3fbf25e3f 100644
--- a/src/base/test/value_manager_test.cpp
+++ b/src/base/test/value_manager_test.cpp
@@ -17,13 +17,11 @@
  * under the License.
  */
 
-// IWYU pragma: no_include <gtest/gtest-message.h>
-// IWYU pragma: no_include <gtest/gtest-test-part.h>
-#include <gtest/gtest.h>
 #include <stdint.h>
 #include <string>
 
 #include "base/value_schema_manager.h"
+#include "gtest/gtest.h"
 #include "pegasus_value_schema.h"
 #include "utils/string_view.h"
 #include "value_field.h"
diff --git a/src/base/test/value_schema_test.cpp 
b/src/base/test/value_schema_test.cpp
index 73b8cedd2..5c1fc0804 100644
--- a/src/base/test/value_schema_test.cpp
+++ b/src/base/test/value_schema_test.cpp
@@ -17,9 +17,6 @@
  * under the License.
  */
 
-// IWYU pragma: no_include <gtest/gtest-message.h>
-// IWYU pragma: no_include <gtest/gtest-test-part.h>
-#include <gtest/gtest.h>
 #include <rocksdb/slice.h>
 #include <stdint.h>
 #include <array>
@@ -31,6 +28,7 @@
 
 #include "base/pegasus_value_schema.h"
 #include "base/value_schema_manager.h"
+#include "gtest/gtest.h"
 #include "utils/blob.h"
 #include "utils/string_view.h"
 #include "value_field.h"
diff --git a/src/block_service/test/block_service_manager_test.cpp 
b/src/block_service/test/block_service_manager_test.cpp
index a059062b2..ee854a84f 100644
--- a/src/block_service/test/block_service_manager_test.cpp
+++ b/src/block_service/test/block_service_manager_test.cpp
@@ -15,10 +15,7 @@
 // specific language governing permissions and limitations
 // under the License.
 
-// IWYU pragma: no_include <gtest/gtest-param-test.h>
-// IWYU pragma: no_include <gtest/gtest-message.h>
-// IWYU pragma: no_include <gtest/gtest-test-part.h>
-#include <gtest/gtest.h>
+// IWYU pragma: no_include <algorithm>
 #include <cstdint>
 #include <map>
 #include <memory>
@@ -28,6 +25,7 @@
 #include "block_service/block_service_manager.h"
 #include "block_service/local/local_service.h"
 #include "block_service_mock.h"
+#include "gtest/gtest.h"
 #include "metadata_types.h"
 #include "test_util/test_util.h"
 #include "utils/error_code.h"
diff --git a/src/block_service/test/fds_service_test.cpp 
b/src/block_service/test/fds_service_test.cpp
index d06f3718a..3c8d15b2b 100644
--- a/src/block_service/test/fds_service_test.cpp
+++ b/src/block_service/test/fds_service_test.cpp
@@ -19,9 +19,6 @@
 
 #include <errno.h>
 #include <fcntl.h>
-// IWYU pragma: no_include <gtest/gtest-message.h>
-// IWYU pragma: no_include <gtest/gtest-test-part.h>
-#include <gtest/gtest.h>
 #include <stdio.h>
 #include <string.h>
 #include <sys/stat.h>
@@ -32,6 +29,7 @@
 #include <memory>
 
 #include "block_service/block_service.h"
+#include "gtest/gtest.h"
 #include "utils/autoref_ptr.h"
 #include "utils/blob.h"
 #include "utils/enum_helper.h"
diff --git a/src/block_service/test/hdfs_service_test.cpp 
b/src/block_service/test/hdfs_service_test.cpp
index 948ef990f..75f9e77b2 100644
--- a/src/block_service/test/hdfs_service_test.cpp
+++ b/src/block_service/test/hdfs_service_test.cpp
@@ -16,25 +16,20 @@
 // under the License.
 
 #include <fmt/core.h>
-#include <gtest/gtest-param-test.h>
-// IWYU pragma: no_include <gtest/gtest-message.h>
-// IWYU pragma: no_include <gtest/gtest-test-part.h>
-#include <gtest/gtest.h>
 #include <rocksdb/env.h>
 #include <rocksdb/slice.h>
 #include <rocksdb/status.h>
 #include <stdio.h>
 #include <string.h>
 #include <unistd.h>
-#include <algorithm>
 #include <cstdint>
-#include <iostream>
 #include <memory>
 #include <string>
 #include <vector>
 
 #include "block_service/block_service.h"
 #include "block_service/hdfs/hdfs_service.h"
+#include "gtest/gtest.h"
 #include "runtime/api_layer1.h"
 #include "runtime/task/async_calls.h"
 #include "runtime/task/task.h"
@@ -134,10 +129,7 @@ INSTANTIATE_TEST_CASE_P(, HDFSClientTest, 
::testing::Values(false, true));
 TEST_P(HDFSClientTest, test_hdfs_read_write)
 {
     if (strlen(FLAGS_test_name_node) == 0 || strlen(FLAGS_test_backup_path) == 
0) {
-        // TODO(yingchun): use GTEST_SKIP after upgrading gtest.
-        std::cout << "Set hdfs_test.* configs in config-test.ini to enable 
hdfs_service_test."
-                  << std::endl;
-        return;
+        GTEST_SKIP() << "Set hdfs_test.* configs in config-test.ini to enable 
hdfs_service_test.";
     }
 
     auto s = std::make_shared<hdfs_service>();
@@ -211,10 +203,7 @@ TEST_P(HDFSClientTest, test_hdfs_read_write)
 TEST_P(HDFSClientTest, test_upload_and_download)
 {
     if (strlen(FLAGS_test_name_node) == 0 || strlen(FLAGS_test_backup_path) == 
0) {
-        // TODO(yingchun): use GTEST_SKIP after upgrading gtest.
-        std::cout << "Set hdfs_test.* configs in config-test.ini to enable 
hdfs_service_test."
-                  << std::endl;
-        return;
+        GTEST_SKIP() << "Set hdfs_test.* configs in config-test.ini to enable 
hdfs_service_test.";
     }
 
     auto s = std::make_shared<hdfs_service>();
@@ -314,10 +303,7 @@ TEST_P(HDFSClientTest, test_upload_and_download)
 TEST_P(HDFSClientTest, test_concurrent_upload_download)
 {
     if (strlen(FLAGS_test_name_node) == 0 || strlen(FLAGS_test_backup_path) == 
0) {
-        // TODO(yingchun): use GTEST_SKIP after upgrading gtest.
-        std::cout << "Set hdfs_test.* configs in config-test.ini to enable 
hdfs_service_test."
-                  << std::endl;
-        return;
+        GTEST_SKIP() << "Set hdfs_test.* configs in config-test.ini to enable 
hdfs_service_test.";
     }
 
     auto s = std::make_shared<hdfs_service>();
diff --git a/src/block_service/test/local_service_test.cpp 
b/src/block_service/test/local_service_test.cpp
index a852f68ca..692a2d2c8 100644
--- a/src/block_service/test/local_service_test.cpp
+++ b/src/block_service/test/local_service_test.cpp
@@ -18,10 +18,6 @@
  */
 
 #include <boost/filesystem/operations.hpp>
-// IWYU pragma: no_include <gtest/gtest-message.h>
-// IWYU pragma: no_include <gtest/gtest-param-test.h>
-// IWYU pragma: no_include <gtest/gtest-test-part.h>
-#include <gtest/gtest.h>
 #include <nlohmann/detail/json_ref.hpp>
 #include <nlohmann/json.hpp>
 #include <nlohmann/json_fwd.hpp>
@@ -35,6 +31,7 @@
 #include <vector>
 
 #include "block_service/local/local_service.h"
+#include "gtest/gtest.h"
 #include "test_util/test_util.h"
 #include "utils/env.h"
 #include "utils/error_code.h"
diff --git a/src/client/test/ddl_client_test.cpp 
b/src/client/test/ddl_client_test.cpp
index 414c1f029..1240caf9b 100644
--- a/src/client/test/ddl_client_test.cpp
+++ b/src/client/test/ddl_client_test.cpp
@@ -16,17 +16,14 @@
 // under the License.
 
 #include <fmt/core.h>
-// IWYU pragma: no_include <gtest/gtest-message.h>
-// IWYU pragma: no_include <gtest/gtest-test-part.h>
-#include <gtest/gtest.h>
 #include <stdint.h>
-#include <algorithm>
 #include <deque>
 #include <memory>
 #include <vector>
 
 #include "client/replication_ddl_client.h"
 #include "common/replication.codes.h"
+#include "gtest/gtest.h"
 #include "meta_admin_types.h"
 #include "runtime/api_layer1.h"
 #include "runtime/rpc/rpc_address.h"
diff --git a/src/common/test/common_test.cpp b/src/common/test/common_test.cpp
index c2bf31713..2bc913fad 100644
--- a/src/common/test/common_test.cpp
+++ b/src/common/test/common_test.cpp
@@ -19,11 +19,10 @@
 
 #include "common/common.h"
 
-// IWYU pragma: no_include <gtest/gtest-message.h>
-// IWYU pragma: no_include <gtest/gtest-test-part.h>
-#include <gtest/gtest.h>
 #include <memory>
 
+#include "gtest/gtest.h"
+
 namespace dsn {
 TEST(duplication_common, get_current_cluster_name)
 {
diff --git a/src/common/test/duplication_common_test.cpp 
b/src/common/test/duplication_common_test.cpp
index 538db34da..8d5fa6354 100644
--- a/src/common/test/duplication_common_test.cpp
+++ b/src/common/test/duplication_common_test.cpp
@@ -26,11 +26,9 @@
 
 #include "common//duplication_common.h"
 
-// IWYU pragma: no_include <gtest/gtest-message.h>
-// IWYU pragma: no_include <gtest/gtest-test-part.h>
-#include <gtest/gtest.h>
 #include <cstdint>
 
+#include "gtest/gtest.h"
 #include "utils/error_code.h"
 
 namespace dsn {
diff --git a/src/common/test/fs_manager_test.cpp 
b/src/common/test/fs_manager_test.cpp
index 6027c649d..2e67dd85f 100644
--- a/src/common/test/fs_manager_test.cpp
+++ b/src/common/test/fs_manager_test.cpp
@@ -17,15 +17,10 @@
  * under the License.
  */
 
-// IWYU pragma: no_include <gtest/gtest-param-test.h>
 // IWYU pragma: no_include <ext/alloc_traits.h>
-// IWYU pragma: no_include <gtest/gtest-message.h>
-// IWYU pragma: no_include <gtest/gtest-test-part.h>
-#include <gtest/gtest.h>
 #include <stdint.h>
 #include <map>
 #include <memory>
-#include <ostream>
 #include <set>
 #include <string>
 #include <vector>
@@ -33,6 +28,7 @@
 #include "common/fs_manager.h"
 #include "common/gpid.h"
 #include "common/replication_other_types.h"
+#include "gtest/gtest.h"
 #include "metadata_types.h"
 #include "test_util/test_util.h"
 #include "utils/fail_point.h"
diff --git a/src/common/test/replication_common_test.cpp 
b/src/common/test/replication_common_test.cpp
index a25d9d7d3..f83eecae3 100644
--- a/src/common/test/replication_common_test.cpp
+++ b/src/common/test/replication_common_test.cpp
@@ -17,16 +17,13 @@
  * under the License.
  */
 
-// IWYU pragma: no_include <gtest/gtest-message.h>
-// IWYU pragma: no_include <gtest/gtest-test-part.h>
-#include <gtest/gtest.h>
 #include <stdint.h>
-#include <algorithm>
 #include <fstream>
 #include <string>
 #include <vector>
 
 #include "common/replication_common.h"
+#include "gtest/gtest.h"
 #include "utils/filesystem.h"
 
 namespace dsn {
diff --git a/src/failure_detector/test/failure_detector.cpp 
b/src/failure_detector/test/failure_detector.cpp
index b78b34b9e..42b3cbb78 100644
--- a/src/failure_detector/test/failure_detector.cpp
+++ b/src/failure_detector/test/failure_detector.cpp
@@ -25,9 +25,6 @@
  */
 
 // IWYU pragma: no_include <ext/alloc_traits.h>
-// IWYU pragma: no_include <gtest/gtest-message.h>
-// IWYU pragma: no_include <gtest/gtest-test-part.h>
-#include <gtest/gtest.h>
 #include <stdint.h>
 #include <stdlib.h>
 #include <time.h>
@@ -39,12 +36,14 @@
 #include <memory>
 #include <string>
 #include <thread>
+#include <tuple>
 #include <utility>
 #include <vector>
 
 #include "failure_detector/failure_detector.h"
 #include "failure_detector/failure_detector_multimaster.h"
 #include "fd_types.h"
+#include "gtest/gtest.h"
 #include "meta/meta_options.h"
 #include "meta/meta_server_failure_detector.h"
 #include "replica/replica_stub.h"
diff --git a/src/geo/test/geo_test.cpp b/src/geo/test/geo_test.cpp
index e9df7a422..a607faa55 100644
--- a/src/geo/test/geo_test.cpp
+++ b/src/geo/test/geo_test.cpp
@@ -18,10 +18,6 @@
  */
 
 #include <base/pegasus_key_schema.h>
-// IWYU pragma: no_include <gtest/gtest-param-test.h>
-// IWYU pragma: no_include <gtest/gtest-message.h>
-// IWYU pragma: no_include <gtest/gtest-test-part.h>
-#include <gtest/gtest.h>
 #include <math.h>
 #include <pegasus/error.h>
 #include <s2/s1angle.h>
@@ -43,6 +39,7 @@
 #include "client/replication_ddl_client.h"
 #include "common/replication_other_types.h"
 #include "geo/lib/geo_client.h"
+#include "gtest/gtest.h"
 #include "pegasus/client.h"
 #include "runtime/rpc/rpc_address.h"
 #include "utils/blob.h"
diff --git a/src/geo/test/latlng_codec_test.cpp 
b/src/geo/test/latlng_codec_test.cpp
index 22f0243cb..174d24fe0 100644
--- a/src/geo/test/latlng_codec_test.cpp
+++ b/src/geo/test/latlng_codec_test.cpp
@@ -17,15 +17,13 @@
  * under the License.
  */
 
-// IWYU pragma: no_include <gtest/gtest-message.h>
-// IWYU pragma: no_include <gtest/gtest-test-part.h>
-#include <gtest/gtest.h>
 #include <s2/s1angle.h>
 #include <s2/s2latlng.h>
 #include <s2/third_party/absl/base/port.h>
 #include <string>
 
 #include "geo/lib/latlng_codec.h"
+#include "gtest/gtest.h"
 #include "utils/errors.h"
 
 namespace pegasus {
diff --git a/src/http/test/http_client_test.cpp 
b/src/http/test/http_client_test.cpp
index d15cb7bdd..26db8e65b 100644
--- a/src/http/test/http_client_test.cpp
+++ b/src/http/test/http_client_test.cpp
@@ -16,15 +16,16 @@
 // under the License.
 
 #include <fmt/core.h>
-#include <gtest/gtest.h>
 // IWYU pragma: no_include <gtest/gtest-message.h>
 // IWYU pragma: no_include <gtest/gtest-param-test.h>
 // IWYU pragma: no_include <gtest/gtest-test-part.h>
 #include <cstring>
 #include <iostream>
 #include <string>
+#include <tuple>
 #include <vector>
 
+#include "gtest/gtest.h"
 #include "http/http_client.h"
 #include "http/http_method.h"
 #include "utils/error_code.h"
diff --git a/src/http/test/http_server_test.cpp 
b/src/http/test/http_server_test.cpp
index 0c6b9ec6d..1b01ef162 100644
--- a/src/http/test/http_server_test.cpp
+++ b/src/http/test/http_server_test.cpp
@@ -15,18 +15,15 @@
 // specific language governing permissions and limitations
 // under the License.
 
-// IWYU pragma: no_include <gtest/gtest-message.h>
-// IWYU pragma: no_include <gtest/gtest-test-part.h>
-#include <gtest/gtest.h>
 #include <stdint.h>
 #include <string.h>
-#include <algorithm>
 #include <memory>
 #include <queue>
 #include <string>
 #include <unordered_map>
 #include <vector>
 
+#include "gtest/gtest.h"
 #include "http/builtin_http_calls.h"
 #include "http/http_call_registry.h"
 #include "http/http_message_parser.h"
diff --git a/src/http/test/perf_counter_http_service_test.cpp 
b/src/http/test/perf_counter_http_service_test.cpp
index ec447d761..0f4da2690 100644
--- a/src/http/test/perf_counter_http_service_test.cpp
+++ b/src/http/test/perf_counter_http_service_test.cpp
@@ -15,12 +15,10 @@
 // specific language governing permissions and limitations
 // under the License.
 
-// IWYU pragma: no_include <gtest/gtest-message.h>
-// IWYU pragma: no_include <gtest/gtest-test-part.h>
-#include <gtest/gtest.h>
 #include <string>
 #include <unordered_map>
 
+#include "gtest/gtest.h"
 #include "http/builtin_http_calls.h"
 #include "http/http_server.h"
 #include "perf_counter/perf_counter.h"
diff --git a/src/http/test/uri_decoder_test.cpp 
b/src/http/test/uri_decoder_test.cpp
index 45cfcb734..b62e5b7bd 100644
--- a/src/http/test/uri_decoder_test.cpp
+++ b/src/http/test/uri_decoder_test.cpp
@@ -15,12 +15,10 @@
 // specific language governing permissions and limitations
 // under the License.
 
-// IWYU pragma: no_include <gtest/gtest-message.h>
-// IWYU pragma: no_include <gtest/gtest-test-part.h>
-#include <gtest/gtest.h>
 #include <http/uri_decoder.h>
 #include <string>
 
+#include "gtest/gtest.h"
 #include "utils/error_code.h"
 #include "utils/errors.h"
 
diff --git a/src/meta/test/backup_test.cpp b/src/meta/test/backup_test.cpp
index 70062ba69..9006e441d 100644
--- a/src/meta/test/backup_test.cpp
+++ b/src/meta/test/backup_test.cpp
@@ -16,9 +16,6 @@
 // under the License.
 
 #include <fmt/core.h>
-// IWYU pragma: no_include <gtest/gtest-message.h>
-// IWYU pragma: no_include <gtest/gtest-test-part.h>
-#include <gtest/gtest.h>
 #include <unistd.h>
 #include <atomic>
 #include <chrono>
@@ -36,6 +33,7 @@
 #include "common/gpid.h"
 #include "common/replication.codes.h"
 #include "dsn.layer2_types.h"
+#include "gtest/gtest.h"
 #include "meta/meta_backup_service.h"
 #include "meta/meta_data.h"
 #include "meta/meta_service.h"
diff --git a/src/meta/test/cluster_balance_policy_test.cpp 
b/src/meta/test/cluster_balance_policy_test.cpp
index e86c4ce86..0ade35a6c 100644
--- a/src/meta/test/cluster_balance_policy_test.cpp
+++ b/src/meta/test/cluster_balance_policy_test.cpp
@@ -16,10 +16,6 @@
 // under the License.
 
 // IWYU pragma: no_include <ext/alloc_traits.h>
-// IWYU pragma: no_include <gtest/gtest-message.h>
-// IWYU pragma: no_include <gtest/gtest-test-part.h>
-#include <gtest/gtest.h>
-#include <algorithm>
 #include <cstdint>
 #include <iterator>
 #include <list>
@@ -33,6 +29,7 @@
 
 #include "common/gpid.h"
 #include "dsn.layer2_types.h"
+#include "gtest/gtest.h"
 #include "meta/cluster_balance_policy.h"
 #include "meta/load_balance_policy.h"
 #include "meta/meta_data.h"
diff --git a/src/meta/test/copy_replica_operation_test.cpp 
b/src/meta/test/copy_replica_operation_test.cpp
index d20c937d3..c2f681fd3 100644
--- a/src/meta/test/copy_replica_operation_test.cpp
+++ b/src/meta/test/copy_replica_operation_test.cpp
@@ -15,11 +15,7 @@
 // specific language governing permissions and limitations
 // under the License.
 
-// IWYU pragma: no_include <gtest/gtest-message.h>
-// IWYU pragma: no_include <gtest/gtest-test-part.h>
-#include <gtest/gtest.h>
 #include <stdint.h>
-#include <algorithm>
 #include <iterator>
 #include <map>
 #include <memory>
@@ -30,6 +26,7 @@
 
 #include "common/gpid.h"
 #include "dsn.layer2_types.h"
+#include "gtest/gtest.h"
 #include "meta/app_balance_policy.h"
 #include "meta/load_balance_policy.h"
 #include "meta/meta_data.h"
diff --git a/src/meta/test/dump_file.cpp b/src/meta/test/dump_file.cpp
index 33b82ec9b..b1528c881 100644
--- a/src/meta/test/dump_file.cpp
+++ b/src/meta/test/dump_file.cpp
@@ -24,16 +24,14 @@
  * THE SOFTWARE.
  */
 
-// IWYU pragma: no_include <gtest/gtest-message.h>
-// IWYU pragma: no_include <gtest/gtest-test-part.h>
-#include <gtest/gtest.h>
 #include <stdint.h>
 #include <stdio.h>
 #include <string.h>
-#include <algorithm>
 #include <memory>
+#include <string>
 #include <vector>
 
+#include "gtest/gtest.h"
 #include "meta/dump_file.h"
 #include "utils/blob.h"
 #include "utils/strings.h"
diff --git a/src/meta/test/duplication_info_test.cpp 
b/src/meta/test/duplication_info_test.cpp
index 3ce1b9c8e..6ac67d090 100644
--- a/src/meta/test/duplication_info_test.cpp
+++ b/src/meta/test/duplication_info_test.cpp
@@ -27,11 +27,8 @@
 #include "meta/duplication/duplication_info.h"
 
 #include <boost/algorithm/string/replace.hpp>
-// IWYU pragma: no_include <gtest/gtest-message.h>
-// IWYU pragma: no_include <gtest/gtest-test-part.h>
-#include <gtest/gtest.h>
-#include <ostream>
 
+#include "gtest/gtest.h"
 #include "runtime/app_model.h"
 
 namespace dsn {
diff --git a/src/meta/test/ford_fulkerson_test.cpp 
b/src/meta/test/ford_fulkerson_test.cpp
index 858ce3d11..00b49d9be 100644
--- a/src/meta/test/ford_fulkerson_test.cpp
+++ b/src/meta/test/ford_fulkerson_test.cpp
@@ -16,17 +16,14 @@
 // under the License.
 
 // IWYU pragma: no_include <ext/alloc_traits.h>
-// IWYU pragma: no_include <gtest/gtest-message.h>
-// IWYU pragma: no_include <gtest/gtest-test-part.h>
-#include <gtest/gtest.h>
 #include <stdint.h>
-#include <algorithm>
 #include <memory>
 #include <unordered_map>
 #include <vector>
 
 #include "common/gpid.h"
 #include "dsn.layer2_types.h"
+#include "gtest/gtest.h"
 #include "meta/load_balance_policy.h"
 #include "meta/meta_data.h"
 #include "runtime/rpc/rpc_address.h"
diff --git a/src/meta/test/json_compacity.cpp b/src/meta/test/json_compacity.cpp
index dfe9828f7..66b870ede 100644
--- a/src/meta/test/json_compacity.cpp
+++ b/src/meta/test/json_compacity.cpp
@@ -24,9 +24,6 @@
  * THE SOFTWARE.
  */
 
-// IWYU pragma: no_include <gtest/gtest-message.h>
-// IWYU pragma: no_include <gtest/gtest-test-part.h>
-#include <gtest/gtest.h>
 #include <string.h>
 #include <cstdint>
 #include <iostream>
@@ -38,6 +35,7 @@
 
 #include "common/json_helper.h"
 #include "dsn.layer2_types.h"
+#include "gtest/gtest.h"
 #include "meta/meta_backup_service.h"
 #include "meta_service_test_app.h"
 #include "runtime/rpc/rpc_address.h"
diff --git a/src/meta/test/meta_app_envs_test.cpp 
b/src/meta/test/meta_app_envs_test.cpp
index d5dc21eda..f3422f7c7 100644
--- a/src/meta/test/meta_app_envs_test.cpp
+++ b/src/meta/test/meta_app_envs_test.cpp
@@ -24,15 +24,13 @@
  * THE SOFTWARE.
  */
 
-// IWYU pragma: no_include <gtest/gtest-message.h>
-// IWYU pragma: no_include <gtest/gtest-test-part.h>
-#include <gtest/gtest.h>
 #include <map>
 #include <memory>
 #include <set>
 #include <string>
 
 #include "common/replica_envs.h"
+#include "gtest/gtest.h"
 #include "meta/meta_data.h"
 #include "meta_admin_types.h"
 #include "meta_test_base.h"
diff --git a/src/meta/test/meta_app_operation_test.cpp 
b/src/meta/test/meta_app_operation_test.cpp
index e0afc1baa..a6f3cce2c 100644
--- a/src/meta/test/meta_app_operation_test.cpp
+++ b/src/meta/test/meta_app_operation_test.cpp
@@ -16,9 +16,6 @@
 // under the License.
 
 #include <fmt/core.h>
-// IWYU pragma: no_include <gtest/gtest-message.h>
-// IWYU pragma: no_include <gtest/gtest-test-part.h>
-#include <gtest/gtest.h>
 #include <stdint.h>
 #include <functional>
 #include <iostream>
@@ -34,6 +31,7 @@
 #include "common/replica_envs.h"
 #include "common/replication.codes.h"
 #include "dsn.layer2_types.h"
+#include "gtest/gtest.h"
 #include "meta/meta_data.h"
 #include "meta/meta_rpc_types.h"
 #include "meta/meta_service.h"
diff --git a/src/meta/test/meta_backup_test.cpp 
b/src/meta/test/meta_backup_test.cpp
index 3692e0724..da74bc7bf 100644
--- a/src/meta/test/meta_backup_test.cpp
+++ b/src/meta/test/meta_backup_test.cpp
@@ -15,9 +15,6 @@
 // specific language governing permissions and limitations
 // under the License.
 
-// IWYU pragma: no_include <gtest/gtest-message.h>
-// IWYU pragma: no_include <gtest/gtest-test-part.h>
-#include <gtest/gtest.h>
 #include <cstdint>
 #include <map>
 #include <memory>
@@ -29,6 +26,7 @@
 #include "common/backup_common.h"
 #include "common/gpid.h"
 #include "common/replication.codes.h"
+#include "gtest/gtest.h"
 #include "meta/backup_engine.h"
 #include "meta/meta_backup_service.h"
 #include "meta/meta_data.h"
diff --git a/src/meta/test/meta_bulk_load_ingestion_test.cpp 
b/src/meta/test/meta_bulk_load_ingestion_test.cpp
index 758fa3d3e..73bb93ae6 100644
--- a/src/meta/test/meta_bulk_load_ingestion_test.cpp
+++ b/src/meta/test/meta_bulk_load_ingestion_test.cpp
@@ -15,10 +15,6 @@
 // specific language governing permissions and limitations
 // under the License.
 
-// IWYU pragma: no_include <gtest/gtest-message.h>
-// IWYU pragma: no_include <gtest/gtest-test-part.h>
-#include <gtest/gtest.h>
-#include <algorithm>
 #include <cstdint>
 #include <memory>
 #include <string>
@@ -27,6 +23,7 @@
 
 #include "common/gpid.h"
 #include "dsn.layer2_types.h"
+#include "gtest/gtest.h"
 #include "meta/meta_bulk_load_ingestion_context.h"
 #include "meta/meta_data.h"
 #include "meta_test_base.h"
diff --git a/src/meta/test/meta_bulk_load_service_test.cpp 
b/src/meta/test/meta_bulk_load_service_test.cpp
index 1dcd5e1e6..c83f8cbbb 100644
--- a/src/meta/test/meta_bulk_load_service_test.cpp
+++ b/src/meta/test/meta_bulk_load_service_test.cpp
@@ -16,9 +16,6 @@
 // under the License.
 
 #include <boost/lexical_cast.hpp>
-// IWYU pragma: no_include <gtest/gtest-message.h>
-// IWYU pragma: no_include <gtest/gtest-test-part.h>
-#include <gtest/gtest.h>
 #include <string.h>
 #include <algorithm>
 #include <atomic>
@@ -41,6 +38,7 @@
 #include "common/replication_enums.h"
 #include "common/replication_other_types.h"
 #include "dsn.layer2_types.h"
+#include "gtest/gtest.h"
 #include "meta/meta_bulk_load_service.h"
 #include "meta/meta_data.h"
 #include "meta/meta_options.h"
diff --git a/src/meta/test/meta_data.cpp b/src/meta/test/meta_data.cpp
index 2aef6ddd5..16bcf7f1c 100644
--- a/src/meta/test/meta_data.cpp
+++ b/src/meta/test/meta_data.cpp
@@ -24,10 +24,6 @@
  * THE SOFTWARE.
  */
 
-// IWYU pragma: no_include <gtest/gtest-message.h>
-// IWYU pragma: no_include <gtest/gtest-test-part.h>
-#include <gtest/gtest.h>
-#include <algorithm>
 #include <memory>
 #include <string>
 #include <vector>
@@ -35,6 +31,7 @@
 #include "client/partition_resolver.h"
 #include "common/gpid.h"
 #include "dsn.layer2_types.h"
+#include "gtest/gtest.h"
 #include "meta/meta_data.h"
 #include "metadata_types.h"
 #include "misc/misc.h"
diff --git a/src/meta/test/meta_duplication_service_test.cpp 
b/src/meta/test/meta_duplication_service_test.cpp
index d40f2fc78..2e222d0b7 100644
--- a/src/meta/test/meta_duplication_service_test.cpp
+++ b/src/meta/test/meta_duplication_service_test.cpp
@@ -26,9 +26,6 @@
 
 // IWYU pragma: no_include <ext/alloc_traits.h>
 #include <fmt/core.h>
-// IWYU pragma: no_include <gtest/gtest-message.h>
-// IWYU pragma: no_include <gtest/gtest-test-part.h>
-#include <gtest/gtest.h>
 #include <unistd.h>
 #include <algorithm>
 #include <cstdint>
@@ -48,6 +45,7 @@
 #include "common/replication_other_types.h"
 #include "dsn.layer2_types.h"
 #include "duplication_types.h"
+#include "gtest/gtest.h"
 #include "http/http_server.h"
 #include "meta/duplication/duplication_info.h"
 #include "meta/duplication/meta_duplication_service.h"
diff --git a/src/meta/test/meta_http_service_test.cpp 
b/src/meta/test/meta_http_service_test.cpp
index 7ae0473b6..cc2497ea8 100644
--- a/src/meta/test/meta_http_service_test.cpp
+++ b/src/meta/test/meta_http_service_test.cpp
@@ -15,10 +15,6 @@
 // specific language governing permissions and limitations
 // under the License.
 
-// IWYU pragma: no_include <gtest/gtest-message.h>
-// IWYU pragma: no_include <gtest/gtest-test-part.h>
-#include <gtest/gtest.h>
-#include <algorithm>
 #include <chrono>
 #include <cstdint>
 #include <memory>
@@ -32,6 +28,7 @@
 #include "bulk_load_types.h"
 #include "common/gpid.h"
 #include "common/replication_other_types.h"
+#include "gtest/gtest.h"
 #include "http/http_server.h"
 #include "meta/meta_backup_service.h"
 #include "meta/meta_bulk_load_service.h"
diff --git a/src/meta/test/meta_mauanl_compaction_test.cpp 
b/src/meta/test/meta_mauanl_compaction_test.cpp
index 7b7407283..3a0184ff7 100644
--- a/src/meta/test/meta_mauanl_compaction_test.cpp
+++ b/src/meta/test/meta_mauanl_compaction_test.cpp
@@ -15,11 +15,7 @@
 // specific language governing permissions and limitations
 // under the License.
 
-// IWYU pragma: no_include <gtest/gtest-message.h>
-// IWYU pragma: no_include <gtest/gtest-test-part.h>
-#include <gtest/gtest.h>
 #include <stdint.h>
-#include <algorithm>
 #include <map>
 #include <memory>
 #include <string>
@@ -30,6 +26,7 @@
 #include "common/replica_envs.h"
 #include "common/replication.codes.h"
 #include "dsn.layer2_types.h"
+#include "gtest/gtest.h"
 #include "meta/meta_data.h"
 #include "meta/server_state.h"
 #include "meta_admin_types.h"
diff --git a/src/meta/test/meta_partition_guardian_test.cpp 
b/src/meta/test/meta_partition_guardian_test.cpp
index 00c444b35..403dcb3fe 100644
--- a/src/meta/test/meta_partition_guardian_test.cpp
+++ b/src/meta/test/meta_partition_guardian_test.cpp
@@ -24,9 +24,6 @@
  * THE SOFTWARE.
  */
 
-// IWYU pragma: no_include <gtest/gtest-message.h>
-// IWYU pragma: no_include <gtest/gtest-test-part.h>
-#include <gtest/gtest.h>
 #include <algorithm>
 #include <atomic>
 #include <chrono>
@@ -45,6 +42,7 @@
 #include "common/replication_other_types.h"
 #include "dsn.layer2_types.h"
 #include "dummy_balancer.h"
+#include "gtest/gtest.h"
 #include "meta/greedy_load_balancer.h"
 #include "meta/meta_data.h"
 #include "meta/meta_options.h"
diff --git a/src/meta/test/meta_service_test.cpp 
b/src/meta/test/meta_service_test.cpp
index 2bb7ee299..44fc1ea62 100644
--- a/src/meta/test/meta_service_test.cpp
+++ b/src/meta/test/meta_service_test.cpp
@@ -16,13 +16,12 @@
 // under the License.
 
 #include <fmt/core.h>
-// IWYU pragma: no_include <gtest/gtest-message.h>
-// IWYU pragma: no_include <gtest/gtest-test-part.h>
-#include <gtest/gtest.h>
 #include <memory>
+#include <string>
 #include <vector>
 
 #include "common/replication.codes.h"
+#include "gtest/gtest.h"
 #include "meta/meta_rpc_types.h"
 #include "meta/meta_service.h"
 #include "meta_admin_types.h"
diff --git a/src/meta/test/meta_split_service_test.cpp 
b/src/meta/test/meta_split_service_test.cpp
index ea611c633..12cd090eb 100644
--- a/src/meta/test/meta_split_service_test.cpp
+++ b/src/meta/test/meta_split_service_test.cpp
@@ -26,9 +26,6 @@
 
 #include <boost/cstdint.hpp>
 #include <boost/lexical_cast.hpp>
-// IWYU pragma: no_include <gtest/gtest-message.h>
-// IWYU pragma: no_include <gtest/gtest-test-part.h>
-#include <gtest/gtest.h>
 #include <string.h>
 #include <algorithm>
 #include <atomic>
@@ -48,6 +45,7 @@
 #include "common/replication.codes.h"
 #include "common/replication_other_types.h"
 #include "dsn.layer2_types.h"
+#include "gtest/gtest.h"
 #include "meta/meta_data.h"
 #include "meta/meta_rpc_types.h"
 #include "meta/meta_server_failure_detector.h"
diff --git a/src/meta/test/meta_state/meta_state_service.cpp 
b/src/meta/test/meta_state/meta_state_service.cpp
index 2bc59246d..05c1ade6a 100644
--- a/src/meta/test/meta_state/meta_state_service.cpp
+++ b/src/meta/test/meta_state/meta_state_service.cpp
@@ -27,14 +27,10 @@
 #include "meta/meta_state_service.h"
 
 #include <boost/lexical_cast.hpp>
-// IWYU pragma: no_include <gtest/gtest-param-test.h>
-// IWYU pragma: no_include <ext/alloc_traits.h>
-// IWYU pragma: no_include <gtest/gtest-message.h>
-// IWYU pragma: no_include <gtest/gtest-test-part.h>
-#include <gtest/gtest.h>
 #include <chrono>
 #include <thread>
 
+#include "gtest/gtest.h"
 #include "meta/meta_state_service_simple.h"
 #include "meta/meta_state_service_zookeeper.h"
 #include "runtime/service_app.h"
diff --git a/src/meta/test/meta_state_service_utils_test.cpp 
b/src/meta/test/meta_state_service_utils_test.cpp
index f6ea0388a..fa4cf3dee 100644
--- a/src/meta/test/meta_state_service_utils_test.cpp
+++ b/src/meta/test/meta_state_service_utils_test.cpp
@@ -25,14 +25,12 @@
  */
 
 #include <fmt/core.h>
-// IWYU pragma: no_include <gtest/gtest-message.h>
-// IWYU pragma: no_include <gtest/gtest-test-part.h>
-#include <gtest/gtest.h>
 #include <algorithm>
 #include <queue>
 #include <string>
 #include <vector>
 
+#include "gtest/gtest.h"
 #include "meta/meta_state_service.h"
 #include "meta/meta_state_service_utils.h"
 #include "runtime/task/task_tracker.h"
diff --git a/src/meta/test/meta_test_base.cpp b/src/meta/test/meta_test_base.cpp
index 65da20929..d05d8a145 100644
--- a/src/meta/test/meta_test_base.cpp
+++ b/src/meta/test/meta_test_base.cpp
@@ -17,18 +17,15 @@
 
 #include "meta_test_base.h"
 
-// IWYU pragma: no_include <gtest/gtest-message.h>
-// IWYU pragma: no_include <gtest/gtest-test-part.h>
-#include <algorithm>
 #include <atomic>
 #include <chrono>
 #include <map>
-#include <ostream>
 #include <thread>
 #include <unordered_map>
 #include <utility>
 
 #include "common/replication.codes.h"
+#include "gtest/gtest.h"
 #include "meta/meta_bulk_load_service.h"
 #include "meta/meta_data.h"
 #include "meta/meta_options.h"
diff --git a/src/meta/test/server_state_restore_test.cpp 
b/src/meta/test/server_state_restore_test.cpp
index 96e8de65e..6c997b69d 100644
--- a/src/meta/test/server_state_restore_test.cpp
+++ b/src/meta/test/server_state_restore_test.cpp
@@ -15,9 +15,6 @@
 // specific language governing permissions and limitations
 // under the License.
 
-// IWYU pragma: no_include <gtest/gtest-message.h>
-// IWYU pragma: no_include <gtest/gtest-test-part.h>
-#include <gtest/gtest.h>
 #include <stdint.h>
 #include <unistd.h>
 #include <map>
@@ -29,6 +26,7 @@
 #include "common/backup_common.h"
 #include "common/replication.codes.h"
 #include "dsn.layer2_types.h"
+#include "gtest/gtest.h"
 #include "meta/meta_backup_service.h"
 #include "meta/meta_data.h"
 #include "meta/meta_rpc_types.h"
diff --git a/src/meta/test/server_state_test.cpp 
b/src/meta/test/server_state_test.cpp
index 9c7e95962..25f5ac2ad 100644
--- a/src/meta/test/server_state_test.cpp
+++ b/src/meta/test/server_state_test.cpp
@@ -24,9 +24,6 @@
  * THE SOFTWARE.
  */
 
-// IWYU pragma: no_include <gtest/gtest-message.h>
-// IWYU pragma: no_include <gtest/gtest-test-part.h>
-#include <gtest/gtest.h>
 #include <iostream>
 #include <map>
 #include <memory>
@@ -37,6 +34,7 @@
 
 #include "common/replication.codes.h"
 #include "dsn.layer2_types.h"
+#include "gtest/gtest.h"
 #include "meta/meta_data.h"
 #include "meta/meta_rpc_types.h"
 #include "meta/meta_service.h"
diff --git a/src/meta/test/state_sync_test.cpp 
b/src/meta/test/state_sync_test.cpp
index 2e1afacf8..eb3d7598f 100644
--- a/src/meta/test/state_sync_test.cpp
+++ b/src/meta/test/state_sync_test.cpp
@@ -25,9 +25,6 @@
  */
 
 #include <boost/lexical_cast.hpp>
-// IWYU pragma: no_include <gtest/gtest-message.h>
-// IWYU pragma: no_include <gtest/gtest-test-part.h>
-#include <gtest/gtest.h>
 #include <algorithm>
 #include <cstdint>
 #include <fstream> // IWYU pragma: keep
@@ -41,6 +38,7 @@
 #include "common/gpid.h"
 #include "common/replication.codes.h"
 #include "dsn.layer2_types.h"
+#include "gtest/gtest.h"
 #include "meta/meta_data.h"
 #include "meta/meta_service.h"
 #include "meta/meta_state_service.h"
diff --git a/src/meta/test/update_configuration_test.cpp 
b/src/meta/test/update_configuration_test.cpp
index 4feba0923..4c5c4cffe 100644
--- a/src/meta/test/update_configuration_test.cpp
+++ b/src/meta/test/update_configuration_test.cpp
@@ -25,9 +25,6 @@
  */
 
 // IWYU pragma: no_include <ext/alloc_traits.h>
-// IWYU pragma: no_include <gtest/gtest-message.h>
-// IWYU pragma: no_include <gtest/gtest-test-part.h>
-#include <gtest/gtest.h>
 #include <algorithm>
 #include <atomic>
 #include <chrono>
@@ -45,6 +42,7 @@
 #include "common/replication_other_types.h"
 #include "dsn.layer2_types.h"
 #include "dummy_balancer.h"
+#include "gtest/gtest.h"
 #include "meta/greedy_load_balancer.h"
 #include "meta/meta_data.h"
 #include "meta/meta_options.h"
diff --git a/src/nfs/test/main.cpp b/src/nfs/test/main.cpp
index 60564bf6b..49ededed0 100644
--- a/src/nfs/test/main.cpp
+++ b/src/nfs/test/main.cpp
@@ -24,10 +24,6 @@
  * THE SOFTWARE.
  */
 
-// IWYU pragma: no_include <gtest/gtest-param-test.h>
-// IWYU pragma: no_include <gtest/gtest-message.h>
-// IWYU pragma: no_include <gtest/gtest-test-part.h>
-#include <gtest/gtest.h>
 #include <rocksdb/status.h>
 #include <stddef.h>
 #include <algorithm>
@@ -39,6 +35,7 @@
 
 #include "aio/aio_task.h"
 #include "common/gpid.h"
+#include "gtest/gtest.h"
 #include "nfs/nfs_node.h"
 #include "runtime/app_model.h"
 #include "runtime/rpc/rpc_address.h"
diff --git a/src/perf_counter/perf_counter_atomic.cpp 
b/src/perf_counter/perf_counter_atomic.cpp
index 90f08d3f6..0f88ccd47 100644
--- a/src/perf_counter/perf_counter_atomic.cpp
+++ b/src/perf_counter/perf_counter_atomic.cpp
@@ -17,6 +17,7 @@
 
 #include "perf_counter/perf_counter_atomic.h"
 
+#include <boost/asio/basic_deadline_timer.hpp>
 #include <stdlib.h>
 #include <functional>
 #include <new>
diff --git a/src/perf_counter/test/perf_counter_test.cpp 
b/src/perf_counter/test/perf_counter_test.cpp
index 0758ef807..a95dc29df 100644
--- a/src/perf_counter/test/perf_counter_test.cpp
+++ b/src/perf_counter/test/perf_counter_test.cpp
@@ -34,17 +34,14 @@
  */
 
 // IWYU pragma: no_include <ext/alloc_traits.h>
-// IWYU pragma: no_include <gtest/gtest-message.h>
-// IWYU pragma: no_include <gtest/gtest-test-part.h>
-#include <gtest/gtest.h>
 #include <stdlib.h>
-#include <algorithm>
 #include <chrono>
 #include <functional>
 #include <memory>
 #include <thread>
 #include <vector>
 
+#include "gtest/gtest.h"
 #include "perf_counter/perf_counter.h"
 #include "perf_counter/perf_counter_atomic.h"
 #include "utils/autoref_ptr.h"
diff --git a/src/perf_counter/test/perf_counters_test.cpp 
b/src/perf_counter/test/perf_counters_test.cpp
index eb495ee55..4dfcd008e 100644
--- a/src/perf_counter/test/perf_counters_test.cpp
+++ b/src/perf_counter/test/perf_counters_test.cpp
@@ -35,13 +35,11 @@
 
 #include "perf_counter/perf_counters.h"
 
-// IWYU pragma: no_include <gtest/gtest-message.h>
-// IWYU pragma: no_include <gtest/gtest-test-part.h>
-#include <gtest/gtest.h>
 #include <stdio.h>
 #include <map>
 
 #include "common/json_helper.h"
+#include "gtest/gtest.h"
 #include "perf_counter/perf_counter.h"
 #include "perf_counter/perf_counter_utils.h"
 #include "perf_counter/perf_counter_wrapper.h"
diff --git a/src/redis_protocol/proxy_ut/redis_proxy_test.cpp 
b/src/redis_protocol/proxy_ut/redis_proxy_test.cpp
index 400c41b4c..3436cc324 100644
--- a/src/redis_protocol/proxy_ut/redis_proxy_test.cpp
+++ b/src/redis_protocol/proxy_ut/redis_proxy_test.cpp
@@ -31,9 +31,6 @@
 // IWYU pragma: no_include <boost/asio/ip/tcp.hpp>
 // IWYU pragma: no_include <boost/asio/socket_base.hpp>
 #include <boost/system/error_code.hpp>
-// IWYU pragma: no_include <gtest/gtest-message.h>
-// IWYU pragma: no_include <gtest/gtest-test-part.h>
-#include <gtest/gtest.h>
 #include <gtest/gtest_prod.h>
 #include <s2/third_party/absl/base/port.h>
 #include <string.h>
@@ -46,6 +43,7 @@
 #include <vector>
 
 #include "geo/lib/geo_client.h"
+#include "gtest/gtest.h"
 #include "proxy_layer.h"
 #include "redis_parser.h"
 #include "runtime/app_model.h"
diff --git a/src/replica/backup/test/replica_backup_manager_test.cpp 
b/src/replica/backup/test/replica_backup_manager_test.cpp
index ec3fb957f..467ad9507 100644
--- a/src/replica/backup/test/replica_backup_manager_test.cpp
+++ b/src/replica/backup/test/replica_backup_manager_test.cpp
@@ -15,13 +15,10 @@
 // specific language governing permissions and limitations
 // under the License.
 
-// IWYU pragma: no_include <gtest/gtest-param-test.h>
-// IWYU pragma: no_include <gtest/gtest-message.h>
-// IWYU pragma: no_include <gtest/gtest-test-part.h>
-#include <gtest/gtest.h>
 #include <memory>
 #include <string>
 
+#include "gtest/gtest.h"
 #include "replica/backup/replica_backup_manager.h"
 #include "replica/replication_app_base.h"
 #include "replica/test/mock_utils.h"
diff --git a/src/replica/bulk_load/test/replica_bulk_loader_test.cpp 
b/src/replica/bulk_load/test/replica_bulk_loader_test.cpp
index 3a27ee3ba..59a00cd28 100644
--- a/src/replica/bulk_load/test/replica_bulk_loader_test.cpp
+++ b/src/replica/bulk_load/test/replica_bulk_loader_test.cpp
@@ -18,10 +18,6 @@
 #include "replica/bulk_load/replica_bulk_loader.h"
 
 #include <fmt/core.h>
-// IWYU pragma: no_include <gtest/gtest-param-test.h>
-// IWYU pragma: no_include <gtest/gtest-message.h>
-// IWYU pragma: no_include <gtest/gtest-test-part.h>
-#include <gtest/gtest.h>
 #include <rocksdb/env.h>
 #include <rocksdb/slice.h>
 #include <rocksdb/status.h>
@@ -33,6 +29,7 @@
 #include "common/gpid.h"
 #include "common/json_helper.h"
 #include "dsn.layer2_types.h"
+#include "gtest/gtest.h"
 #include "replica/test/mock_utils.h"
 #include "replica/test/replica_test_base.h"
 #include "runtime/rpc/rpc_address.h"
diff --git a/src/replica/duplication/test/dup_replica_http_service_test.cpp 
b/src/replica/duplication/test/dup_replica_http_service_test.cpp
index 80b2fb87c..70b123e32 100644
--- a/src/replica/duplication/test/dup_replica_http_service_test.cpp
+++ b/src/replica/duplication/test/dup_replica_http_service_test.cpp
@@ -15,10 +15,6 @@
 // specific language governing permissions and limitations
 // under the License.
 
-// IWYU pragma: no_include <gtest/gtest-param-test.h>
-// IWYU pragma: no_include <gtest/gtest-message.h>
-// IWYU pragma: no_include <gtest/gtest-test-part.h>
-#include <gtest/gtest.h>
 #include <cstdint>
 #include <map>
 #include <memory>
@@ -28,6 +24,7 @@
 #include "common/gpid.h"
 #include "duplication_test_base.h"
 #include "duplication_types.h"
+#include "gtest/gtest.h"
 #include "http/http_server.h"
 #include "replica/duplication/replica_duplicator.h"
 #include "replica/replica_http_service.h"
diff --git a/src/replica/duplication/test/duplication_sync_timer_test.cpp 
b/src/replica/duplication/test/duplication_sync_timer_test.cpp
index c680ddcbe..28df54237 100644
--- a/src/replica/duplication/test/duplication_sync_timer_test.cpp
+++ b/src/replica/duplication/test/duplication_sync_timer_test.cpp
@@ -17,20 +17,16 @@
 
 #include "replica/duplication/duplication_sync_timer.h"
 
-// IWYU pragma: no_include <gtest/gtest-param-test.h>
-// IWYU pragma: no_include <gtest/gtest-message.h>
-// IWYU pragma: no_include <gtest/gtest-test-part.h>
-#include <gtest/gtest.h>
 #include <cstdint>
 #include <initializer_list>
 #include <memory>
-#include <ostream>
 #include <string>
 #include <utility>
 
 #include "common/duplication_common.h"
 #include "common/replication.codes.h"
 #include "duplication_test_base.h"
+#include "gtest/gtest.h"
 #include "replica/duplication/replica_duplicator.h"
 #include "replica/duplication/replica_duplicator_manager.h"
 #include "replica/test/mock_utils.h"
diff --git a/src/replica/duplication/test/load_from_private_log_test.cpp 
b/src/replica/duplication/test/load_from_private_log_test.cpp
index e44bb74a3..e55789929 100644
--- a/src/replica/duplication/test/load_from_private_log_test.cpp
+++ b/src/replica/duplication/test/load_from_private_log_test.cpp
@@ -17,11 +17,6 @@
 
 // IWYU pragma: no_include <ext/alloc_traits.h>
 #include <fmt/core.h>
-// IWYU pragma: no_include <gtest/gtest-param-test.h>
-// IWYU pragma: no_include <gtest/gtest-message.h>
-// IWYU pragma: no_include <gtest/gtest-param-test.h>
-// IWYU pragma: no_include <gtest/gtest-test-part.h>
-#include <gtest/gtest.h>
 #include <rocksdb/status.h>
 #include <stdint.h>
 #include <sys/types.h>
@@ -33,6 +28,7 @@
 #include "common/replication_other_types.h"
 #include "consensus_types.h"
 #include "duplication_types.h"
+#include "gtest/gtest.h"
 #include "perf_counter/perf_counter.h"
 #include "perf_counter/perf_counter_wrapper.h"
 #include "replica/duplication/mutation_duplicator.h"
diff --git a/src/replica/duplication/test/mutation_batch_test.cpp 
b/src/replica/duplication/test/mutation_batch_test.cpp
index a41aa8ab8..95068ba45 100644
--- a/src/replica/duplication/test/mutation_batch_test.cpp
+++ b/src/replica/duplication/test/mutation_batch_test.cpp
@@ -15,20 +15,18 @@
 // specific language governing permissions and limitations
 // under the License.
 
-// IWYU pragma: no_include <gtest/gtest-param-test.h>
-// IWYU pragma: no_include <gtest/gtest-message.h>
-// IWYU pragma: no_include <gtest/gtest-test-part.h>
-#include <gtest/gtest.h>
 #include <atomic>
 #include <map>
 #include <memory>
 #include <string>
+#include <tuple>
 #include <utility>
 #include <vector>
 
 #include "common/replication_other_types.h"
 #include "consensus_types.h"
 #include "duplication_test_base.h"
+#include "gtest/gtest.h"
 #include "replica/duplication/mutation_batch.h"
 #include "replica/duplication/mutation_duplicator.h"
 #include "replica/mutation.h"
diff --git a/src/replica/duplication/test/replica_duplicator_manager_test.cpp 
b/src/replica/duplication/test/replica_duplicator_manager_test.cpp
index 93aed6dd8..31dbacc67 100644
--- a/src/replica/duplication/test/replica_duplicator_manager_test.cpp
+++ b/src/replica/duplication/test/replica_duplicator_manager_test.cpp
@@ -15,10 +15,6 @@
 // specific language governing permissions and limitations
 // under the License.
 
-// IWYU pragma: no_include <gtest/gtest-param-test.h>
-// IWYU pragma: no_include <gtest/gtest-message.h>
-// IWYU pragma: no_include <gtest/gtest-test-part.h>
-#include <gtest/gtest.h>
 #include <cstdint>
 #include <map>
 #include <memory>
@@ -31,6 +27,7 @@
 #include "common/replication_other_types.h"
 #include "duplication_test_base.h"
 #include "duplication_types.h"
+#include "gtest/gtest.h"
 #include "replica/duplication/replica_duplicator.h"
 #include "replica/duplication/replica_duplicator_manager.h"
 #include "replica/test/mock_utils.h"
diff --git a/src/replica/duplication/test/replica_duplicator_test.cpp 
b/src/replica/duplication/test/replica_duplicator_test.cpp
index 87fcd374b..3c3847a62 100644
--- a/src/replica/duplication/test/replica_duplicator_test.cpp
+++ b/src/replica/duplication/test/replica_duplicator_test.cpp
@@ -15,10 +15,6 @@
 // specific language governing permissions and limitations
 // under the License.
 
-// IWYU pragma: no_include <gtest/gtest-param-test.h>
-// IWYU pragma: no_include <gtest/gtest-message.h>
-// IWYU pragma: no_include <gtest/gtest-test-part.h>
-#include <gtest/gtest.h>
 #include <cstdint>
 #include <map>
 #include <memory>
@@ -29,6 +25,7 @@
 #include "common/replication_other_types.h"
 #include "duplication_test_base.h"
 #include "duplication_types.h"
+#include "gtest/gtest.h"
 #include "metadata_types.h"
 #include "replica/duplication/duplication_pipeline.h"
 #include "replica/duplication/mutation_duplicator.h"
diff --git a/src/replica/duplication/test/replica_follower_test.cpp 
b/src/replica/duplication/test/replica_follower_test.cpp
index a961c3604..eb4b1e4aa 100644
--- a/src/replica/duplication/test/replica_follower_test.cpp
+++ b/src/replica/duplication/test/replica_follower_test.cpp
@@ -15,11 +15,6 @@
 // specific language governing permissions and limitations
 // under the License.
 
-// IWYU pragma: no_include <gtest/gtest-param-test.h>
-// IWYU pragma: no_include <gtest/gtest-message.h>
-// IWYU pragma: no_include <gtest/gtest-test-part.h>
-#include <gtest/gtest.h>
-#include <algorithm>
 #include <map>
 #include <memory>
 #include <string>
@@ -31,6 +26,7 @@
 #include "consensus_types.h"
 #include "dsn.layer2_types.h"
 #include "duplication_test_base.h"
+#include "gtest/gtest.h"
 #include "metadata_types.h"
 #include "nfs/nfs_node.h"
 #include "replica/duplication/replica_follower.h"
diff --git a/src/replica/duplication/test/ship_mutation_test.cpp 
b/src/replica/duplication/test/ship_mutation_test.cpp
index 29e17f2a8..dc04b25fe 100644
--- a/src/replica/duplication/test/ship_mutation_test.cpp
+++ b/src/replica/duplication/test/ship_mutation_test.cpp
@@ -15,19 +15,16 @@
 // specific language governing permissions and limitations
 // under the License.
 
-// IWYU pragma: no_include <gtest/gtest-param-test.h>
-// IWYU pragma: no_include <gtest/gtest-message.h>
-// IWYU pragma: no_include <gtest/gtest-test-part.h>
-#include <gtest/gtest.h>
-#include <algorithm>
 #include <functional>
 #include <map>
 #include <memory>
+#include <tuple>
 #include <utility>
 #include <vector>
 
 #include "common/replication.codes.h"
 #include "duplication_test_base.h"
+#include "gtest/gtest.h"
 #include "replica/duplication/duplication_pipeline.h"
 #include "replica/duplication/mutation_batch.h"
 #include "replica/duplication/mutation_duplicator.h"
diff --git a/src/replica/split/test/replica_split_test.cpp 
b/src/replica/split/test/replica_split_test.cpp
index c0edc3a01..2e5ebe5e2 100644
--- a/src/replica/split/test/replica_split_test.cpp
+++ b/src/replica/split/test/replica_split_test.cpp
@@ -15,12 +15,7 @@
 // specific language governing permissions and limitations
 // under the License.
 
-// IWYU pragma: no_include <gtest/gtest-param-test.h>
-// IWYU pragma: no_include <gtest/gtest-message.h>
-// IWYU pragma: no_include <gtest/gtest-test-part.h>
-#include <gtest/gtest.h>
 #include <stdint.h>
-#include <algorithm>
 #include <atomic>
 #include <memory>
 #include <string>
@@ -34,6 +29,7 @@
 #include "common/replication_other_types.h"
 #include "consensus_types.h"
 #include "dsn.layer2_types.h"
+#include "gtest/gtest.h"
 #include "metadata_types.h"
 #include "partition_split_types.h"
 #include "replica/mutation.h"
diff --git a/src/replica/test/cold_backup_context_test.cpp 
b/src/replica/test/cold_backup_context_test.cpp
index 8419959c6..529ac0a09 100644
--- a/src/replica/test/cold_backup_context_test.cpp
+++ b/src/replica/test/cold_backup_context_test.cpp
@@ -15,10 +15,6 @@
 // specific language governing permissions and limitations
 // under the License.
 
-// IWYU pragma: no_include <gtest/gtest-message.h>
-// IWYU pragma: no_include <gtest/gtest-test-part.h>
-#include <gtest/gtest.h>
-#include <algorithm>
 #include <atomic>
 #include <cstdint>
 #include <iostream>
@@ -36,6 +32,7 @@
 #include "common/backup_common.h"
 #include "common/gpid.h"
 #include "common/json_helper.h"
+#include "gtest/gtest.h"
 #include "metadata_types.h"
 #include "replica/backup/cold_backup_context.h"
 #include "replica/replica.h"
diff --git a/src/replica/test/log_block_test.cpp 
b/src/replica/test/log_block_test.cpp
index ada8829e0..a8d8b2d23 100644
--- a/src/replica/test/log_block_test.cpp
+++ b/src/replica/test/log_block_test.cpp
@@ -15,16 +15,13 @@
 // specific language governing permissions and limitations
 // under the License.
 
-// IWYU pragma: no_include <gtest/gtest-param-test.h>
-// IWYU pragma: no_include <gtest/gtest-message.h>
-// IWYU pragma: no_include <gtest/gtest-test-part.h>
-#include <gtest/gtest.h>
 #include <stddef.h>
 #include <string>
 #include <utility>
 #include <vector>
 
 #include "consensus_types.h"
+#include "gtest/gtest.h"
 #include "replica/log_block.h"
 #include "replica/mutation.h"
 #include "replica_test_base.h"
diff --git a/src/replica/test/log_file_test.cpp 
b/src/replica/test/log_file_test.cpp
index e0736f15c..2827e6395 100644
--- a/src/replica/test/log_file_test.cpp
+++ b/src/replica/test/log_file_test.cpp
@@ -15,10 +15,6 @@
 // specific language governing permissions and limitations
 // under the License.
 
-// IWYU pragma: no_include <gtest/gtest-param-test.h>
-// IWYU pragma: no_include <gtest/gtest-message.h>
-// IWYU pragma: no_include <gtest/gtest-test-part.h>
-#include <gtest/gtest.h>
 #include <stddef.h>
 #include <memory>
 #include <string>
@@ -26,6 +22,7 @@
 
 #include "aio/aio_task.h"
 #include "common/replication.codes.h"
+#include "gtest/gtest.h"
 #include "replica/log_block.h"
 #include "replica/log_file.h"
 #include "replica_test_base.h"
diff --git a/src/replica/test/main.cpp b/src/replica/test/main.cpp
index 6e414ffdd..f4f03e0c3 100644
--- a/src/replica/test/main.cpp
+++ b/src/replica/test/main.cpp
@@ -15,13 +15,12 @@
 // specific language governing permissions and limitations
 // under the License.
 
-// IWYU pragma: no_include <gtest/gtest-param-test.h>
-#include <gtest/gtest.h>
 #include <chrono>
 #include <string>
 #include <thread>
 #include <vector>
 
+#include "gtest/gtest.h"
 #include "replication_service_test_app.h"
 #include "runtime/app_model.h"
 #include "runtime/service_app.h"
@@ -36,6 +35,8 @@ class cold_backup_context_test : public 
pegasus::encrypt_data_test_base
 {
 };
 
+INSTANTIATE_TEST_CASE_P(, cold_backup_context_test, ::testing::Values(false, 
true));
+
 TEST_P(cold_backup_context_test, check_backup_on_remote) { 
app->check_backup_on_remote_test(); }
 
 TEST_P(cold_backup_context_test, read_current_chkpt_file) { 
app->read_current_chkpt_file_test(); }
diff --git a/src/replica/test/mutation_log_learn_test.cpp 
b/src/replica/test/mutation_log_learn_test.cpp
index b14701b44..f5946b53e 100644
--- a/src/replica/test/mutation_log_learn_test.cpp
+++ b/src/replica/test/mutation_log_learn_test.cpp
@@ -24,12 +24,7 @@
  * THE SOFTWARE.
  */
 
-// IWYU pragma: no_include <gtest/gtest-param-test.h>
-// IWYU pragma: no_include <gtest/gtest-message.h>
-// IWYU pragma: no_include <gtest/gtest-test-part.h>
-#include <gtest/gtest.h>
 #include <stdint.h>
-#include <algorithm>
 #include <chrono>
 #include <iostream>
 #include <memory>
@@ -41,6 +36,7 @@
 #include "common/replication.codes.h"
 #include "common/replication_other_types.h"
 #include "consensus_types.h"
+#include "gtest/gtest.h"
 #include "replica/mutation.h"
 #include "replica/mutation_log.h"
 #include "replica/test/mock_utils.h"
diff --git a/src/replica/test/mutation_log_test.cpp 
b/src/replica/test/mutation_log_test.cpp
index 1cdaec67f..eb4cdf6e2 100644
--- a/src/replica/test/mutation_log_test.cpp
+++ b/src/replica/test/mutation_log_test.cpp
@@ -27,14 +27,11 @@
 #include "replica/mutation_log.h"
 
 // IWYU pragma: no_include <ext/alloc_traits.h>
-// IWYU pragma: no_include <gtest/gtest-message.h>
-// IWYU pragma: no_include <gtest/gtest-param-test.h>
-// IWYU pragma: no_include <gtest/gtest-test-part.h>
-#include <gtest/gtest.h>
 #include <sys/types.h>
 #include <cstdint>
 #include <iostream>
 #include <limits>
+#include <tuple>
 #include <unordered_map>
 
 #include "aio/aio_task.h"
@@ -42,6 +39,7 @@
 #include "backup_types.h"
 #include "common/replication.codes.h"
 #include "consensus_types.h"
+#include "gtest/gtest.h"
 #include "replica/log_block.h"
 #include "replica/log_file.h"
 #include "replica/mutation.h"
diff --git a/src/replica/test/open_replica_test.cpp 
b/src/replica/test/open_replica_test.cpp
index 1fa4ebe6f..0cc7d5cd7 100644
--- a/src/replica/test/open_replica_test.cpp
+++ b/src/replica/test/open_replica_test.cpp
@@ -15,11 +15,6 @@
 // specific language governing permissions and limitations
 // under the License.
 
-#include <gtest/gtest-death-test.h>
-// IWYU pragma: no_include <gtest/gtest-param-test.h>
-// IWYU pragma: no_include <gtest/gtest-message.h>
-// IWYU pragma: no_include <gtest/gtest-test-part.h>
-#include <gtest/gtest.h>
 #include <stdint.h>
 #include <memory>
 #include <string>
@@ -28,6 +23,7 @@
 #include "common/gpid.h"
 #include "common/replication_other_types.h"
 #include "dsn.layer2_types.h"
+#include "gtest/gtest.h"
 #include "meta/meta_data.h"
 #include "meta_admin_types.h"
 #include "mock_utils.h"
diff --git a/src/replica/test/replica_disk_migrate_test.cpp 
b/src/replica/test/replica_disk_migrate_test.cpp
index 376f2d71a..f730b2fd1 100644
--- a/src/replica/test/replica_disk_migrate_test.cpp
+++ b/src/replica/test/replica_disk_migrate_test.cpp
@@ -18,10 +18,6 @@
  */
 
 #include <fmt/core.h>
-// IWYU pragma: no_include <gtest/gtest-param-test.h>
-// IWYU pragma: no_include <gtest/gtest-message.h>
-// IWYU pragma: no_include <gtest/gtest-test-part.h>
-#include <gtest/gtest.h>
 #include <map>
 #include <memory>
 #include <set>
@@ -34,6 +30,7 @@
 #include "common/replication.codes.h"
 #include "common/replication_other_types.h"
 #include "dsn.layer2_types.h"
+#include "gtest/gtest.h"
 #include "metadata_types.h"
 #include "replica/replica.h"
 #include "replica/replica_disk_migrator.h"
diff --git a/src/replica/test/replica_disk_test.cpp 
b/src/replica/test/replica_disk_test.cpp
index 6717ffd40..5866da6ab 100644
--- a/src/replica/test/replica_disk_test.cpp
+++ b/src/replica/test/replica_disk_test.cpp
@@ -18,10 +18,6 @@
  */
 
 #include <fmt/core.h>
-// IWYU pragma: no_include <gtest/gtest-param-test.h>
-// IWYU pragma: no_include <gtest/gtest-message.h>
-// IWYU pragma: no_include <gtest/gtest-test-part.h>
-#include <gtest/gtest.h>
 #include <unistd.h>
 #include <atomic>
 #include <cstdint>
@@ -36,6 +32,7 @@
 #include "common/gpid.h"
 #include "common/replication.codes.h"
 #include "dsn.layer2_types.h"
+#include "gtest/gtest.h"
 #include "metadata_types.h"
 #include "replica/disk_cleaner.h"
 #include "replica/replica.h"
diff --git a/src/replica/test/replica_http_service_test.cpp 
b/src/replica/test/replica_http_service_test.cpp
index fbb36d285..d4b49667f 100644
--- a/src/replica/test/replica_http_service_test.cpp
+++ b/src/replica/test/replica_http_service_test.cpp
@@ -16,16 +16,13 @@
 // under the License.
 
 #include <fmt/core.h>
-// IWYU pragma: no_include <gtest/gtest-param-test.h>
-// IWYU pragma: no_include <gtest/gtest-message.h>
-// IWYU pragma: no_include <gtest/gtest-test-part.h>
-#include <gtest/gtest.h>
 #include <map>
 #include <memory>
 #include <string>
 #include <unordered_map>
 #include <utility>
 
+#include "gtest/gtest.h"
 #include "http/builtin_http_calls.h"
 #include "http/http_call_registry.h"
 #include "http/http_server.h"
diff --git a/src/replica/test/replica_learn_test.cpp 
b/src/replica/test/replica_learn_test.cpp
index 8cf8e5b66..b926fa4a8 100644
--- a/src/replica/test/replica_learn_test.cpp
+++ b/src/replica/test/replica_learn_test.cpp
@@ -15,12 +15,7 @@
 // specific language governing permissions and limitations
 // under the License.
 
-// IWYU pragma: no_include <gtest/gtest-param-test.h>
-// IWYU pragma: no_include <gtest/gtest-message.h>
-// IWYU pragma: no_include <gtest/gtest-test-part.h>
-#include <gtest/gtest.h>
 #include <memory>
-#include <ostream>
 #include <string>
 #include <utility>
 
@@ -29,6 +24,7 @@
 #include "common/replication_other_types.h"
 #include "consensus_types.h"
 #include "dsn.layer2_types.h"
+#include "gtest/gtest.h"
 #include "mock_utils.h"
 #include "replica/duplication/test/duplication_test_base.h"
 #include "replica/prepare_list.h"
diff --git a/src/replica/test/replica_test.cpp 
b/src/replica/test/replica_test.cpp
index 9b7aea83b..1da5b0060 100644
--- a/src/replica/test/replica_test.cpp
+++ b/src/replica/test/replica_test.cpp
@@ -15,11 +15,6 @@
 // specific language governing permissions and limitations
 // under the License.
 
-#include <gmock/gmock-matchers.h>
-// IWYU pragma: no_include <gtest/gtest-param-test.h>
-// IWYU pragma: no_include <gtest/gtest-message.h>
-// IWYU pragma: no_include <gtest/gtest-test-part.h>
-#include <gtest/gtest.h>
 #include <stdint.h>
 #include <unistd.h>
 #include <atomic>
@@ -42,6 +37,8 @@
 #include "common/replication_other_types.h"
 #include "consensus_types.h"
 #include "dsn.layer2_types.h"
+#include "gmock/gmock.h"
+#include "gtest/gtest.h"
 #include "http/http_server.h"
 #include "metadata_types.h"
 #include "perf_counter/perf_counter.h"
diff --git a/src/replica/test/throttling_controller_test.cpp 
b/src/replica/test/throttling_controller_test.cpp
index d3cd155fa..1a17df866 100644
--- a/src/replica/test/throttling_controller_test.cpp
+++ b/src/replica/test/throttling_controller_test.cpp
@@ -17,9 +17,7 @@
 
 #include "utils/throttling_controller.h"
 
-// IWYU pragma: no_include <gtest/gtest-message.h>
-// IWYU pragma: no_include <gtest/gtest-test-part.h>
-#include <gtest/gtest.h>
+#include "gtest/gtest.h"
 
 namespace dsn {
 namespace replication {
diff --git a/src/runtime/rpc/asio_net_provider.cpp 
b/src/runtime/rpc/asio_net_provider.cpp
index 95569b204..f06166d5e 100644
--- a/src/runtime/rpc/asio_net_provider.cpp
+++ b/src/runtime/rpc/asio_net_provider.cpp
@@ -27,6 +27,24 @@
 #include "asio_net_provider.h"
 
 #include <boost/asio.hpp> // IWYU pragma: keep
+#include <boost/asio/basic_datagram_socket.hpp>
+#include <boost/asio/basic_socket_acceptor.hpp>
+#include <boost/asio/basic_stream_socket.hpp>
+#include <boost/asio/buffer.hpp>
+#include <boost/asio/detail/impl/reactive_socket_service_base.ipp>
+#include <boost/asio/detail/impl/service_registry.hpp>
+#include <boost/asio/impl/io_context.hpp>
+#include <boost/asio/impl/io_context.ipp>
+#include <boost/asio/io_context.hpp>
+#include <boost/asio/io_service.hpp>
+#include <boost/asio/ip/address.hpp>
+#include <boost/asio/ip/address_v4.hpp>
+#include <boost/asio/ip/basic_endpoint.hpp>
+#include <boost/asio/ip/impl/address.ipp>
+#include <boost/asio/ip/impl/address_v4.ipp>
+#include <boost/asio/ip/tcp.hpp>
+#include <boost/asio/ip/udp.hpp>
+#include <boost/asio/socket_base.hpp>
 #include <boost/system/error_code.hpp>
 #include <stdint.h>
 #include <stdio.h>
diff --git a/src/runtime/rpc/asio_rpc_session.cpp 
b/src/runtime/rpc/asio_rpc_session.cpp
index 5006a257f..39ac3e6c0 100644
--- a/src/runtime/rpc/asio_rpc_session.cpp
+++ b/src/runtime/rpc/asio_rpc_session.cpp
@@ -27,6 +27,19 @@
 #include "asio_rpc_session.h"
 
 #include <boost/asio.hpp> // IWYU pragma: keep
+#include <boost/asio/basic_stream_socket.hpp>
+#include <boost/asio/buffer.hpp>
+#include <boost/asio/error.hpp>
+#include <boost/asio/impl/io_context.hpp>
+#include <boost/asio/impl/system_executor.hpp>
+#include <boost/asio/impl/write.hpp>
+#include <boost/asio/ip/address.hpp>
+#include <boost/asio/ip/address_v4.hpp>
+#include <boost/asio/ip/impl/address.ipp>
+#include <boost/asio/ip/impl/address_v4.ipp>
+#include <boost/asio/ip/tcp.hpp>
+#include <boost/asio/socket_base.hpp>
+#include <boost/system/error_code.hpp>
 // IWYU pragma: no_include <ext/alloc_traits.h>
 #include <cstddef>
 #include <iterator>
diff --git a/src/runtime/task/hpc_task_queue.cpp 
b/src/runtime/task/hpc_task_queue.cpp
index d33181044..8af5103ca 100644
--- a/src/runtime/task/hpc_task_queue.cpp
+++ b/src/runtime/task/hpc_task_queue.cpp
@@ -26,6 +26,8 @@
 
 #include "hpc_task_queue.h"
 
+#include <concurrentqueue/lightweightsemaphore.h>
+
 #include "boost/iterator/function_output_iterator.hpp"
 #include "concurrentqueue/concurrentqueue.h"
 #include "runtime/task/task.h"
diff --git a/src/runtime/task/simple_task_queue.cpp 
b/src/runtime/task/simple_task_queue.cpp
index 44f8de9a0..879a9700c 100644
--- a/src/runtime/task/simple_task_queue.cpp
+++ b/src/runtime/task/simple_task_queue.cpp
@@ -26,6 +26,7 @@
 
 #include "simple_task_queue.h"
 
+#include <boost/asio/io_service.hpp>
 #include <stdio.h>
 #include <memory>
 #include <new>
diff --git a/src/runtime/test/address_test.cpp 
b/src/runtime/test/address_test.cpp
index 500a65d66..838a74791 100644
--- a/src/runtime/test/address_test.cpp
+++ b/src/runtime/test/address_test.cpp
@@ -24,14 +24,12 @@
  * THE SOFTWARE.
  */
 
-// IWYU pragma: no_include <gtest/gtest-message.h>
-// IWYU pragma: no_include <gtest/gtest-test-part.h>
-#include <gtest/gtest.h>
 #include <netinet/in.h>
 #include <stdint.h>
 #include <string>
 #include <vector>
 
+#include "gtest/gtest.h"
 #include "runtime/rpc/group_address.h"
 #include "runtime/rpc/rpc_address.h"
 
diff --git a/src/runtime/test/async_call.cpp b/src/runtime/test/async_call.cpp
index a76471b1c..7c96ee377 100644
--- a/src/runtime/test/async_call.cpp
+++ b/src/runtime/test/async_call.cpp
@@ -34,10 +34,6 @@
  */
 
 #include <fmt/format.h>
-// IWYU pragma: no_include <gtest/gtest-message.h>
-// IWYU pragma: no_include <gtest/gtest-test-part.h>
-#include <gtest/gtest.h>
-#include <algorithm>
 #include <atomic>
 #include <chrono>
 #include <functional>
@@ -47,6 +43,7 @@
 #include <utility>
 #include <vector>
 
+#include "gtest/gtest.h"
 #include "runtime/api_task.h"
 #include "runtime/rpc/rpc_address.h"
 #include "runtime/rpc/rpc_message.h"
diff --git a/src/runtime/test/client_negotiation_test.cpp 
b/src/runtime/test/client_negotiation_test.cpp
index 74dab238a..a60832ef7 100644
--- a/src/runtime/test/client_negotiation_test.cpp
+++ b/src/runtime/test/client_negotiation_test.cpp
@@ -15,13 +15,11 @@
 // specific language governing permissions and limitations
 // under the License.
 
-// IWYU pragma: no_include <gtest/gtest-message.h>
-// IWYU pragma: no_include <gtest/gtest-test-part.h>
-#include <gtest/gtest.h>
 #include <memory>
 #include <string>
 #include <utility>
 
+#include "gtest/gtest.h"
 #include "runtime/rpc/network.sim.h"
 #include "runtime/rpc/rpc_address.h"
 #include "runtime/rpc/rpc_holder.h"
diff --git a/src/runtime/test/corrupt_message.cpp 
b/src/runtime/test/corrupt_message.cpp
index efc092b80..88a07cfc6 100644
--- a/src/runtime/test/corrupt_message.cpp
+++ b/src/runtime/test/corrupt_message.cpp
@@ -25,11 +25,11 @@
  */
 // IWYU pragma: no_include <gtest/gtest-message.h>
 // IWYU pragma: no_include <gtest/gtest-test-part.h>
-#include <gtest/gtest.h>
 #include <chrono>
 #include <string>
 #include <utility>
 
+#include "gtest/gtest.h"
 #include "runtime/rpc/rpc_address.h"
 #include "runtime/task/async_calls.h"
 #include "test_utils.h"
diff --git a/src/runtime/test/host_port_test.cpp 
b/src/runtime/test/host_port_test.cpp
index 629438062..728bef653 100644
--- a/src/runtime/test/host_port_test.cpp
+++ b/src/runtime/test/host_port_test.cpp
@@ -17,14 +17,12 @@
  * under the License.
  */
 
-#include <gtest/gtest-message.h>
-#include <gtest/gtest-test-part.h>
-#include <gtest/gtest.h>
 #include <string.h>
 #include <string>
 #include <utility>
 #include <vector>
 
+#include "gtest/gtest.h"
 #include "runtime/rpc/dns_resolver.h"
 #include "runtime/rpc/group_address.h"
 #include "runtime/rpc/group_host_port.h"
diff --git a/src/runtime/test/lpc.cpp b/src/runtime/test/lpc.cpp
index 6787b626c..bcbc10281 100644
--- a/src/runtime/test/lpc.cpp
+++ b/src/runtime/test/lpc.cpp
@@ -33,12 +33,10 @@
  *     xxxx-xx-xx, author, fix bug about xxx
  */
 
-// IWYU pragma: no_include <gtest/gtest-message.h>
-// IWYU pragma: no_include <gtest/gtest-test-part.h>
-#include <gtest/gtest.h>
 #include <functional>
 #include <string>
 
+#include "gtest/gtest.h"
 #include "runtime/api_task.h"
 #include "runtime/task/task.h"
 #include "runtime/task/task_code.h"
diff --git a/src/runtime/test/main.cpp b/src/runtime/test/main.cpp
index a04fe28de..00ad6981f 100644
--- a/src/runtime/test/main.cpp
+++ b/src/runtime/test/main.cpp
@@ -37,7 +37,7 @@
 #include <iostream>
 #include <thread>
 
-#include "gtest/gtest.h"
+#include <gtest/gtest.h>
 #include "runtime/app_model.h"
 #include "runtime/service_app.h"
 #include "test_utils.h"
diff --git a/src/runtime/test/message_reader_test.cpp 
b/src/runtime/test/message_reader_test.cpp
index 3fb033dc9..515dcf837 100644
--- a/src/runtime/test/message_reader_test.cpp
+++ b/src/runtime/test/message_reader_test.cpp
@@ -15,12 +15,10 @@
 // specific language governing permissions and limitations
 // under the License.
 
-// IWYU pragma: no_include <gtest/gtest-message.h>
-// IWYU pragma: no_include <gtest/gtest-test-part.h>
-#include <gtest/gtest.h>
 #include <string.h>
 #include <string>
 
+#include "gtest/gtest.h"
 #include "runtime/rpc/message_parser.h"
 #include "utils/blob.h"
 
diff --git a/src/runtime/test/message_utils_test.cpp 
b/src/runtime/test/message_utils_test.cpp
index dbf9ad3ea..7d280db8b 100644
--- a/src/runtime/test/message_utils_test.cpp
+++ b/src/runtime/test/message_utils_test.cpp
@@ -26,14 +26,12 @@
 
 #include "runtime/message_utils.h"
 
-// IWYU pragma: no_include <gtest/gtest-message.h>
-// IWYU pragma: no_include <gtest/gtest-test-part.h>
-#include <gtest/gtest.h>
 #include <string>
 #include <utility>
 
 #include "common/replication.codes.h"
 #include "dsn.layer2_types.h"
+#include "gtest/gtest.h"
 #include "runtime/rpc/rpc_holder.h"
 #include "runtime/rpc/rpc_message.h"
 #include "utils/autoref_ptr.h"
diff --git a/src/runtime/test/meta_access_controller_test.cpp 
b/src/runtime/test/meta_access_controller_test.cpp
index 822c5a051..bdec097b8 100644
--- a/src/runtime/test/meta_access_controller_test.cpp
+++ b/src/runtime/test/meta_access_controller_test.cpp
@@ -15,14 +15,12 @@
 // specific language governing permissions and limitations
 // under the License.
 
-// IWYU pragma: no_include <gtest/gtest-message.h>
-// IWYU pragma: no_include <gtest/gtest-test-part.h>
-#include <gtest/gtest.h>
 #include <memory>
 #include <string>
 #include <unordered_set>
 
 #include "common/replication.codes.h"
+#include "gtest/gtest.h"
 #include "runtime/rpc/network.h"
 #include "runtime/rpc/network.sim.h"
 #include "runtime/rpc/rpc_address.h"
diff --git a/src/runtime/test/negotiation_manager_test.cpp 
b/src/runtime/test/negotiation_manager_test.cpp
index 6744ebfe9..401f63b57 100644
--- a/src/runtime/test/negotiation_manager_test.cpp
+++ b/src/runtime/test/negotiation_manager_test.cpp
@@ -17,11 +17,8 @@
 
 #include "runtime/security/negotiation_manager.h"
 
-// IWYU pragma: no_include <gtest/gtest-message.h>
-// IWYU pragma: no_include <gtest/gtest-test-part.h>
-#include <gtest/gtest.h>
-
 #include "failure_detector/fd.code.definition.h"
+#include "gtest/gtest.h"
 #include "http/http_server.h"
 #include "nfs/nfs_code_definition.h"
 #include "runtime/rpc/network.h"
diff --git a/src/runtime/test/netprovider.cpp b/src/runtime/test/netprovider.cpp
index 54a514706..b6ab3932b 100644
--- a/src/runtime/test/netprovider.cpp
+++ b/src/runtime/test/netprovider.cpp
@@ -33,9 +33,6 @@
  *     xxxx-xx-xx, author, fix bug about xxx
  */
 
-// IWYU pragma: no_include <gtest/gtest-message.h>
-// IWYU pragma: no_include <gtest/gtest-test-part.h>
-#include <gtest/gtest.h>
 #include <string.h>
 #include <chrono>
 #include <functional>
@@ -43,6 +40,7 @@
 #include <string>
 #include <thread>
 
+#include "gtest/gtest.h"
 #include "runtime/api_layer1.h"
 #include "runtime/api_task.h"
 #include "runtime/global_config.h"
diff --git a/src/runtime/test/pipeline_test.cpp 
b/src/runtime/test/pipeline_test.cpp
index bdc1e5a86..444c7f268 100644
--- a/src/runtime/test/pipeline_test.cpp
+++ b/src/runtime/test/pipeline_test.cpp
@@ -24,13 +24,11 @@
  * THE SOFTWARE.
  */
 
-// IWYU pragma: no_include <gtest/gtest-message.h>
-// IWYU pragma: no_include <gtest/gtest-test-part.h>
-#include <gtest/gtest.h>
-#include <memory>
+#include <string>
 #include <utility>
 
 #include "common/replication.codes.h"
+#include "gtest/gtest.h"
 #include "runtime/pipeline.h"
 #include "runtime/task/task_tracker.h"
 #include "utils/chrono_literals.h"
diff --git a/src/runtime/test/ranger_resource_policy_manager_test.cpp 
b/src/runtime/test/ranger_resource_policy_manager_test.cpp
index 1971810c9..c17c51dfc 100644
--- a/src/runtime/test/ranger_resource_policy_manager_test.cpp
+++ b/src/runtime/test/ranger_resource_policy_manager_test.cpp
@@ -16,9 +16,6 @@
 // under the License.
 
 #include <fmt/core.h>
-#include <gtest/gtest-message.h>
-#include <gtest/gtest-test-part.h>
-#include <gtest/gtest.h>
 #include <rapidjson/document.h>
 #include <algorithm>
 #include <map>
@@ -29,6 +26,7 @@
 #include <vector>
 
 #include "common/json_helper.h"
+#include "gtest/gtest.h"
 #include "runtime/ranger/access_type.h"
 #include "runtime/ranger/ranger_resource_policy.h"
 #include "runtime/ranger/ranger_resource_policy_manager.h"
diff --git a/src/runtime/test/ranger_resource_policy_test.cpp 
b/src/runtime/test/ranger_resource_policy_test.cpp
index fcb924803..a9025d9bb 100644
--- a/src/runtime/test/ranger_resource_policy_test.cpp
+++ b/src/runtime/test/ranger_resource_policy_test.cpp
@@ -16,13 +16,10 @@
 // under the License.
 
 #include <fmt/core.h>
-#include <gtest/gtest-message.h>
-#include <gtest/gtest-test-part.h>
-#include <gtest/gtest.h>
-#include <algorithm>
 #include <string>
 #include <vector>
 
+#include "gtest/gtest.h"
 #include "runtime/ranger/access_type.h"
 #include "runtime/ranger/ranger_resource_policy.h"
 
diff --git a/src/runtime/test/replica_access_controller_test.cpp 
b/src/runtime/test/replica_access_controller_test.cpp
index 539bc3cf7..d801d7755 100644
--- a/src/runtime/test/replica_access_controller_test.cpp
+++ b/src/runtime/test/replica_access_controller_test.cpp
@@ -15,15 +15,13 @@
 // specific language governing permissions and limitations
 // under the License.
 
-// IWYU pragma: no_include <gtest/gtest-message.h>
-// IWYU pragma: no_include <gtest/gtest-test-part.h>
-#include <gtest/gtest.h>
 #include <memory>
 #include <string>
 #include <unordered_set>
 #include <utility>
 
 #include "common/replication.codes.h"
+#include "gtest/gtest.h"
 #include "runtime/ranger/access_type.h"
 #include "runtime/rpc/network.h"
 #include "runtime/rpc/network.sim.h"
diff --git a/src/runtime/test/rpc.cpp b/src/runtime/test/rpc.cpp
index dd67bef01..0acebc16f 100644
--- a/src/runtime/test/rpc.cpp
+++ b/src/runtime/test/rpc.cpp
@@ -26,9 +26,6 @@
 
 #include <boost/cstdint.hpp>
 #include <boost/lexical_cast.hpp>
-// IWYU pragma: no_include <gtest/gtest-message.h>
-// IWYU pragma: no_include <gtest/gtest-test-part.h>
-#include <gtest/gtest.h>
 #include <stddef.h>
 #include <stdint.h>
 #include <algorithm>
@@ -37,6 +34,7 @@
 #include <string>
 #include <utility>
 
+#include "gtest/gtest.h"
 #include "runtime/rpc/group_address.h"
 #include "runtime/rpc/rpc_address.h"
 #include "runtime/rpc/rpc_message.h"
diff --git a/src/runtime/test/rpc_holder_test.cpp 
b/src/runtime/test/rpc_holder_test.cpp
index 7783b0834..8d1b838d8 100644
--- a/src/runtime/test/rpc_holder_test.cpp
+++ b/src/runtime/test/rpc_holder_test.cpp
@@ -27,13 +27,11 @@
 #include "runtime/rpc/rpc_holder.h"
 
 #include <fmt/core.h>
-// IWYU pragma: no_include <gtest/gtest-message.h>
-// IWYU pragma: no_include <gtest/gtest-test-part.h>
-#include <gtest/gtest.h>
 #include <string>
 
 #include "common/gpid.h"
 #include "common/serialization_helper/dsn.layer2_types.h"
+#include "gtest/gtest.h"
 #include "runtime/message_utils.h"
 #include "runtime/rpc/rpc_address.h"
 #include "utils/threadpool_code.h"
diff --git a/src/runtime/test/rpc_message.cpp b/src/runtime/test/rpc_message.cpp
index cd6c1693e..22f87275b 100644
--- a/src/runtime/test/rpc_message.cpp
+++ b/src/runtime/test/rpc_message.cpp
@@ -33,9 +33,6 @@
  *     xxxx-xx-xx, author, fix bug about xxx
  */
 
-// IWYU pragma: no_include <gtest/gtest-message.h>
-// IWYU pragma: no_include <gtest/gtest-test-part.h>
-#include <gtest/gtest.h>
 #include <stdint.h>
 #include <string.h>
 #include <memory>
@@ -44,6 +41,7 @@
 
 #include "common/gpid.h"
 #include "dsn.layer2_types.h"
+#include "gtest/gtest.h"
 #include "runtime/message_utils.cpp"
 #include "runtime/message_utils.h"
 #include "runtime/rpc/rpc_address.h"
diff --git a/src/runtime/test/server_negotiation_test.cpp 
b/src/runtime/test/server_negotiation_test.cpp
index 0ed747164..fce5fdfd8 100644
--- a/src/runtime/test/server_negotiation_test.cpp
+++ b/src/runtime/test/server_negotiation_test.cpp
@@ -17,12 +17,10 @@
 
 #include "runtime/security/server_negotiation.h"
 
-// IWYU pragma: no_include <gtest/gtest-message.h>
-// IWYU pragma: no_include <gtest/gtest-test-part.h>
-#include <gtest/gtest.h>
 #include <memory>
 #include <utility>
 
+#include "gtest/gtest.h"
 #include "runtime/rpc/network.sim.h"
 #include "runtime/rpc/rpc_address.h"
 #include "runtime/rpc/rpc_holder.h"
diff --git a/src/runtime/test/service_api_c.cpp 
b/src/runtime/test/service_api_c.cpp
index c90e34b37..77c1db85c 100644
--- a/src/runtime/test/service_api_c.cpp
+++ b/src/runtime/test/service_api_c.cpp
@@ -33,9 +33,6 @@
  *     xxxx-xx-xx, author, fix bug about xxx
  */
 
-// IWYU pragma: no_include <gtest/gtest-message.h>
-// IWYU pragma: no_include <gtest/gtest-test-part.h>
-#include <gtest/gtest.h>
 #include <stdint.h>
 #include <chrono>
 #include <map>
@@ -43,6 +40,7 @@
 #include <thread>
 #include <vector>
 
+#include "gtest/gtest.h"
 #include "runtime/api_layer1.h"
 #include "runtime/global_config.h"
 #include "runtime/service_app.h"
diff --git a/src/runtime/test/sim_lock.cpp b/src/runtime/test/sim_lock.cpp
index 82f7cd5d1..772548a80 100644
--- a/src/runtime/test/sim_lock.cpp
+++ b/src/runtime/test/sim_lock.cpp
@@ -33,12 +33,10 @@
  *     xxxx-xx-xx, author, fix bug about xxx
  */
 
-// IWYU pragma: no_include <gtest/gtest-message.h>
-// IWYU pragma: no_include <gtest/gtest-test-part.h>
-#include <gtest/gtest.h>
 #include <functional>
 #include <string>
 
+#include "gtest/gtest.h"
 #include "runtime/global_config.h"
 #include "runtime/scheduler.h"
 #include "runtime/service_engine.h"
diff --git a/src/runtime/test/task_engine.cpp b/src/runtime/test/task_engine.cpp
index 6e4022d31..9e9c033ae 100644
--- a/src/runtime/test/task_engine.cpp
+++ b/src/runtime/test/task_engine.cpp
@@ -35,11 +35,9 @@
 
 #include "runtime/task/task_engine.h"
 
-// IWYU pragma: no_include <gtest/gtest-message.h>
-// IWYU pragma: no_include <gtest/gtest-test-part.h>
-#include <gtest/gtest.h>
 #include <stdio.h>
 
+#include "gtest/gtest.h"
 #include "runtime/global_config.h"
 #include "runtime/service_engine.h"
 #include "runtime/task/task.h"
diff --git a/src/runtime/test/task_test.cpp b/src/runtime/test/task_test.cpp
index 1ef5516a1..6052bdec7 100644
--- a/src/runtime/test/task_test.cpp
+++ b/src/runtime/test/task_test.cpp
@@ -17,12 +17,11 @@
 
 #include "runtime/task/task.h"
 
-// IWYU pragma: no_include <gtest/gtest-message.h>
-// IWYU pragma: no_include <gtest/gtest-test-part.h>
-#include <gtest/gtest.h>
+#include <string>
 
 #include "aio/aio_task.h"
 #include "aio/file_io.h"
+#include "gtest/gtest.h"
 #include "runtime/task/task_code.h"
 #include "runtime/task/task_spec.h"
 #include "utils/flags.h"
diff --git a/src/runtime/test/thrift_message_parser_test.cpp 
b/src/runtime/test/thrift_message_parser_test.cpp
index f8e92f2c3..722b2860b 100644
--- a/src/runtime/test/thrift_message_parser_test.cpp
+++ b/src/runtime/test/thrift_message_parser_test.cpp
@@ -16,9 +16,6 @@
 // under the License.
 
 #include <boost/smart_ptr/shared_ptr.hpp>
-// IWYU pragma: no_include <gtest/gtest-message.h>
-// IWYU pragma: no_include <gtest/gtest-test-part.h>
-#include <gtest/gtest.h>
 #include <string.h>
 #include <thrift/protocol/TBinaryProtocol.h>
 #include <thrift/protocol/TBinaryProtocol.tcc>
@@ -29,6 +26,7 @@
 
 #include "common/gpid.h"
 #include "common/serialization_helper/thrift_helper.h"
+#include "gtest/gtest.h"
 #include "request_meta_types.h"
 #include "runtime/rpc/message_parser.h"
 #include "runtime/rpc/rpc_message.h"
diff --git a/src/server/test/capacity_unit_calculator_test.cpp 
b/src/server/test/capacity_unit_calculator_test.cpp
index 98c682597..d33535cf4 100644
--- a/src/server/test/capacity_unit_calculator_test.cpp
+++ b/src/server/test/capacity_unit_calculator_test.cpp
@@ -18,19 +18,15 @@
  */
 
 #include <fmt/core.h>
-// IWYU pragma: no_include <gtest/gtest-param-test.h>
-// IWYU pragma: no_include <gtest/gtest-message.h>
-// IWYU pragma: no_include <gtest/gtest-test-part.h>
-#include <gtest/gtest.h>
 #include <rocksdb/status.h>
 #include <stdint.h>
-#include <algorithm>
 #include <memory>
 #include <string>
 #include <utility>
 #include <vector>
 
 #include "common/replication.codes.h"
+#include "gtest/gtest.h"
 #include "pegasus_key_schema.h"
 #include "pegasus_server_test_base.h"
 #include "replica_admin_types.h"
diff --git a/src/server/test/compaction_filter_rule_test.cpp 
b/src/server/test/compaction_filter_rule_test.cpp
index ee2b5d6df..d793ae2b1 100644
--- a/src/server/test/compaction_filter_rule_test.cpp
+++ b/src/server/test/compaction_filter_rule_test.cpp
@@ -17,15 +17,13 @@
  * under the License.
  */
 
-// IWYU pragma: no_include <gtest/gtest-message.h>
-// IWYU pragma: no_include <gtest/gtest-test-part.h>
-#include <gtest/gtest.h>
 #include <rocksdb/slice.h>
 #include <stdint.h>
 #include <string>
 
 #include "base/pegasus_utils.h"
 #include "base/pegasus_value_schema.h"
+#include "gtest/gtest.h"
 #include "server/compaction_filter_rule.h"
 
 namespace pegasus {
diff --git a/src/server/test/compaction_operation_test.cpp 
b/src/server/test/compaction_operation_test.cpp
index cd6fdc95e..a241c44a1 100644
--- a/src/server/test/compaction_operation_test.cpp
+++ b/src/server/test/compaction_operation_test.cpp
@@ -17,9 +17,6 @@
  * under the License.
  */
 
-// IWYU pragma: no_include <gtest/gtest-message.h>
-// IWYU pragma: no_include <gtest/gtest-test-part.h>
-#include <gtest/gtest.h>
 #include <rocksdb/slice.h>
 #include <stdint.h>
 #include <memory>
@@ -29,6 +26,7 @@
 
 #include "base/pegasus_utils.h"
 #include "base/pegasus_value_schema.h"
+#include "gtest/gtest.h"
 #include "server/compaction_filter_rule.h"
 #include "server/compaction_operation.h"
 
diff --git a/src/server/test/hashkey_transform_test.cpp 
b/src/server/test/hashkey_transform_test.cpp
index 52f4d5a6b..786e09ba7 100644
--- a/src/server/test/hashkey_transform_test.cpp
+++ b/src/server/test/hashkey_transform_test.cpp
@@ -20,13 +20,11 @@
 #include "server/hashkey_transform.h"
 
 #include <fmt/core.h>
-// IWYU pragma: no_include <gtest/gtest-message.h>
-// IWYU pragma: no_include <gtest/gtest-test-part.h>
-#include <gtest/gtest.h>
 #include <rocksdb/comparator.h>
 #include <string>
 
 #include "base/pegasus_key_schema.h"
+#include "gtest/gtest.h"
 #include "utils/blob.h"
 
 // User define SliceTransform must obey the 4 rules of 
ColumnFamilyOptions.prefix_extractor:
diff --git a/src/server/test/hotkey_collector_test.cpp 
b/src/server/test/hotkey_collector_test.cpp
index 9553123b4..1316dad7a 100644
--- a/src/server/test/hotkey_collector_test.cpp
+++ b/src/server/test/hotkey_collector_test.cpp
@@ -18,16 +18,13 @@
 #include "server/hotkey_collector.h"
 
 #include <fmt/core.h>
-// IWYU pragma: no_include <gtest/gtest-param-test.h>
-// IWYU pragma: no_include <gtest/gtest-message.h>
-// IWYU pragma: no_include <gtest/gtest-test-part.h>
-#include <gtest/gtest.h>
 #include <chrono>
 #include <thread>
 
 #include "base/pegasus_key_schema.h"
 #include "common/gpid.h"
 #include "common/replication.codes.h"
+#include "gtest/gtest.h"
 #include "pegasus_server_test_base.h"
 #include "rrdb/rrdb.code.definition.h"
 #include "rrdb/rrdb_types.h"
diff --git a/src/server/test/hotspot_partition_test.cpp 
b/src/server/test/hotspot_partition_test.cpp
index 97f4252bc..643fbd6d6 100644
--- a/src/server/test/hotspot_partition_test.cpp
+++ b/src/server/test/hotspot_partition_test.cpp
@@ -15,18 +15,14 @@
 // specific language governing permissions and limitations
 // under the License.
 
-// IWYU pragma: no_include <gtest/gtest-param-test.h>
 // IWYU pragma: no_include <ext/alloc_traits.h>
-// IWYU pragma: no_include <gtest/gtest-message.h>
-// IWYU pragma: no_include <gtest/gtest-test-part.h>
-#include <gtest/gtest.h>
-#include <algorithm>
 #include <array>
 #include <cstdint>
 #include <memory>
 #include <utility>
 #include <vector>
 
+#include "gtest/gtest.h"
 #include "pegasus_server_test_base.h"
 #include "perf_counter/perf_counter.h"
 #include "perf_counter/perf_counter_wrapper.h"
diff --git a/src/server/test/manual_compact_service_test.cpp 
b/src/server/test/manual_compact_service_test.cpp
index ff980dfd6..1cf65a4e9 100644
--- a/src/server/test/manual_compact_service_test.cpp
+++ b/src/server/test/manual_compact_service_test.cpp
@@ -17,10 +17,6 @@
  * under the License.
  */
 
-// IWYU pragma: no_include <gtest/gtest-param-test.h>
-// IWYU pragma: no_include <gtest/gtest-message.h>
-// IWYU pragma: no_include <gtest/gtest-test-part.h>
-#include <gtest/gtest.h>
 #include <rocksdb/options.h>
 #include <stdint.h>
 #include <atomic>
@@ -28,6 +24,7 @@
 #include <memory>
 #include <string>
 
+#include "gtest/gtest.h"
 #include "pegasus_const.h"
 #include "pegasus_server_test_base.h"
 #include "runtime/api_layer1.h"
diff --git a/src/server/test/pegasus_compression_options_test.cpp 
b/src/server/test/pegasus_compression_options_test.cpp
index 16f9689bd..bd5ef53c6 100644
--- a/src/server/test/pegasus_compression_options_test.cpp
+++ b/src/server/test/pegasus_compression_options_test.cpp
@@ -17,19 +17,15 @@
  * under the License.
  */
 
-// IWYU pragma: no_include <gtest/gtest-param-test.h>
-// IWYU pragma: no_include <gtest/gtest-message.h>
-// IWYU pragma: no_include <gtest/gtest-test-part.h>
-#include <gtest/gtest.h>
 #include <rocksdb/compression_type.h>
 #include <rocksdb/db.h>
 #include <rocksdb/options.h>
 #include <map>
 #include <memory>
-#include <ostream>
 #include <string>
 #include <vector>
 
+#include "gtest/gtest.h"
 #include "pegasus_server_test_base.h"
 
 namespace pegasus {
diff --git a/src/server/test/pegasus_mutation_duplicator_test.cpp 
b/src/server/test/pegasus_mutation_duplicator_test.cpp
index 3d143e189..34062ab0c 100644
--- a/src/server/test/pegasus_mutation_duplicator_test.cpp
+++ b/src/server/test/pegasus_mutation_duplicator_test.cpp
@@ -20,13 +20,10 @@
 #include "server/pegasus_mutation_duplicator.h"
 
 #include <fmt/core.h>
-// IWYU pragma: no_include <gtest/gtest-param-test.h>
-// IWYU pragma: no_include <gtest/gtest-message.h>
-// IWYU pragma: no_include <gtest/gtest-test-part.h>
-#include <gtest/gtest.h>
 #include <pegasus/error.h>
 #include <sys/types.h>
 #include <memory>
+#include <tuple>
 #include <utility>
 #include <vector>
 
@@ -36,6 +33,7 @@
 #include "common/gpid.h"
 #include "common/replication.codes.h"
 #include "duplication_internal_types.h"
+#include "gtest/gtest.h"
 #include "pegasus_key_schema.h"
 #include "pegasus_server_test_base.h"
 #include "replica/replica_base.h"
diff --git a/src/server/test/pegasus_server_impl_test.cpp 
b/src/server/test/pegasus_server_impl_test.cpp
index 90c2276b6..1113c138d 100644
--- a/src/server/test/pegasus_server_impl_test.cpp
+++ b/src/server/test/pegasus_server_impl_test.cpp
@@ -19,12 +19,6 @@
 
 #include <base/pegasus_key_schema.h>
 #include <fmt/core.h>
-#include <gmock/gmock-actions.h>
-#include <gmock/gmock-spec-builders.h>
-// IWYU pragma: no_include <gtest/gtest-param-test.h>
-// IWYU pragma: no_include <gtest/gtest-message.h>
-// IWYU pragma: no_include <gtest/gtest-test-part.h>
-#include <gtest/gtest.h>
 #include <rocksdb/db.h>
 #include <rocksdb/options.h>
 #include <stdint.h>
@@ -34,6 +28,8 @@
 #include <string>
 #include <utility>
 
+#include "gmock/gmock.h"
+#include "gtest/gtest.h"
 #include "pegasus_const.h"
 #include "pegasus_server_test_base.h"
 #include "perf_counter/perf_counter.h"
diff --git a/src/server/test/pegasus_server_write_test.cpp 
b/src/server/test/pegasus_server_write_test.cpp
index d32ef3ff0..415b31aa1 100644
--- a/src/server/test/pegasus_server_write_test.cpp
+++ b/src/server/test/pegasus_server_write_test.cpp
@@ -18,19 +18,15 @@
  */
 
 #include <fmt/core.h>
-// IWYU pragma: no_include <gtest/gtest-param-test.h>
-// IWYU pragma: no_include <gtest/gtest-message.h>
-// IWYU pragma: no_include <gtest/gtest-test-part.h>
-#include <gtest/gtest.h>
 #include <rocksdb/write_batch.h>
 #include <stdint.h>
 #include <memory>
-#include <ostream>
 #include <string>
 #include <vector>
 
 #include "base/pegasus_key_schema.h"
 #include "common/gpid.h"
+#include "gtest/gtest.h"
 #include "message_utils.h"
 #include "pegasus_rpc_types.h"
 #include "pegasus_server_test_base.h"
diff --git a/src/server/test/pegasus_value_schema_test.cpp 
b/src/server/test/pegasus_value_schema_test.cpp
index b5e539d8c..77cca238c 100644
--- a/src/server/test/pegasus_value_schema_test.cpp
+++ b/src/server/test/pegasus_value_schema_test.cpp
@@ -19,11 +19,10 @@
 
 #include "base/pegasus_value_schema.h"
 
-// IWYU pragma: no_include <gtest/gtest-message.h>
-// IWYU pragma: no_include <gtest/gtest-test-part.h>
-#include <gtest/gtest.h>
 #include <limits>
 
+#include "gtest/gtest.h"
+
 using namespace pegasus;
 
 TEST(value_schema, generate_and_extract_v1_v0)
diff --git a/src/server/test/pegasus_write_service_impl_test.cpp 
b/src/server/test/pegasus_write_service_impl_test.cpp
index d61ffe64a..a64e1e916 100644
--- a/src/server/test/pegasus_write_service_impl_test.cpp
+++ b/src/server/test/pegasus_write_service_impl_test.cpp
@@ -18,15 +18,13 @@
  */
 
 #include <fmt/core.h>
-// IWYU pragma: no_include <gtest/gtest-param-test.h>
-// IWYU pragma: no_include <gtest/gtest-message.h>
-// IWYU pragma: no_include <gtest/gtest-test-part.h>
-#include <gtest/gtest.h>
 #include <rocksdb/status.h>
 #include <stdint.h>
 #include <limits>
 #include <memory>
+#include <string>
 
+#include "gtest/gtest.h"
 #include "pegasus_key_schema.h"
 #include "pegasus_server_test_base.h"
 #include "rrdb/rrdb_types.h"
diff --git a/src/server/test/pegasus_write_service_test.cpp 
b/src/server/test/pegasus_write_service_test.cpp
index 30f2e7f8e..8f861f340 100644
--- a/src/server/test/pegasus_write_service_test.cpp
+++ b/src/server/test/pegasus_write_service_test.cpp
@@ -18,14 +18,9 @@
  */
 
 #include <fmt/core.h>
-// IWYU pragma: no_include <gtest/gtest-param-test.h>
-// IWYU pragma: no_include <gtest/gtest-message.h>
-// IWYU pragma: no_include <gtest/gtest-test-part.h>
-#include <gtest/gtest.h>
 #include <rocksdb/status.h>
 #include <rocksdb/write_batch.h>
 #include <stdint.h>
-#include <algorithm>
 #include <array>
 #include <memory>
 #include <string>
@@ -34,6 +29,7 @@
 #include "base/pegasus_key_schema.h"
 #include "common/gpid.h"
 #include "duplication_internal_types.h"
+#include "gtest/gtest.h"
 #include "message_utils.h"
 #include "pegasus_server_test_base.h"
 #include "rrdb/rrdb.code.definition.h"
diff --git a/src/server/test/rocksdb_wrapper_test.cpp 
b/src/server/test/rocksdb_wrapper_test.cpp
index 372517c8f..34a992050 100644
--- a/src/server/test/rocksdb_wrapper_test.cpp
+++ b/src/server/test/rocksdb_wrapper_test.cpp
@@ -18,10 +18,6 @@
  */
 
 #include <fmt/core.h>
-// IWYU pragma: no_include <gtest/gtest-param-test.h>
-// IWYU pragma: no_include <gtest/gtest-message.h>
-// IWYU pragma: no_include <gtest/gtest-test-part.h>
-#include <gtest/gtest.h>
 #include <stdint.h>
 #include <memory>
 #include <string>
@@ -29,6 +25,7 @@
 
 #include "common/fs_manager.h"
 #include "dsn.layer2_types.h"
+#include "gtest/gtest.h"
 #include "pegasus_key_schema.h"
 #include "pegasus_server_test_base.h"
 #include "pegasus_utils.h"
diff --git a/src/test/function_test/backup_restore/test_backup_and_restore.cpp 
b/src/test/function_test/backup_restore/test_backup_and_restore.cpp
index 7edadc021..d5a6cefda 100644
--- a/src/test/function_test/backup_restore/test_backup_and_restore.cpp
+++ b/src/test/function_test/backup_restore/test_backup_and_restore.cpp
@@ -15,9 +15,6 @@
 // specific language governing permissions and limitations
 // under the License.
 
-// IWYU pragma: no_include <gtest/gtest-message.h>
-// IWYU pragma: no_include <gtest/gtest-test-part.h>
-#include <gtest/gtest.h>
 #include <stdint.h>
 #include <unistd.h>
 #include <iostream>
@@ -30,6 +27,7 @@
 #include "client/replication_ddl_client.h"
 #include "common/replication_other_types.h"
 #include "dsn.layer2_types.h"
+#include "gtest/gtest.h"
 #include "include/pegasus/client.h"
 #include "include/pegasus/error.h"
 #include "runtime/rpc/rpc_address.h"
diff --git a/src/test/function_test/base_api/integration_test.cpp 
b/src/test/function_test/base_api/integration_test.cpp
index 2ee44c482..4229ae58e 100644
--- a/src/test/function_test/base_api/integration_test.cpp
+++ b/src/test/function_test/base_api/integration_test.cpp
@@ -18,12 +18,10 @@
  */
 
 #include <fmt/core.h>
-#include <gtest/gtest-message.h>
-#include <gtest/gtest-test-part.h>
-#include <gtest/gtest.h>
 #include <iostream>
 #include <string>
 
+#include "gtest/gtest.h"
 #include "include/pegasus/client.h"
 #include "pegasus/error.h"
 #include "test/function_test/utils/test_util.h"
diff --git a/src/test/function_test/base_api/test_basic.cpp 
b/src/test/function_test/base_api/test_basic.cpp
index 01a3a7103..674a34854 100644
--- a/src/test/function_test/base_api/test_basic.cpp
+++ b/src/test/function_test/base_api/test_basic.cpp
@@ -17,9 +17,6 @@
  * under the License.
  */
 
-// IWYU pragma: no_include <gtest/gtest-message.h>
-// IWYU pragma: no_include <gtest/gtest-test-part.h>
-#include <gtest/gtest.h>
 #include <stdint.h>
 #include <unistd.h>
 #include <atomic>
@@ -31,6 +28,7 @@
 #include <utility>
 #include <vector>
 
+#include "gtest/gtest.h"
 #include "include/pegasus/client.h"
 #include "pegasus/error.h"
 #include "test/function_test/utils/test_util.h"
diff --git a/src/test/function_test/base_api/test_batch_get.cpp 
b/src/test/function_test/base_api/test_batch_get.cpp
index d0bf4c1e5..da688fc5f 100644
--- a/src/test/function_test/base_api/test_batch_get.cpp
+++ b/src/test/function_test/base_api/test_batch_get.cpp
@@ -17,15 +17,11 @@
 * under the License.
 */
 
-#include <fmt/core.h>
 // IWYU pragma: no_include <ext/alloc_traits.h>
-// IWYU pragma: no_include <gtest/gtest-message.h>
-// IWYU pragma: no_include <gtest/gtest-test-part.h>
-#include <gtest/gtest.h>
+#include <fmt/core.h>
 #include <rocksdb/status.h>
 #include <rrdb/rrdb_types.h>
 #include <stdint.h>
-#include <algorithm>
 #include <chrono>
 #include <memory>
 #include <string>
@@ -35,6 +31,7 @@
 #include "base/pegasus_const.h"
 #include "base/pegasus_key_schema.h"
 #include "client/partition_resolver.h"
+#include "gtest/gtest.h"
 #include "include/rrdb/rrdb.client.h"
 #include "test/function_test/utils/test_util.h"
 #include "utils/blob.h"
diff --git a/src/test/function_test/base_api/test_check_and_mutate.cpp 
b/src/test/function_test/base_api/test_check_and_mutate.cpp
index 43f0b1d04..8887237e2 100644
--- a/src/test/function_test/base_api/test_check_and_mutate.cpp
+++ b/src/test/function_test/base_api/test_check_and_mutate.cpp
@@ -17,12 +17,10 @@
  * under the License.
  */
 
-// IWYU pragma: no_include <gtest/gtest-message.h>
-// IWYU pragma: no_include <gtest/gtest-test-part.h>
-#include <gtest/gtest.h>
 #include <unistd.h>
 #include <string>
 
+#include "gtest/gtest.h"
 #include "include/pegasus/client.h"
 #include "pegasus/error.h"
 #include "test/function_test/utils/test_util.h"
diff --git a/src/test/function_test/base_api/test_check_and_set.cpp 
b/src/test/function_test/base_api/test_check_and_set.cpp
index 310d71642..dc4cc78f0 100644
--- a/src/test/function_test/base_api/test_check_and_set.cpp
+++ b/src/test/function_test/base_api/test_check_and_set.cpp
@@ -17,11 +17,9 @@
  * under the License.
  */
 
-// IWYU pragma: no_include <gtest/gtest-message.h>
-// IWYU pragma: no_include <gtest/gtest-test-part.h>
-#include <gtest/gtest.h>
 #include <string>
 
+#include "gtest/gtest.h"
 #include "include/pegasus/client.h"
 #include "pegasus/error.h"
 #include "test/function_test/utils/test_util.h"
diff --git a/src/test/function_test/base_api/test_copy.cpp 
b/src/test/function_test/base_api/test_copy.cpp
index d2155f12f..d770a4b53 100644
--- a/src/test/function_test/base_api/test_copy.cpp
+++ b/src/test/function_test/base_api/test_copy.cpp
@@ -17,24 +17,20 @@
  * under the License.
  */
 
-// IWYU pragma: no_include <gtest/gtest-message.h>
-// IWYU pragma: no_include <gtest/gtest-test-part.h>
-#include <gtest/gtest.h>
 #include <limits.h>
 #include <s2/third_party/absl/base/port.h>
 #include <string.h>
 #include <time.h>
-#include <algorithm>
 #include <atomic>
 #include <cstdlib>
 #include <functional>
 #include <map>
 #include <memory>
-#include <ostream>
 #include <string>
 #include <vector>
 
 #include "client/replication_ddl_client.h"
+#include "gtest/gtest.h"
 #include "include/pegasus/client.h"
 #include "pegasus/error.h"
 #include "runtime/task/async_calls.h"
diff --git a/src/test/function_test/base_api/test_incr.cpp 
b/src/test/function_test/base_api/test_incr.cpp
index 9fb2ccdc9..3040fecec 100644
--- a/src/test/function_test/base_api/test_incr.cpp
+++ b/src/test/function_test/base_api/test_incr.cpp
@@ -17,14 +17,12 @@
  * under the License.
  */
 
-// IWYU pragma: no_include <gtest/gtest-message.h>
-// IWYU pragma: no_include <gtest/gtest-test-part.h>
-#include <gtest/gtest.h>
 #include <stdint.h>
 #include <unistd.h>
 #include <climits>
 #include <string>
 
+#include "gtest/gtest.h"
 #include "include/pegasus/client.h"
 #include "pegasus/error.h"
 #include "test/function_test/utils/test_util.h"
diff --git a/src/test/function_test/base_api/test_range_read.cpp 
b/src/test/function_test/base_api/test_range_read.cpp
index 5827d8da8..bdd9021d3 100644
--- a/src/test/function_test/base_api/test_range_read.cpp
+++ b/src/test/function_test/base_api/test_range_read.cpp
@@ -17,9 +17,6 @@
  * under the License.
  */
 
-// IWYU pragma: no_include <gtest/gtest-message.h>
-// IWYU pragma: no_include <gtest/gtest-test-part.h>
-#include <gtest/gtest.h>
 #include <stdint.h>
 #include <chrono>
 #include <map>
@@ -27,6 +24,7 @@
 #include <string>
 #include <thread>
 
+#include "gtest/gtest.h"
 #include "pegasus/client.h"
 #include "pegasus/error.h"
 #include "test/function_test/utils/test_util.h"
diff --git a/src/test/function_test/base_api/test_recall.cpp 
b/src/test/function_test/base_api/test_recall.cpp
index 109afb173..24a2c7f9a 100644
--- a/src/test/function_test/base_api/test_recall.cpp
+++ b/src/test/function_test/base_api/test_recall.cpp
@@ -19,9 +19,6 @@
 
 #include <boost/lexical_cast.hpp>
 // IWYU pragma: no_include <ext/alloc_traits.h>
-// IWYU pragma: no_include <gtest/gtest-message.h>
-// IWYU pragma: no_include <gtest/gtest-test-part.h>
-#include <gtest/gtest.h>
 #include <chrono>
 #include <iostream>
 #include <memory>
@@ -31,6 +28,7 @@
 
 #include "client/partition_resolver.h"
 #include "client/replication_ddl_client.h"
+#include "gtest/gtest.h"
 #include "include/pegasus/client.h"
 #include "pegasus/error.h"
 #include "test/function_test/utils/test_util.h"
diff --git a/src/test/function_test/base_api/test_scan.cpp 
b/src/test/function_test/base_api/test_scan.cpp
index ce5e723ac..2a8add472 100644
--- a/src/test/function_test/base_api/test_scan.cpp
+++ b/src/test/function_test/base_api/test_scan.cpp
@@ -17,17 +17,12 @@
  * under the License.
  */
 
-// IWYU pragma: no_include <gtest/gtest-message.h>
-// IWYU pragma: no_include <gtest/gtest-test-part.h>
-#include <gtest/gtest.h>
 #include <string.h>
 #include <time.h>
-#include <algorithm>
 #include <atomic>
 #include <chrono>
 #include <cstdint>
 #include <cstdlib>
-#include <iostream>
 #include <iterator>
 #include <map>
 #include <memory>
@@ -39,6 +34,7 @@
 #include "base/pegasus_const.h"
 #include "base/pegasus_utils.h"
 #include "client/replication_ddl_client.h"
+#include "gtest/gtest.h"
 #include "include/pegasus/client.h"
 #include "meta_admin_types.h"
 #include "pegasus/error.h"
diff --git a/src/test/function_test/base_api/test_ttl.cpp 
b/src/test/function_test/base_api/test_ttl.cpp
index 2fe5c0fec..d97c13e3a 100644
--- a/src/test/function_test/base_api/test_ttl.cpp
+++ b/src/test/function_test/base_api/test_ttl.cpp
@@ -17,9 +17,6 @@
  * under the License.
  */
 
-// IWYU pragma: no_include <gtest/gtest-message.h>
-// IWYU pragma: no_include <gtest/gtest-test-part.h>
-#include <gtest/gtest.h>
 #include <stdint.h>
 #include <time.h>
 #include <chrono>
@@ -30,6 +27,7 @@
 
 #include "base/pegasus_const.h"
 #include "client/replication_ddl_client.h"
+#include "gtest/gtest.h"
 #include "include/pegasus/client.h"
 #include "meta_admin_types.h"
 #include "pegasus/error.h"
diff --git a/src/test/function_test/bulk_load/test_bulk_load.cpp 
b/src/test/function_test/bulk_load/test_bulk_load.cpp
index b4076f60b..e5457bc1a 100644
--- a/src/test/function_test/bulk_load/test_bulk_load.cpp
+++ b/src/test/function_test/bulk_load/test_bulk_load.cpp
@@ -16,9 +16,6 @@
 // under the License.
 
 #include <fmt/core.h>
-// IWYU pragma: no_include <gtest/gtest-message.h>
-// IWYU pragma: no_include <gtest/gtest-test-part.h>
-#include <gtest/gtest.h>
 #include <nlohmann/json.hpp>
 #include <nlohmann/json_fwd.hpp>
 #include <rocksdb/env.h>
@@ -40,6 +37,7 @@
 #include "client/partition_resolver.h"
 #include "client/replication_ddl_client.h"
 #include "common/json_helper.h"
+#include "gtest/gtest.h"
 #include "include/pegasus/client.h"
 #include "include/pegasus/error.h"
 #include "meta/meta_bulk_load_service.h"
diff --git a/src/test/function_test/detect_hotspot/test_detect_hotspot.cpp 
b/src/test/function_test/detect_hotspot/test_detect_hotspot.cpp
index e8fb01fa2..785513370 100644
--- a/src/test/function_test/detect_hotspot/test_detect_hotspot.cpp
+++ b/src/test/function_test/detect_hotspot/test_detect_hotspot.cpp
@@ -17,9 +17,6 @@
  * under the License.
  */
 
-// IWYU pragma: no_include <gtest/gtest-message.h>
-// IWYU pragma: no_include <gtest/gtest-test-part.h>
-#include <gtest/gtest.h>
 #include <stdint.h>
 #include <unistd.h>
 #include <iostream>
@@ -29,6 +26,7 @@
 
 #include "client/replication_ddl_client.h"
 #include "common/gpid.h"
+#include "gtest/gtest.h"
 #include "include/pegasus/client.h"
 #include "include/pegasus/error.h"
 #include "replica_admin_types.h"
diff --git a/src/test/function_test/partition_split/test_split.cpp 
b/src/test/function_test/partition_split/test_split.cpp
index 761b9c8ef..23c7329a5 100644
--- a/src/test/function_test/partition_split/test_split.cpp
+++ b/src/test/function_test/partition_split/test_split.cpp
@@ -15,9 +15,6 @@
 // specific language governing permissions and limitations
 // under the License.
 
-// IWYU pragma: no_include <gtest/gtest-message.h>
-// IWYU pragma: no_include <gtest/gtest-test-part.h>
-#include <gtest/gtest.h>
 #include <stdint.h>
 #include <stdlib.h>
 #include <chrono>
@@ -32,6 +29,7 @@
 #include "client/partition_resolver.h"
 #include "client/replication_ddl_client.h"
 #include "common/gpid.h"
+#include "gtest/gtest.h"
 #include "include/pegasus/client.h"
 #include "metadata_types.h"
 #include "partition_split_types.h"
diff --git a/src/test/function_test/recovery/test_recovery.cpp 
b/src/test/function_test/recovery/test_recovery.cpp
index d2dab1f82..7b406254b 100644
--- a/src/test/function_test/recovery/test_recovery.cpp
+++ b/src/test/function_test/recovery/test_recovery.cpp
@@ -18,10 +18,6 @@
  */
 
 #include <fmt/core.h>
-// IWYU pragma: no_include <gtest/gtest-message.h>
-// IWYU pragma: no_include <gtest/gtest-test-part.h>
-#include <gtest/gtest.h>
-#include <algorithm>
 #include <chrono>
 #include <iostream>
 #include <memory>
@@ -31,6 +27,7 @@
 
 #include "client/partition_resolver.h"
 #include "client/replication_ddl_client.h"
+#include "gtest/gtest.h"
 #include "include/pegasus/client.h"
 #include "pegasus/error.h"
 #include "runtime/rpc/rpc_address.h"
diff --git a/src/test/function_test/restore/test_restore.cpp 
b/src/test/function_test/restore/test_restore.cpp
index a94ee7af3..3ee5003b7 100644
--- a/src/test/function_test/restore/test_restore.cpp
+++ b/src/test/function_test/restore/test_restore.cpp
@@ -19,9 +19,6 @@
 
 #include <boost/cstdint.hpp>
 #include <boost/lexical_cast.hpp>
-// IWYU pragma: no_include <gtest/gtest-message.h>
-// IWYU pragma: no_include <gtest/gtest-test-part.h>
-#include <gtest/gtest.h>
 #include <unistd.h>
 #include <algorithm>
 #include <chrono>
@@ -38,6 +35,7 @@
 #include "common/gpid.h"
 #include "common/replication_other_types.h"
 #include "dsn.layer2_types.h"
+#include "gtest/gtest.h"
 #include "include/pegasus/client.h"
 #include "pegasus/error.h"
 #include "runtime/api_layer1.h"
diff --git a/src/test/function_test/throttle/test_throttle.cpp 
b/src/test/function_test/throttle/test_throttle.cpp
index 23583a7bf..e30ef726a 100644
--- a/src/test/function_test/throttle/test_throttle.cpp
+++ b/src/test/function_test/throttle/test_throttle.cpp
@@ -18,12 +18,8 @@
  */
 
 #include <fmt/core.h>
-// IWYU pragma: no_include <gtest/gtest-message.h>
-// IWYU pragma: no_include <gtest/gtest-test-part.h>
-#include <gtest/gtest.h>
 #include <stdint.h>
 #include <unistd.h>
-#include <algorithm>
 #include <atomic>
 #include <iostream>
 #include <map>
@@ -35,6 +31,7 @@
 #include "client/partition_resolver.h"
 #include "client/replication_ddl_client.h"
 #include "common/gpid.h"
+#include "gtest/gtest.h"
 #include "include/pegasus/client.h"
 #include "pegasus/error.h"
 #include "runtime/api_layer1.h"
diff --git a/src/test/function_test/utils/global_env.cpp 
b/src/test/function_test/utils/global_env.cpp
index efeea9691..7f7e64b9a 100644
--- a/src/test/function_test/utils/global_env.cpp
+++ b/src/test/function_test/utils/global_env.cpp
@@ -20,7 +20,6 @@
 #include "global_env.h"
 
 #include <arpa/inet.h>
-#include <gtest/gtest.h>
 #include <libgen.h>
 #include <netinet/in.h>
 #include <stdint.h>
@@ -30,6 +29,7 @@
 #include <iostream>
 #include <sstream> // IWYU pragma: keep
 
+#include "gtest/gtest.h"
 // IWYU pragma: no_include "gtest/gtest-message.h"
 // IWYU pragma: no_include "gtest/gtest-test-part.h"
 #include "runtime/rpc/rpc_address.h"
diff --git a/src/test/function_test/utils/test_util.cpp 
b/src/test/function_test/utils/test_util.cpp
index d9b910681..81fded73b 100644
--- a/src/test/function_test/utils/test_util.cpp
+++ b/src/test/function_test/utils/test_util.cpp
@@ -21,7 +21,6 @@
 
 #include <nlohmann/json.hpp>
 #include <unistd.h>
-#include <algorithm>
 #include <fstream>
 #include <initializer_list>
 #include <utility>
@@ -31,8 +30,6 @@
 #include "client/replication_ddl_client.h"
 #include "common/replication_other_types.h"
 #include "fmt/core.h"
-#include "gtest/gtest-message.h"
-#include "gtest/gtest-test-part.h"
 #include "gtest/gtest.h"
 #include "include/pegasus/client.h"
 #include "nlohmann/detail/iterators/iter_impl.hpp"
diff --git a/src/test_util/test_util.cpp b/src/test_util/test_util.cpp
index a4dbf41de..338ec4ddf 100644
--- a/src/test_util/test_util.cpp
+++ b/src/test_util/test_util.cpp
@@ -19,11 +19,8 @@
 
 #include <gtest/gtest-spi.h>
 #include <chrono>
-#include <ostream>
 #include <thread>
 
-#include "gtest/gtest-message.h"
-#include "gtest/gtest-test-part.h"
 #include "gtest/gtest.h"
 #include "metadata_types.h"
 #include "rocksdb/env.h"
diff --git a/src/utils/test/TokenBucketTest.cpp 
b/src/utils/test/TokenBucketTest.cpp
index 8ad5b32a7..70504d854 100644
--- a/src/utils/test/TokenBucketTest.cpp
+++ b/src/utils/test/TokenBucketTest.cpp
@@ -17,14 +17,12 @@
 #include "TokenBucketTest.h"
 
 #include <boost/optional/optional.hpp>
-// IWYU pragma: no_include <gtest/gtest-message.h>
-// IWYU pragma: no_include <gtest/gtest-param-test.h>
-// IWYU pragma: no_include <gtest/gtest-test-part.h>
-#include <gtest/gtest.h>
 #include <stddef.h>
 #include <algorithm>
+#include <string>
 #include <vector>
 
+#include "gtest/gtest.h"
 #include "utils/TokenBucket.h"
 
 using namespace folly;
diff --git a/src/utils/test/autoref_ptr_test.cpp 
b/src/utils/test/autoref_ptr_test.cpp
index 4ff6a1529..b85ddb54c 100644
--- a/src/utils/test/autoref_ptr_test.cpp
+++ b/src/utils/test/autoref_ptr_test.cpp
@@ -5,13 +5,10 @@
 // this test is copy from
 // 
https://github.com/chromium/chromium/blob/07eea964c3f60f501782d8eb51f62ca75ddf3908/base/memory/ref_counted_unittest.cc
 
-// IWYU pragma: no_include <gtest/gtest-message.h>
-// IWYU pragma: no_include <gtest/gtest-test-part.h>
-#include <gtest/gtest.h>
-#include <memory>
-#include <ostream>
+#include <string>
 #include <utility>
 
+#include "gtest/gtest.h"
 #include "utils/autoref_ptr.h"
 
 namespace {
diff --git a/src/utils/test/binary_reader_test.cpp 
b/src/utils/test/binary_reader_test.cpp
index 9a2d74f93..eacf0749b 100644
--- a/src/utils/test/binary_reader_test.cpp
+++ b/src/utils/test/binary_reader_test.cpp
@@ -17,10 +17,7 @@
 
 #include "utils/binary_reader.h"
 
-// IWYU pragma: no_include <gtest/gtest-message.h>
-// IWYU pragma: no_include <gtest/gtest-test-part.h>
-#include <gtest/gtest.h>
-
+#include "gtest/gtest.h"
 #include "utils/defer.h"
 
 namespace dsn {
diff --git a/src/utils/test/command_manager_test.cpp 
b/src/utils/test/command_manager_test.cpp
index f88dcba22..e6e2598ca 100644
--- a/src/utils/test/command_manager_test.cpp
+++ b/src/utils/test/command_manager_test.cpp
@@ -19,9 +19,8 @@
 
 #include <boost/algorithm/string/join.hpp>
 #include <fmt/core.h>
-// IWYU pragma: no_include <gtest/gtest-message.h>
-// IWYU pragma: no_include <gtest/gtest-test-part.h>
-#include <gtest/gtest.h>
+
+#include "gtest/gtest.h"
 
 using std::string;
 using std::vector;
diff --git a/src/utils/test/configuration.cpp b/src/utils/test/configuration.cpp
index f9b1c7670..1930503ae 100644
--- a/src/utils/test/configuration.cpp
+++ b/src/utils/test/configuration.cpp
@@ -24,9 +24,6 @@
  * THE SOFTWARE.
  */
 
-// IWYU pragma: no_include <gtest/gtest-message.h>
-// IWYU pragma: no_include <gtest/gtest-test-part.h>
-#include <gtest/gtest.h>
 #include <stdint.h>
 #include <string.h>
 #include <algorithm>
@@ -37,6 +34,7 @@
 #include <string>
 #include <vector>
 
+#include "gtest/gtest.h"
 #include "utils/configuration.h"
 #include "utils/string_view.h"
 
diff --git a/src/utils/test/endian_test.cpp b/src/utils/test/endian_test.cpp
index 33aa27ba4..92533fd67 100644
--- a/src/utils/test/endian_test.cpp
+++ b/src/utils/test/endian_test.cpp
@@ -15,13 +15,11 @@
 // specific language governing permissions and limitations
 // under the License.
 
-// IWYU pragma: no_include <gtest/gtest-message.h>
-// IWYU pragma: no_include <gtest/gtest-test-part.h>
-#include <gtest/gtest.h>
 #include <stdint.h>
 #include <limits>
 #include <string>
 
+#include "gtest/gtest.h"
 #include "utils/endians.h"
 #include "utils/string_view.h"
 
diff --git a/src/utils/test/env.cpp b/src/utils/test/env.cpp
index 6b82bed76..ab3763c27 100644
--- a/src/utils/test/env.cpp
+++ b/src/utils/test/env.cpp
@@ -34,18 +34,14 @@
  */
 
 #include <fmt/core.h>
-#include <gtest/gtest-param-test.h>
-// IWYU pragma: no_include <gtest/gtest-message.h>
-// IWYU pragma: no_include <gtest/gtest-test-part.h>
-#include <gtest/gtest.h>
 #include <rocksdb/env.h>
 #include <rocksdb/slice.h>
 #include <rocksdb/status.h>
-#include <algorithm>
 #include <cstdint>
 #include <limits>
 #include <string>
 
+#include "gtest/gtest.h"
 #include "test_util/test_util.h"
 #include "utils/env.h"
 #include "utils/error_code.h"
diff --git a/src/utils/test/fail_point_test.cpp 
b/src/utils/test/fail_point_test.cpp
index b7668b03c..743a3f66b 100644
--- a/src/utils/test/fail_point_test.cpp
+++ b/src/utils/test/fail_point_test.cpp
@@ -28,11 +28,9 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-// IWYU pragma: no_include <gtest/gtest-message.h>
-// IWYU pragma: no_include <gtest/gtest-test-part.h>
-#include <gtest/gtest.h>
-#include <memory>
+#include <string>
 
+#include "gtest/gtest.h"
 #include "utils/fail_point.h"
 #include "utils/fail_point_impl.h"
 #include "utils/string_view.h"
diff --git a/src/utils/test/file_system_test.cpp 
b/src/utils/test/file_system_test.cpp
index f497a908b..66a224f9e 100644
--- a/src/utils/test/file_system_test.cpp
+++ b/src/utils/test/file_system_test.cpp
@@ -15,10 +15,6 @@
 // specific language governing permissions and limitations
 // under the License.
 
-// IWYU pragma: no_include <gtest/gtest-param-test.h>
-// IWYU pragma: no_include <gtest/gtest-message.h>
-// IWYU pragma: no_include <gtest/gtest-test-part.h>
-#include <gtest/gtest.h>
 #include <rocksdb/env.h>
 #include <rocksdb/slice.h>
 #include <rocksdb/status.h>
@@ -26,6 +22,7 @@
 #include <set>
 #include <string>
 
+#include "gtest/gtest.h"
 #include "utils/env.h"
 #include "utils/error_code.h"
 #include "utils/filesystem.h"
diff --git a/src/utils/test/file_utils.cpp b/src/utils/test/file_utils.cpp
index 42066d2bd..5c5a29596 100644
--- a/src/utils/test/file_utils.cpp
+++ b/src/utils/test/file_utils.cpp
@@ -24,19 +24,15 @@
  * THE SOFTWARE.
  */
 
-// IWYU pragma: no_include <gtest/gtest-message.h>
-// IWYU pragma: no_include <gtest/gtest-param-test.h>
-// IWYU pragma: no_include <gtest/gtest-test-part.h>
-#include <gtest/gtest.h>
 #include <rocksdb/env.h>
 #include <rocksdb/slice.h>
 #include <rocksdb/status.h>
 #include <stdint.h>
 #include <time.h>
-#include <fstream>
 #include <string>
 #include <vector>
 
+#include "gtest/gtest.h"
 #include "test_util/test_util.h"
 #include "utils/env.h"
 #include "utils/error_code.h"
diff --git a/src/utils/test/flag_test.cpp b/src/utils/test/flag_test.cpp
index dccee0bac..e3b601991 100644
--- a/src/utils/test/flag_test.cpp
+++ b/src/utils/test/flag_test.cpp
@@ -16,13 +16,11 @@
 // under the License.
 
 #include <fmt/core.h>
-// IWYU pragma: no_include <gtest/gtest-message.h>
-// IWYU pragma: no_include <gtest/gtest-test-part.h>
-#include <gtest/gtest.h>
 #include <stdint.h>
 #include <iostream>
 #include <string>
 
+#include "gtest/gtest.h"
 #include "utils/error_code.h"
 #include "utils/errors.h"
 #include "utils/flags.h"
diff --git a/src/utils/test/fmt_logging_test.cpp 
b/src/utils/test/fmt_logging_test.cpp
index a8c5f7d13..876d9b0a8 100644
--- a/src/utils/test/fmt_logging_test.cpp
+++ b/src/utils/test/fmt_logging_test.cpp
@@ -25,13 +25,11 @@
  */
 
 #include <fmt/core.h>
-// IWYU pragma: no_include <gtest/gtest-message.h>
-// IWYU pragma: no_include <gtest/gtest-test-part.h>
-#include <gtest/gtest.h>
 #include <memory>
 
 #include "common/gpid.h"
 #include "common/replication.codes.h"
+#include "gtest/gtest.h"
 #include "runtime/task/task_code.h"
 #include "utils/error_code.h"
 #include "utils/errors.h"
diff --git a/src/utils/test/hostname_test.cpp b/src/utils/test/hostname_test.cpp
index 3bd71aeba..87489bdd9 100644
--- a/src/utils/test/hostname_test.cpp
+++ b/src/utils/test/hostname_test.cpp
@@ -15,12 +15,10 @@
 // specific language governing permissions and limitations
 // under the License.
 
-// IWYU pragma: no_include <gtest/gtest-message.h>
-// IWYU pragma: no_include <gtest/gtest-test-part.h>
-#include <gtest/gtest.h>
 #include <netinet/in.h>
 #include <string>
 
+#include "gtest/gtest.h"
 #include "runtime/rpc/rpc_address.h"
 #include "utils/utils.h"
 
diff --git a/src/utils/test/join_point_test.cpp 
b/src/utils/test/join_point_test.cpp
index a23740579..67ffca9dc 100644
--- a/src/utils/test/join_point_test.cpp
+++ b/src/utils/test/join_point_test.cpp
@@ -26,11 +26,10 @@
 
 #include "utils/join_point.h"
 
-// IWYU pragma: no_include <gtest/gtest-message.h>
-// IWYU pragma: no_include <gtest/gtest-test-part.h>
-#include <gtest/gtest.h>
 #include <vector>
 
+#include "gtest/gtest.h"
+
 namespace dsn {
 
 class join_point_test : public ::testing::Test
diff --git a/src/utils/test/json_helper_test.cpp 
b/src/utils/test/json_helper_test.cpp
index 7e3c4ff08..4006b10bf 100644
--- a/src/utils/test/json_helper_test.cpp
+++ b/src/utils/test/json_helper_test.cpp
@@ -24,11 +24,7 @@
  * THE SOFTWARE.
  */
 
-// IWYU pragma: no_include <gtest/gtest-message.h>
-// IWYU pragma: no_include <gtest/gtest-test-part.h>
-#include <gtest/gtest.h>
 #include <string.h>
-#include <algorithm>
 #include <cstdint>
 #include <iostream>
 #include <map>
@@ -39,6 +35,7 @@
 #include <vector>
 
 #include "common/json_helper.h"
+#include "gtest/gtest.h"
 #include "utils/blob.h"
 
 namespace dsn {
diff --git a/src/utils/test/latency_tracer_test.cpp 
b/src/utils/test/latency_tracer_test.cpp
index 5cd7ef2b7..1e4d1af9a 100644
--- a/src/utils/test/latency_tracer_test.cpp
+++ b/src/utils/test/latency_tracer_test.cpp
@@ -17,10 +17,6 @@
 
 #include <fmt/core.h>
 #include <gmock/gmock.h> // IWYU pragma: keep
-// IWYU pragma: no_include <gmock/gmock-matchers.h>
-// IWYU pragma: no_include <gtest/gtest-message.h>
-// IWYU pragma: no_include <gtest/gtest-test-part.h>
-#include <gtest/gtest.h>
 #include <cstdint>
 #include <iterator>
 #include <map>
@@ -29,6 +25,8 @@
 #include <utility>
 
 #include "common/replication.codes.h"
+#include "gmock/gmock.h"
+#include "gtest/gtest.h"
 #include "utils/latency_tracer.h"
 
 namespace dsn {
diff --git a/src/utils/test/lock.std.cpp b/src/utils/test/lock.std.cpp
index c7027a886..18aef80bd 100644
--- a/src/utils/test/lock.std.cpp
+++ b/src/utils/test/lock.std.cpp
@@ -24,12 +24,10 @@
  * THE SOFTWARE.
  */
 
-// IWYU pragma: no_include <gtest/gtest-message.h>
-// IWYU pragma: no_include <gtest/gtest-test-part.h>
-#include <gtest/gtest.h>
-#include <memory>
+#include <string>
 #include <thread>
 
+#include "gtest/gtest.h"
 #include "runtime/rpc/rpc_address.h"
 #include "utils/lockp.std.h"
 
diff --git a/src/utils/test/logger.cpp b/src/utils/test/logger.cpp
index 9ae0a4807..f8b213f6f 100644
--- a/src/utils/test/logger.cpp
+++ b/src/utils/test/logger.cpp
@@ -25,19 +25,16 @@
  */
 
 #include <errno.h>
-// IWYU pragma: no_include <gtest/gtest-message.h>
-// IWYU pragma: no_include <gtest/gtest-test-part.h>
-#include <gtest/gtest.h>
 #include <stdarg.h>
 #include <stdio.h>
 #include <unistd.h>
 #include <algorithm>
 #include <memory>
-#include <ostream>
 #include <string>
 #include <thread>
 #include <vector>
 
+#include "gtest/gtest.h"
 #include "utils/api_utilities.h"
 #include "utils/error_code.h"
 #include "utils/filesystem.h"
diff --git a/src/utils/test/long_adder_test.cpp 
b/src/utils/test/long_adder_test.cpp
index 8351f8b20..a6a910a92 100644
--- a/src/utils/test/long_adder_test.cpp
+++ b/src/utils/test/long_adder_test.cpp
@@ -16,18 +16,15 @@
 // under the License.
 
 #include <fmt/core.h>
-// IWYU pragma: no_include <gtest/gtest-message.h>
-// IWYU pragma: no_include <gtest/gtest-test-part.h>
-#include <gtest/gtest.h>
 #include <stdint.h>
 #include <stdio.h>
-#include <algorithm>
 #include <chrono>
 #include <functional>
 #include <ratio>
 #include <thread>
 #include <vector>
 
+#include "gtest/gtest.h"
 #include "runtime/api_layer1.h"
 #include "utils/long_adder.h"
 
diff --git a/src/utils/test/memutil_test.cpp b/src/utils/test/memutil_test.cpp
index 87c4da8dc..91d8fa51c 100644
--- a/src/utils/test/memutil_test.cpp
+++ b/src/utils/test/memutil_test.cpp
@@ -16,10 +16,9 @@
 
 #include "utils/memutil.h"
 
-// IWYU pragma: no_include <gtest/gtest-message.h>
-// IWYU pragma: no_include <gtest/gtest-test-part.h>
-#include <gtest/gtest.h>
-#include <memory>
+#include <string>
+
+#include "gtest/gtest.h"
 
 TEST(MemUtilTest, memmatch)
 {
diff --git a/src/utils/test/nth_element_test.cpp 
b/src/utils/test/nth_element_test.cpp
index e3771fd53..4bbac1601 100644
--- a/src/utils/test/nth_element_test.cpp
+++ b/src/utils/test/nth_element_test.cpp
@@ -18,12 +18,9 @@
 #include "utils/nth_element.h"
 
 #include <fmt/core.h>
-// IWYU pragma: no_include <gtest/gtest-message.h>
-// IWYU pragma: no_include <gtest/gtest-test-part.h>
-#include <gtest/gtest.h>
 #include <cstdint>
-#include <iomanip>
 
+#include "gtest/gtest.h"
 #include "nth_element_utils.h"
 
 namespace dsn {
diff --git a/src/utils/test/output_utils_test.cpp 
b/src/utils/test/output_utils_test.cpp
index b6c265618..cd3a9cdbf 100644
--- a/src/utils/test/output_utils_test.cpp
+++ b/src/utils/test/output_utils_test.cpp
@@ -27,12 +27,11 @@
 #include "utils/output_utils.h"
 
 // IWYU pragma: no_include <ext/alloc_traits.h>
-// IWYU pragma: no_include <gtest/gtest-message.h>
-// IWYU pragma: no_include <gtest/gtest-test-part.h>
-#include <gtest/gtest.h>
 #include <string>
 #include <vector>
 
+#include "gtest/gtest.h"
+
 using std::vector;
 using std::string;
 using dsn::utils::table_printer;
diff --git a/src/utils/test/priority_queue.cpp 
b/src/utils/test/priority_queue.cpp
index f5c552b7f..ebe985e92 100644
--- a/src/utils/test/priority_queue.cpp
+++ b/src/utils/test/priority_queue.cpp
@@ -35,15 +35,13 @@
 
 #include "utils/priority_queue.h"
 
-// IWYU pragma: no_include <gtest/gtest-message.h>
-// IWYU pragma: no_include <gtest/gtest-test-part.h>
-#include <gtest/gtest.h>
 #include <algorithm>
 #include <chrono>
 #include <memory>
 #include <thread>
 #include <vector>
 
+#include "gtest/gtest.h"
 #include "utils/utils.h"
 
 using namespace ::dsn::utils;
diff --git a/src/utils/test/rand_test.cpp b/src/utils/test/rand_test.cpp
index 804b26eb5..3154774c4 100644
--- a/src/utils/test/rand_test.cpp
+++ b/src/utils/test/rand_test.cpp
@@ -17,13 +17,12 @@
 
 #include "utils/rand.h"
 
-// IWYU pragma: no_include <gtest/gtest-message.h>
-// IWYU pragma: no_include <gtest/gtest-test-part.h>
-#include <gtest/gtest.h>
 #include <algorithm>
 #include <thread>
 #include <vector>
 
+#include "gtest/gtest.h"
+
 namespace dsn {
 
 TEST(random, sanity)
diff --git a/src/utils/test/sema.cpp b/src/utils/test/sema.cpp
index 40b14824b..2da4df61d 100644
--- a/src/utils/test/sema.cpp
+++ b/src/utils/test/sema.cpp
@@ -35,13 +35,12 @@
 
 #include "utils/hpc_locks/sema.h"
 
-// IWYU pragma: no_include <gtest/gtest-message.h>
-// IWYU pragma: no_include <gtest/gtest-test-part.h>
-#include <gtest/gtest.h>
 #include <chrono>
-#include <memory>
+#include <string>
 #include <thread>
 
+#include "gtest/gtest.h"
+
 TEST(core, Semaphore)
 {
     Semaphore s;
diff --git a/src/utils/test/smart_pointers_test.cpp 
b/src/utils/test/smart_pointers_test.cpp
index 7a6bba05f..7c36a01cc 100644
--- a/src/utils/test/smart_pointers_test.cpp
+++ b/src/utils/test/smart_pointers_test.cpp
@@ -14,15 +14,13 @@
 
 #include "utils/smart_pointers.h"
 
-// IWYU pragma: no_include <gtest/gtest-message.h>
-// IWYU pragma: no_include <gtest/gtest-test-part.h>
-#include <gtest/gtest.h>
-#include <algorithm>
 #include <string>
 #include <type_traits>
 #include <utility>
 #include <vector>
 
+#include "gtest/gtest.h"
+
 using namespace dsn;
 
 TEST(MakeUniqueTest, Basic)
diff --git a/src/utils/test/string_conv_test.cpp 
b/src/utils/test/string_conv_test.cpp
index 92a46ed80..e7a2c26bc 100644
--- a/src/utils/test/string_conv_test.cpp
+++ b/src/utils/test/string_conv_test.cpp
@@ -26,10 +26,7 @@
 
 #include "utils/string_conv.h"
 
-// IWYU pragma: no_include <gtest/gtest-message.h>
-// IWYU pragma: no_include <gtest/gtest-test-part.h>
-#include <gtest/gtest.h>
-
+#include "gtest/gtest.h"
 #include "utils/string_view.h"
 
 TEST(string_conv, buf2bool)
diff --git a/src/utils/test/string_view_test.cpp 
b/src/utils/test/string_view_test.cpp
index 06c5e6d8a..4a757988c 100644
--- a/src/utils/test/string_view_test.cpp
+++ b/src/utils/test/string_view_test.cpp
@@ -14,13 +14,12 @@
 
 #include "utils/string_view.h"
 
-// IWYU pragma: no_include <gtest/gtest-message.h>
-// IWYU pragma: no_include <gtest/gtest-test-part.h>
-#include <gtest/gtest.h>
 #include <iomanip>
 #include <ostream>
 #include <type_traits>
 
+#include "gtest/gtest.h"
+
 namespace {
 
 // Separated from STL1() because some compilers produce an overly
diff --git a/src/utils/test/time_utils_test.cpp 
b/src/utils/test/time_utils_test.cpp
index aea665243..74c0c8db4 100644
--- a/src/utils/test/time_utils_test.cpp
+++ b/src/utils/test/time_utils_test.cpp
@@ -26,9 +26,7 @@
 
 #include "utils/time_utils.h"
 
-// IWYU pragma: no_include <gtest/gtest-message.h>
-// IWYU pragma: no_include <gtest/gtest-test-part.h>
-#include <gtest/gtest.h>
+#include "gtest/gtest.h"
 
 namespace dsn {
 namespace utils {
diff --git a/src/utils/test/token_bucket_throttling_controller_test.cpp 
b/src/utils/test/token_bucket_throttling_controller_test.cpp
index 69fa15f9f..d3812d484 100644
--- a/src/utils/test/token_bucket_throttling_controller_test.cpp
+++ b/src/utils/test/token_bucket_throttling_controller_test.cpp
@@ -17,11 +17,10 @@
 
 #include "utils/token_bucket_throttling_controller.h"
 
-// IWYU pragma: no_include <gtest/gtest-message.h>
-// IWYU pragma: no_include <gtest/gtest-test-part.h>
-#include <gtest/gtest.h>
 #include <unistd.h>
 
+#include "gtest/gtest.h"
+
 namespace dsn {
 namespace utils {
 
diff --git a/src/utils/test/token_buckets_test.cpp 
b/src/utils/test/token_buckets_test.cpp
index e47880697..512335cd9 100644
--- a/src/utils/test/token_buckets_test.cpp
+++ b/src/utils/test/token_buckets_test.cpp
@@ -15,13 +15,11 @@
 // specific language governing permissions and limitations
 // under the License.
 
-// IWYU pragma: no_include <gtest/gtest-message.h>
-// IWYU pragma: no_include <gtest/gtest-test-part.h>
-#include <gtest/gtest.h>
 #include <memory>
 #include <string>
 #include <unordered_map>
 
+#include "gtest/gtest.h"
 #include "utils/TokenBucket.h"
 #include "utils/token_buckets.h"
 
diff --git a/src/utils/test/utils.cpp b/src/utils/test/utils.cpp
index 756f7f5de..5ca301047 100644
--- a/src/utils/test/utils.cpp
+++ b/src/utils/test/utils.cpp
@@ -33,20 +33,18 @@
  *     xxxx-xx-xx, author, fix bug about xxx
  */
 
-// IWYU pragma: no_include <gtest/gtest-message.h>
-// IWYU pragma: no_include <gtest/gtest-param-test.h>
-// IWYU pragma: no_include <gtest/gtest-test-part.h>
-#include <gtest/gtest.h>
 #include <stddef.h>
 #include <list>
 #include <map>
 #include <set>
 #include <string>
+#include <tuple>
 #include <type_traits>
 #include <unordered_set>
 #include <utility>
 #include <vector>
 
+#include "gtest/gtest.h"
 #include "utils/autoref_ptr.h"
 #include "utils/binary_reader.h"
 #include "utils/binary_writer.h"
diff --git a/src/zookeeper/test/distributed_lock_zookeeper.cpp 
b/src/zookeeper/test/distributed_lock_zookeeper.cpp
index 1ba3ce628..7da48ef43 100644
--- a/src/zookeeper/test/distributed_lock_zookeeper.cpp
+++ b/src/zookeeper/test/distributed_lock_zookeeper.cpp
@@ -24,12 +24,8 @@
  * THE SOFTWARE.
  */
 
-// IWYU pragma: no_include <gtest/gtest-message.h>
-// IWYU pragma: no_include <gtest/gtest-test-part.h>
-#include <gtest/gtest.h>
 #include <stdlib.h>
 #include <time.h>
-#include <algorithm>
 #include <chrono>
 #include <cstdint>
 #include <string>
@@ -37,6 +33,7 @@
 #include <utility>
 #include <vector>
 
+#include "gtest/gtest.h"
 #include "runtime/service_app.h"
 #include "runtime/task/task.h"
 #include "runtime/task/task_code.h"
diff --git a/thirdparty/CMakeLists.txt b/thirdparty/CMakeLists.txt
index 967fd4885..131788e5a 100644
--- a/thirdparty/CMakeLists.txt
+++ b/thirdparty/CMakeLists.txt
@@ -98,9 +98,9 @@ ExternalProject_Add(readerwriterqueue
 )
 
 ExternalProject_Add(googletest
-        URL ${OSS_URL_PREFIX}/googletest-release-1.8.0.tar.gz
-        https://codeload.github.com/google/googletest/tar.gz/release-1.8.0
-        URL_MD5 16877098823401d1bf2ed7891d7dce36
+        URL ${OSS_URL_PREFIX}/googletest-1.14.0.tar.gz
+        https://github.com/google/googletest/archive/refs/tags/v1.14.0.tar.gz
+        URL_MD5 c8340a482851ef6a3fe618a082304cfc
         CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${TP_OUTPUT}
         -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER}
         -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}
@@ -370,8 +370,9 @@ ExternalProject_Add(s2geometry
         URL 
${OSS_URL_PREFIX}/s2geometry-e8d16637a467d9f096a92a6d81a50a9b747ca828.zip
         
https://github.com/neverchanje/s2geometry/archive/e8d16637a467d9f096a92a6d81a50a9b747ca828.zip
         URL_MD5 75cc44c9c31382083d8a2d0e42590788
-        PATCH_COMMAND patch -p0 < ${TP_DIR}/fix_s2_for_aarch64.patch
+        PATCH_COMMAND patch -p1 < ${TP_DIR}/fix_s2_build_with_cxx17.patch
         CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${TP_OUTPUT}
+        -DGOOGLETEST_VERSION=1.14.0
         -DGTEST_ROOT=${googletest_SRC}/googletest
         -DBUILD_SHARED_LIBS=OFF
         -DBUILD_PYTHON=OFF
@@ -379,6 +380,7 @@ ExternalProject_Add(s2geometry
         -DBUILD_EXAMPLES=OFF
         -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER}
         -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}
+        -DCMAKE_CXX_STANDARD=17
         DEPENDS googletest
         DOWNLOAD_EXTRACT_TIMESTAMP true
         DOWNLOAD_NO_PROGRESS true
diff --git a/thirdparty/fix_s2_build_with_cxx17.patch 
b/thirdparty/fix_s2_build_with_cxx17.patch
new file mode 100644
index 000000000..5c9df13de
--- /dev/null
+++ b/thirdparty/fix_s2_build_with_cxx17.patch
@@ -0,0 +1,13 @@
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 24cbe13..312af3a 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -13,7 +13,7 @@ if (APPLE)
+     set(CMAKE_MACOSX_RPATH TRUE)
+ endif()
+ 
+-set(CMAKE_CXX_STANDARD 11)
++set(CMAKE_CXX_STANDARD 17)
+ set(CMAKE_CXX_STANDARD_REQUIRED ON)
+ # No compiler-specific extensions, i.e. -std=c++11, not -std=gnu++11.
+ set(CMAKE_CXX_EXTENSIONS OFF)
diff --git a/thirdparty/fix_s2_for_aarch64.patch 
b/thirdparty/fix_s2_for_aarch64.patch
deleted file mode 100644
index c218233ac..000000000
--- a/thirdparty/fix_s2_for_aarch64.patch
+++ /dev/null
@@ -1,10 +0,0 @@
---- CMakeLists.txt     2022-04-24 06:33:29.829438987 +0000
-+++ CMakeLists.aarch64.txt     2022-04-24 06:34:09.079226044 +0000
-@@ -355,6 +355,7 @@ install(FILES src/s2/third_party/absl/ba
-               src/s2/third_party/absl/base/port.h
-               src/s2/third_party/absl/base/thread_annotations.h
-         DESTINATION include/s2/third_party/absl/base)
-+execute_process(COMMAND sed -i "/attributes\.h/a\#include 
\"s2\/base\/integral_types\.h\"" 
${PROJECT_SOURCE_DIR}/src/s2/third_party/absl/base/internal/unaligned_access.h)
- install(FILES src/s2/third_party/absl/base/internal/identity.h
-               src/s2/third_party/absl/base/internal/inline_variable.h
-               src/s2/third_party/absl/base/internal/invoke.h


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]


Reply via email to