# -*- perl -*-
#
#   $Id: config.t,v 1.2 1999/08/12 14:28:59 joe Exp $
#
require 5.004;
use strict;

use IO::Socket        ();
use Config            ();
use Net::Daemon::Test ();
use Socket            ();

my $CONFIG_FILE = "t/config";
my $numTests    = 5;

sub RunTest ($$) {
    my $config   = shift;
    my $numTests = shift;

    if ( !open( CF, ">$CONFIG_FILE" ) || !( print CF $config ) || !close(CF) ) {
        die "Error while creating config file $CONFIG_FILE: $!";
    }

    my ( $handle, $port ) = Net::Daemon::Test->Child(
        $numTests,       $^X,            '-Iblib/lib', '-Iblib/arch', 't/server', '--debug',
        '--mode=single', '--configfile', $CONFIG_FILE
    );
    my $fh = IO::Socket::INET->new(
        'PeerAddr' => '127.0.0.1',
        'PeerPort' => $port
    );
    my $result;
    my $success =
         $fh
      && $fh->print("1\n")
      && defined( $result = $fh->getline() )
      && $result =~ /2/;
    $handle->Terminate();
    $success ? "" : "not ";
}

print "Testing config file with open client list.\n";
my $ok = RunTest(
    q/{'mode' => 'single', 'timeout' => 60}/,
    $numTests
);
print "${ok}ok 1\n";

print "Testing config file with client 127.0.0.1.\n";
$ok = RunTest(
    q/
    { 'mode' => 'single',
      'timeout' => 60,
      'clients' => [ { 'mask' => '^127\.0\.0\.1$', 'accept' => 1 },
                     { 'mask' => '.*', 'accept' => 0 }
                   ]
    }/, undef
);
print "${ok}ok 2\n";

print "Testing config file with client !127.0.0.1.\n";
$ok = RunTest(
    q/
    { 'mode' => 'single',
      'timeout' => 60,
      'clients' => [ { 'mask' => '^127\.0\.0\.1$', 'accept' => 0 },
                     { 'mask' => '.*', 'accept' => 1 }
                   ]
    }/, undef
);
print( ( $ok ? "" : "not " ), "ok 3\n" );

my $hostname = gethostbyaddr(
    Socket::inet_aton("127.0.0.1"),
    Socket::AF_INET()
);
if ($hostname) {
    my $regexp = $hostname;
    $regexp =~ s/\./\\\./g;
    print "Testing config file with client $hostname.\n";
    $ok = RunTest(
        q/
    { 'mode' => 'single',
      'timeout' => 60,
      'clients' => [ { 'mask' => '^/
          . $regexp . q/$', 'accept' => 1 },
                     { 'mask' => '.*', 'accept' => 0 }
                   ]
    }/, undef
    );
    print "${ok}ok 4\n";

    print "Testing config file with client !$hostname\n";
    $ok = RunTest(
        q/
    { 'mode' => 'single',
      'timeout' => 60,
      'clients' => [ { 'mask' => '^/
          . $regexp . q/$', 'accept' => 0 },
                     { 'mask' => '.*', 'accept' => 1 }
                   ]
    }/, undef
    );
    print( ( $ok ? "" : "not " ), "ok 5\n" );
}
else {
    print "ok 4 # skip\n";
    print "ok 5 # skip\n";
}

END {
    if ( -f "ndtest.prt" ) { unlink "ndtest.prt" }
}
