diff --git a/CMakeLists.txt b/CMakeLists.txt index 182064b71b128..acf707f87f68a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1300,6 +1300,9 @@ if(gRPC_BUILD_TESTS) add_dependencies(buildtests_cxx alts_zero_copy_grpc_protector_test) add_dependencies(buildtests_cxx arena_promise_test) add_dependencies(buildtests_cxx arena_test) + if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_MAC OR _gRPC_PLATFORM_POSIX) + add_dependencies(buildtests_cxx ares_resolver_fork_safety_test) + endif() add_dependencies(buildtests_cxx async_end2end_test) add_dependencies(buildtests_cxx auth_context_test) add_dependencies(buildtests_cxx auth_property_iterator_test) @@ -8399,6 +8402,53 @@ target_link_libraries(arena_test ) +endif() +if(gRPC_BUILD_TESTS) +if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_MAC OR _gRPC_PLATFORM_POSIX) + + add_executable(ares_resolver_fork_safety_test + test/core/event_engine/posix/ares_resolver_fork_safety_test.cc + test/core/event_engine/posix/dns_server.cc + ) + if(WIN32 AND MSVC) + if(BUILD_SHARED_LIBS) + target_compile_definitions(ares_resolver_fork_safety_test + PRIVATE + "GPR_DLL_IMPORTS" + "GRPC_DLL_IMPORTS" + "GRPCXX_DLL_IMPORTS" + ) + endif() + endif() + target_compile_features(ares_resolver_fork_safety_test PUBLIC cxx_std_17) + target_include_directories(ares_resolver_fork_safety_test + PRIVATE + ${CMAKE_CURRENT_SOURCE_DIR} + ${CMAKE_CURRENT_SOURCE_DIR}/include + ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR} + ${_gRPC_RE2_INCLUDE_DIR} + ${_gRPC_SSL_INCLUDE_DIR} + ${_gRPC_UPB_GENERATED_DIR} + ${_gRPC_UPB_GRPC_GENERATED_DIR} + ${_gRPC_UPB_INCLUDE_DIR} + ${_gRPC_XXHASH_INCLUDE_DIR} + ${_gRPC_ZLIB_INCLUDE_DIR} + third_party/googletest/googletest/include + third_party/googletest/googletest + third_party/googletest/googlemock/include + third_party/googletest/googlemock + ${_gRPC_PROTO_GENS_DIR} + ) + + target_link_libraries(ares_resolver_fork_safety_test + ${_gRPC_ALLTARGETS_LIBRARIES} + gtest + grpc++ + grpc_test_util + ) + + +endif() endif() if(gRPC_BUILD_TESTS) diff --git a/build_autogenerated.yaml b/build_autogenerated.yaml index cdd29cf7df596..b92b84a5fc932 100644 --- a/build_autogenerated.yaml +++ b/build_autogenerated.yaml @@ -6347,6 +6347,23 @@ targets: - gtest - grpc_test_util_unsecure uses_polling: false +- name: ares_resolver_fork_safety_test + gtest: true + build: test + language: c++ + headers: + - test/core/event_engine/posix/dns_server.h + src: + - test/core/event_engine/posix/ares_resolver_fork_safety_test.cc + - test/core/event_engine/posix/dns_server.cc + deps: + - gtest + - grpc++ + - grpc_test_util + platforms: + - linux + - posix + - mac - name: async_end2end_test gtest: true build: test diff --git a/test/core/event_engine/posix/ares_resolver_fork_safety_test.cc b/test/core/event_engine/posix/ares_resolver_fork_safety_test.cc index d91686c75b880..04479a3586ad3 100644 --- a/test/core/event_engine/posix/ares_resolver_fork_safety_test.cc +++ b/test/core/event_engine/posix/ares_resolver_fork_safety_test.cc @@ -95,8 +95,7 @@ TEST_F(AresResolverTest, ResetThenOrphanDoesNotCrash) { // // This is a more realistic scenario: the resolver has active DNS queries // when the fork handler fires and tears things down. -TEST_F(AresResolverTest, - ResetThenOrphanWithPendingLookupsDoesNotCrash) { +TEST_F(AresResolverTest, ResetThenOrphanWithPendingLookupsDoesNotCrash) { auto dns_server = DnsServer::Start(grpc_pick_unused_port_or_die()); ASSERT_TRUE(dns_server.ok()) << dns_server.status(); @@ -104,8 +103,8 @@ TEST_F(AresResolverTest, auto* poller = GetPoller(ee.get()); auto ares_resolver = AresResolver::CreateAresResolver( - dns_server->address(), - std::make_unique(poller), ee); + dns_server->address(), std::make_unique(poller), + ee); ASSERT_TRUE(ares_resolver.ok()) << ares_resolver.status(); auto reinit_handle = ares_resolver->get()->GetReinitHandle().lock(); @@ -131,9 +130,7 @@ TEST_F(AresResolverTest, #else // GRPC_ENABLE_FORK_SUPPORT -TEST(AresResolverTest, Skipped) { - GTEST_SKIP() << "Fork support is disabled"; -} +TEST(AresResolverTest, Skipped) { GTEST_SKIP() << "Fork support is disabled"; } #endif // GRPC_ENABLE_FORK_SUPPORT diff --git a/tools/run_tests/generated/tests.json b/tools/run_tests/generated/tests.json index bd6f53b1967b4..6b0ab7c6d00a4 100644 --- a/tools/run_tests/generated/tests.json +++ b/tools/run_tests/generated/tests.json @@ -545,6 +545,28 @@ ], "uses_polling": false }, + { + "args": [], + "benchmark": false, + "ci_platforms": [ + "linux", + "mac", + "posix" + ], + "cpu_cost": 1.0, + "exclude_configs": [], + "exclude_iomgrs": [], + "flaky": false, + "gtest": true, + "language": "c++", + "name": "ares_resolver_fork_safety_test", + "platforms": [ + "linux", + "mac", + "posix" + ], + "uses_polling": true + }, { "args": [], "benchmark": false,