The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!perl -T

use Test::More tests => 7;
use Sys::RevoBackup;
use Config::Yak;
use Test::MockObject::Universal;
use File::Temp qw(tempdir);

my $tempdir = tempdir( CLEANUP => 1 );

my $MO = Test::MockObject::Universal::->new();
my $Cfg = Config::Yak::->new({
  'locations' => [],
});
$Cfg->set('Sys::RevoBackup::Verbose',0);
$Cfg->set('Sys::RevoBackup::Dry',1);
$Cfg->set('Sys::RevoBackup::Vaults::Apple',1);
$Cfg->set('Sys::RevoBackup::Vaults::Bananas',1);
my $args = {
    'config'    => $Cfg,
    'logger'    => $MO,
    'logfile'   => $tempdir.'/log',
    'bank'      => $tempdir,
    'concurrency' => 1,
    'job_filter' => 'bananas',
};

my $Revo = Sys::RevoBackup::->new($args);

my $Jobs = $Revo->jobs();

is(scalar(@{$Jobs->jobs()}),1,'Job Queue contains exactly one Job');
is($Jobs->jobs()->[0]->{'name'},'bananas','Job Queue contains the correct Job');

#
# Reset Object
#
$Revo = undef;
$Jobs = undef;

#
# Setup new Object
# without a job filter, so it should get all jobs defined above
#
delete($args->{'job_filter'});
$Revo = Sys::RevoBackup::->new($args);
$Jobs = $Revo->jobs();

is(scalar(@{$Jobs->jobs()}),2,'Job queue now contains exactly two Jobs');

#
# Reset Object
#
$Revo = undef;
$Jobs = undef;

#
# Setup new object to test our sudo feature
#
# this setting is deprecated and should not trigger sudo being present in command
$Cfg->set('Sys::RevoBackup::Sudo',1);

$Revo = Sys::RevoBackup::->new($args);
$Jobs = $Revo->jobs();

my $Worker = $Jobs->jobs()->[0]->worker();
my $rsync_cmd = $Worker->_rsync_cmd();
unlike( $rsync_cmd, qr/--rsync-path=.*sudo.*rsync/, 'Rsync CMD contains rsync path w/o sudo');

#
# Reset Object
#
$Revo   = undef;
$Jobs   = undef;
$Worker = undef;
$rsync_cmd = undef;

# this is the new way of setting sudo
print $Cfg->dump();
$Cfg->set('Sys::RevoBackup::Vaults::Apple::Sudo',1);
$Cfg->set('Sys::RevoBackup::Vaults::Bananas::Sudo',1);

$Revo = Sys::RevoBackup::->new($args);
$Jobs = $Revo->jobs();

my $Worker = $Jobs->jobs()->[0]->worker();
my $rsync_cmd = $Worker->_rsync_cmd();
like( $rsync_cmd, qr/--rsync-path=.*sudo.*rsync/, 'Rsync CMD contains rsync path w/ sudo');
like( $rsync_cmd, qr/-oBatchMode=yes/, 'SSH Options contain ssh Batch Mode');
like( $rsync_cmd, qr/-oStrictHostKeyChecking=no/, 'SSH Options do contain StrictHostKeyChecking=no');
#
# Reset Object
#
$Revo   = undef;
$Jobs   = undef;
$Worker = undef;
$rsync_cmd = undef;