File: stap_run2.exp

package info (click to toggle)
systemtap 5.1-5
  • links: PTS, VCS
  • area: main
  • in suites: trixie
  • size: 47,964 kB
  • sloc: cpp: 80,838; ansic: 54,757; xml: 49,725; exp: 43,665; sh: 11,527; python: 5,003; perl: 2,252; tcl: 1,312; makefile: 1,006; javascript: 149; lisp: 105; awk: 101; asm: 91; java: 70; sed: 16
file content (59 lines) | stat: -rw-r--r-- 1,733 bytes parent folder | download | duplicates (6)
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
# 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 {
        eval stap_run3 "{$TEST_NAME $args} $TEST_FILE $args"
    }
}

# stap_run3 TEST_NAME args
# TEST_NAME is the name of the test as shown in PASS/FAIL/SKIPPED messages.
# Additional arguments are passed to stap as-is, including likely a TEST_FILE name.
#
# global result_string must be set to the expected output

proc stap_run3 { TEST_NAME args } {
    if {[info procs installtest_p] != "" && ![installtest_p]} { untested $TEST_NAME; return }

    set cmd [concat stap $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"
            set m 0
            foreach line2 [split $res "\n"] {
                if {$m > $n} {
                    send_log "    \"$line2\"\n"
                }
                incr m
            }
	    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"
    }
}