Support building QUIC with GCE target constraint. Most of this works by making GCE builds use the cross-platform polyfills we already use for platforms like Android. This amends the *_BUG macros, and includes the SimpleEpollServer from third_party/epoll_server instead of the internal one. Many other changes are required to bring the portable google3 tests and flags up to compilation. Protected by gfe changes are build-only compatibility declarations. PiperOrigin-RevId: 366069092 Change-Id: Ia5cf90f9f37e592536a1be830679a0cae9ae2eb7
diff --git a/common/platform/api/quiche_bug_tracker.h b/common/platform/api/quiche_bug_tracker.h new file mode 100644 index 0000000..0e8e456 --- /dev/null +++ b/common/platform/api/quiche_bug_tracker.h
@@ -0,0 +1,15 @@ +// Copyright (c) 2016 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_API_QUICHE_BUG_TRACKER_H_ +#define QUICHE_COMMON_PLATFORM_API_QUICHE_BUG_TRACKER_H_ + +#include "net/quiche/common/platform/impl/quiche_bug_tracker_impl.h" + +#define QUICHE_BUG QUICHE_BUG_IMPL +#define QUICHE_BUG_IF QUICHE_BUG_IF_IMPL +#define QUICHE_PEER_BUG QUICHE_PEER_BUG_IMPL +#define QUICHE_PEER_BUG_IF QUICHE_PEER_BUG_IF_IMPL + +#endif // QUICHE_COMMON_PLATFORM_API_QUICHE_BUG_TRACKER_H_
diff --git a/common/platform/api/quiche_logging.h b/common/platform/api/quiche_logging.h index e3278eb..940d492 100644 --- a/common/platform/api/quiche_logging.h +++ b/common/platform/api/quiche_logging.h
@@ -40,6 +40,7 @@ #define QUICHE_LOG_ERROR_IS_ON() QUICHE_LOG_ERROR_IS_ON_IMPL() #define QUICHE_CHECK(condition) QUICHE_CHECK_IMPL(condition) +#define QUICHE_CHECK_OK(condition) QUICHE_CHECK_OK_IMPL(condition) #define QUICHE_CHECK_EQ(val1, val2) QUICHE_CHECK_EQ_IMPL(val1, val2) #define QUICHE_CHECK_NE(val1, val2) QUICHE_CHECK_NE_IMPL(val1, val2) #define QUICHE_CHECK_LE(val1, val2) QUICHE_CHECK_LE_IMPL(val1, val2)
diff --git a/epoll_server/simple_epoll_server.h b/epoll_server/simple_epoll_server.h index d2d3683..85b3a08 100644 --- a/epoll_server/simple_epoll_server.h +++ b/epoll_server/simple_epoll_server.h
@@ -487,6 +487,7 @@ // Summary: // Returns true when the SimpleEpollServer() is being destroyed. bool in_shutdown() const { return in_shutdown_; } + bool ShutdownCalled() const { return in_shutdown(); } // Compatibility stub. void Shutdown() {}
diff --git a/http2/decoder/payload_decoders/payload_decoder_base_test_util.h b/http2/decoder/payload_decoders/payload_decoder_base_test_util.h index 464b0cb..feea5e5 100644 --- a/http2/decoder/payload_decoders/payload_decoder_base_test_util.h +++ b/http2/decoder/payload_decoders/payload_decoder_base_test_util.h
@@ -385,7 +385,7 @@ auto& listener = listener_; Validator validator = [header, expected_missing_length, &listener]( - const DecodeBuffer& input, + const DecodeBuffer&, DecodeStatus status) -> ::testing::AssertionResult { VERIFY_EQ(DecodeStatus::kDecodeError, status); VERIFY_FALSE(listener.IsInProgress());
diff --git a/http2/hpack/decoder/hpack_decoder_state_test.cc b/http2/hpack/decoder/hpack_decoder_state_test.cc index 43332b1..698c655 100644 --- a/http2/hpack/decoder/hpack_decoder_state_test.cc +++ b/http2/hpack/decoder/hpack_decoder_state_test.cc
@@ -35,10 +35,12 @@ class MockHpackDecoderListener : public HpackDecoderListener { public: - MOCK_METHOD0(OnHeaderListStart, void()); - MOCK_METHOD2(OnHeader, - void(const std::string& name, const std::string& value)); - MOCK_METHOD0(OnHeaderListEnd, void()); + MOCK_METHOD(void, OnHeaderListStart, (), (override)); + MOCK_METHOD(void, + OnHeader, + (const std::string& name, const std::string& value), + (override)); + MOCK_METHOD(void, OnHeaderListEnd, (), (override)); MOCK_METHOD(void, OnHeaderErrorDetected, (absl::string_view error_message),
diff --git a/http2/hpack/decoder/hpack_decoder_test.cc b/http2/hpack/decoder/hpack_decoder_test.cc index 355940d..ce44ccb 100644 --- a/http2/hpack/decoder/hpack_decoder_test.cc +++ b/http2/hpack/decoder/hpack_decoder_test.cc
@@ -62,10 +62,12 @@ // and with VerifyDynamicTableContents. class MockHpackDecoderListener : public HpackDecoderListener { public: - MOCK_METHOD0(OnHeaderListStart, void()); - MOCK_METHOD2(OnHeader, - void(const std::string& name, const std::string& value)); - MOCK_METHOD0(OnHeaderListEnd, void()); + MOCK_METHOD(void, OnHeaderListStart, (), (override)); + MOCK_METHOD(void, + OnHeader, + (const std::string& name, const std::string& value), + (override)); + MOCK_METHOD(void, OnHeaderListEnd, (), (override)); MOCK_METHOD(void, OnHeaderErrorDetected, (absl::string_view error_message),
diff --git a/http2/platform/api/http2_bug_tracker.h b/http2/platform/api/http2_bug_tracker.h index 53d8688..6f2fe51 100644 --- a/http2/platform/api/http2_bug_tracker.h +++ b/http2/platform/api/http2_bug_tracker.h
@@ -5,10 +5,15 @@ #ifndef QUICHE_HTTP2_PLATFORM_API_HTTP2_BUG_TRACKER_H_ #define QUICHE_HTTP2_PLATFORM_API_HTTP2_BUG_TRACKER_H_ -#include "net/http2/platform/impl/http2_bug_tracker_impl.h" +#include "common/platform/api/quiche_bug_tracker.h" -#define HTTP2_BUG HTTP2_BUG_IMPL -#define HTTP2_BUG_IF HTTP2_BUG_IF_IMPL +#define HTTP2_BUG QUICHE_BUG +#define HTTP2_BUG_IF QUICHE_BUG_IF + +// V2 macros are the same as all the HTTP2_BUG flavor above, but they take a +// bug_id parameter. +#define HTTP2_BUG_V2 QUICHE_BUG +#define HTTP2_BUG_IF_V2 QUICHE_BUG_IF #define FLAGS_http2_always_log_bugs_for_tests \ FLAGS_http2_always_log_bugs_for_tests_IMPL
diff --git a/quic/core/crypto/transport_parameters_test.cc b/quic/core/crypto/transport_parameters_test.cc index 3d23ae6..81707c5 100644 --- a/quic/core/crypto/transport_parameters_test.cc +++ b/quic/core/crypto/transport_parameters_test.cc
@@ -448,7 +448,7 @@ orig_params.max_udp_payload_size.set_value(kMaxPacketSizeForTest); std::vector<uint8_t> out; - bool ok; + bool ok = true; EXPECT_QUIC_BUG( ok = SerializeTransportParameters(version_, orig_params, &out), "Not serializing invalid transport parameters: Client cannot send "
diff --git a/quic/core/http/end_to_end_test.cc b/quic/core/http/end_to_end_test.cc index 6138269..3ac82a4 100644 --- a/quic/core/http/end_to_end_test.cc +++ b/quic/core/http/end_to_end_test.cc
@@ -4512,7 +4512,7 @@ if (version_.UsesTls()) { // TODO(b/154162689) add PSK support to QUIC+TLS. - bool ok; + bool ok = true; EXPECT_QUIC_BUG(ok = Initialize(), "QUIC client pre-shared keys not yet supported with TLS"); EXPECT_FALSE(ok); @@ -4535,7 +4535,7 @@ if (version_.UsesTls()) { // TODO(b/154162689) add PSK support to QUIC+TLS. - bool ok; + bool ok = true; EXPECT_QUIC_BUG(ok = Initialize(), "QUIC client pre-shared keys not yet supported with TLS"); EXPECT_FALSE(ok); @@ -4562,7 +4562,7 @@ if (version_.UsesTls()) { // TODO(b/154162689) add PSK support to QUIC+TLS. - bool ok; + bool ok = true; EXPECT_QUIC_BUG(ok = Initialize(), "QUIC server pre-shared keys not yet supported with TLS"); EXPECT_FALSE(ok); @@ -4583,7 +4583,7 @@ if (version_.UsesTls()) { // TODO(b/154162689) add PSK support to QUIC+TLS. - bool ok; + bool ok = true; EXPECT_QUIC_BUG(ok = Initialize(), "QUIC client pre-shared keys not yet supported with TLS"); EXPECT_FALSE(ok);
diff --git a/quic/core/quic_udp_socket_test.cc b/quic/core/quic_udp_socket_test.cc deleted file mode 100644 index 400c38e..0000000 --- a/quic/core/quic_udp_socket_test.cc +++ /dev/null
@@ -1,439 +0,0 @@ -// Copyright 2019 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. - -#include "quic/core/quic_udp_socket.h" -#include <sys/socket.h> - -#ifdef __APPLE__ -#include <TargetConditionals.h> -#endif - -#include "quic/core/quic_constants.h" -#include "quic/platform/api/quic_test.h" - -namespace quic { -namespace test { -namespace { -// Used by ReadMultiplePackets tests. -struct ReadBuffers { - char control_buffer[512]; - char packet_buffer[1536]; -}; - -// Allows IPv6-specific testing. -struct TestParameters { - // If true, the test will only use IPv6. If false, IPv4 will be used if - // possible, with IPv6 used as a fallback. - bool force_ipv6; - // The value of ipv6_only to be used in QuicUdpSocketApi::Create calls. - bool ipv6_only; -}; -} // namespace - -class QuicUdpSocketTest : public QuicTestWithParam<TestParameters> { - protected: - void SetUp() override { - const TestParameters& parameters = GetParam(); - if (!parameters.force_ipv6) { - // Try creating AF_INET socket, if it fails because of unsupported address - // family then tests are being run under IPv6-only environment, initialize - // address family to use for running the test under as AF_INET6 otherwise - // initialize it as AF_INET. - address_family_ = AF_INET; - fd_client_ = - api_.Create(address_family_, - /*receive_buffer_size =*/kDefaultSocketReceiveBuffer, - /*send_buffer_size =*/kDefaultSocketReceiveBuffer, - /*ipv6_only =*/parameters.ipv6_only); - } - if (fd_client_ == kQuicInvalidSocketFd) { - // Either AF_INET is unsupported, or force_ipv6 is true. - address_family_ = AF_INET6; - fd_client_ = - api_.Create(address_family_, - /*receive_buffer_size =*/kDefaultSocketReceiveBuffer, - /*send_buffer_size =*/kDefaultSocketReceiveBuffer, - /*ipv6_only =*/parameters.ipv6_only); - } - ASSERT_NE(fd_client_, kQuicInvalidSocketFd); - - fd_server_ = - api_.Create(address_family_, - /*receive_buffer_size =*/kDefaultSocketReceiveBuffer, - /*send_buffer_size =*/kDefaultSocketReceiveBuffer, - /*ipv6_only =*/parameters.ipv6_only); - ASSERT_NE(fd_server_, kQuicInvalidSocketFd); - - ASSERT_TRUE( - api_.Bind(fd_server_, QuicSocketAddress(Loopback(), /*port=*/0))); - - ASSERT_EQ(0, server_address_.FromSocket(fd_server_)); - - QUIC_LOG(INFO) << "Testing under IP" - << std::string((address_family_ == AF_INET) ? "v4" : "v6"); - } - - ~QuicUdpSocketTest() { - api_.Destroy(fd_client_); - api_.Destroy(fd_server_); - } - - QuicIpAddress Loopback() const { - return (address_family_ == AF_INET) ? QuicIpAddress::Loopback4() - : QuicIpAddress::Loopback6(); - } - - // Client sends the first |packet_size| bytes in |client_packet_buffer_| to - // server. - WriteResult SendPacketFromClient(size_t packet_size) { - EXPECT_LE(packet_size, sizeof(client_packet_buffer_)); - QuicUdpPacketInfo packet_info; - packet_info.SetPeerAddress(server_address_); - return api_.WritePacket(fd_client_, client_packet_buffer_, packet_size, - packet_info); - } - - WriteResult SendPacketFromClientWithTtl(size_t packet_size, int ttl) { - EXPECT_LE(packet_size, sizeof(client_packet_buffer_)); - QuicUdpPacketInfo packet_info; - packet_info.SetPeerAddress(server_address_); - packet_info.SetTtl(ttl); - return api_.WritePacket(fd_client_, client_packet_buffer_, packet_size, - packet_info); - } - - // Server waits for an incoming packet and reads it into - // |server_packet_buffer_|. - QuicUdpSocketApi::ReadPacketResult ReadPacketFromServer( - BitMask64 packet_info_interested) { - EXPECT_TRUE( - api_.WaitUntilReadable(fd_server_, QuicTime::Delta::FromSeconds(5))); - memset(server_packet_buffer_, 0, sizeof(server_packet_buffer_)); - QuicUdpSocketApi::ReadPacketResult result; - result.packet_buffer = {server_packet_buffer_, - sizeof(server_packet_buffer_)}; - result.control_buffer = {server_control_buffer_, - sizeof(server_control_buffer_)}; - api_.ReadPacket(fd_server_, packet_info_interested, &result); - return result; - } - - int ComparePacketBuffers(size_t packet_size) { - return memcmp(client_packet_buffer_, server_packet_buffer_, packet_size); - } - - bool VerifyBufferIsFilledWith(const char* buffer, - size_t buffer_length, - char c) { - for (size_t i = 0; i < buffer_length; ++i) { - if (buffer[i] != c) { - return false; - } - } - return true; - } - - QuicUdpSocketApi api_; - QuicUdpSocketFd fd_client_ = kQuicInvalidSocketFd; - QuicUdpSocketFd fd_server_ = kQuicInvalidSocketFd; - QuicSocketAddress server_address_; - int address_family_; - char client_packet_buffer_[kEthernetMTU] = {0}; - char server_packet_buffer_[kDefaultMaxPacketSize] = {0}; - char server_control_buffer_[512] = {0}; -}; - -INSTANTIATE_TEST_SUITE_P( - PlatformIndependent, - QuicUdpSocketTest, - testing::Values(TestParameters{/*force_ipv6 =*/false, /*ipv6_only =*/false}, - TestParameters{/*force_ipv6 =*/false, /*ipv6_only =*/true}, - TestParameters{/*force_ipv6 =*/true, /*ipv6_only =*/true})); - -#ifndef TARGET_OS_IPHONE -// IPv6 on iOS is known to fail without ipv6_only, so should not be tested. -INSTANTIATE_TEST_SUITE_P(NonIos, - QuicUdpSocketTest, - testing::Values(TestParameters{/*force_ipv6 =*/true, - /*ipv6_only =*/false})); -#endif - -TEST_P(QuicUdpSocketTest, ReadPacketResultReset) { - QuicUdpSocketApi::ReadPacketResult result; - result.packet_info.SetDroppedPackets(100); - result.packet_buffer.buffer_len = 100; - result.ok = true; - - result.Reset(/*packet_buffer_length=*/200); - - EXPECT_FALSE(result.ok); - EXPECT_FALSE( - result.packet_info.HasValue(QuicUdpPacketInfoBit::DROPPED_PACKETS)); - EXPECT_EQ(200u, result.packet_buffer.buffer_len); -} - -TEST_P(QuicUdpSocketTest, ReadPacketOnly) { - const size_t kPacketSize = 512; - memset(client_packet_buffer_, '-', kPacketSize); - ASSERT_EQ(WriteResult(WRITE_STATUS_OK, kPacketSize), - SendPacketFromClient(kPacketSize)); - - QuicUdpSocketApi::ReadPacketResult read_result = - ReadPacketFromServer(/*packet_info_interested=*/BitMask64()); - ASSERT_TRUE(read_result.ok); - ASSERT_EQ(kPacketSize, read_result.packet_buffer.buffer_len); - ASSERT_EQ(0, ComparePacketBuffers(kPacketSize)); -} - -TEST_P(QuicUdpSocketTest, ReadTruncated) { - const size_t kPacketSize = kDefaultMaxPacketSize + 1; - memset(client_packet_buffer_, '*', kPacketSize); - ASSERT_EQ(WriteResult(WRITE_STATUS_OK, kPacketSize), - SendPacketFromClient(kPacketSize)); - - QuicUdpSocketApi::ReadPacketResult read_result = - ReadPacketFromServer(/*packet_info_interested=*/BitMask64()); - ASSERT_FALSE(read_result.ok); -} - -TEST_P(QuicUdpSocketTest, ReadDroppedPackets) { - const size_t kPacketSize = kDefaultMaxPacketSize; - memset(client_packet_buffer_, '-', kPacketSize); - ASSERT_EQ(WriteResult(WRITE_STATUS_OK, kPacketSize), - SendPacketFromClient(kPacketSize)); - ASSERT_EQ(WriteResult(WRITE_STATUS_OK, kPacketSize), - SendPacketFromClient(kPacketSize)); - - // Read the first packet without enabling DROPPED_PACKETS. - QuicUdpSocketApi::ReadPacketResult read_result = - ReadPacketFromServer(BitMask64(QuicUdpPacketInfoBit::DROPPED_PACKETS)); - ASSERT_TRUE(read_result.ok); - ASSERT_EQ(kPacketSize, read_result.packet_buffer.buffer_len); - ASSERT_EQ(0, ComparePacketBuffers(kPacketSize)); - ASSERT_FALSE( - read_result.packet_info.HasValue(QuicUdpPacketInfoBit::DROPPED_PACKETS)); - - // Enable DROPPED_PACKETS and read the second packet. - if (!api_.EnableDroppedPacketCount(fd_server_)) { - QUIC_LOG(INFO) << "DROPPED_PACKETS is not supported"; - return; - } - read_result = - ReadPacketFromServer(BitMask64(QuicUdpPacketInfoBit::DROPPED_PACKETS)); - ASSERT_TRUE(read_result.ok); - ASSERT_EQ(kPacketSize, read_result.packet_buffer.buffer_len); - ASSERT_EQ(0, ComparePacketBuffers(kPacketSize)); - if (read_result.packet_info.HasValue(QuicUdpPacketInfoBit::DROPPED_PACKETS)) { - EXPECT_EQ(0u, read_result.packet_info.dropped_packets()); - } -} - -TEST_P(QuicUdpSocketTest, ReadSelfIp) { - const QuicUdpPacketInfoBit self_ip_bit = - (address_family_ == AF_INET) ? QuicUdpPacketInfoBit::V4_SELF_IP - : QuicUdpPacketInfoBit::V6_SELF_IP; - - const size_t kPacketSize = 512; - memset(client_packet_buffer_, '&', kPacketSize); - ASSERT_EQ(WriteResult(WRITE_STATUS_OK, kPacketSize), - SendPacketFromClient(kPacketSize)); - - QuicUdpSocketApi::ReadPacketResult read_result = - ReadPacketFromServer(BitMask64(self_ip_bit)); - ASSERT_TRUE(read_result.ok); - ASSERT_EQ(kPacketSize, read_result.packet_buffer.buffer_len); - ASSERT_EQ(0, ComparePacketBuffers(kPacketSize)); - ASSERT_TRUE(read_result.packet_info.HasValue(self_ip_bit)); - EXPECT_EQ(Loopback(), (address_family_ == AF_INET) - ? read_result.packet_info.self_v4_ip() - : read_result.packet_info.self_v6_ip()); -} - -TEST_P(QuicUdpSocketTest, ReadReceiveTimestamp) { - const size_t kPacketSize = kDefaultMaxPacketSize; - memset(client_packet_buffer_, '-', kPacketSize); - ASSERT_EQ(WriteResult(WRITE_STATUS_OK, kPacketSize), - SendPacketFromClient(kPacketSize)); - ASSERT_EQ(WriteResult(WRITE_STATUS_OK, kPacketSize), - SendPacketFromClient(kPacketSize)); - - // Read the first packet without enabling RECV_TIMESTAMP. - QuicUdpSocketApi::ReadPacketResult read_result = - ReadPacketFromServer(BitMask64(QuicUdpPacketInfoBit::RECV_TIMESTAMP)); - ASSERT_TRUE(read_result.ok); - ASSERT_EQ(kPacketSize, read_result.packet_buffer.buffer_len); - ASSERT_EQ(0, ComparePacketBuffers(kPacketSize)); - ASSERT_FALSE( - read_result.packet_info.HasValue(QuicUdpPacketInfoBit::RECV_TIMESTAMP)); - - // Enable RECV_TIMESTAMP and read the second packet. - if (!api_.EnableReceiveTimestamp(fd_server_)) { - QUIC_LOG(INFO) << "RECV_TIMESTAMP is not supported"; - return; - } - read_result = - ReadPacketFromServer(BitMask64(QuicUdpPacketInfoBit::RECV_TIMESTAMP)); - ASSERT_TRUE(read_result.ok); - ASSERT_EQ(kPacketSize, read_result.packet_buffer.buffer_len); - ASSERT_EQ(0, ComparePacketBuffers(kPacketSize)); - ASSERT_TRUE( - read_result.packet_info.HasValue(QuicUdpPacketInfoBit::RECV_TIMESTAMP)); - QuicWallTime recv_timestamp = read_result.packet_info.receive_timestamp(); - // 1577836800 is the unix seconds for 2020-01-01 - EXPECT_TRUE( - QuicWallTime::FromUNIXSeconds(1577836800).IsBefore(recv_timestamp)); -} - -TEST_P(QuicUdpSocketTest, Ttl) { - const size_t kPacketSize = 512; - memset(client_packet_buffer_, '$', kPacketSize); - ASSERT_EQ(WriteResult(WRITE_STATUS_OK, kPacketSize), - SendPacketFromClientWithTtl(kPacketSize, 13)); - ASSERT_EQ(WriteResult(WRITE_STATUS_OK, kPacketSize), - SendPacketFromClientWithTtl(kPacketSize, 13)); - - // Read the first packet without enabling ttl reporting. - QuicUdpSocketApi::ReadPacketResult read_result = - ReadPacketFromServer(BitMask64(QuicUdpPacketInfoBit::TTL)); - ASSERT_TRUE(read_result.ok); - ASSERT_EQ(kPacketSize, read_result.packet_buffer.buffer_len); - ASSERT_EQ(0, ComparePacketBuffers(kPacketSize)); - ASSERT_FALSE(read_result.packet_info.HasValue(QuicUdpPacketInfoBit::TTL)); - - // Enable ttl reporting and read the second packet. - if (!((address_family_ == AF_INET) - ? api_.EnableReceiveTtlForV4(fd_server_) - : api_.EnableReceiveTtlForV6(fd_server_))) { - QUIC_LOG(INFO) << "TTL is not supported for address family " - << address_family_; - return; - } - - read_result = ReadPacketFromServer(BitMask64(QuicUdpPacketInfoBit::TTL)); - ASSERT_TRUE(read_result.ok); - ASSERT_EQ(kPacketSize, read_result.packet_buffer.buffer_len); - ASSERT_EQ(0, ComparePacketBuffers(kPacketSize)); - ASSERT_TRUE(read_result.packet_info.HasValue(QuicUdpPacketInfoBit::TTL)); - EXPECT_EQ(13, read_result.packet_info.ttl()); -} - -TEST_P(QuicUdpSocketTest, ReadMultiplePackets) { - const QuicUdpPacketInfoBit self_ip_bit = - (address_family_ == AF_INET) ? QuicUdpPacketInfoBit::V4_SELF_IP - : QuicUdpPacketInfoBit::V6_SELF_IP; - const size_t kPacketSize = kDefaultMaxPacketSize; - const size_t kNumPackets = 90; - for (size_t i = 0; i < kNumPackets; ++i) { - memset(client_packet_buffer_, ' ' + i, kPacketSize); - ASSERT_EQ(WriteResult(WRITE_STATUS_OK, kPacketSize), - SendPacketFromClient(kPacketSize)); - } - - const size_t kNumPacketsPerRead = 16; - size_t total_packets_read = 0; - while (total_packets_read < kNumPackets) { - std::unique_ptr<ReadBuffers[]> read_buffers = - std::make_unique<ReadBuffers[]>(kNumPacketsPerRead); - QuicUdpSocketApi::ReadPacketResults results(kNumPacketsPerRead); - for (size_t i = 0; i < kNumPacketsPerRead; ++i) { - results[i].packet_buffer.buffer = read_buffers[i].packet_buffer; - results[i].packet_buffer.buffer_len = - sizeof(read_buffers[i].packet_buffer); - - results[i].control_buffer.buffer = read_buffers[i].control_buffer; - results[i].control_buffer.buffer_len = - sizeof(read_buffers[i].control_buffer); - } - size_t packets_read = - api_.ReadMultiplePackets(fd_server_, BitMask64(self_ip_bit), &results); - if (packets_read == 0) { - ASSERT_TRUE( - api_.WaitUntilReadable(fd_server_, QuicTime::Delta::FromSeconds(5))); - packets_read = api_.ReadMultiplePackets(fd_server_, - BitMask64(self_ip_bit), &results); - ASSERT_GT(packets_read, 0u); - } - - for (size_t i = 0; i < packets_read; ++i) { - const auto& result = results[i]; - ASSERT_TRUE(result.ok); - ASSERT_EQ(kPacketSize, result.packet_buffer.buffer_len); - ASSERT_TRUE(VerifyBufferIsFilledWith(result.packet_buffer.buffer, - result.packet_buffer.buffer_len, - ' ' + total_packets_read)); - ASSERT_TRUE(result.packet_info.HasValue(self_ip_bit)); - EXPECT_EQ(Loopback(), (address_family_ == AF_INET) - ? result.packet_info.self_v4_ip() - : result.packet_info.self_v6_ip()); - total_packets_read++; - } - } -} - -TEST_P(QuicUdpSocketTest, ReadMultiplePacketsSomeTruncated) { - const QuicUdpPacketInfoBit self_ip_bit = - (address_family_ == AF_INET) ? QuicUdpPacketInfoBit::V4_SELF_IP - : QuicUdpPacketInfoBit::V6_SELF_IP; - const size_t kPacketSize = kDefaultMaxPacketSize; - const size_t kNumPackets = 90; - for (size_t i = 0; i < kNumPackets; ++i) { - memset(client_packet_buffer_, ' ' + i, kPacketSize); - ASSERT_EQ(WriteResult(WRITE_STATUS_OK, kPacketSize), - SendPacketFromClient(kPacketSize)); - } - - const size_t kNumPacketsPerRead = 16; - size_t total_packets_read = 0; // Including truncated packets. - while (total_packets_read < kNumPackets) { - std::unique_ptr<ReadBuffers[]> read_buffers = - std::make_unique<ReadBuffers[]>(kNumPacketsPerRead); - QuicUdpSocketApi::ReadPacketResults results(kNumPacketsPerRead); - // Use small packet buffer for all even-numbered packets and expect them to - // be truncated. - auto is_truncated = [total_packets_read](size_t i) { - return ((total_packets_read + i) % 2) == 1; - }; - - for (size_t i = 0; i < kNumPacketsPerRead; ++i) { - results[i].packet_buffer.buffer = read_buffers[i].packet_buffer; - results[i].packet_buffer.buffer_len = - is_truncated(i) ? kPacketSize - 1 - : sizeof(read_buffers[i].packet_buffer); - - results[i].control_buffer.buffer = read_buffers[i].control_buffer; - results[i].control_buffer.buffer_len = - sizeof(read_buffers[i].control_buffer); - } - size_t packets_read = - api_.ReadMultiplePackets(fd_server_, BitMask64(self_ip_bit), &results); - if (packets_read == 0) { - ASSERT_TRUE( - api_.WaitUntilReadable(fd_server_, QuicTime::Delta::FromSeconds(5))); - packets_read = api_.ReadMultiplePackets(fd_server_, - BitMask64(self_ip_bit), &results); - ASSERT_GT(packets_read, 0u); - } - - for (size_t i = 0; i < packets_read; ++i) { - const auto& result = results[i]; - if (is_truncated(i)) { - ASSERT_FALSE(result.ok); - } else { - ASSERT_TRUE(result.ok); - ASSERT_EQ(kPacketSize, result.packet_buffer.buffer_len); - ASSERT_TRUE(VerifyBufferIsFilledWith(result.packet_buffer.buffer, - result.packet_buffer.buffer_len, - ' ' + total_packets_read)); - ASSERT_TRUE(result.packet_info.HasValue(self_ip_bit)); - EXPECT_EQ(Loopback(), (address_family_ == AF_INET) - ? result.packet_info.self_v4_ip() - : result.packet_info.self_v6_ip()); - } - total_packets_read++; - } - } -} - -} // namespace test -} // namespace quic
diff --git a/quic/platform/api/quic_bug_tracker.h b/quic/platform/api/quic_bug_tracker.h index 23bcb7b..cffa6e5 100644 --- a/quic/platform/api/quic_bug_tracker.h +++ b/quic/platform/api/quic_bug_tracker.h
@@ -5,11 +5,11 @@ #ifndef QUICHE_QUIC_PLATFORM_API_QUIC_BUG_TRACKER_H_ #define QUICHE_QUIC_PLATFORM_API_QUIC_BUG_TRACKER_H_ -#include "net/quic/platform/impl/quic_bug_tracker_impl.h" +#include "common/platform/api/quiche_bug_tracker.h" -#define QUIC_BUG QUIC_BUG_IMPL -#define QUIC_BUG_IF QUIC_BUG_IF_IMPL -#define QUIC_PEER_BUG QUIC_PEER_BUG_IMPL -#define QUIC_PEER_BUG_IF QUIC_PEER_BUG_IF_IMPL +#define QUIC_BUG QUICHE_BUG +#define QUIC_BUG_IF QUICHE_BUG_IF +#define QUIC_PEER_BUG QUICHE_PEER_BUG +#define QUIC_PEER_BUG_IF QUICHE_PEER_BUG_IF #endif // QUICHE_QUIC_PLATFORM_API_QUIC_BUG_TRACKER_H_
diff --git a/quic/qbone/qbone_client.cc b/quic/qbone/qbone_client.cc index 464c053..d0daf95 100644 --- a/quic/qbone/qbone_client.cc +++ b/quic/qbone/qbone_client.cc
@@ -11,6 +11,7 @@ #include "quic/core/quic_epoll_connection_helper.h" #include "quic/platform/api/quic_epoll.h" #include "quic/platform/api/quic_exported_stats.h" +#include "quic/platform/api/quic_testvalue.h" #include "quic/qbone/qbone_stream.h" namespace quic { @@ -20,7 +21,7 @@ QboneClient* client) { std::unique_ptr<QuicClientBase::NetworkHelper> helper = std::make_unique<QuicClientEpollNetworkHelper>(epoll_server, client); - testing::testvalue::Adjust("QboneClient/network_helper", &helper); + quic::AdjustTestValue("QboneClient/network_helper", &helper); return helper; } } // namespace
diff --git a/quic/qbone/qbone_session_base.cc b/quic/qbone/qbone_session_base.cc index 0badb91..e984196 100644 --- a/quic/qbone/qbone_session_base.cc +++ b/quic/qbone/qbone_session_base.cc
@@ -15,10 +15,11 @@ #include "quic/core/quic_types.h" #include "quic/platform/api/quic_exported_stats.h" #include "quic/platform/api/quic_logging.h" +#include "quic/platform/api/quic_testvalue.h" #include "quic/qbone/platform/icmp_packet.h" #include "quic/qbone/qbone_constants.h" -ABSL_FLAG( +DEFINE_QUIC_COMMAND_LINE_FLAG( bool, qbone_close_ephemeral_frames, true, @@ -212,7 +213,7 @@ void QboneSessionBase::set_writer(QbonePacketWriter* writer) { writer_ = writer; - testing::testvalue::Adjust("quic_QbonePacketWriter", &writer_); + quic::AdjustTestValue("quic_QbonePacketWriter", &writer_); } } // namespace quic
diff --git a/quic/qbone/qbone_stream.cc b/quic/qbone/qbone_stream.cc index 43aab4d..5aac3e7 100644 --- a/quic/qbone/qbone_stream.cc +++ b/quic/qbone/qbone_stream.cc
@@ -11,7 +11,10 @@ #include "quic/qbone/qbone_constants.h" #include "quic/qbone/qbone_session_base.h" -ABSL_FLAG(int, qbone_stream_ttl_secs, 3, "The QBONE Stream TTL in seconds."); +DEFINE_QUIC_COMMAND_LINE_FLAG(int, + qbone_stream_ttl_secs, + 3, + "The QBONE Stream TTL in seconds."); namespace quic {
diff --git a/spdy/core/spdy_framer.cc b/spdy/core/spdy_framer.cc index 19e53b6..bc7cd17 100644 --- a/spdy/core/spdy_framer.cc +++ b/spdy/core/spdy_framer.cc
@@ -407,7 +407,6 @@ return *(frame_ir_.get()); } -// TODO(yasong): remove all the static_casts. std::unique_ptr<SpdyFrameSequence> SpdyFramer::CreateIterator( SpdyFramer* framer, std::unique_ptr<const SpdyFrameIR> frame_ir) { @@ -419,8 +418,8 @@ } case SpdyFrameType::PUSH_PROMISE: { return std::make_unique<SpdyPushPromiseFrameIterator>( - framer, absl::WrapUnique( - static_cast<const SpdyPushPromiseIR*>(frame_ir.release()))); + framer, absl::WrapUnique(static_cast<const SpdyPushPromiseIR*>( + frame_ir.release()))); } case SpdyFrameType::DATA: { SPDY_DVLOG(1) << "Serialize a stream end DATA frame for VTL";