diff -r 000000000000 -r 5d03bc08d59c windowing/windowserver/group/runtest.pl --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/windowing/windowserver/group/runtest.pl Tue Feb 02 01:47:50 2010 +0200 @@ -0,0 +1,412 @@ +# Copyright (c) 2006-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: +# + +use File::Copy; +use File::Path; +use FindBin; +use lib $FindBin::Bin; +use Win32::Process; +use Win32; +use Win32::Job; + +my $platform = "winscw"; +my $screens = 2; + +# ------------------------------------------------------------------------------------------------------------------------------------- # +# log-id wins/winscw executable test-context wsini selection #of screens # +# ------------------------------------------------------------------------------------------------------------------------------------- # +&RunWservTest("normal", $platform, "auto", "autou.cfg", "wservu.ini", $screens); +&RunWservTest("sparse", $platform, "auto", "autou_sparse.cfg", "wservu_sparse.ini", $screens); +&RunWservTest("sparse_nodefault", $platform, "auto", "autou_sparse_nodefault.cfg", "wservu_sparse_nodefault.ini", $screens); +exit; + +sub RunWservTest() +{ + my $session = shift; + my $plat = shift; + my $exe = shift; + my $cfg = shift; + my $wservu = shift; + my $nScreens = shift; + + my $epocDir = "\\epoc32\\release\\$plat\\udeb\\"; + my $epocEmulator = $epocDir."epoc.exe"; + + my $wsini = $epocDir."z\\system\\data\\wsini.ini"; + my $wsiniBackup = $wsini.".bak"; + + my $epocFile = "\\epoc32\\data\\epoc.ini"; + my $epocBackup = $epocFile.".bak"; + + # backup original epoc.ini and wsini.ini + &DoCopy($epocFile, $epocBackup) if (!-f $epocBackup); + &DoCopy($wsini, $wsiniBackup) if (!-f $wsiniBackup); + + print "Mnt install\n"; + my $wservDir = "."; + &StartMntCommand($wservDir, $plat, $wservu, $cfg); + + $exeFile = $epocDir.$exe.".exe"; + if (-f $exeFile) + { + $epocEmulator = $exeFile; + } + else + { + &AddShellCmd($wsini, $exe); + } + + if ($nScreens > 1) + { + &CreateEpocMultiScreen($epocFile, $wsini, $nScreens); + } + + my $job = Win32::Job->new; + if (!$job) { &ErrorReport(); next; } + + print "Running wserv test $session..."; + my $spawned = $job->spawn($epocEmulator, 'epoc.exe'); + if (!$spawned) { &ErrorReport(); next; } + + my $timeout = 45; + my $ok = $job->run($timeout * 60); + warn "WARNING: Process \"$epocEmulator\" killed due to timeout.\n" if (!$ok); + + print "done\n"; + + # save wserv.log + my $logDir = "\\epoc32\\$plat\\c\\data\\"; + my $wservLog = $logDir."wserv.log"; + my $logBackup = $logDir."wserv_$session.log"; + &DoCopy($wservLog, $logBackup); + + + # restore original epoc.ini and wsini.ini + &DoCopy($wsiniBackup, $wsini); + &DoCopy($epocBackup, $epocFile); + + # remove auto.cfg + system("del /f /q \\epoc32\\release\\$plat\\udeb\\z\\system\\data\\auto.cfg"); +} + +sub StartMntCommand() +{ + my $wservDir = shift; + my $plat = shift; + my $wservu = shift; + my $autou = shift; + + &DoCopy("$wservDir\\..\\group\\system.ini", "\\epoc32\\data\\"); + &MntDoInstall($wservDir, $plat, 'udeb', $wservu, $autou); + &MntDoInstall($wservDir, $plat, 'urel', $wservu, $autou); +} + +sub MntDoInstall() +{ + my $wservDir = shift; + my $plat = shift; + my $UrelUdeb = shift; + my $whatFile = shift; + my $autoCfg = shift; + + my $dataDir = "\\epoc32\\release\\$plat\\$UrelUdeb\\z\\system\\data\\"; + mkpath($dataDir); + &DoCopy("$wservDir\\..\\group\\$whatFile", $dataDir.'wsini.ini'); + &DoCopy("$wservDir\\..\\group\\$autoCfg", $dataDir.'auto.cfg'); +} + +sub AddShellCmd +{ + my $file = shift; + my $cmd = shift; + + my $string = &ascii_to_utf16("SHELLCMD $cmd"); + + &Write_UTF16_Newline($file); + + open(FILE, ">>$file") or warn "WARNING: Could not open file: $!\n"; + print FILE $string; + close FILE; + + &Write_UTF16_Newline($file); +} + +sub Write_UTF16_Newline +{ + my $file = shift; + + open(BIN, ">>$file") or warn "WARNING: Could not open \"$file\": $!\n"; + binmode BIN; + sysseek BIN, 0, SEEK_END; + syswrite BIN, "\x0D\x00\x0A\x00" or warn "WARNING: Could not write to file\n"; + close BIN; +} + +# Function that accepts an ASCII string and returns the same string in UTF16 +sub ascii_to_utf16 { + my $utf16_string = ""; + my $ascii_string = shift; + my $lengthofstring = length($ascii_string); + + for (my $count=1; $count<=$lengthofstring; $count++) + { + my $char = substr($ascii_string,$count-1,1); + $utf16_string .= $char; + $utf16_string .= "\x00"; + } + + return $utf16_string; +} + +sub ProduceWServResult() +{ + $plat = shift; + $subDir = shift; + $handleFileTable = shift; + $wservTestResStatistic = shift; + + $background = 0; + + $wservTestResStatistic = ""; + $duration = ""; + + my $result = "PASS"; + + open TEMPLOGFILE, ">>\\work.txt"; + print TEMPLOGFILE "Start ProduceWServResult: plat $plat,subDir $subDir,handleFileTable $handleFileTable,background $background\n"; + close TEMPLOGFILE; + + $logFile = "$ENV{EPOCROOT}epoc32\\$plat\\c\\data\\WSERV.LOG"; + + open LOGFILEWSERV, "$logFile" or $logWSFileRes = -1; + $CurWinServTestNumber = 0; + $CurWinServTestName = ""; + $wservTestDuration = 0; + $wservFullTestDuration = 0; + + print "result ws : $logWSFileRes\n"; + + $fileLogWServDest = "$subDir\\1_wserv.htm"; + open FILELOGDEST, ">$fileLogWServDest";# or die "Can't open file: $fileLogWServDest! \n"; + print FILELOGDEST "
";
+
+  while($_ = )
+	{
+    if(/\s(\d+\.\d\d\d)/)
+    {
+      $wservTestDuration = $1;
+    }
+    else
+    {
+      $wservTestDuration = 0;
+    }
+    $wservFullTestDuration +=  $wservTestDuration;
+
+    if(/AUTO New Test: /)
+		{
+      $wservFullTestDuration = $wservTestDuration;
+
+      if($CurWinServTestNumber != 0) #previos test was inconclusive
+      {
+        $Inconclusive++;
+        $result = "INCONCLUSIVE";
+        OutputWServerTestResultToTable(FILERES, $background, $result,
+           $CurWinServTestName, $fileLogWServDest, $wservFullTestDuration);
+        $background = !$background;
+        print FILELOGDEST  "
"; + close FILELOGDEST; + } + + if(/Test (\d+),(.+\w)(\s+\d\.)/) + { + $CurWinServTestNumber = $1; + $CurWinServTestName = $2; + } + else + { + /Test (\d+),(.+)/; + $CurWinServTestNumber = $1; + $CurWinServTestName = $2; + } + + + if($CurWinServTestNumber > 1) + { + $fileLogWServDest = "$subDir\\$CurWinServTestNumber" . "_wserv.htm"; + open FILELOGDEST, ">$fileLogWServDest";# or die "Can't open file: $fileLogWServDest! \n"; + print FILELOGDEST "
";
+      }
+    }
+    elsif(/AUTO TEST RESULT: /)
+		{
+      $CurWinServTestNumber = 0;
+
+      /AUTO TEST RESULT: (\w+)/;
+      $TestResult = $1;
+      if($TestResult eq "PASS")
+      {
+        $col = "#008000";
+        $result = $TestResult;
+        $Pass++;
+      }
+      elsif($TestResult eq "FAIL")
+      {
+        $col = "#ff0000";
+        $result = $TestResult;
+        $Failed++;
+      }
+      else
+      {
+        $col = "#0000ff";
+        $Unknown++;
+        $result = "N/A";
+      }
+      
+      if($wservFullTestDuration =~ /(\d+\.\d{0,3})/)
+      {
+        $wservFullTestDuration = $1;
+      }
+
+      #output result to the file
+      OutputWServerTestResultToTable(FILERES, $background, $result,
+          $CurWinServTestName, $fileLogWServDest, $wservFullTestDuration);
+      $background = !$background;
+      print FILELOGDEST "$_
"; + + print FILELOGDEST "
"; + close FILELOGDEST; + } + if(/AUTO Testing Complete, (.*)(\d+\.\d{0,3})/) + { + $wservTestResStatistic = $1; + } + + if(/AUTO Failed /) + { + print FILELOGDEST "$_
"; + } + else + { + print FILELOGDEST "$_
"; + } + } #while($_ = ) + + #check if a test is inconclusive + if($CurWinServTestNumber != 0) + { + $CurWinServTestNumber = 0; + $wservFullTestDuration = $wservTestDuration; + + $wservTestResStatistic = "Inconclusive"; + $result = "INCONCLUSIVE"; + $Inconclusive++; + + #output result to the file + OutputWServerTestResultToTable(FILERES, $background, $result, + $CurWinServTestName, $fileLogWServDest, $wservFullTestDuration); + $background = !$background; + + print FILELOGDEST ""; + close FILELOGDEST; + } + + close LOGFILEWSERV; + close FILELOGDEST; +} + +sub OutputWServerTestResultToTable() +{ + my $handle = shift; + my $background = shift; + my $result = shift; + my $TestName = shift; + my $WServDest = shift; + my $duration = shift; + + if($background == 1) + { + print $handle "\n"; + } + else + { + print $handle "\n"; + } + + print $handle "

$TestName\n"; + + print $handle "\n"; + print $handle "

$duration\n"; + + print $handle "\n"; + print $handle "

$result\n"; + print $handle "\n"; +} + +sub DoCopy +{ + my $source = shift; + my $target = shift; + + my $out = `copy /y \"$source\" \"$target\" 2>&1`; + + if ($? && -e $target && $out =~ /Access is denied./) + { + # Target exists and is probably read only, so attempt an xcopy + `xcopy /y /i /r /e \"$source\" \"$target\" 2>&1`; + } + + warn "WARNING: Could not copy \"$source\" to \"$target\"\n" if $?; +} + +sub CreateEpocMultiScreen() +{ + my $epocFile = shift; + my $wsiniFile = shift; + my $nScreens = shift; + + # epoc.ini + open(FILE, ">>$epocFile") or warn "WARNING: Could not open file: $!\n"; + for (my $i=1; $i<$nScreens; $i++) + { + print FILE "_NewScreen_\n"; + print FILE "ScreenWidth 640\n"; + print FILE "ScreenHeight 240\n"; + } + close FILE + + # wsini.ini + &AppendLineToFile($wsiniFile, "[SCREEN0]"); + for (my $i=1; $i<$nScreens; $i++) + { + &AppendLineToFile($wsiniFile, "[SCREEN$i]"); + } + } + + sub AppendLineToFile() + { + my $file = shift; + my $line = shift; + + my $string = &ascii_to_utf16($line); + + &Write_UTF16_Newline($file); + + open(FILE, ">>$file") or warn "WARNING: Could not open file: $!\n"; + print FILE $string; + close FILE; + + &Write_UTF16_Newline($file); + } +