citrun

watch C/C++ source code execute
Log | Files | Refs | LICENSE

wrap_parallel.t (1913B)


      1 #
      2 # Check that calling citrun_inst in parallel doesn't cause any obviously bad
      3 # things to happen.
      4 #
      5 use File::Which;
      6 use Modern::Perl;
      7 use Test::Cmd;
      8 use Test::Differences;
      9 use Test::More;
     10 
     11 plan skip_all => 'make not found' unless (which 'make');
     12 plan tests => 15;
     13 
     14 
     15 my $wrap = Test::Cmd->new( prog => 'bin/citrun_wrap', workdir => '' );
     16 
     17 $wrap->write( 'main1.c', 'int main(void) { return 0; }' );
     18 $wrap->write( 'main2.c', 'int main(void) { return 0; }' );
     19 $wrap->write( 'main3.c', 'int main(void) { return 0; }' );
     20 $wrap->write( 'main4.c', 'int main(void) { return 0; }' );
     21 $wrap->write( 'Makefile', <<'EOF' );
     22 all: program1 program2 program3 program4
     23 
     24 program1: main1.o
     25 	cc -o program1 main1.o
     26 program2: main2.o
     27 	cc -o program2 main2.o
     28 program3: main3.o
     29 	cc -o program3 main3.o
     30 program4: main4.o
     31 	cc -o program4 main4.o
     32 EOF
     33 
     34 $wrap->run( args => 'make -j4', chdir => $wrap->curdir );
     35 print $wrap->stdout;
     36 is( $wrap->stderr,	'',	'citrun_wrap make stderr silent' );
     37 is( $? >> 8,		0,	'citrun_wrap make exit code 0' );
     38 
     39 my $report_good = <<EOF;
     40 Summary:
     41          8 Rewrite tool runs
     42          4 Source files used as input
     43          4 Application link commands
     44          4 Successful modified source compiles
     45 
     46 Totals:
     47          4 Lines of source code
     48          4 Function definitions
     49          4 Return statement values
     50         12 Total statements
     51 EOF
     52 
     53 $wrap->run( prog => 'bin/citrun_report', args => 'citrun.log',
     54 	chdir => $wrap->curdir );
     55 my $report_out = $wrap->stdout;
     56 $report_out =~ s/^.*Milliseconds spent rewriting.*\n//gm;
     57 eq_or_diff( $report_out, $report_good, 'citrun_report stdout identical',
     58 	{ context => 3 } );
     59 
     60 for (1..4) {
     61 	$wrap->run( prog => $wrap->workdir . "/program$_",
     62 		chdir => $wrap->curdir );
     63 	is( $wrap->stdout,	'',	"inst program$_ stdout silent" );
     64 	isnt( $wrap->stderr,	'',	"inst program$_ stderr not silent" );
     65 	is( $? >> 8,		0,	"inst program$_ exit code 0" );
     66 	unlink "/tmp/citrun.out";
     67 }