Make the I/O part of QUICHE compile under Bazel. This renames those targets from epoll_* to io_*, since those are no longer epoll-dependent. I got those to compile on Linux under the Clang opt build, and almost all of the tests passed. PiperOrigin-RevId: 476972652
diff --git a/build/source_list.bzl b/build/source_list.bzl index 96f60f4..7f41f54 100644 --- a/build/source_list.bzl +++ b/build/source_list.bzl
@@ -943,7 +943,7 @@ "spdy/test_tools/mock_spdy_framer_visitor.cc", "spdy/test_tools/spdy_test_utils.cc", ] -epoll_tool_support_hdrs = [ +io_tool_support_hdrs = [ "common/platform/api/quiche_event_loop.h", "common/platform/api/quiche_udp_socket_platform_api.h", "quic/core/batch_writer/quic_batch_writer_base.h", @@ -977,7 +977,7 @@ "quic/tools/quic_default_client.h", "quic/tools/quic_server.h", ] -epoll_tool_support_srcs = [ +io_tool_support_srcs = [ "quic/core/batch_writer/quic_batch_writer_base.cc", "quic/core/batch_writer/quic_batch_writer_buffer.cc", "quic/core/batch_writer/quic_gso_batch_writer.cc", @@ -1006,16 +1006,14 @@ "quic/tools/quic_default_client.cc", "quic/tools/quic_server.cc", ] -epoll_test_support_hdrs = [ - "quic/bindings/quic_libevent.h", +io_test_support_hdrs = [ "quic/test_tools/quic_mock_syscall_wrapper.h", "quic/test_tools/quic_server_peer.h", "quic/test_tools/quic_test_client.h", "quic/test_tools/quic_test_server.h", "quic/test_tools/server_thread.h", ] -epoll_test_support_srcs = [ - "quic/bindings/quic_libevent.cc", +io_test_support_srcs = [ "quic/test_tools/quic_mock_syscall_wrapper.cc", "quic/test_tools/quic_server_peer.cc", "quic/test_tools/quic_test_client.cc", @@ -1281,11 +1279,10 @@ "spdy/core/spdy_protocol_test.cc", "spdy/core/spdy_simple_arena_test.cc", ] -epoll_tests_hdrs = [ +io_tests_hdrs = [ ] -epoll_tests_srcs = [ - "quic/bindings/quic_libevent_test.cc", +io_tests_srcs = [ "quic/core/batch_writer/quic_batch_writer_buffer_test.cc", "quic/core/batch_writer/quic_batch_writer_test.cc", "quic/core/batch_writer/quic_gso_batch_writer_test.cc", @@ -1384,6 +1381,8 @@ "common/platform/default/quiche_platform_impl/quiche_bug_tracker_impl.h", "common/platform/default/quiche_platform_impl/quiche_client_stats_impl.h", "common/platform/default/quiche_platform_impl/quiche_containers_impl.h", + "common/platform/default/quiche_platform_impl/quiche_default_proof_providers_impl.h", + "common/platform/default/quiche_platform_impl/quiche_event_loop_impl.h", "common/platform/default/quiche_platform_impl/quiche_export_impl.h", "common/platform/default/quiche_platform_impl/quiche_flag_utils_impl.h", "common/platform/default/quiche_platform_impl/quiche_flags_impl.h", @@ -1400,6 +1399,7 @@ "common/platform/default/quiche_platform_impl/quiche_testvalue_impl.h", "common/platform/default/quiche_platform_impl/quiche_thread_local_impl.h", "common/platform/default/quiche_platform_impl/quiche_time_utils_impl.h", + "common/platform/default/quiche_platform_impl/quiche_udp_socket_platform_impl.h", "common/platform/default/quiche_platform_impl/quiche_url_utils_impl.h", ] default_platform_impl_srcs = [ @@ -1411,7 +1411,6 @@ ] default_platform_impl_tool_support_hdrs = [ "common/platform/default/quiche_platform_impl/quiche_command_line_flags_impl.h", - "common/platform/default/quiche_platform_impl/quiche_event_loop_impl.h", "common/platform/default/quiche_platform_impl/quiche_file_utils_impl.h", "common/platform/default/quiche_platform_impl/quiche_stream_buffer_allocator_impl.h", "common/platform/default/quiche_platform_impl/quiche_system_event_loop_impl.h", @@ -1535,3 +1534,10 @@ "quic/qbone/qbone_stream.cc", "quic/qbone/qbone_stream_test.cc", ] +libevent_hdrs = [ + "quic/bindings/quic_libevent.h", +] +libevent_srcs = [ + "quic/bindings/quic_libevent.cc", + "quic/bindings/quic_libevent_test.cc", +]
diff --git a/build/source_list.gni b/build/source_list.gni index 8f7f359..aadf7ae 100644 --- a/build/source_list.gni +++ b/build/source_list.gni
@@ -943,7 +943,7 @@ "src/quiche/spdy/test_tools/mock_spdy_framer_visitor.cc", "src/quiche/spdy/test_tools/spdy_test_utils.cc", ] -epoll_tool_support_hdrs = [ +io_tool_support_hdrs = [ "src/quiche/common/platform/api/quiche_event_loop.h", "src/quiche/common/platform/api/quiche_udp_socket_platform_api.h", "src/quiche/quic/core/batch_writer/quic_batch_writer_base.h", @@ -977,7 +977,7 @@ "src/quiche/quic/tools/quic_default_client.h", "src/quiche/quic/tools/quic_server.h", ] -epoll_tool_support_srcs = [ +io_tool_support_srcs = [ "src/quiche/quic/core/batch_writer/quic_batch_writer_base.cc", "src/quiche/quic/core/batch_writer/quic_batch_writer_buffer.cc", "src/quiche/quic/core/batch_writer/quic_gso_batch_writer.cc", @@ -1006,16 +1006,14 @@ "src/quiche/quic/tools/quic_default_client.cc", "src/quiche/quic/tools/quic_server.cc", ] -epoll_test_support_hdrs = [ - "src/quiche/quic/bindings/quic_libevent.h", +io_test_support_hdrs = [ "src/quiche/quic/test_tools/quic_mock_syscall_wrapper.h", "src/quiche/quic/test_tools/quic_server_peer.h", "src/quiche/quic/test_tools/quic_test_client.h", "src/quiche/quic/test_tools/quic_test_server.h", "src/quiche/quic/test_tools/server_thread.h", ] -epoll_test_support_srcs = [ - "src/quiche/quic/bindings/quic_libevent.cc", +io_test_support_srcs = [ "src/quiche/quic/test_tools/quic_mock_syscall_wrapper.cc", "src/quiche/quic/test_tools/quic_server_peer.cc", "src/quiche/quic/test_tools/quic_test_client.cc", @@ -1281,11 +1279,10 @@ "src/quiche/spdy/core/spdy_protocol_test.cc", "src/quiche/spdy/core/spdy_simple_arena_test.cc", ] -epoll_tests_hdrs = [ +io_tests_hdrs = [ ] -epoll_tests_srcs = [ - "src/quiche/quic/bindings/quic_libevent_test.cc", +io_tests_srcs = [ "src/quiche/quic/core/batch_writer/quic_batch_writer_buffer_test.cc", "src/quiche/quic/core/batch_writer/quic_batch_writer_test.cc", "src/quiche/quic/core/batch_writer/quic_gso_batch_writer_test.cc", @@ -1384,6 +1381,8 @@ "src/quiche/common/platform/default/quiche_platform_impl/quiche_bug_tracker_impl.h", "src/quiche/common/platform/default/quiche_platform_impl/quiche_client_stats_impl.h", "src/quiche/common/platform/default/quiche_platform_impl/quiche_containers_impl.h", + "src/quiche/common/platform/default/quiche_platform_impl/quiche_default_proof_providers_impl.h", + "src/quiche/common/platform/default/quiche_platform_impl/quiche_event_loop_impl.h", "src/quiche/common/platform/default/quiche_platform_impl/quiche_export_impl.h", "src/quiche/common/platform/default/quiche_platform_impl/quiche_flag_utils_impl.h", "src/quiche/common/platform/default/quiche_platform_impl/quiche_flags_impl.h", @@ -1400,6 +1399,7 @@ "src/quiche/common/platform/default/quiche_platform_impl/quiche_testvalue_impl.h", "src/quiche/common/platform/default/quiche_platform_impl/quiche_thread_local_impl.h", "src/quiche/common/platform/default/quiche_platform_impl/quiche_time_utils_impl.h", + "src/quiche/common/platform/default/quiche_platform_impl/quiche_udp_socket_platform_impl.h", "src/quiche/common/platform/default/quiche_platform_impl/quiche_url_utils_impl.h", ] default_platform_impl_srcs = [ @@ -1411,7 +1411,6 @@ ] default_platform_impl_tool_support_hdrs = [ "src/quiche/common/platform/default/quiche_platform_impl/quiche_command_line_flags_impl.h", - "src/quiche/common/platform/default/quiche_platform_impl/quiche_event_loop_impl.h", "src/quiche/common/platform/default/quiche_platform_impl/quiche_file_utils_impl.h", "src/quiche/common/platform/default/quiche_platform_impl/quiche_stream_buffer_allocator_impl.h", "src/quiche/common/platform/default/quiche_platform_impl/quiche_system_event_loop_impl.h", @@ -1535,3 +1534,10 @@ "src/quiche/quic/qbone/qbone_stream.cc", "src/quiche/quic/qbone/qbone_stream_test.cc", ] +libevent_hdrs = [ + "src/quiche/quic/bindings/quic_libevent.h", +] +libevent_srcs = [ + "src/quiche/quic/bindings/quic_libevent.cc", + "src/quiche/quic/bindings/quic_libevent_test.cc", +]
diff --git a/build/source_list.json b/build/source_list.json index 1f74bf4..3914bca 100644 --- a/build/source_list.json +++ b/build/source_list.json
@@ -942,7 +942,7 @@ "quiche/spdy/test_tools/mock_spdy_framer_visitor.cc", "quiche/spdy/test_tools/spdy_test_utils.cc" ], - "epoll_tool_support_hdrs": [ + "io_tool_support_hdrs": [ "quiche/common/platform/api/quiche_event_loop.h", "quiche/common/platform/api/quiche_udp_socket_platform_api.h", "quiche/quic/core/batch_writer/quic_batch_writer_base.h", @@ -976,7 +976,7 @@ "quiche/quic/tools/quic_default_client.h", "quiche/quic/tools/quic_server.h" ], - "epoll_tool_support_srcs": [ + "io_tool_support_srcs": [ "quiche/quic/core/batch_writer/quic_batch_writer_base.cc", "quiche/quic/core/batch_writer/quic_batch_writer_buffer.cc", "quiche/quic/core/batch_writer/quic_gso_batch_writer.cc", @@ -1005,16 +1005,14 @@ "quiche/quic/tools/quic_default_client.cc", "quiche/quic/tools/quic_server.cc" ], - "epoll_test_support_hdrs": [ - "quiche/quic/bindings/quic_libevent.h", + "io_test_support_hdrs": [ "quiche/quic/test_tools/quic_mock_syscall_wrapper.h", "quiche/quic/test_tools/quic_server_peer.h", "quiche/quic/test_tools/quic_test_client.h", "quiche/quic/test_tools/quic_test_server.h", "quiche/quic/test_tools/server_thread.h" ], - "epoll_test_support_srcs": [ - "quiche/quic/bindings/quic_libevent.cc", + "io_test_support_srcs": [ "quiche/quic/test_tools/quic_mock_syscall_wrapper.cc", "quiche/quic/test_tools/quic_server_peer.cc", "quiche/quic/test_tools/quic_test_client.cc", @@ -1280,11 +1278,10 @@ "quiche/spdy/core/spdy_protocol_test.cc", "quiche/spdy/core/spdy_simple_arena_test.cc" ], - "epoll_tests_hdrs": [ + "io_tests_hdrs": [ ], - "epoll_tests_srcs": [ - "quiche/quic/bindings/quic_libevent_test.cc", + "io_tests_srcs": [ "quiche/quic/core/batch_writer/quic_batch_writer_buffer_test.cc", "quiche/quic/core/batch_writer/quic_batch_writer_test.cc", "quiche/quic/core/batch_writer/quic_gso_batch_writer_test.cc", @@ -1383,6 +1380,8 @@ "quiche/common/platform/default/quiche_platform_impl/quiche_bug_tracker_impl.h", "quiche/common/platform/default/quiche_platform_impl/quiche_client_stats_impl.h", "quiche/common/platform/default/quiche_platform_impl/quiche_containers_impl.h", + "quiche/common/platform/default/quiche_platform_impl/quiche_default_proof_providers_impl.h", + "quiche/common/platform/default/quiche_platform_impl/quiche_event_loop_impl.h", "quiche/common/platform/default/quiche_platform_impl/quiche_export_impl.h", "quiche/common/platform/default/quiche_platform_impl/quiche_flag_utils_impl.h", "quiche/common/platform/default/quiche_platform_impl/quiche_flags_impl.h", @@ -1399,6 +1398,7 @@ "quiche/common/platform/default/quiche_platform_impl/quiche_testvalue_impl.h", "quiche/common/platform/default/quiche_platform_impl/quiche_thread_local_impl.h", "quiche/common/platform/default/quiche_platform_impl/quiche_time_utils_impl.h", + "quiche/common/platform/default/quiche_platform_impl/quiche_udp_socket_platform_impl.h", "quiche/common/platform/default/quiche_platform_impl/quiche_url_utils_impl.h" ], "default_platform_impl_srcs": [ @@ -1410,7 +1410,6 @@ ], "default_platform_impl_tool_support_hdrs": [ "quiche/common/platform/default/quiche_platform_impl/quiche_command_line_flags_impl.h", - "quiche/common/platform/default/quiche_platform_impl/quiche_event_loop_impl.h", "quiche/common/platform/default/quiche_platform_impl/quiche_file_utils_impl.h", "quiche/common/platform/default/quiche_platform_impl/quiche_stream_buffer_allocator_impl.h", "quiche/common/platform/default/quiche_platform_impl/quiche_system_event_loop_impl.h" @@ -1533,5 +1532,12 @@ "quiche/quic/qbone/qbone_session_test.cc", "quiche/quic/qbone/qbone_stream.cc", "quiche/quic/qbone/qbone_stream_test.cc" + ], + "libevent_hdrs": [ + "quiche/quic/bindings/quic_libevent.h" + ], + "libevent_srcs": [ + "quiche/quic/bindings/quic_libevent.cc", + "quiche/quic/bindings/quic_libevent_test.cc" ] } \ No newline at end of file
diff --git a/build/test.bzl b/build/test.bzl index 9beb0ca..33bef08 100644 --- a/build/test.bzl +++ b/build/test.bzl
@@ -1,5 +1,6 @@ """Tools for building QUICHE tests.""" +load("@bazel_skylib//lib:dicts.bzl", "dicts") load("@bazel_skylib//lib:paths.bzl", "paths") def test_suite_from_source_list(name, srcs, **kwargs): @@ -17,10 +18,13 @@ if not sourcefile.endswith("_test.cc"): fail("All source files passed to test_suite_from_source_list() must end with _test.cc") test_name, _ = paths.split_extension(paths.basename(sourcefile)) + extra_kwargs = {} + if test_name == "end_to_end_test": + extra_kwargs["shard_count"] = 16 native.cc_test( name = test_name, srcs = [sourcefile], - **kwargs + **dicts.add(kwargs, extra_kwargs) ) tests.append(test_name) native.test_suite(name = name, tests = tests)
diff --git a/quiche/BUILD.bazel b/quiche/BUILD.bazel index 4bfdb60..f75d4f4 100644 --- a/quiche/BUILD.bazel +++ b/quiche/BUILD.bazel
@@ -12,6 +12,11 @@ "default_platform_impl_test_support_srcs", "default_platform_impl_tool_support_hdrs", "default_platform_impl_tool_support_srcs", + "io_test_support_hdrs", + "io_test_support_srcs", + "io_tests_srcs", + "io_tool_support_hdrs", + "io_tool_support_srcs", "quiche_core_hdrs", "quiche_core_srcs", "quiche_test_support_hdrs", @@ -273,6 +278,104 @@ ], ) +cc_library( + name = "io_tool_support", + srcs = io_tool_support_srcs, + hdrs = io_tool_support_hdrs, + deps = [ + ":quiche_core", + ":quiche_platform_default_tools", + ":quiche_tool_support", + "@boringssl//:crypto", + "@com_google_absl//absl/algorithm:container", + "@com_google_absl//absl/base:core_headers", + "@com_google_absl//absl/cleanup", + "@com_google_absl//absl/container:flat_hash_map", + "@com_google_absl//absl/container:flat_hash_set", + "@com_google_absl//absl/memory", + "@com_google_absl//absl/status", + "@com_google_absl//absl/status:statusor", + "@com_google_absl//absl/strings", + "@com_google_absl//absl/strings:str_format", + "@com_google_absl//absl/types:optional", + "@com_google_absl//absl/types:span", + "@com_google_absl//absl/types:variant", + "@com_google_googleurl//url", + ], +) + +cc_library( + name = "io_test_support", + testonly = 1, + srcs = io_test_support_srcs, + hdrs = io_test_support_hdrs, + deps = [ + ":io_tool_support", + ":quiche_core", + ":quiche_platform_default_tools", + ":quiche_test_support", + ":quiche_tool_support", + "@boringssl//:crypto", + "@com_google_absl//absl/algorithm:container", + "@com_google_absl//absl/base:core_headers", + "@com_google_absl//absl/cleanup", + "@com_google_absl//absl/container:flat_hash_map", + "@com_google_absl//absl/container:flat_hash_set", + "@com_google_absl//absl/memory", + "@com_google_absl//absl/status", + "@com_google_absl//absl/status:statusor", + "@com_google_absl//absl/strings", + "@com_google_absl//absl/strings:str_format", + "@com_google_absl//absl/types:optional", + "@com_google_absl//absl/types:span", + "@com_google_absl//absl/types:variant", + "@com_google_googletest//:gtest", + "@com_google_googleurl//url", + ], +) + +test_suite_from_source_list( + name = "io_tests", + srcs = io_tests_srcs, + data = glob([ + "common/platform/api/testdir/**", + "quic/test_tools/quic_http_response_cache_data/**", + ]), + deps = [ + ":binary_http", + ":io_test_support", + ":io_tool_support", + ":quiche_core", + ":quiche_platform_default_testonly", + ":quiche_protobufs_testonly_cc_proto", + ":quiche_test_support", + ":quiche_tool_support", + "@boringssl//:crypto", + "@boringssl//:ssl", + "@com_google_absl//absl/algorithm:container", + "@com_google_absl//absl/base:core_headers", + "@com_google_absl//absl/cleanup", + "@com_google_absl//absl/container:flat_hash_map", + "@com_google_absl//absl/container:flat_hash_set", + "@com_google_absl//absl/container:node_hash_map", + "@com_google_absl//absl/functional:bind_front", + "@com_google_absl//absl/hash", + "@com_google_absl//absl/memory", + "@com_google_absl//absl/numeric:int128", + "@com_google_absl//absl/status", + "@com_google_absl//absl/status:statusor", + "@com_google_absl//absl/strings", + "@com_google_absl//absl/strings:str_format", + "@com_google_absl//absl/time", + "@com_google_absl//absl/types:optional", + "@com_google_absl//absl/types:span", + "@com_google_absl//absl/types:variant", + "@com_google_googletest//:gtest", + "@com_google_googletest//:gtest_main", + "@com_google_googleurl//url", + ], +) + # TODO(vasilvv): make a rule that generates cc_binary rules for all _bin targets. cc_binary( name = "quic_packet_printer",
diff --git a/quiche/common/platform/default/quiche_platform_impl/quiche_default_proof_providers_impl.h b/quiche/common/platform/default/quiche_platform_impl/quiche_default_proof_providers_impl.h new file mode 100644 index 0000000..6727f65 --- /dev/null +++ b/quiche/common/platform/default/quiche_platform_impl/quiche_default_proof_providers_impl.h
@@ -0,0 +1,26 @@ +// Copyright 2022 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef QUICHE_COMMON_PLATFORM_DEFAULT_QUICHE_PLATFORM_IMPL_QUICHE_DEFAULT_PROOF_PROVIDERS_IMPL_H_ +#define QUICHE_COMMON_PLATFORM_DEFAULT_QUICHE_PLATFORM_IMPL_QUICHE_DEFAULT_PROOF_PROVIDERS_IMPL_H_ + +#include <memory> + +#include "quiche/quic/core/crypto/proof_source.h" +#include "quiche/quic/core/crypto/proof_verifier.h" + +namespace quiche { + +// TODO(vasilvv): implement those in order for the CLI tools to work. +inline std::unique_ptr<quic::ProofVerifier> CreateDefaultProofVerifierImpl( + const std::string& /*host*/) { + return nullptr; +} +inline std::unique_ptr<quic::ProofSource> CreateDefaultProofSourceImpl() { + return nullptr; +} + +} // namespace quiche + +#endif // QUICHE_COMMON_PLATFORM_DEFAULT_QUICHE_PLATFORM_IMPL_QUICHE_DEFAULT_PROOF_PROVIDERS_IMPL_H_
diff --git a/quiche/common/platform/default/quiche_platform_impl/quiche_udp_socket_platform_impl.h b/quiche/common/platform/default/quiche_platform_impl/quiche_udp_socket_platform_impl.h new file mode 100644 index 0000000..b42cfcc --- /dev/null +++ b/quiche/common/platform/default/quiche_platform_impl/quiche_udp_socket_platform_impl.h
@@ -0,0 +1,28 @@ +// Copyright 2022 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef QUICHE_COMMON_PLATFORM_DEFAULT_QUICHE_PLATFORM_IMPL_QUICHE_UDP_SOCKET_PLATFORM_IMPL_H_ +#define QUICHE_COMMON_PLATFORM_DEFAULT_QUICHE_PLATFORM_IMPL_QUICHE_UDP_SOCKET_PLATFORM_IMPL_H_ + +#include <sys/socket.h> +#include <unistd.h> + +#include <cstddef> +#include <cstdint> + +namespace quiche { + +constexpr size_t kCmsgSpaceForGooglePacketHeaderImpl = 0; + +inline bool GetGooglePacketHeadersFromControlMessageImpl( + struct ::cmsghdr* /*cmsg*/, char** /*packet_headers*/, + size_t* /*packet_headers_len*/) { + return false; +} + +inline void SetGoogleSocketOptionsImpl(int /*fd*/) {} + +} // namespace quiche + +#endif // QUICHE_COMMON_PLATFORM_DEFAULT_QUICHE_PLATFORM_IMPL_QUICHE_UDP_SOCKET_PLATFORM_IMPL_H_