Add tests for SNI
diff --git a/tests/ssl-opt.sh b/tests/ssl-opt.sh
index 28ed048..d24fa0b 100755
--- a/tests/ssl-opt.sh
+++ b/tests/ssl-opt.sh
@@ -48,10 +48,10 @@
shift
# run the commands
- $SRV_CMD $1 > srv_out &
+ $SHELL -c "$SRV_CMD $1" > srv_out &
SRV_PID=$!
sleep 1
- $CLI_CMD $2 > cli_out
+ $SHELL -c "$CLI_CMD $2" > cli_out
CLI_EXIT=$?
echo SERVERQUIT | openssl s_client -no_ticket \
-cert data_files/cli2.crt -key data_files/cli2.key \
@@ -461,6 +461,53 @@
-C "! ssl_handshake returned" \
-S "X509 - Certificate verification failed"
+# tests for SNI
+
+run_test "SNI #0 (no SNI callback)" \
+ "debug_level=4 server_addr=127.0.0.1 \
+ crt_file=data_files/server5.crt key_file=data_files/server5.key" \
+ "debug_level=0 server_addr=127.0.0.1 \
+ server_name=localhost" \
+ 0 \
+ -S "parse ServerName extension" \
+ -c "issuer name *: C=NL, O=PolarSSL, CN=Polarssl Test EC CA" \
+ -c "subject name *: C=NL, O=PolarSSL, CN=localhost"
+
+run_test "SNI #1 (matching cert 1)" \
+ "debug_level=4 server_addr=127.0.0.1 \
+ crt_file=data_files/server5.crt key_file=data_files/server5.key \
+ sni='localhost,data_files/server2.crt,data_files/server2.key,PolarSSL Server 1,data_files/server1.crt,data_files/server1.key'" \
+ "debug_level=0 server_addr=127.0.0.1 \
+ server_name=localhost" \
+ 0 \
+ -s "parse ServerName extension" \
+ -c "issuer name *: C=NL, O=PolarSSL, CN=PolarSSL Test CA" \
+ -c "subject name *: C=NL, O=PolarSSL, CN=localhost"
+
+run_test "SNI #2 (matching cert 2)" \
+ "debug_level=4 server_addr=127.0.0.1 \
+ crt_file=data_files/server5.crt key_file=data_files/server5.key \
+ sni='localhost,data_files/server2.crt,data_files/server2.key,PolarSSL Server 1,data_files/server1.crt,data_files/server1.key'" \
+ "debug_level=0 server_addr=127.0.0.1 \
+ server_name='PolarSSL Server 1'" \
+ 0 \
+ -s "parse ServerName extension" \
+ -c "issuer name *: C=NL, O=PolarSSL, CN=PolarSSL Test CA" \
+ -c "subject name *: C=NL, O=PolarSSL, CN=PolarSSL Server 1"
+
+run_test "SNI #3 (no matching cert)" \
+ "debug_level=4 server_addr=127.0.0.1 \
+ crt_file=data_files/server5.crt key_file=data_files/server5.key \
+ sni='localhost,data_files/server2.crt,data_files/server2.key,PolarSSL Server 1,data_files/server1.crt,data_files/server1.key'" \
+ "debug_level=0 server_addr=127.0.0.1 \
+ server_name='PolarSSL Server 2'" \
+ 1 \
+ -s "parse ServerName extension" \
+ -s "ssl_sni_wrapper() returned" \
+ -s "ssl_handshake returned" \
+ -c "ssl_handshake returned" \
+ -c "SSL - A fatal alert message was received from our peer"
+
# Final report
echo "------------------------------------------------------------------------"