Net-NIS
view release on metacpan or search on metacpan
t/40ypmaster.t view on Meta::CPAN
#!perl
#
# Tests for magic __YPMASTER functionality
#
use strict;
use Test::More tests => 1;
eval 'use Test::Differences'; # If available, provides better diagnostics
use Net::NIS qw(:all);
tie my %ypmaster, 'Net::NIS', '__YPMASTER';
if ($yperr != YPERR_SUCCESS()) {
diag "Skipping: $yperr";
ok 1, "Skipping test";
exit 0;
}
# Assemble a hash from the output of 'ypwhich -m'
my $ypwhich_m = qx{ ypwhich -m };
if ($?) {
diag "Skipping: error running 'ypwhich -m'";
ok 1, "Skipping test";
exit 0;
}
my %ypwhich_m;
for my $line (split "\n", $ypwhich_m) {
if ($line =~ m!^(\S+) \s+ (\S+)$!x) {
$ypwhich_m{$1} = $2;
}
else {
diag "Aborting test: Cannot grok '$line' from output of ypwhich -m";
ok 1, "Skipping test";
exit 0;
}
}
#
# Pay attention: black magic in action here.
#
# On Linux, which correctly implements yp_maplist(), this test works
# just as you expect: it's a simple hash comparison.
#
# On other OSes, yp_maplist() is unavailable. That means that %ypmaster
# is an empty hash, because there's no way to get its keys(). *BUT*,
# fortunately, Test::More doesn't seem to compare keys() of its inputs.
# It does seem to iterate over the keys, and *that* works well because
# for a given key $k, $ypmaster{$k} works: it invokes yp_master(),
# which is implemented in Solaris and possibly other OSes.
#
is_deeply \%ypmaster, \%ypwhich_m, "ypwhich -m .vs. our internal code";
( run in 3.363 seconds using v1.01-cache-2.11-cpan-5837b0d9d2c )