Changeset 2523 in /cluster/svnroot


Ignore:
Timestamp:
Jul 14, 2010 8:26:55 AM (10 years ago)
Author:
leemasa
Message:

Added mail capabilities - now a list of the mismatches with expected behavior is mailed out. (to me right now for debugging purposes)

Location:
bccd-ng/branches/leemasa-devel/trees/home/bccd/tests
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • bccd-ng/branches/leemasa-devel/trees/home/bccd/tests/bccd_test_suite.pl

    r2505 r2523  
    66use File::Path;
    77use Getopt::Long;
     8use MIME::Lite;
    89
    910use bccd_test_suite;
     11use ezmail;
     12
     13#Constants
     14my $TRUE = 1;
     15my $FALSE = 0;
     16my $DEFAULSE = -1;
     17my $SEPARATOR_STRING = "|";
     18my $DEFAULT_TEST_DIR = "test";
     19my $DEFAULT_CONTROL_DIR = "control";
     20my $DEFAULT_MAILTO = '<sleemanmunk@gmail.com>';
    1021
    1122#Global Arguments and Defaults
    12 my $tempdir = "tmp";
    13 my $testdir = "test";
    14 my $controldir = "control";
     23my $diffdir = "tmp";
     24my $testdir = $DEFAULT_TEST_DIR;
     25my $controldir = $DEFAULT_CONTROL_DIR;
    1526my $listfile = "test_lists/std";
    16 my $buildcontrol = 0;
     27my $buildcontrol = $FALSE;
     28my $verbose = $DEFAULSE;
     29my $mail = $TRUE;
     30my $mailto = $DEFAULT_MAILTO;
    1731
    1832GetOptions(
    1933        'control|c' => \$buildcontrol,
    20         'controldir=s' => \$controldir,
    21         'testdir|d=s' => \$testdir,
    22         'file|f=s' => \$listfile,
     34        'controldir|cdir|cd=s' => \$controldir,
     35        'testdir|d=s' => \$testdir,
     36        'file|f=s' => \$listfile,
     37        'mail!' => \$mail,
     38        'verbose!' => \$verbose,
     39        'mailto|t=s' => \$mailto,
    2340        );
     41
     42#By default, verbose turns on when mail is turned off
     43#unless --noverbose is specified
     44if ((not $mail) and ($verbose == $DEFAULSE)){
     45        $verbose = $TRUE;
     46}
     47if ($verbose == $DEFAULSE){
     48        $verbose = $FALSE;
     49}
    2450
    2551#get test list
    2652my @testlist;
    2753if (-r $listfile){
    28         @testlist = bccd_test_suite::read_list($listfile);     
     54    @testlist = bccd_test_suite::read_list($listfile); 
    2955} else {
    30         die "Could not read the list file.";
     56    die "Could not read the list file.";
    3157}
    3258
     59#Set up to build control directory
    3360if ($buildcontrol){
    34         print "Using control directory: $controldir\n";
    35         $testdir = $controldir;
     61    print "Using control directory: $controldir\n";
     62    $testdir = $controldir;
    3663}
    3764
    3865#initialize test result directory
    3966if (-e $testdir){
    40   rmtree($testdir) or die "Could not clear existing test directory for replacement: $!";
    41   }
     67    rmtree($testdir) or die "Could not clear existing test directory for replacement: $!";
     68}
    4269mkdir($testdir) or die "Could not make test directory: $!";
    4370
    44 #Run tests
     71#Run tests and store results
    4572foreach my $test (@testlist){
    46         if ($test ne "|"){
    47                 print "$test\n";
    48                 $bccd_test_suite::tests{$test}->($testdir,$test);
     73    if ($test ne $SEPARATOR_STRING){
     74        print "$test\n";
     75        $bccd_test_suite::tests{$test}->($testdir,$test);
     76    }
     77}
     78
     79#Compare tests to controls
     80if ( not $buildcontrol ){ #Test comparison is unnecessary when building control
     81    if (-e $diffdir){
     82                rmtree $diffdir or die "Could not delete existing temporary directory: $!";
     83    }
     84
     85    mkdir($diffdir);
     86
     87#Prepare a report of the mismatches
     88    my $report;
     89        my $details="Details:\n";
     90
     91    for (my $i = 0; $testlist[$i] ne $SEPARATOR_STRING and $i < @testlist; ++$i){
     92                my $test = $testlist[$i];
     93                system ("diff $testdir/$test.dat $controldir/$test.dat > $diffdir/$test.diff"); #examine differences, output to file.
     94                my @diff_lines_raw #count lines in differences files.
     95                        = split(/ /,`wc -l $diffdir/$test.diff`);
     96         
     97                #take first value from wc -l, the number
     98                my $diff_lines = $diff_lines_raw[0];
     99               
     100                if ($diff_lines > 0){
     101                        my $added_lines = `grep \"^>\" $diffdir/$test.diff`;
     102                        my $missing_lines = `grep \"^<\" $diffdir/$test.diff`;
     103                        my @lines_added = split(/\n/,$added_lines);
     104                        my $lines_added = @lines_added;
     105                        my @lines_missing = split(/\n/,$missing_lines);
     106                        my $lines_missing = @lines_missing;
     107                        $report .= "$test had $lines_added lines added, $lines_missing missing";
     108                        $details .="Testname: $test\n" . $added_lines  . "\n";
     109                }else{
     110                        unlink "$testdir/$test.dat";
     111                }
     112        }
     113        my $date = Mail::Sendmail::time_to_date( time() );
     114        if ($verbose){
     115                if ($report){
     116                        print "$date:\n$report\n\n$details";
     117                }else{
     118                        print "$date:\nNo mismatches";
     119                }
     120        }
     121
     122#Prepare mail
     123        if ($mail){
     124                my $type;
     125                my $attachment;
     126                my $subject;
     127                my $text;
     128
     129                if ($report){ #If there is an error report, mail it
     130
     131                        system("tar -czf test_results.tgz $controldir $testdir $diffdir");
     132
     133                        $type = 'multipart/mixed';
     134                        $attachment = 'test_results.tgz';
     135                        $subject = 'BCCD Test Mismatch';
     136                        $text = "On $date, the following tests did not match expected values:\n$report\n$details";
     137
     138                } else {
     139                        $type = 'TEXT';
     140                        $attachment = '';
     141                        $subject = 'BCCD Test Success';
     142                        $text = "On $date, the BCCD test returned no errors.";
     143                }
     144
     145                my %mail = ("From"    , '<tests@bccd.net>',
     146                                "To"      , '<sleemanmunk@gmail.com>',
     147                                "Subject" , $subject,
     148                                "Type"    , $type,
     149                                );
     150
     151                unless ($report) {
     152                        $mail{'Data'} = $text;
     153                }
     154
     155                my $msg = MIME::Lite->new( %mail );
     156
     157                if ($report){
     158                        $msg->attach(
     159                                        Type     => 'TEXT',
     160                                        Data     => $text,
     161                                        );
     162                        $msg->attach(
     163                                        Type     => 'binary',
     164                                        Path     => $attachment,
     165                                        Filename => $attachment,
     166                                        Disposition => 'attachment'
     167                                        );
     168                }
     169
     170### use Net:SMTP to do the sending
     171                $msg->send('smtp');
     172        unlink 'test_results.tgz';
    49173        }
    50174}
    51 
    52 #Check tests
    53 if ( $buildcontrol ){
    54         if (-e $tempdir){
    55                 rmtree $tempdir or die "Could not delete existing temporary directory: $!";
    56         }
    57 
    58         mkdir($tempdir);
    59 
    60         for (my $i = 0; $testlist[$i] ne "|" and $i < length(@testlist); ++$i){
    61                 my $test = $testlist[$i];
    62                 system ("diff $testdir/$test.dat $controldir/$test.dat >> $tempdir/$test.diff");
    63         }
    64 }
  • bccd-ng/branches/leemasa-devel/trees/home/bccd/tests/bccd_test_suite.pm

    r2510 r2523  
    8080                        mpirun -np 1 ~/$testname/$testname      $storeOutput
    8181                        mpirun -np 2 ~/$testname/$testname      $storeOutput");
    82 
     82#XXX This function is untested from here on.
    8383        if (`wc -l ~/machines | awk '{print \$1}'` > 1){
    8484                system("bccd-syncdir . ~/machines       &> tmpoutput");
     
    111111                },
    112112
     113                'fail' => sub { #Guarantee an error report
     114                (my $testdir, my $testname) = @_;
     115                my $storeOutput = generate_storeOutput($testdir,$testname);
     116                system( "seq 1 100 | sort -R $storeOutput");
     117                },
     118
    113119                'system' => sub { #Print system information
    114120                (my $testdir, my $testname) = @_;
     
    131137                'Life' => sub { #Test Conway's Game of Life
    132138                        (my $testdir, my $testname) = @_;
    133                         mpi_test($testdir,$testname);
     139                        mpi_test($testdir, $testname);
    134140                })
  • bccd-ng/branches/leemasa-devel/trees/home/bccd/tests/test_lists/test

    r2510 r2523  
    77system* # A few commands to identify details of the platform
    88test # A simple echo to make sure the suite is working
     9
     10#fail # A test guaranteed (chance 100!:1) to fail
    911#BCCD # Test some built-in BCCD commands
    1012#GalaxSee # Test the GalaxSee program
Note: See TracChangeset for help on using the changeset viewer.