Blame | Last modification | View Log | Download | RSS feed
#! /usr/bin/env perl
use strict;
use warnings;
use FindBin;
use lib "$FindBin::Bin";
use lib "$FindBin::Bin/.."; # ensure module path
use ZFS_Utils qw(runCmd loadConfig logMsg makeReplicateCommands $logFileName $displayLogsOnConsole);
# Test script for ZFS_Utils (dry-run safe)
$displayLogsOnConsole = 1;
$logFileName = '/tmp/zfs_utils_test.log';
unlink $logFileName if -f $logFileName;
print "Running ZFS_Utils smoke tests (dry-run safe)\n";
# 1) runCmd in scalar context
my $echo_out = runCmd('printf', 'hello_from_runCmd');
print "runCmd scalar output: [$echo_out]\n";
# 2) runCmd in list context
my @ls = runCmd('printf', "line1\nline2\n");
print "runCmd list output: ". join('|', @ls) ."\n";
# 3) loadConfig using a temporary YAML file
my $tmp_yaml = '/tmp/test_zfs_utils.conf.yaml';
open my $yh, '>', $tmp_yaml or die "Cannot write $tmp_yaml: $!";
print $yh "transport:\n mount_point: /tmp/mount_point_test\n dryrun: 1\n";
print $yh "datasets:\n demo:\n source: pool\n target: backup\n";
close $yh;
my $loaded = loadConfig($tmp_yaml, { default_key => 'default_value' });
print "Loaded config keys: ". join(', ', sort keys %$loaded) ."\n";
print "transport.mount_point = " . ($loaded->{transport}{mount_point} // '(undef)') ."\n";
# 4) makeReplicateCommands - sample snapshot lines
my @snaplines = (
'tank/home@2025-12-01-1d extra',
'tank/home@2025-12-07-1d extra',
'tank/data@2025-11-01-7d',
);
my @status = ('tank/home@2025-11-30-1d');
my @newstatus;
my $cmds = makeReplicateCommands(\@snaplines, \@status, \@newstatus);
print "Generated replicate commands:\n";
for my $fs (sort keys %$cmds) {
print " $fs => $cmds->{$fs}\n";
}
print "New status entries: ". join(', ', @newstatus) ."\n";
# 5) logMsg test
logMsg("Test log entry from test_zfs_utils.pl");
print "Log file written to $logFileName (if enabled).\n";
print "Smoke tests complete.\n";
# Clean up temporary YAML
unlink $tmp_yaml;
1;