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