mirror of
https://github.com/StackExchange/dnscontrol.git
synced 2024-05-11 05:55:12 +00:00
113 lines
3.0 KiB
Go
113 lines
3.0 KiB
Go
package diff
|
|
|
|
import (
|
|
"fmt"
|
|
"strings"
|
|
"testing"
|
|
|
|
"github.com/miekg/dns/dnsutil"
|
|
)
|
|
|
|
type myRecord string //@ A 1 1.2.3.4
|
|
|
|
func (m myRecord) GetName() string {
|
|
name := strings.SplitN(string(m), " ", 4)[0]
|
|
return dnsutil.AddOrigin(name, "example.com")
|
|
}
|
|
func (m myRecord) GetType() string {
|
|
return strings.SplitN(string(m), " ", 4)[1]
|
|
}
|
|
func (m myRecord) GetContent() string {
|
|
return strings.SplitN(string(m), " ", 4)[3]
|
|
}
|
|
func (m myRecord) GetComparisionData() string {
|
|
return fmt.Sprint(strings.SplitN(string(m), " ", 4)[2])
|
|
}
|
|
|
|
func TestAdditionsOnly(t *testing.T) {
|
|
desired := []Record{
|
|
myRecord("@ A 1 1.2.3.4"),
|
|
}
|
|
existing := []Record{}
|
|
checkLengths(t, existing, desired, 0, 1, 0, 0)
|
|
}
|
|
|
|
func TestDeletionsOnly(t *testing.T) {
|
|
existing := []Record{
|
|
myRecord("@ A 1 1.2.3.4"),
|
|
}
|
|
desired := []Record{}
|
|
checkLengths(t, existing, desired, 0, 0, 1, 0)
|
|
}
|
|
|
|
func TestModification(t *testing.T) {
|
|
existing := []Record{
|
|
myRecord("www A 1 1.1.1.1"),
|
|
myRecord("@ A 1 1.2.3.4"),
|
|
}
|
|
desired := []Record{
|
|
myRecord("@ A 32 1.2.3.4"),
|
|
myRecord("www A 1 1.1.1.1"),
|
|
}
|
|
un, _, _, mod := checkLengths(t, existing, desired, 1, 0, 0, 1)
|
|
if t.Failed() {
|
|
return
|
|
}
|
|
if un[0].Desired != desired[1] || un[0].Existing != existing[0] {
|
|
t.Error("Expected unchanged records to be correlated")
|
|
}
|
|
if mod[0].Desired != desired[0] || mod[0].Existing != existing[1] {
|
|
t.Errorf("Expected modified records to be correlated")
|
|
}
|
|
}
|
|
|
|
func TestUnchangedWithAddition(t *testing.T) {
|
|
existing := []Record{
|
|
myRecord("www A 1 1.1.1.1"),
|
|
}
|
|
desired := []Record{
|
|
myRecord("www A 1 1.2.3.4"),
|
|
myRecord("www A 1 1.1.1.1"),
|
|
}
|
|
un, _, _, _ := checkLengths(t, existing, desired, 1, 1, 0, 0)
|
|
if un[0].Desired != desired[1] || un[0].Existing != existing[0] {
|
|
t.Errorf("Expected unchanged records to be correlated")
|
|
}
|
|
}
|
|
|
|
func TestOutOfOrderRecords(t *testing.T) {
|
|
existing := []Record{
|
|
myRecord("www A 1 1.1.1.1"),
|
|
myRecord("www A 1 2.2.2.2"),
|
|
myRecord("www A 1 3.3.3.3"),
|
|
}
|
|
desired := []Record{
|
|
myRecord("www A 1 1.1.1.1"),
|
|
myRecord("www A 1 2.2.2.2"),
|
|
myRecord("www A 1 2.2.2.3"),
|
|
myRecord("www A 10 3.3.3.3"),
|
|
}
|
|
_, _, _, mods := checkLengths(t, existing, desired, 2, 1, 0, 1)
|
|
if mods[0].Desired != desired[3] || mods[0].Existing != existing[2] {
|
|
t.Fatalf("Expected to match %s and %s, but matched %s and %s", existing[2], desired[3], mods[0].Existing, mods[0].Desired)
|
|
}
|
|
|
|
}
|
|
|
|
func checkLengths(t *testing.T, existing, desired []Record, unCount, createCount, delCount, modCount int) (un, cre, del, mod Changeset) {
|
|
un, cre, del, mod = IncrementalDiff(existing, desired)
|
|
if len(un) != unCount {
|
|
t.Errorf("Got %d unchanged records, but expected %d", len(un), unCount)
|
|
}
|
|
if len(cre) != createCount {
|
|
t.Errorf("Got %d records to create, but expected %d", len(cre), createCount)
|
|
}
|
|
if len(del) != delCount {
|
|
t.Errorf("Got %d records to delete, but expected %d", len(del), delCount)
|
|
}
|
|
if len(mod) != modCount {
|
|
t.Errorf("Got %d records to modify, but expected %d", len(mod), modCount)
|
|
}
|
|
return
|
|
}
|