commit 2b10b7d8747418ed0f97427d047167b4dc0012e6
parent 135187172b1923a490a18c5a0f566d36d3e31054
Author: Kyle Milz <kyle@0x30.net>
Date: Sun, 8 Jan 2017 03:21:36 -0700
t: replace wrap_parallel.sh with perl
Diffstat:
2 files changed, 61 insertions(+), 50 deletions(-)
diff --git a/t/wrap_parallel.sh b/t/wrap_parallel.sh
@@ -1,50 +0,0 @@
-#!/bin/sh -u
-#
-# Test that wrapping the 'make' build system produces instrumented binaries.
-#
-. t/utils.subr
-plan 12
-
-empty_main
-cp main.c main1.c
-cp main.c main2.c
-cp main.c main3.c
-cp main.c main4.c
-
-cat <<EOF > Makefile
-all: program1 program2 program3 program4
-
-program1: main1.o
- cc -o program1 main1.o
-program2: main2.o
- cc -o program2 main2.o
-program3: main3.o
- cc -o program3 main3.o
-program4: main4.o
- cc -o program4 main4.o
-EOF
-
-ok "is instrumented make -j4 successful" make -j4
-ok "is citrun_check successful" citrun_check -o check.out
-
-cat <<EOF > check.good
-Summary:
- 4 Source files used as input
- 4 Application link commands
- 4 Rewrite successes
- 4 Rewritten source compile successes
-
-Totals:
- 24 Lines of source code
- 4 Function definitions
- 4 Return statement values
- 12 Total statements
-EOF
-
-strip_millis check.out
-ok "is citrun_check output identical" diff -u check.good check.out
-
-for i in 1 2 3 4; do
- ok "is program$i execution successful" ./program$i
- ok "is program$i runtime memory file created" test -f procdir/program${i}_*
-done
diff --git a/t/wrap_parallel.t b/t/wrap_parallel.t
@@ -0,0 +1,61 @@
+#
+# Check that calling citrun_inst in parallel doesn't cause any obviously bad
+# things to happen.
+#
+use strict;
+use warnings;
+use File::Which;
+use t::utils;
+plan skip_all => 'make not found' unless (which 'make');
+plan tests => 15;
+
+
+my $wrap = Test::Cmd->new( prog => 'citrun_wrap', workdir => '' );
+
+$wrap->write( 'main1.c', 'int main(void) { return 0; }' );
+$wrap->write( 'main2.c', 'int main(void) { return 0; }' );
+$wrap->write( 'main3.c', 'int main(void) { return 0; }' );
+$wrap->write( 'main4.c', 'int main(void) { return 0; }' );
+$wrap->write( 'Makefile', <<'EOF' );
+all: program1 program2 program3 program4
+
+program1: main1.o
+ cc -o program1 main1.o
+program2: main2.o
+ cc -o program2 main2.o
+program3: main3.o
+ cc -o program3 main3.o
+program4: main4.o
+ cc -o program4 main4.o
+EOF
+
+$wrap->run( args => 'make -j4', chdir => $wrap->curdir );
+print $wrap->stdout;
+is( $wrap->stderr, '', 'is citrun_wrap make stderr silent' );
+is( $? >> 8, 0, 'is citrun_wrap make exit code 0' );
+
+my $check_good = <<EOF;
+Summary:
+ 4 Source files used as input
+ 4 Application link commands
+ 4 Rewrite successes
+ 4 Rewritten source compile successes
+
+Totals:
+ 4 Lines of source code
+ 4 Function definitions
+ 4 Return statement values
+ 12 Total statements
+EOF
+
+$wrap->run( prog => 'citrun_check', chdir => $wrap->curdir );
+my $check_out = $wrap->stdout;
+$check_out =~ s/^.*Milliseconds spent rewriting.*\n//gm;
+eq_or_diff( $check_out, $check_good, 'is citrun_check stdout identical', { context => 3 } );
+
+for (1..4) {
+ $wrap->run( prog => $wrap->workdir . "/program$_", chdir => $wrap->curdir );
+ is( $wrap->stdout, '', "is instrumented program$_ stdout silent" );
+ is( $wrap->stderr, '', "is instrumented program$_ stderr silent" );
+ is( $? >> 8, 0, "is instrumented program$_ exit code 0" );
+}