#! /usr/bin/perl -w use strict; # $Id: mailer.t 1155 2008-01-03 13:32:28Z abeltje $ use File::Spec; my $findbin; use File::Basename; BEGIN { $findbin = dirname $0; } use lib $findbin; use lib File::Spec->catdir( $findbin, File::Spec->updir, 'inc' ); use TestLib; use Test::More tests => 32; my $eg_config = { plevel => 19000, os => 'linux', osvers => '2.4.18-4g', arch => 'i686/1 cpu', sum => 'PASS', version => '5.9.0' }; my $fail_cfg = { plevel => 19000, os => 'linux', osvers => '2.4.18-4g', arch => 'i686/1 cpu', sum => 'FAIL(F)', version => '5.9.0' }; use_ok( 'Test::Smoke::Mailer' ); use Test::Smoke::Util 'parse_report_Config'; SKIP: { my $mhowto = 'Mail::Sendmail'; local $@; my $load_error = do { eval "require $mhowto"; $@; }; $load_error and skip "Cannot load 'Mail::Sendmail'", 7; write_report( $eg_config ) or skip "Cannot write report", 7; my $mailer = Test::Smoke::Mailer->new( $mhowto => { ddir => 't', cc => 'abeltje@test-smoke.org', } ); isa_ok( $mailer, 'Test::Smoke::Mailer' ); isa_ok( $mailer, 'Test::Smoke::Mailer::Mail_Sendmail' ); my $report = create_report( $eg_config ); my $subject = $mailer->fetch_report(); my @config = parse_report_Config( $mailer->{body} ); my @conf = @{ $eg_config }{qw( version plevel os osvers arch sum )}; is_deeply( \@config, \@conf, "Config..." ); my $subj = sprintf "Smoke [%s] %s %s %s %s (%s)", @conf[0, 1, 5, 2, 3, 4]; is( $subject, $subj, "Read the report: $subject" ); is( $mailer->{body}, $report, "Report read back ok" ); # Now we try to test the new ccp5p_onfail stuff # and the new cc behaviour: no cc unless fail is( $mailer->_get_cc( $subject ), '', "p5p not added to cc-list [--noccp5p_onfail]" ); $mailer->{ccp5p_onfail} = 1; is( $mailer->_get_cc( $subject ), '', "p5p not added to cc-list [PASS]" ); 1 while unlink File::Spec->catfile( 't', 'mktest.rpt' ); } SKIP: { my $mhowto = 'Mail::Sendmail'; local $@; my $load_error = do { eval "require $mhowto"; $@; }; $load_error and skip "Cannot load 'Mail::Sendmail'", 9; write_report( $fail_cfg ) or skip "Cannot write report", 9; my $mailer = Test::Smoke::Mailer->new( $mhowto => { ddir => 't', to => 'abeltje@cpan.org', from => 'abeltje@cpan.org', cc => 'abeltje@test-smoke.org', } ); isa_ok( $mailer, 'Test::Smoke::Mailer' ); isa_ok( $mailer, 'Test::Smoke::Mailer::Mail_Sendmail' ); my $report = create_report( $fail_cfg ); my $subject = $mailer->fetch_report(); my @config = parse_report_Config( $mailer->{body} ); my @conf = @{ $fail_cfg }{qw( version plevel os osvers arch sum )}; is_deeply( \@config, \@conf, "Config..." ); my $subj = sprintf "Smoke [%s] %s %s %s %s (%s)", @conf[0, 1, 5, 2, 3, 4]; is( $subject, $subj, "Read the report: $subject" ); is( $mailer->{body}, $report, "Report read back ok" ); # Now we try to test the new ccp5p_onfail stuff is( $mailer->_get_cc( $subject ), 'abeltje@test-smoke.org', "p5p not added to cc-list [--noccp5p_onfail]" ); $mailer->{ccp5p_onfail} = 1; is( $mailer->_get_cc( $subject ), 'abeltje@test-smoke.org, ' . $Test::Smoke::Mailer::P5P, "p5p got added to cc-list [--ccp5p_onfail]" ); my $old_to = $mailer->{to}; $mailer->{to} .= ", $Test::Smoke::Mailer::P5P"; is( $mailer->_get_cc( $subject ), 'abeltje@test-smoke.org', "p5p not added to cc-list [already in To:]" ); $mailer->{to} = $old_to; $mailer->{cc} = $Test::Smoke::Mailer::P5P; is( $mailer->_get_cc( $subject ), $Test::Smoke::Mailer::P5P, "p5p not added to cc-list [already in Cc:]" ); 1 while unlink File::Spec->catfile( 't', 'mktest.rpt' ); } SKIP: { my $mhowto = 'mail'; my $bin = whereis( $mhowto ) or skip "No '$mhowto' found", 5; write_report( $eg_config ) or skip "Cannot write report", 5; my $mailer = Test::Smoke::Mailer->new( $mhowto => { ddir => 't', mailbin => $bin, } ); isa_ok( $mailer, 'Test::Smoke::Mailer' ); isa_ok( $mailer, 'Test::Smoke::Mailer::Mail_X' ); my $report = create_report( $eg_config ); my $subject = $mailer->fetch_report(); my @config = parse_report_Config( $mailer->{body} ); my @conf = @{ $eg_config }{qw( version plevel os osvers arch sum )}; is_deeply( \@config, \@conf, "Config..." ); my $subj = sprintf "Smoke [%s] %s %s %s %s (%s)", @conf[0, 1, 5, 2, 3, 4]; is( $subject, $subj, "Read the report: $subject" ); is( $mailer->{body}, $report, "Report read back ok" ); 1 while unlink File::Spec->catfile( 't', 'mktest.rpt' ); } SKIP: { my $mhowto = 'mailx'; my $bin = whereis( $mhowto ) or skip "No '$mhowto' found", 5; write_report( $eg_config ) or skip "Cannot write report", 5; my $mailer = Test::Smoke::Mailer->new( $mhowto => { ddir => 't', mailbin => $bin, } ); isa_ok( $mailer, 'Test::Smoke::Mailer' ); isa_ok( $mailer, 'Test::Smoke::Mailer::Mail_X' ); my $report = create_report( $eg_config ); my $subject = $mailer->fetch_report(); my @config = parse_report_Config( $mailer->{body} ); my @conf = @{ $eg_config }{qw( version plevel os osvers arch sum )}; is_deeply( \@config, \@conf, "Config..." ); my $subj = sprintf "Smoke [%s] %s %s %s %s (%s)", @conf[0, 1, 5, 2, 3, 4]; is( $subject, $subj, "Read the report: $subject" ); is( $mailer->{body}, $report, "Report read back ok" ); 1 while unlink File::Spec->catfile( 't', 'mktest.rpt' ); } SKIP: { my $mhowto = 'sendmail'; $^O eq 'VMS' and skip "Do not try '$mhowto' on $^O", 5; local $ENV{PATH} = "$ENV{PATH}:/usr/sbin"; my $bin = whereis( $mhowto ) or skip "No '$mhowto' found", 5; write_report( $eg_config ) or skip "Cannot write report", 5; my $mailer = Test::Smoke::Mailer->new( $mhowto => { ddir => 't', mailbin => $bin, } ); isa_ok( $mailer, 'Test::Smoke::Mailer' ); isa_ok( $mailer, 'Test::Smoke::Mailer::Sendmail' ); my $report = create_report( $eg_config ); my $subject = $mailer->fetch_report(); my @config = parse_report_Config( $mailer->{body} ); my @conf = @{ $eg_config }{qw( version plevel os osvers arch sum )}; is_deeply( \@config, \@conf, "Config..." ); my $subj = sprintf "Smoke [%s] %s %s %s %s (%s)", @conf[0, 1, 5, 2, 3, 4]; is( $subject, $subj, "Read the report: $subject" ); is( $mailer->{body}, $report, "Report read back ok" ); 1 while unlink File::Spec->catfile( 't', 'mktest.rpt' ); } sub write_report { my $eg = shift; local *REPORT; my $report_file = File::Spec->catfile( 't', 'mktest.rpt' ); my $report = create_report( $eg ); open REPORT, "> $report_file" or return undef; print REPORT $report; close REPORT or return undef; return 1; } sub create_report { my $eg = shift; return <<__EOR__; Automated smoke report for $eg->{version} patch $eg->{plevel} host: TI UltraSparc I (SpitFire) ($eg->{arch}) on $eg->{os} - $eg->{osvers} using cc version 4.2 smoketime 4 hours 2 minutes Summary: $eg->{sum} __EOR__ }