1#!/bin/bash
2
3#
4# Licensed to the Apache Software Foundation (ASF) under one
5# or more contributor license agreements. See the NOTICE file
6# distributed with this work for additional information
7# regarding copyright ownership. The ASF licenses this file
8# to you under the Apache License, Version 2.0 (the
9# "License"); you may not use this file except in compliance
10# with the License. You may obtain a copy of the License at
11#
12#   http://www.apache.org/licenses/LICENSE-2.0
13#
14# Unless required by applicable law or agreed to in writing,
15# software distributed under the License is distributed on an
16# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17# KIND, either express or implied. See the License for the
18# specific language governing permissions and limitations
19# under the License.
20#
21
22# Runs the D ThriftTest client and servers for all combinations of transport,
23# protocol, SSL-mode and server type.
24# Pass -k to keep going after failed tests.
25
26CUR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
27
28protocols="binary compact json"
29# TODO: fix and enable http
30# transports="buffered framed raw http"
31transports="buffered framed raw"
32servers="simple taskpool threaded"
33framed_only_servers="nonblocking pooledNonblocking"
34
35# Don't leave any server instances behind when interrupted (e.g. by Ctrl+C)
36# or terminated.
37trap "kill $(jobs -p) 2>/dev/null" INT TERM
38
39for protocol in $protocols; do
40  for ssl in "" " --ssl"; do
41    for transport in $transports; do
42      for server in $servers $framed_only_servers; do
43        case $framed_only_servers in
44          *$server*) if [ $transport != "framed" ] || [ $ssl != "" ]; then continue; fi;;
45        esac
46
47        args="--transport=$transport --protocol=$protocol$ssl"
48        ${CUR}/thrift_test_server $args --server-type=$server > /dev/null &
49        server_pid=$!
50
51        # Give the server some time to get up and check if it runs (yes, this
52        # is a huge kludge, should add a connect timeout to test client).
53        client_rc=-1
54        if [ "$server" = "taskpool" ]; then
55          sleep 0.5
56        else
57          sleep 0.02
58        fi
59        kill -0 $server_pid 2>/dev/null
60        if [ $? -eq 0 ]; then
61          ${CUR}/thrift_test_client $args --numTests=10 > /dev/null
62          client_rc=$?
63
64          # Temporarily redirect stderr to null to avoid job control messages,
65          # restore it afterwards.
66          exec 3>&2
67          exec 2>/dev/null
68          kill $server_pid
69          exec 3>&2
70        fi
71
72        # Get the server exit code (wait should immediately return).
73        wait $server_pid
74        server_rc=$?
75
76        if [ $client_rc -ne 0 -o $server_rc -eq 1 ]; then
77          echo -e "\nTests failed for: $args --server-type=$server"
78          failed="true"
79          if [ "$1" != "-k" ]; then
80            exit 1
81          fi
82        else
83           echo -n "."
84        fi
85      done
86    done
87  done
88done
89
90echo
91if [ -z "$failed" ]; then
92  echo "All tests passed."
93fi
94