From 1474e155834038b1afe42ec1a99f863d8f3647cd Mon Sep 17 00:00:00 2001 From: Don Armstrong Date: Sun, 10 Aug 2008 08:37:49 -0700 Subject: [PATCH] add missing comma in Debbugs/Control; add test for expire --- Debbugs/Control.pm | 4 +- t/06_mail_handling.t | 12 ++- t/10_expire.t | 188 +++++++++++++++++++++++++++++++++++++++++++ t/lib/DebbugsTest.pm | 2 +- 4 files changed, 202 insertions(+), 4 deletions(-) create mode 100644 t/10_expire.t diff --git a/Debbugs/Control.pm b/Debbugs/Control.pm index ee743bb..c197b6f 100644 --- a/Debbugs/Control.pm +++ b/Debbugs/Control.pm @@ -430,7 +430,7 @@ sub summary { __handle_affected_packages(data => \@data,%param); print {$transcript} __bug_info(@data); add_recipients(data => \@data, - recipients => $param{recipients} + recipients => $param{recipients}, debug => $debug, transcript => $transcript, ); @@ -585,7 +585,7 @@ sub owner { print {$transcript} __bug_info(@data); @data and defined $data[0] or die "No bug found for $param{bug}"; add_recipients(data => \@data, - recipients => $param{recipients} + recipients => $param{recipients}, debug => $debug, transcript => $transcript, ); diff --git a/t/06_mail_handling.t b/t/06_mail_handling.t index 857c97c..f33c9dd 100644 --- a/t/06_mail_handling.t +++ b/t/06_mail_handling.t @@ -1,7 +1,7 @@ # -*- mode: cperl;-*- # $Id: 05_mail.t,v 1.1 2005/08/17 21:46:17 don Exp $ -use Test::More tests => 78; +use Test::More tests => 84; use warnings; use strict; @@ -125,6 +125,16 @@ my @control_commands = status_key => 'severity', status_value => 'wishlist', }, + reassign_bar => {command => 'reassign', + value => 'bar', + status_key => 'package', + status_value => 'bar', + }, + reassign_foo => {command => 'reassign', + value => 'foo', + status_key => 'package', + status_value => 'foo', + }, 'found_1.0' => {command => 'found', value => '1.0', status_key => 'found_versions', diff --git a/t/10_expire.t b/t/10_expire.t new file mode 100644 index 0000000..502feea --- /dev/null +++ b/t/10_expire.t @@ -0,0 +1,188 @@ +# -*- mode: cperl;-*- +# + +use Test::More tests => 21; + +use warnings; +use strict; + +# Here, we're going to shoot messages through a set of things that can +# happen. + +# First, we're going to send mesages to receive. +# To do so, we'll first send a message to submit, +# then send messages to the newly created bugnumber. + +use IO::File; +use File::Temp qw(tempdir); +use Cwd qw(getcwd); +use Debbugs::MIME qw(create_mime_message); +use File::Basename qw(dirname basename); +# The test functions are placed here to make things easier +use lib qw(t/lib); +use DebbugsTest qw(:all); +use Data::Dumper; + +# HTTP::Server:::Simple defines a SIG{CHLD} handler that breaks system; undef it here. +$SIG{CHLD} = sub {}; +my %config; +eval { + %config = create_debbugs_configuration(debug => exists $ENV{DEBUG}?$ENV{DEBUG}:0); +}; +if ($@) { + BAIL_OUT($@); +} + +my $sendmail_dir = $config{sendmail_dir}; +my $spool_dir = $config{spool_dir}; +my $config_dir = $config{config_dir}; + +END{ + if ($ENV{DEBUG}) { + diag("spool_dir: $spool_dir\n"); + diag("config_dir: $config_dir\n"); + diag("sendmail_dir: $sendmail_dir\n"); + } +} + +# We're going to use create mime message to create these messages, and +# then just send them to receive. + +send_message(to=>'submit@bugs.something', + headers => [To => 'submit@bugs.something', + From => 'foo@bugs.something', + Subject => 'Submiting a bug', + ], + body => <= 2,'submit messages appear to have been sent out properly'); +$SD_SIZE_PREV=$SD_SIZE_NOW; + +# now send a message to the bug + +send_message(to => '1@bugs.something', + headers => [To => '1@bugs.something', + From => 'foo@bugs.something', + Subject => 'Sending a message to a bug', + ], + body => <= 2,'1@bugs.something messages appear to have been sent out properly'); +$SD_SIZE_PREV=$SD_SIZE_NOW; + +# just check to see that control doesn't explode +send_message(to => 'control@bugs.something', + headers => [To => 'control@bugs.something', + From => 'foo@bugs.something', + Subject => 'Munging a bug', + ], + body => <= 1,'control@bugs.something messages appear to have been sent out properly'); +$SD_SIZE_PREV=$SD_SIZE_NOW; +# now we need to check to make sure the control message was processed without errors +ok(system('sh','-c','find '.$sendmail_dir.q( -type f | xargs grep -q "Subject: Processed: Munging a bug")) == 0, + 'control@bugs.something message was parsed without errors'); +# now we need to check to make sure that the control message actually did anything +# This is an eval because $ENV{DEBBUGS_CONFIG_FILE} isn't set at BEGIN{} time +eval "use Debbugs::Status qw(read_bug writebug);"; +my $status = read_bug(bug=>1); +ok($status->{subject} eq 'new title','bug 1 retitled'); +ok($status->{severity} eq 'wishlist','bug 1 wishlisted'); + +# now we're going to go through and methododically test all of the control commands. +my @control_commands = + (close => {command => 'close', + value => '', + status_key => 'done', + status_value => 'foo@bugs.something', + }, + archive => {command => 'archive', + value => '', + status_key => 'owner', + status_value => '', + location => 'archive', + }, + unarchive => {command => 'unarchive', + value => '', + status_key => 'owner', + status_value => '', + }, + ); + +# In order for the archive/unarchive to work, we have to munge the summary file slightly +$status = read_bug(bug => 1); +$status->{unarchived} = time; +writebug(1,$status); +while (my ($command,$control_command) = splice(@control_commands,0,2)) { + # just check to see that control doesn't explode + $control_command->{value} = " $control_command->{value}" if length $control_command->{value} + and $control_command->{value} !~ /^\s/; + send_message(to => 'control@bugs.something', + headers => [To => 'control@bugs.something', + From => 'foo@bugs.something', + Subject => "Munging a bug with $command", + ], + body => <{command} 1$control_command->{value} +thanks +EOF + ; + $SD_SIZE_NOW = dirsize($sendmail_dir); + ok($SD_SIZE_NOW-$SD_SIZE_PREV >= 1,'control@bugs.something messages appear to have been sent out properly'); + $SD_SIZE_PREV=$SD_SIZE_NOW; + # now we need to check to make sure the control message was processed without errors + ok(system('sh','-c','find '.$sendmail_dir.q( -type f | xargs grep -q "Subject: Processed: Munging a bug with $command")) == 0, + 'control@bugs.something'. "$command message was parsed without errors"); + # now we need to check to make sure that the control message actually did anything + my $status; + $status = read_bug(bug=>1, + exists $control_command->{location}?(location => $control_command->{location}):(), + ); + is_deeply($status->{$control_command->{status_key}},$control_command->{status_value},"bug 1 $command") + or fail(Dumper($status)); +} + +# now we need to run expire, and make sure that bug is expired +# afterwards +# we punt and touch to set it to something that is archiveable + +# set the access time to twice the remove age +my $old_time = time - 28*2*24*60*60; + +system('touch','-d','@'.$old_time,"$spool_dir/db-h/01/1.log", ); +system('touch','-d','@'.$old_time,"$spool_dir/db-h/01/1.summary",); +system('touch','-d','@'.$old_time,"$spool_dir/db-h/01/1.status", ); +system('touch','-d','@'.$old_time,"$spool_dir/db-h/01/1.report", ); +ok(system('scripts/expire') == 0,'expire completed successfully'); + +ok($status = read_bug(bug => 1,location => 'archive'),'read bug from archive correctly'); diff --git a/t/lib/DebbugsTest.pm b/t/lib/DebbugsTest.pm index 580c41d..39a791c 100644 --- a/t/lib/DebbugsTest.pm +++ b/t/lib/DebbugsTest.pm @@ -84,7 +84,7 @@ sub create_debbugs_configuration { 1; END "$spool_dir/nextnumber" => qq(1\n), - "$config_dir/Maintainers" => qq(foo Blah Bleargh \n), + "$config_dir/Maintainers" => qq(foo Blah Bleargh \nbar Bar Bleargh \n), "$config_dir/Maintainers.override" => qq(), "$config_dir/indices/sources" => <