mirror of
https://github.com/miekg/dns.git
synced 2025-10-09 08:51:00 +02:00
* Prevent IsDuplicate from panicing on wrong Rrtype * Replace the isDuplicateRdata switch with an interface method This is substantially simpler and avoids the need to use reflect. * Add equal RR case to TestDuplicateWrongRrtype * Move RR_Header duplicate checking back into IsDuplicate This restores the previous behaviour that RR_Header's were never equal to each other. * Revert "Move RR_Header duplicate checking back into IsDuplicate" This reverts commit a3d7eba50825d546074d81084e639bbecf9cbb57. * Run go fmt on package This was a mistake when I merged the master branch into this PR. * Move isDuplicate method to end of RR interface
85 lines
2.6 KiB
Go
85 lines
2.6 KiB
Go
package dns
|
|
|
|
import "testing"
|
|
|
|
func TestDuplicateA(t *testing.T) {
|
|
a1, _ := NewRR("www.example.org. 2700 IN A 127.0.0.1")
|
|
a2, _ := NewRR("www.example.org. IN A 127.0.0.1")
|
|
if !IsDuplicate(a1, a2) {
|
|
t.Errorf("expected %s/%s to be duplicates, but got false", a1.String(), a2.String())
|
|
}
|
|
|
|
a2, _ = NewRR("www.example.org. IN A 127.0.0.2")
|
|
if IsDuplicate(a1, a2) {
|
|
t.Errorf("expected %s/%s not to be duplicates, but got true", a1.String(), a2.String())
|
|
}
|
|
}
|
|
|
|
func TestDuplicateTXT(t *testing.T) {
|
|
a1, _ := NewRR("www.example.org. IN TXT \"aa\"")
|
|
a2, _ := NewRR("www.example.org. IN TXT \"aa\"")
|
|
|
|
if !IsDuplicate(a1, a2) {
|
|
t.Errorf("expected %s/%s to be duplicates, but got false", a1.String(), a2.String())
|
|
}
|
|
|
|
a2, _ = NewRR("www.example.org. IN TXT \"aa\" \"bb\"")
|
|
if IsDuplicate(a1, a2) {
|
|
t.Errorf("expected %s/%s not to be duplicates, but got true", a1.String(), a2.String())
|
|
}
|
|
|
|
a1, _ = NewRR("www.example.org. IN TXT \"aa\" \"bc\"")
|
|
if IsDuplicate(a1, a2) {
|
|
t.Errorf("expected %s/%s not to be duplicates, but got true", a1.String(), a2.String())
|
|
}
|
|
}
|
|
|
|
func TestDuplicateOwner(t *testing.T) {
|
|
a1, _ := NewRR("www.example.org. IN A 127.0.0.1")
|
|
a2, _ := NewRR("www.example.org. IN A 127.0.0.1")
|
|
if !IsDuplicate(a1, a2) {
|
|
t.Errorf("expected %s/%s to be duplicates, but got false", a1.String(), a2.String())
|
|
}
|
|
|
|
a2, _ = NewRR("WWw.exaMPle.org. IN A 127.0.0.2")
|
|
if IsDuplicate(a1, a2) {
|
|
t.Errorf("expected %s/%s to be duplicates, but got false", a1.String(), a2.String())
|
|
}
|
|
}
|
|
|
|
func TestDuplicateDomain(t *testing.T) {
|
|
a1, _ := NewRR("www.example.org. IN CNAME example.org.")
|
|
a2, _ := NewRR("www.example.org. IN CNAME example.org.")
|
|
if !IsDuplicate(a1, a2) {
|
|
t.Errorf("expected %s/%s to be duplicates, but got false", a1.String(), a2.String())
|
|
}
|
|
|
|
a2, _ = NewRR("www.example.org. IN CNAME exAMPLe.oRG.")
|
|
if !IsDuplicate(a1, a2) {
|
|
t.Errorf("expected %s/%s to be duplicates, but got false", a1.String(), a2.String())
|
|
}
|
|
}
|
|
|
|
func TestDuplicateWrongRrtype(t *testing.T) {
|
|
// Test that IsDuplicate won't panic for a record that's lying about
|
|
// it's Rrtype.
|
|
|
|
r1 := &A{Hdr: RR_Header{Rrtype: TypeA}}
|
|
r2 := &AAAA{Hdr: RR_Header{Rrtype: TypeA}}
|
|
if IsDuplicate(r1, r2) {
|
|
t.Errorf("expected %s/%s not to be duplicates, but got true", r1.String(), r2.String())
|
|
}
|
|
|
|
r3 := &AAAA{Hdr: RR_Header{Rrtype: TypeA}}
|
|
r4 := &A{Hdr: RR_Header{Rrtype: TypeA}}
|
|
if IsDuplicate(r3, r4) {
|
|
t.Errorf("expected %s/%s not to be duplicates, but got true", r3.String(), r4.String())
|
|
}
|
|
|
|
r5 := &AAAA{Hdr: RR_Header{Rrtype: TypeA}}
|
|
r6 := &AAAA{Hdr: RR_Header{Rrtype: TypeA}}
|
|
if !IsDuplicate(r5, r6) {
|
|
t.Errorf("expected %s/%s to be duplicates, but got false", r5.String(), r6.String())
|
|
}
|
|
}
|