pve-manager/test/mail_test.pl
Fabian Grünbichler 6a545c326c test: fix mail_test for non-root user
Signed-off-by: Fabian Grünbichler <f.gruenbichler@proxmox.com>
2020-08-13 12:54:51 +02:00

90 lines
2.5 KiB
Perl
Executable File

#!/usr/bin/perl
use strict;
use warnings;
use lib '..';
use Test::More tests => 5;
use Test::MockModule;
use PVE::VZDump;
my $STATUS = qr/.*status.*/;
my $NO_LOGFILE = qr/.*Could not open log file.*/;
my $LOG_TOO_LONG = qr/.*Log output was too long.*/;
my $TEST_FILE_PATH = '/tmp/mail_test';
my $TEST_FILE_WRONG_PATH = '/tmp/mail_test_wrong';
sub prepare_mail_with_status {
open(TEST_FILE, '>', $TEST_FILE_PATH); # Removes previous content
print TEST_FILE "start of log file\n";
print TEST_FILE "status: 0\% this should not be in the mail\n";
print TEST_FILE "status: 55\% this should not be in the mail\n";
print TEST_FILE "status: 100\% this should not be in the mail\n";
print TEST_FILE "end of log file\n";
close(TEST_FILE);
}
sub prepare_long_mail {
open(TEST_FILE, '>', $TEST_FILE_PATH); # Removes previous content
# 0.5 MB * 2 parts + the overview tables gives more than 1 MB mail
print TEST_FILE "a" x (1024*1024/2);
close(TEST_FILE);
}
my ($result_text, $result_html);
my $mock_tools_module = Test::MockModule->new('PVE::Tools');
$mock_tools_module->mock('sendmail', sub {
my (undef, undef, $text, $html, undef, undef) = @_;
$result_text = $text;
$result_html = $html;
});
my $mock_cluster_module = Test::MockModule->new('PVE::Cluster');
$mock_cluster_module->mock('cfs_read_file', sub {
my $path = shift;
if ($path eq 'datacenter.cfg') {
return {};
} else {
die "unexpected cfs_read_file\n";
}
});
my $MAILTO = ['test_address@proxmox.com'];
my $SELF = {
opts => { mailto => $MAILTO },
cmdline => 'test_command_on_cli',
};
my $task = { state => 'ok', vmid => '100', };
my $tasklist;
sub prepare_test {
$result_text = $result_html = undef;
$task->{tmplog} = shift;
$tasklist = [ $task ];
}
{
prepare_test($TEST_FILE_WRONG_PATH);
PVE::VZDump::sendmail($SELF, $tasklist, 0, undef, undef, undef);
like($result_text, $NO_LOGFILE, "Missing logfile is detected");
}
{
prepare_test($TEST_FILE_PATH);
prepare_mail_with_status();
PVE::VZDump::sendmail($SELF, $tasklist, 0, undef, undef, undef);
unlike($result_text, $STATUS, "Status are not in text part of mails");
unlike($result_html, $STATUS, "Status are not in HTML part of mails");
}
{
prepare_test($TEST_FILE_PATH);
prepare_long_mail();
PVE::VZDump::sendmail($SELF, $tasklist, 0, undef, undef, undef);
like($result_text, $LOG_TOO_LONG, "Text part of mails gets shortened");
like($result_html, $LOG_TOO_LONG, "HTML part of mails gets shortened");
}
unlink $TEST_FILE_PATH;