usbmgmt/usbmgrtest/automation/processLogs.pl
changeset 0 c9bc50fca66e
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/usbmgmt/usbmgrtest/automation/processLogs.pl	Tue Feb 02 02:02:59 2010 +0200
@@ -0,0 +1,161 @@
+# Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:
+#
+
+$suite = "";
+$verbose = 1;
+
+$numtests = $ARGV[0];
+
+open TESTS, $ARGV[1] or die "Cannot open $ARGV[1]";
+%config = (tdlogs => "", logdir => "", mainlog => "");
+CONFIG: while (<TESTS>) {
+	last CONFIG if /\[tests\]/i;
+	next CONFIG if /^\n/;
+	chomp;
+	($var, $value) = split /=/, $_;
+	if (exists $config{$var}) {
+		$config{$var} = $value;
+	}
+}
+close TESTS;
+
+@rundirs = &find_rundirs;
+@sorted = sort {
+	$a =~ /RunNo([0-9]+)/;
+	$l = $1;
+	$b =~ /RunNo([0-9]+)/;
+	$r = $1;
+	$r <=> $l;
+	} @rundirs;
+
+open MAIN, ">".$config{"mainlog"} or die "Can't open ".$config{"mainlog"}.": $!";
+print MAIN <<EOT;
+<html>
+<head>
+<title>$suite Log</title></head>
+<style type="text/css">
+.pass { color: green; }
+.fail { color: red; }
+</style>
+<body>
+EOT
+print "Number of test dirs to process: $numtests\n";
+my @dirlist;
+for ($i = 0; $i < $numtests; $i++) {
+	$dirlist[$i] = $sorted[$i];
+}
+@dirlist = reverse @dirlist;
+for ($i = 0; $i < $numtests; $i++) {
+	&process_dir($dirlist[$i], "");
+}
+print MAIN "</body></html>";
+close MAIN;
+
+sub find_rundirs {
+	my @rundirs;
+	opendir(RESDIR, $config{"tdlogs"}) or die "Can't open ".$config{"tdlogs"}.": $!\n";
+	my @dirs = grep { /^[^.]/ } readdir(RESDIR);
+	close RESDIR;
+	my $highest = 0;
+	my $highDir = "";
+	for my $dir (@dirs) {
+		opendir(SUBDIR, $config{"tdlogs"}."\\$dir") or die "Can't open ".$config{"tdlogs"}."\\$dir: $!\n";
+		@subdirs = grep { /[^.]/ } readdir(SUBDIR);
+		for my $subdir (@subdirs) {
+			push @rundirs, $config{"tdlogs"}."\\$dir\\$subdir";
+#			print "Found ".$config{"tdlogs"}."\\$dir\\$subdir\n"
+			#$subdir =~ /RunNo([0-9]+)/;
+			#if ($1 > $highest) {
+			#	$highest = $1;
+			#	$highDir = $config{"tdlogs"}."\\$dir\\$subdir";
+			#}
+		}
+		close SUBDIR;
+	}
+	#return $highDir;
+	return @rundirs;
+}
+
+sub process_dir {
+	my ($tdlogdir, $currdir) = @_;
+	print "Processing $tdlogdir$currdir\n" if $verbose;
+	chdir("$tdlogdir$currdir");
+	#Find all log files that match the ones retrieved from the board and process them.
+	while (<*.htm>) {
+		/(.*)\.htm/;
+		my $htmlog = $_;
+		my $txtlog = "";
+		print "Looking for ".$config{"logdir"}."\\$suite$currdir\\$1.txt\n" if $verbose;
+		if (-e $config{"logdir"}."\\$suite$currdir\\$1.txt") {
+			print "found $1.txt\n" if $verbose;
+			$txtlog = $config{"logdir"}."\\$suite$currdir\\$1.txt";
+		}
+		&process_logs($1, $txtlog, $htmlog);
+	}
+
+	#Process subdirectories
+	opendir(DIR, "$tdlogdir$currdir") or die "Can't open $tdlogdir$currdir: $!\n";
+	my @dirs = grep { /^[^.]/ } readdir(DIR);
+	close DIR;
+	for my $dir (@dirs) {
+		if (-d "$tdlogdir$currdir\\$dir") {
+			&process_dir($tdlogdir, "$currdir\\$dir");
+		}
+	}
+}
+
+sub process_logs {
+	my ($name, $txtlog, $htmlog) = @_;
+	print MAIN "<b>$name Log</b><br/><br/>";
+	my $fail = 0;
+	$fail += &process_txt_log($txtlog) unless $txtlog eq "";
+	$fail += &process_htm_log($htmlog);
+	if ($fail > 0) {
+		print MAIN "<b>$name: </b><span class=\"fail\"><b>$fail step(s) failed</b></span><br/>";
+	} else {
+		print MAIN "<b>$name: </b><span class=\"pass\"><b>All steps passed</b></span><br/>";
+	}
+}
+
+sub process_txt_log {
+	open LOG, $_[0] or die "Can't open".$_[0].": $!\n";
+	my $fail = 0;
+	while (<LOG>) {
+		print MAIN "Command $_ : ";
+		$_ = <LOG>;
+		print MAIN "<span class=\"pass\">PASS" if /pass/i;
+		do { print MAIN "<span class=\"fail\">FAIL"; $fail++ } if /fail/i;
+		print MAIN "</span><br/>";
+	}
+	close LOG;
+	return $fail;
+}
+
+sub process_htm_log {
+	open LOG, $_[0] or die "Can't open".$_[0].": $!\n";
+	print MAIN "<pre>\n";
+	my $fail = 0;
+	LINE: while (<LOG>) {
+		next LINE if /<\/?html>/;
+		if (/(FAIL|ABORT|PANIC|INCONCLUSIVE|UNKNOWN|UNEXECUTED) = ([0-9]+)/) {
+			$fail += $2; 
+		}		
+		print MAIN;
+	}
+	print MAIN "</pre>\n";
+	return $fail;
+}
+
+