diff --git a/rustls-libssl/tests/runner.rs b/rustls-libssl/tests/runner.rs
index c9f0dc5..2cadb44 100644
--- a/rustls-libssl/tests/runner.rs
+++ b/rustls-libssl/tests/runner.rs
@@ -1,6 +1,6 @@
use std::io::Read;
use std::process::{Child, Command, Output, Stdio};
-use std::{net, thread, time};
+use std::{fs, net, thread, time};
/* Note:
*
@@ -322,6 +322,95 @@ fn server() {
assert_eq!(openssl_output, rustls_output);
}
+const NGINX_LOG_LEVEL: &str = "info";
+
+#[test]
+#[ignore]
+fn nginx() {
+ fs::create_dir_all("target/nginx-tmp/basic/html").unwrap();
+ fs::write(
+ "target/nginx-tmp/basic/server.conf",
+ "
+daemon off;
+master_process off;
+pid nginx.pid;
+
+events {
+}
+
+http {
+ ssl_session_cache none;
+ access_log access.log;
+
+ server {
+ listen 8443 ssl;
+ server_name localhost;
+ ssl_certificate ../../../test-ca/rsa/server.cert;
+ ssl_certificate_key ../../../test-ca/rsa/server.key;
+ }
+}
+",
+ )
+ .unwrap();
+
+ fs::write(
+ "target/nginx-tmp/basic/html/welcome.html",
+ "
hello world!
",
+ )
+ .unwrap();
+ let big_file = vec![b'a'; 5 * 1024 * 1024];
+ fs::write("target/nginx-tmp/basic/html/large.html", &big_file).unwrap();
+
+ let nginx_server = KillOnDrop(Some(
+ Command::new("tests/maybe-valgrind.sh")
+ .args([
+ "nginx",
+ "-g",
+ &format!("error_log stderr {NGINX_LOG_LEVEL};"),
+ "-p",
+ "./target/nginx-tmp/basic",
+ "-c",
+ "server.conf",
+ ])
+ .spawn()
+ .unwrap(),
+ ));
+ wait_for_port(8443);
+
+ assert_eq!(
+ Command::new("curl")
+ .env("LD_LIBRARY_PATH", "")
+ .args([
+ "--cacert",
+ "test-ca/rsa/ca.cert",
+ "https://localhost:8443/welcome.html"
+ ])
+ .stdout(Stdio::piped())
+ .output()
+ .map(print_output)
+ .unwrap()
+ .stdout,
+ b"hello world!
"
+ );
+
+ assert_eq!(
+ Command::new("curl")
+ .env("LD_LIBRARY_PATH", "")
+ .args([
+ "--cacert",
+ "test-ca/rsa/ca.cert",
+ "https://localhost:8443/large.html"
+ ])
+ .stdout(Stdio::piped())
+ .output()
+ .unwrap()
+ .stdout,
+ big_file
+ );
+
+ drop(nginx_server);
+}
+
struct KillOnDrop(Option);
impl KillOnDrop {