test/make/autoconf/test-utils.sh
author ihse
Tue, 04 Dec 2018 12:16:01 +0100
branchihse-test-autonconf-branch
changeset 57058 48d12f5a824c
permissions -rw-r--r--
Import initial implementation by tgranat.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
57058
48d12f5a824c Import initial implementation by tgranat.
ihse
parents:
diff changeset
     1
#!/bin/sh
48d12f5a824c Import initial implementation by tgranat.
ihse
parents:
diff changeset
     2
48d12f5a824c Import initial implementation by tgranat.
ihse
parents:
diff changeset
     3
# BUILDDIR is set to where configure will be run
48d12f5a824c Import initial implementation by tgranat.
ihse
parents:
diff changeset
     4
# CONFIGURE is set to the configure script to test
48d12f5a824c Import initial implementation by tgranat.
ihse
parents:
diff changeset
     5
# TEMPOUT is a temporary file logging stdout
48d12f5a824c Import initial implementation by tgranat.
ihse
parents:
diff changeset
     6
# TEMPERR is a temporary file logging stderr
48d12f5a824c Import initial implementation by tgranat.
ihse
parents:
diff changeset
     7
48d12f5a824c Import initial implementation by tgranat.
ihse
parents:
diff changeset
     8
GREP=grep
48d12f5a824c Import initial implementation by tgranat.
ihse
parents:
diff changeset
     9
48d12f5a824c Import initial implementation by tgranat.
ihse
parents:
diff changeset
    10
Setup() {
48d12f5a824c Import initial implementation by tgranat.
ihse
parents:
diff changeset
    11
# If TESTSRC not set, use current directory. TESTSRC is set by jtreg
48d12f5a824c Import initial implementation by tgranat.
ihse
parents:
diff changeset
    12
    BUILDDIR=${TESTSRC-$PWD}/`mktemp -d build.XXXXXXXXX`
48d12f5a824c Import initial implementation by tgranat.
ihse
parents:
diff changeset
    13
48d12f5a824c Import initial implementation by tgranat.
ihse
parents:
diff changeset
    14
# Set the configure script to test relative to BUILDDIR.
48d12f5a824c Import initial implementation by tgranat.
ihse
parents:
diff changeset
    15
    CONFIGURE=${BUILDDIR}/../../../../configure
48d12f5a824c Import initial implementation by tgranat.
ihse
parents:
diff changeset
    16
48d12f5a824c Import initial implementation by tgranat.
ihse
parents:
diff changeset
    17
# Set temporary files for stdout and stderr from the configure script execution
48d12f5a824c Import initial implementation by tgranat.
ihse
parents:
diff changeset
    18
    TEMPOUT=`mktemp`
48d12f5a824c Import initial implementation by tgranat.
ihse
parents:
diff changeset
    19
    TEMPERR=`mktemp`
48d12f5a824c Import initial implementation by tgranat.
ihse
parents:
diff changeset
    20
48d12f5a824c Import initial implementation by tgranat.
ihse
parents:
diff changeset
    21
# Create build directory to run configure in
48d12f5a824c Import initial implementation by tgranat.
ihse
parents:
diff changeset
    22
    Sys rm -rf ${BUILDDIR} 
48d12f5a824c Import initial implementation by tgranat.
ihse
parents:
diff changeset
    23
    Sys mkdir ${BUILDDIR}
48d12f5a824c Import initial implementation by tgranat.
ihse
parents:
diff changeset
    24
    Sys cd ${BUILDDIR}
48d12f5a824c Import initial implementation by tgranat.
ihse
parents:
diff changeset
    25
48d12f5a824c Import initial implementation by tgranat.
ihse
parents:
diff changeset
    26
# Clean up
48d12f5a824c Import initial implementation by tgranat.
ihse
parents:
diff changeset
    27
    trap 'Cleanup' EXIT
48d12f5a824c Import initial implementation by tgranat.
ihse
parents:
diff changeset
    28
}
48d12f5a824c Import initial implementation by tgranat.
ihse
parents:
diff changeset
    29
48d12f5a824c Import initial implementation by tgranat.
ihse
parents:
diff changeset
    30
# Run command and verify that it returned an expected result code != 0
48d12f5a824c Import initial implementation by tgranat.
ihse
parents:
diff changeset
    31
# $1 = command
48d12f5a824c Import initial implementation by tgranat.
ihse
parents:
diff changeset
    32
48d12f5a824c Import initial implementation by tgranat.
ihse
parents:
diff changeset
    33
Failure() {
48d12f5a824c Import initial implementation by tgranat.
ihse
parents:
diff changeset
    34
    Test failure "$@"
48d12f5a824c Import initial implementation by tgranat.
ihse
parents:
diff changeset
    35
}
48d12f5a824c Import initial implementation by tgranat.
ihse
parents:
diff changeset
    36
48d12f5a824c Import initial implementation by tgranat.
ihse
parents:
diff changeset
    37
# Run command and verify that it returned an expected result code = 0
48d12f5a824c Import initial implementation by tgranat.
ihse
parents:
diff changeset
    38
# $1 = command
48d12f5a824c Import initial implementation by tgranat.
ihse
parents:
diff changeset
    39
Success() {
48d12f5a824c Import initial implementation by tgranat.
ihse
parents:
diff changeset
    40
    Test success "$@"
48d12f5a824c Import initial implementation by tgranat.
ihse
parents:
diff changeset
    41
}
48d12f5a824c Import initial implementation by tgranat.
ihse
parents:
diff changeset
    42
48d12f5a824c Import initial implementation by tgranat.
ihse
parents:
diff changeset
    43
# Verify the existence of a certain string in a file
48d12f5a824c Import initial implementation by tgranat.
ihse
parents:
diff changeset
    44
# $1 = string to look for (using "grep" format)
48d12f5a824c Import initial implementation by tgranat.
ihse
parents:
diff changeset
    45
# $2 = file to look in
48d12f5a824c Import initial implementation by tgranat.
ihse
parents:
diff changeset
    46
48d12f5a824c Import initial implementation by tgranat.
ihse
parents:
diff changeset
    47
StringInFile() {
48d12f5a824c Import initial implementation by tgranat.
ihse
parents:
diff changeset
    48
    AdditionalTest success "$GREP" "$1" "$2"
48d12f5a824c Import initial implementation by tgranat.
ihse
parents:
diff changeset
    49
}
48d12f5a824c Import initial implementation by tgranat.
ihse
parents:
diff changeset
    50
48d12f5a824c Import initial implementation by tgranat.
ihse
parents:
diff changeset
    51
# Verify that a certain string doesn't exist in a file
48d12f5a824c Import initial implementation by tgranat.
ihse
parents:
diff changeset
    52
# $1 = string to look for (using "grep" format)
48d12f5a824c Import initial implementation by tgranat.
ihse
parents:
diff changeset
    53
# $2 = file to look in
48d12f5a824c Import initial implementation by tgranat.
ihse
parents:
diff changeset
    54
48d12f5a824c Import initial implementation by tgranat.
ihse
parents:
diff changeset
    55
StringNotInFile() {
48d12f5a824c Import initial implementation by tgranat.
ihse
parents:
diff changeset
    56
    AdditionalTest failure "$GREP" "$1" "$2"
48d12f5a824c Import initial implementation by tgranat.
ihse
parents:
diff changeset
    57
}
48d12f5a824c Import initial implementation by tgranat.
ihse
parents:
diff changeset
    58
48d12f5a824c Import initial implementation by tgranat.
ihse
parents:
diff changeset
    59
# Present a summary of the results
48d12f5a824c Import initial implementation by tgranat.
ihse
parents:
diff changeset
    60
ResultSummary() {
48d12f5a824c Import initial implementation by tgranat.
ihse
parents:
diff changeset
    61
    HorizontalRule
48d12f5a824c Import initial implementation by tgranat.
ihse
parents:
diff changeset
    62
    if test -n "$failed"; then
48d12f5a824c Import initial implementation by tgranat.
ihse
parents:
diff changeset
    63
	count=`printf "%s" "$failed" | wc -c | tr -d ' '`
48d12f5a824c Import initial implementation by tgranat.
ihse
parents:
diff changeset
    64
	echo "FAIL: $count tests failed"
48d12f5a824c Import initial implementation by tgranat.
ihse
parents:
diff changeset
    65
	exit 1
48d12f5a824c Import initial implementation by tgranat.
ihse
parents:
diff changeset
    66
    else
48d12f5a824c Import initial implementation by tgranat.
ihse
parents:
diff changeset
    67
	echo "PASS: all tests gave expected results"
48d12f5a824c Import initial implementation by tgranat.
ihse
parents:
diff changeset
    68
	exit 0
48d12f5a824c Import initial implementation by tgranat.
ihse
parents:
diff changeset
    69
    fi
48d12f5a824c Import initial implementation by tgranat.
ihse
parents:
diff changeset
    70
}
48d12f5a824c Import initial implementation by tgranat.
ihse
parents:
diff changeset
    71
48d12f5a824c Import initial implementation by tgranat.
ihse
parents:
diff changeset
    72
#
48d12f5a824c Import initial implementation by tgranat.
ihse
parents:
diff changeset
    73
# Local functions.
48d12f5a824c Import initial implementation by tgranat.
ihse
parents:
diff changeset
    74
# The functions below should normally not be called from the test scripts
48d12f5a824c Import initial implementation by tgranat.
ihse
parents:
diff changeset
    75
#
48d12f5a824c Import initial implementation by tgranat.
ihse
parents:
diff changeset
    76
Cleanup() {
48d12f5a824c Import initial implementation by tgranat.
ihse
parents:
diff changeset
    77
    HorizontalRule
48d12f5a824c Import initial implementation by tgranat.
ihse
parents:
diff changeset
    78
    Sys rm -rf ${BUILDDIR}
48d12f5a824c Import initial implementation by tgranat.
ihse
parents:
diff changeset
    79
    Sys rm ${TEMPOUT} ${TEMPERR}
48d12f5a824c Import initial implementation by tgranat.
ihse
parents:
diff changeset
    80
}
48d12f5a824c Import initial implementation by tgranat.
ihse
parents:
diff changeset
    81
48d12f5a824c Import initial implementation by tgranat.
ihse
parents:
diff changeset
    82
# Copied from Util.sh
48d12f5a824c Import initial implementation by tgranat.
ihse
parents:
diff changeset
    83
failed=""
48d12f5a824c Import initial implementation by tgranat.
ihse
parents:
diff changeset
    84
48d12f5a824c Import initial implementation by tgranat.
ihse
parents:
diff changeset
    85
Fail() { 
48d12f5a824c Import initial implementation by tgranat.
ihse
parents:
diff changeset
    86
    echo "FAIL: $1"
48d12f5a824c Import initial implementation by tgranat.
ihse
parents:
diff changeset
    87
    failed="${failed}."
48d12f5a824c Import initial implementation by tgranat.
ihse
parents:
diff changeset
    88
}
48d12f5a824c Import initial implementation by tgranat.
ihse
parents:
diff changeset
    89
48d12f5a824c Import initial implementation by tgranat.
ihse
parents:
diff changeset
    90
Die() { 
48d12f5a824c Import initial implementation by tgranat.
ihse
parents:
diff changeset
    91
    printf "%s\n" "$*"
48d12f5a824c Import initial implementation by tgranat.
ihse
parents:
diff changeset
    92
    exit 1
48d12f5a824c Import initial implementation by tgranat.
ihse
parents:
diff changeset
    93
}
48d12f5a824c Import initial implementation by tgranat.
ihse
parents:
diff changeset
    94
48d12f5a824c Import initial implementation by tgranat.
ihse
parents:
diff changeset
    95
Sys() {
48d12f5a824c Import initial implementation by tgranat.
ihse
parents:
diff changeset
    96
    printf "%s\n" "$*"
48d12f5a824c Import initial implementation by tgranat.
ihse
parents:
diff changeset
    97
    "$@"
48d12f5a824c Import initial implementation by tgranat.
ihse
parents:
diff changeset
    98
    rc="$?"
48d12f5a824c Import initial implementation by tgranat.
ihse
parents:
diff changeset
    99
    test "$rc" -eq 0 || Die "Command \"$*\" failed with exitValue $rc"
48d12f5a824c Import initial implementation by tgranat.
ihse
parents:
diff changeset
   100
}
48d12f5a824c Import initial implementation by tgranat.
ihse
parents:
diff changeset
   101
48d12f5a824c Import initial implementation by tgranat.
ihse
parents:
diff changeset
   102
HorizontalRule() {
48d12f5a824c Import initial implementation by tgranat.
ihse
parents:
diff changeset
   103
    echo "-----------------------------------------------------------------"
48d12f5a824c Import initial implementation by tgranat.
ihse
parents:
diff changeset
   104
}
48d12f5a824c Import initial implementation by tgranat.
ihse
parents:
diff changeset
   105
48d12f5a824c Import initial implementation by tgranat.
ihse
parents:
diff changeset
   106
# Result (pass/fail) based on result code ($?) from the test run.
48d12f5a824c Import initial implementation by tgranat.
ihse
parents:
diff changeset
   107
# $1 = expected result (success/failure) based on result code from the executed command
48d12f5a824c Import initial implementation by tgranat.
ihse
parents:
diff changeset
   108
# $2 = result code from test run
48d12f5a824c Import initial implementation by tgranat.
ihse
parents:
diff changeset
   109
48d12f5a824c Import initial implementation by tgranat.
ihse
parents:
diff changeset
   110
Report() {
48d12f5a824c Import initial implementation by tgranat.
ihse
parents:
diff changeset
   111
    test "$#" != 2 && Die "Usage: Report testtype rc"
48d12f5a824c Import initial implementation by tgranat.
ihse
parents:
diff changeset
   112
48d12f5a824c Import initial implementation by tgranat.
ihse
parents:
diff changeset
   113
    if test "$1" = "success" -a "$2" = 0; then
48d12f5a824c Import initial implementation by tgranat.
ihse
parents:
diff changeset
   114
	echo "PASS: succeeded as expected"
48d12f5a824c Import initial implementation by tgranat.
ihse
parents:
diff changeset
   115
    elif test "$1" = "success" -a "$2" != 0; then
48d12f5a824c Import initial implementation by tgranat.
ihse
parents:
diff changeset
   116
	Fail "test failed unexpectedly"
48d12f5a824c Import initial implementation by tgranat.
ihse
parents:
diff changeset
   117
48d12f5a824c Import initial implementation by tgranat.
ihse
parents:
diff changeset
   118
    elif test "$1" = "failure" -a "$2" != 0; then
48d12f5a824c Import initial implementation by tgranat.
ihse
parents:
diff changeset
   119
	echo "PASS: failed as expected"
48d12f5a824c Import initial implementation by tgranat.
ihse
parents:
diff changeset
   120
    elif test "$1" = "failure" -a "$2" = 0; then
48d12f5a824c Import initial implementation by tgranat.
ihse
parents:
diff changeset
   121
	Fail "test succeeded unexpectedly"
48d12f5a824c Import initial implementation by tgranat.
ihse
parents:
diff changeset
   122
    else
48d12f5a824c Import initial implementation by tgranat.
ihse
parents:
diff changeset
   123
48d12f5a824c Import initial implementation by tgranat.
ihse
parents:
diff changeset
   124
	Die "Usage: Report testtype rc"
48d12f5a824c Import initial implementation by tgranat.
ihse
parents:
diff changeset
   125
    fi
48d12f5a824c Import initial implementation by tgranat.
ihse
parents:
diff changeset
   126
}
48d12f5a824c Import initial implementation by tgranat.
ihse
parents:
diff changeset
   127
48d12f5a824c Import initial implementation by tgranat.
ihse
parents:
diff changeset
   128
# Run test and log stdout and stderr to temporary files $TEMPOUT and $TEMPERR
48d12f5a824c Import initial implementation by tgranat.
ihse
parents:
diff changeset
   129
# $1 = expected result (success/failure) 
48d12f5a824c Import initial implementation by tgranat.
ihse
parents:
diff changeset
   130
# $2 = command
48d12f5a824c Import initial implementation by tgranat.
ihse
parents:
diff changeset
   131
Test() {
48d12f5a824c Import initial implementation by tgranat.
ihse
parents:
diff changeset
   132
    HorizontalRule
48d12f5a824c Import initial implementation by tgranat.
ihse
parents:
diff changeset
   133
    expectedResult="$1"
48d12f5a824c Import initial implementation by tgranat.
ihse
parents:
diff changeset
   134
    shift
48d12f5a824c Import initial implementation by tgranat.
ihse
parents:
diff changeset
   135
    printf "%s\n" "$*"
48d12f5a824c Import initial implementation by tgranat.
ihse
parents:
diff changeset
   136
# We need to redirect to temp files to be able to look for errors in the stdout and stderr. But
48d12f5a824c Import initial implementation by tgranat.
ihse
parents:
diff changeset
   137
# we also need to send it to console so jtreg can pick it up. 3>&1 1>&2 2>&3 swaps stdout and stderr since 
48d12f5a824c Import initial implementation by tgranat.
ihse
parents:
diff changeset
   138
# tee only takes stdout. Then we swap it back to get correct stdout and stderr for jtreg.
48d12f5a824c Import initial implementation by tgranat.
ihse
parents:
diff changeset
   139
# Then we need to get the $? from the command that's run in the subshell so we store it in a temp file (if
48d12f5a824c Import initial implementation by tgranat.
ihse
parents:
diff changeset
   140
# we could use bash we could use $PIPESTATUS instead, but jtreg only uses 'sh')
48d12f5a824c Import initial implementation by tgranat.
ihse
parents:
diff changeset
   141
    
48d12f5a824c Import initial implementation by tgranat.
ihse
parents:
diff changeset
   142
    (s=`mktemp` ; (("$@" ; echo $?>$s) | tee $TEMPOUT) 3>&1 1>&2 2>&3 | tee $TEMPERR; exit $(cat $s; rm $s)) 3>&2 2>&1 1>&3
48d12f5a824c Import initial implementation by tgranat.
ihse
parents:
diff changeset
   143
    Report "$expectedResult" "$?"
48d12f5a824c Import initial implementation by tgranat.
ihse
parents:
diff changeset
   144
}
48d12f5a824c Import initial implementation by tgranat.
ihse
parents:
diff changeset
   145
48d12f5a824c Import initial implementation by tgranat.
ihse
parents:
diff changeset
   146
# Run test without logging stdout and stderr to temporary files
48d12f5a824c Import initial implementation by tgranat.
ihse
parents:
diff changeset
   147
# $1 = expected result (success/failure) 
48d12f5a824c Import initial implementation by tgranat.
ihse
parents:
diff changeset
   148
# $2 = command
48d12f5a824c Import initial implementation by tgranat.
ihse
parents:
diff changeset
   149
AdditionalTest() {
48d12f5a824c Import initial implementation by tgranat.
ihse
parents:
diff changeset
   150
    HorizontalRule
48d12f5a824c Import initial implementation by tgranat.
ihse
parents:
diff changeset
   151
    expectedResult="$1"
48d12f5a824c Import initial implementation by tgranat.
ihse
parents:
diff changeset
   152
    shift
48d12f5a824c Import initial implementation by tgranat.
ihse
parents:
diff changeset
   153
    printf "%s\n" "$*"
48d12f5a824c Import initial implementation by tgranat.
ihse
parents:
diff changeset
   154
    "$@"
48d12f5a824c Import initial implementation by tgranat.
ihse
parents:
diff changeset
   155
    Report "$expectedResult" "$?"
48d12f5a824c Import initial implementation by tgranat.
ihse
parents:
diff changeset
   156
}
48d12f5a824c Import initial implementation by tgranat.
ihse
parents:
diff changeset
   157