summaryrefslogtreecommitdiff
path: root/runtests.sh
blob: 39ca364bf0f4e122b99bf2585dbe774489a3fac8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
#! /bin/sh

# Copyright (C) 2001 by Martin Pool <mbp@samba.org>

# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU Lesser General Public License version
# 2.1 as published by the Free Software Foundation.
#
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
# Lesser General Public License for more details.
# 
# You should have received a copy of the GNU Lesser General Public
# License along with this program; if not, write to the Free Software
# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.


# rsync top-level test script -- this invokes all the other more
# detailed tests in order.  This script can either be called by `make
# check' or `make installcheck'.  `check' runs against the copies of
# the program and other files in the build directory, and
# `installcheck' against the installed copy of the program.  

# In either case we need to also be able to find the source directory,
# since we read test scripts and possibly other information from
# there.

# Whenever possible, informational messages are written to stdout and
# error messages to stderr.  They're separated out by the build farm
# display scripts.

# According to the GNU autoconf manual, the only valid place to set up
# directory locations is through Make, since users are allowed to (try
# to) change their mind on the Make command line.  So, Make has to
# pass in all the values we need.

# For other configured settings we read ./config.sh, which tells us
# about shell commands on this machine and similar things.

# rsync_bin gives the location of the rsync binary.  This is either
# builddir/rsync if we're testing an uninstalled copy, or
# install_prefix/bin/rsync if we're testing an installed copy.  On the
# build farm rsync will be installed, but into a scratch /usr.

# srcdir gives the location of the source tree, which lets us find the
# build scripts.  At the moment we assume we are invoked from the
# source directory.

# This script must be invoked from the build directory.  

# A scratch directory, 'testtmp', is created in the build directory to
# hold working files.

# This script also uses the $loglevel environment variable.  1 is the
# default value, and 10 the most verbose.  You can set this from the
# Make command line.  It's also set by the build farm to give more
# detail for failing builds.


# NOTES FOR TEST CASES:

# Each test case runs in its own shell. 

# Exit codes: (passed back to build farm):

#    1  tests failed
#    2  error in starting tests
#   77  this test skipped (random value unlikely to happen by chance, same as
#       automake)

# rsync.fns contains some general setup functions and definitions.


# NOTES ON PORTABILITY:

# Both this script and the Makefile have to be pretty conservative
# about which Unix features they use.

# We cannot count on Make exporting variables to commands, unless
# they're explicitly given on the command line.

# Also, we can't count on 'cp -a' or 'mkdir -p', although they're
# pretty handy.

# Eventually we would like to not count on shell functions.


set -e

. "./shconfig"

RUNSHFLAGS='-e'

if [ -n "$loglevel" ] && [ "$loglevel" -gt 8 ]
then
    RUNSHFLAGS="$RUNSHFLAGS -x"
    set -x
fi

echo "============================================================"
echo "$0 running in `pwd`"
echo "    rsync_bin=$rsync_bin"
echo "    srcdir=$srcdir"

if ! test -f $rsync_bin
then
    echo "rsync_bin $rsync_bin is not a file" >&2
    exit 2
fi

if ! test -d $srcdir
then
    echo "srcdir $srcdir is not a directory" >&2
    exit 2
fi


export rsync_bin

skipped=0
missing=0
passed=0
failed=0

scratchdir=./testtmp
[ -d "$scratchdir" ] && rm -r "$scratchdir"
mkdir "$scratchdir"

echo "    scratchdir=$scratchdir"
suitedir="$srcdir/testsuite"

export scratchdir suitedir

for testbase in rsync-hello hands ssh-basic
do
    testscript="$suitedir/$testbase.test"
    if test \! -f "$testscript" 
    then
	echo "$testscript does not exist" >&2
	missing=`expr $missing + 1`
	continue
    fi

    echo "------------------------------------------------------------"
    echo "----- $testbase running"

    if sh $RUNSHFLAGS "$testscript"
    then
	echo "----- $testbase completed succesfully"
	passed=`expr $passed + 1`
    else 
	case $? in
	77)
	    echo "----- $testbase skipped"
	    skipped=`expr $skipped + 1`
	    ;;
	*)
	    echo "----- $testbase failed!"
	    failed=`expr $failed + 1`
	esac
    fi
done

echo '------------------------------------------------------------'
echo "----- overall results:"
echo "      $passed passed"
echo "      $failed failed"
echo "      $skipped skipped"
echo "      $missing missing"
echo '------------------------------------------------------------'

if test $failed -gt 0
then
    exit 1
else
    exit 0
fi