secureswitools/swisistools/test/tinterpretsis/runtests.pl
changeset 0 ba25891c3a9e
--- /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);