From 2b5c38dc2befd6d88babc03617604d95d042a9f7 Mon Sep 17 00:00:00 2001 From: Michael Rash Date: Tue, 23 Jun 2015 16:56:25 -0700 Subject: [PATCH] [test suite] default to not zeroing profile coverage counters The typical work flow when generating gcov coverage results is: - compile fwknop with coverage support - run the test suite - hack on fwknop - re-run the test suite to see what coverage has been added This work flow is much more common than collecting coverage results for a complete test suite run. Therefore, this commit switches the default behavior in --enable-complete mode (which enables coverage support) to not zero-out coverage counters. A new argument --enable-profile-coverage-init zeros the counters in preparation for a global coverage run. --- Makefile.am | 1 - test/rm-coverage-files.sh | 12 ---------- test/test-fwknop.pl | 48 +++++++++++++++------------------------ 3 files changed, 18 insertions(+), 43 deletions(-) delete mode 100755 test/rm-coverage-files.sh diff --git a/Makefile.am b/Makefile.am index 26b49f0e..2a7a494c 100644 --- a/Makefile.am +++ b/Makefile.am @@ -448,7 +448,6 @@ EXTRA_DIST = \ test/run-test-suite.sh \ test/valgrind_suppressions \ test/configure_max_coverage.sh \ - test/rm-coverage-files.sh \ test/gen-coverage-report.sh \ test/init-lcov.sh \ test/lcov.env \ diff --git a/test/rm-coverage-files.sh b/test/rm-coverage-files.sh deleted file mode 100755 index 9bb474dc..00000000 --- a/test/rm-coverage-files.sh +++ /dev/null @@ -1,12 +0,0 @@ -#!/bin/sh -x - -cd .. -for d in client server lib -do - for s in *.gcda *.gcno *.gcov - do - find $d -name $s | xargs rm -f - done -done -cd test -exit diff --git a/test/test-fwknop.pl b/test/test-fwknop.pl index 9b6a9867..09f6aff5 100755 --- a/test/test-fwknop.pl +++ b/test/test-fwknop.pl @@ -184,6 +184,7 @@ my $anonymize_results = 0; my $orig_config_args = ''; my $curr_test_file = 'init'; my $init_file = $curr_test_file; +my $config_log = '../config.log'; my $tarfile = 'test_fwknop.tar.gz'; our $key_gen_file = "$output_dir/key_gen"; our $verbose_str = "--verbose --verbose"; @@ -237,10 +238,9 @@ my $fko_obj = (); my $enable_recompilation_warnings_check = 0; my $enable_configure_args_checks = 0; my $enable_profile_coverage_check = 0; -my $disable_profile_coverage_init = 0; -my $profile_rm_prev_sh = 'rm-coverage-files.sh'; -my $profile_gen_report_sh = 'gen-coverage-report.sh'; -my $profile_init_sh = 'init-lcov.sh'; +my $enable_profile_coverage_init = 0; +my $profile_gen_report_sh = './gen-coverage-report.sh'; +my $profile_init_sh = './init-lcov.sh'; my $enable_make_distcheck = 0; my $enable_perl_module_checks = 0; my $enable_perl_module_fuzzing_spa_pkt_generation = 0; @@ -337,7 +337,7 @@ exit 1 unless GetOptions( 'enable-configure-args-checks' => \$enable_configure_args_checks, 'enable-profile-coverage-check' => \$enable_profile_coverage_check, 'enable-cores-pattern' => \$enable_cores_pattern_mode, - 'disable-profile-coverage-init' => \$disable_profile_coverage_init, + 'enable-profile-coverage-init' => \$enable_profile_coverage_init, 'enable-ip-resolve' => \$enable_client_ip_resolve_test, 'enable-distcheck' => \$enable_make_distcheck, 'enable-dist-check' => \$enable_make_distcheck, ### synonym @@ -1459,7 +1459,7 @@ sub profile_coverage() { return 0; } - &run_cmd("./$profile_gen_report_sh", $cmd_out_tmp, $curr_test_file); + &run_cmd($profile_gen_report_sh, $cmd_out_tmp, $curr_test_file); if (-d $lcov_results_dir) { move $lcov_results_dir, "$output_dir/$lcov_results_dir"; @@ -1739,14 +1739,6 @@ sub config_recompile() { my $rv = 1; - if ($enable_profile_coverage_check) { - chdir 'test' or die $!; - ### we're recompiling, so remove any existing profile coverage - ### files since they will be invalidated by the recompile - &run_cmd("./$profile_rm_prev_sh", $cmd_out_tmp, $curr_test_file); - chdir '..' or die $!; - } - &run_cmd('make clean', $cmd_out_tmp, "test/$curr_test_file"); if ($config_cmd) { @@ -6731,9 +6723,8 @@ sub init() { ### cache the configure args that were used before running the ### test suite - my $config_log_file = '../config.log'; - if (-e $config_log_file) { - open F, "< $config_log_file" or die $!; + if (-e $config_log) { + open F, "< $config_log" or die $!; while () { ### $ ./configure --prefix=/usr --sysconfdir=/etc ... if (m/^\s+[\$#]\s+(\.\/configure.*)/) { @@ -6898,23 +6889,21 @@ sub init() { ### see if we're compiled with ASAN support unless (&file_find_regex([qr/enable\-asan\-support/], - $MATCH_ALL, $APPEND_RESULTS, '../config.log')) { + $MATCH_ALL, $NO_APPEND_RESULTS, $config_log)) { + &write_test_file("[-] Can't find --enable-asan-support in $config_log\n", + $curr_test_file); push @tests_to_exclude, qr/ASAN/; } if ($gcov_path) { if ($enable_profile_coverage_check and not $list_mode) { - unless ($disable_profile_coverage_init) { - print "[+] Recompiling fwknop and removing any previous coverage files...\n"; - ### if we recompile then remove the .gcno files (which are - ### generated at compile time) - &compile_warnings(); - if (&file_find_regex([qr/profile\-arcs.*test\-coverage/], - $MATCH_ALL, $APPEND_RESULTS, $curr_test_file)) { - print "[+] Found -fprofile-args -ftest-coverage\n"; + if ($enable_profile_coverage_init) { + if (&file_find_regex([qr/\-enable\-profile\-coverage/], + $MATCH_ALL, $NO_APPEND_RESULTS, $config_log)) { + print "[+] Found --enable-profile-coverage\n"; } else { - print "[-] Warning: -fprofile-args -ftest-coverage not ", + print "[-] Warning: --enable-profile-coverage not ", "found, use ./configure --enable-profile-coverage?\n"; } &run_cmd($profile_init_sh, $cmd_out_tmp, $curr_test_file); @@ -6926,7 +6915,7 @@ sub init() { } ### unless we are in client only mode, see if the target firewall - ### is PF - FreeBSD can be either ipfw or PF for example + ### is PF (since FreeBSD can be either ipfw or PF for example) if (-e $fwknopdCmd) { my $fw = ''; my $cmd = "$fwknopdCmd -c $cf{'def'} -a $cf{'def_access'} -D"; @@ -7700,8 +7689,7 @@ sub usage() { --enable-profile-coverage - Generate profile coverage stats with an emphasis on finding functions that the test suite does not call. - --disable-profile-coverage-init - Do not remove old .gcno, .gcda, and - .gcov files or recompile fwknop. + --enable-profile-coverage-init - Reset .gcov coverage counters to zero. --enable-recompile - Recompile fwknop sources and look for compilation warnings. --enable-configure-args-checks - Run the autoconf configure script with