From 12c97481349d88852490a4acd0b5a0f9301d5b6c Mon Sep 17 00:00:00 2001 From: Craig Tiller Date: Sun, 27 Aug 2023 20:48:13 -0700 Subject: [PATCH] [chttp2] New framing layer (#33692) Building out a new framing layer for chttp2. The central idea here is to have the framing layer be solely responsible for serialization of frames, and their deserialization - the framing layer can reject frames that have invalid syntax - but the enacting of what that frame means is left to a higher layer. This class will become foundational for the promise conversion of chttp2 - by eliminating action from the parsing of frames we can reuse this sensitive code. Right now the new layer is inactive - there's a test that exercises it relatively well, and not much more. In the next PRs I'll add an experiments to enable using this layer or the existing code in the writing and reading paths. --------- Co-authored-by: ctiller --- BUILD | 28 +- CMakeLists.txt | 1041 +++++------ Package.swift | 2 +- build_autogenerated.yaml | 1578 +++++++++-------- gRPC-C++.podspec | 4 +- gRPC-Core.podspec | 4 +- grpc.gemspec | 2 +- package.xml | 2 +- src/core/BUILD | 2 +- .../transport/chttp2/server/chttp2_server.cc | 2 +- .../chttp2/transport/chttp2_transport.cc | 2 +- .../ext/transport/chttp2/transport/frame.cc | 500 ++++++ .../ext/transport/chttp2/transport/frame.h | 213 ++- .../transport/chttp2/transport/frame_data.h | 2 +- .../transport/chttp2/transport/frame_goaway.h | 2 +- .../transport/chttp2/transport/frame_ping.h | 2 +- .../chttp2/transport/frame_rst_stream.cc | 2 +- .../chttp2/transport/frame_rst_stream.h | 2 +- .../chttp2/transport/frame_settings.cc | 2 +- .../chttp2/transport/frame_settings.h | 2 +- .../chttp2/transport/frame_window_update.h | 2 +- .../chttp2/transport/hpack_encoder.cc | 2 +- .../transport/chttp2/transport/hpack_parser.h | 2 +- .../ext/transport/chttp2/transport/internal.h | 2 +- .../transport/chttp2/transport/legacy_frame.h | 43 + .../ext/transport/chttp2/transport/parsing.cc | 2 +- .../chttp2/transport/stream_lists.cc | 2 +- .../ext/transport/chttp2/transport/writing.cc | 2 +- src/core/lib/slice/slice.h | 6 + src/core/lib/slice/slice_buffer.cc | 15 + src/core/lib/slice/slice_buffer.h | 20 +- test/core/transport/chttp2/BUILD | 13 + test/core/transport/chttp2/frame_test.cc | 393 ++++ .../transport/chttp2/hpack_encoder_test.cc | 2 +- .../chttp2/ping_configuration_test.cc | 2 +- tools/doxygen/Doxyfile.c++.internal | 2 +- tools/doxygen/Doxyfile.core.internal | 2 +- tools/run_tests/generated/tests.json | 72 +- 38 files changed, 2623 insertions(+), 1355 deletions(-) create mode 100644 src/core/ext/transport/chttp2/transport/frame.cc create mode 100644 src/core/ext/transport/chttp2/transport/legacy_frame.h create mode 100644 test/core/transport/chttp2/frame_test.cc diff --git a/BUILD b/BUILD index 4a11961902a..ce012ea4d0f 100644 --- a/BUILD +++ b/BUILD @@ -3718,9 +3718,31 @@ grpc_cc_library( grpc_cc_library( name = "chttp2_frame", + srcs = [ + "//src/core:ext/transport/chttp2/transport/frame.cc", + ], hdrs = [ "//src/core:ext/transport/chttp2/transport/frame.h", ], + external_deps = [ + "absl/status", + "absl/status:statusor", + "absl/strings", + "absl/types:span", + "absl/types:variant", + ], + deps = [ + "gpr", + "//src/core:slice", + "//src/core:slice_buffer", + ], +) + +grpc_cc_library( + name = "chttp2_legacy_frame", + hdrs = [ + "//src/core:ext/transport/chttp2/transport/legacy_frame.h", + ], deps = ["gpr"], ) @@ -3805,7 +3827,7 @@ grpc_cc_library( "absl/types:variant", ], deps = [ - "chttp2_frame", + "chttp2_legacy_frame", "gpr", "gpr_platform", "grpc_base", @@ -3836,7 +3858,7 @@ grpc_cc_library( external_deps = ["absl/strings"], deps = [ "chttp2_bin_encoder", - "chttp2_frame", + "chttp2_legacy_frame", "chttp2_varint", "gpr", "gpr_platform", @@ -3931,7 +3953,7 @@ grpc_cc_library( deps = [ "channel_arg_names", "chttp2_context_list_entry", - "chttp2_frame", + "chttp2_legacy_frame", "chttp2_varint", "debug_location", "exec_ctx", diff --git a/CMakeLists.txt b/CMakeLists.txt index 4d4512af35c..28dbfb5d78a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1003,7 +1003,6 @@ if(gRPC_BUILD_TESTS) add_dependencies(buildtests_cxx format_request_test) add_dependencies(buildtests_cxx frame_handler_test) add_dependencies(buildtests_cxx frame_header_test) - add_dependencies(buildtests_cxx frame_test) if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_POSIX) add_dependencies(buildtests_cxx fuzzing_event_engine_test) endif() @@ -1350,6 +1349,8 @@ if(gRPC_BUILD_TESTS) add_dependencies(buildtests_cxx test_core_security_credentials_test) add_dependencies(buildtests_cxx test_core_slice_slice_buffer_test) add_dependencies(buildtests_cxx test_core_slice_slice_test) + add_dependencies(buildtests_cxx test_core_transport_chaotic_good_frame_test) + add_dependencies(buildtests_cxx test_core_transport_chttp2_frame_test) add_dependencies(buildtests_cxx test_cpp_client_credentials_test) add_dependencies(buildtests_cxx test_cpp_server_credentials_test) add_dependencies(buildtests_cxx test_cpp_util_slice_test) @@ -12060,295 +12061,6 @@ target_link_libraries(frame_header_test ) -endif() -if(gRPC_BUILD_TESTS) - -add_executable(frame_test - src/core/ext/transport/chaotic_good/frame.cc - src/core/ext/transport/chaotic_good/frame_header.cc - src/core/ext/transport/chttp2/transport/bin_encoder.cc - src/core/ext/transport/chttp2/transport/decode_huff.cc - src/core/ext/transport/chttp2/transport/hpack_encoder.cc - src/core/ext/transport/chttp2/transport/hpack_encoder_table.cc - src/core/ext/transport/chttp2/transport/hpack_parse_result.cc - src/core/ext/transport/chttp2/transport/hpack_parser.cc - src/core/ext/transport/chttp2/transport/hpack_parser_table.cc - src/core/ext/transport/chttp2/transport/http_trace.cc - src/core/ext/transport/chttp2/transport/huffsyms.cc - src/core/ext/transport/chttp2/transport/varint.cc - src/core/ext/upb-generated/google/protobuf/any.upb.c - src/core/ext/upb-generated/google/protobuf/descriptor.upb.c - src/core/ext/upb-generated/google/rpc/status.upb.c - src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.c - src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c - src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.c - src/core/lib/address_utils/parse_address.cc - src/core/lib/address_utils/sockaddr_utils.cc - src/core/lib/backoff/backoff.cc - src/core/lib/backoff/random_early_detection.cc - src/core/lib/channel/call_tracer.cc - src/core/lib/channel/channel_args.cc - src/core/lib/channel/channel_args_preconditioning.cc - src/core/lib/channel/channel_stack.cc - src/core/lib/channel/channel_stack_builder.cc - src/core/lib/channel/channel_stack_builder_impl.cc - src/core/lib/channel/channel_trace.cc - src/core/lib/channel/channelz.cc - src/core/lib/channel/channelz_registry.cc - src/core/lib/channel/connected_channel.cc - src/core/lib/channel/promise_based_filter.cc - src/core/lib/channel/server_call_tracer_filter.cc - src/core/lib/channel/status_util.cc - src/core/lib/compression/compression.cc - src/core/lib/compression/compression_internal.cc - src/core/lib/compression/message_compress.cc - src/core/lib/config/core_configuration.cc - src/core/lib/debug/event_log.cc - src/core/lib/debug/histogram_view.cc - src/core/lib/debug/stats.cc - src/core/lib/debug/stats_data.cc - src/core/lib/debug/trace.cc - src/core/lib/event_engine/ares_resolver.cc - src/core/lib/event_engine/cf_engine/cf_engine.cc - src/core/lib/event_engine/cf_engine/cfstream_endpoint.cc - src/core/lib/event_engine/cf_engine/dns_service_resolver.cc - src/core/lib/event_engine/channel_args_endpoint_config.cc - src/core/lib/event_engine/default_event_engine.cc - src/core/lib/event_engine/default_event_engine_factory.cc - src/core/lib/event_engine/event_engine.cc - src/core/lib/event_engine/forkable.cc - src/core/lib/event_engine/memory_allocator.cc - src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc - src/core/lib/event_engine/posix_engine/ev_poll_posix.cc - src/core/lib/event_engine/posix_engine/event_poller_posix_default.cc - src/core/lib/event_engine/posix_engine/internal_errqueue.cc - src/core/lib/event_engine/posix_engine/lockfree_event.cc - src/core/lib/event_engine/posix_engine/posix_endpoint.cc - src/core/lib/event_engine/posix_engine/posix_engine.cc - src/core/lib/event_engine/posix_engine/posix_engine_listener.cc - src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.cc - src/core/lib/event_engine/posix_engine/tcp_socket_utils.cc - src/core/lib/event_engine/posix_engine/timer.cc - src/core/lib/event_engine/posix_engine/timer_heap.cc - src/core/lib/event_engine/posix_engine/timer_manager.cc - src/core/lib/event_engine/posix_engine/traced_buffer_list.cc - src/core/lib/event_engine/posix_engine/wakeup_fd_eventfd.cc - src/core/lib/event_engine/posix_engine/wakeup_fd_pipe.cc - src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.cc - src/core/lib/event_engine/resolved_address.cc - src/core/lib/event_engine/shim.cc - src/core/lib/event_engine/slice.cc - src/core/lib/event_engine/slice_buffer.cc - src/core/lib/event_engine/tcp_socket_utils.cc - src/core/lib/event_engine/thread_pool/original_thread_pool.cc - src/core/lib/event_engine/thread_pool/thread_count.cc - src/core/lib/event_engine/thread_pool/thread_pool_factory.cc - src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.cc - src/core/lib/event_engine/thready_event_engine/thready_event_engine.cc - src/core/lib/event_engine/time_util.cc - src/core/lib/event_engine/trace.cc - src/core/lib/event_engine/utils.cc - src/core/lib/event_engine/windows/iocp.cc - src/core/lib/event_engine/windows/win_socket.cc - src/core/lib/event_engine/windows/windows_endpoint.cc - src/core/lib/event_engine/windows/windows_engine.cc - src/core/lib/event_engine/windows/windows_listener.cc - src/core/lib/event_engine/work_queue/basic_work_queue.cc - src/core/lib/experiments/config.cc - src/core/lib/experiments/experiments.cc - src/core/lib/gprpp/load_file.cc - src/core/lib/gprpp/per_cpu.cc - src/core/lib/gprpp/ref_counted_string.cc - src/core/lib/gprpp/status_helper.cc - src/core/lib/gprpp/time.cc - src/core/lib/gprpp/time_averaged_stats.cc - src/core/lib/gprpp/validation_errors.cc - src/core/lib/gprpp/work_serializer.cc - src/core/lib/handshaker/proxy_mapper_registry.cc - src/core/lib/iomgr/buffer_list.cc - src/core/lib/iomgr/call_combiner.cc - src/core/lib/iomgr/cfstream_handle.cc - src/core/lib/iomgr/closure.cc - src/core/lib/iomgr/combiner.cc - src/core/lib/iomgr/dualstack_socket_posix.cc - src/core/lib/iomgr/endpoint.cc - src/core/lib/iomgr/endpoint_cfstream.cc - src/core/lib/iomgr/endpoint_pair_posix.cc - src/core/lib/iomgr/endpoint_pair_windows.cc - src/core/lib/iomgr/error.cc - src/core/lib/iomgr/error_cfstream.cc - src/core/lib/iomgr/ev_apple.cc - src/core/lib/iomgr/ev_epoll1_linux.cc - src/core/lib/iomgr/ev_poll_posix.cc - src/core/lib/iomgr/ev_posix.cc - src/core/lib/iomgr/ev_windows.cc - src/core/lib/iomgr/event_engine_shims/closure.cc - src/core/lib/iomgr/event_engine_shims/endpoint.cc - src/core/lib/iomgr/event_engine_shims/tcp_client.cc - src/core/lib/iomgr/exec_ctx.cc - src/core/lib/iomgr/executor.cc - src/core/lib/iomgr/fork_posix.cc - src/core/lib/iomgr/fork_windows.cc - src/core/lib/iomgr/gethostname_fallback.cc - src/core/lib/iomgr/gethostname_host_name_max.cc - src/core/lib/iomgr/gethostname_sysconf.cc - src/core/lib/iomgr/grpc_if_nametoindex_posix.cc - src/core/lib/iomgr/grpc_if_nametoindex_unsupported.cc - src/core/lib/iomgr/internal_errqueue.cc - src/core/lib/iomgr/iocp_windows.cc - src/core/lib/iomgr/iomgr.cc - src/core/lib/iomgr/iomgr_internal.cc - src/core/lib/iomgr/iomgr_posix.cc - src/core/lib/iomgr/iomgr_posix_cfstream.cc - src/core/lib/iomgr/iomgr_windows.cc - src/core/lib/iomgr/load_file.cc - src/core/lib/iomgr/lockfree_event.cc - src/core/lib/iomgr/polling_entity.cc - src/core/lib/iomgr/pollset.cc - src/core/lib/iomgr/pollset_set.cc - src/core/lib/iomgr/pollset_set_windows.cc - src/core/lib/iomgr/pollset_windows.cc - src/core/lib/iomgr/resolve_address.cc - src/core/lib/iomgr/resolve_address_posix.cc - src/core/lib/iomgr/resolve_address_windows.cc - src/core/lib/iomgr/sockaddr_utils_posix.cc - src/core/lib/iomgr/socket_factory_posix.cc - src/core/lib/iomgr/socket_mutator.cc - src/core/lib/iomgr/socket_utils_common_posix.cc - src/core/lib/iomgr/socket_utils_linux.cc - src/core/lib/iomgr/socket_utils_posix.cc - src/core/lib/iomgr/socket_utils_windows.cc - src/core/lib/iomgr/socket_windows.cc - src/core/lib/iomgr/systemd_utils.cc - src/core/lib/iomgr/tcp_client.cc - src/core/lib/iomgr/tcp_client_cfstream.cc - src/core/lib/iomgr/tcp_client_posix.cc - src/core/lib/iomgr/tcp_client_windows.cc - src/core/lib/iomgr/tcp_posix.cc - src/core/lib/iomgr/tcp_server.cc - src/core/lib/iomgr/tcp_server_posix.cc - src/core/lib/iomgr/tcp_server_utils_posix_common.cc - src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc - src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.cc - src/core/lib/iomgr/tcp_server_windows.cc - src/core/lib/iomgr/tcp_windows.cc - src/core/lib/iomgr/timer.cc - src/core/lib/iomgr/timer_generic.cc - src/core/lib/iomgr/timer_heap.cc - src/core/lib/iomgr/timer_manager.cc - src/core/lib/iomgr/unix_sockets_posix.cc - src/core/lib/iomgr/unix_sockets_posix_noop.cc - src/core/lib/iomgr/vsock.cc - src/core/lib/iomgr/wakeup_fd_eventfd.cc - src/core/lib/iomgr/wakeup_fd_nospecial.cc - src/core/lib/iomgr/wakeup_fd_pipe.cc - src/core/lib/iomgr/wakeup_fd_posix.cc - src/core/lib/json/json_writer.cc - src/core/lib/load_balancing/lb_policy.cc - src/core/lib/load_balancing/lb_policy_registry.cc - src/core/lib/promise/activity.cc - src/core/lib/promise/party.cc - src/core/lib/promise/trace.cc - src/core/lib/resolver/resolver.cc - src/core/lib/resolver/resolver_registry.cc - src/core/lib/resolver/server_address.cc - src/core/lib/resource_quota/api.cc - src/core/lib/resource_quota/arena.cc - src/core/lib/resource_quota/memory_quota.cc - src/core/lib/resource_quota/periodic_update.cc - src/core/lib/resource_quota/resource_quota.cc - src/core/lib/resource_quota/thread_quota.cc - src/core/lib/resource_quota/trace.cc - src/core/lib/security/certificate_provider/certificate_provider_registry.cc - src/core/lib/security/credentials/alts/check_gcp_environment.cc - src/core/lib/security/credentials/alts/check_gcp_environment_linux.cc - src/core/lib/security/credentials/alts/check_gcp_environment_no_op.cc - src/core/lib/security/credentials/alts/check_gcp_environment_windows.cc - src/core/lib/security/credentials/alts/grpc_alts_credentials_client_options.cc - src/core/lib/security/credentials/alts/grpc_alts_credentials_options.cc - src/core/lib/security/credentials/alts/grpc_alts_credentials_server_options.cc - src/core/lib/service_config/service_config_parser.cc - src/core/lib/slice/b64.cc - src/core/lib/slice/percent_encoding.cc - src/core/lib/slice/slice.cc - src/core/lib/slice/slice_buffer.cc - src/core/lib/slice/slice_refcount.cc - src/core/lib/slice/slice_string_helpers.cc - src/core/lib/surface/api_trace.cc - src/core/lib/surface/builtins.cc - src/core/lib/surface/byte_buffer.cc - src/core/lib/surface/byte_buffer_reader.cc - src/core/lib/surface/call.cc - src/core/lib/surface/call_details.cc - src/core/lib/surface/call_log_batch.cc - src/core/lib/surface/call_trace.cc - src/core/lib/surface/channel.cc - src/core/lib/surface/channel_init.cc - src/core/lib/surface/channel_ping.cc - src/core/lib/surface/channel_stack_type.cc - src/core/lib/surface/completion_queue.cc - src/core/lib/surface/completion_queue_factory.cc - src/core/lib/surface/event_string.cc - src/core/lib/surface/init_internally.cc - src/core/lib/surface/lame_client.cc - src/core/lib/surface/metadata_array.cc - src/core/lib/surface/server.cc - src/core/lib/surface/validate_metadata.cc - src/core/lib/surface/version.cc - src/core/lib/transport/batch_builder.cc - src/core/lib/transport/connectivity_state.cc - src/core/lib/transport/error_utils.cc - src/core/lib/transport/handshaker_registry.cc - src/core/lib/transport/metadata_batch.cc - src/core/lib/transport/parsed_metadata.cc - src/core/lib/transport/status_conversion.cc - src/core/lib/transport/timeout_encoding.cc - src/core/lib/transport/transport.cc - src/core/lib/transport/transport_op_string.cc - src/core/lib/uri/uri_parser.cc - src/core/tsi/alts/handshaker/transport_security_common_api.cc - test/core/transport/chaotic_good/frame_test.cc -) -target_compile_features(frame_test PUBLIC cxx_std_14) -target_include_directories(frame_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(frame_test - ${_gRPC_ALLTARGETS_LIBRARIES} - gtest - upb - ${_gRPC_ZLIB_LIBRARIES} - absl::cleanup - absl::flat_hash_map - absl::flat_hash_set - absl::inlined_vector - absl::function_ref - absl::hash - absl::type_traits - absl::statusor - absl::span - absl::utility - ${_gRPC_CARES_LIBRARIES} - gpr -) - - endif() if(gRPC_BUILD_TESTS) if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_POSIX) @@ -23562,8 +23274,242 @@ add_executable(test_core_event_engine_posix_timer_list_test src/core/lib/gprpp/time_averaged_stats.cc test/core/event_engine/posix/timer_list_test.cc ) -target_compile_features(test_core_event_engine_posix_timer_list_test PUBLIC cxx_std_14) -target_include_directories(test_core_event_engine_posix_timer_list_test +target_compile_features(test_core_event_engine_posix_timer_list_test PUBLIC cxx_std_14) +target_include_directories(test_core_event_engine_posix_timer_list_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(test_core_event_engine_posix_timer_list_test + ${_gRPC_ALLTARGETS_LIBRARIES} + gtest + absl::statusor + gpr +) + + +endif() +if(gRPC_BUILD_TESTS) + +add_executable(test_core_event_engine_slice_buffer_test + src/core/lib/debug/trace.cc + src/core/lib/event_engine/event_engine.cc + src/core/lib/event_engine/resolved_address.cc + src/core/lib/event_engine/slice.cc + src/core/lib/event_engine/slice_buffer.cc + src/core/lib/slice/slice.cc + src/core/lib/slice/slice_buffer.cc + src/core/lib/slice/slice_refcount.cc + src/core/lib/slice/slice_string_helpers.cc + test/core/event_engine/slice_buffer_test.cc +) +target_compile_features(test_core_event_engine_slice_buffer_test PUBLIC cxx_std_14) +target_include_directories(test_core_event_engine_slice_buffer_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(test_core_event_engine_slice_buffer_test + ${_gRPC_ALLTARGETS_LIBRARIES} + gtest + absl::flat_hash_set + absl::hash + absl::statusor + absl::utility + gpr +) + + +endif() +if(gRPC_BUILD_TESTS) + +add_executable(test_core_gpr_time_test + test/core/gpr/time_test.cc +) +target_compile_features(test_core_gpr_time_test PUBLIC cxx_std_14) +target_include_directories(test_core_gpr_time_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(test_core_gpr_time_test + ${_gRPC_ALLTARGETS_LIBRARIES} + gtest + grpc_test_util +) + + +endif() +if(gRPC_BUILD_TESTS) + +add_executable(test_core_gprpp_load_file_test + test/core/gprpp/load_file_test.cc +) +target_compile_features(test_core_gprpp_load_file_test PUBLIC cxx_std_14) +target_include_directories(test_core_gprpp_load_file_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(test_core_gprpp_load_file_test + ${_gRPC_ALLTARGETS_LIBRARIES} + gtest + grpc_test_util +) + + +endif() +if(gRPC_BUILD_TESTS) + +add_executable(test_core_gprpp_time_test + src/core/lib/gprpp/time.cc + test/core/gprpp/time_test.cc +) +target_compile_features(test_core_gprpp_time_test PUBLIC cxx_std_14) +target_include_directories(test_core_gprpp_time_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(test_core_gprpp_time_test + ${_gRPC_ALLTARGETS_LIBRARIES} + gtest + absl::statusor + gpr +) + + +endif() +if(gRPC_BUILD_TESTS) + +add_executable(test_core_iomgr_load_file_test + test/core/iomgr/load_file_test.cc + test/core/util/cmdline.cc + test/core/util/fuzzer_util.cc + test/core/util/grpc_profiler.cc + test/core/util/histogram.cc + test/core/util/mock_endpoint.cc + test/core/util/parse_hexstring.cc + test/core/util/passthru_endpoint.cc + test/core/util/resolve_localhost_ip46.cc + test/core/util/slice_splitter.cc + test/core/util/tracer_util.cc +) +target_compile_features(test_core_iomgr_load_file_test PUBLIC cxx_std_14) +target_include_directories(test_core_iomgr_load_file_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(test_core_iomgr_load_file_test + ${_gRPC_ALLTARGETS_LIBRARIES} + gtest + grpc_test_util +) + + +endif() +if(gRPC_BUILD_TESTS) + +add_executable(test_core_iomgr_timer_heap_test + test/core/iomgr/timer_heap_test.cc + test/core/util/cmdline.cc + test/core/util/fuzzer_util.cc + test/core/util/grpc_profiler.cc + test/core/util/histogram.cc + test/core/util/mock_endpoint.cc + test/core/util/parse_hexstring.cc + test/core/util/passthru_endpoint.cc + test/core/util/resolve_localhost_ip46.cc + test/core/util/slice_splitter.cc + test/core/util/tracer_util.cc +) +target_compile_features(test_core_iomgr_timer_heap_test PUBLIC cxx_std_14) +target_include_directories(test_core_iomgr_timer_heap_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include @@ -23582,31 +23528,31 @@ target_include_directories(test_core_event_engine_posix_timer_list_test ${_gRPC_PROTO_GENS_DIR} ) -target_link_libraries(test_core_event_engine_posix_timer_list_test +target_link_libraries(test_core_iomgr_timer_heap_test ${_gRPC_ALLTARGETS_LIBRARIES} gtest - absl::statusor - gpr + grpc_test_util ) endif() if(gRPC_BUILD_TESTS) -add_executable(test_core_event_engine_slice_buffer_test - src/core/lib/debug/trace.cc - src/core/lib/event_engine/event_engine.cc - src/core/lib/event_engine/resolved_address.cc - src/core/lib/event_engine/slice.cc - src/core/lib/event_engine/slice_buffer.cc - src/core/lib/slice/slice.cc - src/core/lib/slice/slice_buffer.cc - src/core/lib/slice/slice_refcount.cc - src/core/lib/slice/slice_string_helpers.cc - test/core/event_engine/slice_buffer_test.cc +add_executable(test_core_security_credentials_test + test/core/security/credentials_test.cc + test/core/util/cmdline.cc + test/core/util/fuzzer_util.cc + test/core/util/grpc_profiler.cc + test/core/util/histogram.cc + test/core/util/mock_endpoint.cc + test/core/util/parse_hexstring.cc + test/core/util/passthru_endpoint.cc + test/core/util/resolve_localhost_ip46.cc + test/core/util/slice_splitter.cc + test/core/util/tracer_util.cc ) -target_compile_features(test_core_event_engine_slice_buffer_test PUBLIC cxx_std_14) -target_include_directories(test_core_event_engine_slice_buffer_test +target_compile_features(test_core_security_credentials_test PUBLIC cxx_std_14) +target_include_directories(test_core_security_credentials_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include @@ -23625,25 +23571,21 @@ target_include_directories(test_core_event_engine_slice_buffer_test ${_gRPC_PROTO_GENS_DIR} ) -target_link_libraries(test_core_event_engine_slice_buffer_test +target_link_libraries(test_core_security_credentials_test ${_gRPC_ALLTARGETS_LIBRARIES} gtest - absl::flat_hash_set - absl::hash - absl::statusor - absl::utility - gpr + grpc_test_util ) endif() if(gRPC_BUILD_TESTS) -add_executable(test_core_gpr_time_test - test/core/gpr/time_test.cc +add_executable(test_core_slice_slice_buffer_test + test/core/slice/slice_buffer_test.cc ) -target_compile_features(test_core_gpr_time_test PUBLIC cxx_std_14) -target_include_directories(test_core_gpr_time_test +target_compile_features(test_core_slice_slice_buffer_test PUBLIC cxx_std_14) +target_include_directories(test_core_slice_slice_buffer_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include @@ -23662,7 +23604,7 @@ target_include_directories(test_core_gpr_time_test ${_gRPC_PROTO_GENS_DIR} ) -target_link_libraries(test_core_gpr_time_test +target_link_libraries(test_core_slice_slice_buffer_test ${_gRPC_ALLTARGETS_LIBRARIES} gtest grpc_test_util @@ -23672,11 +23614,12 @@ target_link_libraries(test_core_gpr_time_test endif() if(gRPC_BUILD_TESTS) -add_executable(test_core_gprpp_load_file_test - test/core/gprpp/load_file_test.cc +add_executable(test_core_slice_slice_test + test/core/slice/slice_test.cc + test/core/util/build.cc ) -target_compile_features(test_core_gprpp_load_file_test PUBLIC cxx_std_14) -target_include_directories(test_core_gprpp_load_file_test +target_compile_features(test_core_slice_slice_test PUBLIC cxx_std_14) +target_include_directories(test_core_slice_slice_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include @@ -23695,22 +23638,264 @@ target_include_directories(test_core_gprpp_load_file_test ${_gRPC_PROTO_GENS_DIR} ) -target_link_libraries(test_core_gprpp_load_file_test +target_link_libraries(test_core_slice_slice_test ${_gRPC_ALLTARGETS_LIBRARIES} gtest - grpc_test_util + grpc ) endif() if(gRPC_BUILD_TESTS) -add_executable(test_core_gprpp_time_test +add_executable(test_core_transport_chaotic_good_frame_test + src/core/ext/transport/chaotic_good/frame.cc + src/core/ext/transport/chaotic_good/frame_header.cc + src/core/ext/transport/chttp2/transport/bin_encoder.cc + src/core/ext/transport/chttp2/transport/decode_huff.cc + src/core/ext/transport/chttp2/transport/hpack_encoder.cc + src/core/ext/transport/chttp2/transport/hpack_encoder_table.cc + src/core/ext/transport/chttp2/transport/hpack_parse_result.cc + src/core/ext/transport/chttp2/transport/hpack_parser.cc + src/core/ext/transport/chttp2/transport/hpack_parser_table.cc + src/core/ext/transport/chttp2/transport/http_trace.cc + src/core/ext/transport/chttp2/transport/huffsyms.cc + src/core/ext/transport/chttp2/transport/varint.cc + src/core/ext/upb-generated/google/protobuf/any.upb.c + src/core/ext/upb-generated/google/protobuf/descriptor.upb.c + src/core/ext/upb-generated/google/rpc/status.upb.c + src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.c + src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c + src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.c + src/core/lib/address_utils/parse_address.cc + src/core/lib/address_utils/sockaddr_utils.cc + src/core/lib/backoff/backoff.cc + src/core/lib/backoff/random_early_detection.cc + src/core/lib/channel/call_tracer.cc + src/core/lib/channel/channel_args.cc + src/core/lib/channel/channel_args_preconditioning.cc + src/core/lib/channel/channel_stack.cc + src/core/lib/channel/channel_stack_builder.cc + src/core/lib/channel/channel_stack_builder_impl.cc + src/core/lib/channel/channel_trace.cc + src/core/lib/channel/channelz.cc + src/core/lib/channel/channelz_registry.cc + src/core/lib/channel/connected_channel.cc + src/core/lib/channel/promise_based_filter.cc + src/core/lib/channel/server_call_tracer_filter.cc + src/core/lib/channel/status_util.cc + src/core/lib/compression/compression.cc + src/core/lib/compression/compression_internal.cc + src/core/lib/compression/message_compress.cc + src/core/lib/config/core_configuration.cc + src/core/lib/debug/event_log.cc + src/core/lib/debug/histogram_view.cc + src/core/lib/debug/stats.cc + src/core/lib/debug/stats_data.cc + src/core/lib/debug/trace.cc + src/core/lib/event_engine/ares_resolver.cc + src/core/lib/event_engine/cf_engine/cf_engine.cc + src/core/lib/event_engine/cf_engine/cfstream_endpoint.cc + src/core/lib/event_engine/cf_engine/dns_service_resolver.cc + src/core/lib/event_engine/channel_args_endpoint_config.cc + src/core/lib/event_engine/default_event_engine.cc + src/core/lib/event_engine/default_event_engine_factory.cc + src/core/lib/event_engine/event_engine.cc + src/core/lib/event_engine/forkable.cc + src/core/lib/event_engine/memory_allocator.cc + src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc + src/core/lib/event_engine/posix_engine/ev_poll_posix.cc + src/core/lib/event_engine/posix_engine/event_poller_posix_default.cc + src/core/lib/event_engine/posix_engine/internal_errqueue.cc + src/core/lib/event_engine/posix_engine/lockfree_event.cc + src/core/lib/event_engine/posix_engine/posix_endpoint.cc + src/core/lib/event_engine/posix_engine/posix_engine.cc + src/core/lib/event_engine/posix_engine/posix_engine_listener.cc + src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.cc + src/core/lib/event_engine/posix_engine/tcp_socket_utils.cc + src/core/lib/event_engine/posix_engine/timer.cc + src/core/lib/event_engine/posix_engine/timer_heap.cc + src/core/lib/event_engine/posix_engine/timer_manager.cc + src/core/lib/event_engine/posix_engine/traced_buffer_list.cc + src/core/lib/event_engine/posix_engine/wakeup_fd_eventfd.cc + src/core/lib/event_engine/posix_engine/wakeup_fd_pipe.cc + src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.cc + src/core/lib/event_engine/resolved_address.cc + src/core/lib/event_engine/shim.cc + src/core/lib/event_engine/slice.cc + src/core/lib/event_engine/slice_buffer.cc + src/core/lib/event_engine/tcp_socket_utils.cc + src/core/lib/event_engine/thread_pool/original_thread_pool.cc + src/core/lib/event_engine/thread_pool/thread_count.cc + src/core/lib/event_engine/thread_pool/thread_pool_factory.cc + src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.cc + src/core/lib/event_engine/thready_event_engine/thready_event_engine.cc + src/core/lib/event_engine/time_util.cc + src/core/lib/event_engine/trace.cc + src/core/lib/event_engine/utils.cc + src/core/lib/event_engine/windows/iocp.cc + src/core/lib/event_engine/windows/win_socket.cc + src/core/lib/event_engine/windows/windows_endpoint.cc + src/core/lib/event_engine/windows/windows_engine.cc + src/core/lib/event_engine/windows/windows_listener.cc + src/core/lib/event_engine/work_queue/basic_work_queue.cc + src/core/lib/experiments/config.cc + src/core/lib/experiments/experiments.cc + src/core/lib/gprpp/load_file.cc + src/core/lib/gprpp/per_cpu.cc + src/core/lib/gprpp/ref_counted_string.cc + src/core/lib/gprpp/status_helper.cc src/core/lib/gprpp/time.cc - test/core/gprpp/time_test.cc + src/core/lib/gprpp/time_averaged_stats.cc + src/core/lib/gprpp/validation_errors.cc + src/core/lib/gprpp/work_serializer.cc + src/core/lib/handshaker/proxy_mapper_registry.cc + src/core/lib/iomgr/buffer_list.cc + src/core/lib/iomgr/call_combiner.cc + src/core/lib/iomgr/cfstream_handle.cc + src/core/lib/iomgr/closure.cc + src/core/lib/iomgr/combiner.cc + src/core/lib/iomgr/dualstack_socket_posix.cc + src/core/lib/iomgr/endpoint.cc + src/core/lib/iomgr/endpoint_cfstream.cc + src/core/lib/iomgr/endpoint_pair_posix.cc + src/core/lib/iomgr/endpoint_pair_windows.cc + src/core/lib/iomgr/error.cc + src/core/lib/iomgr/error_cfstream.cc + src/core/lib/iomgr/ev_apple.cc + src/core/lib/iomgr/ev_epoll1_linux.cc + src/core/lib/iomgr/ev_poll_posix.cc + src/core/lib/iomgr/ev_posix.cc + src/core/lib/iomgr/ev_windows.cc + src/core/lib/iomgr/event_engine_shims/closure.cc + src/core/lib/iomgr/event_engine_shims/endpoint.cc + src/core/lib/iomgr/event_engine_shims/tcp_client.cc + src/core/lib/iomgr/exec_ctx.cc + src/core/lib/iomgr/executor.cc + src/core/lib/iomgr/fork_posix.cc + src/core/lib/iomgr/fork_windows.cc + src/core/lib/iomgr/gethostname_fallback.cc + src/core/lib/iomgr/gethostname_host_name_max.cc + src/core/lib/iomgr/gethostname_sysconf.cc + src/core/lib/iomgr/grpc_if_nametoindex_posix.cc + src/core/lib/iomgr/grpc_if_nametoindex_unsupported.cc + src/core/lib/iomgr/internal_errqueue.cc + src/core/lib/iomgr/iocp_windows.cc + src/core/lib/iomgr/iomgr.cc + src/core/lib/iomgr/iomgr_internal.cc + src/core/lib/iomgr/iomgr_posix.cc + src/core/lib/iomgr/iomgr_posix_cfstream.cc + src/core/lib/iomgr/iomgr_windows.cc + src/core/lib/iomgr/load_file.cc + src/core/lib/iomgr/lockfree_event.cc + src/core/lib/iomgr/polling_entity.cc + src/core/lib/iomgr/pollset.cc + src/core/lib/iomgr/pollset_set.cc + src/core/lib/iomgr/pollset_set_windows.cc + src/core/lib/iomgr/pollset_windows.cc + src/core/lib/iomgr/resolve_address.cc + src/core/lib/iomgr/resolve_address_posix.cc + src/core/lib/iomgr/resolve_address_windows.cc + src/core/lib/iomgr/sockaddr_utils_posix.cc + src/core/lib/iomgr/socket_factory_posix.cc + src/core/lib/iomgr/socket_mutator.cc + src/core/lib/iomgr/socket_utils_common_posix.cc + src/core/lib/iomgr/socket_utils_linux.cc + src/core/lib/iomgr/socket_utils_posix.cc + src/core/lib/iomgr/socket_utils_windows.cc + src/core/lib/iomgr/socket_windows.cc + src/core/lib/iomgr/systemd_utils.cc + src/core/lib/iomgr/tcp_client.cc + src/core/lib/iomgr/tcp_client_cfstream.cc + src/core/lib/iomgr/tcp_client_posix.cc + src/core/lib/iomgr/tcp_client_windows.cc + src/core/lib/iomgr/tcp_posix.cc + src/core/lib/iomgr/tcp_server.cc + src/core/lib/iomgr/tcp_server_posix.cc + src/core/lib/iomgr/tcp_server_utils_posix_common.cc + src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc + src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.cc + src/core/lib/iomgr/tcp_server_windows.cc + src/core/lib/iomgr/tcp_windows.cc + src/core/lib/iomgr/timer.cc + src/core/lib/iomgr/timer_generic.cc + src/core/lib/iomgr/timer_heap.cc + src/core/lib/iomgr/timer_manager.cc + src/core/lib/iomgr/unix_sockets_posix.cc + src/core/lib/iomgr/unix_sockets_posix_noop.cc + src/core/lib/iomgr/vsock.cc + src/core/lib/iomgr/wakeup_fd_eventfd.cc + src/core/lib/iomgr/wakeup_fd_nospecial.cc + src/core/lib/iomgr/wakeup_fd_pipe.cc + src/core/lib/iomgr/wakeup_fd_posix.cc + src/core/lib/json/json_writer.cc + src/core/lib/load_balancing/lb_policy.cc + src/core/lib/load_balancing/lb_policy_registry.cc + src/core/lib/promise/activity.cc + src/core/lib/promise/party.cc + src/core/lib/promise/trace.cc + src/core/lib/resolver/resolver.cc + src/core/lib/resolver/resolver_registry.cc + src/core/lib/resolver/server_address.cc + src/core/lib/resource_quota/api.cc + src/core/lib/resource_quota/arena.cc + src/core/lib/resource_quota/memory_quota.cc + src/core/lib/resource_quota/periodic_update.cc + src/core/lib/resource_quota/resource_quota.cc + src/core/lib/resource_quota/thread_quota.cc + src/core/lib/resource_quota/trace.cc + src/core/lib/security/certificate_provider/certificate_provider_registry.cc + src/core/lib/security/credentials/alts/check_gcp_environment.cc + src/core/lib/security/credentials/alts/check_gcp_environment_linux.cc + src/core/lib/security/credentials/alts/check_gcp_environment_no_op.cc + src/core/lib/security/credentials/alts/check_gcp_environment_windows.cc + src/core/lib/security/credentials/alts/grpc_alts_credentials_client_options.cc + src/core/lib/security/credentials/alts/grpc_alts_credentials_options.cc + src/core/lib/security/credentials/alts/grpc_alts_credentials_server_options.cc + src/core/lib/service_config/service_config_parser.cc + src/core/lib/slice/b64.cc + src/core/lib/slice/percent_encoding.cc + src/core/lib/slice/slice.cc + src/core/lib/slice/slice_buffer.cc + src/core/lib/slice/slice_refcount.cc + src/core/lib/slice/slice_string_helpers.cc + src/core/lib/surface/api_trace.cc + src/core/lib/surface/builtins.cc + src/core/lib/surface/byte_buffer.cc + src/core/lib/surface/byte_buffer_reader.cc + src/core/lib/surface/call.cc + src/core/lib/surface/call_details.cc + src/core/lib/surface/call_log_batch.cc + src/core/lib/surface/call_trace.cc + src/core/lib/surface/channel.cc + src/core/lib/surface/channel_init.cc + src/core/lib/surface/channel_ping.cc + src/core/lib/surface/channel_stack_type.cc + src/core/lib/surface/completion_queue.cc + src/core/lib/surface/completion_queue_factory.cc + src/core/lib/surface/event_string.cc + src/core/lib/surface/init_internally.cc + src/core/lib/surface/lame_client.cc + src/core/lib/surface/metadata_array.cc + src/core/lib/surface/server.cc + src/core/lib/surface/validate_metadata.cc + src/core/lib/surface/version.cc + src/core/lib/transport/batch_builder.cc + src/core/lib/transport/connectivity_state.cc + src/core/lib/transport/error_utils.cc + src/core/lib/transport/handshaker_registry.cc + src/core/lib/transport/metadata_batch.cc + src/core/lib/transport/parsed_metadata.cc + src/core/lib/transport/status_conversion.cc + src/core/lib/transport/timeout_encoding.cc + src/core/lib/transport/transport.cc + src/core/lib/transport/transport_op_string.cc + src/core/lib/uri/uri_parser.cc + src/core/tsi/alts/handshaker/transport_security_common_api.cc + test/core/transport/chaotic_good/frame_test.cc ) -target_compile_features(test_core_gprpp_time_test PUBLIC cxx_std_14) -target_include_directories(test_core_gprpp_time_test +target_compile_features(test_core_transport_chaotic_good_frame_test PUBLIC cxx_std_14) +target_include_directories(test_core_transport_chaotic_good_frame_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include @@ -23729,10 +23914,22 @@ target_include_directories(test_core_gprpp_time_test ${_gRPC_PROTO_GENS_DIR} ) -target_link_libraries(test_core_gprpp_time_test +target_link_libraries(test_core_transport_chaotic_good_frame_test ${_gRPC_ALLTARGETS_LIBRARIES} gtest + upb + ${_gRPC_ZLIB_LIBRARIES} + absl::cleanup + absl::flat_hash_map + absl::flat_hash_set + absl::inlined_vector + absl::function_ref + absl::hash + absl::type_traits absl::statusor + absl::span + absl::utility + ${_gRPC_CARES_LIBRARIES} gpr ) @@ -23740,174 +23937,17 @@ target_link_libraries(test_core_gprpp_time_test endif() if(gRPC_BUILD_TESTS) -add_executable(test_core_iomgr_load_file_test - test/core/iomgr/load_file_test.cc - test/core/util/cmdline.cc - test/core/util/fuzzer_util.cc - test/core/util/grpc_profiler.cc - test/core/util/histogram.cc - test/core/util/mock_endpoint.cc - test/core/util/parse_hexstring.cc - test/core/util/passthru_endpoint.cc - test/core/util/resolve_localhost_ip46.cc - test/core/util/slice_splitter.cc - test/core/util/tracer_util.cc -) -target_compile_features(test_core_iomgr_load_file_test PUBLIC cxx_std_14) -target_include_directories(test_core_iomgr_load_file_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(test_core_iomgr_load_file_test - ${_gRPC_ALLTARGETS_LIBRARIES} - gtest - grpc_test_util -) - - -endif() -if(gRPC_BUILD_TESTS) - -add_executable(test_core_iomgr_timer_heap_test - test/core/iomgr/timer_heap_test.cc - test/core/util/cmdline.cc - test/core/util/fuzzer_util.cc - test/core/util/grpc_profiler.cc - test/core/util/histogram.cc - test/core/util/mock_endpoint.cc - test/core/util/parse_hexstring.cc - test/core/util/passthru_endpoint.cc - test/core/util/resolve_localhost_ip46.cc - test/core/util/slice_splitter.cc - test/core/util/tracer_util.cc -) -target_compile_features(test_core_iomgr_timer_heap_test PUBLIC cxx_std_14) -target_include_directories(test_core_iomgr_timer_heap_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(test_core_iomgr_timer_heap_test - ${_gRPC_ALLTARGETS_LIBRARIES} - gtest - grpc_test_util -) - - -endif() -if(gRPC_BUILD_TESTS) - -add_executable(test_core_security_credentials_test - test/core/security/credentials_test.cc - test/core/util/cmdline.cc - test/core/util/fuzzer_util.cc - test/core/util/grpc_profiler.cc - test/core/util/histogram.cc - test/core/util/mock_endpoint.cc - test/core/util/parse_hexstring.cc - test/core/util/passthru_endpoint.cc - test/core/util/resolve_localhost_ip46.cc - test/core/util/slice_splitter.cc - test/core/util/tracer_util.cc -) -target_compile_features(test_core_security_credentials_test PUBLIC cxx_std_14) -target_include_directories(test_core_security_credentials_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(test_core_security_credentials_test - ${_gRPC_ALLTARGETS_LIBRARIES} - gtest - grpc_test_util -) - - -endif() -if(gRPC_BUILD_TESTS) - -add_executable(test_core_slice_slice_buffer_test - test/core/slice/slice_buffer_test.cc -) -target_compile_features(test_core_slice_slice_buffer_test PUBLIC cxx_std_14) -target_include_directories(test_core_slice_slice_buffer_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(test_core_slice_slice_buffer_test - ${_gRPC_ALLTARGETS_LIBRARIES} - gtest - grpc_test_util -) - - -endif() -if(gRPC_BUILD_TESTS) - -add_executable(test_core_slice_slice_test - test/core/slice/slice_test.cc - test/core/util/build.cc +add_executable(test_core_transport_chttp2_frame_test + src/core/ext/transport/chttp2/transport/frame.cc + src/core/lib/debug/trace.cc + src/core/lib/slice/slice.cc + src/core/lib/slice/slice_buffer.cc + src/core/lib/slice/slice_refcount.cc + src/core/lib/slice/slice_string_helpers.cc + test/core/transport/chttp2/frame_test.cc ) -target_compile_features(test_core_slice_slice_test PUBLIC cxx_std_14) -target_include_directories(test_core_slice_slice_test +target_compile_features(test_core_transport_chttp2_frame_test PUBLIC cxx_std_14) +target_include_directories(test_core_transport_chttp2_frame_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include @@ -23926,10 +23966,13 @@ target_include_directories(test_core_slice_slice_test ${_gRPC_PROTO_GENS_DIR} ) -target_link_libraries(test_core_slice_slice_test +target_link_libraries(test_core_transport_chttp2_frame_test ${_gRPC_ALLTARGETS_LIBRARIES} gtest - grpc + absl::hash + absl::statusor + absl::span + gpr ) diff --git a/Package.swift b/Package.swift index 8ab107515be..0310debd9eb 100644 --- a/Package.swift +++ b/Package.swift @@ -278,7 +278,6 @@ let package = Package( "src/core/ext/transport/chttp2/transport/decode_huff.h", "src/core/ext/transport/chttp2/transport/flow_control.cc", "src/core/ext/transport/chttp2/transport/flow_control.h", - "src/core/ext/transport/chttp2/transport/frame.h", "src/core/ext/transport/chttp2/transport/frame_data.cc", "src/core/ext/transport/chttp2/transport/frame_data.h", "src/core/ext/transport/chttp2/transport/frame_goaway.cc", @@ -309,6 +308,7 @@ let package = Package( "src/core/ext/transport/chttp2/transport/huffsyms.cc", "src/core/ext/transport/chttp2/transport/huffsyms.h", "src/core/ext/transport/chttp2/transport/internal.h", + "src/core/ext/transport/chttp2/transport/legacy_frame.h", "src/core/ext/transport/chttp2/transport/parsing.cc", "src/core/ext/transport/chttp2/transport/ping_abuse_policy.cc", "src/core/ext/transport/chttp2/transport/ping_abuse_policy.h", diff --git a/build_autogenerated.yaml b/build_autogenerated.yaml index dea3a4fb7b6..82ae29036e7 100644 --- a/build_autogenerated.yaml +++ b/build_autogenerated.yaml @@ -291,7 +291,6 @@ libs: - src/core/ext/transport/chttp2/transport/context_list_entry.h - src/core/ext/transport/chttp2/transport/decode_huff.h - src/core/ext/transport/chttp2/transport/flow_control.h - - src/core/ext/transport/chttp2/transport/frame.h - src/core/ext/transport/chttp2/transport/frame_data.h - src/core/ext/transport/chttp2/transport/frame_goaway.h - src/core/ext/transport/chttp2/transport/frame_ping.h @@ -308,6 +307,7 @@ libs: - src/core/ext/transport/chttp2/transport/http_trace.h - src/core/ext/transport/chttp2/transport/huffsyms.h - src/core/ext/transport/chttp2/transport/internal.h + - src/core/ext/transport/chttp2/transport/legacy_frame.h - src/core/ext/transport/chttp2/transport/ping_abuse_policy.h - src/core/ext/transport/chttp2/transport/ping_rate_policy.h - src/core/ext/transport/chttp2/transport/varint.h @@ -2022,7 +2022,6 @@ libs: - src/core/ext/transport/chttp2/transport/context_list_entry.h - src/core/ext/transport/chttp2/transport/decode_huff.h - src/core/ext/transport/chttp2/transport/flow_control.h - - src/core/ext/transport/chttp2/transport/frame.h - src/core/ext/transport/chttp2/transport/frame_data.h - src/core/ext/transport/chttp2/transport/frame_goaway.h - src/core/ext/transport/chttp2/transport/frame_ping.h @@ -2039,6 +2038,7 @@ libs: - src/core/ext/transport/chttp2/transport/http_trace.h - src/core/ext/transport/chttp2/transport/huffsyms.h - src/core/ext/transport/chttp2/transport/internal.h + - src/core/ext/transport/chttp2/transport/legacy_frame.h - src/core/ext/transport/chttp2/transport/ping_abuse_policy.h - src/core/ext/transport/chttp2/transport/ping_rate_policy.h - src/core/ext/transport/chttp2/transport/varint.h @@ -8680,564 +8680,7 @@ targets: - gtest - absl/status:status - absl/status:statusor -- name: frame_test - gtest: true - build: test - language: c++ - headers: - - src/core/ext/filters/client_channel/lb_policy/backend_metric_data.h - - src/core/ext/transport/chaotic_good/frame.h - - src/core/ext/transport/chaotic_good/frame_header.h - - src/core/ext/transport/chttp2/transport/bin_encoder.h - - src/core/ext/transport/chttp2/transport/decode_huff.h - - src/core/ext/transport/chttp2/transport/frame.h - - src/core/ext/transport/chttp2/transport/hpack_constants.h - - src/core/ext/transport/chttp2/transport/hpack_encoder.h - - src/core/ext/transport/chttp2/transport/hpack_encoder_table.h - - src/core/ext/transport/chttp2/transport/hpack_parse_result.h - - src/core/ext/transport/chttp2/transport/hpack_parser.h - - src/core/ext/transport/chttp2/transport/hpack_parser_table.h - - src/core/ext/transport/chttp2/transport/http_trace.h - - src/core/ext/transport/chttp2/transport/huffsyms.h - - src/core/ext/transport/chttp2/transport/varint.h - - src/core/ext/upb-generated/google/protobuf/any.upb.h - - src/core/ext/upb-generated/google/protobuf/descriptor.upb.h - - src/core/ext/upb-generated/google/rpc/status.upb.h - - src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.h - - src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.h - - src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.h - - src/core/lib/address_utils/parse_address.h - - src/core/lib/address_utils/sockaddr_utils.h - - src/core/lib/avl/avl.h - - src/core/lib/backoff/backoff.h - - src/core/lib/backoff/random_early_detection.h - - src/core/lib/channel/call_finalization.h - - src/core/lib/channel/call_tracer.h - - src/core/lib/channel/channel_args.h - - src/core/lib/channel/channel_args_preconditioning.h - - src/core/lib/channel/channel_fwd.h - - src/core/lib/channel/channel_stack.h - - src/core/lib/channel/channel_stack_builder.h - - src/core/lib/channel/channel_stack_builder_impl.h - - src/core/lib/channel/channel_trace.h - - src/core/lib/channel/channelz.h - - src/core/lib/channel/channelz_registry.h - - src/core/lib/channel/connected_channel.h - - src/core/lib/channel/context.h - - src/core/lib/channel/promise_based_filter.h - - src/core/lib/channel/status_util.h - - src/core/lib/compression/compression_internal.h - - src/core/lib/compression/message_compress.h - - src/core/lib/config/core_configuration.h - - src/core/lib/debug/event_log.h - - src/core/lib/debug/histogram_view.h - - src/core/lib/debug/stats.h - - src/core/lib/debug/stats_data.h - - src/core/lib/debug/trace.h - - src/core/lib/event_engine/ares_resolver.h - - src/core/lib/event_engine/cf_engine/cf_engine.h - - src/core/lib/event_engine/cf_engine/cfstream_endpoint.h - - src/core/lib/event_engine/cf_engine/cftype_unique_ref.h - - src/core/lib/event_engine/cf_engine/dns_service_resolver.h - - src/core/lib/event_engine/channel_args_endpoint_config.h - - src/core/lib/event_engine/common_closures.h - - src/core/lib/event_engine/default_event_engine.h - - src/core/lib/event_engine/default_event_engine_factory.h - - src/core/lib/event_engine/forkable.h - - src/core/lib/event_engine/grpc_polled_fd.h - - src/core/lib/event_engine/handle_containers.h - - src/core/lib/event_engine/memory_allocator_factory.h - - src/core/lib/event_engine/poller.h - - src/core/lib/event_engine/posix.h - - src/core/lib/event_engine/posix_engine/ev_epoll1_linux.h - - src/core/lib/event_engine/posix_engine/ev_poll_posix.h - - src/core/lib/event_engine/posix_engine/event_poller.h - - src/core/lib/event_engine/posix_engine/event_poller_posix_default.h - - src/core/lib/event_engine/posix_engine/grpc_polled_fd_posix.h - - src/core/lib/event_engine/posix_engine/internal_errqueue.h - - src/core/lib/event_engine/posix_engine/lockfree_event.h - - src/core/lib/event_engine/posix_engine/posix_endpoint.h - - src/core/lib/event_engine/posix_engine/posix_engine.h - - src/core/lib/event_engine/posix_engine/posix_engine_closure.h - - src/core/lib/event_engine/posix_engine/posix_engine_listener.h - - src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.h - - src/core/lib/event_engine/posix_engine/tcp_socket_utils.h - - src/core/lib/event_engine/posix_engine/timer.h - - src/core/lib/event_engine/posix_engine/timer_heap.h - - src/core/lib/event_engine/posix_engine/timer_manager.h - - src/core/lib/event_engine/posix_engine/traced_buffer_list.h - - src/core/lib/event_engine/posix_engine/wakeup_fd_eventfd.h - - src/core/lib/event_engine/posix_engine/wakeup_fd_pipe.h - - src/core/lib/event_engine/posix_engine/wakeup_fd_posix.h - - src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.h - - src/core/lib/event_engine/resolved_address_internal.h - - src/core/lib/event_engine/shim.h - - src/core/lib/event_engine/tcp_socket_utils.h - - src/core/lib/event_engine/thread_pool/original_thread_pool.h - - src/core/lib/event_engine/thread_pool/thread_count.h - - src/core/lib/event_engine/thread_pool/thread_pool.h - - src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.h - - src/core/lib/event_engine/thready_event_engine/thready_event_engine.h - - src/core/lib/event_engine/time_util.h - - src/core/lib/event_engine/trace.h - - src/core/lib/event_engine/utils.h - - src/core/lib/event_engine/windows/iocp.h - - src/core/lib/event_engine/windows/win_socket.h - - src/core/lib/event_engine/windows/windows_endpoint.h - - src/core/lib/event_engine/windows/windows_engine.h - - src/core/lib/event_engine/windows/windows_listener.h - - src/core/lib/event_engine/work_queue/basic_work_queue.h - - src/core/lib/event_engine/work_queue/work_queue.h - - src/core/lib/experiments/config.h - - src/core/lib/experiments/experiments.h - - src/core/lib/gpr/spinlock.h - - src/core/lib/gprpp/atomic_utils.h - - src/core/lib/gprpp/bitset.h - - src/core/lib/gprpp/chunked_vector.h - - src/core/lib/gprpp/cpp_impl_of.h - - src/core/lib/gprpp/dual_ref_counted.h - - src/core/lib/gprpp/if_list.h - - src/core/lib/gprpp/load_file.h - - src/core/lib/gprpp/manual_constructor.h - - src/core/lib/gprpp/match.h - - src/core/lib/gprpp/notification.h - - src/core/lib/gprpp/orphanable.h - - src/core/lib/gprpp/overload.h - - src/core/lib/gprpp/packed_table.h - - src/core/lib/gprpp/per_cpu.h - - src/core/lib/gprpp/ref_counted.h - - src/core/lib/gprpp/ref_counted_ptr.h - - src/core/lib/gprpp/ref_counted_string.h - - src/core/lib/gprpp/sorted_pack.h - - src/core/lib/gprpp/status_helper.h - - src/core/lib/gprpp/table.h - - src/core/lib/gprpp/time.h - - src/core/lib/gprpp/time_averaged_stats.h - - src/core/lib/gprpp/type_list.h - - src/core/lib/gprpp/unique_type_name.h - - src/core/lib/gprpp/validation_errors.h - - src/core/lib/gprpp/work_serializer.h - - src/core/lib/handshaker/proxy_mapper.h - - src/core/lib/handshaker/proxy_mapper_registry.h - - src/core/lib/iomgr/block_annotate.h - - src/core/lib/iomgr/buffer_list.h - - src/core/lib/iomgr/call_combiner.h - - src/core/lib/iomgr/cfstream_handle.h - - src/core/lib/iomgr/closure.h - - src/core/lib/iomgr/combiner.h - - src/core/lib/iomgr/dynamic_annotations.h - - src/core/lib/iomgr/endpoint.h - - src/core/lib/iomgr/endpoint_cfstream.h - - src/core/lib/iomgr/endpoint_pair.h - - src/core/lib/iomgr/error.h - - src/core/lib/iomgr/error_cfstream.h - - src/core/lib/iomgr/ev_apple.h - - src/core/lib/iomgr/ev_epoll1_linux.h - - src/core/lib/iomgr/ev_poll_posix.h - - src/core/lib/iomgr/ev_posix.h - - src/core/lib/iomgr/event_engine_shims/closure.h - - src/core/lib/iomgr/event_engine_shims/endpoint.h - - src/core/lib/iomgr/event_engine_shims/tcp_client.h - - src/core/lib/iomgr/exec_ctx.h - - src/core/lib/iomgr/executor.h - - src/core/lib/iomgr/gethostname.h - - src/core/lib/iomgr/grpc_if_nametoindex.h - - src/core/lib/iomgr/internal_errqueue.h - - src/core/lib/iomgr/iocp_windows.h - - src/core/lib/iomgr/iomgr.h - - src/core/lib/iomgr/iomgr_fwd.h - - src/core/lib/iomgr/iomgr_internal.h - - src/core/lib/iomgr/load_file.h - - src/core/lib/iomgr/lockfree_event.h - - src/core/lib/iomgr/nameser.h - - src/core/lib/iomgr/polling_entity.h - - src/core/lib/iomgr/pollset.h - - src/core/lib/iomgr/pollset_set.h - - src/core/lib/iomgr/pollset_set_windows.h - - src/core/lib/iomgr/pollset_windows.h - - src/core/lib/iomgr/port.h - - src/core/lib/iomgr/python_util.h - - src/core/lib/iomgr/resolve_address.h - - src/core/lib/iomgr/resolve_address_impl.h - - src/core/lib/iomgr/resolve_address_posix.h - - src/core/lib/iomgr/resolve_address_windows.h - - src/core/lib/iomgr/resolved_address.h - - src/core/lib/iomgr/sockaddr.h - - src/core/lib/iomgr/sockaddr_posix.h - - src/core/lib/iomgr/sockaddr_windows.h - - src/core/lib/iomgr/socket_factory_posix.h - - src/core/lib/iomgr/socket_mutator.h - - src/core/lib/iomgr/socket_utils.h - - src/core/lib/iomgr/socket_utils_posix.h - - src/core/lib/iomgr/socket_windows.h - - src/core/lib/iomgr/systemd_utils.h - - src/core/lib/iomgr/tcp_client.h - - src/core/lib/iomgr/tcp_client_posix.h - - src/core/lib/iomgr/tcp_posix.h - - src/core/lib/iomgr/tcp_server.h - - src/core/lib/iomgr/tcp_server_utils_posix.h - - src/core/lib/iomgr/tcp_windows.h - - src/core/lib/iomgr/timer.h - - src/core/lib/iomgr/timer_generic.h - - src/core/lib/iomgr/timer_heap.h - - src/core/lib/iomgr/timer_manager.h - - src/core/lib/iomgr/unix_sockets_posix.h - - src/core/lib/iomgr/vsock.h - - src/core/lib/iomgr/wakeup_fd_pipe.h - - src/core/lib/iomgr/wakeup_fd_posix.h - - src/core/lib/json/json.h - - src/core/lib/json/json_args.h - - src/core/lib/json/json_writer.h - - src/core/lib/load_balancing/lb_policy.h - - src/core/lib/load_balancing/lb_policy_factory.h - - src/core/lib/load_balancing/lb_policy_registry.h - - src/core/lib/load_balancing/subchannel_interface.h - - src/core/lib/promise/activity.h - - src/core/lib/promise/arena_promise.h - - src/core/lib/promise/cancel_callback.h - - src/core/lib/promise/context.h - - src/core/lib/promise/detail/basic_seq.h - - src/core/lib/promise/detail/promise_factory.h - - src/core/lib/promise/detail/promise_like.h - - src/core/lib/promise/detail/seq_state.h - - src/core/lib/promise/detail/status.h - - src/core/lib/promise/exec_ctx_wakeup_scheduler.h - - src/core/lib/promise/for_each.h - - src/core/lib/promise/if.h - - src/core/lib/promise/interceptor_list.h - - src/core/lib/promise/latch.h - - src/core/lib/promise/loop.h - - src/core/lib/promise/map.h - - src/core/lib/promise/party.h - - src/core/lib/promise/pipe.h - - src/core/lib/promise/poll.h - - src/core/lib/promise/promise.h - - src/core/lib/promise/race.h - - src/core/lib/promise/seq.h - - src/core/lib/promise/trace.h - - src/core/lib/promise/try_seq.h - - src/core/lib/resolver/resolver.h - - src/core/lib/resolver/resolver_factory.h - - src/core/lib/resolver/resolver_registry.h - - src/core/lib/resolver/server_address.h - - src/core/lib/resource_quota/api.h - - src/core/lib/resource_quota/arena.h - - src/core/lib/resource_quota/memory_quota.h - - src/core/lib/resource_quota/periodic_update.h - - src/core/lib/resource_quota/resource_quota.h - - src/core/lib/resource_quota/thread_quota.h - - src/core/lib/resource_quota/trace.h - - src/core/lib/security/certificate_provider/certificate_provider_factory.h - - src/core/lib/security/certificate_provider/certificate_provider_registry.h - - src/core/lib/security/credentials/alts/check_gcp_environment.h - - src/core/lib/security/credentials/alts/grpc_alts_credentials_options.h - - src/core/lib/security/credentials/channel_creds_registry.h - - src/core/lib/service_config/service_config.h - - src/core/lib/service_config/service_config_call_data.h - - src/core/lib/service_config/service_config_parser.h - - src/core/lib/slice/b64.h - - src/core/lib/slice/percent_encoding.h - - src/core/lib/slice/slice.h - - src/core/lib/slice/slice_buffer.h - - src/core/lib/slice/slice_internal.h - - src/core/lib/slice/slice_refcount.h - - src/core/lib/slice/slice_string_helpers.h - - src/core/lib/surface/api_trace.h - - src/core/lib/surface/builtins.h - - src/core/lib/surface/call.h - - src/core/lib/surface/call_test_only.h - - src/core/lib/surface/call_trace.h - - src/core/lib/surface/channel.h - - src/core/lib/surface/channel_init.h - - src/core/lib/surface/channel_stack_type.h - - src/core/lib/surface/completion_queue.h - - src/core/lib/surface/completion_queue_factory.h - - src/core/lib/surface/event_string.h - - src/core/lib/surface/init.h - - src/core/lib/surface/init_internally.h - - src/core/lib/surface/lame_client.h - - src/core/lib/surface/server.h - - src/core/lib/surface/validate_metadata.h - - src/core/lib/transport/batch_builder.h - - src/core/lib/transport/connectivity_state.h - - src/core/lib/transport/custom_metadata.h - - src/core/lib/transport/error_utils.h - - src/core/lib/transport/handshaker_factory.h - - src/core/lib/transport/handshaker_registry.h - - src/core/lib/transport/http2_errors.h - - src/core/lib/transport/metadata_batch.h - - src/core/lib/transport/metadata_compression_traits.h - - src/core/lib/transport/parsed_metadata.h - - src/core/lib/transport/simple_slice_based_metadata.h - - src/core/lib/transport/status_conversion.h - - src/core/lib/transport/timeout_encoding.h - - src/core/lib/transport/transport.h - - src/core/lib/transport/transport_fwd.h - - src/core/lib/transport/transport_impl.h - - src/core/lib/uri/uri_parser.h - - src/core/tsi/alts/handshaker/transport_security_common_api.h - src: - - src/core/ext/transport/chaotic_good/frame.cc - - src/core/ext/transport/chaotic_good/frame_header.cc - - src/core/ext/transport/chttp2/transport/bin_encoder.cc - - src/core/ext/transport/chttp2/transport/decode_huff.cc - - src/core/ext/transport/chttp2/transport/hpack_encoder.cc - - src/core/ext/transport/chttp2/transport/hpack_encoder_table.cc - - src/core/ext/transport/chttp2/transport/hpack_parse_result.cc - - src/core/ext/transport/chttp2/transport/hpack_parser.cc - - src/core/ext/transport/chttp2/transport/hpack_parser_table.cc - - src/core/ext/transport/chttp2/transport/http_trace.cc - - src/core/ext/transport/chttp2/transport/huffsyms.cc - - src/core/ext/transport/chttp2/transport/varint.cc - - src/core/ext/upb-generated/google/protobuf/any.upb.c - - src/core/ext/upb-generated/google/protobuf/descriptor.upb.c - - src/core/ext/upb-generated/google/rpc/status.upb.c - - src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.c - - src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c - - src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.c - - src/core/lib/address_utils/parse_address.cc - - src/core/lib/address_utils/sockaddr_utils.cc - - src/core/lib/backoff/backoff.cc - - src/core/lib/backoff/random_early_detection.cc - - src/core/lib/channel/call_tracer.cc - - src/core/lib/channel/channel_args.cc - - src/core/lib/channel/channel_args_preconditioning.cc - - src/core/lib/channel/channel_stack.cc - - src/core/lib/channel/channel_stack_builder.cc - - src/core/lib/channel/channel_stack_builder_impl.cc - - src/core/lib/channel/channel_trace.cc - - src/core/lib/channel/channelz.cc - - src/core/lib/channel/channelz_registry.cc - - src/core/lib/channel/connected_channel.cc - - src/core/lib/channel/promise_based_filter.cc - - src/core/lib/channel/server_call_tracer_filter.cc - - src/core/lib/channel/status_util.cc - - src/core/lib/compression/compression.cc - - src/core/lib/compression/compression_internal.cc - - src/core/lib/compression/message_compress.cc - - src/core/lib/config/core_configuration.cc - - src/core/lib/debug/event_log.cc - - src/core/lib/debug/histogram_view.cc - - src/core/lib/debug/stats.cc - - src/core/lib/debug/stats_data.cc - - src/core/lib/debug/trace.cc - - src/core/lib/event_engine/ares_resolver.cc - - src/core/lib/event_engine/cf_engine/cf_engine.cc - - src/core/lib/event_engine/cf_engine/cfstream_endpoint.cc - - src/core/lib/event_engine/cf_engine/dns_service_resolver.cc - - src/core/lib/event_engine/channel_args_endpoint_config.cc - - src/core/lib/event_engine/default_event_engine.cc - - src/core/lib/event_engine/default_event_engine_factory.cc - - src/core/lib/event_engine/event_engine.cc - - src/core/lib/event_engine/forkable.cc - - src/core/lib/event_engine/memory_allocator.cc - - src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc - - src/core/lib/event_engine/posix_engine/ev_poll_posix.cc - - src/core/lib/event_engine/posix_engine/event_poller_posix_default.cc - - src/core/lib/event_engine/posix_engine/internal_errqueue.cc - - src/core/lib/event_engine/posix_engine/lockfree_event.cc - - src/core/lib/event_engine/posix_engine/posix_endpoint.cc - - src/core/lib/event_engine/posix_engine/posix_engine.cc - - src/core/lib/event_engine/posix_engine/posix_engine_listener.cc - - src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.cc - - src/core/lib/event_engine/posix_engine/tcp_socket_utils.cc - - src/core/lib/event_engine/posix_engine/timer.cc - - src/core/lib/event_engine/posix_engine/timer_heap.cc - - src/core/lib/event_engine/posix_engine/timer_manager.cc - - src/core/lib/event_engine/posix_engine/traced_buffer_list.cc - - src/core/lib/event_engine/posix_engine/wakeup_fd_eventfd.cc - - src/core/lib/event_engine/posix_engine/wakeup_fd_pipe.cc - - src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.cc - - src/core/lib/event_engine/resolved_address.cc - - src/core/lib/event_engine/shim.cc - - src/core/lib/event_engine/slice.cc - - src/core/lib/event_engine/slice_buffer.cc - - src/core/lib/event_engine/tcp_socket_utils.cc - - src/core/lib/event_engine/thread_pool/original_thread_pool.cc - - src/core/lib/event_engine/thread_pool/thread_count.cc - - src/core/lib/event_engine/thread_pool/thread_pool_factory.cc - - src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.cc - - src/core/lib/event_engine/thready_event_engine/thready_event_engine.cc - - src/core/lib/event_engine/time_util.cc - - src/core/lib/event_engine/trace.cc - - src/core/lib/event_engine/utils.cc - - src/core/lib/event_engine/windows/iocp.cc - - src/core/lib/event_engine/windows/win_socket.cc - - src/core/lib/event_engine/windows/windows_endpoint.cc - - src/core/lib/event_engine/windows/windows_engine.cc - - src/core/lib/event_engine/windows/windows_listener.cc - - src/core/lib/event_engine/work_queue/basic_work_queue.cc - - src/core/lib/experiments/config.cc - - src/core/lib/experiments/experiments.cc - - src/core/lib/gprpp/load_file.cc - - src/core/lib/gprpp/per_cpu.cc - - src/core/lib/gprpp/ref_counted_string.cc - - src/core/lib/gprpp/status_helper.cc - - src/core/lib/gprpp/time.cc - - src/core/lib/gprpp/time_averaged_stats.cc - - src/core/lib/gprpp/validation_errors.cc - - src/core/lib/gprpp/work_serializer.cc - - src/core/lib/handshaker/proxy_mapper_registry.cc - - src/core/lib/iomgr/buffer_list.cc - - src/core/lib/iomgr/call_combiner.cc - - src/core/lib/iomgr/cfstream_handle.cc - - src/core/lib/iomgr/closure.cc - - src/core/lib/iomgr/combiner.cc - - src/core/lib/iomgr/dualstack_socket_posix.cc - - src/core/lib/iomgr/endpoint.cc - - src/core/lib/iomgr/endpoint_cfstream.cc - - src/core/lib/iomgr/endpoint_pair_posix.cc - - src/core/lib/iomgr/endpoint_pair_windows.cc - - src/core/lib/iomgr/error.cc - - src/core/lib/iomgr/error_cfstream.cc - - src/core/lib/iomgr/ev_apple.cc - - src/core/lib/iomgr/ev_epoll1_linux.cc - - src/core/lib/iomgr/ev_poll_posix.cc - - src/core/lib/iomgr/ev_posix.cc - - src/core/lib/iomgr/ev_windows.cc - - src/core/lib/iomgr/event_engine_shims/closure.cc - - src/core/lib/iomgr/event_engine_shims/endpoint.cc - - src/core/lib/iomgr/event_engine_shims/tcp_client.cc - - src/core/lib/iomgr/exec_ctx.cc - - src/core/lib/iomgr/executor.cc - - src/core/lib/iomgr/fork_posix.cc - - src/core/lib/iomgr/fork_windows.cc - - src/core/lib/iomgr/gethostname_fallback.cc - - src/core/lib/iomgr/gethostname_host_name_max.cc - - src/core/lib/iomgr/gethostname_sysconf.cc - - src/core/lib/iomgr/grpc_if_nametoindex_posix.cc - - src/core/lib/iomgr/grpc_if_nametoindex_unsupported.cc - - src/core/lib/iomgr/internal_errqueue.cc - - src/core/lib/iomgr/iocp_windows.cc - - src/core/lib/iomgr/iomgr.cc - - src/core/lib/iomgr/iomgr_internal.cc - - src/core/lib/iomgr/iomgr_posix.cc - - src/core/lib/iomgr/iomgr_posix_cfstream.cc - - src/core/lib/iomgr/iomgr_windows.cc - - src/core/lib/iomgr/load_file.cc - - src/core/lib/iomgr/lockfree_event.cc - - src/core/lib/iomgr/polling_entity.cc - - src/core/lib/iomgr/pollset.cc - - src/core/lib/iomgr/pollset_set.cc - - src/core/lib/iomgr/pollset_set_windows.cc - - src/core/lib/iomgr/pollset_windows.cc - - src/core/lib/iomgr/resolve_address.cc - - src/core/lib/iomgr/resolve_address_posix.cc - - src/core/lib/iomgr/resolve_address_windows.cc - - src/core/lib/iomgr/sockaddr_utils_posix.cc - - src/core/lib/iomgr/socket_factory_posix.cc - - src/core/lib/iomgr/socket_mutator.cc - - src/core/lib/iomgr/socket_utils_common_posix.cc - - src/core/lib/iomgr/socket_utils_linux.cc - - src/core/lib/iomgr/socket_utils_posix.cc - - src/core/lib/iomgr/socket_utils_windows.cc - - src/core/lib/iomgr/socket_windows.cc - - src/core/lib/iomgr/systemd_utils.cc - - src/core/lib/iomgr/tcp_client.cc - - src/core/lib/iomgr/tcp_client_cfstream.cc - - src/core/lib/iomgr/tcp_client_posix.cc - - src/core/lib/iomgr/tcp_client_windows.cc - - src/core/lib/iomgr/tcp_posix.cc - - src/core/lib/iomgr/tcp_server.cc - - src/core/lib/iomgr/tcp_server_posix.cc - - src/core/lib/iomgr/tcp_server_utils_posix_common.cc - - src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc - - src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.cc - - src/core/lib/iomgr/tcp_server_windows.cc - - src/core/lib/iomgr/tcp_windows.cc - - src/core/lib/iomgr/timer.cc - - src/core/lib/iomgr/timer_generic.cc - - src/core/lib/iomgr/timer_heap.cc - - src/core/lib/iomgr/timer_manager.cc - - src/core/lib/iomgr/unix_sockets_posix.cc - - src/core/lib/iomgr/unix_sockets_posix_noop.cc - - src/core/lib/iomgr/vsock.cc - - src/core/lib/iomgr/wakeup_fd_eventfd.cc - - src/core/lib/iomgr/wakeup_fd_nospecial.cc - - src/core/lib/iomgr/wakeup_fd_pipe.cc - - src/core/lib/iomgr/wakeup_fd_posix.cc - - src/core/lib/json/json_writer.cc - - src/core/lib/load_balancing/lb_policy.cc - - src/core/lib/load_balancing/lb_policy_registry.cc - - src/core/lib/promise/activity.cc - - src/core/lib/promise/party.cc - - src/core/lib/promise/trace.cc - - src/core/lib/resolver/resolver.cc - - src/core/lib/resolver/resolver_registry.cc - - src/core/lib/resolver/server_address.cc - - src/core/lib/resource_quota/api.cc - - src/core/lib/resource_quota/arena.cc - - src/core/lib/resource_quota/memory_quota.cc - - src/core/lib/resource_quota/periodic_update.cc - - src/core/lib/resource_quota/resource_quota.cc - - src/core/lib/resource_quota/thread_quota.cc - - src/core/lib/resource_quota/trace.cc - - src/core/lib/security/certificate_provider/certificate_provider_registry.cc - - src/core/lib/security/credentials/alts/check_gcp_environment.cc - - src/core/lib/security/credentials/alts/check_gcp_environment_linux.cc - - src/core/lib/security/credentials/alts/check_gcp_environment_no_op.cc - - src/core/lib/security/credentials/alts/check_gcp_environment_windows.cc - - src/core/lib/security/credentials/alts/grpc_alts_credentials_client_options.cc - - src/core/lib/security/credentials/alts/grpc_alts_credentials_options.cc - - src/core/lib/security/credentials/alts/grpc_alts_credentials_server_options.cc - - src/core/lib/service_config/service_config_parser.cc - - src/core/lib/slice/b64.cc - - src/core/lib/slice/percent_encoding.cc - - src/core/lib/slice/slice.cc - - src/core/lib/slice/slice_buffer.cc - - src/core/lib/slice/slice_refcount.cc - - src/core/lib/slice/slice_string_helpers.cc - - src/core/lib/surface/api_trace.cc - - src/core/lib/surface/builtins.cc - - src/core/lib/surface/byte_buffer.cc - - src/core/lib/surface/byte_buffer_reader.cc - - src/core/lib/surface/call.cc - - src/core/lib/surface/call_details.cc - - src/core/lib/surface/call_log_batch.cc - - src/core/lib/surface/call_trace.cc - - src/core/lib/surface/channel.cc - - src/core/lib/surface/channel_init.cc - - src/core/lib/surface/channel_ping.cc - - src/core/lib/surface/channel_stack_type.cc - - src/core/lib/surface/completion_queue.cc - - src/core/lib/surface/completion_queue_factory.cc - - src/core/lib/surface/event_string.cc - - src/core/lib/surface/init_internally.cc - - src/core/lib/surface/lame_client.cc - - src/core/lib/surface/metadata_array.cc - - src/core/lib/surface/server.cc - - src/core/lib/surface/validate_metadata.cc - - src/core/lib/surface/version.cc - - src/core/lib/transport/batch_builder.cc - - src/core/lib/transport/connectivity_state.cc - - src/core/lib/transport/error_utils.cc - - src/core/lib/transport/handshaker_registry.cc - - src/core/lib/transport/metadata_batch.cc - - src/core/lib/transport/parsed_metadata.cc - - src/core/lib/transport/status_conversion.cc - - src/core/lib/transport/timeout_encoding.cc - - src/core/lib/transport/transport.cc - - src/core/lib/transport/transport_op_string.cc - - src/core/lib/uri/uri_parser.cc - - src/core/tsi/alts/handshaker/transport_security_common_api.cc - - test/core/transport/chaotic_good/frame_test.cc - deps: - - gtest - - upb - - z - - absl/cleanup:cleanup - - absl/container:flat_hash_map - - absl/container:flat_hash_set - - absl/container:inlined_vector - - absl/functional:function_ref - - absl/hash:hash - - absl/meta:type_traits - - absl/status:statusor - - absl/types:span - - absl/utility:utility - - cares - - gpr -- name: fuzzing_event_engine_test +- name: fuzzing_event_engine_test gtest: true build: test language: c++ @@ -15634,276 +15077,861 @@ targets: - test/cpp/util/channel_trace_proto_helper.cc deps: - gtest - - grpc++ + - grpc++ + - grpc_test_util +- name: test_core_end2end_channelz_test + gtest: true + build: test + language: c++ + headers: + - test/core/end2end/cq_verifier.h + - test/core/end2end/end2end_tests.h + - test/core/end2end/fixtures/h2_oauth2_common.h + - test/core/end2end/fixtures/h2_ssl_cred_reload_fixture.h + - test/core/end2end/fixtures/h2_ssl_tls_common.h + - test/core/end2end/fixtures/h2_tls_common.h + - test/core/end2end/fixtures/http_proxy_fixture.h + - test/core/end2end/fixtures/inproc_fixture.h + - test/core/end2end/fixtures/local_util.h + - test/core/end2end/fixtures/proxy.h + - test/core/end2end/fixtures/secure_fixture.h + - test/core/end2end/fixtures/sockpair_fixture.h + - test/core/end2end/tests/cancel_test_helpers.h + - test/core/event_engine/event_engine_test_utils.h + - test/core/util/test_lb_policies.h + src: + - test/core/end2end/cq_verifier.cc + - test/core/end2end/end2end_test_main.cc + - test/core/end2end/end2end_test_suites.cc + - test/core/end2end/end2end_tests.cc + - test/core/end2end/fixtures/http_proxy_fixture.cc + - test/core/end2end/fixtures/local_util.cc + - test/core/end2end/fixtures/proxy.cc + - test/core/end2end/tests/channelz.cc + - test/core/event_engine/event_engine_test_utils.cc + - test/core/util/test_lb_policies.cc + deps: + - gtest + - grpc_authorization_provider + - grpc_unsecure + - grpc_test_util +- name: test_core_event_engine_posix_timer_heap_test + gtest: true + build: test + language: c++ + headers: + - src/core/lib/event_engine/posix_engine/timer.h + - src/core/lib/event_engine/posix_engine/timer_heap.h + - src/core/lib/gprpp/bitset.h + - src/core/lib/gprpp/time.h + - src/core/lib/gprpp/time_averaged_stats.h + src: + - src/core/lib/event_engine/posix_engine/timer.cc + - src/core/lib/event_engine/posix_engine/timer_heap.cc + - src/core/lib/gprpp/time.cc + - src/core/lib/gprpp/time_averaged_stats.cc + - test/core/event_engine/posix/timer_heap_test.cc + deps: + - gtest + - absl/status:statusor + - gpr + uses_polling: false +- name: test_core_event_engine_posix_timer_list_test + gtest: true + build: test + language: c++ + headers: + - src/core/lib/event_engine/posix_engine/timer.h + - src/core/lib/event_engine/posix_engine/timer_heap.h + - src/core/lib/gprpp/time.h + - src/core/lib/gprpp/time_averaged_stats.h + src: + - src/core/lib/event_engine/posix_engine/timer.cc + - src/core/lib/event_engine/posix_engine/timer_heap.cc + - src/core/lib/gprpp/time.cc + - src/core/lib/gprpp/time_averaged_stats.cc + - test/core/event_engine/posix/timer_list_test.cc + deps: + - gtest + - absl/status:statusor + - gpr + uses_polling: false +- name: test_core_event_engine_slice_buffer_test + gtest: true + build: test + language: c++ + headers: + - src/core/lib/debug/trace.h + - src/core/lib/event_engine/handle_containers.h + - src/core/lib/event_engine/resolved_address_internal.h + - src/core/lib/iomgr/port.h + - src/core/lib/iomgr/resolved_address.h + - src/core/lib/slice/slice.h + - src/core/lib/slice/slice_buffer.h + - src/core/lib/slice/slice_internal.h + - src/core/lib/slice/slice_refcount.h + - src/core/lib/slice/slice_string_helpers.h + src: + - src/core/lib/debug/trace.cc + - src/core/lib/event_engine/event_engine.cc + - src/core/lib/event_engine/resolved_address.cc + - src/core/lib/event_engine/slice.cc + - src/core/lib/event_engine/slice_buffer.cc + - src/core/lib/slice/slice.cc + - src/core/lib/slice/slice_buffer.cc + - src/core/lib/slice/slice_refcount.cc + - src/core/lib/slice/slice_string_helpers.cc + - test/core/event_engine/slice_buffer_test.cc + deps: + - gtest + - absl/container:flat_hash_set + - absl/hash:hash + - absl/status:statusor + - absl/utility:utility + - gpr +- name: test_core_gpr_time_test + gtest: true + build: test + language: c++ + headers: [] + src: + - test/core/gpr/time_test.cc + deps: + - gtest + - grpc_test_util + uses_polling: false +- name: test_core_gprpp_load_file_test + gtest: true + build: test + language: c++ + headers: [] + src: + - test/core/gprpp/load_file_test.cc + deps: + - gtest + - grpc_test_util + uses_polling: false +- name: test_core_gprpp_time_test + gtest: true + build: test + language: c++ + headers: + - src/core/lib/gprpp/time.h + src: + - src/core/lib/gprpp/time.cc + - test/core/gprpp/time_test.cc + deps: + - gtest + - absl/status:statusor + - gpr + uses_polling: false +- name: test_core_iomgr_load_file_test + gtest: true + build: test + language: c++ + headers: + - test/core/util/cmdline.h + - test/core/util/evaluate_args_test_util.h + - test/core/util/fuzzer_util.h + - test/core/util/grpc_profiler.h + - test/core/util/histogram.h + - test/core/util/mock_authorization_endpoint.h + - test/core/util/mock_endpoint.h + - test/core/util/parse_hexstring.h + - test/core/util/passthru_endpoint.h + - test/core/util/resolve_localhost_ip46.h + - test/core/util/slice_splitter.h + - test/core/util/tracer_util.h + src: + - test/core/iomgr/load_file_test.cc + - test/core/util/cmdline.cc + - test/core/util/fuzzer_util.cc + - test/core/util/grpc_profiler.cc + - test/core/util/histogram.cc + - test/core/util/mock_endpoint.cc + - test/core/util/parse_hexstring.cc + - test/core/util/passthru_endpoint.cc + - test/core/util/resolve_localhost_ip46.cc + - test/core/util/slice_splitter.cc + - test/core/util/tracer_util.cc + deps: + - gtest + - grpc_test_util + uses_polling: false +- name: test_core_iomgr_timer_heap_test + gtest: true + build: test + language: c++ + headers: + - test/core/util/cmdline.h + - test/core/util/evaluate_args_test_util.h + - test/core/util/fuzzer_util.h + - test/core/util/grpc_profiler.h + - test/core/util/histogram.h + - test/core/util/mock_authorization_endpoint.h + - test/core/util/mock_endpoint.h + - test/core/util/parse_hexstring.h + - test/core/util/passthru_endpoint.h + - test/core/util/resolve_localhost_ip46.h + - test/core/util/slice_splitter.h + - test/core/util/tracer_util.h + src: + - test/core/iomgr/timer_heap_test.cc + - test/core/util/cmdline.cc + - test/core/util/fuzzer_util.cc + - test/core/util/grpc_profiler.cc + - test/core/util/histogram.cc + - test/core/util/mock_endpoint.cc + - test/core/util/parse_hexstring.cc + - test/core/util/passthru_endpoint.cc + - test/core/util/resolve_localhost_ip46.cc + - test/core/util/slice_splitter.cc + - test/core/util/tracer_util.cc + deps: + - gtest + - grpc_test_util + uses_polling: false +- name: test_core_security_credentials_test + gtest: true + build: test + language: c++ + headers: + - test/core/util/cmdline.h + - test/core/util/evaluate_args_test_util.h + - test/core/util/fuzzer_util.h + - test/core/util/grpc_profiler.h + - test/core/util/histogram.h + - test/core/util/mock_authorization_endpoint.h + - test/core/util/mock_endpoint.h + - test/core/util/parse_hexstring.h + - test/core/util/passthru_endpoint.h + - test/core/util/resolve_localhost_ip46.h + - test/core/util/slice_splitter.h + - test/core/util/tracer_util.h + src: + - test/core/security/credentials_test.cc + - test/core/util/cmdline.cc + - test/core/util/fuzzer_util.cc + - test/core/util/grpc_profiler.cc + - test/core/util/histogram.cc + - test/core/util/mock_endpoint.cc + - test/core/util/parse_hexstring.cc + - test/core/util/passthru_endpoint.cc + - test/core/util/resolve_localhost_ip46.cc + - test/core/util/slice_splitter.cc + - test/core/util/tracer_util.cc + deps: + - gtest - grpc_test_util -- name: test_core_end2end_channelz_test +- name: test_core_slice_slice_buffer_test gtest: true build: test language: c++ - headers: - - test/core/end2end/cq_verifier.h - - test/core/end2end/end2end_tests.h - - test/core/end2end/fixtures/h2_oauth2_common.h - - test/core/end2end/fixtures/h2_ssl_cred_reload_fixture.h - - test/core/end2end/fixtures/h2_ssl_tls_common.h - - test/core/end2end/fixtures/h2_tls_common.h - - test/core/end2end/fixtures/http_proxy_fixture.h - - test/core/end2end/fixtures/inproc_fixture.h - - test/core/end2end/fixtures/local_util.h - - test/core/end2end/fixtures/proxy.h - - test/core/end2end/fixtures/secure_fixture.h - - test/core/end2end/fixtures/sockpair_fixture.h - - test/core/end2end/tests/cancel_test_helpers.h - - test/core/event_engine/event_engine_test_utils.h - - test/core/util/test_lb_policies.h + headers: [] src: - - test/core/end2end/cq_verifier.cc - - test/core/end2end/end2end_test_main.cc - - test/core/end2end/end2end_test_suites.cc - - test/core/end2end/end2end_tests.cc - - test/core/end2end/fixtures/http_proxy_fixture.cc - - test/core/end2end/fixtures/local_util.cc - - test/core/end2end/fixtures/proxy.cc - - test/core/end2end/tests/channelz.cc - - test/core/event_engine/event_engine_test_utils.cc - - test/core/util/test_lb_policies.cc + - test/core/slice/slice_buffer_test.cc deps: - gtest - - grpc_authorization_provider - - grpc_unsecure - grpc_test_util -- name: test_core_event_engine_posix_timer_heap_test + uses_polling: false +- name: test_core_slice_slice_test gtest: true build: test language: c++ headers: - - src/core/lib/event_engine/posix_engine/timer.h - - src/core/lib/event_engine/posix_engine/timer_heap.h - - src/core/lib/gprpp/bitset.h - - src/core/lib/gprpp/time.h - - src/core/lib/gprpp/time_averaged_stats.h + - test/core/util/build.h src: - - src/core/lib/event_engine/posix_engine/timer.cc - - src/core/lib/event_engine/posix_engine/timer_heap.cc - - src/core/lib/gprpp/time.cc - - src/core/lib/gprpp/time_averaged_stats.cc - - test/core/event_engine/posix/timer_heap_test.cc + - test/core/slice/slice_test.cc + - test/core/util/build.cc deps: - gtest - - absl/status:statusor - - gpr + - grpc uses_polling: false -- name: test_core_event_engine_posix_timer_list_test +- name: test_core_transport_chaotic_good_frame_test gtest: true build: test language: c++ headers: + - src/core/ext/filters/client_channel/lb_policy/backend_metric_data.h + - src/core/ext/transport/chaotic_good/frame.h + - src/core/ext/transport/chaotic_good/frame_header.h + - src/core/ext/transport/chttp2/transport/bin_encoder.h + - src/core/ext/transport/chttp2/transport/decode_huff.h + - src/core/ext/transport/chttp2/transport/hpack_constants.h + - src/core/ext/transport/chttp2/transport/hpack_encoder.h + - src/core/ext/transport/chttp2/transport/hpack_encoder_table.h + - src/core/ext/transport/chttp2/transport/hpack_parse_result.h + - src/core/ext/transport/chttp2/transport/hpack_parser.h + - src/core/ext/transport/chttp2/transport/hpack_parser_table.h + - src/core/ext/transport/chttp2/transport/http_trace.h + - src/core/ext/transport/chttp2/transport/huffsyms.h + - src/core/ext/transport/chttp2/transport/legacy_frame.h + - src/core/ext/transport/chttp2/transport/varint.h + - src/core/ext/upb-generated/google/protobuf/any.upb.h + - src/core/ext/upb-generated/google/protobuf/descriptor.upb.h + - src/core/ext/upb-generated/google/rpc/status.upb.h + - src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.h + - src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.h + - src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.h + - src/core/lib/address_utils/parse_address.h + - src/core/lib/address_utils/sockaddr_utils.h + - src/core/lib/avl/avl.h + - src/core/lib/backoff/backoff.h + - src/core/lib/backoff/random_early_detection.h + - src/core/lib/channel/call_finalization.h + - src/core/lib/channel/call_tracer.h + - src/core/lib/channel/channel_args.h + - src/core/lib/channel/channel_args_preconditioning.h + - src/core/lib/channel/channel_fwd.h + - src/core/lib/channel/channel_stack.h + - src/core/lib/channel/channel_stack_builder.h + - src/core/lib/channel/channel_stack_builder_impl.h + - src/core/lib/channel/channel_trace.h + - src/core/lib/channel/channelz.h + - src/core/lib/channel/channelz_registry.h + - src/core/lib/channel/connected_channel.h + - src/core/lib/channel/context.h + - src/core/lib/channel/promise_based_filter.h + - src/core/lib/channel/status_util.h + - src/core/lib/compression/compression_internal.h + - src/core/lib/compression/message_compress.h + - src/core/lib/config/core_configuration.h + - src/core/lib/debug/event_log.h + - src/core/lib/debug/histogram_view.h + - src/core/lib/debug/stats.h + - src/core/lib/debug/stats_data.h + - src/core/lib/debug/trace.h + - src/core/lib/event_engine/ares_resolver.h + - src/core/lib/event_engine/cf_engine/cf_engine.h + - src/core/lib/event_engine/cf_engine/cfstream_endpoint.h + - src/core/lib/event_engine/cf_engine/cftype_unique_ref.h + - src/core/lib/event_engine/cf_engine/dns_service_resolver.h + - src/core/lib/event_engine/channel_args_endpoint_config.h + - src/core/lib/event_engine/common_closures.h + - src/core/lib/event_engine/default_event_engine.h + - src/core/lib/event_engine/default_event_engine_factory.h + - src/core/lib/event_engine/forkable.h + - src/core/lib/event_engine/grpc_polled_fd.h + - src/core/lib/event_engine/handle_containers.h + - src/core/lib/event_engine/memory_allocator_factory.h + - src/core/lib/event_engine/poller.h + - src/core/lib/event_engine/posix.h + - src/core/lib/event_engine/posix_engine/ev_epoll1_linux.h + - src/core/lib/event_engine/posix_engine/ev_poll_posix.h + - src/core/lib/event_engine/posix_engine/event_poller.h + - src/core/lib/event_engine/posix_engine/event_poller_posix_default.h + - src/core/lib/event_engine/posix_engine/grpc_polled_fd_posix.h + - src/core/lib/event_engine/posix_engine/internal_errqueue.h + - src/core/lib/event_engine/posix_engine/lockfree_event.h + - src/core/lib/event_engine/posix_engine/posix_endpoint.h + - src/core/lib/event_engine/posix_engine/posix_engine.h + - src/core/lib/event_engine/posix_engine/posix_engine_closure.h + - src/core/lib/event_engine/posix_engine/posix_engine_listener.h + - src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.h + - src/core/lib/event_engine/posix_engine/tcp_socket_utils.h - src/core/lib/event_engine/posix_engine/timer.h - src/core/lib/event_engine/posix_engine/timer_heap.h + - src/core/lib/event_engine/posix_engine/timer_manager.h + - src/core/lib/event_engine/posix_engine/traced_buffer_list.h + - src/core/lib/event_engine/posix_engine/wakeup_fd_eventfd.h + - src/core/lib/event_engine/posix_engine/wakeup_fd_pipe.h + - src/core/lib/event_engine/posix_engine/wakeup_fd_posix.h + - src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.h + - src/core/lib/event_engine/resolved_address_internal.h + - src/core/lib/event_engine/shim.h + - src/core/lib/event_engine/tcp_socket_utils.h + - src/core/lib/event_engine/thread_pool/original_thread_pool.h + - src/core/lib/event_engine/thread_pool/thread_count.h + - src/core/lib/event_engine/thread_pool/thread_pool.h + - src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.h + - src/core/lib/event_engine/thready_event_engine/thready_event_engine.h + - src/core/lib/event_engine/time_util.h + - src/core/lib/event_engine/trace.h + - src/core/lib/event_engine/utils.h + - src/core/lib/event_engine/windows/iocp.h + - src/core/lib/event_engine/windows/win_socket.h + - src/core/lib/event_engine/windows/windows_endpoint.h + - src/core/lib/event_engine/windows/windows_engine.h + - src/core/lib/event_engine/windows/windows_listener.h + - src/core/lib/event_engine/work_queue/basic_work_queue.h + - src/core/lib/event_engine/work_queue/work_queue.h + - src/core/lib/experiments/config.h + - src/core/lib/experiments/experiments.h + - src/core/lib/gpr/spinlock.h + - src/core/lib/gprpp/atomic_utils.h + - src/core/lib/gprpp/bitset.h + - src/core/lib/gprpp/chunked_vector.h + - src/core/lib/gprpp/cpp_impl_of.h + - src/core/lib/gprpp/dual_ref_counted.h + - src/core/lib/gprpp/if_list.h + - src/core/lib/gprpp/load_file.h + - src/core/lib/gprpp/manual_constructor.h + - src/core/lib/gprpp/match.h + - src/core/lib/gprpp/notification.h + - src/core/lib/gprpp/orphanable.h + - src/core/lib/gprpp/overload.h + - src/core/lib/gprpp/packed_table.h + - src/core/lib/gprpp/per_cpu.h + - src/core/lib/gprpp/ref_counted.h + - src/core/lib/gprpp/ref_counted_ptr.h + - src/core/lib/gprpp/ref_counted_string.h + - src/core/lib/gprpp/sorted_pack.h + - src/core/lib/gprpp/status_helper.h + - src/core/lib/gprpp/table.h - src/core/lib/gprpp/time.h - src/core/lib/gprpp/time_averaged_stats.h + - src/core/lib/gprpp/type_list.h + - src/core/lib/gprpp/unique_type_name.h + - src/core/lib/gprpp/validation_errors.h + - src/core/lib/gprpp/work_serializer.h + - src/core/lib/handshaker/proxy_mapper.h + - src/core/lib/handshaker/proxy_mapper_registry.h + - src/core/lib/iomgr/block_annotate.h + - src/core/lib/iomgr/buffer_list.h + - src/core/lib/iomgr/call_combiner.h + - src/core/lib/iomgr/cfstream_handle.h + - src/core/lib/iomgr/closure.h + - src/core/lib/iomgr/combiner.h + - src/core/lib/iomgr/dynamic_annotations.h + - src/core/lib/iomgr/endpoint.h + - src/core/lib/iomgr/endpoint_cfstream.h + - src/core/lib/iomgr/endpoint_pair.h + - src/core/lib/iomgr/error.h + - src/core/lib/iomgr/error_cfstream.h + - src/core/lib/iomgr/ev_apple.h + - src/core/lib/iomgr/ev_epoll1_linux.h + - src/core/lib/iomgr/ev_poll_posix.h + - src/core/lib/iomgr/ev_posix.h + - src/core/lib/iomgr/event_engine_shims/closure.h + - src/core/lib/iomgr/event_engine_shims/endpoint.h + - src/core/lib/iomgr/event_engine_shims/tcp_client.h + - src/core/lib/iomgr/exec_ctx.h + - src/core/lib/iomgr/executor.h + - src/core/lib/iomgr/gethostname.h + - src/core/lib/iomgr/grpc_if_nametoindex.h + - src/core/lib/iomgr/internal_errqueue.h + - src/core/lib/iomgr/iocp_windows.h + - src/core/lib/iomgr/iomgr.h + - src/core/lib/iomgr/iomgr_fwd.h + - src/core/lib/iomgr/iomgr_internal.h + - src/core/lib/iomgr/load_file.h + - src/core/lib/iomgr/lockfree_event.h + - src/core/lib/iomgr/nameser.h + - src/core/lib/iomgr/polling_entity.h + - src/core/lib/iomgr/pollset.h + - src/core/lib/iomgr/pollset_set.h + - src/core/lib/iomgr/pollset_set_windows.h + - src/core/lib/iomgr/pollset_windows.h + - src/core/lib/iomgr/port.h + - src/core/lib/iomgr/python_util.h + - src/core/lib/iomgr/resolve_address.h + - src/core/lib/iomgr/resolve_address_impl.h + - src/core/lib/iomgr/resolve_address_posix.h + - src/core/lib/iomgr/resolve_address_windows.h + - src/core/lib/iomgr/resolved_address.h + - src/core/lib/iomgr/sockaddr.h + - src/core/lib/iomgr/sockaddr_posix.h + - src/core/lib/iomgr/sockaddr_windows.h + - src/core/lib/iomgr/socket_factory_posix.h + - src/core/lib/iomgr/socket_mutator.h + - src/core/lib/iomgr/socket_utils.h + - src/core/lib/iomgr/socket_utils_posix.h + - src/core/lib/iomgr/socket_windows.h + - src/core/lib/iomgr/systemd_utils.h + - src/core/lib/iomgr/tcp_client.h + - src/core/lib/iomgr/tcp_client_posix.h + - src/core/lib/iomgr/tcp_posix.h + - src/core/lib/iomgr/tcp_server.h + - src/core/lib/iomgr/tcp_server_utils_posix.h + - src/core/lib/iomgr/tcp_windows.h + - src/core/lib/iomgr/timer.h + - src/core/lib/iomgr/timer_generic.h + - src/core/lib/iomgr/timer_heap.h + - src/core/lib/iomgr/timer_manager.h + - src/core/lib/iomgr/unix_sockets_posix.h + - src/core/lib/iomgr/vsock.h + - src/core/lib/iomgr/wakeup_fd_pipe.h + - src/core/lib/iomgr/wakeup_fd_posix.h + - src/core/lib/json/json.h + - src/core/lib/json/json_args.h + - src/core/lib/json/json_writer.h + - src/core/lib/load_balancing/lb_policy.h + - src/core/lib/load_balancing/lb_policy_factory.h + - src/core/lib/load_balancing/lb_policy_registry.h + - src/core/lib/load_balancing/subchannel_interface.h + - src/core/lib/promise/activity.h + - src/core/lib/promise/arena_promise.h + - src/core/lib/promise/cancel_callback.h + - src/core/lib/promise/context.h + - src/core/lib/promise/detail/basic_seq.h + - src/core/lib/promise/detail/promise_factory.h + - src/core/lib/promise/detail/promise_like.h + - src/core/lib/promise/detail/seq_state.h + - src/core/lib/promise/detail/status.h + - src/core/lib/promise/exec_ctx_wakeup_scheduler.h + - src/core/lib/promise/for_each.h + - src/core/lib/promise/if.h + - src/core/lib/promise/interceptor_list.h + - src/core/lib/promise/latch.h + - src/core/lib/promise/loop.h + - src/core/lib/promise/map.h + - src/core/lib/promise/party.h + - src/core/lib/promise/pipe.h + - src/core/lib/promise/poll.h + - src/core/lib/promise/promise.h + - src/core/lib/promise/race.h + - src/core/lib/promise/seq.h + - src/core/lib/promise/trace.h + - src/core/lib/promise/try_seq.h + - src/core/lib/resolver/resolver.h + - src/core/lib/resolver/resolver_factory.h + - src/core/lib/resolver/resolver_registry.h + - src/core/lib/resolver/server_address.h + - src/core/lib/resource_quota/api.h + - src/core/lib/resource_quota/arena.h + - src/core/lib/resource_quota/memory_quota.h + - src/core/lib/resource_quota/periodic_update.h + - src/core/lib/resource_quota/resource_quota.h + - src/core/lib/resource_quota/thread_quota.h + - src/core/lib/resource_quota/trace.h + - src/core/lib/security/certificate_provider/certificate_provider_factory.h + - src/core/lib/security/certificate_provider/certificate_provider_registry.h + - src/core/lib/security/credentials/alts/check_gcp_environment.h + - src/core/lib/security/credentials/alts/grpc_alts_credentials_options.h + - src/core/lib/security/credentials/channel_creds_registry.h + - src/core/lib/service_config/service_config.h + - src/core/lib/service_config/service_config_call_data.h + - src/core/lib/service_config/service_config_parser.h + - src/core/lib/slice/b64.h + - src/core/lib/slice/percent_encoding.h + - src/core/lib/slice/slice.h + - src/core/lib/slice/slice_buffer.h + - src/core/lib/slice/slice_internal.h + - src/core/lib/slice/slice_refcount.h + - src/core/lib/slice/slice_string_helpers.h + - src/core/lib/surface/api_trace.h + - src/core/lib/surface/builtins.h + - src/core/lib/surface/call.h + - src/core/lib/surface/call_test_only.h + - src/core/lib/surface/call_trace.h + - src/core/lib/surface/channel.h + - src/core/lib/surface/channel_init.h + - src/core/lib/surface/channel_stack_type.h + - src/core/lib/surface/completion_queue.h + - src/core/lib/surface/completion_queue_factory.h + - src/core/lib/surface/event_string.h + - src/core/lib/surface/init.h + - src/core/lib/surface/init_internally.h + - src/core/lib/surface/lame_client.h + - src/core/lib/surface/server.h + - src/core/lib/surface/validate_metadata.h + - src/core/lib/transport/batch_builder.h + - src/core/lib/transport/connectivity_state.h + - src/core/lib/transport/custom_metadata.h + - src/core/lib/transport/error_utils.h + - src/core/lib/transport/handshaker_factory.h + - src/core/lib/transport/handshaker_registry.h + - src/core/lib/transport/http2_errors.h + - src/core/lib/transport/metadata_batch.h + - src/core/lib/transport/metadata_compression_traits.h + - src/core/lib/transport/parsed_metadata.h + - src/core/lib/transport/simple_slice_based_metadata.h + - src/core/lib/transport/status_conversion.h + - src/core/lib/transport/timeout_encoding.h + - src/core/lib/transport/transport.h + - src/core/lib/transport/transport_fwd.h + - src/core/lib/transport/transport_impl.h + - src/core/lib/uri/uri_parser.h + - src/core/tsi/alts/handshaker/transport_security_common_api.h src: + - src/core/ext/transport/chaotic_good/frame.cc + - src/core/ext/transport/chaotic_good/frame_header.cc + - src/core/ext/transport/chttp2/transport/bin_encoder.cc + - src/core/ext/transport/chttp2/transport/decode_huff.cc + - src/core/ext/transport/chttp2/transport/hpack_encoder.cc + - src/core/ext/transport/chttp2/transport/hpack_encoder_table.cc + - src/core/ext/transport/chttp2/transport/hpack_parse_result.cc + - src/core/ext/transport/chttp2/transport/hpack_parser.cc + - src/core/ext/transport/chttp2/transport/hpack_parser_table.cc + - src/core/ext/transport/chttp2/transport/http_trace.cc + - src/core/ext/transport/chttp2/transport/huffsyms.cc + - src/core/ext/transport/chttp2/transport/varint.cc + - src/core/ext/upb-generated/google/protobuf/any.upb.c + - src/core/ext/upb-generated/google/protobuf/descriptor.upb.c + - src/core/ext/upb-generated/google/rpc/status.upb.c + - src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.c + - src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c + - src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.c + - src/core/lib/address_utils/parse_address.cc + - src/core/lib/address_utils/sockaddr_utils.cc + - src/core/lib/backoff/backoff.cc + - src/core/lib/backoff/random_early_detection.cc + - src/core/lib/channel/call_tracer.cc + - src/core/lib/channel/channel_args.cc + - src/core/lib/channel/channel_args_preconditioning.cc + - src/core/lib/channel/channel_stack.cc + - src/core/lib/channel/channel_stack_builder.cc + - src/core/lib/channel/channel_stack_builder_impl.cc + - src/core/lib/channel/channel_trace.cc + - src/core/lib/channel/channelz.cc + - src/core/lib/channel/channelz_registry.cc + - src/core/lib/channel/connected_channel.cc + - src/core/lib/channel/promise_based_filter.cc + - src/core/lib/channel/server_call_tracer_filter.cc + - src/core/lib/channel/status_util.cc + - src/core/lib/compression/compression.cc + - src/core/lib/compression/compression_internal.cc + - src/core/lib/compression/message_compress.cc + - src/core/lib/config/core_configuration.cc + - src/core/lib/debug/event_log.cc + - src/core/lib/debug/histogram_view.cc + - src/core/lib/debug/stats.cc + - src/core/lib/debug/stats_data.cc + - src/core/lib/debug/trace.cc + - src/core/lib/event_engine/ares_resolver.cc + - src/core/lib/event_engine/cf_engine/cf_engine.cc + - src/core/lib/event_engine/cf_engine/cfstream_endpoint.cc + - src/core/lib/event_engine/cf_engine/dns_service_resolver.cc + - src/core/lib/event_engine/channel_args_endpoint_config.cc + - src/core/lib/event_engine/default_event_engine.cc + - src/core/lib/event_engine/default_event_engine_factory.cc + - src/core/lib/event_engine/event_engine.cc + - src/core/lib/event_engine/forkable.cc + - src/core/lib/event_engine/memory_allocator.cc + - src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc + - src/core/lib/event_engine/posix_engine/ev_poll_posix.cc + - src/core/lib/event_engine/posix_engine/event_poller_posix_default.cc + - src/core/lib/event_engine/posix_engine/internal_errqueue.cc + - src/core/lib/event_engine/posix_engine/lockfree_event.cc + - src/core/lib/event_engine/posix_engine/posix_endpoint.cc + - src/core/lib/event_engine/posix_engine/posix_engine.cc + - src/core/lib/event_engine/posix_engine/posix_engine_listener.cc + - src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.cc + - src/core/lib/event_engine/posix_engine/tcp_socket_utils.cc - src/core/lib/event_engine/posix_engine/timer.cc - src/core/lib/event_engine/posix_engine/timer_heap.cc + - src/core/lib/event_engine/posix_engine/timer_manager.cc + - src/core/lib/event_engine/posix_engine/traced_buffer_list.cc + - src/core/lib/event_engine/posix_engine/wakeup_fd_eventfd.cc + - src/core/lib/event_engine/posix_engine/wakeup_fd_pipe.cc + - src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.cc + - src/core/lib/event_engine/resolved_address.cc + - src/core/lib/event_engine/shim.cc + - src/core/lib/event_engine/slice.cc + - src/core/lib/event_engine/slice_buffer.cc + - src/core/lib/event_engine/tcp_socket_utils.cc + - src/core/lib/event_engine/thread_pool/original_thread_pool.cc + - src/core/lib/event_engine/thread_pool/thread_count.cc + - src/core/lib/event_engine/thread_pool/thread_pool_factory.cc + - src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.cc + - src/core/lib/event_engine/thready_event_engine/thready_event_engine.cc + - src/core/lib/event_engine/time_util.cc + - src/core/lib/event_engine/trace.cc + - src/core/lib/event_engine/utils.cc + - src/core/lib/event_engine/windows/iocp.cc + - src/core/lib/event_engine/windows/win_socket.cc + - src/core/lib/event_engine/windows/windows_endpoint.cc + - src/core/lib/event_engine/windows/windows_engine.cc + - src/core/lib/event_engine/windows/windows_listener.cc + - src/core/lib/event_engine/work_queue/basic_work_queue.cc + - src/core/lib/experiments/config.cc + - src/core/lib/experiments/experiments.cc + - src/core/lib/gprpp/load_file.cc + - src/core/lib/gprpp/per_cpu.cc + - src/core/lib/gprpp/ref_counted_string.cc + - src/core/lib/gprpp/status_helper.cc - src/core/lib/gprpp/time.cc - src/core/lib/gprpp/time_averaged_stats.cc - - test/core/event_engine/posix/timer_list_test.cc + - src/core/lib/gprpp/validation_errors.cc + - src/core/lib/gprpp/work_serializer.cc + - src/core/lib/handshaker/proxy_mapper_registry.cc + - src/core/lib/iomgr/buffer_list.cc + - src/core/lib/iomgr/call_combiner.cc + - src/core/lib/iomgr/cfstream_handle.cc + - src/core/lib/iomgr/closure.cc + - src/core/lib/iomgr/combiner.cc + - src/core/lib/iomgr/dualstack_socket_posix.cc + - src/core/lib/iomgr/endpoint.cc + - src/core/lib/iomgr/endpoint_cfstream.cc + - src/core/lib/iomgr/endpoint_pair_posix.cc + - src/core/lib/iomgr/endpoint_pair_windows.cc + - src/core/lib/iomgr/error.cc + - src/core/lib/iomgr/error_cfstream.cc + - src/core/lib/iomgr/ev_apple.cc + - src/core/lib/iomgr/ev_epoll1_linux.cc + - src/core/lib/iomgr/ev_poll_posix.cc + - src/core/lib/iomgr/ev_posix.cc + - src/core/lib/iomgr/ev_windows.cc + - src/core/lib/iomgr/event_engine_shims/closure.cc + - src/core/lib/iomgr/event_engine_shims/endpoint.cc + - src/core/lib/iomgr/event_engine_shims/tcp_client.cc + - src/core/lib/iomgr/exec_ctx.cc + - src/core/lib/iomgr/executor.cc + - src/core/lib/iomgr/fork_posix.cc + - src/core/lib/iomgr/fork_windows.cc + - src/core/lib/iomgr/gethostname_fallback.cc + - src/core/lib/iomgr/gethostname_host_name_max.cc + - src/core/lib/iomgr/gethostname_sysconf.cc + - src/core/lib/iomgr/grpc_if_nametoindex_posix.cc + - src/core/lib/iomgr/grpc_if_nametoindex_unsupported.cc + - src/core/lib/iomgr/internal_errqueue.cc + - src/core/lib/iomgr/iocp_windows.cc + - src/core/lib/iomgr/iomgr.cc + - src/core/lib/iomgr/iomgr_internal.cc + - src/core/lib/iomgr/iomgr_posix.cc + - src/core/lib/iomgr/iomgr_posix_cfstream.cc + - src/core/lib/iomgr/iomgr_windows.cc + - src/core/lib/iomgr/load_file.cc + - src/core/lib/iomgr/lockfree_event.cc + - src/core/lib/iomgr/polling_entity.cc + - src/core/lib/iomgr/pollset.cc + - src/core/lib/iomgr/pollset_set.cc + - src/core/lib/iomgr/pollset_set_windows.cc + - src/core/lib/iomgr/pollset_windows.cc + - src/core/lib/iomgr/resolve_address.cc + - src/core/lib/iomgr/resolve_address_posix.cc + - src/core/lib/iomgr/resolve_address_windows.cc + - src/core/lib/iomgr/sockaddr_utils_posix.cc + - src/core/lib/iomgr/socket_factory_posix.cc + - src/core/lib/iomgr/socket_mutator.cc + - src/core/lib/iomgr/socket_utils_common_posix.cc + - src/core/lib/iomgr/socket_utils_linux.cc + - src/core/lib/iomgr/socket_utils_posix.cc + - src/core/lib/iomgr/socket_utils_windows.cc + - src/core/lib/iomgr/socket_windows.cc + - src/core/lib/iomgr/systemd_utils.cc + - src/core/lib/iomgr/tcp_client.cc + - src/core/lib/iomgr/tcp_client_cfstream.cc + - src/core/lib/iomgr/tcp_client_posix.cc + - src/core/lib/iomgr/tcp_client_windows.cc + - src/core/lib/iomgr/tcp_posix.cc + - src/core/lib/iomgr/tcp_server.cc + - src/core/lib/iomgr/tcp_server_posix.cc + - src/core/lib/iomgr/tcp_server_utils_posix_common.cc + - src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc + - src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.cc + - src/core/lib/iomgr/tcp_server_windows.cc + - src/core/lib/iomgr/tcp_windows.cc + - src/core/lib/iomgr/timer.cc + - src/core/lib/iomgr/timer_generic.cc + - src/core/lib/iomgr/timer_heap.cc + - src/core/lib/iomgr/timer_manager.cc + - src/core/lib/iomgr/unix_sockets_posix.cc + - src/core/lib/iomgr/unix_sockets_posix_noop.cc + - src/core/lib/iomgr/vsock.cc + - src/core/lib/iomgr/wakeup_fd_eventfd.cc + - src/core/lib/iomgr/wakeup_fd_nospecial.cc + - src/core/lib/iomgr/wakeup_fd_pipe.cc + - src/core/lib/iomgr/wakeup_fd_posix.cc + - src/core/lib/json/json_writer.cc + - src/core/lib/load_balancing/lb_policy.cc + - src/core/lib/load_balancing/lb_policy_registry.cc + - src/core/lib/promise/activity.cc + - src/core/lib/promise/party.cc + - src/core/lib/promise/trace.cc + - src/core/lib/resolver/resolver.cc + - src/core/lib/resolver/resolver_registry.cc + - src/core/lib/resolver/server_address.cc + - src/core/lib/resource_quota/api.cc + - src/core/lib/resource_quota/arena.cc + - src/core/lib/resource_quota/memory_quota.cc + - src/core/lib/resource_quota/periodic_update.cc + - src/core/lib/resource_quota/resource_quota.cc + - src/core/lib/resource_quota/thread_quota.cc + - src/core/lib/resource_quota/trace.cc + - src/core/lib/security/certificate_provider/certificate_provider_registry.cc + - src/core/lib/security/credentials/alts/check_gcp_environment.cc + - src/core/lib/security/credentials/alts/check_gcp_environment_linux.cc + - src/core/lib/security/credentials/alts/check_gcp_environment_no_op.cc + - src/core/lib/security/credentials/alts/check_gcp_environment_windows.cc + - src/core/lib/security/credentials/alts/grpc_alts_credentials_client_options.cc + - src/core/lib/security/credentials/alts/grpc_alts_credentials_options.cc + - src/core/lib/security/credentials/alts/grpc_alts_credentials_server_options.cc + - src/core/lib/service_config/service_config_parser.cc + - src/core/lib/slice/b64.cc + - src/core/lib/slice/percent_encoding.cc + - src/core/lib/slice/slice.cc + - src/core/lib/slice/slice_buffer.cc + - src/core/lib/slice/slice_refcount.cc + - src/core/lib/slice/slice_string_helpers.cc + - src/core/lib/surface/api_trace.cc + - src/core/lib/surface/builtins.cc + - src/core/lib/surface/byte_buffer.cc + - src/core/lib/surface/byte_buffer_reader.cc + - src/core/lib/surface/call.cc + - src/core/lib/surface/call_details.cc + - src/core/lib/surface/call_log_batch.cc + - src/core/lib/surface/call_trace.cc + - src/core/lib/surface/channel.cc + - src/core/lib/surface/channel_init.cc + - src/core/lib/surface/channel_ping.cc + - src/core/lib/surface/channel_stack_type.cc + - src/core/lib/surface/completion_queue.cc + - src/core/lib/surface/completion_queue_factory.cc + - src/core/lib/surface/event_string.cc + - src/core/lib/surface/init_internally.cc + - src/core/lib/surface/lame_client.cc + - src/core/lib/surface/metadata_array.cc + - src/core/lib/surface/server.cc + - src/core/lib/surface/validate_metadata.cc + - src/core/lib/surface/version.cc + - src/core/lib/transport/batch_builder.cc + - src/core/lib/transport/connectivity_state.cc + - src/core/lib/transport/error_utils.cc + - src/core/lib/transport/handshaker_registry.cc + - src/core/lib/transport/metadata_batch.cc + - src/core/lib/transport/parsed_metadata.cc + - src/core/lib/transport/status_conversion.cc + - src/core/lib/transport/timeout_encoding.cc + - src/core/lib/transport/transport.cc + - src/core/lib/transport/transport_op_string.cc + - src/core/lib/uri/uri_parser.cc + - src/core/tsi/alts/handshaker/transport_security_common_api.cc + - test/core/transport/chaotic_good/frame_test.cc deps: - gtest + - upb + - z + - absl/cleanup:cleanup + - absl/container:flat_hash_map + - absl/container:flat_hash_set + - absl/container:inlined_vector + - absl/functional:function_ref + - absl/hash:hash + - absl/meta:type_traits - absl/status:statusor + - absl/types:span + - absl/utility:utility + - cares - gpr - uses_polling: false -- name: test_core_event_engine_slice_buffer_test +- name: test_core_transport_chttp2_frame_test gtest: true build: test language: c++ headers: + - src/core/ext/transport/chttp2/transport/frame.h - src/core/lib/debug/trace.h - - src/core/lib/event_engine/handle_containers.h - - src/core/lib/event_engine/resolved_address_internal.h - - src/core/lib/iomgr/port.h - - src/core/lib/iomgr/resolved_address.h - src/core/lib/slice/slice.h - src/core/lib/slice/slice_buffer.h - src/core/lib/slice/slice_internal.h - src/core/lib/slice/slice_refcount.h - src/core/lib/slice/slice_string_helpers.h + - src/core/lib/transport/http2_errors.h src: + - src/core/ext/transport/chttp2/transport/frame.cc - src/core/lib/debug/trace.cc - - src/core/lib/event_engine/event_engine.cc - - src/core/lib/event_engine/resolved_address.cc - - src/core/lib/event_engine/slice.cc - - src/core/lib/event_engine/slice_buffer.cc - src/core/lib/slice/slice.cc - src/core/lib/slice/slice_buffer.cc - src/core/lib/slice/slice_refcount.cc - src/core/lib/slice/slice_string_helpers.cc - - test/core/event_engine/slice_buffer_test.cc + - test/core/transport/chttp2/frame_test.cc deps: - gtest - - absl/container:flat_hash_set - absl/hash:hash - absl/status:statusor - - absl/utility:utility - - gpr -- name: test_core_gpr_time_test - gtest: true - build: test - language: c++ - headers: [] - src: - - test/core/gpr/time_test.cc - deps: - - gtest - - grpc_test_util - uses_polling: false -- name: test_core_gprpp_load_file_test - gtest: true - build: test - language: c++ - headers: [] - src: - - test/core/gprpp/load_file_test.cc - deps: - - gtest - - grpc_test_util - uses_polling: false -- name: test_core_gprpp_time_test - gtest: true - build: test - language: c++ - headers: - - src/core/lib/gprpp/time.h - src: - - src/core/lib/gprpp/time.cc - - test/core/gprpp/time_test.cc - deps: - - gtest - - absl/status:statusor + - absl/types:span - gpr uses_polling: false -- name: test_core_iomgr_load_file_test - gtest: true - build: test - language: c++ - headers: - - test/core/util/cmdline.h - - test/core/util/evaluate_args_test_util.h - - test/core/util/fuzzer_util.h - - test/core/util/grpc_profiler.h - - test/core/util/histogram.h - - test/core/util/mock_authorization_endpoint.h - - test/core/util/mock_endpoint.h - - test/core/util/parse_hexstring.h - - test/core/util/passthru_endpoint.h - - test/core/util/resolve_localhost_ip46.h - - test/core/util/slice_splitter.h - - test/core/util/tracer_util.h - src: - - test/core/iomgr/load_file_test.cc - - test/core/util/cmdline.cc - - test/core/util/fuzzer_util.cc - - test/core/util/grpc_profiler.cc - - test/core/util/histogram.cc - - test/core/util/mock_endpoint.cc - - test/core/util/parse_hexstring.cc - - test/core/util/passthru_endpoint.cc - - test/core/util/resolve_localhost_ip46.cc - - test/core/util/slice_splitter.cc - - test/core/util/tracer_util.cc - deps: - - gtest - - grpc_test_util - uses_polling: false -- name: test_core_iomgr_timer_heap_test - gtest: true - build: test - language: c++ - headers: - - test/core/util/cmdline.h - - test/core/util/evaluate_args_test_util.h - - test/core/util/fuzzer_util.h - - test/core/util/grpc_profiler.h - - test/core/util/histogram.h - - test/core/util/mock_authorization_endpoint.h - - test/core/util/mock_endpoint.h - - test/core/util/parse_hexstring.h - - test/core/util/passthru_endpoint.h - - test/core/util/resolve_localhost_ip46.h - - test/core/util/slice_splitter.h - - test/core/util/tracer_util.h - src: - - test/core/iomgr/timer_heap_test.cc - - test/core/util/cmdline.cc - - test/core/util/fuzzer_util.cc - - test/core/util/grpc_profiler.cc - - test/core/util/histogram.cc - - test/core/util/mock_endpoint.cc - - test/core/util/parse_hexstring.cc - - test/core/util/passthru_endpoint.cc - - test/core/util/resolve_localhost_ip46.cc - - test/core/util/slice_splitter.cc - - test/core/util/tracer_util.cc - deps: - - gtest - - grpc_test_util - uses_polling: false -- name: test_core_security_credentials_test - gtest: true - build: test - language: c++ - headers: - - test/core/util/cmdline.h - - test/core/util/evaluate_args_test_util.h - - test/core/util/fuzzer_util.h - - test/core/util/grpc_profiler.h - - test/core/util/histogram.h - - test/core/util/mock_authorization_endpoint.h - - test/core/util/mock_endpoint.h - - test/core/util/parse_hexstring.h - - test/core/util/passthru_endpoint.h - - test/core/util/resolve_localhost_ip46.h - - test/core/util/slice_splitter.h - - test/core/util/tracer_util.h - src: - - test/core/security/credentials_test.cc - - test/core/util/cmdline.cc - - test/core/util/fuzzer_util.cc - - test/core/util/grpc_profiler.cc - - test/core/util/histogram.cc - - test/core/util/mock_endpoint.cc - - test/core/util/parse_hexstring.cc - - test/core/util/passthru_endpoint.cc - - test/core/util/resolve_localhost_ip46.cc - - test/core/util/slice_splitter.cc - - test/core/util/tracer_util.cc - deps: - - gtest - - grpc_test_util -- name: test_core_slice_slice_buffer_test - gtest: true - build: test - language: c++ - headers: [] - src: - - test/core/slice/slice_buffer_test.cc - deps: - - gtest - - grpc_test_util - uses_polling: false -- name: test_core_slice_slice_test - gtest: true - build: test - language: c++ - headers: - - test/core/util/build.h - src: - - test/core/slice/slice_test.cc - - test/core/util/build.cc - deps: - - gtest - - grpc - uses_polling: false - name: test_cpp_client_credentials_test gtest: true build: test diff --git a/gRPC-C++.podspec b/gRPC-C++.podspec index 9f8a96abcc4..314e352e24c 100644 --- a/gRPC-C++.podspec +++ b/gRPC-C++.podspec @@ -360,7 +360,6 @@ Pod::Spec.new do |s| 'src/core/ext/transport/chttp2/transport/context_list_entry.h', 'src/core/ext/transport/chttp2/transport/decode_huff.h', 'src/core/ext/transport/chttp2/transport/flow_control.h', - 'src/core/ext/transport/chttp2/transport/frame.h', 'src/core/ext/transport/chttp2/transport/frame_data.h', 'src/core/ext/transport/chttp2/transport/frame_goaway.h', 'src/core/ext/transport/chttp2/transport/frame_ping.h', @@ -377,6 +376,7 @@ Pod::Spec.new do |s| 'src/core/ext/transport/chttp2/transport/http_trace.h', 'src/core/ext/transport/chttp2/transport/huffsyms.h', 'src/core/ext/transport/chttp2/transport/internal.h', + 'src/core/ext/transport/chttp2/transport/legacy_frame.h', 'src/core/ext/transport/chttp2/transport/ping_abuse_policy.h', 'src/core/ext/transport/chttp2/transport/ping_rate_policy.h', 'src/core/ext/transport/chttp2/transport/varint.h', @@ -1417,7 +1417,6 @@ Pod::Spec.new do |s| 'src/core/ext/transport/chttp2/transport/context_list_entry.h', 'src/core/ext/transport/chttp2/transport/decode_huff.h', 'src/core/ext/transport/chttp2/transport/flow_control.h', - 'src/core/ext/transport/chttp2/transport/frame.h', 'src/core/ext/transport/chttp2/transport/frame_data.h', 'src/core/ext/transport/chttp2/transport/frame_goaway.h', 'src/core/ext/transport/chttp2/transport/frame_ping.h', @@ -1434,6 +1433,7 @@ Pod::Spec.new do |s| 'src/core/ext/transport/chttp2/transport/http_trace.h', 'src/core/ext/transport/chttp2/transport/huffsyms.h', 'src/core/ext/transport/chttp2/transport/internal.h', + 'src/core/ext/transport/chttp2/transport/legacy_frame.h', 'src/core/ext/transport/chttp2/transport/ping_abuse_policy.h', 'src/core/ext/transport/chttp2/transport/ping_rate_policy.h', 'src/core/ext/transport/chttp2/transport/varint.h', diff --git a/gRPC-Core.podspec b/gRPC-Core.podspec index 9c89da37124..ac044d7c796 100644 --- a/gRPC-Core.podspec +++ b/gRPC-Core.podspec @@ -379,7 +379,6 @@ Pod::Spec.new do |s| 'src/core/ext/transport/chttp2/transport/decode_huff.h', 'src/core/ext/transport/chttp2/transport/flow_control.cc', 'src/core/ext/transport/chttp2/transport/flow_control.h', - 'src/core/ext/transport/chttp2/transport/frame.h', 'src/core/ext/transport/chttp2/transport/frame_data.cc', 'src/core/ext/transport/chttp2/transport/frame_data.h', 'src/core/ext/transport/chttp2/transport/frame_goaway.cc', @@ -410,6 +409,7 @@ Pod::Spec.new do |s| 'src/core/ext/transport/chttp2/transport/huffsyms.cc', 'src/core/ext/transport/chttp2/transport/huffsyms.h', 'src/core/ext/transport/chttp2/transport/internal.h', + 'src/core/ext/transport/chttp2/transport/legacy_frame.h', 'src/core/ext/transport/chttp2/transport/parsing.cc', 'src/core/ext/transport/chttp2/transport/ping_abuse_policy.cc', 'src/core/ext/transport/chttp2/transport/ping_abuse_policy.h', @@ -2165,7 +2165,6 @@ Pod::Spec.new do |s| 'src/core/ext/transport/chttp2/transport/context_list_entry.h', 'src/core/ext/transport/chttp2/transport/decode_huff.h', 'src/core/ext/transport/chttp2/transport/flow_control.h', - 'src/core/ext/transport/chttp2/transport/frame.h', 'src/core/ext/transport/chttp2/transport/frame_data.h', 'src/core/ext/transport/chttp2/transport/frame_goaway.h', 'src/core/ext/transport/chttp2/transport/frame_ping.h', @@ -2182,6 +2181,7 @@ Pod::Spec.new do |s| 'src/core/ext/transport/chttp2/transport/http_trace.h', 'src/core/ext/transport/chttp2/transport/huffsyms.h', 'src/core/ext/transport/chttp2/transport/internal.h', + 'src/core/ext/transport/chttp2/transport/legacy_frame.h', 'src/core/ext/transport/chttp2/transport/ping_abuse_policy.h', 'src/core/ext/transport/chttp2/transport/ping_rate_policy.h', 'src/core/ext/transport/chttp2/transport/varint.h', diff --git a/grpc.gemspec b/grpc.gemspec index 3bb5813e47f..a73f29f430b 100644 --- a/grpc.gemspec +++ b/grpc.gemspec @@ -284,7 +284,6 @@ Gem::Specification.new do |s| s.files += %w( src/core/ext/transport/chttp2/transport/decode_huff.h ) s.files += %w( src/core/ext/transport/chttp2/transport/flow_control.cc ) s.files += %w( src/core/ext/transport/chttp2/transport/flow_control.h ) - s.files += %w( src/core/ext/transport/chttp2/transport/frame.h ) s.files += %w( src/core/ext/transport/chttp2/transport/frame_data.cc ) s.files += %w( src/core/ext/transport/chttp2/transport/frame_data.h ) s.files += %w( src/core/ext/transport/chttp2/transport/frame_goaway.cc ) @@ -315,6 +314,7 @@ Gem::Specification.new do |s| s.files += %w( src/core/ext/transport/chttp2/transport/huffsyms.cc ) s.files += %w( src/core/ext/transport/chttp2/transport/huffsyms.h ) s.files += %w( src/core/ext/transport/chttp2/transport/internal.h ) + s.files += %w( src/core/ext/transport/chttp2/transport/legacy_frame.h ) s.files += %w( src/core/ext/transport/chttp2/transport/parsing.cc ) s.files += %w( src/core/ext/transport/chttp2/transport/ping_abuse_policy.cc ) s.files += %w( src/core/ext/transport/chttp2/transport/ping_abuse_policy.h ) diff --git a/package.xml b/package.xml index d84c671607d..c5c319afcd1 100644 --- a/package.xml +++ b/package.xml @@ -266,7 +266,6 @@ - @@ -297,6 +296,7 @@ + diff --git a/src/core/BUILD b/src/core/BUILD index 8f9f3a29f21..a02320a8abb 100644 --- a/src/core/BUILD +++ b/src/core/BUILD @@ -5744,7 +5744,7 @@ grpc_cc_library( "transport_fwd", "unique_type_name", "//:channel_arg_names", - "//:chttp2_frame", + "//:chttp2_legacy_frame", "//:config", "//:debug_location", "//:exec_ctx", diff --git a/src/core/ext/transport/chttp2/server/chttp2_server.cc b/src/core/ext/transport/chttp2/server/chttp2_server.cc index 7ba070e479e..700c81dcb77 100644 --- a/src/core/ext/transport/chttp2/server/chttp2_server.cc +++ b/src/core/ext/transport/chttp2/server/chttp2_server.cc @@ -49,8 +49,8 @@ #include #include "src/core/ext/transport/chttp2/transport/chttp2_transport.h" -#include "src/core/ext/transport/chttp2/transport/frame.h" #include "src/core/ext/transport/chttp2/transport/internal.h" +#include "src/core/ext/transport/chttp2/transport/legacy_frame.h" #include "src/core/lib/address_utils/sockaddr_utils.h" #include "src/core/lib/channel/channel_args.h" #include "src/core/lib/channel/channelz.h" diff --git a/src/core/ext/transport/chttp2/transport/chttp2_transport.cc b/src/core/ext/transport/chttp2/transport/chttp2_transport.cc index c205ba5ab7f..168068d33a1 100644 --- a/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +++ b/src/core/ext/transport/chttp2/transport/chttp2_transport.cc @@ -55,7 +55,6 @@ #include "src/core/ext/transport/chttp2/transport/context_list_entry.h" #include "src/core/ext/transport/chttp2/transport/flow_control.h" -#include "src/core/ext/transport/chttp2/transport/frame.h" #include "src/core/ext/transport/chttp2/transport/frame_data.h" #include "src/core/ext/transport/chttp2/transport/frame_goaway.h" #include "src/core/ext/transport/chttp2/transport/frame_rst_stream.h" @@ -63,6 +62,7 @@ #include "src/core/ext/transport/chttp2/transport/http2_settings.h" #include "src/core/ext/transport/chttp2/transport/http_trace.h" #include "src/core/ext/transport/chttp2/transport/internal.h" +#include "src/core/ext/transport/chttp2/transport/legacy_frame.h" #include "src/core/ext/transport/chttp2/transport/ping_abuse_policy.h" #include "src/core/ext/transport/chttp2/transport/ping_rate_policy.h" #include "src/core/ext/transport/chttp2/transport/varint.h" diff --git a/src/core/ext/transport/chttp2/transport/frame.cc b/src/core/ext/transport/chttp2/transport/frame.cc new file mode 100644 index 00000000000..0a88aff5c9a --- /dev/null +++ b/src/core/ext/transport/chttp2/transport/frame.cc @@ -0,0 +1,500 @@ +// Copyright 2023 gRPC authors. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include + +#include "src/core/ext/transport/chttp2/transport/frame.h" + +#include + +#include +#include + +#include "absl/status/status.h" +#include "absl/strings/str_cat.h" + +#include + +#include "src/core/lib/gprpp/crash.h" + +namespace grpc_core { + +namespace { + +constexpr uint8_t kFrameTypeData = 0; +constexpr uint8_t kFrameTypeHeader = 1; +constexpr uint8_t kFrameTypeContinuation = 9; +constexpr uint8_t kFrameTypeRstStream = 3; +constexpr uint8_t kFrameTypeSettings = 4; +constexpr uint8_t kFrameTypePing = 6; +constexpr uint8_t kFrameTypeGoaway = 7; +constexpr uint8_t kFrameTypeWindowUpdate = 8; + +constexpr uint8_t kFlagEndStream = 1; +constexpr uint8_t kFlagAck = 1; +constexpr uint8_t kFlagEndHeaders = 4; +constexpr uint8_t kFlagPadded = 8; +constexpr uint8_t kFlagPriority = 0x20; + +constexpr size_t kFrameHeaderSize = 9; + +void Write2b(uint16_t x, uint8_t* output) { + output[0] = static_cast(x >> 8); + output[1] = static_cast(x); +} + +uint16_t Read2b(const uint8_t* input) { + return static_cast(input[0]) << 8 | static_cast(input[1]); +} + +void Write3b(uint32_t x, uint8_t* output) { + GPR_ASSERT(x < 16777216); + output[0] = static_cast(x >> 16); + output[1] = static_cast(x >> 8); + output[2] = static_cast(x); +} + +uint32_t Read3b(const uint8_t* input) { + return static_cast(input[0]) << 16 | + static_cast(input[1]) << 8 | static_cast(input[2]); +} + +void Write4b(uint32_t x, uint8_t* output) { + output[0] = static_cast(x >> 24); + output[1] = static_cast(x >> 16); + output[2] = static_cast(x >> 8); + output[3] = static_cast(x); +} + +uint32_t Read4b(const uint8_t* input) { + return static_cast(input[0]) << 24 | + static_cast(input[1]) << 16 | + static_cast(input[2]) << 8 | static_cast(input[3]); +} + +void Write8b(uint64_t x, uint8_t* output) { + output[0] = static_cast(x >> 56); + output[1] = static_cast(x >> 48); + output[2] = static_cast(x >> 40); + output[3] = static_cast(x >> 32); + output[4] = static_cast(x >> 24); + output[5] = static_cast(x >> 16); + output[6] = static_cast(x >> 8); + output[7] = static_cast(x); +} + +uint64_t Read8b(const uint8_t* input) { + return static_cast(input[0]) << 56 | + static_cast(input[1]) << 48 | + static_cast(input[2]) << 40 | + static_cast(input[3]) << 32 | + static_cast(input[4]) << 24 | + static_cast(input[5]) << 16 | + static_cast(input[6]) << 8 | static_cast(input[7]); +} + +uint8_t MaybeFlag(bool condition, uint8_t flag_mask) { + return condition ? flag_mask : 0; +} + +bool ExtractFlag(uint8_t flags, uint8_t flag_mask) { + return (flags & flag_mask) != 0; +} + +class SerializeExtraBytesRequired { + public: + size_t operator()(const Http2DataFrame&) { return 0; } + size_t operator()(const Http2HeaderFrame&) { return 0; } + size_t operator()(const Http2ContinuationFrame&) { return 0; } + size_t operator()(const Http2RstStreamFrame&) { return 4; } + size_t operator()(const Http2SettingsFrame& f) { + return 6 * f.settings.size(); + } + size_t operator()(const Http2PingFrame&) { return 8; } + size_t operator()(const Http2GoawayFrame&) { return 8; } + size_t operator()(const Http2WindowUpdateFrame&) { return 4; } + size_t operator()(const Http2UnknownFrame&) { Crash("unreachable"); } +}; + +class SerializeHeaderAndPayload { + public: + SerializeHeaderAndPayload(size_t extra_bytes, SliceBuffer& out) + : out_(out), + extra_bytes_(MutableSlice::CreateUninitialized(extra_bytes)) {} + + void operator()(Http2DataFrame& frame) { + auto hdr = extra_bytes_.TakeFirst(kFrameHeaderSize); + Http2FrameHeader{ + static_cast(frame.payload.Length()), kFrameTypeData, + MaybeFlag(frame.end_stream, kFlagEndStream), frame.stream_id} + .Serialize(hdr.begin()); + out_.AppendIndexed(Slice(std::move(hdr))); + out_.TakeAndAppend(frame.payload); + } + + void operator()(Http2HeaderFrame& frame) { + auto hdr = extra_bytes_.TakeFirst(kFrameHeaderSize); + Http2FrameHeader{ + static_cast(frame.payload.Length()), kFrameTypeHeader, + static_cast(MaybeFlag(frame.end_headers, kFlagEndHeaders) | + MaybeFlag(frame.end_stream, kFlagEndStream)), + frame.stream_id} + .Serialize(hdr.begin()); + out_.AppendIndexed(Slice(std::move(hdr))); + out_.TakeAndAppend(frame.payload); + } + + void operator()(Http2ContinuationFrame& frame) { + auto hdr = extra_bytes_.TakeFirst(kFrameHeaderSize); + Http2FrameHeader{ + static_cast(frame.payload.Length()), kFrameTypeContinuation, + static_cast(MaybeFlag(frame.end_headers, kFlagEndHeaders)), + frame.stream_id} + .Serialize(hdr.begin()); + out_.AppendIndexed(Slice(std::move(hdr))); + out_.TakeAndAppend(frame.payload); + } + + void operator()(Http2RstStreamFrame& frame) { + auto hdr_and_payload = extra_bytes_.TakeFirst(kFrameHeaderSize + 4); + Http2FrameHeader{4, kFrameTypeRstStream, 0, frame.stream_id}.Serialize( + hdr_and_payload.begin()); + Write4b(frame.error_code, hdr_and_payload.begin() + kFrameHeaderSize); + out_.AppendIndexed(Slice(std::move(hdr_and_payload))); + } + + void operator()(Http2SettingsFrame& frame) { + const size_t payload_size = 6 * frame.settings.size(); + auto hdr_and_payload = + extra_bytes_.TakeFirst(kFrameHeaderSize + payload_size); + Http2FrameHeader{static_cast(payload_size), kFrameTypeSettings, + MaybeFlag(frame.ack, kFlagAck), 0} + .Serialize(hdr_and_payload.begin()); + size_t offset = kFrameHeaderSize; + for (auto& setting : frame.settings) { + Write2b(setting.id, hdr_and_payload.begin() + offset); + Write4b(setting.value, hdr_and_payload.begin() + offset + 2); + offset += 6; + } + out_.AppendIndexed(Slice(std::move(hdr_and_payload))); + } + + void operator()(Http2PingFrame& frame) { + auto hdr_and_payload = extra_bytes_.TakeFirst(kFrameHeaderSize + 8); + Http2FrameHeader{8, kFrameTypePing, MaybeFlag(frame.ack, kFlagAck), 0} + .Serialize(hdr_and_payload.begin()); + Write8b(frame.opaque, hdr_and_payload.begin() + kFrameHeaderSize); + out_.AppendIndexed(Slice(std::move(hdr_and_payload))); + } + + void operator()(Http2GoawayFrame& frame) { + auto hdr_and_fixed_payload = extra_bytes_.TakeFirst(kFrameHeaderSize + 8); + Http2FrameHeader{static_cast(8 + frame.debug_data.length()), + kFrameTypeGoaway, 0, 0} + .Serialize(hdr_and_fixed_payload.begin()); + Write4b(frame.last_stream_id, + hdr_and_fixed_payload.begin() + kFrameHeaderSize); + Write4b(frame.error_code, + hdr_and_fixed_payload.begin() + kFrameHeaderSize + 4); + out_.AppendIndexed(Slice(std::move(hdr_and_fixed_payload))); + out_.AppendIndexed(std::move(frame.debug_data)); + } + + void operator()(Http2WindowUpdateFrame& frame) { + auto hdr_and_payload = extra_bytes_.TakeFirst(kFrameHeaderSize + 4); + Http2FrameHeader{4, kFrameTypeWindowUpdate, 0, frame.stream_id}.Serialize( + hdr_and_payload.begin()); + Write4b(frame.increment, hdr_and_payload.begin() + kFrameHeaderSize); + out_.AppendIndexed(Slice(std::move(hdr_and_payload))); + } + + void operator()(Http2UnknownFrame&) { Crash("unreachable"); } + + private: + SliceBuffer& out_; + MutableSlice extra_bytes_; +}; + +absl::Status StripPadding(SliceBuffer& payload) { + if (payload.Length() < 1) { + return absl::InternalError("padding flag set but no padding byte"); + } + uint8_t padding_bytes; + payload.MoveFirstNBytesIntoBuffer(1, &padding_bytes); + if (payload.Length() < padding_bytes) { + return absl::InternalError("padding flag set but not enough padding bytes"); + } + payload.RemoveLastNBytes(padding_bytes); + return absl::OkStatus(); +} + +absl::StatusOr ParseDataFrame(const Http2FrameHeader& hdr, + SliceBuffer& payload) { + if (hdr.stream_id == 0) { + return absl::InternalError( + absl::StrCat("invalid stream id: ", hdr.ToString())); + } + + if (hdr.flags & kFlagPadded) { + auto s = StripPadding(payload); + if (!s.ok()) return s; + } + + return Http2DataFrame{hdr.stream_id, ExtractFlag(hdr.flags, kFlagEndStream), + std::move(payload)}; +} + +absl::StatusOr ParseHeaderFrame(const Http2FrameHeader& hdr, + SliceBuffer& payload) { + if (hdr.stream_id == 0) { + return absl::InternalError( + absl::StrCat("invalid stream id: ", hdr.ToString())); + } + + if (hdr.flags & kFlagPadded) { + auto s = StripPadding(payload); + if (!s.ok()) return s; + } + + if (hdr.flags & kFlagPriority) { + if (payload.Length() < 5) { + return absl::InternalError( + absl::StrCat("invalid priority payload: ", hdr.ToString())); + } + uint8_t trash[5]; + payload.MoveFirstNBytesIntoBuffer(5, trash); + } + + return Http2HeaderFrame{ + hdr.stream_id, ExtractFlag(hdr.flags, kFlagEndHeaders), + ExtractFlag(hdr.flags, kFlagEndStream), std::move(payload)}; +} + +absl::StatusOr ParseContinuationFrame( + const Http2FrameHeader& hdr, SliceBuffer& payload) { + if (hdr.stream_id == 0) { + return absl::InternalError( + absl::StrCat("invalid stream id: ", hdr.ToString())); + } + + return Http2ContinuationFrame{hdr.stream_id, + ExtractFlag(hdr.flags, kFlagEndHeaders), + std::move(payload)}; +} + +absl::StatusOr ParseRstStreamFrame( + const Http2FrameHeader& hdr, SliceBuffer& payload) { + if (payload.Length() != 4) { + return absl::InternalError( + absl::StrCat("invalid rst stream payload: ", hdr.ToString())); + } + + if (hdr.stream_id == 0) { + return absl::InternalError( + absl::StrCat("invalid stream id: ", hdr.ToString())); + } + + uint8_t buffer[4]; + payload.CopyToBuffer(buffer); + + return Http2RstStreamFrame{hdr.stream_id, Read4b(buffer)}; +} + +absl::StatusOr ParseSettingsFrame( + const Http2FrameHeader& hdr, SliceBuffer& payload) { + if (hdr.stream_id != 0) { + return absl::InternalError( + absl::StrCat("invalid stream id: ", hdr.ToString())); + } + if (hdr.flags == kFlagAck) { + if (payload.Length() != 0) { + return absl::InternalError( + absl::StrCat("invalid settings ack length: ", hdr.ToString())); + } + return Http2SettingsFrame{true, {}}; + } + + if (payload.Length() % 6 != 0) { + return absl::InternalError( + absl::StrCat("invalid settings payload: ", hdr.ToString(), + " -- settings must be multiples of 6 bytes long")); + } + + Http2SettingsFrame frame{false, {}}; + while (payload.Length() != 0) { + uint8_t buffer[6]; + payload.MoveFirstNBytesIntoBuffer(6, buffer); + frame.settings.push_back({ + Read2b(buffer), + Read4b(buffer + 2), + }); + } + return std::move(frame); +} + +absl::StatusOr ParsePingFrame(const Http2FrameHeader& hdr, + SliceBuffer& payload) { + if (payload.Length() != 8) { + return absl::InternalError( + absl::StrCat("invalid ping payload: ", hdr.ToString())); + } + + if (hdr.stream_id != 0) { + return absl::InternalError( + absl::StrCat("invalid ping stream id: ", hdr.ToString())); + } + + bool ack; + switch (hdr.flags) { + case 0: + ack = false; + break; + case kFlagAck: + ack = true; + break; + default: + return absl::InternalError( + absl::StrCat("invalid ping flags: ", hdr.ToString())); + } + + uint8_t buffer[8]; + payload.CopyToBuffer(buffer); + + return Http2PingFrame{ack, Read8b(buffer)}; +} + +absl::StatusOr ParseGoawayFrame(const Http2FrameHeader& hdr, + SliceBuffer& payload) { + if (payload.Length() < 8) { + return absl::InternalError( + absl::StrCat("invalid goaway payload: ", hdr.ToString(), + " -- must be at least 8 bytes")); + } + + if (hdr.stream_id != 0) { + return absl::InternalError( + absl::StrCat("invalid goaway stream id: ", hdr.ToString())); + } + + if (hdr.flags != 0) { + return absl::InternalError( + absl::StrCat("invalid goaway flags: ", hdr.ToString())); + } + + uint8_t buffer[8]; + payload.MoveFirstNBytesIntoBuffer(8, buffer); + return Http2GoawayFrame{Read4b(buffer), Read4b(buffer + 4), + payload.JoinIntoSlice()}; +} + +absl::StatusOr ParseWindowUpdateFrame( + const Http2FrameHeader& hdr, SliceBuffer& payload) { + if (payload.Length() != 4) { + return absl::InternalError( + absl::StrCat("invalid window update payload: ", hdr.ToString(), + " -- must be 4 bytes")); + } + + if (hdr.flags != 0) { + return absl::InternalError( + absl::StrCat("invalid window update flags: ", hdr.ToString())); + } + + uint8_t buffer[4]; + payload.CopyToBuffer(buffer); + return Http2WindowUpdateFrame{hdr.stream_id, Read4b(buffer)}; +} + +} // namespace + +void Http2FrameHeader::Serialize(uint8_t* output) const { + Write3b(length, output); + output[3] = type; + output[4] = flags; + Write4b(stream_id, output + 5); +} + +Http2FrameHeader Http2FrameHeader::Parse(const uint8_t* input) { + return Http2FrameHeader{Read3b(input), input[3], input[4], Read4b(input + 5)}; +} + +namespace { +std::string Http2FrameTypeString(uint8_t frame_type) { + switch (frame_type) { + case kFrameTypeData: + return "DATA"; + case kFrameTypeHeader: + return "HEADER"; + case kFrameTypeContinuation: + return "CONTINUATION"; + case kFrameTypeRstStream: + return "RST_STREAM"; + case kFrameTypeSettings: + return "SETTINGS"; + case kFrameTypeGoaway: + return "GOAWAY"; + case kFrameTypeWindowUpdate: + return "WINDOW_UPDATE"; + case kFrameTypePing: + return "PING"; + } + return absl::StrCat("UNKNOWN(", frame_type, ")"); +} +} // namespace + +std::string Http2FrameHeader::ToString() const { + return absl::StrCat("{", Http2FrameTypeString(type), ": flags=", flags, + ", stream_id=", stream_id, ", length=", length, "}"); +} + +void Serialize(absl::Span frames, SliceBuffer& out) { + size_t buffer_needed = 0; + for (auto& frame : frames) { + // Bytes needed for framing + buffer_needed += kFrameHeaderSize; + // Bytes needed for unserialized payload + buffer_needed += absl::visit(SerializeExtraBytesRequired(), frame); + } + SerializeHeaderAndPayload serialize(buffer_needed, out); + for (auto& frame : frames) { + absl::visit(serialize, frame); + } +} + +absl::StatusOr ParseFramePayload(const Http2FrameHeader& hdr, + SliceBuffer payload) { + GPR_ASSERT(payload.Length() == hdr.length); + switch (hdr.type) { + case kFrameTypeData: + return ParseDataFrame(hdr, payload); + case kFrameTypeHeader: + return ParseHeaderFrame(hdr, payload); + case kFrameTypeContinuation: + return ParseContinuationFrame(hdr, payload); + case kFrameTypeRstStream: + return ParseRstStreamFrame(hdr, payload); + case kFrameTypeSettings: + return ParseSettingsFrame(hdr, payload); + case kFrameTypePing: + return ParsePingFrame(hdr, payload); + case kFrameTypeGoaway: + return ParseGoawayFrame(hdr, payload); + case kFrameTypeWindowUpdate: + return ParseWindowUpdateFrame(hdr, payload); + default: + return Http2UnknownFrame{}; + } +} + +} // namespace grpc_core diff --git a/src/core/ext/transport/chttp2/transport/frame.h b/src/core/ext/transport/chttp2/transport/frame.h index 98776f5d217..fd6abe81df2 100644 --- a/src/core/ext/transport/chttp2/transport/frame.h +++ b/src/core/ext/transport/chttp2/transport/frame.h @@ -1,5 +1,3 @@ -// -// // Copyright 2015 gRPC authors. // // Licensed under the Apache License, Version 2.0 (the "License"); @@ -13,31 +11,202 @@ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. -// -// #ifndef GRPC_SRC_CORE_EXT_TRANSPORT_CHTTP2_TRANSPORT_FRAME_H #define GRPC_SRC_CORE_EXT_TRANSPORT_CHTTP2_TRANSPORT_FRAME_H #include -// defined in internal.h -typedef struct grpc_chttp2_stream grpc_chttp2_stream; -typedef struct grpc_chttp2_transport grpc_chttp2_transport; - -#define GRPC_CHTTP2_FRAME_DATA 0 -#define GRPC_CHTTP2_FRAME_HEADER 1 -#define GRPC_CHTTP2_FRAME_CONTINUATION 9 -#define GRPC_CHTTP2_FRAME_RST_STREAM 3 -#define GRPC_CHTTP2_FRAME_SETTINGS 4 -#define GRPC_CHTTP2_FRAME_PING 6 -#define GRPC_CHTTP2_FRAME_GOAWAY 7 -#define GRPC_CHTTP2_FRAME_WINDOW_UPDATE 8 - -#define GRPC_CHTTP2_DATA_FLAG_END_STREAM 1 -#define GRPC_CHTTP2_FLAG_ACK 1 -#define GRPC_CHTTP2_DATA_FLAG_END_HEADERS 4 -#define GRPC_CHTTP2_DATA_FLAG_PADDED 8 -#define GRPC_CHTTP2_FLAG_HAS_PRIORITY 0x20 +#include +#include +#include + +#include "absl/status/statusor.h" +#include "absl/strings/string_view.h" +#include "absl/types/span.h" +#include "absl/types/variant.h" + +#include "src/core/lib/slice/slice.h" +#include "src/core/lib/slice/slice_buffer.h" + +namespace grpc_core { + +/////////////////////////////////////////////////////////////////////////////// +// Frame types +// +// Define structs for each kind of frame that chttp2 reasons about. +// +// Each struct gets the members defined by the HTTP/2 spec for that frame type +// *that the semantic layers of chttp2 neead to reason about*. +// +// That means, for instance, that we drop padding and prioritization data from +// these structs, as they are handled by the HTTP/2 framing layer and are +// meaningless to the semantic layers above. +// +// If a frame type is associated with a stream, it has a stream_id member. +// If that frame type is only used at the channel layer it does not. +// +// Instead of carrying bitfields of flags like the wire format, we instead +// declare a bool per flag to make producing/consuming code easier to write. +// +// Equality operators are defined for use in unit tests. + +// DATA frame +struct Http2DataFrame { + uint32_t stream_id = 0; + bool end_stream = false; + SliceBuffer payload; + + bool operator==(const Http2DataFrame& other) const { + return stream_id == other.stream_id && end_stream == other.end_stream && + payload.JoinIntoString() == other.payload.JoinIntoString(); + } +}; + +// HEADER frame +struct Http2HeaderFrame { + uint32_t stream_id = 0; + bool end_headers = false; + bool end_stream = false; + SliceBuffer payload; + + bool operator==(const Http2HeaderFrame& other) const { + return stream_id == other.stream_id && end_headers == other.end_headers && + end_stream == other.end_stream && + payload.JoinIntoString() == other.payload.JoinIntoString(); + } +}; + +// CONTINUATION frame +struct Http2ContinuationFrame { + uint32_t stream_id = 0; + bool end_headers = false; + SliceBuffer payload; + + bool operator==(const Http2ContinuationFrame& other) const { + return stream_id == other.stream_id && end_headers == other.end_headers && + payload.JoinIntoString() == other.payload.JoinIntoString(); + } +}; + +// RST_STREAM frame +struct Http2RstStreamFrame { + uint32_t stream_id = 0; + uint32_t error_code = 0; + + bool operator==(const Http2RstStreamFrame& other) const { + return stream_id == other.stream_id && error_code == other.error_code; + } +}; + +// SETTINGS frame +struct Http2SettingsFrame { + struct Setting { + uint16_t id; + uint32_t value; + + bool operator==(const Setting& other) const { + return id == other.id && value == other.value; + } + }; + bool ack = false; + std::vector settings; + + bool operator==(const Http2SettingsFrame& other) const { + return ack == other.ack && settings == other.settings; + } +}; + +// PING frame +struct Http2PingFrame { + bool ack = false; + uint64_t opaque = 0; + + bool operator==(const Http2PingFrame& other) const { + return ack == other.ack && opaque == other.opaque; + } +}; + +// GOAWAY frame +struct Http2GoawayFrame { + uint32_t last_stream_id = 0; + uint32_t error_code = 0; + Slice debug_data; + + bool operator==(const Http2GoawayFrame& other) const { + return last_stream_id == other.last_stream_id && + error_code == other.error_code && + debug_data.as_string_view() == other.debug_data.as_string_view(); + } +}; + +// WINDOW_UPDATE frame +struct Http2WindowUpdateFrame { + uint32_t stream_id; + uint32_t increment; + + bool operator==(const Http2WindowUpdateFrame& other) const { + return stream_id == other.stream_id && increment == other.increment; + } +}; + +// Type of frame was unknown (and should be ignored) +struct Http2UnknownFrame { + bool operator==(const Http2UnknownFrame&) const { return true; } +}; + +/////////////////////////////////////////////////////////////////////////////// +// Frame variant +// +// A union of all the frame types above, so that we may pass around an +// arbitrary frame between layers as appropriate. +using Http2Frame = + absl::variant; + +/////////////////////////////////////////////////////////////////////////////// +// Frame header +// +// Define a struct for the frame header. +// Parsing this type is the first step in parsing a frame. +// No validation on the header is done during parsing - the fields should be +// instead interpreted by the frame type parser. +struct Http2FrameHeader { + uint32_t length; + uint8_t type; + uint8_t flags; + uint32_t stream_id; + // Serialize header to 9 byte long buffer output + // Crashes if length > 16777215 (as this is unencodable) + void Serialize(uint8_t* output) const; + // Parse header from 9 byte long buffer input + static Http2FrameHeader Parse(const uint8_t* input); + std::string ToString() const; + + bool operator==(const Http2FrameHeader& other) const { + return length == other.length && type == other.type && + flags == other.flags && stream_id == other.stream_id; + } +}; + +/////////////////////////////////////////////////////////////////////////////// +// Parsing & serialization + +// Given a frame header and a payload, parse the payload into a frame and +// return it. +// If this function returns an error, that should be considered a connection +// error. +// If a frame should simply be ignored, this function returns a +// Http2UnknownFrame. +// It is expected that hdr.length == payload.Length(). +absl::StatusOr ParseFramePayload(const Http2FrameHeader& hdr, + SliceBuffer payload); + +// Serialize frame and append to out, leaves frames in an unknown state (may +// move things out of frames) +void Serialize(absl::Span frames, SliceBuffer& out); + +} // namespace grpc_core #endif // GRPC_SRC_CORE_EXT_TRANSPORT_CHTTP2_TRANSPORT_FRAME_H diff --git a/src/core/ext/transport/chttp2/transport/frame_data.h b/src/core/ext/transport/chttp2/transport/frame_data.h index 0d9e65da892..a3327d38343 100644 --- a/src/core/ext/transport/chttp2/transport/frame_data.h +++ b/src/core/ext/transport/chttp2/transport/frame_data.h @@ -29,7 +29,7 @@ #include -#include "src/core/ext/transport/chttp2/transport/frame.h" +#include "src/core/ext/transport/chttp2/transport/legacy_frame.h" #include "src/core/lib/iomgr/error.h" #include "src/core/lib/promise/poll.h" #include "src/core/lib/slice/slice_buffer.h" diff --git a/src/core/ext/transport/chttp2/transport/frame_goaway.h b/src/core/ext/transport/chttp2/transport/frame_goaway.h index 77258679c73..e4384049df1 100644 --- a/src/core/ext/transport/chttp2/transport/frame_goaway.h +++ b/src/core/ext/transport/chttp2/transport/frame_goaway.h @@ -25,7 +25,7 @@ #include -#include "src/core/ext/transport/chttp2/transport/frame.h" +#include "src/core/ext/transport/chttp2/transport/legacy_frame.h" #include "src/core/lib/iomgr/error.h" typedef enum { diff --git a/src/core/ext/transport/chttp2/transport/frame_ping.h b/src/core/ext/transport/chttp2/transport/frame_ping.h index 6da1a3ad970..82c477de2e8 100644 --- a/src/core/ext/transport/chttp2/transport/frame_ping.h +++ b/src/core/ext/transport/chttp2/transport/frame_ping.h @@ -25,7 +25,7 @@ #include -#include "src/core/ext/transport/chttp2/transport/frame.h" +#include "src/core/ext/transport/chttp2/transport/legacy_frame.h" #include "src/core/lib/iomgr/error.h" struct grpc_chttp2_ping_parser { diff --git a/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc b/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc index 709fb960ebd..498eb4e8ae7 100644 --- a/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +++ b/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc @@ -31,9 +31,9 @@ #include #include -#include "src/core/ext/transport/chttp2/transport/frame.h" #include "src/core/ext/transport/chttp2/transport/http_trace.h" #include "src/core/ext/transport/chttp2/transport/internal.h" +#include "src/core/ext/transport/chttp2/transport/legacy_frame.h" #include "src/core/lib/debug/trace.h" #include "src/core/lib/gprpp/status_helper.h" #include "src/core/lib/transport/http2_errors.h" diff --git a/src/core/ext/transport/chttp2/transport/frame_rst_stream.h b/src/core/ext/transport/chttp2/transport/frame_rst_stream.h index 689fe87400a..6c7f3b95d30 100644 --- a/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +++ b/src/core/ext/transport/chttp2/transport/frame_rst_stream.h @@ -25,7 +25,7 @@ #include -#include "src/core/ext/transport/chttp2/transport/frame.h" +#include "src/core/ext/transport/chttp2/transport/legacy_frame.h" #include "src/core/lib/iomgr/error.h" #include "src/core/lib/transport/transport.h" diff --git a/src/core/ext/transport/chttp2/transport/frame_settings.cc b/src/core/ext/transport/chttp2/transport/frame_settings.cc index b99ea66867b..04d7177da02 100644 --- a/src/core/ext/transport/chttp2/transport/frame_settings.cc +++ b/src/core/ext/transport/chttp2/transport/frame_settings.cc @@ -34,10 +34,10 @@ #include #include "src/core/ext/transport/chttp2/transport/flow_control.h" -#include "src/core/ext/transport/chttp2/transport/frame.h" #include "src/core/ext/transport/chttp2/transport/frame_goaway.h" #include "src/core/ext/transport/chttp2/transport/http_trace.h" #include "src/core/ext/transport/chttp2/transport/internal.h" +#include "src/core/ext/transport/chttp2/transport/legacy_frame.h" #include "src/core/lib/debug/trace.h" #include "src/core/lib/gpr/useful.h" #include "src/core/lib/gprpp/debug_location.h" diff --git a/src/core/ext/transport/chttp2/transport/frame_settings.h b/src/core/ext/transport/chttp2/transport/frame_settings.h index 3bfe21ce9ab..24a97c905df 100644 --- a/src/core/ext/transport/chttp2/transport/frame_settings.h +++ b/src/core/ext/transport/chttp2/transport/frame_settings.h @@ -26,8 +26,8 @@ #include -#include "src/core/ext/transport/chttp2/transport/frame.h" #include "src/core/ext/transport/chttp2/transport/http2_settings.h" +#include "src/core/ext/transport/chttp2/transport/legacy_frame.h" #include "src/core/lib/iomgr/error.h" typedef enum { diff --git a/src/core/ext/transport/chttp2/transport/frame_window_update.h b/src/core/ext/transport/chttp2/transport/frame_window_update.h index 31c6f17e947..66f1843befa 100644 --- a/src/core/ext/transport/chttp2/transport/frame_window_update.h +++ b/src/core/ext/transport/chttp2/transport/frame_window_update.h @@ -25,7 +25,7 @@ #include -#include "src/core/ext/transport/chttp2/transport/frame.h" +#include "src/core/ext/transport/chttp2/transport/legacy_frame.h" #include "src/core/lib/iomgr/error.h" #include "src/core/lib/transport/transport.h" diff --git a/src/core/ext/transport/chttp2/transport/hpack_encoder.cc b/src/core/ext/transport/chttp2/transport/hpack_encoder.cc index dc99bdc2bfe..6c642815539 100644 --- a/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +++ b/src/core/ext/transport/chttp2/transport/hpack_encoder.cc @@ -28,10 +28,10 @@ #include #include "src/core/ext/transport/chttp2/transport/bin_encoder.h" -#include "src/core/ext/transport/chttp2/transport/frame.h" #include "src/core/ext/transport/chttp2/transport/hpack_constants.h" #include "src/core/ext/transport/chttp2/transport/hpack_encoder_table.h" #include "src/core/ext/transport/chttp2/transport/http_trace.h" +#include "src/core/ext/transport/chttp2/transport/legacy_frame.h" #include "src/core/ext/transport/chttp2/transport/varint.h" #include "src/core/lib/debug/trace.h" #include "src/core/lib/gprpp/crash.h" diff --git a/src/core/ext/transport/chttp2/transport/hpack_parser.h b/src/core/ext/transport/chttp2/transport/hpack_parser.h index fd1747f3452..631f9d5a62d 100644 --- a/src/core/ext/transport/chttp2/transport/hpack_parser.h +++ b/src/core/ext/transport/chttp2/transport/hpack_parser.h @@ -36,9 +36,9 @@ #include -#include "src/core/ext/transport/chttp2/transport/frame.h" #include "src/core/ext/transport/chttp2/transport/hpack_parse_result.h" #include "src/core/ext/transport/chttp2/transport/hpack_parser_table.h" +#include "src/core/ext/transport/chttp2/transport/legacy_frame.h" #include "src/core/lib/backoff/random_early_detection.h" #include "src/core/lib/channel/call_tracer.h" #include "src/core/lib/iomgr/error.h" diff --git a/src/core/ext/transport/chttp2/transport/internal.h b/src/core/ext/transport/chttp2/transport/internal.h index 760051697e2..4d72342dc50 100644 --- a/src/core/ext/transport/chttp2/transport/internal.h +++ b/src/core/ext/transport/chttp2/transport/internal.h @@ -39,7 +39,6 @@ #include "src/core/ext/transport/chttp2/transport/context_list_entry.h" #include "src/core/ext/transport/chttp2/transport/flow_control.h" -#include "src/core/ext/transport/chttp2/transport/frame.h" #include "src/core/ext/transport/chttp2/transport/frame_goaway.h" #include "src/core/ext/transport/chttp2/transport/frame_ping.h" #include "src/core/ext/transport/chttp2/transport/frame_rst_stream.h" @@ -48,6 +47,7 @@ #include "src/core/ext/transport/chttp2/transport/hpack_encoder.h" #include "src/core/ext/transport/chttp2/transport/hpack_parser.h" #include "src/core/ext/transport/chttp2/transport/http2_settings.h" +#include "src/core/ext/transport/chttp2/transport/legacy_frame.h" #include "src/core/ext/transport/chttp2/transport/ping_abuse_policy.h" #include "src/core/ext/transport/chttp2/transport/ping_rate_policy.h" #include "src/core/lib/channel/channel_args.h" diff --git a/src/core/ext/transport/chttp2/transport/legacy_frame.h b/src/core/ext/transport/chttp2/transport/legacy_frame.h new file mode 100644 index 00000000000..f0a6e639d74 --- /dev/null +++ b/src/core/ext/transport/chttp2/transport/legacy_frame.h @@ -0,0 +1,43 @@ +// +// +// Copyright 2015 gRPC authors. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// + +#ifndef GRPC_SRC_CORE_EXT_TRANSPORT_CHTTP2_TRANSPORT_LEGACY_FRAME_H +#define GRPC_SRC_CORE_EXT_TRANSPORT_CHTTP2_TRANSPORT_LEGACY_FRAME_H + +#include + +// defined in internal.h +typedef struct grpc_chttp2_stream grpc_chttp2_stream; +typedef struct grpc_chttp2_transport grpc_chttp2_transport; + +#define GRPC_CHTTP2_FRAME_DATA 0 +#define GRPC_CHTTP2_FRAME_HEADER 1 +#define GRPC_CHTTP2_FRAME_CONTINUATION 9 +#define GRPC_CHTTP2_FRAME_RST_STREAM 3 +#define GRPC_CHTTP2_FRAME_SETTINGS 4 +#define GRPC_CHTTP2_FRAME_PING 6 +#define GRPC_CHTTP2_FRAME_GOAWAY 7 +#define GRPC_CHTTP2_FRAME_WINDOW_UPDATE 8 + +#define GRPC_CHTTP2_DATA_FLAG_END_STREAM 1 +#define GRPC_CHTTP2_FLAG_ACK 1 +#define GRPC_CHTTP2_DATA_FLAG_END_HEADERS 4 +#define GRPC_CHTTP2_DATA_FLAG_PADDED 8 +#define GRPC_CHTTP2_FLAG_HAS_PRIORITY 0x20 + +#endif // GRPC_SRC_CORE_EXT_TRANSPORT_CHTTP2_TRANSPORT_LEGACY_FRAME_H diff --git a/src/core/ext/transport/chttp2/transport/parsing.cc b/src/core/ext/transport/chttp2/transport/parsing.cc index b5ac5091023..6df3353987d 100644 --- a/src/core/ext/transport/chttp2/transport/parsing.cc +++ b/src/core/ext/transport/chttp2/transport/parsing.cc @@ -35,7 +35,6 @@ #include #include "src/core/ext/transport/chttp2/transport/flow_control.h" -#include "src/core/ext/transport/chttp2/transport/frame.h" #include "src/core/ext/transport/chttp2/transport/frame_data.h" #include "src/core/ext/transport/chttp2/transport/frame_goaway.h" #include "src/core/ext/transport/chttp2/transport/frame_ping.h" @@ -47,6 +46,7 @@ #include "src/core/ext/transport/chttp2/transport/http2_settings.h" #include "src/core/ext/transport/chttp2/transport/http_trace.h" #include "src/core/ext/transport/chttp2/transport/internal.h" +#include "src/core/ext/transport/chttp2/transport/legacy_frame.h" #include "src/core/ext/transport/chttp2/transport/ping_rate_policy.h" #include "src/core/lib/channel/call_tracer.h" #include "src/core/lib/channel/channelz.h" diff --git a/src/core/ext/transport/chttp2/transport/stream_lists.cc b/src/core/ext/transport/chttp2/transport/stream_lists.cc index 4bf4cfdfe60..36c09e773b5 100644 --- a/src/core/ext/transport/chttp2/transport/stream_lists.cc +++ b/src/core/ext/transport/chttp2/transport/stream_lists.cc @@ -20,8 +20,8 @@ #include -#include "src/core/ext/transport/chttp2/transport/frame.h" #include "src/core/ext/transport/chttp2/transport/internal.h" +#include "src/core/ext/transport/chttp2/transport/legacy_frame.h" #include "src/core/lib/debug/trace.h" #include "src/core/lib/gprpp/bitset.h" diff --git a/src/core/ext/transport/chttp2/transport/writing.cc b/src/core/ext/transport/chttp2/transport/writing.cc index 89aec5539d9..158b3e9ad29 100644 --- a/src/core/ext/transport/chttp2/transport/writing.cc +++ b/src/core/ext/transport/chttp2/transport/writing.cc @@ -39,7 +39,6 @@ #include "src/core/ext/transport/chttp2/transport/chttp2_transport.h" #include "src/core/ext/transport/chttp2/transport/context_list_entry.h" #include "src/core/ext/transport/chttp2/transport/flow_control.h" -#include "src/core/ext/transport/chttp2/transport/frame.h" #include "src/core/ext/transport/chttp2/transport/frame_data.h" #include "src/core/ext/transport/chttp2/transport/frame_ping.h" #include "src/core/ext/transport/chttp2/transport/frame_rst_stream.h" @@ -49,6 +48,7 @@ #include "src/core/ext/transport/chttp2/transport/http2_settings.h" #include "src/core/ext/transport/chttp2/transport/http_trace.h" #include "src/core/ext/transport/chttp2/transport/internal.h" +#include "src/core/ext/transport/chttp2/transport/legacy_frame.h" #include "src/core/ext/transport/chttp2/transport/ping_rate_policy.h" #include "src/core/lib/channel/channelz.h" #include "src/core/lib/debug/stats.h" diff --git a/src/core/lib/slice/slice.h b/src/core/lib/slice/slice.h index e246d4a3736..aa33bf220e3 100644 --- a/src/core/lib/slice/slice.h +++ b/src/core/lib/slice/slice.h @@ -291,6 +291,12 @@ class GPR_MSVC_EMPTY_BASE_CLASS_WORKAROUND MutableSlice return MutableSlice(grpc_slice_sub_no_ref(TakeCSlice(), pos, pos + n)); } + // Split this slice in two, returning the first n bytes and leaving the + // remainder. + MutableSlice TakeFirst(size_t n) { + return MutableSlice(grpc_slice_split_head(c_slice_ptr(), n)); + } + // Iterator access to the underlying bytes uint8_t* begin() { return mutable_data(); } uint8_t* end() { return mutable_data() + size(); } diff --git a/src/core/lib/slice/slice_buffer.cc b/src/core/lib/slice/slice_buffer.cc index 85d556efc71..ec93b81f223 100644 --- a/src/core/lib/slice/slice_buffer.cc +++ b/src/core/lib/slice/slice_buffer.cc @@ -70,6 +70,21 @@ std::string SliceBuffer::JoinIntoString() const { return result; } +Slice SliceBuffer::JoinIntoSlice() const { + if (slice_buffer_.count == 0) return Slice(); + if (slice_buffer_.count == 1) return RefSlice(0); + grpc_slice slice = GRPC_SLICE_MALLOC(slice_buffer_.length); + size_t ofs = 0; + for (size_t i = 0; i < slice_buffer_.count; i++) { + memcpy(GRPC_SLICE_START_PTR(slice) + ofs, + GRPC_SLICE_START_PTR(slice_buffer_.slices[i]), + GRPC_SLICE_LENGTH(slice_buffer_.slices[i])); + ofs += GRPC_SLICE_LENGTH(slice_buffer_.slices[i]); + } + GPR_ASSERT(ofs == slice_buffer_.length); + return Slice(slice); +} + } // namespace grpc_core // grow a buffer; requires GRPC_SLICE_BUFFER_INLINE_ELEMENTS > 1 diff --git a/src/core/lib/slice/slice_buffer.h b/src/core/lib/slice/slice_buffer.h index a4b1f6b9723..2626bd4a0e9 100644 --- a/src/core/lib/slice/slice_buffer.h +++ b/src/core/lib/slice/slice_buffer.h @@ -28,6 +28,10 @@ #include "src/core/lib/slice/slice.h" +// Copy the first n bytes of src into memory pointed to by dst. +void grpc_slice_buffer_copy_first_into_buffer(grpc_slice_buffer* src, size_t n, + void* dst); + namespace grpc_core { /// A slice buffer holds the memory for a collection of slices. @@ -67,6 +71,9 @@ class SliceBuffer { /// Appends a SliceBuffer into the SliceBuffer and makes an attempt to merge /// this slice with the last slice in the SliceBuffer. void Append(const SliceBuffer& other); + void TakeAndAppend(SliceBuffer& other) { + grpc_slice_buffer_move_into(&other.slice_buffer_, &slice_buffer_); + } /// Adds a new slice into the SliceBuffer at the next available index. /// Returns the index at which the new slice is added. @@ -75,6 +82,12 @@ class SliceBuffer { /// Returns the number of slices held by the SliceBuffer. size_t Count() const { return slice_buffer_.count; } + /// Copy the entire contents to a memory buffer. + void CopyToBuffer(uint8_t* dst) { + grpc_slice_buffer_copy_first_into_buffer(&slice_buffer_, + slice_buffer_.length, dst); + } + /// Removes/deletes the last n bytes in the SliceBuffer. void RemoveLastNBytes(size_t n) { grpc_slice_buffer_trim_end(&slice_buffer_, n, nullptr); @@ -125,6 +138,9 @@ class SliceBuffer { /// Concatenate all slices and return the resulting string. std::string JoinIntoString() const; + /// Concatenate all slices and return the resulting slice. + Slice JoinIntoSlice() const; + // Return a copy of the slice buffer SliceBuffer Copy() const { SliceBuffer copy; @@ -161,8 +177,4 @@ class SliceBuffer { } // namespace grpc_core -// Copy the first n bytes of src into memory pointed to by dst. -void grpc_slice_buffer_copy_first_into_buffer(grpc_slice_buffer* src, size_t n, - void* dst); - #endif // GRPC_SRC_CORE_LIB_SLICE_SLICE_BUFFER_H diff --git a/test/core/transport/chttp2/BUILD b/test/core/transport/chttp2/BUILD index fff43730be9..3d8c7bfb947 100644 --- a/test/core/transport/chttp2/BUILD +++ b/test/core/transport/chttp2/BUILD @@ -145,6 +145,19 @@ grpc_cc_test( ], ) +grpc_cc_test( + name = "frame_test", + srcs = ["frame_test.cc"], + external_deps = ["gtest"], + language = "C++", + uses_event_engine = False, + uses_polling = False, + deps = [ + "//:chttp2_frame", + "//src/core:http2_errors", + ], +) + grpc_cc_test( name = "bin_encoder_test", srcs = ["bin_encoder_test.cc"], diff --git a/test/core/transport/chttp2/frame_test.cc b/test/core/transport/chttp2/frame_test.cc new file mode 100644 index 00000000000..b09afecdef3 --- /dev/null +++ b/test/core/transport/chttp2/frame_test.cc @@ -0,0 +1,393 @@ +// Copyright 2023 gRPC authors. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include "src/core/ext/transport/chttp2/transport/frame.h" + +#include +#include +#include + +#include "absl/status/status.h" +#include "gmock/gmock.h" +#include "gtest/gtest.h" + +#include "src/core/lib/transport/http2_errors.h" + +namespace grpc_core { +namespace { + +MATCHER_P2(StatusIs, code, message, "") { + return arg.code() == code && arg.message() == message; +} + +void DoTheseThings(std::initializer_list) {} + +template +std::vector Serialize(Frames... f) { + std::vector frames; + DoTheseThings({(frames.emplace_back(std::move(f)), 1)...}); + SliceBuffer temp; + Serialize(absl::Span(frames), temp); + auto slice = temp.JoinIntoSlice(); + return std::vector(slice.begin(), slice.end()); +} + +template +std::vector ByteVec(I... i) { + return std::vector{static_cast(i)...}; +} + +SliceBuffer SliceBufferFromString(absl::string_view s) { + SliceBuffer temp; + temp.Append(Slice::FromCopiedString(s)); + return temp; +} + +std::vector Serialize(const Http2FrameHeader& header) { + uint8_t temp[9]; + header.Serialize(temp); + return std::vector(temp, temp + 9); +} + +Http2FrameHeader ParseHeader(uint8_t b0, uint8_t b1, uint8_t b2, uint8_t b3, + uint8_t b4, uint8_t b5, uint8_t b6, uint8_t b7, + uint8_t b8) { + uint8_t temp[9] = {b0, b1, b2, b3, b4, b5, b6, b7, b8}; + return Http2FrameHeader::Parse(temp); +} + +template +Http2Frame ParseFrame(I... i) { + SliceBuffer buffer; + buffer.Append(Slice::FromCopiedBuffer(ByteVec(i...))); + uint8_t hdr[9]; + buffer.MoveFirstNBytesIntoBuffer(9, hdr); + auto frame_hdr = Http2FrameHeader::Parse(hdr); + EXPECT_EQ(frame_hdr.length, buffer.Length()) + << "frame_hdr=" << frame_hdr.ToString(); + auto r = ParseFramePayload(frame_hdr, std::move(buffer)); + EXPECT_TRUE(r.ok()) << r.status(); + return std::move(r.value()); +} + +template +absl::Status ValidateFrame(I... i) { + SliceBuffer buffer; + buffer.Append(Slice::FromCopiedBuffer(ByteVec(i...))); + uint8_t hdr[9]; + buffer.MoveFirstNBytesIntoBuffer(9, hdr); + auto frame_hdr = Http2FrameHeader::Parse(hdr); + EXPECT_EQ(frame_hdr.length, buffer.Length()) + << "frame_hdr=" << frame_hdr.ToString(); + return ParseFramePayload(frame_hdr, std::move(buffer)).status(); +} + +TEST(Header, Serialization) { + EXPECT_EQ(Serialize(Http2FrameHeader{0, 0, 0, 0}), + ByteVec(0, 0, 0, 0, 0, 0, 0, 0, 0)); + EXPECT_EQ(Serialize(Http2FrameHeader{0x123456, 0x9a, 0xbc, 0x12345678}), + ByteVec(0x12, 0x34, 0x56, 0x9a, 0xbc, 0x12, 0x34, 0x56, 0x78)); +} + +TEST(Header, Parse) { + EXPECT_EQ(ParseHeader(0, 0, 0, 0, 0, 0, 0, 0, 0), + (Http2FrameHeader{0, 0, 0, 0})); + EXPECT_EQ(ParseHeader(0x12, 0x34, 0x56, 0x9a, 0xbc, 0x12, 0x34, 0x56, 0x78), + (Http2FrameHeader{0x123456, 0x9a, 0xbc, 0x12345678})); +} + +TEST(Header, ToString) { + EXPECT_EQ((Http2FrameHeader{0, 0, 0, 0}).ToString(), + "{DATA: flags=0, stream_id=0, length=0}"); + EXPECT_EQ((Http2FrameHeader{0x123456, 0x9a, 0xbc, 0x12345678}).ToString(), + "{UNKNOWN(154): flags=188, stream_id=305419896, length=1193046}"); +} + +TEST(Frame, Serialization) { + EXPECT_EQ(Serialize(Http2DataFrame{1, false, SliceBufferFromString("hello")}), + ByteVec(0, 0, 5, 0, 0, 0, 0, 0, 1, 'h', 'e', 'l', 'l', 'o')); + EXPECT_EQ(Serialize(Http2DataFrame{0x98381822, true, + SliceBufferFromString("kids")}), + ByteVec(0, 0, 4, 0, 1, 0x98, 0x38, 0x18, 0x22, 'k', 'i', 'd', 's')); + EXPECT_EQ(Serialize(Http2HeaderFrame{1, false, false, + SliceBufferFromString("hello")}), + ByteVec(0, 0, 5, 1, 0, 0, 0, 0, 1, 'h', 'e', 'l', 'l', 'o')); + EXPECT_EQ(Serialize(Http2HeaderFrame{1, true, false, + SliceBufferFromString("hello")}), + ByteVec(0, 0, 5, 1, 4, 0, 0, 0, 1, 'h', 'e', 'l', 'l', 'o')); + EXPECT_EQ(Serialize(Http2HeaderFrame{1, false, true, + SliceBufferFromString("hello")}), + ByteVec(0, 0, 5, 1, 1, 0, 0, 0, 1, 'h', 'e', 'l', 'l', 'o')); + EXPECT_EQ(Serialize(Http2HeaderFrame{1, true, true, + SliceBufferFromString("hello")}), + ByteVec(0, 0, 5, 1, 5, 0, 0, 0, 1, 'h', 'e', 'l', 'l', 'o')); + EXPECT_EQ(Serialize(Http2ContinuationFrame{1, false, + SliceBufferFromString("hello")}), + ByteVec(0, 0, 5, 9, 0, 0, 0, 0, 1, 'h', 'e', 'l', 'l', 'o')); + EXPECT_EQ(Serialize(Http2ContinuationFrame{1, true, + SliceBufferFromString("hello")}), + ByteVec(0, 0, 5, 9, 4, 0, 0, 0, 1, 'h', 'e', 'l', 'l', 'o')); + EXPECT_EQ(Serialize(Http2RstStreamFrame{1, GRPC_HTTP2_CONNECT_ERROR}), + ByteVec(0, 0, 4, 3, 0, 0, 0, 0, 1, 0, 0, 0, 0x0a)); + EXPECT_EQ(Serialize(Http2SettingsFrame{}), + ByteVec(0, 0, 0, 4, 0, 0, 0, 0, 0)); + EXPECT_EQ( + Serialize(Http2SettingsFrame{false, {{0x1234, 0x9abcdef0}}}), + ByteVec(0, 0, 6, 4, 0, 0, 0, 0, 0, 0x12, 0x34, 0x9a, 0xbc, 0xde, 0xf0)); + EXPECT_EQ(Serialize(Http2SettingsFrame{ + false, {{0x1234, 0x9abcdef0}, {0x4321, 0x12345678}}}), + ByteVec(0, 0, 12, 4, 0, 0, 0, 0, 0, 0x12, 0x34, 0x9a, 0xbc, 0xde, + 0xf0, 0x43, 0x21, 0x12, 0x34, 0x56, 0x78)); + EXPECT_EQ(Serialize(Http2SettingsFrame{true, {}}), + ByteVec(0, 0, 0, 4, 1, 0, 0, 0, 0)); + EXPECT_EQ(Serialize(Http2PingFrame{false, 0x123456789abcdef0}), + ByteVec(0, 0, 8, 6, 0, 0, 0, 0, 0, 0x12, 0x34, 0x56, 0x78, 0x9a, + 0xbc, 0xde, 0xf0)); + EXPECT_EQ(Serialize(Http2PingFrame{true, 0x123456789abcdef0}), + ByteVec(0, 0, 8, 6, 1, 0, 0, 0, 0, 0x12, 0x34, 0x56, 0x78, 0x9a, + 0xbc, 0xde, 0xf0)); + EXPECT_EQ(Serialize(Http2GoawayFrame{0x12345678, GRPC_HTTP2_ENHANCE_YOUR_CALM, + Slice::FromCopiedString("hello")}), + ByteVec(0, 0, 13, 7, 0, 0, 0, 0, 0, 0x12, 0x34, 0x56, 0x78, 0, 0, 0, + 0x0b, 'h', 'e', 'l', 'l', 'o')); + EXPECT_EQ(Serialize(Http2WindowUpdateFrame{1, 0x12345678}), + ByteVec(0, 0, 4, 8, 0, 0, 0, 0, 1, 0x12, 0x34, 0x56, 0x78)); +} + +TEST(Frame, Parse) { + EXPECT_EQ( + ParseFrame(0, 0, 5, 0, 0, 0, 0, 0, 1, 'h', 'e', 'l', 'l', 'o'), + Http2Frame(Http2DataFrame{1, false, SliceBufferFromString("hello")})); + EXPECT_EQ( + ParseFrame(0, 0, 4, 0, 1, 0x98, 0x38, 0x18, 0x22, 'k', 'i', 'd', 's'), + Http2Frame( + Http2DataFrame{0x98381822, true, SliceBufferFromString("kids")})); + EXPECT_EQ(ParseFrame(0, 0, 5, 1, 0, 0, 0, 0, 1, 'h', 'e', 'l', 'l', 'o'), + Http2Frame(Http2HeaderFrame{1, false, false, + SliceBufferFromString("hello")})); + EXPECT_EQ( + ParseFrame(0, 0, 4, 1, 4, 0x98, 0x38, 0x18, 0x22, 'k', 'i', 'd', 's'), + Http2Frame(Http2HeaderFrame{0x98381822, true, false, + SliceBufferFromString("kids")})); + EXPECT_EQ( + ParseFrame(0, 0, 4, 1, 1, 0x98, 0x38, 0x18, 0x22, 'k', 'i', 'd', 's'), + Http2Frame(Http2HeaderFrame{0x98381822, false, true, + SliceBufferFromString("kids")})); + EXPECT_EQ(ParseFrame(0, 0, 5, 9, 0, 0, 0, 0, 1, 'h', 'e', 'l', 'l', 'o'), + Http2Frame(Http2ContinuationFrame{1, false, + SliceBufferFromString("hello")})); + EXPECT_EQ(ParseFrame(0, 0, 5, 9, 4, 0, 0, 0, 1, 'h', 'e', 'l', 'l', 'o'), + Http2Frame(Http2ContinuationFrame{1, true, + SliceBufferFromString("hello")})); + EXPECT_EQ(ParseFrame(0, 0, 4, 3, 0, 0, 0, 0, 1, 0, 0, 0, 0x0a), + Http2Frame(Http2RstStreamFrame{1, GRPC_HTTP2_CONNECT_ERROR})); + EXPECT_EQ(ParseFrame(0, 0, 0, 4, 0, 0, 0, 0, 0), + Http2Frame(Http2SettingsFrame{})); + EXPECT_EQ( + ParseFrame(0, 0, 6, 4, 0, 0, 0, 0, 0, 0x12, 0x34, 0x9a, 0xbc, 0xde, 0xf0), + Http2Frame(Http2SettingsFrame{false, {{0x1234, 0x9abcdef0}}})); + EXPECT_EQ(ParseFrame(0, 0, 12, 4, 0, 0, 0, 0, 0, 0x12, 0x34, 0x9a, 0xbc, 0xde, + 0xf0, 0x43, 0x21, 0x12, 0x34, 0x56, 0x78), + Http2Frame(Http2SettingsFrame{ + false, {{0x1234, 0x9abcdef0}, {0x4321, 0x12345678}}})); + EXPECT_EQ(ParseFrame(0, 0, 0, 4, 1, 0, 0, 0, 0), + Http2Frame(Http2SettingsFrame{true, {}})); + EXPECT_EQ(ParseFrame(0, 0, 8, 6, 0, 0, 0, 0, 0, 0x12, 0x34, 0x56, 0x78, 0x9a, + 0xbc, 0xde, 0xf0), + Http2Frame(Http2PingFrame{false, 0x123456789abcdef0})); + EXPECT_EQ(ParseFrame(0, 0, 8, 6, 1, 0, 0, 0, 0, 0x12, 0x34, 0x56, 0x78, 0x9a, + 0xbc, 0xde, 0xf0), + Http2Frame(Http2PingFrame{true, 0x123456789abcdef0})); + EXPECT_EQ( + ParseFrame(0, 0, 13, 7, 0, 0, 0, 0, 0, 0x12, 0x34, 0x56, 0x78, 0, 0, 0, + 0x0b, 'h', 'e', 'l', 'l', 'o'), + Http2Frame(Http2GoawayFrame{0x12345678, GRPC_HTTP2_ENHANCE_YOUR_CALM, + Slice::FromCopiedString("hello")})); + EXPECT_EQ(ParseFrame(0, 0, 4, 8, 0, 0, 0, 0, 1, 0x12, 0x34, 0x56, 0x78), + Http2Frame(Http2WindowUpdateFrame{1, 0x12345678})); +} + +TEST(Frame, ParsePadded) { + EXPECT_EQ( + ParseFrame(0, 0, 9, 0, 8, 0, 0, 0, 1, 3, 'h', 'e', 'l', 'l', 'o', 1, 2, + 3), + Http2Frame(Http2DataFrame{1, false, SliceBufferFromString("hello")})); + EXPECT_EQ( + ParseFrame(0, 0, 8, 1, 8, 0, 0, 0, 1, 2, 'h', 'e', 'l', 'l', 'o', 1, 2), + Http2Frame( + Http2HeaderFrame{1, false, false, SliceBufferFromString("hello")})); + EXPECT_EQ(ParseFrame(0, 0, 10, 1, 32, 0, 0, 0, 1, 1, 2, 3, 4, 5, 'h', 'e', + 'l', 'l', 'o'), + Http2Frame(Http2HeaderFrame{1, false, false, + SliceBufferFromString("hello")})); + EXPECT_EQ(ParseFrame(0, 0, 13, 1, 40, 0, 0, 0, 1, 2, 1, 2, 3, 4, 5, 'h', 'e', + 'l', 'l', 'o', 1, 2), + Http2Frame(Http2HeaderFrame{1, false, false, + SliceBufferFromString("hello")})); +} + +TEST(Frame, ParseRejects) { + EXPECT_THAT(ValidateFrame(0, 0, 0, 0, 0, 0, 0, 0, 0), + StatusIs(absl::StatusCode::kInternal, + "invalid stream id: {DATA: flags=0, " + "stream_id=0, length=0}")); + EXPECT_THAT(ValidateFrame(0, 0, 0, 1, 0, 0, 0, 0, 0), + StatusIs(absl::StatusCode::kInternal, + "invalid stream id: {HEADER: flags=0, " + "stream_id=0, length=0}")); + EXPECT_THAT(ValidateFrame(0, 0, 0, 9, 0, 0, 0, 0, 0), + StatusIs(absl::StatusCode::kInternal, + "invalid stream id: {CONTINUATION: flags=0, " + "stream_id=0, length=0}")); + EXPECT_THAT(ValidateFrame(0, 0, 3, 3, 0, 0, 0, 0, 1, 100, 100, 100), + StatusIs(absl::StatusCode::kInternal, + "invalid rst stream payload: {RST_STREAM: flags=0, " + "stream_id=1, length=3}")); + EXPECT_THAT(ValidateFrame(0, 0, 4, 3, 0, 0, 0, 0, 0, 100, 100, 100, 100), + StatusIs(absl::StatusCode::kInternal, + "invalid stream id: {RST_STREAM: flags=0, " + "stream_id=0, length=4}")); + EXPECT_THAT(ValidateFrame(0, 0, 1, 4, 1, 0, 0, 0, 0, 1), + StatusIs(absl::StatusCode::kInternal, + "invalid settings ack length: {SETTINGS: flags=1, " + "stream_id=0, length=1}")); + EXPECT_THAT(ValidateFrame(0, 0, 1, 4, 0, 0, 0, 0, 0, 1), + StatusIs(absl::StatusCode::kInternal, + "invalid settings payload: {SETTINGS: flags=0, " + "stream_id=0, length=1} -- settings must be multiples " + "of 6 bytes long")); + EXPECT_THAT(ValidateFrame(0, 0, 2, 4, 0, 0, 0, 0, 0, 1, 1), + StatusIs(absl::StatusCode::kInternal, + "invalid settings payload: {SETTINGS: flags=0, " + "stream_id=0, length=2} -- settings must be multiples " + "of 6 bytes long")); + EXPECT_THAT(ValidateFrame(0, 0, 3, 4, 0, 0, 0, 0, 0, 1, 1, 1), + StatusIs(absl::StatusCode::kInternal, + "invalid settings payload: {SETTINGS: flags=0, " + "stream_id=0, length=3} -- settings must be multiples " + "of 6 bytes long")); + EXPECT_THAT(ValidateFrame(0, 0, 4, 4, 0, 0, 0, 0, 0, 1, 1, 1, 1), + StatusIs(absl::StatusCode::kInternal, + "invalid settings payload: {SETTINGS: flags=0, " + "stream_id=0, length=4} -- settings must be multiples " + "of 6 bytes long")); + EXPECT_THAT(ValidateFrame(0, 0, 5, 4, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1), + StatusIs(absl::StatusCode::kInternal, + "invalid settings payload: {SETTINGS: flags=0, " + "stream_id=0, length=5} -- settings must be multiples " + "of 6 bytes long")); + EXPECT_THAT(ValidateFrame(0, 0, 7, 4, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1), + StatusIs(absl::StatusCode::kInternal, + "invalid settings payload: {SETTINGS: flags=0, " + "stream_id=0, length=7} -- settings must be multiples " + "of 6 bytes long")); + EXPECT_THAT(ValidateFrame(0, 0, 0, 4, 0, 0, 0, 0, 1), + StatusIs(absl::StatusCode::kInternal, + "invalid stream id: {SETTINGS: flags=0, " + "stream_id=1, length=0}")); + EXPECT_THAT(ValidateFrame(0, 0, 0, 6, 0, 0, 0, 0, 0), + StatusIs(absl::StatusCode::kInternal, + "invalid ping payload: {PING: flags=0, " + "stream_id=0, length=0}")); + EXPECT_THAT(ValidateFrame(0, 0, 8, 6, 0, 0, 0, 0, 1, 1, 2, 3, 4, 5, 6, 7, 8), + StatusIs(absl::StatusCode::kInternal, + "invalid ping stream id: {PING: flags=0, " + "stream_id=1, length=8}")); + EXPECT_THAT(ValidateFrame(0, 0, 8, 6, 2, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 8), + StatusIs(absl::StatusCode::kInternal, + "invalid ping flags: {PING: flags=2, " + "stream_id=0, length=8}")); + EXPECT_THAT( + ValidateFrame(0, 0, 8, 6, 255, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 8), + StatusIs(absl::StatusCode::kInternal, + "invalid ping flags: {PING: flags=255, " + "stream_id=0, length=8}")); + EXPECT_THAT(ValidateFrame(0, 0, 0, 7, 0, 0, 0, 0, 0), + StatusIs(absl::StatusCode::kInternal, + "invalid goaway payload: {GOAWAY: flags=0, " + "stream_id=0, length=0} -- must be at least 8 bytes")); + EXPECT_THAT(ValidateFrame(0, 0, 1, 7, 0, 0, 0, 0, 0, 1), + StatusIs(absl::StatusCode::kInternal, + "invalid goaway payload: {GOAWAY: flags=0, " + "stream_id=0, length=1} -- must be at least 8 bytes")); + EXPECT_THAT(ValidateFrame(0, 0, 2, 7, 0, 0, 0, 0, 0, 1, 1), + StatusIs(absl::StatusCode::kInternal, + "invalid goaway payload: {GOAWAY: flags=0, " + "stream_id=0, length=2} -- must be at least 8 bytes")); + EXPECT_THAT(ValidateFrame(0, 0, 3, 7, 0, 0, 0, 0, 0, 1, 1, 1), + StatusIs(absl::StatusCode::kInternal, + "invalid goaway payload: {GOAWAY: flags=0, " + "stream_id=0, length=3} -- must be at least 8 bytes")); + EXPECT_THAT(ValidateFrame(0, 0, 4, 7, 0, 0, 0, 0, 0, 1, 1, 1, 1), + StatusIs(absl::StatusCode::kInternal, + "invalid goaway payload: {GOAWAY: flags=0, " + "stream_id=0, length=4} -- must be at least 8 bytes")); + EXPECT_THAT(ValidateFrame(0, 0, 5, 7, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1), + StatusIs(absl::StatusCode::kInternal, + "invalid goaway payload: {GOAWAY: flags=0, " + "stream_id=0, length=5} -- must be at least 8 bytes")); + EXPECT_THAT(ValidateFrame(0, 0, 6, 7, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1), + StatusIs(absl::StatusCode::kInternal, + "invalid goaway payload: {GOAWAY: flags=0, " + "stream_id=0, length=6} -- must be at least 8 bytes")); + EXPECT_THAT(ValidateFrame(0, 0, 7, 7, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1), + StatusIs(absl::StatusCode::kInternal, + "invalid goaway payload: {GOAWAY: flags=0, " + "stream_id=0, length=7} -- must be at least 8 bytes")); + EXPECT_THAT(ValidateFrame(0, 0, 8, 7, 0, 0, 0, 0, 1, 1, 2, 3, 4, 5, 6, 7, 8), + StatusIs(absl::StatusCode::kInternal, + "invalid goaway stream id: {GOAWAY: flags=0, " + "stream_id=1, length=8}")); + EXPECT_THAT(ValidateFrame(0, 0, 8, 7, 1, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 8), + StatusIs(absl::StatusCode::kInternal, + "invalid goaway flags: {GOAWAY: flags=1, " + "stream_id=0, length=8}")); + EXPECT_THAT( + ValidateFrame(0, 0, 8, 7, 255, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 8), + StatusIs(absl::StatusCode::kInternal, + "invalid goaway flags: {GOAWAY: flags=255, " + "stream_id=0, length=8}")); + EXPECT_THAT(ValidateFrame(0, 0, 0, 8, 0, 0, 0, 0, 0), + StatusIs(absl::StatusCode::kInternal, + "invalid window update payload: {WINDOW_UPDATE: " + "flags=0, stream_id=0, length=0} -- must be 4 bytes")); + EXPECT_THAT(ValidateFrame(0, 0, 1, 8, 0, 0, 0, 0, 0, 1), + StatusIs(absl::StatusCode::kInternal, + "invalid window update payload: {WINDOW_UPDATE: " + "flags=0, stream_id=0, length=1} -- must be 4 bytes")); + EXPECT_THAT(ValidateFrame(0, 0, 2, 8, 0, 0, 0, 0, 0, 1, 1), + StatusIs(absl::StatusCode::kInternal, + "invalid window update payload: {WINDOW_UPDATE: " + "flags=0, stream_id=0, length=2} -- must be 4 bytes")); + EXPECT_THAT(ValidateFrame(0, 0, 3, 8, 0, 0, 0, 0, 0, 1, 1, 1), + StatusIs(absl::StatusCode::kInternal, + "invalid window update payload: {WINDOW_UPDATE: " + "flags=0, stream_id=0, length=3} -- must be 4 bytes")); + EXPECT_THAT(ValidateFrame(0, 0, 5, 8, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1), + StatusIs(absl::StatusCode::kInternal, + "invalid window update payload: {WINDOW_UPDATE: " + "flags=0, stream_id=0, length=5} -- must be 4 bytes")); + EXPECT_THAT(ValidateFrame(0, 0, 4, 8, 1, 0, 0, 0, 0, 1, 1, 1, 1), + StatusIs(absl::StatusCode::kInternal, + "invalid window update flags: {WINDOW_UPDATE: flags=1, " + "stream_id=0, length=4}")); +} + +} // namespace +} // namespace grpc_core + +int main(int argc, char** argv) { + ::testing::InitGoogleTest(&argc, argv); + return RUN_ALL_TESTS(); +} diff --git a/test/core/transport/chttp2/hpack_encoder_test.cc b/test/core/transport/chttp2/hpack_encoder_test.cc index 9153236f9d8..e10e88bb3c1 100644 --- a/test/core/transport/chttp2/hpack_encoder_test.cc +++ b/test/core/transport/chttp2/hpack_encoder_test.cc @@ -31,7 +31,7 @@ #include #include -#include "src/core/ext/transport/chttp2/transport/frame.h" +#include "src/core/ext/transport/chttp2/transport/legacy_frame.h" #include "src/core/lib/gprpp/ref_counted_ptr.h" #include "src/core/lib/iomgr/exec_ctx.h" #include "src/core/lib/resource_quota/arena.h" diff --git a/test/core/transport/chttp2/ping_configuration_test.cc b/test/core/transport/chttp2/ping_configuration_test.cc index 4b8395e34dc..3084757d535 100644 --- a/test/core/transport/chttp2/ping_configuration_test.cc +++ b/test/core/transport/chttp2/ping_configuration_test.cc @@ -19,8 +19,8 @@ #include #include "src/core/ext/transport/chttp2/transport/chttp2_transport.h" -#include "src/core/ext/transport/chttp2/transport/frame.h" #include "src/core/ext/transport/chttp2/transport/internal.h" +#include "src/core/ext/transport/chttp2/transport/legacy_frame.h" #include "src/core/ext/transport/chttp2/transport/ping_abuse_policy.h" #include "src/core/ext/transport/chttp2/transport/ping_rate_policy.h" #include "src/core/lib/channel/channel_args.h" diff --git a/tools/doxygen/Doxyfile.c++.internal b/tools/doxygen/Doxyfile.c++.internal index 5dfc75a5338..ab0d980b347 100644 --- a/tools/doxygen/Doxyfile.c++.internal +++ b/tools/doxygen/Doxyfile.c++.internal @@ -1281,7 +1281,6 @@ src/core/ext/transport/chttp2/transport/decode_huff.cc \ src/core/ext/transport/chttp2/transport/decode_huff.h \ src/core/ext/transport/chttp2/transport/flow_control.cc \ src/core/ext/transport/chttp2/transport/flow_control.h \ -src/core/ext/transport/chttp2/transport/frame.h \ src/core/ext/transport/chttp2/transport/frame_data.cc \ src/core/ext/transport/chttp2/transport/frame_data.h \ src/core/ext/transport/chttp2/transport/frame_goaway.cc \ @@ -1312,6 +1311,7 @@ src/core/ext/transport/chttp2/transport/http_trace.h \ src/core/ext/transport/chttp2/transport/huffsyms.cc \ src/core/ext/transport/chttp2/transport/huffsyms.h \ src/core/ext/transport/chttp2/transport/internal.h \ +src/core/ext/transport/chttp2/transport/legacy_frame.h \ src/core/ext/transport/chttp2/transport/parsing.cc \ src/core/ext/transport/chttp2/transport/ping_abuse_policy.cc \ src/core/ext/transport/chttp2/transport/ping_abuse_policy.h \ diff --git a/tools/doxygen/Doxyfile.core.internal b/tools/doxygen/Doxyfile.core.internal index 114b3b0a6b6..f709eaffb6a 100644 --- a/tools/doxygen/Doxyfile.core.internal +++ b/tools/doxygen/Doxyfile.core.internal @@ -1057,7 +1057,6 @@ src/core/ext/transport/chttp2/transport/decode_huff.cc \ src/core/ext/transport/chttp2/transport/decode_huff.h \ src/core/ext/transport/chttp2/transport/flow_control.cc \ src/core/ext/transport/chttp2/transport/flow_control.h \ -src/core/ext/transport/chttp2/transport/frame.h \ src/core/ext/transport/chttp2/transport/frame_data.cc \ src/core/ext/transport/chttp2/transport/frame_data.h \ src/core/ext/transport/chttp2/transport/frame_goaway.cc \ @@ -1088,6 +1087,7 @@ src/core/ext/transport/chttp2/transport/http_trace.h \ src/core/ext/transport/chttp2/transport/huffsyms.cc \ src/core/ext/transport/chttp2/transport/huffsyms.h \ src/core/ext/transport/chttp2/transport/internal.h \ +src/core/ext/transport/chttp2/transport/legacy_frame.h \ src/core/ext/transport/chttp2/transport/parsing.cc \ src/core/ext/transport/chttp2/transport/ping_abuse_policy.cc \ src/core/ext/transport/chttp2/transport/ping_abuse_policy.h \ diff --git a/tools/run_tests/generated/tests.json b/tools/run_tests/generated/tests.json index 7036e823bff..6a2ad4bfcc8 100644 --- a/tools/run_tests/generated/tests.json +++ b/tools/run_tests/generated/tests.json @@ -3707,30 +3707,6 @@ ], "uses_polling": true }, - { - "args": [], - "benchmark": false, - "ci_platforms": [ - "linux", - "mac", - "posix", - "windows" - ], - "cpu_cost": 1.0, - "exclude_configs": [], - "exclude_iomgrs": [], - "flaky": false, - "gtest": true, - "language": "c++", - "name": "frame_test", - "platforms": [ - "linux", - "mac", - "posix", - "windows" - ], - "uses_polling": true - }, { "args": [], "benchmark": false, @@ -10087,6 +10063,54 @@ ], "uses_polling": false }, + { + "args": [], + "benchmark": false, + "ci_platforms": [ + "linux", + "mac", + "posix", + "windows" + ], + "cpu_cost": 1.0, + "exclude_configs": [], + "exclude_iomgrs": [], + "flaky": false, + "gtest": true, + "language": "c++", + "name": "test_core_transport_chaotic_good_frame_test", + "platforms": [ + "linux", + "mac", + "posix", + "windows" + ], + "uses_polling": true + }, + { + "args": [], + "benchmark": false, + "ci_platforms": [ + "linux", + "mac", + "posix", + "windows" + ], + "cpu_cost": 1.0, + "exclude_configs": [], + "exclude_iomgrs": [], + "flaky": false, + "gtest": true, + "language": "c++", + "name": "test_core_transport_chttp2_frame_test", + "platforms": [ + "linux", + "mac", + "posix", + "windows" + ], + "uses_polling": false + }, { "args": [], "benchmark": false,