mirror of
https://github.com/StackExchange/dnscontrol.git
synced 2024-05-11 05:55:12 +00:00
migrate code for github
This commit is contained in:
116
providers/cloudflare/preprocess_test.go
Normal file
116
providers/cloudflare/preprocess_test.go
Normal file
@@ -0,0 +1,116 @@
|
||||
package cloudflare
|
||||
|
||||
import (
|
||||
"net"
|
||||
"testing"
|
||||
|
||||
"github.com/StackExchange/dnscontrol/models"
|
||||
"github.com/StackExchange/dnscontrol/transform"
|
||||
)
|
||||
|
||||
func newDomainConfig() *models.DomainConfig {
|
||||
return &models.DomainConfig{
|
||||
Name: "test.com",
|
||||
Records: []*models.RecordConfig{},
|
||||
Metadata: map[string]string{},
|
||||
}
|
||||
}
|
||||
|
||||
func TestPreprocess_BoolValidation(t *testing.T) {
|
||||
cf := &CloudflareApi{}
|
||||
domain := newDomainConfig()
|
||||
domain.Records = append(domain.Records, &models.RecordConfig{Type: "A", Target: "1.2.3.4", Metadata: map[string]string{metaProxy: "on"}})
|
||||
domain.Records = append(domain.Records, &models.RecordConfig{Type: "A", Target: "1.2.3.4", Metadata: map[string]string{metaProxy: "fUll"}})
|
||||
domain.Records = append(domain.Records, &models.RecordConfig{Type: "A", Target: "1.2.3.4", Metadata: map[string]string{}})
|
||||
domain.Records = append(domain.Records, &models.RecordConfig{Type: "A", Target: "1.2.3.4", Metadata: map[string]string{metaProxy: "Off"}})
|
||||
domain.Records = append(domain.Records, &models.RecordConfig{Type: "A", Target: "1.2.3.4", Metadata: map[string]string{metaProxy: "off"}})
|
||||
err := cf.preprocessConfig(domain)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
expected := []string{"on", "full", "off", "off", "off"}
|
||||
// make sure only "on" or "off", and "full" are actually set
|
||||
for i, rec := range domain.Records {
|
||||
if rec.Metadata[metaProxy] != expected[i] {
|
||||
t.Fatalf("At index %d: expect '%s' but found '%s'", i, expected[i], rec.Metadata[metaProxy])
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestPreprocess_BoolValidation_Fails(t *testing.T) {
|
||||
cf := &CloudflareApi{}
|
||||
domain := newDomainConfig()
|
||||
domain.Records = append(domain.Records, &models.RecordConfig{Metadata: map[string]string{metaProxy: "true"}})
|
||||
err := cf.preprocessConfig(domain)
|
||||
if err == nil {
|
||||
t.Fatal("Expected validation error, but got none")
|
||||
}
|
||||
}
|
||||
|
||||
func TestPreprocess_DefaultProxy(t *testing.T) {
|
||||
cf := &CloudflareApi{}
|
||||
domain := newDomainConfig()
|
||||
domain.Metadata[metaProxyDefault] = "full"
|
||||
domain.Records = append(domain.Records, &models.RecordConfig{Type: "A", Target: "1.2.3.4", Metadata: map[string]string{metaProxy: "on"}})
|
||||
domain.Records = append(domain.Records, &models.RecordConfig{Type: "A", Target: "1.2.3.4", Metadata: map[string]string{metaProxy: "off"}})
|
||||
domain.Records = append(domain.Records, &models.RecordConfig{Type: "A", Target: "1.2.3.4", Metadata: map[string]string{}})
|
||||
err := cf.preprocessConfig(domain)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
expected := []string{"on", "off", "full"}
|
||||
for i, rec := range domain.Records {
|
||||
if rec.Metadata[metaProxy] != expected[i] {
|
||||
t.Fatalf("At index %d: expect '%s' but found '%s'", i, expected[i], rec.Metadata[metaProxy])
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestPreprocess_DefaultProxy_Validation(t *testing.T) {
|
||||
cf := &CloudflareApi{}
|
||||
domain := newDomainConfig()
|
||||
domain.Metadata[metaProxyDefault] = "true"
|
||||
err := cf.preprocessConfig(domain)
|
||||
if err == nil {
|
||||
t.Fatal("Expected validation error, but got none")
|
||||
}
|
||||
}
|
||||
|
||||
func TestIpRewriting(t *testing.T) {
|
||||
var tests = []struct {
|
||||
Given, Expected string
|
||||
Proxy string
|
||||
}{
|
||||
//outside of range
|
||||
{"5.5.5.5", "5.5.5.5", "full"},
|
||||
{"5.5.5.5", "5.5.5.5", "on"},
|
||||
// inside range, but not proxied
|
||||
{"1.2.3.4", "1.2.3.4", "on"},
|
||||
//inside range and proxied
|
||||
{"1.2.3.4", "255.255.255.4", "full"},
|
||||
}
|
||||
cf := &CloudflareApi{}
|
||||
domain := newDomainConfig()
|
||||
cf.ipConversions = []transform.IpConversion{{net.ParseIP("1.2.3.0"), net.ParseIP("1.2.3.40"), net.ParseIP("255.255.255.0"), nil}}
|
||||
for _, tst := range tests {
|
||||
rec := &models.RecordConfig{Type: "A", Target: tst.Given, Metadata: map[string]string{metaProxy: tst.Proxy}}
|
||||
domain.Records = append(domain.Records, rec)
|
||||
}
|
||||
err := cf.preprocessConfig(domain)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
for i, tst := range tests {
|
||||
rec := domain.Records[i]
|
||||
if rec.Target != tst.Expected {
|
||||
t.Fatalf("At index %d, expected target of %s, but found %s.", i, tst.Expected, rec.Target)
|
||||
}
|
||||
if tst.Proxy == "full" && tst.Given != tst.Expected && rec.Metadata[metaOriginalIP] != tst.Given {
|
||||
t.Fatalf("At index %d, expected original_ip to be set", i)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestCnameValidation(t *testing.T) {
|
||||
|
||||
}
|
Reference in New Issue
Block a user