Allow QUIC end_to_end and quic_server tests to pass if the
listening port is specified as 0 to allow Chrome tests to
use 0 instead of attempting to find an unused port (which is
hard).

Also rename QuicPickUnusedPortOrDie to QuicPickServerPortForTestsOrDie

gfe-relnote: n/a - Test only
PiperOrigin-RevId: 265545371
Change-Id: Iab88b60f6348c8e249c6420d895c9775b7f8405c
diff --git a/quic/core/http/end_to_end_test.cc b/quic/core/http/end_to_end_test.cc
index 6eb6ac6..89cf9ca 100644
--- a/quic/core/http/end_to_end_test.cc
+++ b/quic/core/http/end_to_end_test.cc
@@ -225,8 +225,8 @@
   EndToEndTest()
       : initialized_(false),
         connect_to_server_on_initialize_(true),
-        server_address_(
-            QuicSocketAddress(TestLoopback(), QuicPickUnusedPortOrDie())),
+        server_address_(QuicSocketAddress(TestLoopback(),
+                                          QuicPickServerPortForTestsOrDie())),
         server_hostname_("test.example.com"),
         client_writer_(nullptr),
         server_writer_(nullptr),
@@ -416,6 +416,8 @@
       server_thread_->server()->SetPreSharedKey(pre_shared_key_server_);
     }
     server_thread_->Initialize();
+    server_address_ =
+        QuicSocketAddress(server_address_.host(), server_thread_->GetPort());
     QuicDispatcher* dispatcher =
         QuicServerPeer::GetDispatcher(server_thread_->server());
     QuicDispatcherPeer::UseWriter(dispatcher, server_writer_);
diff --git a/quic/platform/api/quic_port_utils.h b/quic/platform/api/quic_port_utils.h
index aa85fc5..685be0a 100644
--- a/quic/platform/api/quic_port_utils.h
+++ b/quic/platform/api/quic_port_utils.h
@@ -10,13 +10,14 @@
 namespace quic {
 
 // Returns a UDP port that is currently unused.  Check-fails if none are
-// available.
-inline int QuicPickUnusedPortOrDie() {
-  return QuicPickUnusedPortOrDieImpl();
+// available. May return 0 in which case the bind() call will cause the OS
+// to use an unused port.
+inline int QuicPickServerPortForTestsOrDie() {
+  return QuicPickServerPortForTestsOrDieImpl();
 }
 
 // Indicates that a specified port previously returned by
-// QuicPickUnusedPortOrDie is no longer used.
+// QuicPickServerPortForTestsOrDie is no longer used.
 inline void QuicRecyclePort(int port) {
   return QuicRecyclePortImpl(port);
 }
diff --git a/quic/qbone/qbone_client_test.cc b/quic/qbone/qbone_client_test.cc
index 78e533c..2902b19 100644
--- a/quic/qbone/qbone_client_test.cc
+++ b/quic/qbone/qbone_client_test.cc
@@ -208,7 +208,8 @@
 TEST(QboneClientTest, SendDataFromClient) {
   SetQuicReloadableFlag(quic_use_parse_public_header, true);
   auto server = new QboneTestServer(crypto_test_utils::ProofSourceForTesting());
-  QuicSocketAddress server_address(TestLoopback(), QuicPickUnusedPortOrDie());
+  QuicSocketAddress server_address(TestLoopback(),
+                                   QuicPickServerPortForTestsOrDie());
   ServerThread server_thread(server, server_address);
   server_thread.Initialize();
   server_thread.Start();
diff --git a/quic/qbone/qbone_session_test.cc b/quic/qbone/qbone_session_test.cc
index 80bf08f..be598a9 100644
--- a/quic/qbone/qbone_session_test.cc
+++ b/quic/qbone/qbone_session_test.cc
@@ -251,7 +251,8 @@
         QuicMakeUnique<DataSavingQboneControlHandler<QboneClientRequest>>();
     server_handler_ =
         QuicMakeUnique<DataSavingQboneControlHandler<QboneServerRequest>>();
-    QuicSocketAddress server_address(TestLoopback(), QuicPickUnusedPortOrDie());
+    QuicSocketAddress server_address(TestLoopback(),
+                                     QuicPickServerPortForTestsOrDie());
     QuicSocketAddress client_address;
     if (server_address.host().address_family() == IpAddressFamily::IP_V4) {
       client_address = QuicSocketAddress(QuicIpAddress::Any4(), 0);
diff --git a/quic/tools/quic_client_test.cc b/quic/tools/quic_client_test.cc
index 134119b..e2d7f14 100644
--- a/quic/tools/quic_client_test.cc
+++ b/quic/tools/quic_client_test.cc
@@ -65,7 +65,7 @@
   // Creates a new QuicClient and Initializes it on an unused port.
   // Caller is responsible for deletion.
   std::unique_ptr<QuicClient> CreateAndInitializeQuicClient() {
-    uint16_t port = QuicPickUnusedPortOrDie();
+    uint16_t port = QuicPickServerPortForTestsOrDie();
     QuicSocketAddress server_address(QuicSocketAddress(TestLoopback(), port));
     QuicServerId server_id("hostname", server_address.port(), false);
     ParsedQuicVersionVector versions = AllSupportedVersions();
@@ -85,7 +85,6 @@
   // port exhaustion in long running processes which repeatedly create clients.
 
   // Record the initial number of FDs.
-
   size_t number_of_open_fds = NumOpenSocketFDs();
 
   // Create a number of clients, initialize them, and verify this has resulted
diff --git a/quic/tools/quic_server_test.cc b/quic/tools/quic_server_test.cc
index 3a2d520..8c89443 100644
--- a/quic/tools/quic_server_test.cc
+++ b/quic/tools/quic_server_test.cc
@@ -86,11 +86,13 @@
 class QuicServerEpollInTest : public QuicTest {
  public:
   QuicServerEpollInTest()
-      : port_(QuicPickUnusedPortOrDie()),
+      : port_(QuicPickServerPortForTestsOrDie()),
         server_address_(TestLoopback(), port_) {}
 
   void StartListening() {
     server_.CreateUDPSocketAndListen(server_address_);
+    server_address_ = QuicSocketAddress(server_address_.host(), server_.port());
+
     ASSERT_TRUE(QuicServerPeer::SetSmallSocket(&server_));
 
     if (!server_.overflow_supported()) {