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 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97
|
# Test cases for procfs probes with bpf runtime
set test "PROCFS_BPF"
if {![installtest_p]} { untested $test; return }
proc proc_read_value {test path} {
set value "<unknown>"
if [catch {exec timeout 1 cat $path} value] {
fail "$test read $path $value"
} else {
pass "$test read $path $value"
}
return $value
}
proc proc_write_value {test path value} {
if [catch {exec timeout 1 sh -c "echo $value > $path"} msg] {
fail "$test write $path $msg"
} else {
pass "$test write $path $value"
}
}
proc proc_read_write {} {
global test
# effective userid
set user [exec id -un]
set path_read "/var/tmp/systemtap-$user/$test/command"
set path_write "/var/tmp/systemtap-$user/$test/other"
# read the initial value, which should be '100'
set value [proc_read_value $test $path_read]
if { $value == "100" } {
pass "$test initial value"
} else {
fail "$test initial value: $value"
}
# write a new value of '200'
proc_write_value $test $path_write "200"
# make sure it got set to '200'
set value [proc_read_value $test $path_read]
if { $value == "200" } {
pass "$test value: 200"
} else {
fail "$test value: $value"
}
# read it again to make sure nothing changed
set value [proc_read_value "$test again" $path_read]
if { $value == "200" } {
pass "$test value: 200 again"
} else {
fail "$test value: $value again"
}
# write a new value of 'hello'
proc_write_value $test $path_write "hello"
# make sure it got set to 'hello'
set value [proc_read_value $test $path_read]
if { $value == "hello" } {
pass "$test value: hello"
} else {
fail "$test value: $value"
}
# write a new value of 'goodbye'
proc_write_value $test $path_write "goodbye"
# make sure it got set to 'goodbye'
set value [proc_read_value $test $path_read]
if { $value == "goodbye" } {
pass "$test value: goodbye"
} else {
fail "$test value: $value"
}
return 0;
}
# The script starts with a value of "100". If the user writes into
# /proc/systemtap/MODNAME/command, that value is returned by the next
# read.
set systemtap_script {
}
# test procfs probes
set output_string "\\mfinal value = goodbye\\M\r\n"
stap_run $test proc_read_write $output_string --bpf $srcdir/$subdir/procfs_bpf.stp -m $test
exec /bin/rm -f ${test}.bo
|