ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/COMP/SCRAM/src/BuildSystem/test/test_Build.pm
Revision: 1.8
Committed: Fri Sep 29 10:32:18 2000 UTC (24 years, 7 months ago) by williamc
Content type: text/plain
Branch: MAIN
Changes since 1.7: +6 -4 lines
Log Message:
Bugfixes

File Contents

# User Rev Content
1 williamc 1.1 #
2 williamc 1.2 # Build.pm test suite
3 williamc 1.1 #
4    
5     package BuildSystem::test::test_Build;
6     require 5.001;
7     use BuildSystem::Build;
8     use Configuration::ConfigArea;
9    
10     @ISA=qw(Utilities::TestClass); #methods both from the test class
11    
12     sub init {
13     my $self=shift;
14     $self->{testfile}=$self->datadir()."/BuildFileDoc";
15    
16     # -- make a release area
17 williamc 1.2 require BuildSystem::test::TestBuildArea;
18     $self->{tba}=BuildSystem::test::TestBuildArea->new($self->temparea(),
19     $self->datadir());
20     $self->{testarea}=$self->{tba}->releasearea();
21 williamc 1.1
22     # -- make a dummy developer area
23 williamc 1.2 ($self->{testdevarea}, $self->{devconfigarea})=
24     $self->{tba}->developerarea($self->temparea());
25    
26    
27     $self->{twigstore}=$self->{testarea}->location()."/twigs";
28     $self->{devtwigstore}=$self->{testdevarea}->location()."/twigs";
29 williamc 1.7 AddDir::adddir($self->{testdevarea}->location()."/".$self->{tba}->twigdir());
30 williamc 1.2 print "Initialisation Complete\n";
31 williamc 1.1
32     }
33    
34     sub test {
35     my $self=shift;
36     $self->newtest("Initiation test - Release Area");
37     $self->newobject($self->{testarea});
38     $self->testinterface("verbosity",1);
39    
40     # -- perform all basic build operations
41 williamc 1.3 $self->_basicbuildoperations($self->{testarea}->location());
42 williamc 1.1
43     # -- specific release behaviour tests
44    
45     $self->newtest("Initiation test - Development Area");
46     $self->newobject($self->{testdevarea});
47     $self->testinterface("verbosity",1);
48    
49 williamc 1.7 # -- no changes to release area
50     my $twigdir=$self->{testdevarea}->location()."/".
51     $self->{tba}->twigdir();
52     my $twig="src/sub/twig";
53     my $twig1=$self->{devtwigstore}."/firsttwigdir.twig1";
54     my $sub="src/sub";
55     my $t1sr1=$twigdir."/a.twig1src";
56     my $t1sr2=$twigdir."/d.twig1src";
57     my $t1sr3=$twigdir."/e.twig1src";
58    
59     $self->newtest("No Source code locally");
60     my $report=$self->testinterface("build",$twig);
61     $self->_buildOKtest($report);
62    
63     # -- local area overrides
64     $self->newtest("Add new src files to satellite area");
65     my $newsrc=$self->datadir()."/testsrcs/devsrc/src";
66     AddDir::copydir($newsrc,$self->{testdevarea}->location()."/src");
67     $report=$self->testinterface("build",$twig,"echo_twig1src");
68     $self->_buildOKtest($report);
69     my $report=$self->testinterface("build",$twig);
70     $self->_buildOKtest($report);
71 williamc 1.8 sleep(2);
72 williamc 1.7 if ( ! $self->_twigupdated($twig1) ) {
73     $self->testfail("Failed to update twig1");
74     }
75     else {
76     $self->testpass("twig was updated");
77     $self->_testcontents($twig1,$t1sr1,$t1sr2,$t1sr3);
78     $self->_analysetwigdates($twig1,[($t1sr1,"update")],
79     [($t1sr2,"update")], [($t1sr3,"update")]);
80     }
81 williamc 1.1
82     $self->newtest("Change local configuration");
83     $self->testfail("not implemented");
84    
85 williamc 1.7 $newsrc=$self->datadir()."/testsrcs/src";
86     AddDir::copydir($newsrc,$self->{testdevarea}->location()."/src");
87     unlink $t1sr2;
88     unlink $t1sr3;
89     $self->_basicbuildoperations($self->{testdevarea}->location());
90 williamc 1.1 }
91    
92     # -- support routines
93    
94     sub _basicbuildoperations {
95     my $self=shift;
96     my $topdir=shift;
97     my $report;
98    
99     # -- build from invalid directory
100 williamc 1.7 $self->{twigs}={};
101     $self->{twigfiles}={};
102 williamc 1.3 my $twigdir=$topdir."/".$self->{tba}->twigdir();
103 williamc 1.1 $self->newtest("build from invalid directory");
104     $report=$self->testinterface("build",$self->{configurationareadir});
105 williamc 1.7 $self->testswitch(!$report->status(),
106     "Build Returned Fail as expected", "Build Returned OK");
107 williamc 1.1
108     # -- default build from twig in src tree
109 williamc 1.2 $self->newtest("echo internal variables");
110     my $twig="src/sub/twig";
111 williamc 1.7 my $sub="src/sub";
112 williamc 1.2 $report=$self->testinterface("build",$twig,"echo_Class");
113     $self->_buildOKtest($report);
114     $report=$self->testinterface("build",$twig,"echo_twigname");
115     $self->_buildOKtest($report);
116     $report=$self->testinterface("build",$twig,"echo_twig1src");
117     $self->_buildOKtest($report);
118    
119 williamc 1.1 $self->newtest("default build from twig - configuration setup");
120     $report=$self->testinterface("build",$twig);
121     $self->_buildOKtest($report);
122 williamc 1.7 my $twig1=$topdir."/twigs/firsttwigdir.twig1";
123     my $twig2=$topdir."/twigs/firsttwigdir.twig2";
124 williamc 1.3 my $t1sr1=$twigdir."/a.twig1src";
125     my $t1sr2=$twigdir."/b.twig1src";
126     my $t1sr3=$twigdir."/c.twig1src";
127 williamc 1.7 sleep(1);
128 williamc 1.2 if ( ! $self->_twigupdated($twig1) ) {
129     $self->testfail("Failed to update twig1");
130 williamc 1.1 }
131     else {
132 williamc 1.3 $self->testpass("twig was updated");
133 williamc 1.4 $self->_testcontents($twig1,$t1sr1,$t1sr2,$t1sr3);
134     $self->_analysetwigdates($twig1,[($t1sr1,"update")],
135 williamc 1.8 [($t1sr2,"update")], [($t1sr3,"update")]);
136 williamc 1.2 }
137 williamc 1.4 my $t2sr1=$twigdir."/a.twig2src";
138 williamc 1.2 if ( ! $self->_twigupdated($twig2) ) {
139     $self->testfail("Failed to update twig2");
140 williamc 1.1 }
141     else {
142 williamc 1.4 $self->testpass("twig was updated");
143 williamc 1.2 $self->_testcontents($twig2,$t2sr1);
144 williamc 1.3 $self->_analysetwigdates($twig2,[$t2sr1,"update"]);
145 williamc 1.1 }
146 williamc 1.4
147     # -- rerun - no build should take place
148 williamc 1.8 sleep(1);
149     #if ( $self->{xxx}==1 ) { exit; } else { $self->{xxx}=1;}
150 williamc 1.4 $self->newtest("default build from twig - rerun");
151 williamc 1.8 $report=$self->testinterface("build",$twig);
152 williamc 1.4 $self->_buildOKtest($report);
153     if ( $self->_twigupdated($twig1) ) {
154     $self->testfail("Failed - update to twig1 has happened");
155     }
156     $self->_analysetwigdates($twig1,[($t1sr1,"no update")],
157 williamc 1.8 [($t1sr2,"no update")], [($t1sr3,"no update")]);
158 williamc 1.4
159     # -- date change on src files
160     $self->newtest("date change on src files");
161 williamc 1.5 my ($atime,$mtime)=(stat($t1sr1))[8,9];
162     $mtime--;
163     utime($atime,$mtime, $t1sr1);
164    
165 williamc 1.4 $report=$self->testinterface("build",$twig);
166     $self->_buildOKtest($report);
167     if ( ! $self->_twigupdated($twig1) ) {
168     $self->testfail("Failed - no update to twig1 has happened");
169     }
170     $self->_testcontents($twig1,$t1sr1,$t1sr2,$t1sr3);
171     $self->_analysetwigdates($twig1,[($t1sr1,"update")],
172     [($t1sr2,"no update")], [($t1sr3,"no update")]);
173 williamc 1.7 if ( $self->_twigupdated($twig2) ) {
174     $self->testfail("Failed - update to twig2 has happened");
175     }
176 williamc 1.1
177     # -- remove some source files
178     $self->newtest("partial src file removal");
179 williamc 1.7 my $tempfile=$self->temparea()."/".$self->newfilename();
180     rename($t1sr3,$tempfile);
181     $report=$self->testinterface("build",$twig);
182     $self->_buildOKtest($report);
183     if ( ! $self->_twigupdated($twig1) ) {
184     $self->testfail("Failed - no update to twig1 has happened");
185     }
186     $self->_testcontents($twig1,$t1sr1,$t1sr2);
187     $self->_analysetwigdates($twig1,[($t1sr1,"no update")],
188     [($t1sr2,"no update")]);
189     if ( $self->_twigupdated($twig2) ) {
190     $self->testfail("Failed - update to twig2 has happened");
191     }
192 williamc 1.1
193 williamc 1.7 # -- add some source files
194     $self->newtest("add a new src file");
195     rename($tempfile,$t1sr3);
196     delete $self->{twigfiles}{$t1sr3};
197     $self->{twigs}{$t1sr3}="";
198     $report=$self->testinterface("build",$twig);
199     $self->_buildOKtest($report);
200     if ( ! $self->_twigupdated($twig1) ) {
201     $self->testfail("Failed - no update to twig1 has happened");
202     }
203     $self->_testcontents($twig1,$t1sr1,$t1sr2,$t1sr3);
204     $self->_analysetwigdates($twig1,[($t1sr1,"no update")],
205     [($t1sr2,"no update")], [($t1sr3,"update")]);
206 williamc 1.1
207     # -- build from sub - recursive
208 williamc 1.7 $self->newtest("build from sublevel - check recursion mechanism");
209     ($atime,$mtime)=(stat($t1sr1))[8,9];
210     $mtime++;
211     utime($atime,$mtime, $t1sr1);
212     sleep(1);
213     $report=$self->testinterface("build",$sub);
214     $self->_buildOKtest($report);
215     if ( ! $self->_twigupdated($twig1) ) {
216     $self->testfail("Failed - no update to twig1 has happened");
217     }
218 williamc 1.2
219 williamc 1.7 # -- directory associated with no class
220 williamc 1.2 $self->newtest("default build from unassigned class below twig");
221 williamc 1.7 ($atime,$mtime)=(stat($t1sr1))[8,9];
222     $mtime++;
223     utime($atime,$mtime, $t1sr1);
224     sleep(1);
225     $report=$self->testinterface("build",$twig."/noclass");
226     $self->_buildOKtest($report);
227     if ( ! $self->_twigupdated($twig1) ) {
228     $self->testfail("Failed - no update to twig1 has happened");
229     }
230 williamc 1.1 }
231    
232     sub _buildOKtest {
233     my $self=shift;
234     my $report=shift;
235    
236     my @errors=$report->error();
237 williamc 1.2 $self->testswitch($report->status(),"Build Returned OK",
238 williamc 1.1 "Build Returned Fail (@errors)");
239     }
240    
241     sub _twigupdated {
242     my $self=shift;
243     my $name=shift;
244    
245 williamc 1.7 sleep(1); # let the build finnish!
246 williamc 1.2 my $twigfile=$name;
247 williamc 1.1 my $updated=0;
248 williamc 1.2 if ( ! -f $twigfile ) {
249 williamc 1.1 $self->testfail("$twigfile not created - test failed");
250     }
251     else {
252     # -- get twig datestamp
253 williamc 1.6 my $twigdatestamp=(stat($twigfile))[9];
254 williamc 1.1 if ( defined $self->{twigs}{$name} ) {
255     if ($self->{twigs}{$name} ne $twigdatestamp ) {
256     $updated=1;
257     }
258 williamc 1.7 print "Dates :- ".$self->{twigs}{$name}." ".$twigdatestamp."\n";
259 williamc 1.1 }
260     else {
261     # twig must be new
262     $updated=1;
263     }
264     $self->{twigs}{$name}=$twigdatestamp;
265     }
266 williamc 1.2 return $updated;
267 williamc 1.1 }
268    
269     #
270     # expects an array of array pairs
271     # ((file,"update"),(file,"no-update")
272 williamc 1.2 sub _analysetwigdates {
273 williamc 1.1 my $self=shift;
274 williamc 1.4 my $twigfile=shift;
275 williamc 1.1
276     my $twig=BuildSystem::test::twigmaker->new($twigfile);
277    
278     # -- check input dates
279     foreach $file ( @_ ) {
280     # -- do we want it updated
281 williamc 1.4 if ( $$file[1]=~/^update/i ) {
282     if ( ( defined $self->{twigfiles}{$$file[0]} ) &&
283     ( $twig->filedate($$file[0]) eq $self->{twigfiles}{$$file[0]} )) {
284 williamc 1.7 $self->testfail($$file[0]." not updated ".
285     "(".$twig->filedate($$file[0]).
286     " ".$self->{twigfiles}{$$file[0]}.") - test failed");
287 williamc 1.4 }
288     else {
289     $self->testpass("updated version of $$file[0] as expected");
290 williamc 1.1 }
291 williamc 1.4 $self->{twigfiles}{$$file[0]}=$twig->filedate($file[0]);
292 williamc 1.1 }
293     else {
294 williamc 1.4 if ( ( ! defined $self->{twigfiles}{$$file[0]} ) ||
295     ( $twig->filedate($$file[0]) ne $self->{twigfiles}{$$file[0]} )) {
296     $self->testfail($$file[0]." updated - test failed ".
297     "(was ".$twig->filedate($$file[0])." now "
298     .$self->{twigfiles}{$$file[0]}.")" );
299 williamc 1.1 }
300 williamc 1.4 else {
301     $self->testpass("Same version of $$file[0] as before as expected");
302     }
303 williamc 1.1 }
304 williamc 1.4 $self->{twigfiles}{$$file[0]}=$twig->filedate($$file[0]);
305 williamc 1.1 }
306     }
307    
308 williamc 1.2 sub _testcontents {
309     my $self=shift;
310     my $twig=shift;
311    
312 williamc 1.4 my @expect=@_;
313 williamc 1.2 use BuildSystem::test::twigmaker;
314     my $twigobject=BuildSystem::test::twigmaker->new($twig);
315     print "Checking contents of $twig\n";
316     my @objs=$twigobject->contents();
317 williamc 1.4 $self->cmparray(\@objs,@expect);
318 williamc 1.2 }
319 williamc 1.1 # === dummy routines