diff --git a/quic/quartc/test/quartc_peer.cc b/quic/quartc/test/quartc_peer.cc
index 9c2748d..885e6b1 100644
--- a/quic/quartc/test/quartc_peer.cc
+++ b/quic/quartc/test/quartc_peer.cc
@@ -23,7 +23,8 @@
       buffer_allocator_(buffer_allocator),
       enabled_(false),
       session_(nullptr),
-      configs_(configs) {}
+      configs_(configs),
+      last_available_(QuicBandwidth::Zero()) {}
 
 QuartcPeer::~QuartcPeer() {
   session_->CloseConnection("~QuartcPeer()");
@@ -87,6 +88,7 @@
   // estimate, or it may explicitly subtract overhead before surfacing its
   // estimate.
   QuicBandwidth available = std::min(bandwidth_estimate, pacing_rate);
+  last_available_ = available;
   for (auto& source : data_sources_) {
     available = source->AllocateBandwidth(available);
   }
diff --git a/quic/quartc/test/quartc_peer.h b/quic/quartc/test/quartc_peer.h
index 828b1e2..4906fd0 100644
--- a/quic/quartc/test/quartc_peer.h
+++ b/quic/quartc/test/quartc_peer.h
@@ -70,6 +70,8 @@
   // produced by that source.
   IdToSequenceNumberMap GetLastSequenceNumbers() const;
 
+  QuicBandwidth last_available_bandwidth() { return last_available_; }
+
   // QuartcEndpoint::Delegate overrides.
   void OnSessionCreated(QuartcSession* session) override;
 
@@ -116,6 +118,9 @@
   // Messages received by this peer from the remote peer.  Stored in the order
   // they are received.
   std::vector<ReceivedMessage> received_messages_;
+
+  // Last available bandwidth.
+  QuicBandwidth last_available_;
 };
 
 }  // namespace test
diff --git a/quic/quartc/test/quartc_peer_test.cc b/quic/quartc/test/quartc_peer_test.cc
index a9fa721..04e317b 100644
--- a/quic/quartc/test/quartc_peer_test.cc
+++ b/quic/quartc/test/quartc_peer_test.cc
@@ -67,6 +67,18 @@
     client_endpoint_->Connect(&client_transport_);
   }
 
+  void RampUpBandwidth() {
+    // Run long enough for the bandwidth estimate to ramp up.
+    simulator_.RunUntilOrTimeout(
+        [this] {
+          return client_peer_->last_available_bandwidth() ==
+                     client_server_link_.bandwidth() &&
+                 server_peer_->last_available_bandwidth() ==
+                     client_server_link_.bandwidth();
+        },
+        QuicTime::Delta::FromSeconds(60));
+  }
+
   SimpleRandom rng_;
   simulator::Simulator simulator_;
   simulator::SimulatedQuartcPacketTransport client_transport_;
@@ -131,9 +143,7 @@
 
   CreatePeers({config});
   Connect();
-
-  // Run long enough for the bandwidth estimate to ramp up.
-  simulator_.RunFor(QuicTime::Delta::FromSeconds(10));
+  RampUpBandwidth();
 
   // The peers generate frames that fit in one packet.
   EXPECT_LT(client_peer_->received_messages().back().frame.size,
@@ -150,9 +160,7 @@
 
   CreatePeers({config});
   Connect();
-
-  // Run long enough for the bandwidth estimate to ramp up.
-  simulator_.RunFor(QuicTime::Delta::FromSeconds(10));
+  RampUpBandwidth();
 
   // The peers generate frames that fit in one packet.
   EXPECT_LT(client_peer_->received_messages().back().frame.size,
@@ -171,9 +179,7 @@
 
   CreatePeers({config});
   Connect();
-
-  // Run long enough for the bandwidth estimate to ramp up.
-  simulator_.RunFor(QuicTime::Delta::FromSeconds(12));
+  RampUpBandwidth();
 
   EXPECT_EQ(client_peer_->received_messages().back().frame.size, 100u);
   EXPECT_EQ(server_peer_->received_messages().back().frame.size, 100u);
@@ -186,9 +192,7 @@
 
   CreatePeers({config});
   Connect();
-
-  // Run long enough for the bandwidth estimate to ramp up.
-  simulator_.RunFor(QuicTime::Delta::FromSeconds(10));
+  RampUpBandwidth();
 
   // Max frame sizes smaller than the header are ignored, and the frame size is
   // limited by packet size.
@@ -274,10 +278,7 @@
 
   CreatePeers({config_1, config_2, config_3});
   Connect();
-
-  // Run for long enough that bandwidth ramps up and meets the requirements of
-  // all three sources.
-  simulator_.RunFor(QuicTime::Delta::FromSeconds(10));
+  RampUpBandwidth();
 
   // The last message from each source should be the size allowed by that
   // source's maximum bandwidth and frame interval.
@@ -327,9 +328,7 @@
 
   CreatePeers({config_1, config_2, config_3});
   Connect();
-
-  // Run for long enough that bandwidth ramps up to link capacity.
-  simulator_.RunFor(QuicTime::Delta::FromSeconds(12));
+  RampUpBandwidth();
 
   const std::vector<ReceivedMessage>& client_messages =
       client_peer_->received_messages();
@@ -377,6 +376,7 @@
   CreatePeers({config});
   Connect();
 
+  // Note: this time is completely arbitrary, to allow messages to be sent.
   simulator_.RunFor(QuicTime::Delta::FromSeconds(10));
 
   // After these calls, we should observe no new messages.
@@ -388,15 +388,22 @@
   std::map<int32_t, int64_t> last_sent_by_server =
       server_peer_->GetLastSequenceNumbers();
 
+  // Note: this time is completely arbitrary, to allow time for the peers to
+  // generate new messages after being disabled.  The point of the test is that
+  // they should not do that.
   simulator_.RunFor(QuicTime::Delta::FromSeconds(10));
 
-  ASSERT_FALSE(client_peer_->received_messages().empty());
-  EXPECT_EQ(client_peer_->received_messages().back().frame.sequence_number,
-            last_sent_by_server[1]);
-
-  ASSERT_FALSE(server_peer_->received_messages().empty());
-  EXPECT_EQ(server_peer_->received_messages().back().frame.sequence_number,
-            last_sent_by_client[1]);
+  // Messages sent prior to disabling the peers are eventually received.
+  EXPECT_TRUE(simulator_.RunUntilOrTimeout(
+      [this, last_sent_by_client, last_sent_by_server]() mutable -> bool {
+        return !client_peer_->received_messages().empty() &&
+               client_peer_->received_messages().back().frame.sequence_number ==
+                   last_sent_by_server[1] &&
+               !server_peer_->received_messages().empty() &&
+               server_peer_->received_messages().back().frame.sequence_number ==
+                   last_sent_by_client[1];
+      },
+      QuicTime::Delta::FromSeconds(60)));
 }
 
 }  // namespace
