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 60
|
# This testcase tests the fix for PR16991 - infinite loop in
# task_dentry_path. When task_dentry_path hit a dentry from an
# unmounted synthentic filesystem, it would go into an infinite loop
# (until killed by MAXACTION).
set test_base "task_dentry_path"
set test "${test_base}"
set test_name "$test_base (infinite loop)"
set am_root [expr 0 == [exec id -u]]
# Only run on make installcheck
if {! [installtest_p]} { untested "$test"; return }
spawn stap $srcdir/$subdir/$test.stp -c "sh $srcdir/$subdir/$test.sh"
set ok 0
expect {
-timeout 150
-re {ERROR.*MAXACTION} { incr ok; exp_continue }
timeout { fail "$test_name (timeout)" }
eof { }
}
catch {close}; catch {wait}
if {$ok == 1} { fail "$test_name ($ok)" } { pass "$test_name" }
# Test the fix for PR19021 - the tapset function task_dentry_path()
# should handle more than just files.
set test "${test_base}2"
set test_name "$test_base (synthetic files)"
spawn stap $srcdir/$subdir/$test.stp -c "echo hi | cat > /dev/null"
set ok 0
expect {
-timeout 150
-re {^pipe:\[[0-9]+\]\r\n} { incr ok; exp_continue }
timeout { fail "$test_name (timeout)" }
eof { }
}
catch {close}; catch {wait}
if {$ok == 1} { pass "$test_name" } { fail "$test_name ($ok)" }
# Test the fix for BZ1425568 - systemtap task_dentry_path crashes
# under chroot.
set test "${test_base}3"
set test_name "$test_base (chroot)"
# We've got to be root to successfully do a 'chroot'.
if {!$am_root} {
untested "$test_name"
} else {
set curdir [pwd]
spawn stap $srcdir/$subdir/$test.stp -c "perl -e 'chroot(qw(/tmp))'"
set ok 0
expect {
-timeout 150
-re "^${curdir}\r\n" { incr ok; exp_continue }
timeout { fail "$test_name (timeout)" }
eof { }
}
catch {close}; catch {wait}
if {$ok == 1} { pass "$test_name" } { fail "$test_name ($ok)" }
}
|