diff options
Diffstat (limited to 'testsuite/systemtap.base/procfs.exp')
-rw-r--r-- | testsuite/systemtap.base/procfs.exp | 112 |
1 files changed, 112 insertions, 0 deletions
diff --git a/testsuite/systemtap.base/procfs.exp b/testsuite/systemtap.base/procfs.exp new file mode 100644 index 00000000..ac00acc6 --- /dev/null +++ b/testsuite/systemtap.base/procfs.exp @@ -0,0 +1,112 @@ +# Test cases for procfs probes + +set test "PROCFS" + +if {![installtest_p]} { untested $test; return } + +proc proc_read_value { test path} { + set value "<unknown>" + if [catch {open $path RDONLY} channel] { + fail "$test $channel" + } else { + set value [read -nonewline $channel] + close $channel + pass "$test read $value" + } + return $value +} + +proc proc_write_value { test path value} { + if [catch {open $path WRONLY} channel] { + fail "$test $channel" + } else { + puts $channel $value + close $channel + pass "$test wrote $value" + } +} + +proc proc_read_write {} { + set test "PROCFS" + set path "/proc/systemtap/$test/command" + + # read the initial value, which should be '100' + set value [proc_read_value $test $path] + if { $value == "100" } { + pass "$test received correct initial value" + } else { + fail "$test received incorrect initial value: $value" + } + + # write a new value of '200' + proc_write_value $test $path "200" + + # make sure it got set to '200' + set value [proc_read_value $test $path] + if { $value == "200" } { + pass "$test received correct value" + } else { + fail "$test received incorrect value: $value" + } + + # read it again to make sure nothing changed + set value [proc_read_value $test $path] + if { $value == "200" } { + pass "$test received correct value" + } else { + fail "$test received incorrect value: $value" + } + + # write a new value of 'hello' + proc_write_value $test $path "hello" + + # make sure it got set to 'hello' + set value [proc_read_value $test $path] + if { $value == "hello" } { + pass "$test received correct value" + } else { + fail "$test received incorrect value: $value" + } + + # write a new value of 'goodbye' + proc_write_value $test $path "goodbye" + + # make sure it got set to 'goodbye' + set value [proc_read_value $test $path] + if { $value == "goodbye" } { + pass "$test received correct value" + } else { + fail "$test received incorrect 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 { + global saved_value + + probe procfs("command").read { + $value = saved_value + } + probe procfs("command").write { + saved_value = $value + } + + probe begin { + saved_value = "100\n" + printf("systemtap starting probe\n") + } + probe end { + printf("systemtap ending probe\n") + printf("final value = %s", saved_value) + } +} + +# test procfs probes +set output_string "\\mfinal value = goodbye\\M\r\n" +stap_run $test proc_read_write $output_string -e $systemtap_script -m $test |