From: Maynard J. <may...@us...> - 2014-05-28 16:10:52
|
Add testcases to ensure XML instance docs are valid The following simple tests using xmllint have been incorporated into oprofile-tests: 1) opreport --symbols --callgraph --xml --outputfile=out.xml xmllint --noout --schema <oprof-install-dir>/share/doc/oprofile/opreport.xsd out.xml 2) opreport --symbols --debug-ifo --xml --outputfile=out.xml (profile done with multiple events) xmllint --noout --schema <oprof-install-dir>/share/doc/oprofile/opreport.xsd out.xml 3) ophelp --xml > out.xml xmllint --noout --schema <oprof-install-dir>/share/doc/oprofile/ophelp.xsd out.xml Signed-off-by: Maynard Johnson <may...@us...> --- testsuite/lib/operf_util.exp | 4 ++ testsuite/lib/verify.exp | 123 +++++++++++++++++++++++++++-------------- 2 files changed, 85 insertions(+), 42 deletions(-) diff --git a/testsuite/lib/operf_util.exp b/testsuite/lib/operf_util.exp index 1873b59..d45863e 100644 --- a/testsuite/lib/operf_util.exp +++ b/testsuite/lib/operf_util.exp @@ -170,6 +170,10 @@ proc do_single_process_test {ctrs output_check test_debug_option} { set user 1 set ctr_opts {} + if { $output_check == 1 && $test_debug_option == 0 } { + validate_xml_help + } + foreach ctr $ctrs { # n - counter number, no longer used but didn't want to change # specification format diff --git a/testsuite/lib/verify.exp b/testsuite/lib/verify.exp index 46d68aa..4c7f08c 100644 --- a/testsuite/lib/verify.exp +++ b/testsuite/lib/verify.exp @@ -1,3 +1,41 @@ +proc validate_xml_help { } { + set binpath [lindex [local_exec "which ophelp" "" "" 10] 1] + set idx [string last "/bin" $binpath ] + set op_install_dir [string range $binpath 0 $idx ] + append schema_file $op_install_dir "/share/doc/oprofile/ophelp.xsd" + set ophelp_result [local_exec "ophelp --xml" "" "" 100 ] + set out [open "help_out.xml" w] + puts $out [lindex $ophelp_result 1] + close $out + set xmllint_result [local_exec "xmllint --noout --schema $schema_file help_out.xml" "" "" 10 ] + if { [regexp "help_out.xml validates" "$xmllint_result" ]} { + pass " Verified XML ophelp output is valid" + } else { + fail " XML ophelp output is invalid" + print [lindex $xmllint_result 1] + } +} + +proc validate_xml_report { callgraph } { + if { $callgraph } { + set cg_option "--callgraph" + } else { + set cg_option "" + } + set binpath [lindex [local_exec "which operf" "" "" 10] 1] + set idx [string last "/bin" $binpath ] + set op_install_dir [string range $binpath 0 $idx ] + append schema_file $op_install_dir "/share/doc/oprofile/opreport.xsd" + set opreport_result [local_exec "opreport --debug-info --symbols $cg_option --long-filenames --xml -o out.xml" "" "" 100 ] + set xmllint_result [local_exec "xmllint --noout --schema $schema_file out.xml" "" "" 10 ] + if { [regexp "out.xml validates" "$xmllint_result" ]} { + pass " Verified XML opreport with callgraph option=$callgraph is valid" + } else { + fail " XML opreport output with callgraph option=$callgraph is invalid" + print [lindex $xmllint_result 1] + } +} + proc verify_output { workload_table_entry workload ctr_opts debug_opt_enabled} { set workload_spec $workload_table_entry @@ -13,24 +51,26 @@ proc verify_output { workload_table_entry workload ctr_opts debug_opt_enabled} { # of the workload executable file. The remaining entries are symbols # which should be found in opreport output. for {set index $base} {$index < $max} {incr index} { - set symbol [lindex $workload_spec $index] - if { $debug_opt_enabled } { - set result [local_exec "opreport --debug-info --symbols --long-filenames" "" "" 100 ] - } else { - set result [local_exec "opreport --symbols --long-filenames" "" "" 100 ] - } - + set symbol [lindex $workload_spec $index] + if { $debug_opt_enabled } { + set result [local_exec "opreport --debug-info --symbols --long-filenames" "" "" 100 ] + } else { + set result [local_exec "opreport --symbols --long-filenames" "" "" 100 ] + } if { [regexp $symbol "$result" ]} { - verbose "Verify the symbols for workload: $workload" - verbose " Performance counter events: $ctr_opts" - pass " opreport contains symbol: $symbol" - verbose "\n" - } else { - print "Verify the symbols for workload: $workload" - print " Performance counter events: $ctr_opts" - fail " opreport does not contain symbol: $symbol" - print "\n" - } + verbose "Verify the symbols for workload: $workload" + verbose " Performance counter events: $ctr_opts" + pass " opreport contains symbol: $symbol" + verbose "\n" + } else { + print "Verify the symbols for workload: $workload" + print " Performance counter events: $ctr_opts" + fail " opreport does not contain symbol: $symbol" + print "\n" + } + if { $debug_opt_enabled } { + validate_xml_report 0 + } } } @@ -66,20 +106,21 @@ proc verify_callgraph_output { workload_table_entry workload ctr_opts} { set result [regsub {\{|\}} [local_exec "opreport --callgraph" "" "" 100 ] " "] for {set index 2} {$index < $max} {incr index} { - set symbol [lindex $workload_spec $index] - + set symbol [lindex $workload_spec $index] if { [regexp $symbol "$result" ]} { - verbose "Verify callgraph contains the workload symbols: $workload" - verbose " Performance counter events: $ctr_opts" - pass " opreport contains symbol: $symbol" - verbose "\n" - } else { - print "Verify callgraph contains the workload symbols: $workload" - print " Performance counter events: $ctr_opts" - fail " opreport does not contain symbol: $symbol" - print "\n" - } + verbose "Verify callgraph contains the workload symbols: $workload" + verbose " Performance counter events: $ctr_opts" + pass " opreport contains symbol: $symbol" + verbose "\n" + } else { + print "Verify callgraph contains the workload symbols: $workload" + print " Performance counter events: $ctr_opts" + fail " opreport does not contain symbol: $symbol" + print "\n" + } } + validate_xml_report 1 + # Check if kallsyms is the image name that the symbol name is # is not /proc/kallsyms as this would indicate an error getting # the symbol from kallsyms. If the image name is no-vmlinux @@ -89,20 +130,18 @@ proc verify_callgraph_output { workload_table_entry workload ctr_opts} { set array_lines [ split $result "\n" ] set err 0 foreach line $array_lines { - set i 0 - foreach word $line { - - set cur_word [ lindex $line $i ] - set next_word [ lindex $line [ expr $i + 1 ] ] - - if { ([string compare $cur_word "kallsyms"] == 0 ) && - ([string compare $next_word "/proc/kallsyms"] == 0 ) } { - set err 1 - } - set i [expr $i + 1] - } + set i 0 + foreach word $line { + set cur_word [ lindex $line $i ] + set next_word [ lindex $line [ expr $i + 1 ] ] + if { ([string compare $cur_word "kallsyms"] == 0 ) && + ([string compare $next_word "/proc/kallsyms"] == 0 ) } { + set err 1 + } + set i [expr $i + 1] + } } if { $err } { - fail " Could not extract symbols from /proc/kallsyms. \n" + fail " Could not extract symbols from /proc/kallsyms. \n" } } -- 1.7.1 |
From: Carl L. <ce...@us...> - 2014-05-30 17:32:40
|
On Wed, 2014-05-28 at 11:10 -0500, Maynard Johnson wrote: > Add testcases to ensure XML instance docs are valid > > The following simple tests using xmllint have been incorporated into oprofile-tests: > > 1) > opreport --symbols --callgraph --xml --outputfile=out.xml > xmllint --noout --schema <oprof-install-dir>/share/doc/oprofile/opreport.xsd out.xml > > 2) > opreport --symbols --debug-ifo --xml --outputfile=out.xml > (profile done with multiple events) > xmllint --noout --schema <oprof-install-dir>/share/doc/oprofile/opreport.xsd out.xml > > 3) > ophelp --xml > out.xml > xmllint --noout --schema <oprof-install-dir>/share/doc/oprofile/ophelp.xsd out.xml > Maynard: The only issues I see is that you don't seem to clean up the files when you are done. After I ran the testsuite, I have two files out.xml and help_out.xml left in the top directory. I don't see any value in keeping them around. Seems like the test should remove them when it finishes. Carl Love |
From: Maynard J. <may...@us...> - 2014-05-30 19:08:55
|
On 05/30/2014 12:32 PM, Carl Love wrote: > On Wed, 2014-05-28 at 11:10 -0500, Maynard Johnson wrote: >> Add testcases to ensure XML instance docs are valid >> >> The following simple tests using xmllint have been incorporated into oprofile-tests: >> >> 1) >> opreport --symbols --callgraph --xml --outputfile=out.xml >> xmllint --noout --schema <oprof-install-dir>/share/doc/oprofile/opreport.xsd out.xml >> >> 2) >> opreport --symbols --debug-ifo --xml --outputfile=out.xml >> (profile done with multiple events) >> xmllint --noout --schema <oprof-install-dir>/share/doc/oprofile/opreport.xsd out.xml >> >> 3) >> ophelp --xml > out.xml >> xmllint --noout --schema <oprof-install-dir>/share/doc/oprofile/ophelp.xsd out.xml >> > > Maynard: > > The only issues I see is that you don't seem to clean up the files when > you are done. After I ran the testsuite, I have two files out.xml and > help_out.xml left in the top directory. I don't see any value in > keeping them around. Seems like the test should remove them when it > finishes. Good catch. I fixed that and pushed the patch up. Thanks! -Maynard > > Carl Love > |