xref: /aoo4110/main/solenv/bin/exectest.pl (revision b1cdbd2c)
1*b1cdbd2cSJim Jagielski#**************************************************************
2*b1cdbd2cSJim Jagielski#
3*b1cdbd2cSJim Jagielski#  Licensed to the Apache Software Foundation (ASF) under one
4*b1cdbd2cSJim Jagielski#  or more contributor license agreements.  See the NOTICE file
5*b1cdbd2cSJim Jagielski#  distributed with this work for additional information
6*b1cdbd2cSJim Jagielski#  regarding copyright ownership.  The ASF licenses this file
7*b1cdbd2cSJim Jagielski#  to you under the Apache License, Version 2.0 (the
8*b1cdbd2cSJim Jagielski#  "License"); you may not use this file except in compliance
9*b1cdbd2cSJim Jagielski#  with the License.  You may obtain a copy of the License at
10*b1cdbd2cSJim Jagielski#
11*b1cdbd2cSJim Jagielski#    http://www.apache.org/licenses/LICENSE-2.0
12*b1cdbd2cSJim Jagielski#
13*b1cdbd2cSJim Jagielski#  Unless required by applicable law or agreed to in writing,
14*b1cdbd2cSJim Jagielski#  software distributed under the License is distributed on an
15*b1cdbd2cSJim Jagielski#  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*b1cdbd2cSJim Jagielski#  KIND, either express or implied.  See the License for the
17*b1cdbd2cSJim Jagielski#  specific language governing permissions and limitations
18*b1cdbd2cSJim Jagielski#  under the License.
19*b1cdbd2cSJim Jagielski#
20*b1cdbd2cSJim Jagielski#**************************************************************
21*b1cdbd2cSJim Jagielski
22*b1cdbd2cSJim Jagielski
23*b1cdbd2cSJim Jagielski
24*b1cdbd2cSJim Jagielski$#ARGV >= 1
25*b1cdbd2cSJim Jagielski    or die "Usage: $0 <input file>|-SUCCESS|-FAILURE <command> <arguments...>";
26*b1cdbd2cSJim Jagielskiif ($ARGV[0] eq "-SUCCESS")
27*b1cdbd2cSJim Jagielski{
28*b1cdbd2cSJim Jagielski    $expect = "SUCCESS";
29*b1cdbd2cSJim Jagielski    $input = 0;
30*b1cdbd2cSJim Jagielski}
31*b1cdbd2cSJim Jagielskielsif ($ARGV[0] eq "-FAILURE")
32*b1cdbd2cSJim Jagielski{
33*b1cdbd2cSJim Jagielski    $expect = "FAILURE";
34*b1cdbd2cSJim Jagielski    $input = 0;
35*b1cdbd2cSJim Jagielski}
36*b1cdbd2cSJim Jagielskielse
37*b1cdbd2cSJim Jagielski{
38*b1cdbd2cSJim Jagielski    open INPUT, $ARGV[0] or die "cannot open $ARGV[0]: $!";
39*b1cdbd2cSJim Jagielski    $input = 1;
40*b1cdbd2cSJim Jagielski}
41*b1cdbd2cSJim Jagielskishift @ARGV;
42*b1cdbd2cSJim Jagielski$failed = 0;
43*b1cdbd2cSJim Jagielski$open = 0;
44*b1cdbd2cSJim Jagielskiwhile (1) {
45*b1cdbd2cSJim Jagielski    $eof = $input ? eof INPUT : $open;
46*b1cdbd2cSJim Jagielski    $in = <INPUT> if $input && !$eof;
47*b1cdbd2cSJim Jagielski    if (!$input || $eof
48*b1cdbd2cSJim Jagielski		|| $in =~ /^EXPECT (SUCCESS|FAILURE|\d+)( "([^"]*)")?:\n$/)
49*b1cdbd2cSJim Jagielski    {
50*b1cdbd2cSJim Jagielski        if ($open)
51*b1cdbd2cSJim Jagielski        {
52*b1cdbd2cSJim Jagielski            close PIPE;
53*b1cdbd2cSJim Jagielski            if ($? % 256 == 0)
54*b1cdbd2cSJim Jagielski            {
55*b1cdbd2cSJim Jagielski                $exit = $? / 256;
56*b1cdbd2cSJim Jagielski                $ok = $expect eq "SUCCESS" ? $exit == 0
57*b1cdbd2cSJim Jagielski                    : $expect eq "FAILURE" ? $exit != 0 : $exit == $expect;
58*b1cdbd2cSJim Jagielski            }
59*b1cdbd2cSJim Jagielski            else
60*b1cdbd2cSJim Jagielski            {
61*b1cdbd2cSJim Jagielski                $exit = "signal";
62*b1cdbd2cSJim Jagielski                $ok = 0;
63*b1cdbd2cSJim Jagielski            }
64*b1cdbd2cSJim Jagielski            print "\"$title\", " if defined $title;
65*b1cdbd2cSJim Jagielski            print "expected $expect, got $exit ($?): ";
66*b1cdbd2cSJim Jagielski            if ($ok)
67*b1cdbd2cSJim Jagielski            {
68*b1cdbd2cSJim Jagielski                print "ok\n";
69*b1cdbd2cSJim Jagielski            }
70*b1cdbd2cSJim Jagielski            else
71*b1cdbd2cSJim Jagielski            {
72*b1cdbd2cSJim Jagielski                print "FAILED!\n";
73*b1cdbd2cSJim Jagielski                $failed = 1;
74*b1cdbd2cSJim Jagielski            }
75*b1cdbd2cSJim Jagielski        }
76*b1cdbd2cSJim Jagielski        last if $eof;
77*b1cdbd2cSJim Jagielski        $expect = $1 if $input;
78*b1cdbd2cSJim Jagielski        if (defined $3)
79*b1cdbd2cSJim Jagielski        {
80*b1cdbd2cSJim Jagielski            $title = $3;
81*b1cdbd2cSJim Jagielski        }
82*b1cdbd2cSJim Jagielski        else
83*b1cdbd2cSJim Jagielski        {
84*b1cdbd2cSJim Jagielski            undef $title;
85*b1cdbd2cSJim Jagielski        }
86*b1cdbd2cSJim Jagielski        open PIPE, "| @ARGV" or die "cannot start process: $!";
87*b1cdbd2cSJim Jagielski        $open = 1;
88*b1cdbd2cSJim Jagielski    }
89*b1cdbd2cSJim Jagielski    elsif ($open && $input)
90*b1cdbd2cSJim Jagielski    {
91*b1cdbd2cSJim Jagielski        print PIPE $in or die "cannot write to pipe: $!";
92*b1cdbd2cSJim Jagielski    }
93*b1cdbd2cSJim Jagielski}
94*b1cdbd2cSJim Jagielskiexit $failed;
95