[test suite] added --gdb-test mode
authorMichael Rash <mbr@cipherdyne.org>
Mon, 5 Aug 2013 01:46:38 +0000 (21:46 -0400)
committerMichael Rash <mbr@cipherdyne.org>
Mon, 5 Aug 2013 01:46:38 +0000 (21:46 -0400)
This commit allows the test suite to execute the same fwknop/fwknopd command
used in a specified test output file under gdb.  This is a convenience
measure to allow the user to more rapidly execute fwknop/fwknopd commands
under gdb in the same way the test suite does without having to copy and paste
command line args.

Here is a basic example:

root@lorien:/home/mbr/git/fwknop.git/test# ./test-fwknop.pl --gdb output/6.test
GNU gdb
Copyright (C) 2012 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "i686-linux-gnu".
For bug reporting instructions, please see:
<http://bugs.launchpad.net/gdb-linaro/>...
Reading symbols from /home/mbr/git/fwknop.git/server/.libs/fwknopd...done.
(gdb) run
Starting program: /home/mbr/git/fwknop.git/server/.libs/fwknopd -c conf/invalid_ipt_input_chain_6_fwknopd.conf -a conf/default_access.conf -d run/digest.cache -p run/fwknopd.pid -i lo --foreground --verbose --verbose

test/test-fwknop.pl

index 6b13219..6dabad7 100755 (executable)
@@ -253,6 +253,7 @@ my $curr_test_file = 'init';
 my $init_file = $curr_test_file;
 my $tarfile = 'test_fwknop.tar.gz';
 our $key_gen_file = "$output_dir/key_gen";
+my $gdb_test_file = '';
 my $fuzzing_pkts_file = 'fuzzing/fuzzing_spa_packets';
 my $fuzzing_pkts_append = 0;
 my $fuzzing_key = 'testtest';
@@ -360,6 +361,7 @@ exit 1 unless GetOptions(
     'enable-distcheck'  => \$enable_make_distcheck,
     'enable-dist-check' => \$enable_make_distcheck,  ### synonym
     'enable-openssl-checks' => \$enable_openssl_compatibility_tests,
+    'gdb-test=s'        => \$gdb_test_file,
     'List-mode'         => \$list_mode,
     'test-limit=i'      => \$test_limit,
     'enable-valgrind'   => \$enable_valgrind,
@@ -400,6 +402,9 @@ exit &anonymize_results() if $anonymize_results;
 
 exit &diff_test_results() if $diff_mode;
 
+### run an fwknop command under gdb from a previous test run
+exit &gdb_test_cmd() if $gdb_test_file;
+
 &identify_loopback_intf();
 
 ### make sure everything looks as expected before continuing
@@ -803,6 +808,30 @@ sub process_include_exclude() {
     return 1;
 }
 
+sub gdb_test_cmd() {
+
+    die "[*] previous test file: $gdb_test_file does not exist."
+        unless -e $gdb_test_file;
+
+    my $gdb_cmd = '';
+
+    open F, "< $gdb_test_file" or die "[*] Could not open $gdb_test_file: $!";
+    while (<F>) {
+        if (/CMD\:\sLD_LIBRARY_PATH=(\S+).*\s($fwknopCmd\s.*)/
+                or /CMD\:\sLD_LIBRARY_PATH=(\S+).*\s($fwknopdCmd\s.*)/) {
+            $gdb_cmd = "LD_LIBRARY_PATH=$1 gdb --args $2";
+        }
+    }
+    close F;
+
+    if ($gdb_cmd) {
+        system $gdb_cmd;
+    } else {
+        die "[*] Could not extract fwknop/fwknopd command from $gdb_test_file";
+    }
+    return 1;
+}
+
 sub diff_test_results() {
 
     $diff_dir1 = "${output_dir}.last" unless $diff_dir1;
@@ -6002,6 +6031,9 @@ sub usage() {
                                      default, except that --enable-valgrind
                                      must also be set if valgrind mode is
                                      desired.
+    --gdb-test <test file>         - Run the same command a previous test suite
+                                     execution through gdb by specifying the
+                                     output/ test file.
     --fuzzing-pkts-file <file>     - Specify path to fuzzing packet file.
     --fuzzing-pkts-append          - When generating new fuzzing packets,
                                      append them to the fuzzing packets file.