diff --git a/Cargo.lock b/Cargo.lock index 5b293dcbb7a162..9b92d460aff54a 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4458,21 +4458,6 @@ dependencies = [ "winapi 0.3.9", ] -[[package]] -name = "quanta" -version = "0.12.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e5167a477619228a0b284fac2674e3c388cba90631d7b7de620e6f1fcd08da5" -dependencies = [ - "crossbeam-utils", - "libc", - "once_cell", - "raw-cpuid", - "wasi 0.11.0+wasi-snapshot-preview1", - "web-sys", - "winapi 0.3.9", -] - [[package]] name = "quick-error" version = "1.2.3" diff --git a/streamer/src/nonblocking/quic.rs b/streamer/src/nonblocking/quic.rs index 23290ac3902bfa..75c4777cc79920 100644 --- a/streamer/src/nonblocking/quic.rs +++ b/streamer/src/nonblocking/quic.rs @@ -1462,188 +1462,10 @@ pub mod test { assert_matches::assert_matches, async_channel::unbounded as async_unbounded, crossbeam_channel::{unbounded, Receiver}, - quinn::{crypto::rustls::QuicClientConfig, ClientConfig, IdleTimeout, TransportConfig}, - solana_sdk::{ - net::DEFAULT_TPU_COALESCE, - quic::{QUIC_KEEP_ALIVE, QUIC_MAX_TIMEOUT}, - signature::Keypair, - signer::Signer, - }, + solana_sdk::{net::DEFAULT_TPU_COALESCE, signature::Keypair, signer::Signer}, std::collections::HashMap, tokio::time::sleep, }; - #[derive(Debug)] - struct SkipServerVerification; - - impl SkipServerVerification { - fn new() -> Arc { - Arc::new(Self) - } - } - - impl rustls::client::danger::ServerCertVerifier for SkipServerVerification { - fn verify_tls12_signature( - &self, - _message: &[u8], - _cert: &rustls::pki_types::CertificateDer<'_>, - _dss: &rustls::DigitallySignedStruct, - ) -> Result { - Ok(rustls::client::danger::HandshakeSignatureValid::assertion()) - } - - fn verify_tls13_signature( - &self, - _message: &[u8], - _cert: &rustls::pki_types::CertificateDer<'_>, - _dss: &rustls::DigitallySignedStruct, - ) -> Result { - Ok(rustls::client::danger::HandshakeSignatureValid::assertion()) - } - - fn supported_verify_schemes(&self) -> Vec { - use rustls::SignatureScheme::*; - [ - RSA_PKCS1_SHA1, - ECDSA_SHA1_Legacy, - RSA_PKCS1_SHA256, - ECDSA_NISTP256_SHA256, - RSA_PKCS1_SHA384, - ECDSA_NISTP384_SHA384, - RSA_PKCS1_SHA512, - ECDSA_NISTP521_SHA512, - RSA_PSS_SHA256, - RSA_PSS_SHA384, - RSA_PSS_SHA512, - ED25519, - ED448, - ] - .to_vec() - } - - fn verify_server_cert( - &self, - _end_entity: &rustls::pki_types::CertificateDer<'_>, - _intermediates: &[rustls::pki_types::CertificateDer<'_>], - _server_name: &rustls::pki_types::ServerName<'_>, - _ocsp_response: &[u8], - _now: rustls::pki_types::UnixTime, - ) -> Result { - Ok(rustls::client::danger::ServerCertVerified::assertion()) - } - } - - pub fn get_client_config(keypair: &Keypair) -> ClientConfig { - let (cert, key) = new_dummy_x509_certificate(keypair); - - let mut crypto = rustls::ClientConfig::builder() - .dangerous() - .with_custom_certificate_verifier(SkipServerVerification::new()) - .with_client_auth_cert(vec![cert], key) - .expect("Failed to use client certificate"); - - crypto.enable_early_data = true; - crypto.alpn_protocols = vec![ALPN_TPU_PROTOCOL_ID.to_vec()]; - - let mut config = ClientConfig::new(Arc::new(QuicClientConfig::try_from(crypto).unwrap())); - - let mut transport_config = TransportConfig::default(); - let timeout = IdleTimeout::try_from(QUIC_MAX_TIMEOUT).unwrap(); - transport_config.max_idle_timeout(Some(timeout)); - transport_config.keep_alive_interval(Some(QUIC_KEEP_ALIVE)); - config.transport_config(Arc::new(transport_config)); - - config - } - - fn setup_quic_server( - option_staked_nodes: Option, - max_connections_per_peer: usize, - ) -> ( - JoinHandle<()>, - Arc, - crossbeam_channel::Receiver, - SocketAddr, - Arc, - ) { - let sockets = { - #[cfg(not(target_os = "windows"))] - { - use std::{ - os::fd::{FromRawFd, IntoRawFd}, - str::FromStr as _, - }; - (0..10) - .map(|_| { - let sock = socket2::Socket::new( - socket2::Domain::IPV4, - socket2::Type::DGRAM, - Some(socket2::Protocol::UDP), - ) - .unwrap(); - sock.set_reuse_port(true).unwrap(); - sock.bind(&SocketAddr::from_str("127.0.0.1:0").unwrap().into()) - .unwrap(); - unsafe { UdpSocket::from_raw_fd(sock.into_raw_fd()) } - }) - .collect::>() - } - #[cfg(target_os = "windows")] - { - vec![UdpSocket::bind("127.0.0.1:0").unwrap()] - } - }; - - let exit = Arc::new(AtomicBool::new(false)); - let (sender, receiver) = unbounded(); - let keypair = Keypair::new(); - let server_address = sockets[0].local_addr().unwrap(); - let staked_nodes = Arc::new(RwLock::new(option_staked_nodes.unwrap_or_default())); - let SpawnNonBlockingServerResult { - endpoints: _, - stats, - thread: t, - max_concurrent_connections: _, - } = spawn_server_multi( - "quic_streamer_test", - sockets, - &keypair, - sender, - exit.clone(), - max_connections_per_peer, - staked_nodes, - MAX_STAKED_CONNECTIONS, - MAX_UNSTAKED_CONNECTIONS, - DEFAULT_MAX_STREAMS_PER_MS, - DEFAULT_MAX_CONNECTIONS_PER_IPADDR_PER_MINUTE, - Duration::from_secs(2), - DEFAULT_TPU_COALESCE, - ) - .unwrap(); - (t, exit, receiver, server_address, stats) - } - - pub async fn make_client_endpoint( - addr: &SocketAddr, - client_keypair: Option<&Keypair>, - ) -> Connection { - let client_socket = UdpSocket::bind("127.0.0.1:0").unwrap(); - let mut endpoint = quinn::Endpoint::new( - EndpointConfig::default(), - None, - client_socket, - Arc::new(TokioRuntime), - ) - .unwrap(); - let default_keypair = Keypair::new(); - endpoint.set_default_client_config(get_client_config( - client_keypair.unwrap_or(&default_keypair), - )); - endpoint - .connect(*addr, "localhost") - .expect("Failed in connecting") - .await - .expect("Failed in waiting") - } pub async fn check_timeout(receiver: Receiver, server_address: SocketAddr) { let conn1 = make_client_endpoint(&server_address, None).await; @@ -2493,7 +2315,7 @@ pub mod test { let mut send_stream = client_connection.open_uni().await.unwrap(); let data = format!("{i}").into_bytes(); send_stream.write_all(&data).await.unwrap(); - send_stream.finish().await.unwrap(); + send_stream.finish().unwrap(); } let elapsed_sending: f64 = start_time.elapsed().as_secs_f64(); info!("Elapsed sending: {elapsed_sending}");