a63ecef5a3
The signature of the PVE::Notify functions have changed, this commit adapts the mocked functions so that the tests work again. Signed-off-by: Lukas Wagner <l.wagner@proxmox.com>
102 lines
2.8 KiB
Perl
Executable File
102 lines
2.8 KiB
Perl
Executable File
#!/usr/bin/perl
|
|
|
|
use strict;
|
|
use warnings;
|
|
|
|
use lib '..';
|
|
|
|
use Test::More tests => 3;
|
|
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);
|
|
close(TEST_FILE);
|
|
}
|
|
|
|
my $result_text;
|
|
my $result_properties;
|
|
|
|
my $mock_notification_module = Test::MockModule->new('PVE::Notify');
|
|
my $mocked_notify = sub {
|
|
my ($severity, $title, $text, $properties, $metadata) = @_;
|
|
|
|
$result_text = $text;
|
|
$result_properties = $properties;
|
|
};
|
|
my $mocked_notify_short = sub {
|
|
my (@params) = @_;
|
|
return $mocked_notify->('<some severity>', @params);
|
|
};
|
|
|
|
$mock_notification_module->mock(
|
|
'notify' => $mocked_notify,
|
|
'info' => $mocked_notify_short,
|
|
'notice' => $mocked_notify_short,
|
|
'warning' => $mocked_notify_short,
|
|
'error' => $mocked_notify_short,
|
|
);
|
|
$mock_notification_module->mock('cfs_read_file', sub {
|
|
my $path = shift;
|
|
|
|
if ($path eq 'datacenter.cfg') {
|
|
return {};
|
|
} elsif ($path eq 'notifications.cfg' || $path eq 'priv/notifications.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 = undef;
|
|
$task->{tmplog} = shift;
|
|
$tasklist = [ $task ];
|
|
}
|
|
|
|
{
|
|
prepare_test($TEST_FILE_WRONG_PATH);
|
|
PVE::VZDump::send_notification($SELF, $tasklist, 0, undef, undef, undef);
|
|
like($result_properties->{logs}, $NO_LOGFILE, "Missing logfile is detected");
|
|
}
|
|
{
|
|
prepare_test($TEST_FILE_PATH);
|
|
prepare_mail_with_status();
|
|
PVE::VZDump::send_notification($SELF, $tasklist, 0, undef, undef, undef);
|
|
unlike($result_properties->{"status-text"}, $STATUS, "Status are not in text part of mails");
|
|
}
|
|
{
|
|
prepare_test($TEST_FILE_PATH);
|
|
prepare_long_mail();
|
|
PVE::VZDump::send_notification($SELF, $tasklist, 0, undef, undef, undef);
|
|
like($result_properties->{logs}, $LOG_TOO_LONG, "Text part of mails gets shortened");
|
|
}
|
|
unlink $TEST_FILE_PATH;
|