allow tunnel listener alloc port after listen

This commit is contained in:
sijie.sun
2024-04-27 21:20:23 +08:00
committed by Sijie.Sun
parent a3e85a1270
commit 3a965efab2
4 changed files with 79 additions and 0 deletions

View File

@@ -120,6 +120,11 @@ impl TunnelListener for QUICTunnelListener {
let (endpoint, server_cert) = make_server_endpoint(addr).unwrap();
self.endpoint = Some(endpoint);
self.server_cert = Some(server_cert);
self.addr
.set_port(Some(self.endpoint.as_ref().unwrap().local_addr()?.port()))
.unwrap();
Ok(())
}
@@ -267,4 +272,19 @@ mod tests {
connector.set_ip_version(IpVersion::V4);
_tunnel_pingpong(listener, connector).await;
}
#[tokio::test]
async fn test_alloc_port() {
// v4
let mut listener = QUICTunnelListener::new("quic://0.0.0.0:0".parse().unwrap());
listener.listen().await.unwrap();
let port = listener.local_url().port().unwrap();
assert!(port > 0);
// v6
let mut listener = QUICTunnelListener::new("quic://[::]:0".parse().unwrap());
listener.listen().await.unwrap();
let port = listener.local_url().port().unwrap();
assert!(port > 0);
}
}