]> git.donarmstrong.com Git - debbugs.git/blobdiff - t/lib/DebbugsTest.pm
abstract out create config in tests
[debbugs.git] / t / lib / DebbugsTest.pm
index 5d04848bf255f71bfe9d3627694ae733280dd2bb..6e33399d4e0f6ce0bfefd04a7dbdf586c62bd744 100644 (file)
@@ -31,6 +31,7 @@ use Debbugs::MIME qw(create_mime_message);
 use File::Basename qw(dirname basename);
 use IPC::Open3;
 use IO::Handle;
+use Test::More;
 
 use Params::Validate qw(validate_with :types);
 
@@ -40,9 +41,10 @@ BEGIN{
 
      @EXPORT = ();
      %EXPORT_TAGS = (configuration => [qw(dirsize create_debbugs_configuration send_message)],
+                    mail          => [qw(num_messages_sent)],
                    );
      @EXPORT_OK = ();
-     Exporter::export_ok_tags(qw(configuration));
+     Exporter::export_ok_tags(qw(configuration mail));
      $EXPORT_TAGS{all} = [@EXPORT_OK];
 }
 
@@ -55,7 +57,8 @@ BEGIN{
 sub create_debbugs_configuration {
      my %param = validate_with(params => \@_,
                               spec   => {debug => {type => BOOLEAN,
-                                                   default => 0,
+                                                   default => exists $ENV{DEBUG}?
+                                                   $ENV{DEBUG}:0,
                                                   },
                                          cleanup => {type => BOOLEAN,
                                                      optional => 1,
@@ -71,6 +74,7 @@ sub create_debbugs_configuration {
      $ENV{DEBBUGS_CONFIG_FILE}  ="$config_dir/debbugs_config";
      $ENV{PERL5LIB} = getcwd();
      $ENV{SENDMAIL_TESTDIR} = $sendmail_dir;
+     eval {
      my $sendmail_tester = getcwd().'/t/sendmail_tester';
      unless (-x $sendmail_tester) {
          die q(t/sendmail_tester doesn't exist or isn't executable. You may be in the wrong directory.);
@@ -80,16 +84,19 @@ sub create_debbugs_configuration {
 \$gSpoolDir='$spool_dir';
 \$gLibPath='@{[getcwd()]}/scripts';
 \$gTemplateDir='@{[getcwd()]}/templates';
+\$gWebDir='@{[getcwd()]}/html';
 \$gWebHost='localhost';
 1;
 END
                            "$spool_dir/nextnumber" => qq(1\n),
-                           "$config_dir/Maintainers" => qq(foo Blah Bleargh <bar\@baz.com>\n),
+                           "$config_dir/Maintainers" => qq(foo Blah Bleargh <foo\@baz.com>\nbar Bar Bleargh <bar\@baz.com>\n),
                            "$config_dir/Maintainers.override" => qq(),
+                           "$config_dir/Source_maintainers" => qq(foo Blah Bleargh <foo\@baz.com>\nbar Bar Bleargh <bar\@baz.com>\n),
                            "$config_dir/indices/sources" => <<END,
 foo main foo
 END
                            "$config_dir/pseudo-packages.description" => '',
+                           "$config_dir/pseudo-packages.maintainers" => '',
                           );
      while (my ($file,$contents) = each %files_to_create) {
          system('mkdir','-p',dirname($file));
@@ -107,12 +114,24 @@ END
            "$spool_dir/index.archive");
 
      # create the spool files and sub directories
-     map {system('mkdir','-p',"$spool_dir/$_"); }
-         map {('db-h/'.$_,'archive/'.$_)}
-              map { sprintf "%02d",$_ % 100} 0..99;
+     for my $dir (0..99) {
+         for my $archive (qw(db-h archive)) {
+             system('mkdir','-p',"$spool_dir/$archive/".sprintf('%02d',$dir));
+         }
+     }
      system('mkdir','-p',"$spool_dir/incoming");
      system('mkdir','-p',"$spool_dir/lock");
+     eval '
+END{
+     if ($ENV{DEBUG}) {
+         diag("spool_dir:   $spool_dir\n");
+         diag("config_dir:   $config_dir\n",);
+         diag("sendmail_dir: $sendmail_dir\n");
+     }
+}';
 
+     };
+     BAIL_OUT ($@) if ($@);
      return (spool_dir => $spool_dir,
             sendmail_dir => $sendmail_dir,
             config_dir => $config_dir,
@@ -141,6 +160,9 @@ sub send_message{
                                                     },
                                          body    => {type => SCALAR,
                                                     },
+                                         attachments => {type => ARRAYREF,
+                                                         default => [],
+                                                        },
                                          run_processall =>{type => BOOLEAN,
                                                            default => 1,
                                                           },
@@ -149,18 +171,22 @@ sub send_message{
      $ENV{LOCAL_PART} = $param{to};
      my ($rfd,$wfd);
      my $output='';
-     local $SIG{PIPE} = 'IGNORE';
-     local $SIG{CHLD} = sub {};
-     my $pid = open3($wfd,$rfd,$rfd,'scripts/receive.in')
-         or die "Unable to start receive.in: $!";
+     my $pipe_handler = $SIG{PIPE};
+     $SIG{PIPE} = 'IGNORE';
+     $SIG{CHLD} = 'DEFAULT';
+     my $pid = open3($wfd,$rfd,$rfd,'scripts/receive')
+         or die "Unable to start receive: $!";
      print {$wfd} create_mime_message($param{headers},
-                                        $param{body}) or die "Unable to to print to receive.in";
-     close($wfd) or die "Unable to close receive.in";
+                                     $param{body},
+                                     $param{attachments}) or
+                                         die "Unable to to print to receive";
+     close($wfd) or die "Unable to close receive";
+     $SIG{PIPE} = $pipe_handler;
      my $err = $? >> 8;
      my $childpid = waitpid($pid,0);
      if ($childpid != -1) {
          $err = $? >> 8;
-         print STDERR "receive.in pid: $pid doesn't match childpid: $childpid\n" if $childpid != $pid;
+         print STDERR "receive pid: $pid doesn't match childpid: $childpid\n" if $childpid != $pid;
      }
      if ($err != 0 ) {
          my $rfh =  IO::Handle->new_from_fd($rfd,'r') or die "Unable to create filehandle: $!";
@@ -171,17 +197,19 @@ sub send_message{
               print STDERR "Reading from STDOUT/STDERR would have blocked.";
          }
          print STDERR $output,qq(\n);
-         die "receive.in failed with exit status $err";
+         die "receive failed with exit status $err";
      }
      # now we should run processall to see if the message gets processed
      if ($param{run_processall}) {
-         system('scripts/processall.in') == 0 or die "processall.in failed";
+         system('scripts/processall') == 0 or die "processall failed";
      }
 }
 
+$SIG{CHLD} = sub {};
+
 {
      package DebbugsTest::HTTPServer;
-     use base qw(HTTP::Server::Simple::CGI);
+     use base qw(HTTP::Server::Simple::CGI HTTP::Server::Simple::CGI::Environment);
 
      our $child_pid = undef;
      our $webserver = undef;
@@ -190,8 +218,10 @@ sub send_message{
      END {
          if (defined $child_pid) {
               # stop the child
+              my $temp_exit = $?;
               kill(15,$child_pid);
               waitpid(-1,0);
+              $? = $temp_exit;
          }
      }
 
@@ -228,6 +258,25 @@ sub send_message{
      }
 }
 
+=head2 num_messages_sent
+
+     $SD_SIZE = num_messages_sent($SD_SIZE,2,$sendmail_dir,'2 messages have been sent properly');
+
+Tests to make sure that at least a certain number of messages have
+been sent since the last time this command was run. Usefull to test to
+make sure that mail has been sent.
+
+=cut
+
+sub num_messages_sent {
+    my ($prev_size,$num_messages,$sendmail_dir,$test_name) = @_;
+    my $cur_size = dirsize($sendmail_dir);
+    ## print STDERR "sendmail: $sendmail_dir, want: $num_messages,
+    ## size: $cur_size, prev_size: $prev_size\n";
+    ok($cur_size-$prev_size >= $num_messages, $test_name);
+    return $cur_size;
+}
+
 
 1;