#!/usr/bin/perl # # Copyright (C) 2004, 2007 Internet Systems Consortium, Inc. ("ISC") # Copyright (C) 2002 Internet Software Consortium. # # Permission to use, copy, modify, and/or distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH # REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY # AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT, # INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM # LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE # OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # DNSSEC Dynamic update test suite. # # Usage: # # perl update_test.pl [-s server] [-p port] zone # # The server defaults to 127.0.0.1. # The port defaults to 53. # # Installation notes: # # This program uses the Net::DNS::Resolver module. # You can install it by saying # # perl -MCPAN -e "install Net::DNS" # # $Id: dnssec_update_test.pl,v 1.5 2007/06/19 23:47:02 tbox Exp $ # use Getopt::Std; use Net::DNS; use Net::DNS::Update; use Net::DNS::Resolver; $opt_s = "127.0.0.1"; $opt_p = 53; getopt('s:p:'); $res = new Net::DNS::Resolver; $res->nameservers($opt_s); $res->port($opt_p); $res->defnames(0); # Do not append default domain. @ARGV == 1 or die "usage: perl update_test.pl [-s server] [-p port] zone\n"; $zone = shift @ARGV; my $failures = 0; sub assert { my ($cond, $explanation) = @_; if (!$cond) { print "I:Test Failed: $explanation ***\n"; $failures++ } } sub test { my ($expected, @records) = @_; my $update = new Net::DNS::Update("$zone"); foreach $rec (@records) { $update->push(@$rec); } $reply = $res->send($update); # Did it work? if (defined $reply) { my $rcode = $reply->header->rcode; assert($rcode eq $expected, "expected $expected, got $rcode"); } else { print "I:Update failed: ", $res->errorstring, "\n"; } } sub section { my ($msg) = @_; print "I:$msg\n"; } section("Add a name"); test("NOERROR", ["update", rr_add("a.$zone 300 A 73.80.65.49")]); section("Delete the name"); test("NOERROR", ["update", rr_del("a.$zone")]); if ($failures) { print "I:$failures tests failed.\n"; } else { print "I:All tests successful.\n"; } exit $failures;