Cleanup ssl tests
This commit is contained in:
parent
576de0eaa2
commit
0b1c2a1048
|
|
@ -137,7 +137,6 @@ jobs:
|
||||||
<<# parameters.no_run >>--no-run<</ parameters.no_run >>
|
<<# parameters.no_run >>--no-run<</ parameters.no_run >>
|
||||||
- run: |
|
- run: |
|
||||||
ulimit -c unlimited
|
ulimit -c unlimited
|
||||||
export PATH=$OPENSSL_DIR/bin:$PATH
|
|
||||||
cargo test \
|
cargo test \
|
||||||
--manifest-path=openssl/Cargo.toml \
|
--manifest-path=openssl/Cargo.toml \
|
||||||
<<# parameters.vendored >>--features vendored<</ parameters.vendored >> \
|
<<# parameters.vendored >>--features vendored<</ parameters.vendored >> \
|
||||||
|
|
@ -187,7 +186,6 @@ jobs:
|
||||||
--manifest-path=openssl-errors/Cargo.toml \
|
--manifest-path=openssl-errors/Cargo.toml \
|
||||||
<<# parameters.vendored >> --features openssl-sys/vendored <</ parameters.vendored >>
|
<<# parameters.vendored >> --features openssl-sys/vendored <</ parameters.vendored >>
|
||||||
- run: |
|
- run: |
|
||||||
PATH=/usr/local/opt/openssl/bin:$PATH
|
|
||||||
cargo test \
|
cargo test \
|
||||||
--manifest-path=openssl/Cargo.toml \
|
--manifest-path=openssl/Cargo.toml \
|
||||||
<<# parameters.vendored >> --features vendored <</ parameters.vendored >>
|
<<# parameters.vendored >> --features vendored <</ parameters.vendored >>
|
||||||
|
|
|
||||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
|
@ -0,0 +1,167 @@
|
||||||
|
use std::io::{Read, Write};
|
||||||
|
use std::net::{SocketAddr, TcpListener, TcpStream};
|
||||||
|
use std::thread::{self, JoinHandle};
|
||||||
|
|
||||||
|
use ssl::{Ssl, SslContext, SslContextBuilder, SslFiletype, SslMethod, SslRef, SslStream};
|
||||||
|
|
||||||
|
pub struct Server {
|
||||||
|
handle: Option<JoinHandle<()>>,
|
||||||
|
addr: SocketAddr,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Drop for Server {
|
||||||
|
fn drop(&mut self) {
|
||||||
|
if !thread::panicking() {
|
||||||
|
self.handle.take().unwrap().join().unwrap();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Server {
|
||||||
|
pub fn builder() -> Builder {
|
||||||
|
let mut ctx = SslContext::builder(SslMethod::tls()).unwrap();
|
||||||
|
ctx.set_certificate_chain_file("test/cert.pem").unwrap();
|
||||||
|
ctx.set_private_key_file("test/key.pem", SslFiletype::PEM)
|
||||||
|
.unwrap();
|
||||||
|
|
||||||
|
Builder {
|
||||||
|
ctx,
|
||||||
|
ssl_cb: Box::new(|_| {}),
|
||||||
|
io_cb: Box::new(|_| {}),
|
||||||
|
should_error: false,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn client(&self) -> ClientBuilder {
|
||||||
|
ClientBuilder {
|
||||||
|
ctx: SslContext::builder(SslMethod::tls()).unwrap(),
|
||||||
|
addr: self.addr,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn connect_tcp(&self) -> TcpStream {
|
||||||
|
TcpStream::connect(self.addr).unwrap()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pub struct Builder {
|
||||||
|
ctx: SslContextBuilder,
|
||||||
|
ssl_cb: Box<FnMut(&mut SslRef) + Send>,
|
||||||
|
io_cb: Box<FnMut(SslStream<TcpStream>) + Send>,
|
||||||
|
should_error: bool,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Builder {
|
||||||
|
pub fn ctx(&mut self) -> &mut SslContextBuilder {
|
||||||
|
&mut self.ctx
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn ssl_cb<F>(&mut self, cb: F)
|
||||||
|
where
|
||||||
|
F: 'static + FnMut(&mut SslRef) + Send,
|
||||||
|
{
|
||||||
|
self.ssl_cb = Box::new(cb);
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn io_cb<F>(&mut self, cb: F)
|
||||||
|
where
|
||||||
|
F: 'static + FnMut(SslStream<TcpStream>) + Send,
|
||||||
|
{
|
||||||
|
self.io_cb = Box::new(cb);
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn should_error(&mut self) {
|
||||||
|
self.should_error = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn build(self) -> Server {
|
||||||
|
let ctx = self.ctx.build();
|
||||||
|
let socket = TcpListener::bind("127.0.0.1:0").unwrap();
|
||||||
|
let addr = socket.local_addr().unwrap();
|
||||||
|
let mut ssl_cb = self.ssl_cb;
|
||||||
|
let mut io_cb = self.io_cb;
|
||||||
|
let should_error = self.should_error;
|
||||||
|
|
||||||
|
let handle = thread::spawn(move || {
|
||||||
|
let socket = socket.accept().unwrap().0;
|
||||||
|
let mut ssl = Ssl::new(&ctx).unwrap();
|
||||||
|
ssl_cb(&mut ssl);
|
||||||
|
let r = ssl.accept(socket);
|
||||||
|
if should_error {
|
||||||
|
r.unwrap_err();
|
||||||
|
} else {
|
||||||
|
let mut socket = r.unwrap();
|
||||||
|
socket.write_all(&[0]).unwrap();
|
||||||
|
io_cb(socket);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
Server {
|
||||||
|
handle: Some(handle),
|
||||||
|
addr,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pub struct ClientBuilder {
|
||||||
|
ctx: SslContextBuilder,
|
||||||
|
addr: SocketAddr,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl ClientBuilder {
|
||||||
|
pub fn ctx(&mut self) -> &mut SslContextBuilder {
|
||||||
|
&mut self.ctx
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn build(self) -> Client {
|
||||||
|
Client {
|
||||||
|
ctx: self.ctx.build(),
|
||||||
|
addr: self.addr,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn connect(self) -> SslStream<TcpStream> {
|
||||||
|
self.build().builder().connect()
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn connect_err(self) {
|
||||||
|
self.build().builder().connect_err();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pub struct Client {
|
||||||
|
ctx: SslContext,
|
||||||
|
addr: SocketAddr,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Client {
|
||||||
|
pub fn builder(&self) -> ClientSslBuilder {
|
||||||
|
ClientSslBuilder {
|
||||||
|
ssl: Ssl::new(&self.ctx).unwrap(),
|
||||||
|
addr: self.addr,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pub struct ClientSslBuilder {
|
||||||
|
ssl: Ssl,
|
||||||
|
addr: SocketAddr,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl ClientSslBuilder {
|
||||||
|
pub fn ssl(&mut self) -> &mut SslRef {
|
||||||
|
&mut self.ssl
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn connect(self) -> SslStream<TcpStream> {
|
||||||
|
let socket = TcpStream::connect(self.addr).unwrap();
|
||||||
|
let mut s = self.ssl.connect(socket).unwrap();
|
||||||
|
s.read_exact(&mut [0]).unwrap();
|
||||||
|
s
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn connect_err(self) {
|
||||||
|
let socket = TcpStream::connect(self.addr).unwrap();
|
||||||
|
self.ssl.connect(socket).unwrap_err();
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue