Skip to content

Commit 8abf225

Browse files
authored
chore: reduce waste in port allocations of some tests (#7456)
fix some tests to not waste port allocations
1 parent b0eee37 commit 8abf225

File tree

3 files changed

+62
-47
lines changed

3 files changed

+62
-47
lines changed

net-utils/src/lib.rs

Lines changed: 39 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -603,6 +603,7 @@ pub fn bind_more_with_config(
603603
mod tests {
604604
use {
605605
super::*,
606+
crate::sockets::unique_port_range_for_tests,
606607
ip_echo_server::IpEchoServerResponse,
607608
itertools::Itertools,
608609
std::{net::Ipv4Addr, time::Duration},
@@ -748,14 +749,16 @@ mod tests {
748749
#[test]
749750
fn test_bind_in_range_nil() {
750751
let ip_addr = IpAddr::V4(Ipv4Addr::UNSPECIFIED);
751-
bind_in_range(ip_addr, (2000, 2000)).unwrap_err();
752-
bind_in_range(ip_addr, (2000, 1999)).unwrap_err();
752+
let range = sockets::unique_port_range_for_tests(2);
753+
bind_in_range(ip_addr, (range.end, range.end)).unwrap_err();
754+
bind_in_range(ip_addr, (range.end, range.start)).unwrap_err();
753755
}
754756

755757
#[test]
756758
fn test_find_available_port_in_range() {
757759
let ip_addr = IpAddr::V4(Ipv4Addr::LOCALHOST);
758-
let (pr_s, pr_e) = sockets::localhost_port_range_for_tests();
760+
let range = sockets::unique_port_range_for_tests(4);
761+
let (pr_s, pr_e) = (range.start, range.end);
759762
assert_eq!(
760763
find_available_port_in_range(ip_addr, (pr_s, pr_s + 1)).unwrap(),
761764
pr_s
@@ -784,12 +787,11 @@ mod tests {
784787
#[test]
785788
fn test_bind_common_in_range() {
786789
let ip_addr = IpAddr::V4(Ipv4Addr::LOCALHOST);
787-
let (pr_s, pr_e) = sockets::localhost_port_range_for_tests();
790+
let range = sockets::unique_port_range_for_tests(5);
788791
let config = SocketConfig::default();
789792
let (port, _sockets) =
790-
bind_common_in_range_with_config(ip_addr, (pr_s, pr_e), config).unwrap();
791-
assert!((pr_s..pr_e).contains(&port));
792-
793+
bind_common_in_range_with_config(ip_addr, (range.start, range.end), config).unwrap();
794+
assert!(range.contains(&port));
793795
bind_common_in_range_with_config(ip_addr, (port, port + 1), config).unwrap_err();
794796
}
795797

@@ -889,16 +891,18 @@ mod tests {
889891
fn test_verify_ports_udp_unreachable() {
890892
solana_logger::setup();
891893
let ip_addr = IpAddr::V4(Ipv4Addr::LOCALHOST);
892-
let port_range = sockets::localhost_port_range_for_tests();
894+
let port_range = unique_port_range_for_tests(2);
893895
let config = SocketConfig::default();
894896
let (_server_port, (server_udp_socket, _server_tcp_listener)) =
895-
bind_common_in_range_with_config(ip_addr, port_range, config).unwrap();
897+
bind_common_in_range_with_config(ip_addr, (port_range.start, port_range.end), config)
898+
.unwrap();
896899

897900
// make the socket unreachable by not running the ip echo server!
898901
let server_ip_echo_addr = server_udp_socket.local_addr().unwrap();
899902

900903
let (_correct_client_port, (client_udp_socket, _client_tcp_listener)) =
901-
bind_common_in_range_with_config(ip_addr, port_range, config).unwrap();
904+
bind_common_in_range_with_config(ip_addr, (port_range.start, port_range.end), config)
905+
.unwrap();
902906

903907
let rt = runtime();
904908
assert!(!rt.block_on(ip_echo_client::verify_all_reachable_udp(
@@ -917,13 +921,16 @@ mod tests {
917921
let mut tcp_listeners = vec![];
918922
let mut udp_sockets = vec![];
919923

924+
let port_range = unique_port_range_for_tests(1);
920925
let (_server_port, (_, server_tcp_listener)) =
921-
bind_common_in_range_with_config(ip_addr, (2200, 2300), config).unwrap();
926+
bind_common_in_range_with_config(ip_addr, (port_range.start, port_range.end), config)
927+
.unwrap();
922928
for _ in 0..MAX_PORT_VERIFY_THREADS * 2 {
929+
let port_range = unique_port_range_for_tests(1);
923930
let (_client_port, (client_udp_socket, client_tcp_listener)) =
924931
bind_common_in_range_with_config(
925932
ip_addr,
926-
(2300, 2300 + (MAX_PORT_VERIFY_THREADS * 3) as u16),
933+
(port_range.start, port_range.end),
927934
config,
928935
)
929936
.unwrap();
@@ -961,26 +968,34 @@ mod tests {
961968
solana_logger::setup();
962969
let ip_addr = IpAddr::V4(Ipv4Addr::UNSPECIFIED);
963970
let offset = 6;
971+
let port_range = unique_port_range_for_tests(10);
964972
if let Ok(((port1, _), (port2, _))) =
965-
bind_two_in_range_with_offset(ip_addr, (1024, 65535), offset)
973+
bind_two_in_range_with_offset(ip_addr, (port_range.start, port_range.end), offset)
966974
{
967975
assert!(port2 == port1 + offset);
968976
}
969-
let offset = 42;
977+
let offset = 7;
970978
if let Ok(((port1, _), (port2, _))) =
971-
bind_two_in_range_with_offset(ip_addr, (1024, 65535), offset)
979+
bind_two_in_range_with_offset(ip_addr, (port_range.start, port_range.end), offset)
972980
{
973981
assert!(port2 == port1 + offset);
974982
}
975-
assert!(bind_two_in_range_with_offset(ip_addr, (1024, 1044), offset).is_err());
983+
assert!(bind_two_in_range_with_offset(
984+
ip_addr,
985+
(port_range.start, port_range.start + 5),
986+
offset
987+
)
988+
.is_err());
976989
}
977990

978991
#[test]
979992
fn test_multi_bind_in_range_with_config_reuseport_disabled() {
980993
let ip_addr: IpAddr = IpAddr::V4(Ipv4Addr::LOCALHOST);
981994
let config = SocketConfig::default(); //reuseport is false by default
982995

983-
let result = multi_bind_in_range_with_config(ip_addr, (2010, 2110), config, 2);
996+
let port_range = unique_port_range_for_tests(3);
997+
let result =
998+
multi_bind_in_range_with_config(ip_addr, (port_range.start, port_range.end), config, 2);
984999

9851000
assert!(
9861001
result.is_err(),
@@ -995,9 +1010,10 @@ mod tests {
9951010
let ip_a = IpAddr::V4(Ipv4Addr::LOCALHOST);
9961011
let ip_b = IpAddr::V4(Ipv4Addr::new(127, 0, 0, 2));
9971012

998-
let server_ports = sockets::localhost_port_range_for_tests();
1013+
let port_range = sockets::localhost_port_range_for_tests();
1014+
9991015
let (_srv_udp_port, (srv_udp_sock, srv_tcp_listener)) =
1000-
bind_common_in_range_with_config(ip_a, server_ports, config).unwrap();
1016+
bind_common_in_range_with_config(ip_a, port_range, config).unwrap();
10011017

10021018
let ip_echo_server_addr = srv_udp_sock.local_addr().unwrap();
10031019
let _runtime = ip_echo_server(
@@ -1007,18 +1023,10 @@ mod tests {
10071023
);
10081024

10091025
let mut udp_sockets = Vec::new();
1010-
let (_p1, (sock_a, _tl_a)) = bind_common_in_range_with_config(
1011-
ip_a,
1012-
sockets::localhost_port_range_for_tests(),
1013-
config,
1014-
)
1015-
.unwrap();
1016-
let (_p2, (sock_b, _tl_b)) = bind_common_in_range_with_config(
1017-
ip_b,
1018-
sockets::localhost_port_range_for_tests(),
1019-
config,
1020-
)
1021-
.unwrap();
1026+
let (_p1, (sock_a, _tl_a)) =
1027+
bind_common_in_range_with_config(ip_a, port_range, config).unwrap();
1028+
let (_p2, (sock_b, _tl_b)) =
1029+
bind_common_in_range_with_config(ip_b, port_range, config).unwrap();
10221030

10231031
udp_sockets.push(sock_a);
10241032
udp_sockets.push(sock_b);

streamer/src/recvmmsg.rs

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -183,7 +183,7 @@ mod tests {
183183
use {
184184
crate::{packet::PACKET_DATA_SIZE, recvmmsg::*},
185185
solana_net_utils::sockets::{
186-
bind_in_range_with_config, localhost_port_range_for_tests,
186+
bind_in_range_with_config, localhost_port_range_for_tests, unique_port_range_for_tests,
187187
SocketConfiguration as SocketConfig,
188188
},
189189
std::{
@@ -195,10 +195,20 @@ mod tests {
195195
type TestConfig = (UdpSocket, SocketAddr, UdpSocket, SocketAddr);
196196

197197
fn test_setup_reader_sender(ip: IpAddr) -> io::Result<TestConfig> {
198-
let port_range = localhost_port_range_for_tests();
199-
let reader = bind_in_range_with_config(ip, port_range, SocketConfig::default())?.1;
198+
let port_range = unique_port_range_for_tests(2);
199+
let reader = bind_in_range_with_config(
200+
ip,
201+
(port_range.start, port_range.end),
202+
SocketConfig::default(),
203+
)?
204+
.1;
200205
let reader_addr = reader.local_addr()?;
201-
let sender = bind_in_range_with_config(ip, port_range, SocketConfig::default())?.1;
206+
let sender = bind_in_range_with_config(
207+
ip,
208+
(port_range.start, port_range.end),
209+
SocketConfig::default(),
210+
)?
211+
.1;
202212
let sender_addr = sender.local_addr()?;
203213
Ok((reader, reader_addr, sender, sender_addr))
204214
}

tpu-client-next/src/workers_cache.rs

Lines changed: 9 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -327,10 +327,10 @@ mod tests {
327327
SendTransactionStats,
328328
},
329329
quinn::Endpoint,
330-
solana_net_utils::{bind_in_range, sockets::localhost_port_range_for_tests},
330+
solana_net_utils::sockets::{bind_to_localhost_unique, unique_port_range_for_tests},
331331
solana_tls_utils::QuicClientCertificate,
332332
std::{
333-
net::{IpAddr, Ipv4Addr, SocketAddr},
333+
net::{Ipv4Addr, SocketAddr},
334334
sync::Arc,
335335
time::Duration,
336336
},
@@ -342,10 +342,7 @@ mod tests {
342342
const TEST_MAX_TIME: Duration = Duration::from_secs(5);
343343

344344
fn create_test_endpoint() -> Endpoint {
345-
let port_range = localhost_port_range_for_tests();
346-
let socket = bind_in_range(IpAddr::V4(Ipv4Addr::LOCALHOST), port_range)
347-
.unwrap()
348-
.1;
345+
let socket = bind_to_localhost_unique().unwrap();
349346
let client_config = create_client_config(&QuicClientCertificate::new(None));
350347
create_client_endpoint(BindTarget::Socket(socket), client_config).unwrap()
351348
}
@@ -354,8 +351,8 @@ mod tests {
354351
async fn test_worker_stopped_after_failed_connect() {
355352
let endpoint = create_test_endpoint();
356353

357-
let port_range = localhost_port_range_for_tests();
358-
let peer: SocketAddr = SocketAddr::new(Ipv4Addr::LOCALHOST.into(), port_range.0);
354+
let port_range = unique_port_range_for_tests(2);
355+
let peer: SocketAddr = SocketAddr::new(Ipv4Addr::LOCALHOST.into(), port_range.start);
359356

360357
let worker_channel_size = 1;
361358
let skip_check_transaction_age = true;
@@ -388,8 +385,8 @@ mod tests {
388385
async fn test_worker_shutdown() {
389386
let endpoint = create_test_endpoint();
390387

391-
let port_range = localhost_port_range_for_tests();
392-
let peer: SocketAddr = SocketAddr::new(Ipv4Addr::LOCALHOST.into(), port_range.0);
388+
let port_range = unique_port_range_for_tests(2);
389+
let peer: SocketAddr = SocketAddr::new(Ipv4Addr::LOCALHOST.into(), port_range.start);
393390

394391
let worker_channel_size = 1;
395392
let skip_check_transaction_age = true;
@@ -421,8 +418,8 @@ mod tests {
421418
let cancel = CancellationToken::new();
422419
let mut cache = WorkersCache::new(10, cancel.clone());
423420

424-
let port_range = localhost_port_range_for_tests();
425-
let peer: SocketAddr = SocketAddr::new(Ipv4Addr::LOCALHOST.into(), port_range.0);
421+
let port_range = unique_port_range_for_tests(2);
422+
let peer: SocketAddr = SocketAddr::new(Ipv4Addr::LOCALHOST.into(), port_range.start);
426423
let worker_channel_size = 1;
427424
let skip_check_transaction_age = true;
428425
let max_reconnect_attempts = 0;

0 commit comments

Comments
 (0)