# stap_run2.exp # # Simple script for testing multiple lines of exact output. # stap_run2 TEST_NAME # TEST_NAME is path to the current test # Additional arguments are passed to stap as-is. # # global result_string must be set to the expected output proc stap_run2 { TEST_NAME args } { # zap the srcdir prefix set TEST_FILE $TEST_NAME set TEST_NAME [regsub {.*/testsuite/} $TEST_NAME ""] if {[llength $args] == 0} { stap_run3 $TEST_NAME $TEST_FILE } else { stap_run3 $TEST_NAME $TEST_FILE $args } } # stap_run3 TEST_NAME TEST_FILE # TEST_NAME is the name of the test as shown in PASS/FAIL/SKIPPED messages. # TEST_FILE is the path to the current test # Additional arguments are passed to stap as-is. # # global result_string must be set to the expected output proc stap_run3 { TEST_NAME TEST_FILE args } { if {[info procs installtest_p] != "" && ![installtest_p]} { untested $TEST_NAME; return } set cmd [concat stap $TEST_FILE $args] send_log "executing: $cmd\n" catch {eval exec $cmd} res set n 0 set expected [split $::result_string "\n"] foreach line [split $res "\n"] { if {![string equal $line [lindex $expected $n]]} { fail "$TEST_NAME" send_log "line [expr $n + 1]: expected \"[lindex $expected $n]\"\n" send_log "Got \"$line\"\n" return } incr n } if {[expr $n == [llength $expected]]} { pass "$TEST_NAME" } else { fail "$TEST_NAME" send_log "too few lines of output, got $n, expected [llength $expected]\n" } }