# parse the named.conf file provided with bind-8.2.3 source
# to test the parser thouroughly. It should parse without
# complaints and write it back properly.
use strict;
use warnings;
use Test;
BEGIN { plan tests => 29 };
use Unix::Conf;
ok (1);
use Unix::Conf::Bind8;
ok (1);
# get max debug messages
Unix::Conf->debuglevel (2);
# READ in a comprehensive configuration file and test the parsing.
# copy the orignal conf file at the start of every test
`cp t/named.conf.org t/named.conf`;
`cp t/include.conf.org t/include.conf`;
my ($conf, $obj, $ret, @directives, @warnings);
$conf = Unix::Conf::Bind8->new_conf (
FILE => 't/named.conf',
SECURE_OPEN => 0,
);
ok ($conf->isa ('Unix::Conf::Bind8::Conf'));
# die if we fail as all tests below depend on success of this test.
$conf->die ("\nUnix::Conf::Bind8->new_conf () failed") unless ($conf);
ok (@warnings = $conf->parse_errors (), 0);
$_->warn () for (@warnings);
ok (@directives = $conf->directives (), 28);
# mark all directives as dirty, in the hope we blow up somewhere.
#$_->dirty (1) for (@directives);
# read again to see if we get same number of directives.
# if so rendering should be ok.
undef (@directives);
undef (@warnings);
($obj, $ret, $_) = (undef) x 3;
$conf = undef;
$conf = Unix::Conf::Bind8->new_conf (
FILE => 't/named.conf',
SECURE_OPEN => 0,
);
ok ($conf->isa ('Unix::Conf::Bind8::Conf'));
$conf->die ("\nUnix::Conf::Bind8->new_conf () failed") unless ($conf);
ok (@directives = $conf->directives (), 28);
# now delete some zones say 2 and check back the number of zones.
# this should validate delete_* for all zone type directives.
ok (@directives = $conf->zones (), 5);
$ret = $conf->delete_zone ('stub.demo.zone');
ok ($ret);
$ret->die ("couldn't delete zone `stub.demo.zone'") unless ($ret);
$ret = $conf->delete_zone ('.');
ok ($ret);
$ret->die ("couldn't delete zone `.'") unless ($ret);
# try getting zone now. it should fail.
# this is without writing it out and reading it back.
$ret = $conf->get_zone ('stub.demo.zone');
ok ($ret, qr/^_get_zone: zone `stub.demo.zone' not defined/);
ok (@directives = $conf->zones (), 3);
# now delete options, write it out, read it back and then try
# getting it. also try getting back zone `stub.demo.zone'
$ret = $conf->delete_options ();
ok ($ret);
$ret->die ("couldn't delete options") unless ($ret);
# try getting options now. it should fail.
# this is without writing it out and reading it back.
$ret = $conf->get_options ();
ok ($ret, qr/^_get_options: `options' not defined/);
undef (@directives);
undef (@warnings);
($obj, $ret, $_) = (undef) x 3;
$conf = undef;
$conf = Unix::Conf::Bind8->new_conf (
FILE => 't/named.conf',
SECURE_OPEN => 0,
);
ok ($conf->isa ('Unix::Conf::Bind8::Conf'));
$conf->die ("\nUnix::Conf::Bind8->new_conf () failed") unless ($conf);
ok (@directives = $conf->directives (), 25);
# make sure the zones and options are really gone from the file.
$ret = $conf->get_zone ('stub.demo.zone');
ok ($ret, qr/^_get_zone: zone `stub.demo.zone' not defined/);
$ret = $conf->get_options ();
ok ($ret, qr/^_get_options: `options' not defined/);
# test handling of a conf object when directives are parsed
# from the include file.
ok ($ret = $conf->get_zone ('include.com'));
ok ($ret->type (), 'master');
ok ($ret = $conf->get_include ('t/include.conf'));
$ret->die ("couldn't get include") unless ($ret);
ok (($ret = $ret->conf ())->isa ("Unix::Conf::Bind8::Conf"));
ok ($ret->new_zone (
NAME => 'master.demo.zone',
TYPE => 'master',
FILE => 'db.demo.zone',
CLASS => 'IN',
), qr/^_add_zone: zone `master.demo.zone' already defined/);
ok ($ret->new_zone (
NAME => 'extremix.com',
TYPE => 'master',
FILE => 'db.extremix.com',
CLASS => 'IN',
));
undef (@directives);
undef (@warnings);
($obj, $ret, $_) = (undef) x 3;
$conf = undef;
$conf = Unix::Conf::Bind8->new_conf (
FILE => 't/named.conf',
SECURE_OPEN => 0,
);
ok ($conf->isa ('Unix::Conf::Bind8::Conf'));
$conf->die ("\nUnix::Conf::Bind8->new_conf () failed") unless ($conf);
ok ($conf->delete_zone ('extremix.com'));
ok ($conf->get_zone ('extremix.com'), qr/^_get_zone: zone `extremix.com' not defined/);
undef (@directives);
undef (@warnings);
($obj, $ret, $_) = (undef) x 3;
$conf = undef;
$conf = Unix::Conf::Bind8->new_conf (
FILE => 't/named.conf',
SECURE_OPEN => 0,
);
ok ($conf->isa ('Unix::Conf::Bind8::Conf'));
$conf->die ("\nUnix::Conf::Bind8->new_conf () failed") unless ($conf);
ok ($conf->get_zone ('extremix.com'), qr/^_get_zone: zone `extremix.com' not defined/);