mirror of
https://github.com/miekg/dns.git
synced 2025-08-11 03:56:58 +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 a3d7eba508
.
* 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())
|
|
}
|
|
}
|