# Before `make install' is performed this script should be runnable with
# `make test'. After `make install' it should work as `perl test.pl'

my($debug) = 0;

sub testing { printf "%sok %d\n", (@_[0] ? "" : "not "), ++$testnum; }

######################### We start with some black magic to print on failure.

# Change 1..1 below to 1..last_test_to_print .
# (It may become useful if the test is moved to ./t subdirectory.)

BEGIN {print "1..16\n";}
END {print "not ok 1\n" unless $loaded;}
use Hesiod;
$loaded = 1;
testing(1);

######################### End of black magic.

# Insert your test code below (better if it prints "ok 13"
# (correspondingly "not ok 13") depending on the success of chunk 13
# of the test code):

@ret = hes_to_bind('hesiod', 'sloc');
testing ( scalar(@ret) == 1 );
printf "# %-25s %s\n", 'hesiod,sloc ->', join(',', @ret)	if $debug;

$ret = hes_to_bind('hesiod', 'sloc');
testing ( $ret =~ /^hesiod\.sloc\.ns\./i );

@ret = hes_resolve('hesiod', 'sloc');
testing ( scalar(@ret) && ! $Hesiod::ERROR );
printf "# %-25s %s [%d]\n", 'hes(hesiod,sloc) ->', join(',',@ret),scalar(@ret)
								if $debug;
printf "# %-25s %s\n", 'error:', $Hesiod::ERROR		       	if $debug;

$ret = hes_resolve('hesiod', 'sloc');
testing ( defined($ret) && ($ret eq @ret[0]) && ! $Hesiod::ERROR );
printf "# %-25s %s\n", 'hes(hesiod,sloc) ->', $ret		if $debug;
printf "# %-25s %s\n", 'error:', $Hesiod::ERROR			if $debug;

@ret = hes_resolve('umma', 'gumma');
testing ( !scalar(@ret) && $Hesiod::ERROR );
printf "# %-25s %s [%d]\n", 'hes(umma,gumma) ->', join(',',@ret),scalar(@ret)
								if $debug;
printf "# %-25s %s\n", 'error:', $Hesiod::ERROR			if $debug;

$ret = hes_resolve('umma', 'gumma');
testing ( !defined($ret) && $Hesiod::ERROR );
printf "# %-25s %s\n", 'hes(umma,gumma) ->', $ret		if $debug;
printf "# %-25s %s\n", 'error:', $Hesiod::ERROR			if $debug;

# see if ERROR gets cleared properly...
$ret = hes_resolve('hesiod', 'sloc');
testing ( defined($ret) && ! $Hesiod::ERROR );
printf "# %-25s %s\n", 'hes(hesiod,sloc) ->', $ret		if $debug;
printf "# %-25s %s\n", 'error:', $Hesiod::ERROR			if $debug;

@ret = hes_getmailhost('register');
testing ( scalar(@ret) && ($ret[2] eq 'register') && ($ret[0] eq 'POP')
	 && ! $Hesiod::ERROR );
printf "# %-25s %s [%d]\n", 'mailhost(register) ->',
    join(',',@ret),scalar(@ret)					if $debug;
printf "# %-25s %s\n", 'error:', $Hesiod::ERROR			if $debug;

$ret = hes_getmailhost('register');
testing ( defined($ret) && ($ret eq $ret[1]) && ! $Hesiod::ERROR );
printf "# %-25s %s\n", 'mailhost(register) ->', $ret		if $debug;
printf "# %-25s %s\n", 'error:', $Hesiod::ERROR			if $debug;

@ret = hes_getpwnam('register');
testing ( ($ret[0] eq 'register') && ($ret[1] eq '*')
	 && ($ret[2]+0 eq $ret[2]) && ($ret[3]+0 eq $ret[3])
	 && ($ret[7] =~ m@^/mit/@) && (-x $ret[8])
	 && ! $Hesiod::ERROR );
printf "# %-25s %s [%d]\n", 'pwnam(register) ->',
    join(':',@ret),scalar(@ret)					if $debug;
printf "# %-25s %s\n", 'error:', $Hesiod::ERROR			if $debug;

$ret = hes_getpwnam('register');
testing ( ($ret eq $ret[2]) && ! $Hesiod::ERROR );
printf "# %-25s %s\n", 'pwnam(register) ->', $ret		if $debug;
printf "# %-25s %s\n", 'error:', $Hesiod::ERROR			if $debug;

my $uid = $ret;
@ret = hes_getpwuid($uid);
testing ( $ret[0] && ($ret[1] eq '*')
	 && ($ret[2] == $ret) && ($ret[3]+0 eq $ret[3])
	 && ($ret[7] =~ m@^/mit/@) && (-x $ret[8])
	 && ! $Hesiod::ERROR );
printf "# %-25s %s [%d]\n", "pwuid($uid) ->",
    join(':',@ret),scalar(@ret)					if $debug;
printf "# %-25s %s\n", 'error:', $Hesiod::ERROR			if $debug;

$ret = hes_getpwuid($uid);
testing ( ($ret eq $ret[0]) && ! $Hesiod::ERROR );
printf "# %-25s %s\n", 'pwuid($uid) ->', $ret			if $debug;
printf "# %-25s %s\n", 'error:', $Hesiod::ERROR			if $debug;

### And now, let's see about the Hesiod overrides of PERL functions

@ret1 = hes_getpwuid($uid);
@ret2 = Hesiod::getpwuid($uid);
testing ( ($#ret1 == $#ret2) && ($ret1[0] eq $ret2[0])
	 && ($ret1[1] eq $ret2[1]) && ($ret1[2] eq $ret2[2])
	 && ($ret1[3] eq $ret2[3]) && ($ret1[4] eq $ret2[4])
	 && ($ret1[5] eq $ret2[5]) && ($ret1[6] eq $ret2[6])
	 && ($ret1[7] eq $ret2[7]) && ($ret1[8] eq $ret2[8])  );

use Hesiod ('getpwuid');
@ret1 = hes_getpwuid($uid);
@ret2 = getpwuid($uid);
testing ( ($#ret1 == $#ret2) && ($ret1[0] eq $ret2[0])
	 && ($ret1[1] eq $ret2[1]) && ($ret1[2] eq $ret2[2])
	 && ($ret1[3] eq $ret2[3]) && ($ret1[4] eq $ret2[4])
	 && ($ret1[5] eq $ret2[5]) && ($ret1[6] eq $ret2[6])
	 && ($ret1[7] eq $ret2[7]) && ($ret1[8] eq $ret2[8])  );
