epic-s6ts
[kivitendo-erp.git] / t / 003safesys.t
1 # -*- Mode: perl; indent-tabs-mode: nil -*-
2 #
3 # The contents of this file are subject to the Mozilla Public
4 # License Version 1.1 (the "License"); you may not use this file
5 # except in compliance with the License. You may obtain a copy of
6 # the License at http://www.mozilla.org/MPL/
7 #
8 # Software distributed under the License is distributed on an "AS
9 # IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
10 # implied. See the License for the specific language governing
11 # rights and limitations under the License.
12 #
13 # The Original Code are the Bugzilla Tests.
14 #
15 # The Initial Developer of the Original Code is Zach Lipton
16 # Portions created by Zach Lipton are
17 # Copyright (C) 2001 Zach Lipton.  All
18 # Rights Reserved.
19 #
20 # Contributor(s): Zach Lipton <zach@zachlipton.com>
21
22
23 #################
24 #Bugzilla Test 3#
25 ###Safesystem####
26
27 use strict;
28 use threads;
29
30 use lib 't';
31
32 use Support::Files;
33 use Sys::CPU;
34 use Thread::Pool::Simple;
35
36 use Test::More tests => scalar(@Support::Files::testitems);
37
38 # Capture the TESTOUT from Test::More or Test::Builder for printing errors.
39 # This will handle verbosity for us automatically.
40 my $fh;
41 {
42     local $^W = 0;  # Don't complain about non-existent filehandles
43     if (-e \*Test::More::TESTOUT) {
44         $fh = \*Test::More::TESTOUT;
45     } elsif (-e \*Test::Builder::TESTOUT) {
46         $fh = \*Test::Builder::TESTOUT;
47     } else {
48         $fh = \*STDOUT;
49     }
50 }
51
52 my @testitems = @Support::Files::testitems;
53 my $perlapp = "\"$^X\"";
54
55 sub test_file {
56   my ($file)  = @_;
57   my $command = "$perlapp -c -It -MSupport::Systemexec $file 2>&1";
58   my $loginfo =`$command`;
59
60   if ($loginfo =~ /arguments for Support::Systemexec::(system|exec)/im) {
61     ok(0,"$file DOES NOT use proper system or exec calls");
62     print $fh $loginfo;
63   } else {
64     ok(1,"$file uses proper system and exec calls");
65   }
66 }
67
68 my $pool = Thread::Pool::Simple->new(
69   min    => 2,
70   max    => Sys::CPU::cpu_count() + 1,
71   do     => [ \&test_file ],
72   passid => 0,
73 );
74
75 foreach my $file (@testitems) {
76   $file =~ s/\s.*$//;           # nuke everything after the first space (#comment)
77   $pool->add($file) if $file;   # skip null entries
78 }
79
80 $pool->join;
81
82 exit 0;