Blame testsuite/lib/libsup.exp

Packit 62fe53
# Copyright (C) 1992-2016 Free Software Foundation, Inc.
Packit 62fe53
#
Packit 62fe53
# This file is part of DejaGnu.
Packit 62fe53
#
Packit 62fe53
# DejaGnu is free software; you can redistribute it and/or modify it
Packit 62fe53
# under the terms of the GNU General Public License as published by
Packit 62fe53
# the Free Software Foundation; either version 3 of the License, or
Packit 62fe53
# (at your option) any later version.
Packit 62fe53
#
Packit 62fe53
# DejaGnu is distributed in the hope that it will be useful, but
Packit 62fe53
# WITHOUT ANY WARRANTY; without even the implied warranty of
Packit 62fe53
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Packit 62fe53
# General Public License for more details.
Packit 62fe53
#
Packit 62fe53
# You should have received a copy of the GNU General Public License
Packit 62fe53
# along with DejaGnu; if not, write to the Free Software Foundation,
Packit 62fe53
# Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
Packit 62fe53
Packit 62fe53
# Setup an environment so we can execute library procs without DejaGnu.
Packit 62fe53
Packit 62fe53
#
Packit 62fe53
# Create a default environment and start expect.
Packit 62fe53
#
Packit 62fe53
proc make_defaults_file { defs } {
Packit 62fe53
    global srcdir
Packit 62fe53
    global objdir
Packit 62fe53
    global subdir
Packit 62fe53
    global build_triplet
Packit 62fe53
    global host_triplet
Packit 62fe53
    global target_triplet
Packit 62fe53
    global target_os
Packit 62fe53
    global target_cpu
Packit 62fe53
Packit 62fe53
    # We need to setup default values and a few default procs so we
Packit 62fe53
    # can execute library code without DejaGnu
Packit 62fe53
    set fd [open $defs w]
Packit 62fe53
    puts ${fd} "set tool foobar"
Packit 62fe53
    puts ${fd} "set srcdir ${srcdir}"
Packit 62fe53
    puts ${fd} "set objdir ${objdir}"
Packit 62fe53
    puts ${fd} "set subdir ${subdir}"
Packit 62fe53
    puts ${fd} "set build_triplet ${build_triplet}"
Packit 62fe53
    puts ${fd} "set host_triplet ${host_triplet}"
Packit 62fe53
    puts ${fd} "set target_triplet ${target_triplet}"
Packit 62fe53
    puts ${fd} "set target_os ${target_os}"
Packit 62fe53
    puts ${fd} "set target_cpu ${target_cpu}"
Packit 62fe53
    puts ${fd} "set testcnt 0"
Packit 62fe53
    puts ${fd} "set warncnt 0"
Packit 62fe53
    puts ${fd} "set errcnt 0"
Packit 62fe53
    puts ${fd} "set passcnt 0"
Packit 62fe53
    puts ${fd} "set xpasscnt 0"
Packit 62fe53
    puts ${fd} "set kpasscnt 0"
Packit 62fe53
    puts ${fd} "set failcnt 0"
Packit 62fe53
    puts ${fd} "set xfailcnt 0"
Packit 62fe53
    puts ${fd} "set kfailcnt 0"
Packit 62fe53
    puts ${fd} "set prms_id 0"
Packit 62fe53
    puts ${fd} "set bug_id 0"
Packit 62fe53
    puts ${fd} "set exit_status 0"
Packit 62fe53
    puts ${fd} "set untestedcnt 0"
Packit 62fe53
    puts ${fd} "set unresolvedcnt 0"
Packit 62fe53
    puts ${fd} "set unsupportedcnt 0"
Packit 62fe53
    puts ${fd} "set xfail_flag 0"
Packit 62fe53
    puts ${fd} "set xfail_prms 0"
Packit 62fe53
    puts ${fd} "set kfail_flag 0"
Packit 62fe53
    puts ${fd} "set kfail_prms 0"
Packit 62fe53
    puts ${fd} "set mail_logs 0"
Packit 62fe53
    puts ${fd} "set multipass_name 0"
Packit 62fe53
    catch "close $fd"
Packit 62fe53
}
Packit 62fe53
Packit 62fe53
proc start_expect { } {
Packit 62fe53
    global spawn_id
Packit 62fe53
    global base_dir
Packit 62fe53
Packit 62fe53
    # We need to setup default values and a few default procs so we
Packit 62fe53
    # can execute library code without DejaGnu
Packit 62fe53
    set defaults_file setval.tmp
Packit 62fe53
    make_defaults_file $defaults_file
Packit 62fe53
    set fd [open ${defaults_file} w]
Packit 62fe53
Packit 62fe53
    # look for expect
Packit 62fe53
    if ![info exists EXPECT] {
Packit 62fe53
	set EXPECT [findfile $base_dir/../../expect/expect "$base_dir/../../expect/expect" expect]
Packit 62fe53
	verbose "EXPECT defaulting to $EXPECT" 2
Packit 62fe53
    }
Packit 62fe53
Packit 62fe53
    #    catch close
Packit 62fe53
    #    catch wait
Packit 62fe53
Packit 62fe53
    # Start expect runing
Packit 62fe53
    spawn "$EXPECT"
Packit 62fe53
    expect {
Packit 62fe53
	-re "expect.*> " {
Packit 62fe53
	    verbose "Started the child expect shell" 2
Packit 62fe53
	}
Packit 62fe53
	timeout {
Packit 62fe53
	    perror "Timed out starting the child expect shell."
Packit 62fe53
	    return -1
Packit 62fe53
	}
Packit 62fe53
    }
Packit 62fe53
Packit 62fe53
    # Load the defaults file
Packit 62fe53
    exp_send "source ${defaults_file}\n"
Packit 62fe53
    expect {
Packit 62fe53
	"expect*> " {
Packit 62fe53
	    verbose "Loaded testing defaults file." 2
Packit 62fe53
	    return 1
Packit 62fe53
	}
Packit 62fe53
	timeout {
Packit 62fe53
	    perror "Couldn't load the testing defaults file."
Packit 62fe53
	    return -1
Packit 62fe53
	}
Packit 62fe53
    }
Packit 62fe53
}
Packit 62fe53
Packit 62fe53
#
Packit 62fe53
# Stop the runing expect process
Packit 62fe53
#
Packit 62fe53
proc stop_expect { }  {
Packit 62fe53
    global spawn_id
Packit 62fe53
Packit 62fe53
    # make expect exit
Packit 62fe53
    exp_send "exit\n"
Packit 62fe53
    catch "close -i $spawn_id"
Packit 62fe53
    catch "wait -i $spawn_id"
Packit 62fe53
}
Packit 62fe53
Packit 62fe53
#
Packit 62fe53
# Load the library to test
Packit 62fe53
#
Packit 62fe53
proc load_test_lib { lib } {
Packit 62fe53
    global spawn_id
Packit 62fe53
    exp_send "source ${lib}\n"
Packit 62fe53
    expect {
Packit 62fe53
	"expect*> " {
Packit 62fe53
	    verbose "Testing ${lib}" 2
Packit 62fe53
	}
Packit 62fe53
	timeout {
Packit 62fe53
	    perror "Couldn't load the libraries to test"
Packit 62fe53
	    return -1
Packit 62fe53
	}
Packit 62fe53
    }
Packit 62fe53
}
Packit 62fe53
Packit 62fe53
#
Packit 62fe53
# test a library proc that emits patterns
Packit 62fe53
#
Packit 62fe53
proc exp_test { cmd pattern msg } {
Packit 62fe53
    global spawn_id
Packit 62fe53
Packit 62fe53
    exp_send "puts ACK ; $cmd ; puts NAK\r\n"
Packit 62fe53
    expect {
Packit 62fe53
	"puts ACK*puts NAK" {
Packit 62fe53
	    verbose "Got command echo" 3
Packit 62fe53
	}
Packit 62fe53
	timeout {
Packit 62fe53
	    warning "Never got command echo"
Packit 62fe53
	}
Packit 62fe53
    }
Packit 62fe53
Packit 62fe53
    expect {
Packit 62fe53
	"ACK" {
Packit 62fe53
	    exp_continue
Packit 62fe53
	}
Packit 62fe53
	-re "\r\n1\r\n" {
Packit 62fe53
	    warning "$msg, 1 was returned"
Packit 62fe53
	    exp_continue
Packit 62fe53
	}
Packit 62fe53
	-re "\r\n0\r\n" {
Packit 62fe53
	    warning "$msg, 0 was returned"
Packit 62fe53
	    exp_continue
Packit 62fe53
	}
Packit 62fe53
	"$pattern" {
Packit 62fe53
	    pass "$msg"
Packit 62fe53
	}
Packit 62fe53
	timeout {
Packit 62fe53
	    fail "$msg"
Packit 62fe53
	}
Packit 62fe53
    }
Packit 62fe53
}
Packit 62fe53
Packit 62fe53
# test a config proc that only returns a code
Packit 62fe53
# ex... config_test "isbuild $build_triplet" "pass" "fail" "isbuild, native"
Packit 62fe53
# args are:  command, true condition, false condition, message to print
Packit 62fe53
proc config_test { cmd true false msg } {
Packit 62fe53
    global spawn_id
Packit 62fe53
Packit 62fe53
    set timeout 20
Packit 62fe53
    exp_send "puts ACK ; puts \[$cmd\] ; puts NAK\r\n"
Packit 62fe53
    expect {
Packit 62fe53
	"puts ACK*$cmd*puts NAK" {
Packit 62fe53
	    verbose "Got command echo" 3
Packit 62fe53
	}
Packit 62fe53
	timeout {
Packit 62fe53
	    warning "Never got command echo"
Packit 62fe53
	}
Packit 62fe53
    }
Packit 62fe53
Packit 62fe53
    expect {
Packit 62fe53
	-re "Checking pattern*with*\[\r\n\]" {
Packit 62fe53
	    exp_continue
Packit 62fe53
	}
Packit 62fe53
	-re "\r\n1\r\n" {
Packit 62fe53
	    $true "$msg"
Packit 62fe53
	}
Packit 62fe53
	-re "\r\n0\r\n" {
Packit 62fe53
	    $false "$msg"
Packit 62fe53
	}
Packit 62fe53
	timeout {
Packit 62fe53
	    perror "$msg (timed out)"
Packit 62fe53
	}
Packit 62fe53
    }
Packit 62fe53
}