|
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; |