#check the files in the first enter dir with the logsbase-second enter dir
sub getfilenameto{
my $dir =$_[0];
print "$_[0]/n";
opendir DH, $dir or die "Cannot open $dir: $!";
@allnames=();
foreach $file(readdir DH){
if($file=~/.log/)
{push(@allnames,$file); }
}
closedir DH;
return @allnames;
}
sub openfile{
my $filename=$_[0];
my $file = "$path/$filename";
open(MYFILE,$file)||die"cannot open $file";
}
sub searchfail{
my $filename =$_[0];
print "$filename/n";
# system("pause");
my $state=0;
openfile($filename);
while(defined($line=<MYFILE>))
{
if($line=~/client/s/d*/s(.*failed)/)
{$failreason=$1;
# print "failreason:$failreason/n";
# system("pause");
if($filename=~/grammar_error.log/)
{
if($failreason=~/MRCP_COMMAND_DEFINE_GRAMMAR/)
{
$state=1;
print "$failreason/n";
}
}
else{$state=-1;}
last;
}
else{$state=1;}
}
return $state;
close(MYFILE);
}
sub matchtesttype{
my $filename=$_[0];
my $testtype="";
openfile($filename);
while(defined($line=<MYFILE>))
{
if($line=~/TestTypeId/)
{
@values=split(//s/,$line);
$testtype=pop(@values);
}
}
return $testtype;
close(MYFILE);
}
sub casem002{
my $line;
my $numberstop=0;
my $filename=$_[0];
my $failrearon;
openfile($filename);
while(defined($line=<MYFILE>))
{
if($line=~/client/s/d*/s(.*failed)/)
{$failreason=$1;
return 1;
}
else{return -1;}
}
close(FILE);
}
sub caseC002{
my $line;
my $filename=$_[0];
my $ifcancel=0;
openfile($filename);
while(defined($line=<MYFILE>))
{
next if($line=~/SENDING RECOGNIZE REQUEST/);
if($line=~/cancelled/)
{
$ifcancel=1;
}
}
if($ifcancel==1)
{return 1;}
elsif($ifcancel==0)
{return -1;}
colse(FILE);
}
sub caseASR0001{
my $line;
my $filename=$_[0];
my $ifback=0;
openfile($filename);
while(defined($line=<MYFILE>))
{
next if($line=~/SENDING STOP REQUEST/);
next if($line=~/DEFINE-GRAMMARS/);
if($line=~/200 COMPLETE/)
{
$ifback=1;
}
}
if ($ifback==1)
{return 1;}
elsif($ifback==0)
{return -1;}
colse(FILE);
}
sub cases001{
my $line;
my $filename=$_[0];
my $ifoptions=0;
openfile($filename);
while(defined($line=<MYFILE>))
{
if($line=~/CSeq:.*OPTIONS/)
{
$ifoptions=1;
}
}
if ($ifoptions==1)
{return 1;}
elsif($ifoptions==0)
{return -1;}
colse(FILE);
}
sub compare_testcase{
$matchnum=0;
$matchnum0=0;
my $filename=$_[0];
# print "file:$filename/n";
# system("pause");
openfile($filename);
while(defined($line=<MYFILE>))
{
#current thread id:bd8 [06/04/09 16:47:38:765]:client 0 TestParseResult, Test Case [0] TXLF/000.vox cai4_feng1_jun1 --> 蔡峰钧 mismatch 0.90 frameNum 118
#[06/29/09 14:20:19:296]:client 0: Test Case [0] TXLF/000.vox cai4_feng1_jun1 --> cai4_feng1_jun1 match 0.88 frameNum 118
if($line=~/(Test Case.*]/s)(.*)(/sframeNum.*)/)
{
push(@testcases,$2);
# print "now:testcase:$2/n";
}
}
foreach $result(@testcases)
{
if($result=~/(.*-->)/s(.*)/s(.*)/s(.*)/)
{
push(@ifmatch,$3);
push(@scores,$4);
# print "now:ifmatch:$3/n scores:$4/n";
}
}
foreach (@ifmatch)
{
if(/^match$/)
{
$matchnum++;
# print "$_ matchnum++/n";
}
else {$mismatchunm++;}
}
close(MYFILE);
my $file0= "$path0/$filename";
open(MYFILE,$file0)||die"cannot open $file0";
while(defined($line0=<MYFILE>))
{
if($line0=~/.*-->/)
{
chomp($line0);
push(@testcases0,$line0);
# print "old:testcase:$line0/n";
}
}
foreach $result0(@testcases0)
{
if($result0=~/(.*-->)/s(.*)/s(.*)/s(.*)/)
{
push(@ifmatch0,$3);
push(@scores0,$4);
# print "old:ifmatch:$3/n scores:$4/n";
}
}
foreach (@ifmatch0)
{
if(/^match$/)
{$matchnum0++;}
else {$mismatchunm0++;}
}
for($index=0;$index<@testcases;$index++)
{
if($testcases[$index]=~/^$testcases0[$index]$/i)
{
print "$index:the same/n";
}
else
{
print "$index:new:$ifmatch[$index] $scores[$index] /n";
print "$index:old:$ifmatch0[$index] $scores0[$index]/n";
if($ifmatch[$index]=~/^$ifmatch0[$index]$/i)
{
if($ifmatch[$index]=~/^match$/i)
{
$balance_match[$bothmatch_time]=$scores[$index]-$scores0[$index];
if($balance_match[$bothmatch_time]>0)
{print "$index:match higher:$balance_match[$bothmatch_time]/n";}
elsif($balance_match[$bothmatch_time]<0)
{print "$index:match lower:$balance_match[$bothmatch_time]/n";}
$bothmatch_time++;
}
elsif($ifmatch[$index]=~/^mismatch$/i)
{
$balance_mismatch[$bothmismatch_time]=$scores[$index]-$scores0[$index];
if($balance_mismatch[$bothmismatch_time]>0)
{print "$index:mismatch higher:$balance_mismatch[$bothmismatch_time]/n";}
elsif($balance_mismatch[$bothmismatch_time]<0)
{print "$index:mismatch lower:$balance_mismatch[$bothmismatch_time]/n";}
$bothmismatch_time++;
}
}
else
{
print "$index:now:$testcases[$index]/n";
print "$index:old:$testcases0[$index]/n";
}
}
}
@testcases0=();
@testcases=();
@ifmatch=();
@ifmatch0=();
@scores=();
@scores0=();
close(MYFILE);
# print "$matchnum $matchnum0/n";
# system("pause");
if($matchnum<$matchnum0)
{return -1;}
elsif($matchnum==$matchnum0)
{return 0;}
elsif($matchnum>$matchnum0)
{return 1;}
}
sub timecost{
my $filename =$_[0];
openfile($filename);
while(defined($line=<MYFILE>))
{
if($line=~/(Total times/s)(/d*)(/s.*)/)
{
$timecost=$2;
}
else {next;}
}
close(MYFILE);
my $file0= "$path0/$filename";
open(MYFILE,$file0)||die"cannot open $file0";
while(defined($line0=<MYFILE>))
{
if($line0=~/(Total times/s)(/d*)(/s.*)/)
{
$timecost0=$2;
}
else {next;}
}
$time_balance=$timecost-$timecost0;
return $time_balance;
}
sub main{
our $path=$ARGV[0];
our $path0=$ARGV[1];
if ((!-e $path)||(!-e $path0))
{
print "Cannot open $path or $path0/n" ;
system("pause");
}
my @filenames=getfilenameto($path);
my @filenames0=getfilenameto($path0);
my $testtypeid;
my $state=0;
my $state_com=0;
our @identifiers;
my $passnum=0;
my $errornum=0;
our @balance_match;
our @balance_mismatch;
our $bothmatch_time=0;
our $bothmismatch_time=0;
our $allscore_match=0;
our $allscore_mismatch=0;
our @time_balance;
our $failreason;
our $matchnum;
our $mismatchnum;
our $matchnum0;
our $mismatchnum0;
my $testtypeid=matchtesttype($filenames[$i]);
print "TestTypeId = $testtypeid/n";
for($i=0;$i<@filenames;$i++)
{
$state_com=searchfail($filenames[$i]);
if (($testtypeid=~/N000/i)||($testtypeid=~/C002/i)||($testtypeid=~/ASR_0001/i)||($testtypeid=~/S001/i)||($testtypeid=~/M004/i)||($testtypeid=~/M005/i))
{
print "particular---/n";
$state=compare_testcase($filenames[$i]);
if(($state==-1)||($state_com==-1))
{
print "Test Case [$i]: fail/n";
if($state_com==-1)
{print "Reason:$failreason/n";}
elsif($state==-1)
{print "Reason:lower rate/n";}
$identifiers[$i]=-1;
}
elsif(($state==0)||($state==1))
{
print "Test Case [$i]: pass/n";
$identifiers[$i]=1;
}
}
if ($testtypeid=~/M002_1/i)
{
$state=casem002($filenames[$i]);
if($state==-1)
{
print "Test Case [$i]: fail/n";
print "can not stop sipsession/n";
$identifiers[$i]=-1;;
}
else
{
print "can stop sipsession/n";
$identifiers[$i]=1;
}
$state=0;
$testtypeid="";
}
if($testtypeid=~/C002/i)
{
$state=caseC002($filenames[$i]);
if ($state==-1)
{
print "cancel-if-queue is disabled/n";
$identifiers[$i]=-1;;
}
elsif($state==1)
{
print "cancel-if-queue is ok/n";
$identifiers[$i]=1;
}
$state=0;
$testtypeid="";
}
if($testtypeid=~/ASR_0001/i)
{
$state=caseASR0001($filenames[$i]);
if($state==-1)
{
print "it havenot release resource after get-result/n";
$identifiers[$i]=-1;
}
else
{
print "it have releaseed resource after get-result/n";
$identifiers[$i]=1;
}
$state=0;
$testtypeid="";
}
if($testtypeid=~/S001/i)
{
$state=cases001($filenames[$i]);
if($state==-1)
{
print "options message fail/n";
$identifiers[$i]=-1;
}
else
{
print "options message ok/n";
$identifiers[$i]=1;
}
$testtypeid="";
$state=0;
}
$time_balance[$i]=timecost($filenames[$i]);
print "Time cost balance is $time_balance[$i]/n";
print"--------------------------------------/n";
}
# ------------count------------------------
for($j=0;$j<@balance_match;$j++)
{$allscore_match+=$balance_match[$j];}
if($j!=0)
{
our $average_match=$allscore_match/$j;
print "the average of match score balance is $average_match/n";
}
for($j=0;$j<@balance_mismatch;$j++)
{$allscore_mismatch+=$balance_mismatch[$j];}
if($j!=0)
{
our $average_mismatch=$allscore_mismatch/$j;
print "the average of mismatch score balance is $average_mismatch/n";
}
for($j=0;$j<@time_balance;$j++)
{$alltime_balance+=$time_balance[$j];}
$average_timebalance=$alltime_balance/$j;
print "the average of total time balance is $average_timebalance/n";
for($j=0;$j<@identifiers;$j++)
{
if($identifiers[$j]==-1){$errornum++;}
else {$passnum ++;}
}
print"total = $i error = $errornum pass = $passnum/n";
# system("pause");
close(MYFILE);
}
main{};