Add retry support to quic_client_interop_test

gfe-relnote: n/a, test-only
PiperOrigin-RevId: 274644470
Change-Id: Ie68fd26ad452d6489d3fffeba88bcb2bf54e475d
diff --git a/quic/core/quic_connection.cc b/quic/core/quic_connection.cc
index 398fc03..5c350e9 100644
--- a/quic/core/quic_connection.cc
+++ b/quic/core/quic_connection.cc
@@ -651,6 +651,7 @@
     return;
   }
   retry_has_been_parsed_ = true;
+  stats_.retry_packet_processed = true;
   QUIC_DLOG(INFO) << "Received RETRY, replacing connection ID "
                   << server_connection_id_ << " with " << new_connection_id
                   << ", received token "
diff --git a/quic/core/quic_connection_stats.cc b/quic/core/quic_connection_stats.cc
index c08f939..128bc93 100644
--- a/quic/core/quic_connection_stats.cc
+++ b/quic/core/quic_connection_stats.cc
@@ -47,7 +47,8 @@
       connection_creation_time(QuicTime::Zero()),
       blocked_frames_received(0),
       blocked_frames_sent(0),
-      num_connectivity_probing_received(0) {}
+      num_connectivity_probing_received(0),
+      retry_packet_processed(false) {}
 
 QuicConnectionStats::QuicConnectionStats(const QuicConnectionStats& other) =
     default;
@@ -94,7 +95,10 @@
   os << " blocked_frames_received: " << s.blocked_frames_received;
   os << " blocked_frames_sent: " << s.blocked_frames_sent;
   os << " num_connectivity_probing_received: "
-     << s.num_connectivity_probing_received << " }";
+     << s.num_connectivity_probing_received;
+  os << " retry_packet_processed: "
+     << (s.retry_packet_processed ? "yes" : "no");
+  os << " }";
 
   return os;
 }
diff --git a/quic/core/quic_connection_stats.h b/quic/core/quic_connection_stats.h
index 17a3a1e..805afd1 100644
--- a/quic/core/quic_connection_stats.h
+++ b/quic/core/quic_connection_stats.h
@@ -106,6 +106,9 @@
 
   // Number of connectivity probing packets received by this connection.
   uint64_t num_connectivity_probing_received;
+
+  // Whether a RETRY packet was successfully processed.
+  bool retry_packet_processed;
 };
 
 }  // namespace quic
diff --git a/quic/tools/quic_client_interop_test_bin.cc b/quic/tools/quic_client_interop_test_bin.cc
index d6a1da2..3bbb5c5 100644
--- a/quic/tools/quic_client_interop_test_bin.cc
+++ b/quic/tools/quic_client_interop_test_bin.cc
@@ -34,7 +34,8 @@
   kConnectionClose,
   // An H3 transaction succeeded.
   kHttp3,
-  // TODO(nharper): Add Retry to list of tested features.
+  // A RETRY packet was successfully processed.
+  kRetry,
 };
 
 char MatrixLetter(Feature f) {
@@ -49,6 +50,8 @@
       return 'C';
     case Feature::kHttp3:
       return '3';
+    case Feature::kRetry:
+      return 'S';
   }
 }
 
@@ -95,6 +98,12 @@
   while (client->WaitForEvents()) {
   }
 
+  QuicConnectionStats client_stats =
+      client->session()->connection()->GetStats();
+  if (client_stats.retry_packet_processed) {
+    features.insert(Feature::kRetry);
+  }
+
   if (!client->connected()) {
     return features;
   }