Re-write some quic_stream_test and enable TLS blocked tests.

gfe-relnote: test only, not protected.
PiperOrigin-RevId: 268926212
Change-Id: I4e86c141bdb36dd96a8177a4b8d6603416e08366
diff --git a/quic/core/quic_stream_test.cc b/quic/core/quic_stream_test.cc
index 3b0becc..97863ad 100644
--- a/quic/core/quic_stream_test.cc
+++ b/quic/core/quic_stream_test.cc
@@ -8,6 +8,8 @@
 #include <string>
 
 #include "net/third_party/quiche/src/quic/core/quic_connection.h"
+#include "net/third_party/quiche/src/quic/core/quic_constants.h"
+#include "net/third_party/quiche/src/quic/core/quic_types.h"
 #include "net/third_party/quiche/src/quic/core/quic_utils.h"
 #include "net/third_party/quiche/src/quic/core/quic_versions.h"
 #include "net/third_party/quiche/src/quic/core/quic_write_blocked_list.h"
@@ -72,8 +74,7 @@
 class QuicStreamTestBase : public QuicTestWithParam<ParsedQuicVersion> {
  public:
   QuicStreamTestBase()
-      : initial_flow_control_window_bytes_(kMaxOutgoingPacketSize),
-        zero_(QuicTime::Delta::Zero()),
+      : zero_(QuicTime::Delta::Zero()),
         supported_versions_(AllSupportedVersions()) {}
 
   void Initialize() {
@@ -83,11 +84,13 @@
         &helper_, &alarm_factory_, Perspective::IS_SERVER, version_vector);
     connection_->AdvanceTime(QuicTime::Delta::FromSeconds(1));
     session_ = std::make_unique<StrictMock<MockQuicSession>>(connection_);
+    session_->Initialize();
 
-    // New streams rely on having the peer's flow control receive window
-    // negotiated in the config.
-    QuicConfigPeer::SetReceivedInitialStreamFlowControlWindow(
-        session_->config(), initial_flow_control_window_bytes_);
+    QuicConfigPeer::SetReceivedInitialSessionFlowControlWindow(
+        session_->config(), kMinimumFlowControlSendWindow);
+    QuicConfigPeer::SetReceivedMaxIncomingUnidirectionalStreams(
+        session_->config(), 10);
+    session_->OnConfigNegotiated();
 
     stream_ = new TestStream(kTestStreamId, session_.get(), BIDIRECTIONAL);
     EXPECT_NE(nullptr, stream_);
@@ -103,10 +106,6 @@
   bool fin_sent() { return stream_->fin_sent(); }
   bool rst_sent() { return stream_->rst_sent(); }
 
-  void set_initial_flow_control_window_bytes(uint32_t val) {
-    initial_flow_control_window_bytes_ = val;
-  }
-
   bool HasWriteBlockedStreams() {
     return write_blocked_list_->HasWriteBlockedSpecialStream() ||
            write_blocked_list_->HasWriteBlockedDataStreams();
@@ -140,7 +139,6 @@
   std::unique_ptr<MockQuicSession> session_;
   TestStream* stream_;
   QuicWriteBlockedList* write_blocked_list_;
-  uint32_t initial_flow_control_window_bytes_;
   QuicTime::Delta zero_;
   ParsedQuicVersionVector supported_versions_;
   QuicStreamId kTestStreamId =
@@ -506,8 +504,6 @@
 }
 
 TEST_P(QuicStreamTest, StreamFlowControlMultipleWindowUpdates) {
-  set_initial_flow_control_window_bytes(1000);
-
   Initialize();
 
   // If we receive multiple WINDOW_UPDATES (potentially out of order), then we
@@ -515,12 +511,12 @@
 
   // Initially should be default.
   EXPECT_EQ(
-      initial_flow_control_window_bytes_,
+      kMinimumFlowControlSendWindow,
       QuicFlowControllerPeer::SendWindowOffset(stream_->flow_controller()));
 
   // Check a single WINDOW_UPDATE results in correct offset.
   QuicWindowUpdateFrame window_update_1(kInvalidControlFrameId, stream_->id(),
-                                        1234);
+                                        kMinimumFlowControlSendWindow + 5);
   stream_->OnWindowUpdateFrame(window_update_1);
   EXPECT_EQ(
       window_update_1.byte_offset,
@@ -531,7 +527,7 @@
   QuicWindowUpdateFrame window_update_2(kInvalidControlFrameId, stream_->id(),
                                         1);
   QuicWindowUpdateFrame window_update_3(kInvalidControlFrameId, stream_->id(),
-                                        9999);
+                                        kMinimumFlowControlSendWindow + 10);
   QuicWindowUpdateFrame window_update_4(kInvalidControlFrameId, stream_->id(),
                                         5678);
   stream_->OnWindowUpdateFrame(window_update_2);
@@ -723,11 +719,6 @@
 }
 
 TEST_P(QuicParameterizedStreamTest, SetDrainingIncomingOutgoing) {
-  if (GetParam().handshake_protocol == PROTOCOL_TLS1_3) {
-    // TODO(nharper, b/112643533): Figure out why this test fails when TLS is
-    // enabled and fix it.
-    return;
-  }
   // Don't have incoming data consumed.
   Initialize();
 
@@ -757,11 +748,6 @@
 }
 
 TEST_P(QuicParameterizedStreamTest, SetDrainingOutgoingIncoming) {
-  if (GetParam().handshake_protocol == PROTOCOL_TLS1_3) {
-    // TODO(nharper, b/112643533): Figure out why this test fails when TLS is
-    // enabled and fix it.
-    return;
-  }
   // Don't have incoming data consumed.
   Initialize();
 
@@ -1023,8 +1009,6 @@
 TEST_P(QuicStreamTest, WriteBufferedData) {
   // Set buffered data low water mark to be 100.
   SetQuicFlag(FLAGS_quic_buffered_data_threshold, 100);
-  // Do not stream level flow control block this stream.
-  set_initial_flow_control_window_bytes(500000);
 
   Initialize();
   std::string data(1024, 'a');
@@ -1159,8 +1143,6 @@
 TEST_P(QuicStreamTest, WriteMemSlices) {
   // Set buffered data low water mark to be 100.
   SetQuicFlag(FLAGS_quic_buffered_data_threshold, 100);
-  // Do not flow control block this stream.
-  set_initial_flow_control_window_bytes(500000);
 
   Initialize();
   char data[1024];
@@ -1403,47 +1385,60 @@
 }
 
 TEST_P(QuicStreamTest, MarkConnectionLevelWriteBlockedOnWindowUpdateFrame) {
-  // Set a small initial control window size.
-  set_initial_flow_control_window_bytes(100);
   Initialize();
 
+  // Set the config to a small value so that a newly created stream has small
+  // send flow control window.
+  QuicConfigPeer::SetReceivedInitialStreamFlowControlWindow(session_->config(),
+                                                            100);
+  auto stream = new TestStream(GetNthClientInitiatedBidirectionalStreamId(
+                                   GetParam().transport_version, 2),
+                               session_.get(), BIDIRECTIONAL);
+  session_->ActivateStream(QuicWrapUnique(stream));
+
   EXPECT_CALL(*session_, WritevData(_, _, _, _, _))
       .WillRepeatedly(Invoke(MockQuicSession::ConsumeData));
   EXPECT_CALL(*connection_, SendControlFrame(_))
       .WillOnce(Invoke(&ClearControlFrame));
   std::string data(1024, '.');
-  stream_->WriteOrBufferData(data, false, nullptr);
+  stream->WriteOrBufferData(data, false, nullptr);
   EXPECT_FALSE(HasWriteBlockedStreams());
 
   QuicWindowUpdateFrame window_update(kInvalidControlFrameId, stream_->id(),
                                       1234);
 
-  stream_->OnWindowUpdateFrame(window_update);
+  stream->OnWindowUpdateFrame(window_update);
   // Verify stream is marked connection level write blocked.
   EXPECT_TRUE(HasWriteBlockedStreams());
-  EXPECT_TRUE(stream_->HasBufferedData());
+  EXPECT_TRUE(stream->HasBufferedData());
 }
 
 // Regression test for b/73282665.
 TEST_P(QuicStreamTest,
        MarkConnectionLevelWriteBlockedOnWindowUpdateFrameWithNoBufferedData) {
-  // Set a small initial flow control window size.
-  const uint32_t kSmallWindow = 100;
-  set_initial_flow_control_window_bytes(kSmallWindow);
   Initialize();
 
-  std::string data(kSmallWindow, '.');
+  // Set the config to a small value so that a newly created stream has small
+  // send flow control window.
+  QuicConfigPeer::SetReceivedInitialStreamFlowControlWindow(session_->config(),
+                                                            100);
+  auto stream = new TestStream(GetNthClientInitiatedBidirectionalStreamId(
+                                   GetParam().transport_version, 2),
+                               session_.get(), BIDIRECTIONAL);
+  session_->ActivateStream(QuicWrapUnique(stream));
+
+  std::string data(100, '.');
   EXPECT_CALL(*session_, WritevData(_, _, _, _, _))
       .WillRepeatedly(Invoke(MockQuicSession::ConsumeData));
   EXPECT_CALL(*connection_, SendControlFrame(_))
       .WillOnce(Invoke(&ClearControlFrame));
-  stream_->WriteOrBufferData(data, false, nullptr);
+  stream->WriteOrBufferData(data, false, nullptr);
   EXPECT_FALSE(HasWriteBlockedStreams());
 
   QuicWindowUpdateFrame window_update(kInvalidControlFrameId, stream_->id(),
                                       120);
-  stream_->OnWindowUpdateFrame(window_update);
-  EXPECT_FALSE(stream_->HasBufferedData());
+  stream->OnWindowUpdateFrame(window_update);
+  EXPECT_FALSE(stream->HasBufferedData());
   // Verify stream is marked as blocked although there is no buffered data.
   EXPECT_TRUE(HasWriteBlockedStreams());
 }