On 11/09/2015 12:57 AM, Zhou Wenjian wrote:
+foreach runtime [get_runtime_list] {
+ if {$runtime != ""} {
+ stap_run $srcdir/$subdir/$test.stp no_load ${all_pass_string}${all_pass_string}${all_pass_string}${all_pass_string}${all_pass_string} \
+ --runtime=$runtime
+ } else {
+ stap_run $srcdir/$subdir/$test.stp no_load ${all_pass_string}${all_pass_string}${all_pass_string}${all_pass_string}${all_pass_string}
+ }
+}
I disagree with using repetition like this for "exact" results. The
string already has regex repetition built in:
set all_pass_string "(systemtap test success\r\n)+"
'+' means match one or more, greedily. Repeating this expression on top
of itself creates a bad case for the regex engine to backtrack.
(It will work, but slowly.)
IMO we ought to make stap_run ensure nothing comes *after* the expected
output string. If there are tests that are legitimately printing more
output, those are the ones we should be fixing.
Maybe we could also add the string without repetition, something like:
set pass_string "systemtap test success\r\n"
set all_pass_string "($pass_string)+"
Then you can use "($pass_string){5}" if you really want exactly 5
matches. But stap_run should still make sure nothing comes after that.