diff --git a/quiche/quic/test_tools/quic_test_client.cc b/quiche/quic/test_tools/quic_test_client.cc
index 4c011a6..1d95f8c 100644
--- a/quiche/quic/test_tools/quic_test_client.cc
+++ b/quiche/quic/test_tools/quic_test_client.cc
@@ -144,9 +144,6 @@
     const QuicSocketAddress& peer_address, const QuicReceivedPacket& packet) {
   QuicClientDefaultNetworkHelper::ProcessPacket(self_address, peer_address,
                                                 packet);
-  if (track_last_incoming_packet_) {
-    last_incoming_packet_ = packet.Clone();
-  }
 }
 
 SocketFd MockableQuicClientDefaultNetworkHelper::CreateUDPSocket(
@@ -179,16 +176,6 @@
   socket_fd_configurator_ = std::move(socket_fd_configurator);
 }
 
-const QuicReceivedPacket*
-MockableQuicClientDefaultNetworkHelper::last_incoming_packet() {
-  return last_incoming_packet_.get();
-}
-
-void MockableQuicClientDefaultNetworkHelper::set_track_last_incoming_packet(
-    bool track) {
-  track_last_incoming_packet_ = track;
-}
-
 void MockableQuicClientDefaultNetworkHelper::UseWriter(
     QuicPacketWriterWrapper* writer) {
   QUICHE_CHECK(test_writer_ == nullptr);
@@ -265,12 +252,6 @@
   return QuicDefaultClient::GetClientConnectionId();
 }
 
-void MockableQuicClient::UseClientConnectionId(
-    QuicConnectionId client_connection_id) {
-  client_connection_id_overridden_ = true;
-  override_client_connection_id_ = client_connection_id;
-}
-
 void MockableQuicClient::UseClientConnectionIdLength(
     int client_connection_id_length) {
   override_client_connection_id_length_ = client_connection_id_length;
@@ -287,14 +268,6 @@
   }
 }
 
-const QuicReceivedPacket* MockableQuicClient::last_incoming_packet() {
-  return mockable_network_helper()->last_incoming_packet();
-}
-
-void MockableQuicClient::set_track_last_incoming_packet(bool track) {
-  mockable_network_helper()->set_track_last_incoming_packet(track);
-}
-
 QuicTestClient::QuicTestClient(
     QuicSocketAddress server_address, const std::string& server_hostname,
     const ParsedQuicVersionVector& supported_versions)
@@ -750,12 +723,6 @@
   client_->set_server_connection_id_length(server_connection_id_length);
 }
 
-void QuicTestClient::UseClientConnectionId(
-    QuicConnectionId client_connection_id) {
-  QUICHE_DCHECK(!connected());
-  client_->UseClientConnectionId(client_connection_id);
-}
-
 void QuicTestClient::UseClientConnectionIdLength(
     uint8_t client_connection_id_length) {
   QUICHE_DCHECK(!connected());
diff --git a/quiche/quic/test_tools/quic_test_client.h b/quiche/quic/test_tools/quic_test_client.h
index 44c5210..5a80e59 100644
--- a/quiche/quic/test_tools/quic_test_client.h
+++ b/quiche/quic/test_tools/quic_test_client.h
@@ -46,20 +46,12 @@
   void set_socket_fd_configurator(
       quiche::MultiUseCallback<void(SocketFd)> socket_fd_configurator);
 
-  const QuicReceivedPacket* last_incoming_packet();
-
-  void set_track_last_incoming_packet(bool track);
-
   void UseWriter(QuicPacketWriterWrapper* writer);
 
   void set_peer_address(const QuicSocketAddress& address);
 
  private:
   QuicPacketWriterWrapper* test_writer_ = nullptr;
-  // The last incoming packet, iff |track_last_incoming_packet_| is true.
-  std::unique_ptr<QuicReceivedPacket> last_incoming_packet_;
-  // If true, copy each packet from ProcessPacket into |last_incoming_packet_|
-  bool track_last_incoming_packet_ = false;
   // If set, |socket_fd_configurator_| will be called after a socket fd is
   // created.
   quiche::MultiUseCallback<void(SocketFd)> socket_fd_configurator_;
@@ -96,15 +88,10 @@
   ~MockableQuicClient() override;
 
   QuicConnectionId GetClientConnectionId() override;
-  void UseClientConnectionId(QuicConnectionId client_connection_id);
   void UseClientConnectionIdLength(int client_connection_id_length);
 
   void UseWriter(QuicPacketWriterWrapper* writer);
   void set_peer_address(const QuicSocketAddress& address);
-  // The last incoming packet, iff |track_last_incoming_packet| is true.
-  const QuicReceivedPacket* last_incoming_packet();
-  // If true, copy each packet from ProcessPacket into |last_incoming_packet|
-  void set_track_last_incoming_packet(bool track);
 
   // Casts the network helper to a MockableQuicClientDefaultNetworkHelper.
   MockableQuicClientDefaultNetworkHelper* mockable_network_helper();
