|  | #!/bin/bash | 
|  | # Runs the D ThriftTest client and servers for all combinations of transport, | 
|  | # protocol, SSL-mode and server type. | 
|  | # Pass -k to keep going after failed tests. | 
|  |  | 
|  | protocols="binary compact json" | 
|  | transports="buffered framed http raw" | 
|  | servers="simple taskpool threaded" | 
|  | framed_only_servers="nonblocking pooledNonblocking" | 
|  |  | 
|  | # Don't leave any server instances behind when interrupted (e.g. by Ctrl+C) | 
|  | # or terminated. | 
|  | trap "kill $(jobs -p) 2>/dev/null" INT TERM | 
|  |  | 
|  | for protocol in $protocols; do | 
|  | for ssl in "" " --ssl"; do | 
|  | for transport in $transports; do | 
|  | for server in $servers $framed_only_servers; do | 
|  | case $framed_only_servers in | 
|  | *$server*) if [ $transport != "framed" ] || [ $ssl != "" ]; then continue; fi;; | 
|  | esac | 
|  |  | 
|  | args="--transport=$transport --protocol=$protocol$ssl" | 
|  | ./thrift_test_server $args --server-type=$server > /dev/null & | 
|  | server_pid=$! | 
|  |  | 
|  | # Give the server some time to get up and check if it runs (yes, this | 
|  | # is a huge kludge, should add a connect timeout to test client). | 
|  | client_rc=-1 | 
|  | sleep 0.01 | 
|  | kill -0 $server_pid 2>/dev/null | 
|  | if [ $? -eq 0 ]; then | 
|  | ./thrift_test_client $args --numTests=10 > /dev/null | 
|  | client_rc=$? | 
|  |  | 
|  | # Temporarily redirect stderr to null to avoid job control messages, | 
|  | # restore it afterwards. | 
|  | exec 3>&2 | 
|  | exec 2>/dev/null | 
|  | kill $server_pid | 
|  | exec 3>&2 | 
|  | fi | 
|  |  | 
|  | # Get the server exit code (wait should immediately return). | 
|  | wait $server_pid | 
|  | server_rc=$? | 
|  |  | 
|  | if [ $client_rc -ne 0 -o $server_rc -eq 1 ]; then | 
|  | echo -e "\nTests failed for: $args --server-type=$server" | 
|  | failed="true" | 
|  | if [ "$1" != "-k" ]; then | 
|  | exit 1 | 
|  | fi | 
|  | else | 
|  | echo -n "." | 
|  | fi | 
|  | done | 
|  | done | 
|  | done | 
|  | done | 
|  |  | 
|  | echo | 
|  | if [ -z "$failed" ]; then | 
|  | echo "All tests passed." | 
|  | fi |