The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.
use strict;
use warnings;
use lib 'lib';
use File::Path;

use Test::More tests => 6;

use_ok( 'Sysync' );
use_ok( 'Sysync::File' );

open(LOG, ">/dev/null");
*LOG = *STDERR;

for my $folder (qw(stage stage-files))
{
    rmtree("./t/data/$folder");
    mkdir("./t/data/$folder");
}

my @FL;
my $sysync = Sysync::File->new({
    sysdir => "./t/data",
    log => *LOG,
});

ok( grep { $_ =~ /nobody:x:65534:65534:nobody:\/nonexistent:\/bin\/sh/ }
    split("\n", $sysync->get_host_ent('spoon')->{passwd}), 'passwd data looks ok' );

ok( grep { $_ =~ /waffle:x:999:foo/ }
    split("\n", $sysync->get_host_ent('spoon')->{group}), 'group data looks ok' );

# actually stage data
$sysync->update_all_hosts( hosts => { hosts => { spoon => {} } } );

# read ssh key for good measure
open(F, "./t/data/stage/spoon/etc/ssh/authorized_keys/foo");
@FL = <F>;
close(F);

ok($FL[0] =~ /waffle spoon/, "update_all_hosts built ssh key properly"); 

$sysync->update_host_files('spoon');

open(F, "./t/data/stage-files/spoon/etc/secret-data.conf");
@FL = <F>;
close(F);

ok($FL[0] =~ /Secret data!/, "update_host_files built file correctly"); 

for my $folder (qw(stage stage-files))
{
    rmtree("./t/data/$folder");
    mkdir("./t/data/$folder");
}