1#!/bin/sh
2#
3#       aegis - project change supervisor
4#       Copyright (C) 2003-2008, 2012 Peter Miller
5#       Copyright (C) 2008 Walter Franzini
6#
7#       This program is free software; you can redistribute it and/or modify
8#       it under the terms of the GNU General Public License as published by
9#       the Free Software Foundation; either version 3 of the License, or
10#       (at your option) any later version.
11#
12#       This program is distributed in the hope that it will be useful,
13#       but WITHOUT ANY WARRANTY; without even the implied warranty of
14#       MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15#       GNU General Public License for more details.
16#
17#       You should have received a copy of the GNU General Public License
18#       along with this program. If not, see
19#       <http://www.gnu.org/licenses/>.
20#
21
22check_it()
23{
24        sed     -e "s|$work|...|g" \
25                -e 's|= [0-9][0-9]*; /.*|= TIME;|' \
26                -e "s/\"$USER\"/\"USER\"/g" \
27                -e 's/19[0-9][0-9]/YYYY/' \
28                -e 's/20[0-9][0-9]/YYYY/' \
29                -e 's/node = ".*"/node = "NODE"/' \
30                -e 's/crypto = ".*"/crypto = "GUNK"/' \
31                -e 's/uuid = ".*"/uuid = "UUID"/' \
32                < $2 > $work/sed.out
33        if test $? -ne 0; then no_result; fi
34        diff -b $1 $work/sed.out
35        if test $? -ne 0; then fail; fi
36}
37
38unset AEGIS_PROJECT
39unset AEGIS_CHANGE
40unset AEGIS_PATH
41unset AEGIS
42umask 022
43
44LINES=24
45export LINES
46COLS=80
47export COLS
48
49USER=${USER:-${LOGNAME:-`whoami`}}
50
51work=${AEGIS_TMP:-/tmp}/$$
52PAGER=cat
53export PAGER
54AEGIS_FLAGS="delete_file_preference = no_keep; \
55        lock_wait_preference = always; \
56        diff_preference = automatic_merge; \
57        pager_preference = never; \
58        persevere_preference = all; \
59        log_file_preference = never;"
60export AEGIS_FLAGS
61AEGIS_THROTTLE=-1
62export AEGIS_THROTTLE
63
64here=`pwd`
65if test $? -ne 0 ; then exit 2; fi
66
67bin=$here/${1-.}/bin
68
69if test "$EXEC_SEARCH_PATH" != ""
70then
71    tpath=
72    hold="$IFS"
73    IFS=":$IFS"
74    for tpath2 in $EXEC_SEARCH_PATH
75    do
76        tpath=${tpath}${tpath2}/${1-.}/bin:
77    done
78    IFS="$hold"
79    PATH=${tpath}${PATH}
80else
81    PATH=${bin}:${PATH}
82fi
83export PATH
84
85pass()
86{
87        set +x
88        echo PASSED 1>&2
89        cd $here
90        find $work -type d -user $USER -exec chmod u+w {} \;
91        rm -rf $work
92        exit 0
93}
94fail()
95{
96        set +x
97        echo "FAILED test of the aet -reg functionality ($activity)" 1>&2
98        cd $here
99        find $work -type d -user $USER -exec chmod u+w {} \;
100        rm -rf $work
101        exit 1
102}
103no_result()
104{
105        set +x
106        echo "NO RESULT when testing the aet -reg functionality" \
107                "($activity)" 1>&2
108        cd $here
109        find $work -type d -user $USER -exec chmod u+w {} \;
110        rm -rf $work
111        exit 2
112}
113trap \"no_result\" 1 2 3 15
114
115activity="create test directory 101"
116mkdir $work $work/lib
117if test $? -ne 0 ; then no_result; fi
118chmod 777 $work/lib
119if test $? -ne 0 ; then no_result; fi
120cd $work
121if test $? -ne 0 ; then no_result; fi
122
123#
124# use the built-in error messages
125#
126AEGIS_MESSAGE_LIBRARY=$work/no-such-dir
127export AEGIS_MESSAGE_LIBRARY
128unset LANG
129unset LANGUAGE
130
131#
132# test the aet -reg functionality
133#
134
135#
136# This shell reproduces a bug in aegis 4.11, whereby a file which has been
137# removed and then reinstated causes test_main() to not be able to "locate"
138# files in the baseline, that are alphabetically later than the
139# removed/reinstated file.
140#
141# Someone wanting to run this script should check theProject and
142# theLib names specified below, as well as the projectDir/libDir variables
143# to ensure that they are OK for their system.
144#
145# This script will write a couple of temporary files to the user's home
146# directory (they are deleted at the end).
147#
148# Basically, what this script does is:
149# 1. Create a project with a 1.0 branch.
150# 2. Create a changeset that adds a aegis.conf file.  Develop and integrate.
151# 3. Create a changeset that adds a test and a hosttest source file.  D & I.
152# 4. Roll in the 1.0 branch.
153# 5. Create a 1.1 branch.
154# 6. Create a changeset that deletes the hosttest.  D & I.
155# 7. Create a changeset that "aenf's" the same hosttest.  Develop, but
156#    integration "aet -reg" does not work (cannot find the test).
157#
158# I've found that if the hosttest is created, removed and reinstated all
159# within the same branch, this bug does not happen (the branch rollin
160# described above is required).
161#
162# This shell script is a bit verbose -- I could have put more effort into
163# putting duplicated code into functions.  Oh well.
164#
165
166# Set up some variables for use below
167theProject=foo
168projectDir=$work/$theProject
169libDir=$work/lib
170chanDir=$work/chan-dev-dir
171
172AEGIS_PATH=$AEGIS_PATH:$libDir
173export AEGIS_PATH
174
175activity="create project 161"
176# Write the project attributes file
177cat > projAttributes << 'EOF'
178description="Test project";
179developer_may_review = true;
180developer_may_integrate = true;
181reviewer_may_integrate = true;
182developers_may_create_changes = true;
183umask = 022;
184default_test_exemption = false;
185minimum_change_number = 10;
186reuse_change_numbers = true;
187minimum_branch_number = 1;
188skip_unlucky = false;
189compress_database = false;
190develop_end_action = goto_awaiting_integration;
191protect_development_directory = false;
192EOF
193if test $? -ne 0 ; then no_result; fi
194
195# Create the project
196$bin/aegis -npr $theProject -dir $projectDir -LIB $libDir -file projAttributes \
197        -v > LOG 2>&1
198if test $? -ne 0 ; then cat LOG; no_result; fi
199
200AEGIS_PROJECT=$theProject.1.0
201export AEGIS_PROJECT
202
203# Add staff
204activity="add staff 190"
205$bin/aegis -nd $USER -v > LOG 2>&1
206if test $? -ne 0 ; then cat LOG; no_result; fi
207
208$bin/aegis -nrv $USER -v > LOG 2>&1
209if test $? -ne 0 ; then cat LOG; no_result; fi
210
211$bin/aegis -ni $USER -v -p $theProject.1.0 > LOG 2>&1
212if test $? -ne 0 ; then cat LOG; no_result; fi
213
214$bin/aegis -ni $USER -v -p $theProject.1 > LOG 2>&1
215if test $? -ne 0 ; then cat LOG; no_result; fi
216
217###### Create the first change  -- adds aegis.conf file ######
218
219# Attributes common to all changesets
220cat > commonChangeAttributes << 'EOF'
221cause = internal_bug;
222test_exempt = true;
223test_baseline_exempt = true;
224regression_test_exempt = true;
225EOF
226if test $? -ne 0 ; then no_result; fi
227
228activity="new change 214"
229cat > changeAttributes << 'EOF'
230description = "Change 1 - create aegis.conf";
231brief_description = "Change 1 - create aegis.conf";
232EOF
233if test $? -ne 0 ; then no_result; fi
234
235# Add the common attibutes
236cat commonChangeAttributes >> changeAttributes
237if test $? -ne 0 ; then no_result; fi
238
239$bin/aegis -nc 10 -file changeAttributes -p $theProject.1.0 -v > LOG 2>&1
240if test $? -ne 0 ; then cat LOG; no_result; fi
241
242activity="develop begin 228"
243$bin/aegis -db 10 -v -dir $chanDir > LOG 2>&1
244if test $? -ne 0 ; then cat LOG; no_result; fi
245
246# Add the aegis.conf file
247activity="new file 233"
248$bin/aegis -nf $chanDir/aegis.conf -v -c 10 > LOG 2>&1
249if test $? -ne 0 ; then cat LOG; no_result; fi
250
251cat > $chanDir/aegis.conf << 'EOF'
252build_command = "exit 0";
253link_integration_directory = true;
254
255history_get_command = "aesvt -check-out -edit ${quote $edit} "
256    "-history ${quote $history} -f ${quote $output}";
257history_put_command = "aesvt -check-in -history ${quote $history} "
258    "-f ${quote $input}";
259history_query_command = "aesvt -query -history ${quote $history}";
260history_content_limitation = binary_capable;
261
262diff_command =
263    "set +e; "
264    "diff ${quote $original} ${quote $input} > ${quote $output}; "
265    "test $? -le 1";
266merge_command =
267        "fmerge $original $MostRecent $input -o $output -c /dev/null";
268posix_filename_charset = true;
269maximum_filename_length = 255;
270change_file_command = "rm -f etc/cook/change.[0-9]* etc/cook/project.[0-9]*";
271project_file_command = "rm -f etc/cook/project.[0-9]*";
272integrate_begin_command = "rm -f etc/cook/project.[0-9]* \
273etc/version.h etc/statistics/*.stats";
274develop_begin_command = "ln -s $bl bl; ln -s bl/.indent.pro .indent.pro";
275test_command = "$shell $filename";
276new_test_filename = "test/${zpad $hundred 2}/t${zpad $number 4}.sh";
277EOF
278if test $? -ne 0 ; then no_result; fi
279
280# build
281activity="build 266"
282$bin/aegis -build -c 10 -v > LOG 2>&1
283if test $? -ne 0 ; then cat LOG; no_result; fi
284
285# diff
286activity="diff 271"
287$bin/aegis -diff -c 10 -v > LOG 2>&1
288if test $? -ne 0 ; then cat LOG; no_result; fi
289
290# develop end
291activity="develop end 276"
292$bin/aegis -de -c 10 -v > LOG 2>&1
293if test $? -ne 0 ; then cat LOG; no_result; fi
294
295# integrate
296activity="integrate begin 281"
297$bin/aegis -ib -c 10 -v > LOG 2>&1
298if test $? -ne 0 ; then cat LOG; no_result; fi
299
300activity="integrate build 285"
301$bin/aegis -build -c 10 -v > LOG 2>&1
302if test $? -ne 0 ; then cat LOG; no_result; fi
303
304activity="integrate diff 289"
305$bin/aegis -diff -c 10 -v > LOG 2>&1
306if test $? -ne 0 ; then cat LOG; no_result; fi
307
308activity="integrate pass 293"
309$bin/aegis -ipass -c 10 -v > LOG 2>&1
310if test $? -ne 0 ; then cat LOG; no_result; fi
311
312
313###### Create the second change -- add a test and a hosttest source file ######
314
315activity="new change 300"
316cat > changeAttributes << 'EOF'
317description = "Change 2 - add test and hosttest source";
318brief_description = "Change 2";
319EOF
320if test $? -ne 0 ; then no_result; fi
321
322# Add the common attributes
323cat commonChangeAttributes >> changeAttributes
324if test $? -ne 0 ; then no_result; fi
325
326$bin/aegis -nc 11 -file changeAttributes -p $theProject.1.0 -v > LOG 2>&1
327if test $? -ne 0 ; then cat LOG; no_result; fi
328
329activity="develop begin 314"
330$bin/aegis -db 11 -v -dir $chanDir > LOG 2>&1
331if test $? -ne 0 ; then cat LOG; no_result; fi
332
333activity="new test 318"
334$bin/aegis -nt $chanDir/test/00/t0001a.sh -v > LOG 2>&1
335if test $? -ne 0 ; then cat LOG; no_result; fi
336
337cat > $chanDir/test/00/t0001a.sh << 'EOF'
338#!/bin/sh
339exit 0
340EOF
341if test $? -ne 0 ; then no_result; fi
342
343activity="new file 328"
344$bin/aegis -nf $chanDir/hosttest/0001/main.cc -v > LOG 2>&1
345if test $? -ne 0 ; then cat LOG; no_result; fi
346
347cat > $chanDir/hosttest/0001/main.cc << EOF
348Does not matter what is in here.
349EOF
350if test $? -ne 0 ; then no_result; fi
351
352# turn off "test -bl"
353activity="change attributes 338"
354$bin/aegis -ca -file changeAttributes -c 11 > LOG 2>&1
355if test $? -ne 0 ; then cat LOG; no_result; fi
356
357# build
358activity="build 345"
359$bin/aegis -build -c 11 -v > LOG 2>&1
360if test $? -ne 0 ; then cat LOG; no_result; fi
361
362# diff
363activity="diff 350"
364$bin/aegis -diff -c 11 -v > LOG 2>&1
365if test $? -ne 0 ; then cat LOG; no_result; fi
366
367# test
368activity="test 355"
369$bin/aegis -test -c 11 -v > LOG 2>&1
370if test $? -ne 0 ; then cat LOG; no_result; fi
371
372# develop end
373activity="develop end 360"
374$bin/aegis -de -c 11 -v > LOG 2>&1
375if test $? -ne 0 ; then cat LOG; no_result; fi
376
377# integrate
378activity="integrate begin 365"
379$bin/aegis -ib -c 11 -v > LOG 2>&1
380if test $? -ne 0 ; then cat LOG; no_result; fi
381
382activity="integrate build 369"
383$bin/aegis -build -c 11 -v > LOG 2>&1
384if test $? -ne 0 ; then cat LOG; no_result; fi
385
386activity="integrate diff 373"
387$bin/aegis -diff -c 11 -v > LOG 2>&1
388if test $? -ne 0 ; then cat LOG; no_result; fi
389
390activity="integrate test 377"
391$bin/aegis -test -c 11 -v > LOG 2>&1
392if test $? -ne 0 ; then cat LOG; no_result; fi
393
394activity="integrate pass 381"
395$bin/aegis -ipass -c 11 -v > LOG 2>&1
396if test $? -ne 0 ; then cat LOG; no_result; fi
397
398# Roll in the branch
399activity="branch develop end 386"
400$bin/aegis -de -c 0 -p $theProject.1 -v > LOG 2>&1
401if test $? -ne 0 ; then cat LOG; no_result; fi
402
403activity="branch integrate begin 390"
404$bin/aegis -ib -c 0 -p $theProject.1 -v > LOG 2>&1
405if test $? -ne 0 ; then cat LOG; no_result; fi
406
407activity="branch integrate build 394"
408$bin/aegis -build -c 0 -p $theProject.1 -v > LOG 2>&1
409if test $? -ne 0 ; then cat LOG; no_result; fi
410
411activity="branch integrate diff 398"
412$bin/aegis -diff -c 0 -p $theProject.1 -v > LOG 2>&1
413if test $? -ne 0 ; then cat LOG; no_result; fi
414
415activity="branch integrate pass 402"
416$bin/aegis -ipass -c 0 -p $theProject.1 -v > LOG 2>&1
417if test $? -ne 0 ; then cat LOG; no_result; fi
418
419
420###### Create a new branch ######
421
422activity="new branch 409"
423$bin/aegis -nbr 1 -p $theProject.1 -v > LOG 2>&1
424if test $? -ne 0 ; then cat LOG; no_result; fi
425
426activity="branch staff 413"
427$bin/aegis -nd $USER -p $theProject.1.1 -v > LOG 2>&1
428if test $? -ne 0 ; then cat LOG; no_result; fi
429
430AEGIS_PROJECT=$theProject.1.1
431export AEGIS_PROJECT
432
433###### Create a new change -- removes the hosttest ######
434
435activity="new change 422"
436cat > changeAttributes << 'EOF'
437description = "Change 1 -- removes the hosttest";
438brief_description = "Change 1";
439EOF
440if test $? -ne 0 ; then no_result; fi
441
442# Add the common attributes
443sed 's/regression_test_exempt = true/regression_test_exempt = false/' \
444        commonChangeAttributes >> changeAttributes
445if test $? -ne 0 ; then no_result; fi
446
447$bin/aegis -nc 10 -file changeAttributes -p $theProject.1.1 -v > LOG 2>&1
448if test $? -ne 0 ; then cat LOG; no_result; fi
449
450activity="develop begin 437"
451$bin/aegis -db 10 -v -dir $chanDir > LOG 2>&1
452if test $? -ne 0 ; then cat LOG; no_result; fi
453
454activity="remove file 441"
455$bin/aegis -rm $chanDir/hosttest/0001/main.cc > LOG 2>&1
456if test $? -ne 0 ; then cat LOG; no_result; fi
457
458# build
459activity="build 448"
460$bin/aegis -build -c 10 -v > LOG 2>&1
461if test $? -ne 0 ; then cat LOG; no_result; fi
462
463# diff
464activity="diff 453"
465$bin/aegis -diff -c 10 -v > LOG 2>&1
466if test $? -ne 0 ; then cat LOG; no_result; fi
467
468# test -reg
469activity="test -reg 458"
470$bin/aegis -test -reg -c 10 -v > LOG 2>&1
471if test $? -ne 0 ; then cat LOG; no_result; fi
472
473# develop end
474activity="develop end 463"
475$bin/aegis -de -c 10 -v > LOG 2>&1
476if test $? -ne 0 ; then cat LOG; no_result; fi
477
478# integrate
479activity="integrate begin 468"
480$bin/aegis -ib -c 10 -v > LOG 2>&1
481if test $? -ne 0 ; then cat LOG; no_result; fi
482
483activity="integrate build 472"
484$bin/aegis -build -c 10 -v > LOG 2>&1
485if test $? -ne 0 ; then cat LOG; no_result; fi
486
487activity="integrate diff 476"
488$bin/aegis -diff -c 10 -v > LOG 2>&1
489if test $? -ne 0 ; then cat LOG; no_result; fi
490
491activity="integrate test reg 480"
492$bin/aegis -test -reg -c 10 -v > LOG 2>&1
493if test $? -ne 0 ; then cat LOG; no_result; fi
494
495activity="integrate pass 484"
496$bin/aegis -ipass -c 10 -v > LOG 2>&1
497if test $? -ne 0 ; then cat LOG; no_result; fi
498
499###### Create a new change -- reinstates the removed hosttest file ######
500
501activity="new change 490"
502cat > changeAttributes << EOF
503description = "Change 2 - reinstates the removed hosttest";
504brief_description = "Change 2";
505EOF
506if test $? -ne 0 ; then no_result; fi
507
508# Add the common attributes
509sed 's/regression_test_exempt = true/regression_test_exempt = false/' \
510        commonChangeAttributes >> changeAttributes
511if test $? -ne 0 ; then no_result; fi
512
513$bin/aegis -nc 11 -file changeAttributes -p $theProject.1.1 -v > LOG 2>&1
514if test $? -ne 0 ; then cat LOG; no_result; fi
515
516activity="develop begin 505"
517$bin/aegis -db 11 -v -dir $chanDir > LOG 2>&1
518if test $? -ne 0 ; then cat LOG; no_result; fi
519
520activity="new file 509"
521$bin/aegis -nf $chanDir/hosttest/0001/main.cc -c 11 -v > LOG 2>&1
522if test $? -ne 0 ; then cat LOG; no_result; fi
523
524# Write to the hosttest
525cat > $chanDir/hosttest/0001/main.cc << EOF
526Reinstated hosttest
527EOF
528if test $? -ne 0 ; then no_result; fi
529
530# build
531activity="build 522"
532$bin/aegis -build -c 11 -v > LOG 2>&1
533if test $? -ne 0 ; then cat LOG; no_result; fi
534
535# diff
536activity="diff 527"
537$bin/aegis -diff -c 11 -v > LOG 2>&1
538if test $? -ne 0 ; then cat LOG; no_result; fi
539
540# test -reg
541activity="test reg 532"
542$bin/aegis -test -reg -c 11 -v > LOG 2>&1
543if test $? -ne 0 ; then cat LOG; no_result; fi
544
545action="check project file state"
546cat > ok << 'EOF'
547src =
548[
549        {
550                file_name = "aegis.conf";
551                uuid = "UUID";
552                action = create;
553                edit =
554                {
555                        revision = "2";
556                        encoding = none;
557                        uuid = "UUID";
558                };
559                edit_origin =
560                {
561                        revision = "2";
562                        encoding = none;
563                        uuid = "UUID";
564                };
565                usage = config;
566                file_fp =
567                {
568                        youngest = TIME;
569                        oldest = TIME;
570                        crypto = "GUNK";
571                };
572                diff_file_fp =
573                {
574                        youngest = TIME;
575                        oldest = TIME;
576                        crypto = "GUNK";
577                };
578        },
579        {
580                file_name = "hosttest/0001/main.cc";
581                uuid = "UUID";
582                action = create;
583                edit =
584                {
585                        revision = "2";
586                        encoding = none;
587                        uuid = "UUID";
588                };
589                edit_origin =
590                {
591                        revision = "2";
592                        encoding = none;
593                        uuid = "UUID";
594                };
595                usage = source;
596                file_fp =
597                {
598                        youngest = TIME;
599                        oldest = TIME;
600                        crypto = "GUNK";
601                };
602                diff_file_fp =
603                {
604                        youngest = TIME;
605                        oldest = TIME;
606                        crypto = "GUNK";
607                };
608                test =
609                [
610                        "test/00/t0001a.sh",
611                ];
612        },
613        {
614                file_name = "test/00/t0001a.sh";
615                uuid = "UUID";
616                action = create;
617                edit =
618                {
619                        revision = "2";
620                        encoding = none;
621                        uuid = "UUID";
622                };
623                edit_origin =
624                {
625                        revision = "2";
626                        encoding = none;
627                        uuid = "UUID";
628                };
629                usage = test;
630                file_fp =
631                {
632                        youngest = TIME;
633                        oldest = TIME;
634                        crypto = "GUNK";
635                };
636                diff_file_fp =
637                {
638                        youngest = TIME;
639                        oldest = TIME;
640                        crypto = "GUNK";
641                };
642        },
643];
644EOF
645if test $? -ne 0 ; then no_result; fi
646
647check_it ok $projectDir/info/change/0/001.fs
648
649cat > ok << 'EOF'
650src =
651[
652        {
653                file_name = "hosttest/0001/main.cc";
654                uuid = "UUID";
655                action = remove;
656                edit =
657                {
658                        revision = "2";
659                        encoding = none;
660                        uuid = "UUID";
661                };
662                edit_origin =
663                {
664                        revision = "2";
665                        encoding = none;
666                        uuid = "UUID";
667                };
668                usage = source;
669                diff_file_fp =
670                {
671                        youngest = TIME;
672                        oldest = TIME;
673                        crypto = "GUNK";
674                };
675                deleted_by = 10;
676                test =
677                [
678                        "test/00/t0001a.sh",
679                ];
680        },
681];
682EOF
683check_it ok $projectDir/info/change/0/001.branch/0/001.fs
684
685# develop end
686activity="develop end 669"
687$bin/aegis -de -c 11 -v > LOG 2>&1
688if test $? -ne 0 ; then cat LOG; no_result; fi
689
690action="check project file state"
691cat > ok << 'EOF'
692src =
693[
694        {
695                file_name = "hosttest/0001/main.cc";
696                uuid = "UUID";
697                action = remove;
698                edit =
699                {
700                        revision = "2";
701                        encoding = none;
702                        uuid = "UUID";
703                };
704                edit_origin =
705                {
706                        revision = "2";
707                        encoding = none;
708                        uuid = "UUID";
709                };
710                usage = source;
711                diff_file_fp =
712                {
713                        youngest = TIME;
714                        oldest = TIME;
715                        crypto = "GUNK";
716                };
717                locked_by = 11;
718                deleted_by = 10;
719                test =
720                [
721                        "test/00/t0001a.sh",
722                ];
723        },
724];
725EOF
726if test $? -ne 0 ; then no_result; fi
727
728check_it ok $projectDir/info/change/0/001.branch/0/001.fs
729
730# integrate
731activity="integrate begin 712"
732$bin/aegis -ib -c 11 -v > LOG 2>&1
733if test $? -ne 0 ; then cat LOG; no_result; fi
734
735activity="integrate build 716"
736$bin/aegis -build -c 11 -v > LOG 2>&1
737if test $? -ne 0 ; then cat LOG; no_result; fi
738
739activity="integrate diff 720"
740$bin/aegis -diff -c 11 -v > LOG 2>&1
741if test $? -ne 0 ; then cat LOG; no_result; fi
742
743#### The test -reg command will fail, if the bug is present. ####
744
745activity="integrate test reg 726"
746$bin/aegis -test -reg -c 11 -v \
747        --trace aet change file nth find list_get \
748        > LOG 2>&1
749if test $? -ne 0 ; then cat LOG; fail; fi
750
751#
752# Only definite negatives are possible.
753# The functionality exercised by this test appears to work,
754# no other guarantees are made.
755#
756pass
757
758
759# vim: set ts=8 sw=4 et :
760