| Index: webrtc/p2p/quic/quictransportchannel_unittest.cc
|
| diff --git a/webrtc/p2p/quic/quictransportchannel_unittest.cc b/webrtc/p2p/quic/quictransportchannel_unittest.cc
|
| index 45d3db87f34758c77232cdf0e9f46dd621b93b38..dba07ebf2b560440bf0bb1acd2bffa93256f4a41 100644
|
| --- a/webrtc/p2p/quic/quictransportchannel_unittest.cc
|
| +++ b/webrtc/p2p/quic/quictransportchannel_unittest.cc
|
| @@ -95,7 +95,8 @@ class QuicTestPeer : public sigslot::has_slots<> {
|
| : name_(name),
|
| bytes_sent_(0),
|
| ice_channel_(name_, 0),
|
| - quic_channel_(&ice_channel_) {
|
| + quic_channel_(&ice_channel_),
|
| + incoming_stream_count_(0) {
|
| quic_channel_.SignalReadPacket.connect(
|
| this, &QuicTestPeer::OnTransportChannelReadPacket);
|
| quic_channel_.SignalIncomingStream.connect(this,
|
| @@ -204,6 +205,8 @@ class QuicTestPeer : public sigslot::has_slots<> {
|
|
|
| ReliableQuicStream* incoming_quic_stream() { return incoming_quic_stream_; }
|
|
|
| + size_t incoming_stream_count() const { return incoming_stream_count_; }
|
| +
|
| bool signal_closed_emitted() const { return signal_closed_emitted_; }
|
|
|
| private:
|
| @@ -220,6 +223,7 @@ class QuicTestPeer : public sigslot::has_slots<> {
|
| }
|
| void OnIncomingStream(ReliableQuicStream* stream) {
|
| incoming_quic_stream_ = stream;
|
| + ++incoming_stream_count_;
|
| }
|
| void OnClosed() { signal_closed_emitted_ = true; }
|
|
|
| @@ -230,6 +234,7 @@ class QuicTestPeer : public sigslot::has_slots<> {
|
| QuicTransportChannel quic_channel_; // QUIC channel to test.
|
| std::unique_ptr<rtc::SSLFingerprint> local_fingerprint_;
|
| ReliableQuicStream* incoming_quic_stream_ = nullptr;
|
| + size_t incoming_stream_count_;
|
| bool signal_closed_emitted_ = false;
|
| };
|
|
|
| @@ -514,6 +519,29 @@ TEST_F(QuicTransportChannelTest, CreateOutgoingAndIncomingQuicStream) {
|
| EXPECT_EQ(stream->id(), peer2_.incoming_quic_stream()->id());
|
| }
|
|
|
| +// Test that if the QuicTransportChannel is unwritable, then all outgoing QUIC
|
| +// streams can send data once the QuicTransprotChannel becomes writable again.
|
| +TEST_F(QuicTransportChannelTest, OutgoingQuicStreamSendsDataAfterReconnect) {
|
| + Connect();
|
| + ASSERT_TRUE_WAIT(quic_connected(), kTimeoutMs);
|
| + ReliableQuicStream* stream1 = peer1_.quic_channel()->CreateQuicStream();
|
| + ASSERT_NE(nullptr, stream1);
|
| + ReliableQuicStream* stream2 = peer1_.quic_channel()->CreateQuicStream();
|
| + ASSERT_NE(nullptr, stream2);
|
| +
|
| + peer1_.ice_channel()->SetWritable(false);
|
| + stream1->Write("First", 5);
|
| + EXPECT_EQ(5u, stream1->queued_data_bytes());
|
| + stream2->Write("Second", 6);
|
| + EXPECT_EQ(6u, stream2->queued_data_bytes());
|
| + EXPECT_EQ(0u, peer2_.incoming_stream_count());
|
| +
|
| + peer1_.ice_channel()->SetWritable(true);
|
| + EXPECT_EQ_WAIT(0u, stream1->queued_data_bytes(), kTimeoutMs);
|
| + EXPECT_EQ_WAIT(0u, stream2->queued_data_bytes(), kTimeoutMs);
|
| + EXPECT_EQ_WAIT(2u, peer2_.incoming_stream_count(), kTimeoutMs);
|
| +}
|
| +
|
| // Test that SignalClosed is emitted when the QuicConnection closes.
|
| TEST_F(QuicTransportChannelTest, SignalClosedEmitted) {
|
| Connect();
|
|
|