diff options
| author | Steven Fackler <[email protected]> | 2018-02-15 21:30:20 -0800 |
|---|---|---|
| committer | Steven Fackler <[email protected]> | 2018-02-15 21:30:20 -0800 |
| commit | a9d8bea33c0e9417c388cbac0491d75cffd7babf (patch) | |
| tree | 268e956e2164f8410fa7741173ebfcd093304ae3 /openssl/src/ssl/test.rs | |
| parent | Merge pull request #839 from sfackler/openssl111 (diff) | |
| download | rust-openssl-a9d8bea33c0e9417c388cbac0491d75cffd7babf.tar.xz rust-openssl-a9d8bea33c0e9417c388cbac0491d75cffd7babf.zip | |
Add more session cache support
Diffstat (limited to 'openssl/src/ssl/test.rs')
| -rw-r--r-- | openssl/src/ssl/test.rs | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/openssl/src/ssl/test.rs b/openssl/src/ssl/test.rs index 51ae6cae..17bc37d9 100644 --- a/openssl/src/ssl/test.rs +++ b/openssl/src/ssl/test.rs @@ -20,6 +20,8 @@ use ocsp::{OcspResponse, OcspResponseStatus}; use ssl; use ssl::{Error, HandshakeError, ShutdownResult, Ssl, SslAcceptor, SslConnector, SslContext, SslFiletype, SslMethod, SslStream, SslVerifyMode, StatusType}; +#[cfg(any(all(feature = "v110", ossl110), all(feature = "v111", ossl111)))] +use ssl::SslSessionCacheMode; use x509::{X509, X509Name, X509StoreContext, X509VerifyResult}; #[cfg(any(all(feature = "v102", ossl102), all(feature = "v110", ossl110), all(feature = "v111", ossl111)))] @@ -1245,6 +1247,40 @@ fn status_callbacks() { guard.join().unwrap(); } +#[test] +#[cfg(any(all(feature = "v110", ossl110), all(feature = "v111", ossl111)))] +fn new_session_callback() { + static CALLED_BACK: AtomicBool = ATOMIC_BOOL_INIT; + + let listener = TcpListener::bind("127.0.0.1:0").unwrap(); + let port = listener.local_addr().unwrap().port(); + + thread::spawn(move || { + let stream = listener.accept().unwrap().0; + let mut ctx = SslContext::builder(SslMethod::tls()).unwrap(); + ctx.set_certificate_file(&Path::new("test/cert.pem"), SslFiletype::PEM) + .unwrap(); + ctx.set_private_key_file(&Path::new("test/key.pem"), SslFiletype::PEM) + .unwrap(); + ctx.set_session_id_context(b"foo").unwrap(); + let ssl = Ssl::new(&ctx.build()).unwrap(); + let mut stream = ssl.accept(stream).unwrap(); + stream.write_all(&[0]).unwrap(); + }); + + let stream = TcpStream::connect(("127.0.0.1", port)).unwrap(); + let mut ctx = SslContext::builder(SslMethod::tls()).unwrap(); + ctx.set_session_cache_mode(SslSessionCacheMode::CLIENT | SslSessionCacheMode::NO_INTERNAL); + ctx.set_new_session_callback(|_, _| CALLED_BACK.store(true, Ordering::SeqCst)); + let ssl = Ssl::new(&ctx.build()).unwrap(); + let mut stream = ssl.connect(stream).unwrap(); + // read 1 byte to make sure the session is received for TLSv1.3 + let mut buf = [0]; + stream.read_exact(&mut buf).unwrap(); + + assert!(CALLED_BACK.load(Ordering::SeqCst)); +} + fn _check_kinds() { fn is_send<T: Send>() {} fn is_sync<T: Sync>() {} |