#ifdef UNSAFE_BUFFERS_BUILD
#pragma allow_unsafe_buffers
#endif
#include "net/quic/bidirectional_stream_quic_impl.h"
#include <memory>
#include <utility>
#include "base/memory/ptr_util.h"
#include "base/memory/raw_ptr.h"
#include "base/run_loop.h"
#include "base/strings/strcat.h"
#include "base/strings/string_number_conversions.h"
#include "base/task/single_thread_task_runner.h"
#include "base/time/default_tick_clock.h"
#include "base/time/time.h"
#include "base/timer/timer.h"
#include "net/base/completion_once_callback.h"
#include "net/base/connection_endpoint_metadata.h"
#include "net/base/ip_address.h"
#include "net/base/load_timing_info.h"
#include "net/base/load_timing_info_test_util.h"
#include "net/base/net_errors.h"
#include "net/base/network_anonymization_key.h"
#include "net/base/privacy_mode.h"
#include "net/base/proxy_chain.h"
#include "net/base/session_usage.h"
#include "net/dns/public/host_resolver_results.h"
#include "net/dns/public/secure_dns_policy.h"
#include "net/http/bidirectional_stream_request_info.h"
#include "net/http/transport_security_state.h"
#include "net/log/net_log.h"
#include "net/log/net_log_event_type.h"
#include "net/log/test_net_log.h"
#include "net/log/test_net_log_util.h"
#include "net/quic/address_utils.h"
#include "net/quic/mock_crypto_client_stream_factory.h"
#include "net/quic/quic_chromium_alarm_factory.h"
#include "net/quic/quic_chromium_connection_helper.h"
#include "net/quic/quic_chromium_packet_reader.h"
#include "net/quic/quic_chromium_packet_writer.h"
#include "net/quic/quic_context.h"
#include "net/quic/quic_crypto_client_config_handle.h"
#include "net/quic/quic_http_utils.h"
#include "net/quic/quic_server_info.h"
#include "net/quic/quic_session_key.h"
#include "net/quic/quic_session_pool.h"
#include "net/quic/quic_test_packet_maker.h"
#include "net/quic/quic_test_packet_printer.h"
#include "net/quic/test_quic_crypto_client_config_handle.h"
#include "net/quic/test_task_runner.h"
#include "net/socket/socket_test_util.h"
#include "net/ssl/ssl_config_service_defaults.h"
#include "net/test/gtest_util.h"
#include "net/test/test_with_task_environment.h"
#include "net/third_party/quiche/src/quiche/common/http/http_header_block.h"
#include "net/third_party/quiche/src/quiche/common/quiche_text_utils.h"
#include "net/third_party/quiche/src/quiche/quic/core/crypto/crypto_protocol.h"
#include "net/third_party/quiche/src/quiche/quic/core/crypto/quic_decrypter.h"
#include "net/third_party/quiche/src/quiche/quic/core/crypto/quic_encrypter.h"
#include "net/third_party/quiche/src/quiche/quic/core/http/spdy_utils.h"
#include "net/third_party/quiche/src/quiche/quic/core/quic_connection.h"
#include "net/third_party/quiche/src/quiche/quic/test_tools/crypto_test_utils.h"
#include "net/third_party/quiche/src/quiche/quic/test_tools/mock_clock.h"
#include "net/third_party/quiche/src/quiche/quic/test_tools/mock_connection_id_generator.h"
#include "net/third_party/quiche/src/quiche/quic/test_tools/mock_random.h"
#include "net/third_party/quiche/src/quiche/quic/test_tools/qpack/qpack_test_utils.h"
#include "net/third_party/quiche/src/quiche/quic/test_tools/quic_connection_peer.h"
#include "net/third_party/quiche/src/quiche/quic/test_tools/quic_session_peer.h"
#include "net/third_party/quiche/src/quiche/quic/test_tools/quic_spdy_session_peer.h"
#include "net/third_party/quiche/src/quiche/quic/test_tools/quic_test_utils.h"
#include "net/traffic_annotation/network_traffic_annotation_test_helper.h"
#include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "url/scheme_host_port.h"
#include "url/url_constants.h"
namespace net::test {
namespace {
const char kUploadData[] = …;
const char kDefaultServerHostName[] = …;
const uint16_t kDefaultServerPort = …;
const size_t kReadBufferSize = …;
enum DelegateMethod { … };
class TestDelegateBase : public BidirectionalStreamImpl::Delegate { … };
class DeleteStreamDelegate : public TestDelegateBase { … };
}
class BidirectionalStreamQuicImplTest
: public ::testing::TestWithParam<quic::ParsedQuicVersion>,
public WithTaskEnvironment { … };
INSTANTIATE_TEST_SUITE_P(…);
TEST_P(BidirectionalStreamQuicImplTest, GetRequest) { … }
TEST_P(BidirectionalStreamQuicImplTest, LoadTimingTwoRequests) { … }
TEST_P(BidirectionalStreamQuicImplTest, CoalesceDataBuffersNotHeadersFrame) { … }
TEST_P(BidirectionalStreamQuicImplTest,
SendDataCoalesceDataBufferAndHeaderFrame) { … }
TEST_P(BidirectionalStreamQuicImplTest,
SendvDataCoalesceDataBuffersAndHeaderFrame) { … }
TEST_P(BidirectionalStreamQuicImplTest,
SendDataWriteErrorCoalesceDataBufferAndHeaderFrame) { … }
TEST_P(BidirectionalStreamQuicImplTest,
SendvDataWriteErrorCoalesceDataBufferAndHeaderFrame) { … }
TEST_P(BidirectionalStreamQuicImplTest, PostRequest) { … }
TEST_P(BidirectionalStreamQuicImplTest, EarlyDataOverrideRequest) { … }
TEST_P(BidirectionalStreamQuicImplTest, InterleaveReadDataAndSendData) { … }
TEST_P(BidirectionalStreamQuicImplTest, ServerSendsRstAfterHeaders) { … }
TEST_P(BidirectionalStreamQuicImplTest, ServerSendsRstAfterReadData) { … }
TEST_P(BidirectionalStreamQuicImplTest, SessionClosedBeforeReadData) { … }
TEST_P(BidirectionalStreamQuicImplTest, SessionClosedBeforeStartConfirmed) { … }
TEST_P(BidirectionalStreamQuicImplTest, SessionClosedBeforeStartNotConfirmed) { … }
TEST_P(BidirectionalStreamQuicImplTest, SessionCloseDuringOnStreamReady) { … }
TEST_P(BidirectionalStreamQuicImplTest, DeleteStreamDuringOnStreamReady) { … }
TEST_P(BidirectionalStreamQuicImplTest, DeleteStreamAfterReadData) { … }
TEST_P(BidirectionalStreamQuicImplTest, DeleteStreamDuringOnHeadersReceived) { … }
TEST_P(BidirectionalStreamQuicImplTest, DeleteStreamDuringOnDataRead) { … }
TEST_P(BidirectionalStreamQuicImplTest, AsyncFinRead) { … }
TEST_P(BidirectionalStreamQuicImplTest, DeleteStreamDuringOnTrailersReceived) { … }
TEST_P(BidirectionalStreamQuicImplTest, ReleaseStreamFails) { … }
}