mirror of
https://github.com/kubernetes-sigs/external-dns.git
synced 2025-08-06 01:26:59 +02:00
217 lines
5.2 KiB
Go
217 lines
5.2 KiB
Go
package provider
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
transip "github.com/transip/gotransip/domain"
|
|
|
|
"sigs.k8s.io/external-dns/endpoint"
|
|
)
|
|
|
|
func TestTransIPDnsEntriesAreEqual(t *testing.T) {
|
|
p := TransIPProvider{}
|
|
// test with equal set
|
|
a := transip.DNSEntries{
|
|
transip.DNSEntry{
|
|
Name: "www.example.org",
|
|
Type: transip.DNSEntryTypeCNAME,
|
|
TTL: 3600,
|
|
Content: "www.example.com",
|
|
},
|
|
transip.DNSEntry{
|
|
Name: "www.example.com",
|
|
Type: transip.DNSEntryTypeA,
|
|
TTL: 3600,
|
|
Content: "192.168.0.1",
|
|
},
|
|
}
|
|
|
|
b := transip.DNSEntries{
|
|
transip.DNSEntry{
|
|
Name: "www.example.com",
|
|
Type: transip.DNSEntryTypeA,
|
|
TTL: 3600,
|
|
Content: "192.168.0.1",
|
|
},
|
|
transip.DNSEntry{
|
|
Name: "www.example.org",
|
|
Type: transip.DNSEntryTypeCNAME,
|
|
TTL: 3600,
|
|
Content: "www.example.com",
|
|
},
|
|
}
|
|
|
|
assert.Equal(t, true, p.dnsEntriesAreEqual(a, b))
|
|
|
|
// change type on one of b's records
|
|
b[1].Type = transip.DNSEntryTypeNS
|
|
assert.Equal(t, false, p.dnsEntriesAreEqual(a, b))
|
|
b[1].Type = transip.DNSEntryTypeCNAME
|
|
|
|
// change ttl on one of b's records
|
|
b[1].TTL = 1800
|
|
assert.Equal(t, false, p.dnsEntriesAreEqual(a, b))
|
|
b[1].TTL = 3600
|
|
|
|
// change name on one of b's records
|
|
b[1].Name = "example.org"
|
|
assert.Equal(t, false, p.dnsEntriesAreEqual(a, b))
|
|
|
|
// remove last entry of b
|
|
b = b[:1]
|
|
assert.Equal(t, false, p.dnsEntriesAreEqual(a, b))
|
|
}
|
|
|
|
func TestTransIPGetMinimalValidTTL(t *testing.T) {
|
|
p := TransIPProvider{}
|
|
// test with 'unconfigured' TTL
|
|
ep := &endpoint.Endpoint{}
|
|
assert.Equal(t, int64(transipMinimalValidTTL), p.getMinimalValidTTL(ep))
|
|
|
|
// test with lower than minimal ttl
|
|
ep.RecordTTL = (transipMinimalValidTTL - 1)
|
|
assert.Equal(t, int64(transipMinimalValidTTL), p.getMinimalValidTTL(ep))
|
|
|
|
// test with higher than minimal ttl
|
|
ep.RecordTTL = (transipMinimalValidTTL + 1)
|
|
assert.Equal(t, int64(transipMinimalValidTTL+1), p.getMinimalValidTTL(ep))
|
|
}
|
|
|
|
func TestTransIPRecordNameForEndpoint(t *testing.T) {
|
|
p := TransIPProvider{}
|
|
ep := &endpoint.Endpoint{
|
|
DNSName: "example.org",
|
|
}
|
|
d := transip.Domain{
|
|
Name: "example.org",
|
|
}
|
|
|
|
assert.Equal(t, "@", p.recordNameForEndpoint(ep, d))
|
|
|
|
ep.DNSName = "www.example.org"
|
|
assert.Equal(t, "www", p.recordNameForEndpoint(ep, d))
|
|
}
|
|
|
|
func TestTransIPEndpointNameForRecord(t *testing.T) {
|
|
p := TransIPProvider{}
|
|
r := transip.DNSEntry{
|
|
Name: "@",
|
|
}
|
|
d := transip.Domain{
|
|
Name: "example.org",
|
|
}
|
|
|
|
assert.Equal(t, d.Name, p.endpointNameForRecord(r, d))
|
|
|
|
r.Name = "www"
|
|
assert.Equal(t, "www.example.org", p.endpointNameForRecord(r, d))
|
|
}
|
|
|
|
func TestTransIPAddEndpointToEntries(t *testing.T) {
|
|
p := TransIPProvider{}
|
|
|
|
// prepare endpoint
|
|
ep := &endpoint.Endpoint{
|
|
DNSName: "www.example.org",
|
|
RecordType: "A",
|
|
RecordTTL: 1800,
|
|
Targets: []string{
|
|
"192.168.0.1",
|
|
"192.168.0.2",
|
|
},
|
|
}
|
|
|
|
// prepare zone with DNS entry set
|
|
zone := transip.Domain{
|
|
Name: "example.org",
|
|
// 2 matching A records
|
|
DNSEntries: transip.DNSEntries{
|
|
// 1 non-matching A record
|
|
transip.DNSEntry{
|
|
Name: "mail",
|
|
Type: transip.DNSEntryTypeA,
|
|
Content: "192.168.0.1",
|
|
TTL: 3600,
|
|
},
|
|
// 1 non-matching MX record
|
|
transip.DNSEntry{
|
|
Name: "@",
|
|
Type: transip.DNSEntryTypeMX,
|
|
Content: "mail.example.org",
|
|
TTL: 3600,
|
|
},
|
|
},
|
|
}
|
|
|
|
// add endpoint to zone's entries
|
|
result := p.addEndpointToEntries(ep, zone, zone.DNSEntries)
|
|
|
|
assert.Equal(t, 4, len(result))
|
|
assert.Equal(t, "mail", result[0].Name)
|
|
assert.Equal(t, transip.DNSEntryTypeA, result[0].Type)
|
|
assert.Equal(t, "@", result[1].Name)
|
|
assert.Equal(t, transip.DNSEntryTypeMX, result[1].Type)
|
|
assert.Equal(t, "www", result[2].Name)
|
|
assert.Equal(t, transip.DNSEntryTypeA, result[2].Type)
|
|
assert.Equal(t, "192.168.0.1", result[2].Content)
|
|
assert.Equal(t, int64(1800), result[2].TTL)
|
|
assert.Equal(t, "www", result[3].Name)
|
|
assert.Equal(t, transip.DNSEntryTypeA, result[3].Type)
|
|
assert.Equal(t, "192.168.0.2", result[3].Content)
|
|
assert.Equal(t, int64(1800), result[3].TTL)
|
|
}
|
|
|
|
func TestTransIPRemoveEndpointFromEntries(t *testing.T) {
|
|
p := TransIPProvider{}
|
|
|
|
// prepare endpoint
|
|
ep := &endpoint.Endpoint{
|
|
DNSName: "www.example.org",
|
|
RecordType: "A",
|
|
}
|
|
|
|
// prepare zone with DNS entry set
|
|
zone := transip.Domain{
|
|
Name: "example.org",
|
|
// 2 matching A records
|
|
DNSEntries: transip.DNSEntries{
|
|
transip.DNSEntry{
|
|
Name: "www",
|
|
Type: transip.DNSEntryTypeA,
|
|
Content: "192.168.0.1",
|
|
TTL: 3600,
|
|
},
|
|
transip.DNSEntry{
|
|
Name: "www",
|
|
Type: transip.DNSEntryTypeA,
|
|
Content: "192.168.0.2",
|
|
TTL: 3600,
|
|
},
|
|
// 1 non-matching A record
|
|
transip.DNSEntry{
|
|
Name: "mail",
|
|
Type: transip.DNSEntryTypeA,
|
|
Content: "192.168.0.1",
|
|
TTL: 3600,
|
|
},
|
|
// 1 non-matching MX record
|
|
transip.DNSEntry{
|
|
Name: "@",
|
|
Type: transip.DNSEntryTypeMX,
|
|
Content: "mail.example.org",
|
|
TTL: 3600,
|
|
},
|
|
},
|
|
}
|
|
|
|
// remove endpoint from zone's entries
|
|
result := p.removeEndpointFromEntries(ep, zone)
|
|
|
|
assert.Equal(t, 2, len(result))
|
|
assert.Equal(t, "mail", result[0].Name)
|
|
assert.Equal(t, transip.DNSEntryTypeA, result[0].Type)
|
|
assert.Equal(t, "@", result[1].Name)
|
|
assert.Equal(t, transip.DNSEntryTypeMX, result[1].Type)
|
|
}
|