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
39echo "THRIFT-4905 & THRIFT-5608: SSL tests are disabled.  Fix them."
40for protocol in $protocols; do
41  # TODO: fix and enable ssl
42  # for ssl in "" " --ssl"; do
43  for ssl in ""; do
44    for transport in $transports; do
45      for server in $servers $framed_only_servers; do
46        case $framed_only_servers in
47          *$server*) if [ $transport != "framed" ] || [ $ssl != "" ]; then continue; fi;;
48        esac
49
50        args="--transport=$transport --protocol=$protocol$ssl"
51        ${CUR}/thrift_test_server $args --server-type=$server > /dev/null &
52        server_pid=$!
53
54        # Give the server some time to get up and check if it runs (yes, this
55        # is a huge kludge, should add a connect timeout to test client).
56        client_rc=-1
57        if [ "$server" = "taskpool" ]; then
58          sleep 0.5
59        else
60          sleep 0.02
61        fi
62        kill -0 $server_pid 2>/dev/null
63        if [ $? -eq 0 ]; then
64          ${CUR}/thrift_test_client $args --numTests=10 > /dev/null
65          client_rc=$?
66
67          # Temporarily redirect stderr to null to avoid job control messages,
68          # restore it afterwards.
69          exec 3>&2
70          exec 2>/dev/null
71          kill $server_pid
72          exec 3>&2
73        fi
74
75        # Get the server exit code (wait should immediately return).
76        wait $server_pid
77        server_rc=$?
78
79        if [ $client_rc -ne 0 -o $server_rc -eq 1 ]; then
80          echo -e "\nTests failed for: $args --server-type=$server"
81          failed="true"
82          if [ "$1" != "-k" ]; then
83            exit 1
84          fi
85        else
86           echo -n "."
87        fi
88      done
89    done
90  done
91done
92
93echo
94if [ -z "$failed" ]; then
95  echo "All tests passed."
96fi
97