From f264e889271e05f55bff1c2df40f2bb0caff0732 Mon Sep 17 00:00:00 2001 From: Don Armstrong Date: Mon, 27 Feb 2012 16:00:31 -0800 Subject: [PATCH] add merge testing --- t/12_merge.t | 233 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 233 insertions(+) create mode 100644 t/12_merge.t diff --git a/t/12_merge.t b/t/12_merge.t new file mode 100644 index 0000000..5b76f72 --- /dev/null +++ b/t/12_merge.t @@ -0,0 +1,233 @@ +# -*- mode: cperl;-*- + +use Test::More tests => 29; + +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 => < '1@bugs.something', + headers => [To => '1@bugs.something', + From => 'foo@bugs.something', + Subject => 'Sending a message to a bug', + ], + body => < 'control@bugs.something', + headers => [To => 'control@bugs.something', + From => 'foo@bugs.something', + Subject => 'Munging a bug', + ], + body => <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 = + ( + clone => {command => 'clone', + value => '-1', + status_key => 'package', + status_value => 'foo', + bug => '2', + }, + merge => {command => 'merge', + value => '1 2', + status_key => 'mergedwith', + status_value => '2', + }, + unmerge => {command => 'unmerge', + value => '', + status_key => 'mergedwith', + status_value => '', + }, + ); + +test_control_commands(@control_commands); + +send_message(to => 'control@bugs.something', + headers => [To => 'control@bugs.something', + From => 'foo@bugs.something', + Subject => "Munging a bug with lots of stuff", + ], + body => <<'EOF') or fail 'message to control@bugs.something failed'; +debug 10 +clone 2 -1 -2 -3 -4 +retitle 2 foo +owner 2 bar@baz.com +submitter 2 fleb@bleh.com +tag 2 unreproducible moreinfo +severity 2 grave +block -1 by 2 +block 2 by -2 +summary 2 4 +affects 2 bleargh +forwarded 2 http://example.com/2 +close 2 +tag -3 wontfix +thanks +EOF + ; + $SD_SIZE = + num_messages_sent($SD_SIZE,1, + $sendmail_dir, + 'control@bugs.something messages appear to have been sent out properly'); + + +test_control_commands(forcemerge => {command => 'forcemerge', + value => '2', + status_key => 'mergedwith', + status_value => '2', + }, + unmerge => {command => 'unmerge', + value => '', + status_key => 'mergedwith', + status_value => '', + }, + forcemerge => {command => 'forcemerge', + value => '2 5', + status_key => 'mergedwith', + status_value => '2 5', + }, + ); + + +sub test_control_commands{ + my @commands = @_; + + while (my ($command,$control_command) = splice(@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 = + num_messages_sent($SD_SIZE,1, + $sendmail_dir, + 'control@bugs.something messages appear to have been sent out properly'); + # 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(exists $control_command->{bug}?(bug => $control_command->{bug}):(bug=>1), + exists $control_command->{location}?(location => $control_command->{location}):(), + ); + is_deeply($status->{$control_command->{status_key}}, + $control_command->{status_value}, + "bug " . + (exists $control_command->{bug}?$control_command->{bug}:1). + " $command" + ) + or fail(Dumper($status)); + } +} -- 2.39.2