secureswitools/swisistools/test/tinterpretsisinteg/testcontroller.pm
changeset 0 ba25891c3a9e
equal deleted inserted replaced
-1:000000000000 0:ba25891c3a9e
       
     1 #
       
     2 # Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies).
       
     3 # All rights reserved.
       
     4 # This component and the accompanying materials are made available
       
     5 # under the terms of the License "Eclipse Public License v1.0"
       
     6 # which accompanies this distribution, and is available
       
     7 # at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     8 #
       
     9 # Initial Contributors:
       
    10 # Nokia Corporation - initial contribution.
       
    11 #
       
    12 # Contributors:
       
    13 #
       
    14 # Description: 
       
    15 # controls the execution of tests.
       
    16 #
       
    17 
       
    18 package testcontroller;
       
    19 use strict;
       
    20 use Cwd;
       
    21 use POSIX qw(strftime);
       
    22 use File::Copy;
       
    23 
       
    24 my $CURR_WORK_DIR = getcwd();
       
    25 my $logFile = 0;
       
    26 my $C_DRIVE = $CURR_WORK_DIR."\\cdrive";
       
    27 my $Z_DRIVE = $CURR_WORK_DIR."\\romdrive";
       
    28 my $USIF = 0;
       
    29 my $testType = 0;
       
    30 
       
    31 # constructor for TestController
       
    32 sub new {
       
    33 	my $proto = shift;
       
    34 	my $class = ref($proto) || $proto;
       
    35     $logFile = shift;
       
    36 	$testType = shift;
       
    37 	my $self  = {};
       
    38     $self->{'verbose'} = 0;
       
    39     $self->{'testlist'} = {};
       
    40     my @testorder;
       
    41     $self->{'testorder'} = \@testorder;
       
    42     my @failures;
       
    43     $self->{'failures'} = \@failures;
       
    44     $self->{'passed'} = 0;
       
    45     $self->{'run'} = 0;
       
    46     $self->{'basedir'} = "baseResults"; #default
       
    47     $self->{'testroutine'} = \&dummyTestRoutine;
       
    48     $self->{'debug'} = 0;
       
    49     bless ($self, $class);
       
    50     return $self;
       
    51 }
       
    52 
       
    53 #routines to setup attributes of the test controller
       
    54 sub setBaseDir {
       
    55     my ($self, $dir) = @_;
       
    56     $self->{'basedir'} = $dir;
       
    57 }
       
    58 
       
    59 sub setOrder {
       
    60     my ($self, $order) = @_;
       
    61     $self->{'testorder'} = $order;
       
    62 }
       
    63 
       
    64 sub setTestRoutine {
       
    65     my ($self, $routine) = @_;
       
    66     $self->{'testroutine'} = $routine;
       
    67 }
       
    68 
       
    69 sub setVerbose {
       
    70     my ($self) = @_;
       
    71     $self->{'verbose'} = 1;
       
    72 }
       
    73 
       
    74 sub isDebug {
       
    75     my ($self) = @_;
       
    76     return $self->{'debug'};
       
    77 }
       
    78 
       
    79 # add test to test list preserving the order that it was added. The tests are
       
    80 # stored in a hash which loses the order, so separate array is used to preserve
       
    81 # the order
       
    82 sub addTest { 
       
    83     my ($self, $testEntry) = @_;
       
    84     my $testlist = $self->{'testlist'};
       
    85     my $order = $self->{'testorder'};
       
    86     my $testid = $testEntry->{'id'};
       
    87     $testlist->{$testid} = $testEntry;
       
    88     push @$order, $testid;
       
    89 }
       
    90 
       
    91 sub CopyScrDb()
       
    92 	{
       
    93 	my $epocRoot = $ENV{'EPOCROOT'};
       
    94 	my $ScrBackup = $epocRoot."epoc32\\winscw\\c\\tswi\\tinterpretsisinteg\\backupscr.db";
       
    95 	my $ScrDest = $Z_DRIVE."\\sys\\install\\scr\\provisioned\\scr.db";
       
    96 	copy($ScrBackup, $ScrDest);
       
    97 	}
       
    98 
       
    99 sub CreateDir()
       
   100 	{
       
   101 	my $current_dir = getcwd();
       
   102 	chdir($Z_DRIVE);
       
   103 	mkdir("sys");
       
   104 	chdir("sys");
       
   105 	mkdir("install");
       
   106 	chdir("install");
       
   107 	mkdir("scr");
       
   108 	chdir("scr");	
       
   109 	mkdir("provisioned");
       
   110 	chdir("provisioned");	
       
   111 	chdir $current_dir;
       
   112 	}
       
   113 
       
   114 sub InitDbEnv()
       
   115 	{
       
   116 	CreateDir();
       
   117 	CopyScrDb();
       
   118 	}
       
   119 
       
   120 sub CopyRegFile()
       
   121 	{
       
   122 	my $current_dir = getcwd();
       
   123 	chdir($Z_DRIVE);
       
   124 	mkdir("system");
       
   125 	chdir("system");
       
   126 	mkdir("data");
       
   127 
       
   128 	my $securityDir = $ENV{'SECURITYSOURCEDIR'};
       
   129 	my $regSource = $securityDir."\\installationservices"."\\swi\\inc\\sisregistry_5.3.txt";
       
   130 	my $regDest = $Z_DRIVE."\\system\\data\\sisregistry_5.3.txt";
       
   131 	copy($regSource, $regDest);
       
   132 	chmod(0666,$regDest);
       
   133 
       
   134 	chdir $current_dir;
       
   135 	}
       
   136 
       
   137 # main routine to run all the tests.
       
   138 sub runTests {
       
   139     my ($self) = shift;
       
   140     my $order = $self->{'testorder'};
       
   141     my $testList = $self->{'testlist'};
       
   142     my $now_str = strftime "%a %b %d %Y at %H:%M:%S", localtime;
       
   143     my $timeStart = "Tests run on $now_str \n";
       
   144     WriteLog($timeStart);
       
   145     	
       
   146 		
       
   147     foreach my $testid (@$order) {
       
   148 	if (exists ($testList->{$testid}))
       
   149 	{
       
   150 		mkdir($C_DRIVE);
       
   151 		mkdir($Z_DRIVE);
       
   152 		if($testType eq "usifnative")
       
   153 			{
       
   154 			CopyRegFile();
       
   155 			}
       
   156 		elsif($testType eq "usif")
       
   157 			{
       
   158 			InitDbEnv();
       
   159 			}
       
   160 		$self->{'run'}++;
       
   161 	    my $testEntry = $testList->{$testid};
       
   162 	    my $test = "test $testEntry->{'id'}";
       
   163 	    WriteLog($test);
       
   164 	    my $line = " - " . $testEntry->{'title'} . " " if $self->{'verbose'};
       
   165 	    WriteLog($line);
       
   166 	    WriteLog("... \n");
       
   167 	    my $routine = $self->{'testroutine'};
       
   168 	    my $result = &$routine($testEntry, $self->{'basedir'}, $self->{'failures'}, $logFile );
       
   169 	    if ($result)
       
   170 	    {
       
   171 		WriteLog("Passed\n\n");
       
   172 		$self->{'passed'}++;
       
   173 	    }
       
   174 	    else
       
   175 	    {
       
   176 		WriteLog("Failed($result) !!\n\n"); # test routine should have added reason for failure
       
   177 	    }
       
   178 	}
       
   179 	else
       
   180 	{
       
   181 	    print "Test id '" . $testid . "' does not exist\n";
       
   182 	}
       
   183     }
       
   184 
       
   185     # all tests have been run, display summary of results
       
   186     if ($self->{'run'} > 0)
       
   187     {
       
   188 	my $failures = 0;
       
   189 	my $numFails = 0;
       
   190 	if ($self->{'passed'} == $self->{'run'})
       
   191 	{
       
   192 	    print "\n------------------------------------------\n";
       
   193 	    print "All Tests Passed (". $self->{'run'} . " tests)\n";
       
   194 	}
       
   195 	else 
       
   196 	{
       
   197 	    $failures = $self->{'failures'};
       
   198 	    $numFails = @$failures;
       
   199 	    print "\n----------------- ". $numFails . " failures ----------\n";
       
   200 	    print join("\n", @$failures);
       
   201 	    print "\n------------------------------------------\n";
       
   202 	}
       
   203 	my $run = "Run: " . $self->{'run'}."\n";
       
   204 	my $passed = "Passed: ".$self->{'passed'}."\n";
       
   205 	my $total = $numFails." tests failed out of ".$self->{'run'}."\n\n";
       
   206 	WriteLog($run);
       
   207 	WriteLog($passed);
       
   208 	WriteLog($total);
       
   209     }
       
   210     else
       
   211     {
       
   212 	print "No Tests Run\n";
       
   213     }
       
   214     
       
   215     # Now we should delete the dirs
       
   216     RemoveDir($C_DRIVE);
       
   217     RemoveDir($Z_DRIVE);
       
   218     
       
   219     $now_str = strftime "%a %b %d %Y at %H:%M:%S", localtime;
       
   220     print "Finished ", $now_str, "\n";
       
   221 }
       
   222 
       
   223 
       
   224 # debug function
       
   225 sub displayTestList {
       
   226     my ($self) = shift;
       
   227     print "Test List\n";
       
   228     my $testlist = $self->{'testlist'};
       
   229     foreach my $test (values %$testlist) {
       
   230 	print "--- Test -----\n";
       
   231 	while (my ($key, $value) = each %$test)
       
   232 	{
       
   233 	    print "$key->$value\n";
       
   234 	}
       
   235     }
       
   236 }
       
   237 
       
   238 sub dummyTestRoutine {
       
   239     my ($testEntry, $basedir, $failures) = @_;
       
   240     die "No test routines to run tests have been enabled\n";
       
   241 }
       
   242 
       
   243 #
       
   244 #Function to write log into file
       
   245 #
       
   246 sub WriteLog {
       
   247 	my ($log) = @_;
       
   248 	my $fh;
       
   249 
       
   250 	unless( open($fh, ">> $logFile")) {
       
   251 		printf STDERR "Can\'t open $logFile:$!\n";
       
   252 		return;
       
   253 	}
       
   254 	printf $fh $log;
       
   255 	printf $log;
       
   256 	close $fh;
       
   257 }
       
   258 
       
   259 sub RemoveDir($)
       
   260 {
       
   261 	my $dir = $_[0];
       
   262 	if(! (-e $dir))
       
   263 	{
       
   264 		return;
       
   265 		}
       
   266 
       
   267 	opendir(DIRHANDLE, $dir) || die "can't open file $dir";
       
   268 	my $name;
       
   269 	
       
   270 	foreach $name (sort readdir(DIRHANDLE)) {
       
   271 		if ($name ne "." && $name ne "..") {
       
   272 			if (-d "$dir/$name") {
       
   273 				&RemoveDir("$dir/$name");
       
   274 				rmdir("$dir/$name");
       
   275 			} else {
       
   276 				unlink("$dir/$name");
       
   277 			}
       
   278 		}
       
   279 	}
       
   280 	closedir(DIRHANDLE);
       
   281 	rmdir($dir);
       
   282 }
       
   283 
       
   284 1;