Skip to content
Snippets Groups Projects
logger.t 3.45 KiB
#!/usr/bin/perl

use strict;
use warnings;

use English qw(-no_match_vars);
use Fcntl qw(:seek);
use File::stat;
use File::Temp;
use Test::More;
use Test::Exception;

use IdPAccountManager::Logger;

plan tests => 14;

my $logger;

throws_ok {
    $logger = IdPAccountManager::Logger->new();
} qr/^missing argument 'file'/,
'instanciation: no file argument';

throws_ok {
    $logger = IdPAccountManager::Logger->new(
        file => '/no/such/file'
    );
} qr/^missing argument 'verbosity'/,
'instanciation: no verbosity argument';

throws_ok {
    $logger = IdPAccountManager::Logger->new(
        file      => '/no/such/file',
        verbosity => LOG_DEBUG
    );
} qr/^invalid argument 'verbosity'/,
'instanciation: invalid verbosity argument';

throws_ok {
    $logger = IdPAccountManager::Logger->new(
        file      => '/no/such/file',
        verbosity => 'debug'
    );
} qr/^failed to open \/no\/such\/file/,
'instanciation: invalid file argument';

my $logfile = File::Temp->new(UNLINK => $ENV{TEST_DEBUG} ? 0 : 1, SUFFIX => '.log');

lives_ok {
    $logger = IdPAccountManager::Logger->new(
        file      => $logfile->filename(),
        verbosity => 'debug'
    );
} 'instanciation with debug level verbosity: ok';

is(
    getFileOutput($logfile, \&logDebugMessage),
    POSIX::strftime("%Y:%m:%d %H:%M:%S", localtime(time)) .
        ' - (DEBUG) - NOIP - NOEMAIL - main::logDebugMessage() message',
    'debug message formating'
);

is(
    getFileOutput($logfile, \&logInfoMessage),
    POSIX::strftime("%Y:%m:%d %H:%M:%S", localtime(time)) .
        ' - (INFO) - NOIP - NOEMAIL - main::logInfoMessage() message',
    'info message formating'
);

is(
    getFileOutput($logfile, \&logNoticeMessage),
    POSIX::strftime("%Y:%m:%d %H:%M:%S", localtime(time)) .
        ' - (NOTICE) - NOIP - NOEMAIL - main::logNoticeMessage() message',
    'notice message formating'
);


is(
    getFileOutput($logfile, \&logErrorMessage),
    POSIX::strftime("%Y:%m:%d %H:%M:%S", localtime(time)) .
        ' - (ERROR) - NOIP - NOEMAIL - main::getFileOutput#78 > main::logErrorMessage#120 message',
    'error message formating'
);

lives_ok {
    $logger = IdPAccountManager::Logger->new(
        file      => $logfile->filename(),
        verbosity => 'error'
    );
} 'instanciation with error level verbosity: ok';

ok(
    !defined(getFileOutput($logfile, \&logDebugMessage)),
    'no debug message'
);

ok(
    !defined(getFileOutput($logfile, \&logInfoMessage)),
    'no info message'
);

ok(
    !defined(getFileOutput($logfile, \&logNoticeMessage)),
    'no notice message'
);


is(
    getFileOutput($logfile, \&logErrorMessage),
    POSIX::strftime("%Y:%m:%d %H:%M:%S", localtime(time)) .
        ' - (ERROR) - NOIP - NOEMAIL - main::getFileOutput#108 > main::logErrorMessage#120 message',
    'error message formating'
);

sub getFileOutput {
    my ($handle, $callback) = @_;

    my $stat = stat $handle;

    $callback->();

    seek $handle, $stat->size(), SEEK_SET;
    my $line = $handle->getline();

    chomp $line if $line;
    return $line;
}

sub logDebugMessage {
    $logger->log(level => LOG_DEBUG, message => 'message');
    $logger->{handle}->flush()
}

sub logInfoMessage {
    $logger->log(level => LOG_INFO, message => 'message');
    $logger->{handle}->flush()
}
sub logNoticeMessage {
    $logger->log(level => LOG_NOTICE, message => 'message');
    $logger->{handle}->flush()
}

sub logErrorMessage {
    $logger->log(level => LOG_ERROR, message => 'message');
    $logger->{handle}->flush()
}