diff -r 000000000000 -r ba25891c3a9e secureswitools/swisistools/test/tinterpretsis/runtests.pl --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/secureswitools/swisistools/test/tinterpretsis/runtests.pl Thu Dec 17 08:51:10 2009 +0200 @@ -0,0 +1,369 @@ +# +# Copyright (c) 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 "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: +# runtests.pl is used to run Interpretsis unit tests. +# +# + +use integer; +use Cwd; +use autouse 'Win32::Process' => qw(Create INFINITE); +use File::Copy; + +$INT_PATH="\\epoc32\\tools\\"; +$INT_CMD ="interpretsis.exe"; + +#$C_DRIVE ="\\epoc32\\winscw\\c"; +#$Z_DRIVE ="\\epoc32\\RELEASE\\WINSCW\\UDEB\\Z"; +$C_DRIVE ="\\cdrive"; +$Z_DRIVE ="\\romdrive"; + +$SIS_PATH="\\epoc32\\winscw\\c\\tswi\\tinterpretsis\\sis_winscw_udeb\\"; +$CONFIG_PATH="\\epoc32\\winscw\\c\\tswi\\tinterpretsis\\"; + +$PREPARE_SIS="\\epoc32\\winscw\\c\\tswi\\tinterpretsis\\preparesis.pl winscw udeb"; +$CMD = "$INT_PATH$INT_CMD"; +$PARAMS =" -c $C_DRIVE -z $Z_DRIVE -w INFO -l \\epoc32\\winscw\\c\\interpretsis_test.txt -s "; + +$logFile = "\\epoc32\\winscw\\c\\interpretsis_test.txt"; +$numTotal = 0; +$numPassed = 0; +$numFailed = 0; +my $usif = 0; +# +#Function to write log into file +# +sub WriteLog { + my ($log) = @_; + + unless( open($fh, ">> $logFile")) { + printf STDERR "Can\'t open $logFile:$!\n"; + return; + } + printf $fh $log; + printf $log; + close $fh; +} + +sub RunTest($$$) { + my $sis = $_[0]; + my $expected = $_[1]; + my $config_file = $_[2]; + $numTotal++; + + $sis = join(" -s $SIS_PATH", split(',', $sis)); + WriteLog("\nInstalling $sis\n"); + + if ($^O eq "MSWin32") { + # do this because system() doesn't handle the return code + # correctly on windows :-( + sub error () { + print Win32::FormatMessage( Win32::GetLastError() ); + } + + Create($ProcessObj, + $CMD, + "$PARAMS $SIS_PATH$sis -i $CONFIG_PATH$config_file ", + 0, + NORMAL_PRIORITY_CLASS, + ".") || die error() ; + + $ProcessObj->Wait(INFINITE); + $ProcessObj->GetExitCode($y); + } else { + system("$CMD $PARAMS $SIS_PATH$sis -i $CONFIG_PATH$config_file"); + $y = $? >> 8; + if ($y & 0x80) { + $y -= 256; + } + + } + + + my $result = $y; + + # If a check case + if ($expected == '99' ) + { + $exists = $C_DRIVE."\\test_exists_func.txt"; + $approp = $C_DRIVE."\\test_approp_func_true.txt"; + $package = $C_DRIVE."\\test_package_func.txt"; + # Check to see if the files are installed or not + if (-e $exists && -e $approp && -e $package) + { + WriteLog("*** Success\n\n"); + $numPassed++; + } + else + { + WriteLog("--- Fail: test result was $result expected 0\n\n"); + $numFailed++; + } + + } + else + { + if ($result == $expected) { + WriteLog("*** Success\n\n"); + $numPassed++; + } else { + WriteLog("--- Fail: result was $result expected $expected\n\n"); + $numFailed++; + } + } +} + + +sub RemoveDir($) +{ + my $dir = $_[0]; + opendir(DIRHANDLE, $dir) || die "can't open file $dir"; + + foreach $name (sort readdir(DIRHANDLE)) { + if ($name ne "." && $name ne "..") { + if (-d "$dir/$name") { + &RemoveDir("$dir/$name"); + rmdir("$dir/$name"); + } else { + unlink("$dir/$name"); + } + } + } + closedir(DIRHANDLE); + rmdir($dir); +} + +sub PrepareSis() +{ + # Run + system "$PREPARE_SIS"; +} + +sub CopyScrDb() +{ + if($usif eq "usif") + { + $EpocRom = "\\epoc32\\release\\winscw\\udeb\\z"; + $ScrPath = "\\sys\\install\\scr\\provisioned\\scr.db"; + $ScrDbPath = $EpocRom.$ScrPath; + $NewPath = $Z_DRIVE.$ScrPath; + + copy($ScrDbPath, $NewPath); + WriteLog("Copying DB from $ScrDbPath to $NewPath\n"); + } +} + +sub SetUpDbEnv() +{ + if($usif eq "usif") + { + my $current_dir = getcwd(); + chdir($Z_DRIVE); + mkdir("sys"); + chdir("sys"); + mkdir("install"); + chdir("install"); + mkdir("scr"); + chdir("scr"); + mkdir("provisioned"); + chdir $current_dir; + CopyScrDb(); + } +} +# if these test cases are being run for the new symbian universal software installer +# then copy the scr database to the specified location in the rom drive. +$usif="usif" if ($ARGV[0] =~ /\s*usif\s*/i); + +open(G, ">$logFile"); +close(G); + +PrepareSis(); + +mkdir($C_DRIVE); +mkdir($Z_DRIVE); +SetUpDbEnv(); + +open(F, ">$C_DRIVE/i_am_an_orphan.txt"); +print F "orphan I am\n"; +close(F); + +# plain exe & private dir text file should pass +RunTest("exe_s.sis",0, "config_normal.ini"); + +if ($usif) +{ + # Appropriate error message should be generated if SQLite library is not present + my $sqlLiteLib = "\\epoc32\\tools\\sqlite3.dll"; + my $sqlLiteLibBackup = "\\epoc32\\tools\\sqlite3.dll.test.backup"; + + if (-e $sqlLiteLib) + { + rename($sqlLiteLib,$sqlLiteLibBackup); + } + + RunTest("exe_s.sis",-43, "config_normal.ini"); + + if (-e $sqlLiteLibBackup) + { + rename($sqlLiteLibBackup,$sqlLiteLib); + } + + # Appropriate error message should be generated if SQLite library is + # present but not in one of the paths mentioned in PATH environment variable. + my $sqlLiteLibMovePath = "\\epoc32\\winscw\\c\\tswi\\sqlite3.dll"; + + if (-e $sqlLiteLib) + { + move($sqlLiteLib,$sqlLiteLibMovePath); + } + + RunTest("exe_s.sis",-43, "config_normal.ini"); + + if (-e $sqlLiteLibMovePath) + { + move($sqlLiteLibMovePath,$sqlLiteLib); + } + + # In case of multiple occurences of SQLite library, verify that the one + # present in the location mentioned in the PATH environment variable is taken. + + open(FH,">$sqlLiteLibMovePath"); # create an empty file + close(FH); + RunTest("exe_s.sis",0, "config_normal.ini"); + unlink $sqlLiteLibMovePath; # remove the empty file + + + # Appropriate error message should be generated if "scrtool.exe" library is not present + my $scrTool = "\\epoc32\\tools\\scrtool.exe"; + my $scrToolBackup = "\\epoc32\\tools\\scrtool.exe.test.backup"; + + if (-e $scrTool) + { + rename($scrTool,$scrToolBackup); + } + + RunTest("exe_s.sis",-42, "config_normal.ini"); + + if (-e $scrToolBackup) + { + rename($scrToolBackup,$scrTool); + } + + # Appropriate error message should be generated if "scrtool.exe" is + # present but not in one of the paths mentioned in PATH environment variable. + my $scrToolMovePath = "\\epoc32\\winscw\\c\\tswi\\scrtool.exe"; + + if (-e $scrTool) + { + move($scrTool,$scrToolMovePath); + } + + RunTest("exe_s.sis",-42, "config_normal.ini"); + + if (-e $scrToolMovePath) + { + move($scrToolMovePath,$scrTool); + } + + # In case of multiple occurences of "scrtool.exe", verify that the one + # present in the location mentioned in the PATH environment variable is taken. + open(FH,">$scrToolMovePath"); # create an empty file + close(FH); + RunTest("exe_s.sis",0, "config_normal.ini"); + unlink $sqlLiteLibMovePath; # remove the empty file +} + +# reinstall should pass +RunTest("exe_s.sis",0, "config_normal.ini"); + +# patch should pass +RunTest("patch_s.sis",0, "config_normal.ini"); + +# partial upgrade should pass - exe uses different SID +RunTest("partial_s.sis",0, "config_normal.ini"); + +# writing to someone else's private dir +RunTest("private_fail_s.sis", -4, "config_normal.ini"); + +# overwrite an orphaned file +RunTest("overwrite_s.sis", 0, "config_normal.ini"); + +# clean the directory for the next batch of tests +RemoveDir($C_DRIVE); +mkdir($C_DRIVE); +CopyScrDb(); + +# plain exe & private dir text file should pass +RunTest("exe_s.sis",0, "config_normal.ini"); + +# attempt to eclipse +RunTest("eclipse_s.sis", -9, "config_normal.ini"); + +# duplicate sid +RunTest("duplicate_sid_s.sis", -9, "config_normal.ini"); + +# dll which has a duplicated sid as the exe in exe_s.sis +RunTest("dll_exe_dup_sid_s.sis", -9, "config_normal.ini"); + +# dll which has a duplicated sid as the dll in dll_exe_dup_sid_s.sis +RunTest("dll_dll_dup_sid_s.sis", -9, "config_normal.ini"); + +# depend on exe +RunTest("depend1_s.sis", 0, "config_normal.ini"); + +# depend on depend1 +RunTest("depend2_s.sis", 0, "config_normal.ini"); + +# depend on depend1 and depend2 +RunTest("depend3_s.sis", 0, "config_normal.ini"); + +# depend on depend1 and none existent package +RunTest("depend4_s.sis", -1, "config_normal.ini"); + +# mutually dependent +RunTest("depend5_s.sis,depend6_s.sis", -1, "config_normal.ini"); + +# base +RunTest("functions_base_s.sis", 0, "config_normal.ini"); + +# exists +RunTest("functions_s.sis", 99, "config_normal.ini"); + +# plain text file, with non-critical error in config file; should pass +RunTest("testconfig_s.sis",0, "config_warn.ini"); + +# stub sis file dependancy +$ROM_STUB_SYS="\\romdrive\\system"; +$ROM_STUB_INS="\\romdrive\\system\\install"; +mkdir($ROM_STUB_SYS); +mkdir($ROM_STUB_INS); +copy ("\\epoc32\\winscw\\c\\tswi\\tinterpretsis\\pkg\\stub_file.sis","\\romdrive\\system\\install\\stub_file.sis"); +copy ("\\epoc32\\winscw\\c\\tswi\\tinterpretsis\\pkg\\2000stub.sis", "\\romdrive\\system\\install\\2000stub.sis"); +RunTest("stub_file_depend_s.sis", 0, "config_normal.ini"); + +RemoveDir($C_DRIVE); +mkdir($C_DRIVE); + +# delete file on uninstall +RunTest("fn_flag_s.sis", 0, "config_normal.ini"); + +RemoveDir($C_DRIVE); +RemoveDir($Z_DRIVE); + +$run = "Run: $numTotal\n"; +$passed = "Passed: $numPassed\n"; +$summary = "$numFailed tests failed out of $numTotal\n"; +WriteLog($run); +WriteLog($passed); +WriteLog($summary);