source: branches/cname-collision/t/cname.t

Last change on this file was 953, checked in by Kris Deugau, 21 hours ago

/branches/cname-collision

Add domain record update tests
See #88, #72

File size: 5.9 KB
RevLine 
[950]1# -*- Perl -*-
2# Tests for CNAME records
[951]3# Note that not all possible cases are caught!
4# Template records mean not all published records are natively present in the DB
[950]5
6use Test::More;
7use Data::Dumper;
8
9use lib 't';
10
11use DNSTest;
12my $dtest = DNSTest::new;
13
14my $code,$msg;
15my $rectype = 5;
16my $newname;
17my $newval;
18
19## Domain tests
[952]20subtest 'Domain tests' => sub {
[950]21
22subtest 'CNAME add - new name' => sub {
23 $newname = 'newname.example.com';
24 $newval = 'fredshosting.example.net';
25 ($code, $msg) = $dnsdb->addRec('n', 'n', 1, \$newname, \$rectype, \$newval, 900);
26 ok( $code eq 'OK', "addRec() claimed succeess" );
27 if ($code eq 'OK') {
28 # crosscheck in the DB
29 ($rcount) = $dbh->selectrow_array("SELECT count(*) FROM records WHERE domain_id = 1 AND host = '$newname'");
30 ok( $rcount == 1, " ... [$rcount] yep, hostname only occurs once" );
31 } else {
32 print "not ok: $msg";
33 }
34};
35
36subtest 'CNAME add - existing/colliding CNAME' => sub {
37 $newname = 'www.example.com';
38 ($code, $msg) = $dnsdb->addRec('n', 'n', 1, \$newname, \$rectype, \$newval, 900);
39 ok( $code eq 'FAIL', "addRec() claimed failure adding duplicate CNAME" );
40 if ($code eq 'FAIL') {
41 ($rcount) = $dbh->selectrow_array("SELECT count(*) FROM records WHERE domain_id = 1 AND host = '$newname' AND type = 5");
42 ok( $rcount == 1, " ... [$rcount] CNAME already exists" );
43 like( $msg, qr/already a CNAME present/, " ... returned matching error" );
44 }
45};
46
[952]47subtest 'CNAME add - existing/colliding CNAME' => sub {
48 $newname = 'www.example.com';
49 ($code, $msg) = $dnsdb->addRec('n', 'n', 1, \$newname, \$rectype, \$newval, 900);
50 ok( $code eq 'FAIL', "addRec() claimed failure adding duplicate CNAME" );
51 if ($code eq 'FAIL') {
52 ($rcount) = $dbh->selectrow_array("SELECT count(*) FROM records WHERE domain_id = 1 AND host = '$newname' AND type = 5");
53 ok( $rcount == 1, " ... [$rcount] CNAME already exists" );
54 like( $msg, qr/already a CNAME present/, " ... returned matching error" );
55 }
56};
[951]57
[953]58subtest 'Update non-CNAME to CNAME, non-colliding' => sub {
59 $newname = 'smtp.example.com';
60 $newval = 'example.com';
61 ($code, $msg) = $dnsdb->updateRec('n', 'n', 39, 1, \$newname, \$rectype, \$newval, 900);
62 ok( $code eq 'OK', "updateRec() claimed success" );
63 if ($code eq 'OK') {
64 ($rcount) = $dbh->selectrow_array("SELECT count(*) FROM records WHERE domain_id = 1 AND host = '$newname'");
65 ok( $rcount == 1, " ... [$rcount] yep, hostname only occurs once" );
66 } else {
67 print "not ok: $msg";
68 }
69};
70
71subtest 'Update non-CNAME to CNAME, colliding' => sub {
72 $newname = 'mx1.example.com';
73 ($code, $msg) = $dnsdb->updateRec('n', 'n', 39, 1, \$newname, \$rectype, \$newval, 900);
74 ok( $code eq 'FAIL', "updateRec() claimed failure" );
75 if ($code eq 'FAIL') {
76 ($rcount) = $dbh->selectrow_array("SELECT count(*) FROM records WHERE domain_id = 1 AND host = '$newname' AND type <> 5");
77 ok( $rcount == 2, " ... [$rcount] record(s) with $newname already exist" );
78 like( $msg, qr/One or more non-CNAME records/, " ... returned matching error" );
79 }
80};
81
82subtest 'Update CNAME to non-colliding name' => sub {
83 $newname = 'imap.example.com';
84 ($code, $msg) = $dnsdb->updateRec('n', 'n', 37, 1, \$newname, \$rectype, \$newval, 900);
85 ok( $code eq 'OK', "updateRec() claimed success" );
86 if ($code eq 'OK') {
87 ($rcount) = $dbh->selectrow_array("SELECT count(*) FROM records WHERE domain_id = 1 AND host = '$newname'");
88 ok( $rcount == 1, " ... [$rcount] yep, hostname only occurs once" );
89 } else {
90 print "not ok: $msg";
91 }
92};
93
94subtest 'Update CNAME to colliding name' => sub {
95 $newname = 'mx1.example.com';
96 ($code, $msg) = $dnsdb->updateRec('n', 'n', 41, 1, \$newname, \$rectype, \$newval, 900);
97 ok( $code eq 'FAIL', "updateRec() claimed failure" );
98 if ($code eq 'FAIL') {
99 ($rcount) = $dbh->selectrow_array("SELECT count(*) FROM records WHERE domain_id = 1 AND host = '$newname' AND type <> 5");
100 ok( $rcount == 2, " ... [$rcount] record(s) with $newname already exist" );
101 like( $msg, qr/One or more non-CNAME records/, " ... returned matching error" );
102 }
103};
104
[952]105}; # domain tests
106
107
[951]108## Reverse zone
[952]109subtest 'Reverse zone tests' => sub {
[951]110
111subtest 'CNAME add - new reverse name' => sub {
112 $newval = '192.168.2.12';
113 $newname = '12.8-29.2.168.192.in-addr.arpa';
114 ($code, $msg) = $dnsdb->addRec('n', 'y', 1, \$newname, \$rectype, \$newval, 900);
115 ok( $code eq 'OK', "addRec() claimed succeess adding reverse zone CNAME" );
116 if ($code eq 'OK') {
117 ($rcount) = $dbh->selectrow_array("SELECT count(*) FROM records WHERE rdns_id = 1 AND val = '$newval'");
118 ok( $rcount == 1, " ... [$rcount] yep, IP only occurs once" );
119 } else {
120 print "not ok: $msg\n";
121 }
122};
123
124subtest 'CNAME add - existing/colliding non-CNAME' => sub {
125 $newval = '192.168.2.14';
126 $newname = '14.8-29.2.168.192.in-addr.arpa';
127 ($code, $msg) = $dnsdb->addRec('n', 'y', 1, \$newname, \$rectype, \$newval, 900);
128 ok( $code eq 'FAIL', "addRec() claimed failure adding colliding reverse zone CNAME" );
129 if ($code eq 'FAIL') {
130 ($rcount) = $dbh->selectrow_array("SELECT count(*) FROM records WHERE rdns_id = 1 AND val = '$newval' AND type <> 5");
131 ok( $rcount == 2, " ... [$rcount] record(s) with $newname already exist" );
132 like( $msg, qr/One or more non-CNAME records/, " ... returned matching error" );
133 }
134};
135
136subtest 'CNAME add - existing/colliding CNAME' => sub {
137 $newval = '192.168.2.13';
138 $newname = '13.8-29.2.168.192.in-addr.arpa';
139 ($code, $msg) = $dnsdb->addRec('n', 'y', 1, \$newname, \$rectype, \$newval, 900);
140 ok( $code eq 'FAIL', "addRec() claimed failure adding duplicate reverse zone CNAME" );
141 if ($code eq 'FAIL') {
142 ($rcount) = $dbh->selectrow_array("SELECT count(*) FROM records WHERE rdns_id = 1 AND val = '$newval' AND type = 5");
143 ok( $rcount == 1, " ... [$rcount] CNAME already exists" );
144 like( $msg, qr/already a CNAME present/, " ... returned matching error" );
145 }
146};
147
[952]148}; # reverse zone tests
149
[950]150done_testing();
Note: See TracBrowser for help on using the repository browser.