use File::Basename qw(dirname basename);
use IPC::Open3;
use IO::Handle;
+use Test::More;
use Params::Validate qw(validate_with :types);
@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];
}
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,
$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.);
\$gSendmail='$sendmail_tester';
\$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));
"$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,
},
body => {type => SCALAR,
},
+ attachments => {type => ARRAYREF,
+ default => [],
+ },
run_processall =>{type => BOOLEAN,
default => 1,
},
$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: $!";
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;
END {
if (defined $child_pid) {
# stop the child
+ my $temp_exit = $?;
kill(15,$child_pid);
waitpid(-1,0);
+ $? = $temp_exit;
}
}
}
}
+=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;