test-analyzer
上传用户:sy_wanhua
上传日期:2013-07-25
资源大小:3048k
文件大小:5k
源码类别:

流媒体/Mpeg4/MP4

开发平台:

C/C++

  1. #!/usr/bin/perl
  2. # ====================================================================
  3. # The Vovida Software License, Version 1.0 
  4. # Copyright (c) 2000 Vovida Networks, Inc.  All rights reserved.
  5. # Redistribution and use in source and binary forms, with or without
  6. # modification, are permitted provided that the following conditions
  7. # are met:
  8. # 1. Redistributions of source code must retain the above copyright
  9. #    notice, this list of conditions and the following disclaimer.
  10. # 2. Redistributions in binary form must reproduce the above copyright
  11. #    notice, this list of conditions and the following disclaimer in
  12. #    the documentation and/or other materials provided with the
  13. #    distribution.
  14. # 3. The names "VOCAL", "Vovida Open Communication Application Library",
  15. #    and "Vovida Open Communication Application Library (VOCAL)" must
  16. #    not be used to endorse or promote products derived from this
  17. #    software without prior written permission. For written
  18. #    permission, please contact vocal@vovida.org.
  19. # 4. Products derived from this software may not be called "VOCAL", nor
  20. #    may "VOCAL" appear in their name, without prior written
  21. #    permission of Vovida Networks, Inc.
  22. # THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESSED OR IMPLIED
  23. # WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
  24. # OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, TITLE AND
  25. # NON-INFRINGEMENT ARE DISCLAIMED.  IN NO EVENT SHALL VOVIDA
  26. # NETWORKS, INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT DAMAGES
  27. # IN EXCESS OF $1,000, NOR FOR ANY INDIRECT, INCIDENTAL, SPECIAL,
  28. # EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
  29. # PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
  30. # PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
  31. # OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
  32. # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
  33. # USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
  34. # DAMAGE.
  35. # ====================================================================
  36. # This software consists of voluntary contributions made by Vovida
  37. # Networks, Inc. and many individuals on behalf of Vovida Networks,
  38. # Inc.  For more information on Vovida Networks, Inc., please see
  39. # <http://www.vovida.org/>.
  40. # test-analyzer
  41. # this program does test analysis, by doing the following things in
  42. # the following modes:
  43. # in canonical mode (-c), it takes the given log file(s), and prints
  44. # to stdout a file which contains only the most recent runs, in
  45. # canonical (alphabetical by test name) order.
  46. # in diffable mode (-d), it does the same as -c, but does NOT include
  47. # the date.  This produces a file which can be compared via diff.
  48. # in report mode (-r), it takes two files from the command line, runs them
  49. # through the diffable mode, and then diffs the two files.
  50. require "getopts.pl";
  51. &Getopts("cdr");
  52. if($opt_c) {
  53.     foreach(@ARGV) {
  54.         $data = &canonical_mode(0, $_);
  55. print $data;
  56.     }
  57. }
  58. if($opt_d) {
  59.     foreach(@ARGV) {
  60.         $data = &canonical_mode(1, $_); # 1 means diff mode
  61. print $data;
  62.     }
  63. }
  64. if($opt_r) {
  65.     $data_0 = &canonical_mode(1, $ARGV[0]);
  66.     $data_1 = &canonical_mode(1, $ARGV[1]);
  67.     # now, do a diff on these two entries
  68.     $filename_1 = "/tmp/test-analyzer.$$.file1";
  69.     $filename_2 = "/tmp/test-analyzer.$$.file2";
  70.     open(F1, ">$filename_1") || die "can't open $filename_1 for writing";
  71.     print F1 $data_0;
  72.     close(F1);
  73.     open(F2, ">$filename_2") || die "can't open $filename_2 for writing";
  74.     print F2 $data_1;
  75.     close(F2);
  76.     print "Report for $ARGV[0] compared to $ARGV[1]n";
  77.     print "----------------------------------------n";
  78.     system("diff -c $filename_1 $filename_2");
  79.     unlink $filename_1;
  80.     unlink $filename_2;
  81. }
  82. sub canonical_mode {
  83.     my($diff_mode) = $_[0];
  84.     my($filename) = $_[1];
  85.     my($data);
  86.     $test_data = "";
  87.     open(F, $filename) || die "can't open $filename";
  88.     while(<F>) {
  89. if(/^>>>> START ([^(]*) ( ([0-9-]*) ) ( ([a-zA-Z0-9.]*) )$/) {
  90.     # this is the start of a test
  91. #     print STDERR "got start $3:$1n";
  92.     $test_name = $1;
  93.     $test_time = $2;
  94.     $test_bin = $3;
  95.       $hashkey = "$test_bin:$test_name";
  96.     if($test_time gt $test_time_hash{$hashkey}) {
  97. # test is later, so replace
  98. # print STDERR "$hashkey: replacing $test_time_hash{$hashkey} with $test_timen";
  99. $replace = 1;
  100. $test_time_hash{$hashkey} = $test_time;
  101.     } else {
  102. $replace = 0;
  103.     }
  104.     
  105. #     print "$test_name : $test_timen";
  106. } elsif(/^<<<< END ([^(]*) ( ([0-9-]*) ) ( ([a-zA-Z0-9.]*) )$/) {
  107.     if($replace) {
  108. #         print STDERR "got end $3:$1n";
  109. $test_name = $1;
  110. $test_time = $2;
  111. $test_bin = $3;
  112. $hashkey = "$test_bin:$test_name";
  113. $test_data_hash{$hashkey} = $test_data;
  114. $test_bin_hash{$hashkey} = $test_bin;
  115. $test_name_hash{$hashkey} = $test_name;
  116. $test_data = "";
  117. $replace = 0;
  118.     }
  119. } else {
  120.     if ($replace) {
  121. $test_data .= $_;
  122.     }
  123. }
  124.     }
  125.     close(F);
  126.     if($diff_mode) {
  127. foreach(sort keys %test_data_hash) {
  128.     $data .= ">>>> START $test_name_hash{$_} (  ) ( $test_bin_hash{$_} )n";
  129.     $data .= $test_data_hash{$_};
  130.     $data .= "<<<< END $test_name_hash{$_} (  ) ( $test_bin_hash{$_} )n";
  131. }
  132.     } else {
  133. foreach(sort keys %test_data_hash) {
  134.     $data .= ">>>> START $test_name_hash{$_} ( $test_time_hash{$_} ) ( $test_bin_hash{$_} )n";
  135.     $data .= $test_data_hash{$_};
  136.     $data .= "<<<< END $test_name_hash{$_} ( $test_time_hash{$_} ) ( $test_bin_hash{$_} )n";
  137. }
  138.     }
  139.     return $data;
  140. }