SmokeTestServer.pl
branchSymbian2
changeset 1 8758140453c0
child 6 c108117318cb
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SmokeTestServer.pl	Thu Jan 21 12:53:44 2010 +0000
@@ -0,0 +1,334 @@
+# 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 the License "Symbian Foundation License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:
+# TestServer.pl 
+# This script was born on 19/10/2004
+# 
+#
+
+use strict;
+
+my $jobsfolder = "d:\\Jobs\\";
+
+# Loop forever
+while (1)
+{
+	open LogFile, ">>d:\\SmokeTestServerLog.txt" or die "Cannot open log file: $!";
+	
+	print "\n***********************\n";
+	print "\n*** START PUBLISHER ***\n";
+	print "\n***********************\n";
+	print "\n";
+	print LogFile "\n***********************\n";
+	print LogFile "\n*** START PUBLISHER ***\n";
+	print LogFile "\n***********************\n";
+	print LogFile "\n";
+	
+	my $localtimes = localtime;
+	print "\n*** Current Time: $localtimes ***\n";
+	print LogFile "\n*** Current Time: $localtimes ***\n";
+	
+	# 
+	# Check if there are any results ready for publishing
+	#
+	print "\n";
+	print "#\n# Check if there are any results ready for publishing\n#\n"; 
+	print "\n";	
+	print LogFile "\n";
+	print LogFile "#\n# Check if there are any results ready for publishing\n#\n"; 
+	print LogFile "\n";	
+	
+	opendir JobDir, $jobsfolder or die "Cannot open jobs dir $jobsfolder: $!";
+		
+	my @jobs = readdir(JobDir);
+	
+	# to remove "." and ".." from this list
+	shift @jobs;
+	shift @jobs;
+	
+	if (!scalar(@jobs))
+	{
+		print "\nNo Jobs to publish\n";
+		print LogFile "\nNo Jobs to publish\n";
+	}
+	else
+	{
+		# 
+		# Loop though each directory and publish logs
+		#
+		print "\n";
+		print "#\n# Loop though each directory and publish logs\n#\n"; 
+		print "\n";
+		print LogFile "\n";
+		print LogFile "#\n# Loop though each directory and publish logs\n#\n"; 
+		print LogFile "\n";
+			
+		foreach my $name (sort { $a <=> $b } @jobs)
+		{
+			if ( -d $jobsfolder.$name)
+			{
+				print "\n*** Found Job: $name ***\n";
+				print LogFile "\n*** Found Job: $name ***\n";
+				
+				# Check to see if job has been completed.
+				if (isJobFinished($name))
+				{
+					# 
+					# Publish the results
+					#
+					print "\n";
+					print "#\n# Publish the results\n#\n"; 
+					print "\n";
+					print LogFile "\n";
+					print LogFile "#\n# Publish the results\n#\n"; 
+					print LogFile "\n";
+					
+					my $publishfile = $jobsfolder.$name."\\publish.txt";
+					
+					if (-r $publishfile)
+					{
+						open (PUBLISH, $publishfile) or GoNext("Cannot find publish details for $name");
+						my $count = 0;
+						my $index = 0;
+						while (my $publishlocation = <PUBLISH>)
+						{
+							chomp $publishlocation;
+							
+							$index++;
+							
+							print "\nPublish Location = $publishlocation\n";
+							print LogFile "\nPublish Location = $publishlocation\n";
+							
+							`mkdir $publishlocation`; # or GoNext("$publishlocation\\$name\\");
+							
+							my $lookIn = "$jobsfolder$name\\output";
+							my ($source,$runid,$buildname) = getSourceDir($lookIn);
+							
+							my $srcdir = $source."\\xml";
+							my $trgtdir= $publishlocation."xml\\";
+							
+							my $xcopycmd= "xcopy /C /Y /E $srcdir $trgtdir ";
+							print `$xcopycmd`;
+							
+							#
+							# Copy the contents of Output and reports -
+							#
+							# runXX_<snapshot>_SymbianOS_vYY.xml/html to <snapshot>_Symbian_OS_vYY.xml/html
+							#
+							
+							my $xmlfile   = "$source\\run".$runid."_".$buildname."\.xml";
+							my $htmlfile  = "$source\\run".$runid."_".$buildname."\.html";
+							
+							if (-e $xmlfile)  {
+								
+								print "copy $xmlfile to $buildname.xml";
+								system "copy $xmlfile $publishlocation\\$buildname.xml";
+							}
+							
+							if (-e $htmlfile)  {
+								
+								print "copy $htmlfile to $buildname.html";
+								system "copy $htmlfile $publishlocation\\$buildname.html";
+							}
+							
+							print "\nNumber of Files Copied = $1\n" if $xcopycmd =~ m/(\d+)\s\w+/;
+							print LogFile "\nNumber of Files Copied = $1\n" if $xcopycmd =~ m/(\d+)\s\w+/;
+							
+							$count += $1;
+							
+							# The input should be copied onto \\devbuilds\master\.. but not \\devbuilds\logs\master\..
+							if ($index < 2)
+							{
+								print "\n\nCopy the Input\n";
+								$source = "$jobsfolder$name\\input\\*";
+								
+								# Copy the contents of Input
+								print "\ncmd: xcopy /C /Y /E $source $publishlocation 2>&1\n";
+								print LogFile "\ncmd: xcopy /C /Y /E $source $publishlocation 2>&1\n";
+								my $xcopy = `xcopy /C /Y /E $source $publishlocation 2>&1`;
+								print $xcopy;
+								
+								print "\nNumber of Files Copied = $1\n" if $xcopy =~ m/(\d+)\s\w+/;
+								print LogFile "\nNumber of Files Copied = $1\n" if $xcopy =~ m/(\d+)\s\w+/;
+								$count += $1;
+							}
+						}						
+						close Publish;
+						
+						print "\nTotal Number of files copied = $count\n";
+						print LogFile "\nTotal Number of files copied = $count\n";
+						
+						# Minimum 3 files have to be copied - Trace.txt, sys$rom.bin and armX.tpkg
+						if ($count >= 3)
+						{
+							# it is fine to delete the jobs dir
+							print "\ncmd: rd $jobsfolder$name /Q /S  2>&1\n";
+							print LogFile "\ncmd: rd $jobsfolder$name /Q /S  2>&1\n";
+							print `rd $jobsfolder$name /Q /S  2>&1`;
+						}
+					}
+					else
+					{
+						print "\n*** Error publishing results ***\n Cannot open publish file: $jobsfolder"."$name"."\\publish.txt\n";
+						print LogFile "\n*** Error publishing results ***\n Cannot open publish file: $jobsfolder"."$name"."\\publish.txt\n";
+					}
+				}
+				else
+				{
+					print "\nThe Job $name is either still running or has encountered an error\n";				
+					print LogFile "\nThe Job $name is either still running or has encountered an error\n";				
+				}
+			}
+			else
+			{
+				print "*** Error ***\nDir does not exist! $jobsfolder.$name\n";
+				print LogFile "*** Error ***\nDir does not exist! $jobsfolder.$name\n";
+			}
+		}
+	}
+	close JobDir;
+	
+	my $localtimes = localtime;
+	print "\n*** Current Time: $localtimes ***\n";
+	print LogFile "\n*** Current Time: $localtimes ***\n";
+	
+	print "\n";
+	print "\n*********************\n";
+	print "\n*** END PUBLISHER ***\n";
+	print "\n*********************\n";
+	print "\n";
+	print "\n";
+	print LogFile "\n";
+	print LogFile "\n*********************\n";
+	print LogFile "\n*** END PUBLISHER ***\n";
+	print LogFile "\n*********************\n";
+	print LogFile "\n";
+	print LogFile "\n";
+	
+	close LogFile;
+	sleep 900;
+}
+
+sub GoNext
+{
+	print "\n*** Error in Publisher ***\n $_[0] $!\n";
+	print LogFile "\n*** Error in Publisher ***\n $_[0] $!\n";
+	next;
+}
+
+# identify if a job has finished
+sub isJobFinished($) {
+	
+	my $jobid = shift;
+	my @cmd_out = `testdriver.cmd jobstatus -j $jobid 2>&1`;
+	
+	foreach (@cmd_out) {
+		if (m/completed/) { return 1; }
+	}
+	
+	return 0;
+}
+
+sub getSourceDir($)
+{
+	my $source = shift;
+	my $runid  = 0;
+	my $buildname;
+	
+	#
+	# Find the correct directory to publish
+	#
+	
+	if (opendir RESULTS, $source)
+	{	
+		my @dirArray = readdir(RESULTS);
+		
+		#print "@results";	
+		# to remove "." and ".." from this list
+		shift @dirArray;
+		shift @dirArray;
+		
+		if (!scalar(@dirArray))
+		{
+			print "REMARK: The result for $_[0] has an empty $source directory";
+			return;
+		}
+		else
+		{
+			print "\nContents of $source = @dirArray\n";
+			$source .= "\\$dirArray[0]"; 
+			# dirArray should always have just the one subdir - 0XXXX_Symbian_OS_vX.X
+			
+			$buildname = $dirArray[0];
+	
+			if (opendir tempDir, "$source")
+			{
+				# to remove "." and ".." from this list
+				my @dirArray = readdir(tempDir);
+				shift @dirArray;
+				shift @dirArray;
+				
+				print "\nContents of $source = @dirArray\n";
+				
+				foreach my $directory (@dirArray)
+				{
+					if ($directory =~ /(?:$_[0])/i)
+					{
+						$source .= "\\$directory";
+						
+						# added this to remove udeb/xx
+						if (opendir tempDir, "$source")
+						{
+							# to remove "." and ".." from this list
+							@dirArray = readdir(tempDir);
+							shift @dirArray;
+							shift @dirArray;
+				
+							print "\nContents of $source = @dirArray\n";
+				
+							foreach my $directory (@dirArray)
+							{
+								if ($directory =~ /(udeb|urel)/i)
+								{
+									$source .= "\\$directory";
+									if (opendir tempDir, "$source")
+									{
+										# to remove "." and ".." from this list
+										@dirArray = readdir(tempDir);
+										shift @dirArray;
+										shift @dirArray;
+				
+										print "\nContents of $source = @dirArray\n";
+				
+										foreach my $directory (@dirArray)
+										{
+											if ($directory =~ /(^[0-9]+)/i)
+											{
+												$source .= "\\$directory";
+												$runid = $directory;
+												last;
+											}
+										}
+									}
+									last;
+								}
+							}
+						}
+						
+					}
+				}
+			}
+		}
+	}
+	return ($source, $runid, $buildname);
+}