diff -r 000000000000 -r ba25891c3a9e secureswitools/swisistools/test/tinterpretsisinteg/testcontroller.pm --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/secureswitools/swisistools/test/tinterpretsisinteg/testcontroller.pm Thu Dec 17 08:51:10 2009 +0200 @@ -0,0 +1,284 @@ +# +# 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 "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: +# controls the execution of tests. +# + +package testcontroller; +use strict; +use Cwd; +use POSIX qw(strftime); +use File::Copy; + +my $CURR_WORK_DIR = getcwd(); +my $logFile = 0; +my $C_DRIVE = $CURR_WORK_DIR."\\cdrive"; +my $Z_DRIVE = $CURR_WORK_DIR."\\romdrive"; +my $USIF = 0; +my $testType = 0; + +# constructor for TestController +sub new { + my $proto = shift; + my $class = ref($proto) || $proto; + $logFile = shift; + $testType = shift; + my $self = {}; + $self->{'verbose'} = 0; + $self->{'testlist'} = {}; + my @testorder; + $self->{'testorder'} = \@testorder; + my @failures; + $self->{'failures'} = \@failures; + $self->{'passed'} = 0; + $self->{'run'} = 0; + $self->{'basedir'} = "baseResults"; #default + $self->{'testroutine'} = \&dummyTestRoutine; + $self->{'debug'} = 0; + bless ($self, $class); + return $self; +} + +#routines to setup attributes of the test controller +sub setBaseDir { + my ($self, $dir) = @_; + $self->{'basedir'} = $dir; +} + +sub setOrder { + my ($self, $order) = @_; + $self->{'testorder'} = $order; +} + +sub setTestRoutine { + my ($self, $routine) = @_; + $self->{'testroutine'} = $routine; +} + +sub setVerbose { + my ($self) = @_; + $self->{'verbose'} = 1; +} + +sub isDebug { + my ($self) = @_; + return $self->{'debug'}; +} + +# add test to test list preserving the order that it was added. The tests are +# stored in a hash which loses the order, so separate array is used to preserve +# the order +sub addTest { + my ($self, $testEntry) = @_; + my $testlist = $self->{'testlist'}; + my $order = $self->{'testorder'}; + my $testid = $testEntry->{'id'}; + $testlist->{$testid} = $testEntry; + push @$order, $testid; +} + +sub CopyScrDb() + { + my $epocRoot = $ENV{'EPOCROOT'}; + my $ScrBackup = $epocRoot."epoc32\\winscw\\c\\tswi\\tinterpretsisinteg\\backupscr.db"; + my $ScrDest = $Z_DRIVE."\\sys\\install\\scr\\provisioned\\scr.db"; + copy($ScrBackup, $ScrDest); + } + +sub CreateDir() + { + my $current_dir = getcwd(); + chdir($Z_DRIVE); + mkdir("sys"); + chdir("sys"); + mkdir("install"); + chdir("install"); + mkdir("scr"); + chdir("scr"); + mkdir("provisioned"); + chdir("provisioned"); + chdir $current_dir; + } + +sub InitDbEnv() + { + CreateDir(); + CopyScrDb(); + } + +sub CopyRegFile() + { + my $current_dir = getcwd(); + chdir($Z_DRIVE); + mkdir("system"); + chdir("system"); + mkdir("data"); + + my $securityDir = $ENV{'SECURITYSOURCEDIR'}; + my $regSource = $securityDir."\\installationservices"."\\swi\\inc\\sisregistry_5.3.txt"; + my $regDest = $Z_DRIVE."\\system\\data\\sisregistry_5.3.txt"; + copy($regSource, $regDest); + chmod(0666,$regDest); + + chdir $current_dir; + } + +# main routine to run all the tests. +sub runTests { + my ($self) = shift; + my $order = $self->{'testorder'}; + my $testList = $self->{'testlist'}; + my $now_str = strftime "%a %b %d %Y at %H:%M:%S", localtime; + my $timeStart = "Tests run on $now_str \n"; + WriteLog($timeStart); + + + foreach my $testid (@$order) { + if (exists ($testList->{$testid})) + { + mkdir($C_DRIVE); + mkdir($Z_DRIVE); + if($testType eq "usifnative") + { + CopyRegFile(); + } + elsif($testType eq "usif") + { + InitDbEnv(); + } + $self->{'run'}++; + my $testEntry = $testList->{$testid}; + my $test = "test $testEntry->{'id'}"; + WriteLog($test); + my $line = " - " . $testEntry->{'title'} . " " if $self->{'verbose'}; + WriteLog($line); + WriteLog("... \n"); + my $routine = $self->{'testroutine'}; + my $result = &$routine($testEntry, $self->{'basedir'}, $self->{'failures'}, $logFile ); + if ($result) + { + WriteLog("Passed\n\n"); + $self->{'passed'}++; + } + else + { + WriteLog("Failed($result) !!\n\n"); # test routine should have added reason for failure + } + } + else + { + print "Test id '" . $testid . "' does not exist\n"; + } + } + + # all tests have been run, display summary of results + if ($self->{'run'} > 0) + { + my $failures = 0; + my $numFails = 0; + if ($self->{'passed'} == $self->{'run'}) + { + print "\n------------------------------------------\n"; + print "All Tests Passed (". $self->{'run'} . " tests)\n"; + } + else + { + $failures = $self->{'failures'}; + $numFails = @$failures; + print "\n----------------- ". $numFails . " failures ----------\n"; + print join("\n", @$failures); + print "\n------------------------------------------\n"; + } + my $run = "Run: " . $self->{'run'}."\n"; + my $passed = "Passed: ".$self->{'passed'}."\n"; + my $total = $numFails." tests failed out of ".$self->{'run'}."\n\n"; + WriteLog($run); + WriteLog($passed); + WriteLog($total); + } + else + { + print "No Tests Run\n"; + } + + # Now we should delete the dirs + RemoveDir($C_DRIVE); + RemoveDir($Z_DRIVE); + + $now_str = strftime "%a %b %d %Y at %H:%M:%S", localtime; + print "Finished ", $now_str, "\n"; +} + + +# debug function +sub displayTestList { + my ($self) = shift; + print "Test List\n"; + my $testlist = $self->{'testlist'}; + foreach my $test (values %$testlist) { + print "--- Test -----\n"; + while (my ($key, $value) = each %$test) + { + print "$key->$value\n"; + } + } +} + +sub dummyTestRoutine { + my ($testEntry, $basedir, $failures) = @_; + die "No test routines to run tests have been enabled\n"; +} + +# +#Function to write log into file +# +sub WriteLog { + my ($log) = @_; + my $fh; + + unless( open($fh, ">> $logFile")) { + printf STDERR "Can\'t open $logFile:$!\n"; + return; + } + printf $fh $log; + printf $log; + close $fh; +} + +sub RemoveDir($) +{ + my $dir = $_[0]; + if(! (-e $dir)) + { + return; + } + + opendir(DIRHANDLE, $dir) || die "can't open file $dir"; + my $name; + + 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); +} + +1;