Move session tests to their own module
This commit is contained in:
parent
9a0bd94f99
commit
c48ed2ef62
|
|
@ -1,22 +1,12 @@
|
||||||
#![allow(unused_imports)]
|
|
||||||
|
|
||||||
use hex;
|
use hex;
|
||||||
use std::cell::Cell;
|
use std::io;
|
||||||
use std::env;
|
|
||||||
use std::fs::File;
|
|
||||||
use std::io::prelude::*;
|
use std::io::prelude::*;
|
||||||
use std::io::{self, BufReader};
|
|
||||||
use std::iter;
|
|
||||||
use std::mem;
|
use std::mem;
|
||||||
use std::net::UdpSocket;
|
use std::net::{TcpListener, TcpStream};
|
||||||
use std::net::{SocketAddr, TcpListener, TcpStream};
|
|
||||||
use std::path::Path;
|
use std::path::Path;
|
||||||
use std::process::{Child, ChildStdin, Command, Stdio};
|
|
||||||
use std::sync::atomic::{AtomicBool, Ordering};
|
use std::sync::atomic::{AtomicBool, Ordering};
|
||||||
use std::thread;
|
use std::thread;
|
||||||
use std::time::Duration;
|
|
||||||
|
|
||||||
use crate::dh::Dh;
|
|
||||||
use crate::error::ErrorStack;
|
use crate::error::ErrorStack;
|
||||||
use crate::hash::MessageDigest;
|
use crate::hash::MessageDigest;
|
||||||
use crate::pkey::PKey;
|
use crate::pkey::PKey;
|
||||||
|
|
@ -25,17 +15,16 @@ use crate::ssl;
|
||||||
use crate::ssl::test::server::Server;
|
use crate::ssl::test::server::Server;
|
||||||
use crate::ssl::SslVersion;
|
use crate::ssl::SslVersion;
|
||||||
use crate::ssl::{
|
use crate::ssl::{
|
||||||
Error, ExtensionType, HandshakeError, MidHandshakeSslStream, ShutdownResult, ShutdownState,
|
ExtensionType, ShutdownResult, ShutdownState, Ssl, SslAcceptor, SslAcceptorBuilder,
|
||||||
Ssl, SslAcceptor, SslAcceptorBuilder, SslConnector, SslContext, SslContextBuilder, SslFiletype,
|
SslConnector, SslContext, SslFiletype, SslMethod, SslOptions, SslStream, SslVerifyMode,
|
||||||
SslMethod, SslOptions, SslSessionCacheMode, SslStream, SslStreamBuilder, SslVerifyMode,
|
|
||||||
StatusType,
|
|
||||||
};
|
};
|
||||||
use crate::x509::store::X509StoreBuilder;
|
use crate::x509::store::X509StoreBuilder;
|
||||||
use crate::x509::verify::X509CheckFlags;
|
use crate::x509::verify::X509CheckFlags;
|
||||||
use crate::x509::{X509Name, X509StoreContext, X509};
|
use crate::x509::{X509Name, X509};
|
||||||
|
|
||||||
mod private_key_method;
|
mod private_key_method;
|
||||||
mod server;
|
mod server;
|
||||||
|
mod session;
|
||||||
|
|
||||||
static ROOT_CERT: &[u8] = include_bytes!("../../../test/root-ca.pem");
|
static ROOT_CERT: &[u8] = include_bytes!("../../../test/root-ca.pem");
|
||||||
static CERT: &[u8] = include_bytes!("../../../test/cert.pem");
|
static CERT: &[u8] = include_bytes!("../../../test/cert.pem");
|
||||||
|
|
@ -894,80 +883,6 @@ fn cert_store() {
|
||||||
client.connect();
|
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]
|
#[test]
|
||||||
fn keying_export() {
|
fn keying_export() {
|
||||||
let listener = TcpListener::bind("127.0.0.1:0").unwrap();
|
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));
|
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")]
|
#[cfg(feature = "kx-safe-default")]
|
||||||
#[test]
|
#[test]
|
||||||
fn client_set_default_curves_list() {
|
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();
|
let mut ssl = Ssl::new(&ssl_ctx).unwrap();
|
||||||
|
|
||||||
// Panics if Kyber768 missing in boringSSL.
|
// Panics if Kyber768 missing in boringSSL.
|
||||||
|
|
@ -1127,7 +1036,9 @@ fn client_set_default_curves_list() {
|
||||||
#[cfg(feature = "kx-safe-default")]
|
#[cfg(feature = "kx-safe-default")]
|
||||||
#[test]
|
#[test]
|
||||||
fn server_set_default_curves_list() {
|
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();
|
let mut ssl = Ssl::new(&ssl_ctx).unwrap();
|
||||||
|
|
||||||
// Panics if Kyber768 missing in boringSSL.
|
// Panics if Kyber768 missing in boringSSL.
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,7 @@ use once_cell::sync::OnceCell;
|
||||||
|
|
||||||
use super::server::{Builder, Server};
|
use super::server::{Builder, Server};
|
||||||
use super::KEY;
|
use super::KEY;
|
||||||
use crate::hash::{Hasher, MessageDigest};
|
use crate::hash::MessageDigest;
|
||||||
use crate::pkey::PKey;
|
use crate::pkey::PKey;
|
||||||
use crate::rsa::Padding;
|
use crate::rsa::Padding;
|
||||||
use crate::sign::{RsaPssSaltlen, Signer};
|
use crate::sign::{RsaPssSaltlen, Signer};
|
||||||
|
|
@ -10,9 +10,7 @@ use crate::ssl::{
|
||||||
ErrorCode, HandshakeError, PrivateKeyMethod, PrivateKeyMethodError, SslRef,
|
ErrorCode, HandshakeError, PrivateKeyMethod, PrivateKeyMethodError, SslRef,
|
||||||
SslSignatureAlgorithm,
|
SslSignatureAlgorithm,
|
||||||
};
|
};
|
||||||
use crate::x509::X509;
|
use std::io::Write;
|
||||||
use std::cmp;
|
|
||||||
use std::io::{Read, Write};
|
|
||||||
use std::sync::atomic::{AtomicBool, AtomicUsize, Ordering};
|
use std::sync::atomic::{AtomicBool, AtomicUsize, Ordering};
|
||||||
use std::sync::Arc;
|
use std::sync::Arc;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -3,8 +3,7 @@ use std::net::{SocketAddr, TcpListener, TcpStream};
|
||||||
use std::thread::{self, JoinHandle};
|
use std::thread::{self, JoinHandle};
|
||||||
|
|
||||||
use crate::ssl::{
|
use crate::ssl::{
|
||||||
HandshakeError, MidHandshakeSslStream, Ssl, SslContext, SslContextBuilder, SslFiletype,
|
HandshakeError, Ssl, SslContext, SslContextBuilder, SslFiletype, SslMethod, SslRef, SslStream,
|
||||||
SslMethod, SslRef, SslStream,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
pub struct Server {
|
pub struct Server {
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue