diff options
Diffstat (limited to 'openssl/src/ssl/test.rs')
| -rw-r--r-- | openssl/src/ssl/test.rs | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/openssl/src/ssl/test.rs b/openssl/src/ssl/test.rs index b8e9b8c2..ae8c12de 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, SslSessionCacheMode, SslStream, SslVerifyMode, StatusType}; +#[cfg(any(all(feature = "v110", ossl110), all(feature = "v111", ossl111)))] +use ssl::SslVersion; use x509::{X509, X509Name, X509StoreContext, X509VerifyResult}; #[cfg(any(all(feature = "v102", ossl102), all(feature = "v110", ossl110), all(feature = "v111", ossl111)))] @@ -1320,6 +1322,37 @@ fn keying_export() { assert_eq!(buf, buf2); } +#[test] +#[cfg(any(all(feature = "v110", ossl110), all(feature = "v111", ossl111)))] +fn no_version_overlap() { + let listener = TcpListener::bind("127.0.0.1:0").unwrap(); + let addr = listener.local_addr().unwrap(); + + let guard = 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_max_proto_version(Some(SslVersion::TLS1_1)).unwrap(); + assert_eq!(ctx.min_proto_version(), None); + assert_eq!(ctx.max_proto_version(), Some(SslVersion::TLS1_1)); + let ssl = Ssl::new(&ctx.build()).unwrap(); + ssl.accept(stream).unwrap_err(); + }); + + let stream = TcpStream::connect(addr).unwrap(); + let mut ctx = SslContext::builder(SslMethod::tls()).unwrap(); + ctx.set_min_proto_version(Some(SslVersion::TLS1_2)).unwrap(); + assert_eq!(ctx.min_proto_version(), Some(SslVersion::TLS1_2)); + assert_eq!(ctx.max_proto_version(), None); + let ssl = Ssl::new(&ctx.build()).unwrap(); + ssl.connect(stream).unwrap_err(); + + guard.join().unwrap(); +} + fn _check_kinds() { fn is_send<T: Send>() {} fn is_sync<T: Sync>() {} |