1#!/usr/bin/perl 2# 3# Copyright (C) 2004, 2007, 2010 Internet Systems Consortium, Inc. ("ISC") 4# Copyright (C) 2002 Internet Software Consortium. 5# 6# Permission to use, copy, modify, and/or distribute this software for any 7# purpose with or without fee is hereby granted, provided that the above 8# copyright notice and this permission notice appear in all copies. 9# 10# THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH 11# REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY 12# AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT, 13# INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM 14# LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE 15# OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR 16# PERFORMANCE OF THIS SOFTWARE. 17 18# 19# DNSSEC Dynamic update test suite. 20# 21# Usage: 22# 23# perl update_test.pl [-s server] [-p port] zone 24# 25# The server defaults to 127.0.0.1. 26# The port defaults to 53. 27# 28# Installation notes: 29# 30# This program uses the Net::DNS::Resolver module. 31# You can install it by saying 32# 33# perl -MCPAN -e "install Net::DNS" 34# 35# $Id: dnssec_update_test.pl,v 1.7 2010/08/13 23:47:03 tbox Exp $ 36# 37 38use Getopt::Std; 39use Net::DNS; 40use Net::DNS::Update; 41use Net::DNS::Resolver; 42 43$opt_s = "127.0.0.1"; 44$opt_p = 53; 45 46getopt('s:p:'); 47 48$res = new Net::DNS::Resolver; 49$res->nameservers($opt_s); 50$res->port($opt_p); 51$res->defnames(0); # Do not append default domain. 52 53@ARGV == 1 or die 54 "usage: perl update_test.pl [-s server] [-p port] zone\n"; 55 56$zone = shift @ARGV; 57 58my $failures = 0; 59 60sub assert { 61 my ($cond, $explanation) = @_; 62 if (!$cond) { 63 print "I:Test Failed: $explanation ***\n"; 64 $failures++ 65 } 66} 67 68sub test { 69 my ($expected, @records) = @_; 70 71 my $update = new Net::DNS::Update("$zone"); 72 73 foreach $rec (@records) { 74 $update->push(@$rec); 75 } 76 77 $reply = $res->send($update); 78 79 # Did it work? 80 if (defined $reply) { 81 my $rcode = $reply->header->rcode; 82 assert($rcode eq $expected, "expected $expected, got $rcode"); 83 } else { 84 print "I:Update failed: ", $res->errorstring, "\n"; 85 } 86} 87 88sub section { 89 my ($msg) = @_; 90 print "I:$msg\n"; 91} 92 93section("Add a name"); 94test("NOERROR", ["update", rr_add("a.$zone 300 A 73.80.65.49")]); 95 96section("Delete the name"); 97test("NOERROR", ["update", rr_del("a.$zone")]); 98 99if ($failures) { 100 print "I:$failures update tests failed.\n"; 101} else { 102 print "I:All update tests successful.\n"; 103} 104 105exit $failures; 106