--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/secureswitools/swisistools/test/tsignsis/testsignsis.pl Thu Dec 17 08:51:10 2009 +0200
@@ -0,0 +1,541 @@
+#
+# 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:
+#
+
+# Perl script that test SignSIS tools
+use File::Basename;
+my $scriptdir= dirname $0;
+print "Changing dir to $scriptdir\n";
+chdir $scriptdir;
+
+$logFile = "/epoc32/winscw/c/signsis_test.txt";
+
+
+#
+# Function to create a file (test.txt or any PKG)
+#
+sub CreateFile {
+ my ($filename, $contents) = @_;
+
+ unless (open($fh, "> $filename")) {
+ printf STDERR "Can't open $filename: $!\n";
+ return;
+ }
+ print $fh $contents;
+ close $fh;
+
+
+}
+
+#
+#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;
+ }
+
+#
+# Run SIGNSIS with prepared sis file, log and administrate its result
+#
+sub SignSISFile
+ {
+ my ($sisfile) = @_[0];
+ my ($expectedResult) = @_[1];
+ $sisfile =~ s/\.sis//;
+ $neededfolder="";
+ $neededfile="";
+ $emptylinecertsisfile="./data/emptylinescert.signed.sis";
+ if("$sisfile.signed.sis" eq $emptylinecertsisfile)
+ {
+ @retval = system("/epoc32/tools/signsis -o -p $sisfile.signed.sis > $sisfile.log");
+ $logMsg = sprintf "Expected code:%5d result Code:%5d\n", $expectedResult, $?;
+ WriteLog( $logMsg);
+ if ( $^O =~ /^MSWIN32$/i )
+ {
+ $result = `findstr /C:"Issuer" $sisfile.log`;
+ }
+ else
+ {
+ $result = system(`grep "Issuer" $sisfile.log`) ;
+ }
+ }
+ else
+ {
+ @retval = system("/epoc32/tools/signsis -o $sisfile.sis > $sisfile.log");
+ $logMsg = sprintf "Expected code:%5d result Code:%5d\n", $expectedResult, $?;
+ WriteLog( $logMsg);
+ if ( $^O =~ /^MSWIN32$/i )
+ {
+ $result = `findstr /C:"Issued by" $sisfile.log `;
+ }
+ else
+ {
+ $result = system(`grep "Issued by" $sisfile.log`);
+ }
+ @retval = system("/epoc32/tools/signsis -o -p $sisfile.sis > $sisfile.log");
+ }
+
+ $neededfolder="Chain";
+ $neededfile .= "$neededfolder"."/". "cert1.pem";
+ $NumberOfTests++;
+ if( $? == $expectedResult && -e $neededfile && -s $neededfile && length($result)>0 )
+ {
+ if("$sisfile.signed.sis" eq $emptylinecertsisfile)
+ {
+ my $res=`diff "./data/emptylinescertandkey.out" "$sisfile.log"`;
+ if(length($res) == 0)
+ {
+ $NumberOfPassed++;
+ WriteLog("Signing successful\n\n");
+ WriteLog("Passed\n\n");
+ }
+ else
+ {
+ $NumberOfFailed++;
+ WriteLog("Failed\n\n");
+ }
+ }
+ else
+ {
+ $NumberOfPassed++;
+ WriteLog("Passed\n\n");
+ }
+ }
+ elsif($? == $expectedResult)
+ {
+ if("$sisfile.sis" eq "simple.sis" ||"$sisfile.sis" eq "test04.sis")
+ {
+ if ( $^O =~ /^MSWIN32$/i )
+ {
+ $result = `findstr /C:"No primary signatures" $sisfile.log `;
+ }
+ else
+ {
+ $result = system(`grep "No primary signatures" $sisfile.log`);
+ }
+ if(length($result)>0)
+ {
+ $NumberOfPassed++;
+ WriteLog("Passed\n\n");
+ }
+ else
+ {
+ $NumberOfFailed++;
+ WriteLog("Failed\n\n");
+ }
+ }
+ else
+ {
+ $NumberOfPassed++;
+ WriteLog("Passed\n\n");
+ }
+ }
+ else
+ {
+ $NumberOfFailed++;
+ WriteLog("Failed\n\n");
+ }
+
+ unlink("$sisfile.log");
+ unlink("$sisfile.signed.sis");
+ opendir(DIR, $neededfolder);
+ while (defined($file=readdir(DIR)))
+ {
+ unlink("$neededfolder"."/"."$file");
+ }
+ close(DIR);
+ }
+
+#
+# New test code for DEF093156 - SIGNSIS does not process correctly non European symbols in cmd line
+# This test checks whether the pkg file with japanese symbols is signed by signsis successfully .
+#
+sub TestDEF093156 {
+
+ my $path = "\\epoc32\\winscw\\c\\tswi\\tsignsis";
+ $DEF093156Log = "DEF093156.log";
+ $ResFile="ResultSignSIS.txt";
+
+ WriteLog("Test for DEF093156 - Test for successful creation of a signed sis file with japanese symbols created by signsis.\n");
+
+ # sign a pkg with japanese symbols using a certificate and a file with japanese sym,bols
+ system("WScript.exe //B //Nologo $path\\testsignsis.vbs > $DEF093156Log");
+
+ $NumberOfTests++;
+ if ( -f $ResFile )
+ {
+ $NumberOfPassed++;
+ WriteLog("Passed\n\n");
+ }
+ else
+ {
+ $NumberOfFailed++;
+ WriteLog("Failed\n\n");
+ }
+
+ unlink $DEF093156Log;
+ unlink $ResFile;
+}
+
+
+#
+# New test code for DEF093156 - SIGNSIS does not process correctly non European symbols in cmd line
+# This test checks whether the pkg file with japanese symbols is signed by signsis successfully .
+#
+sub TestLDEF093156 {
+
+ $DEF093156Log = "DEF093156.log";
+ $ResFile="ResultSignSIS.txt";
+ $SignedSISFile = "pkg_乕乖乗乘_kanji_signed.SIS";
+
+# Data to write in the created file for Linux test
+ $TempData = "Exist";
+
+ system("cp -f pkg_kanji.SIS pkg_乕乖乗乘_kanji.SIS");
+ system("cp -f kanji_key.key 丟両丣kanji_key.key");
+ system("cp -f kanji_cer.cer 丁丂七丄kanji_cer.cer");
+
+ system("/epoc32/tools/signsis -v -s pkg_乕乖乗乘_kanji.SIS pkg_乕乖乗乘_kanji_signed.SIS 丁丂七丄kanji_cer.cer 丟両丣kanji_key.key 乕乖乗乘pass > DEF093156Log");
+
+ WriteLog("Test for DEF093156 - Test for successful creation of a signed sis file with japanese symbols created by signsis.\n");
+
+ if( -f $SignedSISFile){
+ CreateFile($ResFile, $TempData);
+ }
+
+ $NumberOfTests++;
+
+ if ( -f $ResFile ) {
+ $NumberOfPassed++;
+ WriteLog("Passed\n\n");
+ }
+ else {
+ $NumberOfFailed++;
+ WriteLog("Failed\n\n");
+ }
+
+ unlink $DEF093156Log;
+ unlink $ResFile;
+}
+
+#
+# Test code for DEF111563 - SignSIS fails if an embedded package has a dependency.
+# This test checks whether an embedding pkg (whose embedded pkg has a dependency ) is signed by signsis successfully.
+#
+
+sub TestDEF111563 {
+
+ $pkgEmbeddedFile = "Emdedded.pkg";
+ $sisEmbeddedFile = "Embedded.sis";
+ $pkgFile = "Emdedding.pkg";
+ $sisFile = "Embedding.sis";
+ $DEF111563LogFile = "DEF111563.log";
+
+ WriteLog("DEF111563 - Test for successful creation of signed sis file for package whose embedded pkg has dependency.\n");
+
+ # Generate test PKG file contents for embedded pkg file.
+ $PkgFile = sprintf( $EmbeddedpkgFile, "-1,-1,-1");
+
+ # Create PKG file
+ CreateFile($pkgEmbeddedFile , $PkgFile);
+
+ # Create a sis file
+ my $result = system("/epoc32/tools/makesis $pkgEmbeddedFile $sisEmbeddedFile > $DEF111563LogFile");
+
+ # Sign the embedded sis file with dependency using SignSIS.
+ my $result1 = system("/epoc32/tools/signsis -s $sisEmbeddedFile $sisEmbeddedFile ./signingdata/good-r5.pem ./signingdata/good-r5.key.pem > $DEF111563LogFile");
+
+ # Generate test PKG file contents for embedding pkg file.
+ $PkgFile = sprintf( $EmbeddingpkgFile, "-1,-1,-1");
+
+ # Create PKG file
+ CreateFile($pkgFile , $PkgFile);
+
+ # Create a sis file
+ my $result2 = system("/epoc32/tools/makesis $pkgFile $sisFile > $DEF111563LogFile");
+
+ # Sign the embedding sis file using SignSIS.
+ my $result3 = system("/epoc32/tools/signsis -s $sisFile $sisFile ./signingdata/good-r5.pem ./signingdata/good-r5.key.pem > $DEF111563LogFile");
+
+
+ $NumberOfTests++;
+
+ if ($result == 0 && $result1 == 0 && $result2 == 0 && $result3 == 0 )
+ {
+ $NumberOfPassed++;
+ WriteLog("Passed\n\n");
+ }
+ else
+ {
+ $NumberOfFailed++;
+ WriteLog("Failed\n\n");
+ }
+
+ unlink $pkgEmbeddedFile;
+ unlink $sisEmbeddedFile;
+ unlink $pkgFile;
+ unlink $sisFile;
+ unlink $DEF111563LogFile;
+}
+
+#
+# Test code for DEF138538 - Signsis crashes when displaying signing info for SIS files.
+# This test checks tat Singnsis displays the signing information for SIS files correctly
+# and doesn't fail if the subject name of the signing certificate is in the UTF8 format.
+#
+
+sub TestDEF138538 {
+
+ $sisFileName = "\\epoc32\\winscw\\c\\tswi\\tsignsis\\data\\CertWithUnicodeSubjectLine.SIS";
+ $DEF138538LogFile = "DEF138538.log";
+
+ WriteLog("DEF138538 - Test if Singnsis displays the signing information for SIS file correctly.\n");
+
+ # Create a sis file
+ my $result1 = system("/epoc32/tools/signsis.exe -p -o $sisFileName > $DEF138538LogFile");
+
+ my $result2 = 0;
+ $result2 = `findstr /C:"Issuer: CN=Nokia Online CA, O=Nokia" $DEF138538LogFile`;
+
+ $NumberOfTests++;
+
+ if (($result1 == 0) && $result2)
+ {
+ $NumberOfPassed++;
+ WriteLog("Passed\n\n");
+ }
+ else
+ {
+ $NumberOfFailed++;
+ WriteLog("Failed\n\n");
+ }
+
+ unlink $DEF138538LogFile;
+}
+
+#
+# Package template string to generate an embedded PKG file having a dependency.
+#
+$EmbeddedpkgFile = "
+;
+; Autogenerated test install file
+;
+&EN
+;
+#{\"Test Embedded\"}, (0x01001235), 1, 1, 1, TYPE=SA
+;
+%{\"Symbian Software Ltd\"}
+:\"Symbian Software Ltd\"
+;
+;Installation name and header data
+(0x101f74a0),%s,{\"Test Embedded\"}
+;
+(0x01001225), *, *, *, {\"embedded2\"}
+;
+";
+
+#
+# Package template string to generate an embedding PKG file whose embedded pkg has a dependency.
+#
+$EmbeddingpkgFile = "
+;
+; Autogenerated test install file
+;
+&EN
+;
+#{\"Test Application SA1\"}, (0x01001234), 1, 0, 1, TYPE=SA
+;
+%{\"Symbian Software Ltd\"}
+:\"Symbian Software Ltd\"
+;
+;Installation name and header data
+(0x01001234),%s,{\"Test Application SA1\"}
+;
+(0x01001235), *, *, *, {\"embedded\"}
+;
+\@\"embedded.sis\" , (0x01001235)
+;
+";
+
+#
+# Main
+#
+# Create environment and control test flow to testing SIGNSIS.EXE
+#
+#
+
+unlink($logFile);
+WriteLog("SIGNSIS test.\n\n");
+
+#
+# Counters for results
+#
+$NumberOfTests = 0;
+$NumberOfPassed = 0;
+$NumberOfFailed = 0;
+
+#
+# Windows "FindStr" only understand "\" for path to read the log file
+#
+if ( $^O =~ /^MSWIN32$/i )
+{
+
+#
+# Array of contents of test sis file and expected results
+#
+# file name, expected , expected log, Title
+# result message
+# ----------------------------------------------------------------------------------------------------
+@TestItems = ( ["simple.signed.sis", 0, , "Created", "Test for normal Signed sis file"],
+ ["simple.sis", 0, , "Created", "Test for Unsigned sis file"],
+ ["data\\signedctltest.sis", 0, , "Created", "Test for Stub sis controller file"],
+ ["data\\pkgromctltest.sis", 0, , "Created", "Test for Stub sis controller for package file in ROM"],
+ ["data\\nonsisfile.sis", 256, , "Verification Failed", "Test for Non sis or non Stub sis controller file"],
+ ["data\\corrupted.sis", 256, , "Verification Failed", "Corrupted sis file"],
+ ["data\\eshell_hybrid.sis", 256, , "Verification Failed", "Stored and computed hash values do not match"],
+ ["data\\emptylinescert.sis", 0, , "Created", "Test for successful signing when certificate(.cer) and key has few empty lines."],
+ );
+
+}
+
+# Linux tests :
+
+else
+
+{
+
+#
+# Array of contents of test sis file and expected results
+#
+# file name, expected , expected log, Title
+# result message
+# ----------------------------------------------------------------------------------------------------
+@TestItems = ( ["simple.signed.sis", 0, , "Created", "Test for normal Signed sis file"],
+ ["simple.sis", 0, , "Created", "Test for Unsigned sis file"],
+ ["data/signedctltest.sis", 0, , "Created", "Test for Stub sis controller file"],
+ ["data/pkgromctltest.sis", 0, , "Created", "Test for Stub sis controller for package file in ROM"],
+ ["data/nonsisfile.sis", 256, , "Verification Failed", "Test for Non sis or non Stub sis controller file"],
+ ["data/corrupted.sis", 256, , "Verification Failed", "Corrupted sis file"],
+ ["data/eshell_hybrid.sis", 256, , "Verification Failed", "Stored and computed hash values do not match"],
+ ["data/emptylinescert.sis", 0, , "Created", "Test for successful signing when certificate(.cer) and key has few empty lines."],
+ );
+
+
+}
+
+#
+# Do test for each elements of TestItems array
+#
+ $datapath = "data/";
+ opendir(DIR,"./data/");
+ my @pkgfiles = readdir DIR;
+ foreach my $files (@pkgfiles)
+ {
+ $files =~ s/\.pkg//;
+
+ $pkgfilepath = "$datapath"."$files";
+ $pkgfile = "./data/emptylinescert.sis";
+ if(-e "$pkgfilepath.pkg")
+ {
+ @retval = system("makesis -v $pkgfilepath.pkg $files.sis > $files.log");
+ if( $? != 0)
+ {
+ WriteLog("\n\nProblem While Creating makesis for $files.pkg\n");
+ }
+ else
+ {
+ WriteLog("\n\nCreated $files.sis file from $files.pkg\n");
+ WriteLog("\n\nSigning $files.sis using certificate\n\n");
+ @retval = system("/epoc32/tools/signsis -s $pkgfilepath.sis $files.signed.sis ./signingdata/good-r5.pem ./signingdata/good-r5.key.pem");
+ if( $? != 0)
+ {
+ WriteLog("\n\nProblem While signing $files.sis\n");
+ }
+ }
+ }
+
+ if($pkgfilepath eq $pkgfile)
+ {
+ $files =~ s/\.sis//;
+ $signedsispath = "data\\" . $files;
+ @retval = system("/epoc32/tools/signsis -s $pkgfilepath $signedsispath.signed.sis ./signingdata/emptylinescert.pem ./signingdata/emptylinescert.key.pem");
+ }
+ }
+
+for my $Test ( @TestItems )
+ {
+ # Do SIGNSIS test
+ $testid = sprintf "SEC-SWI-I-SIGNSIS-000%d\n",$NumberOfTests+1;
+ WriteLog($testid);
+ $logMsg = sprintf "%s", $Test->[3];
+ WriteLog($logMsg);
+ WriteLog("\t$Test->[0]\n");
+ SignSISFile($Test->[0], $Test->[1]);
+ }
+
+opendir(DIR, ".");
+while (defined($file=readdir(DIR)))
+ {
+ $file =~ s/\.sis//;
+ if(-e "$file.sis")
+ {
+ unlink("$file.sis");
+ unlink("$file.log");
+ }
+ rmdir("chain");
+ }
+close(DIR);
+
+
+#
+# Test for DEF093156.
+#
+if ($^O =~ /^MSWIN32$/i)
+ {
+ TestDEF093156();
+ }
+if ($^O =~ /^LINUX$/i)
+ {
+ TestLDEF093156();
+ }
+
+#
+# Test for DEF111563.
+#
+TestDEF111563();
+
+
+#
+# Test for DEF138538 .
+#
+TestDEF138538 ();
+
+
+#
+# Display the result
+#
+WriteLog("\n\nTests completed OK\n");
+WriteLog(sprintf "Run: %d\n", $NumberOfTests );
+WriteLog(sprintf "Passed: %d\n", $NumberOfPassed );
+WriteLog(sprintf "%d tests failed out of %d\n", $NumberOfFailed, $NumberOfTests );