summaryrefslogtreecommitdiffstats
path: root/tests/scripts
diff options
context:
space:
mode:
Diffstat (limited to 'tests/scripts')
-rw-r--r--tests/scripts/common.sh284
-rwxr-xr-xtests/scripts/starttls-common.sh57
2 files changed, 341 insertions, 0 deletions
diff --git a/tests/scripts/common.sh b/tests/scripts/common.sh
new file mode 100644
index 0000000..bac8102
--- /dev/null
+++ b/tests/scripts/common.sh
@@ -0,0 +1,284 @@
+# Copyright (C) 2011-2016 Free Software Foundation, Inc.
+# Copyright (C) 2015-2016 Red Hat, Inc.
+#
+# This file is part of GnuTLS.
+#
+# The launch_server() function was contributed by Cedric Arbogast.
+#
+# This file is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This file 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
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this file; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+
+export TZ="UTC"
+
+# Check for a utility to list ports. Both ss and netstat will list
+# ports for normal users, and have similar semantics, so put the
+# command in the caller's PFCMD, or exit, indicating an unsupported
+# test. Prefer ss from iproute2 over the older netstat.
+have_port_finder() {
+ # Prefer PFCMD if set
+ if test "${PFCMD+set}" = set; then
+ return
+ fi
+
+ if (ss --version) > /dev/null 2>&1; then
+ PFCMD=ss
+ return
+ fi
+
+ # 'ss' might be installed in /sbin
+ for dir in /sbin /usr/sbin /usr/local/sbin; do
+ if ($dir/ss --version) > /dev/null 2>&1; then
+ PFCMD=$dir/ss
+ return
+ fi
+ done
+
+ # We can't assume netstat --version for portability reasons
+ if (type netstat) > /dev/null 2>&1; then
+ PFCMD=netstat
+ return
+ fi
+
+ echo "neither ss nor netstat found" 1>&2
+ exit 77
+}
+
+reserve_port() {
+ local PORT=$1
+ mkdir "$abs_top_builddir/tests/port.lock.d.$PORT" > /dev/null 2>&1 || return 1
+ echo "reserved port $PORT"
+ trap "unreserve_port $PORT" 0 1 15 2
+}
+
+unreserve_port() {
+ local PORT=$1
+ echo "unreserved port $PORT"
+ rmdir "$abs_top_builddir/tests/port.lock.d.$PORT" > /dev/null 2>&1 || :
+}
+
+check_if_port_in_use() {
+ local PORT=$1
+ reserve_port $PORT
+ have_port_finder
+ if ! $PFCMD -an|grep "[\:\.]$PORT" >/dev/null 2>&1; then
+ return 1
+ fi
+ unreserve_port $PORT
+}
+
+check_if_port_listening() {
+ local PORT=$1
+ have_port_finder
+ $PFCMD -anl|grep "[\:\.]$PORT"|grep LISTEN >/dev/null 2>&1
+}
+
+# Find a port number not currently in use.
+GETPORT='
+ rc=0
+ while test $rc = 0; do
+ unset myrandom
+ if test -n "$RANDOM"; then myrandom=$(($RANDOM + $RANDOM)); fi
+ if test -z "$myrandom"; then myrandom=$(date +%N | sed s/^0*//); fi
+ if test -z "$myrandom"; then myrandom=0; fi
+ PORT="$(((($$<<15)|$myrandom) % 63001 + 2000))"
+ check_if_port_in_use $PORT;rc=$?
+ done
+'
+
+check_for_datefudge() {
+ # On certain platforms running datefudge date fails (e.g., x86 datefudge
+ # with x86-64 date app).
+ if test "${SKIP_DATEFUDGE_CHECK}" = 1;then
+ return
+ fi
+
+ TSTAMP=`datefudge -s "2006-09-23" "${top_builddir}/tests/datefudge-check" || true`
+ if test "$TSTAMP" != "1158969600" || test "$WINDOWS" = 1; then
+ return 1
+ fi
+}
+
+skip_if_no_datefudge() {
+ if ! check_for_datefudge; then
+ echo "You need datefudge to run this test"
+ exit 77
+ fi
+}
+
+fail() {
+ PID="$1"
+ shift
+ echo "Failure: $1" >&2
+ [ -n "${PID}" ] && kill ${PID}
+ exit 1
+}
+
+exit_if_non_x86()
+{
+ if (lscpu --version) >/dev/null 2>&1 && \
+ ! lscpu 2>/dev/null | grep 'Architecture:[ ]*x86' >/dev/null; then
+ echo "non-x86 CPU detected"
+ exit
+ fi
+}
+
+exit_if_non_padlock()
+{
+ if (lscpu --version) >/dev/null 2>&1 && \
+ ! lscpu 2>/dev/null | grep 'Flags:[ ]*phe' >/dev/null; then
+ echo "non-Via padlock CPU detected"
+ exit
+ fi
+}
+
+wait_for_port()
+{
+ local ret
+ local PORT="$1"
+ sleep 1
+
+ local i=0
+ while test $i -lt 90; do
+ check_if_port_listening ${PORT}
+ ret=$?
+ if test $ret = 0;then
+ break
+ fi
+ i=`expr $i + 1`
+ check_if_port_in_use ${PORT}
+ echo "try $i: waiting for port"
+ sleep 2
+ done
+ return $ret
+}
+
+wait_for_free_port()
+{
+ local ret
+ local PORT="$1"
+
+ for i in 1 2 3 4 5 6;do
+ check_if_port_in_use ${PORT}
+ ret=$?
+ if test $ret != 0;then
+ break
+ else
+ sleep 2
+ fi
+ done
+ return $ret
+}
+
+launch_bare_server() {
+ wait_for_free_port "$PORT"
+ "$@" >${LOGFILE-/dev/null} &
+}
+
+launch_server() {
+ launch_bare_server $VALGRIND $SERV $DEBUG -p "$PORT" "$@"
+}
+
+wait_server() {
+ local PID=$1
+ trap "test -n \"${PID}\" && kill ${PID}; exit 1" 1 15 2
+ wait_for_port $PORT
+ if test $? != 0;then
+ echo "Server $PORT did not come up"
+ kill $PID
+ exit 1
+ fi
+}
+
+wait_udp_server() {
+ local PID=$1
+ trap "test -n \"${PID}\" && kill ${PID};exit 1" 1 15 2
+ sleep 4
+}
+
+create_testdir() {
+ local PREFIX=$1
+ d=`mktemp -d -t ${PREFIX}.XXXXXX`
+ if test $? -ne 0; then
+ d=${TMPDIR}/${PREFIX}.$$
+ mkdir "$d" || exit 1
+ fi
+ trap "test -e \"$d\" && rm -rf \"$d\"" 1 15 2
+ echo "$d"
+}
+
+wait_for_file() {
+ local filename="$1"
+ local timeout="$2"
+
+ local loops=$((timeout * 10)) loop=0
+
+ while test $loop -lt $loops; do
+ [ -f "$filename" ] && {
+ #allow file to be written to
+ sleep 0.2
+ return 1
+ }
+ sleep 0.1
+ loop=$((loop+1))
+ done
+ return 0
+}
+
+# Kill a process quietly
+# @1: signal, e.g. -9
+# @2: pid
+kill_quiet() {
+ local sig="$1"
+ local pid="$2"
+
+ sh -c "kill $sig $pid 2>/dev/null"
+ return $?
+}
+
+# Terminate a process first using SIGTERM, wait 1s and if still avive use
+# SIGKILL
+# @1: pid
+terminate_proc() {
+ local pid="$1"
+
+ local ctr=0
+
+ kill_quiet -15 $pid
+ while [ $ctr -lt 10 ]; do
+ sleep 0.1
+ kill -0 $pid 2>/dev/null
+ [ $? -ne 0 ] && return
+ ctr=$((ctr + 1))
+ done
+ kill_quiet -9 $pid
+ sleep 0.1
+}
+
+# $1, $2: the two files to check for equality
+# $3: Strings to be ignored, separated by |
+check_if_equal() {
+ if test -n "$3"; then
+ local tmp1=`basename "$1"`"1.tmp"
+ local tmp2=`basename "$2"`"2.tmp"
+ egrep -v "$3" "$1" | tr -d '\r' >"$tmp1"
+ egrep -v "$3" "$2" | tr -d '\r' >"$tmp2"
+ diff -b -B "$tmp1" "$tmp2"
+ local rc=$?
+ rm -f "$tmp1" "$tmp2"
+ return $rc
+ fi
+
+ diff -b -B "$1" "$2"
+ return $?
+}
diff --git a/tests/scripts/starttls-common.sh b/tests/scripts/starttls-common.sh
new file mode 100755
index 0000000..0fa13f1
--- /dev/null
+++ b/tests/scripts/starttls-common.sh
@@ -0,0 +1,57 @@
+#!/bin/sh
+
+# Copyright (C) 2010-2016 Free Software Foundation, Inc.
+#
+# Author: Nikos Mavrogiannopoulos
+#
+# This file is part of GnuTLS.
+#
+# GnuTLS is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by the
+# Free Software Foundation; either version 3 of the License, or (at
+# your option) any later version.
+#
+# GnuTLS 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
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GnuTLS; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+
+if ! test -x "${SERV}"; then
+ exit 77
+fi
+
+if ! test -x "${CLI}"; then
+ exit 77
+fi
+
+if test "${WINDIR}" != ""; then
+ exit 77
+fi
+
+if ! test -z "${VALGRIND}"; then
+ VALGRIND="${LIBTOOL:-libtool} --mode=execute ${VALGRIND} --error-exitcode=15"
+fi
+
+if test ! -x /usr/bin/socat;then
+ exit 77
+fi
+
+for file in `which chat` /sbin/chat /usr/sbin/chat /usr/local/sbin/chat
+do
+ if test -x "$file"
+ then
+ CHAT="$file"
+ break
+ fi
+done
+
+if test -z "$CHAT"
+then
+ echo "chat not found"
+ exit 77
+fi
+