From c48ed2ef62770cf3127326d0ca2ac3c71f9d787f Mon Sep 17 00:00:00 2001 From: Anthony Ramine Date: Tue, 24 Oct 2023 13:16:46 +0200 Subject: [PATCH] Move session tests to their own module --- boring/src/ssl/test/mod.rs | 113 +++------------------- boring/src/ssl/test/private_key_method.rs | 6 +- boring/src/ssl/test/server.rs | 3 +- boring/src/ssl/test/session.rs | 86 ++++++++++++++++ 4 files changed, 101 insertions(+), 107 deletions(-) create mode 100644 boring/src/ssl/test/session.rs diff --git a/boring/src/ssl/test/mod.rs b/boring/src/ssl/test/mod.rs index 53e5177b..d3319f5f 100644 --- a/boring/src/ssl/test/mod.rs +++ b/boring/src/ssl/test/mod.rs @@ -1,22 +1,12 @@ -#![allow(unused_imports)] - use hex; -use std::cell::Cell; -use std::env; -use std::fs::File; +use std::io; use std::io::prelude::*; -use std::io::{self, BufReader}; -use std::iter; use std::mem; -use std::net::UdpSocket; -use std::net::{SocketAddr, TcpListener, TcpStream}; +use std::net::{TcpListener, TcpStream}; use std::path::Path; -use std::process::{Child, ChildStdin, Command, Stdio}; use std::sync::atomic::{AtomicBool, Ordering}; use std::thread; -use std::time::Duration; -use crate::dh::Dh; use crate::error::ErrorStack; use crate::hash::MessageDigest; use crate::pkey::PKey; @@ -25,17 +15,16 @@ use crate::ssl; use crate::ssl::test::server::Server; use crate::ssl::SslVersion; use crate::ssl::{ - Error, ExtensionType, HandshakeError, MidHandshakeSslStream, ShutdownResult, ShutdownState, - Ssl, SslAcceptor, SslAcceptorBuilder, SslConnector, SslContext, SslContextBuilder, SslFiletype, - SslMethod, SslOptions, SslSessionCacheMode, SslStream, SslStreamBuilder, SslVerifyMode, - StatusType, + ExtensionType, ShutdownResult, ShutdownState, Ssl, SslAcceptor, SslAcceptorBuilder, + SslConnector, SslContext, SslFiletype, SslMethod, SslOptions, SslStream, SslVerifyMode, }; use crate::x509::store::X509StoreBuilder; use crate::x509::verify::X509CheckFlags; -use crate::x509::{X509Name, X509StoreContext, X509}; +use crate::x509::{X509Name, X509}; mod private_key_method; mod server; +mod session; static ROOT_CERT: &[u8] = include_bytes!("../../../test/root-ca.pem"); static CERT: &[u8] = include_bytes!("../../../test/cert.pem"); @@ -894,80 +883,6 @@ fn cert_store() { client.connect(); } -#[test] -fn idle_session() { - let ctx = SslContext::builder(SslMethod::tls()).unwrap().build(); - let ssl = Ssl::new(&ctx).unwrap(); - assert!(ssl.session().is_none()); -} - -#[test] -fn active_session() { - let server = Server::builder().build(); - - let s = server.client().connect(); - - let session = s.ssl().session().unwrap(); - let len = session.master_key_len(); - let mut buf = vec![0; len - 1]; - let copied = session.master_key(&mut buf); - assert_eq!(copied, buf.len()); - let mut buf = vec![0; len + 1]; - let copied = session.master_key(&mut buf); - assert_eq!(copied, len); -} - -#[test] -fn new_session_callback() { - static CALLED_BACK: AtomicBool = AtomicBool::new(false); - - let mut server = Server::builder(); - server.ctx().set_session_id_context(b"foo").unwrap(); - - let server = server.build(); - - let mut client = server.client(); - - client - .ctx() - .set_session_cache_mode(SslSessionCacheMode::CLIENT | SslSessionCacheMode::NO_INTERNAL); - client - .ctx() - .set_new_session_callback(|_, _| CALLED_BACK.store(true, Ordering::SeqCst)); - - client.connect(); - - assert!(CALLED_BACK.load(Ordering::SeqCst)); -} - -#[test] -fn new_session_callback_swapped_ctx() { - static CALLED_BACK: AtomicBool = AtomicBool::new(false); - - let mut server = Server::builder(); - server.ctx().set_session_id_context(b"foo").unwrap(); - - let server = server.build(); - - let mut client = server.client(); - - client - .ctx() - .set_session_cache_mode(SslSessionCacheMode::CLIENT | SslSessionCacheMode::NO_INTERNAL); - client - .ctx() - .set_new_session_callback(|_, _| CALLED_BACK.store(true, Ordering::SeqCst)); - - let mut client = client.build().builder(); - - let ctx = SslContextBuilder::new(SslMethod::tls()).unwrap().build(); - client.ssl().set_ssl_context(&ctx).unwrap(); - - client.connect(); - - assert!(CALLED_BACK.load(Ordering::SeqCst)); -} - #[test] fn keying_export() { let listener = TcpListener::bind("127.0.0.1:0").unwrap(); @@ -1106,18 +1021,12 @@ fn sni_callback_swapped_ctx() { assert!(CALLED_BACK.load(Ordering::SeqCst)); } -#[test] -fn session_cache_size() { - let mut ctx = SslContext::builder(SslMethod::tls()).unwrap(); - ctx.set_session_cache_size(1234); - let ctx = ctx.build(); - assert_eq!(ctx.session_cache_size(), 1234); -} - #[cfg(feature = "kx-safe-default")] #[test] fn client_set_default_curves_list() { - let ssl_ctx = SslContextBuilder::new(SslMethod::tls()).unwrap().build(); + let ssl_ctx = crate::ssl::SslContextBuilder::new(SslMethod::tls()) + .unwrap() + .build(); let mut ssl = Ssl::new(&ssl_ctx).unwrap(); // Panics if Kyber768 missing in boringSSL. @@ -1127,7 +1036,9 @@ fn client_set_default_curves_list() { #[cfg(feature = "kx-safe-default")] #[test] fn server_set_default_curves_list() { - let ssl_ctx = SslContextBuilder::new(SslMethod::tls()).unwrap().build(); + let ssl_ctx = crate::ssl::SslContextBuilder::new(SslMethod::tls()) + .unwrap() + .build(); let mut ssl = Ssl::new(&ssl_ctx).unwrap(); // Panics if Kyber768 missing in boringSSL. diff --git a/boring/src/ssl/test/private_key_method.rs b/boring/src/ssl/test/private_key_method.rs index 722ed8f1..019a8c7c 100644 --- a/boring/src/ssl/test/private_key_method.rs +++ b/boring/src/ssl/test/private_key_method.rs @@ -2,7 +2,7 @@ use once_cell::sync::OnceCell; use super::server::{Builder, Server}; use super::KEY; -use crate::hash::{Hasher, MessageDigest}; +use crate::hash::MessageDigest; use crate::pkey::PKey; use crate::rsa::Padding; use crate::sign::{RsaPssSaltlen, Signer}; @@ -10,9 +10,7 @@ use crate::ssl::{ ErrorCode, HandshakeError, PrivateKeyMethod, PrivateKeyMethodError, SslRef, SslSignatureAlgorithm, }; -use crate::x509::X509; -use std::cmp; -use std::io::{Read, Write}; +use std::io::Write; use std::sync::atomic::{AtomicBool, AtomicUsize, Ordering}; use std::sync::Arc; diff --git a/boring/src/ssl/test/server.rs b/boring/src/ssl/test/server.rs index 7d79cd75..83562331 100644 --- a/boring/src/ssl/test/server.rs +++ b/boring/src/ssl/test/server.rs @@ -3,8 +3,7 @@ use std::net::{SocketAddr, TcpListener, TcpStream}; use std::thread::{self, JoinHandle}; use crate::ssl::{ - HandshakeError, MidHandshakeSslStream, Ssl, SslContext, SslContextBuilder, SslFiletype, - SslMethod, SslRef, SslStream, + HandshakeError, Ssl, SslContext, SslContextBuilder, SslFiletype, SslMethod, SslRef, SslStream, }; pub struct Server { diff --git a/boring/src/ssl/test/session.rs b/boring/src/ssl/test/session.rs new file mode 100644 index 00000000..c5f0b7dd --- /dev/null +++ b/boring/src/ssl/test/session.rs @@ -0,0 +1,86 @@ +use std::sync::atomic::{AtomicBool, Ordering}; + +use crate::ssl::test::server::Server; +use crate::ssl::{Ssl, SslContext, SslContextBuilder, SslMethod, SslSessionCacheMode}; + +#[test] +fn idle_session() { + let ctx = SslContext::builder(SslMethod::tls()).unwrap().build(); + let ssl = Ssl::new(&ctx).unwrap(); + assert!(ssl.session().is_none()); +} + +#[test] +fn active_session() { + let server = Server::builder().build(); + + let s = server.client().connect(); + + let session = s.ssl().session().unwrap(); + let len = session.master_key_len(); + let mut buf = vec![0; len - 1]; + let copied = session.master_key(&mut buf); + assert_eq!(copied, buf.len()); + let mut buf = vec![0; len + 1]; + let copied = session.master_key(&mut buf); + assert_eq!(copied, len); +} + +#[test] +fn new_session_callback() { + static CALLED_BACK: AtomicBool = AtomicBool::new(false); + + let mut server = Server::builder(); + server.ctx().set_session_id_context(b"foo").unwrap(); + + let server = server.build(); + + let mut client = server.client(); + + client + .ctx() + .set_session_cache_mode(SslSessionCacheMode::CLIENT | SslSessionCacheMode::NO_INTERNAL); + client + .ctx() + .set_new_session_callback(|_, _| CALLED_BACK.store(true, Ordering::SeqCst)); + + client.connect(); + + assert!(CALLED_BACK.load(Ordering::SeqCst)); +} + +#[test] +fn new_session_callback_swapped_ctx() { + static CALLED_BACK: AtomicBool = AtomicBool::new(false); + + let mut server = Server::builder(); + server.ctx().set_session_id_context(b"foo").unwrap(); + + let server = server.build(); + + let mut client = server.client(); + + client + .ctx() + .set_session_cache_mode(SslSessionCacheMode::CLIENT | SslSessionCacheMode::NO_INTERNAL); + client + .ctx() + .set_new_session_callback(|_, _| CALLED_BACK.store(true, Ordering::SeqCst)); + + let mut client = client.build().builder(); + + let ctx = SslContextBuilder::new(SslMethod::tls()).unwrap().build(); + client.ssl().set_ssl_context(&ctx).unwrap(); + + client.connect(); + + assert!(CALLED_BACK.load(Ordering::SeqCst)); +} + +#[test] +fn session_cache_size() { + let mut ctx = SslContext::builder(SslMethod::tls()).unwrap(); + ctx.set_session_cache_size(1234); + let ctx = ctx.build(); + assert_eq!(ctx.session_cache_size(), 1234); +}