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_