lego/providers/dns/loopia/loopia_test.go
2020-12-26 17:22:01 +01:00

214 lines
4.4 KiB
Go

package loopia
import (
"testing"
"time"
"github.com/go-acme/lego/v4/platform/tester"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
const envDomain = envNamespace + "DOMAIN"
var envTest = tester.NewEnvTest(
EnvAPIUser,
EnvAPIPassword,
EnvTTL,
EnvPollingInterval,
EnvPropagationTimeout,
EnvHTTPTimeout).
WithDomain(envDomain)
func TestSplitDomain(t *testing.T) {
provider := &DNSProvider{
findZoneByFqdn: func(fqdn string) (string, error) {
return "example.com.", nil
},
}
testCases := []struct {
desc string
fqdn string
subdomain string
domain string
}{
{
desc: "single subdomain",
fqdn: "subdomain.example.com",
subdomain: "subdomain",
domain: "example.com",
},
{
desc: "double subdomain",
fqdn: "sub.domain.example.com",
subdomain: "sub.domain",
domain: "example.com",
},
{
desc: "asterisk subdomain",
fqdn: "*.example.com",
subdomain: "*",
domain: "example.com",
},
}
for _, test := range testCases {
t.Run(test.desc, func(t *testing.T) {
subdomain, domain := provider.splitDomain(test.fqdn)
assert.Equal(t, test.subdomain, subdomain)
assert.Equal(t, test.domain, domain)
})
}
}
func TestNewDNSProvider(t *testing.T) {
testCases := []struct {
desc string
envVars map[string]string
expectedError string
}{
{
desc: "success",
envVars: map[string]string{
EnvAPIUser: "user",
EnvAPIPassword: "secret",
},
},
{
desc: "missing API user",
envVars: map[string]string{
EnvAPIUser: "",
EnvAPIPassword: "secret",
},
expectedError: "loopia: some credentials information are missing: LOOPIA_API_USER",
},
{
desc: "missing API password",
envVars: map[string]string{
EnvAPIUser: "user",
EnvAPIPassword: "",
},
expectedError: "loopia: some credentials information are missing: LOOPIA_API_PASSWORD",
},
{
desc: "missing credentials",
envVars: map[string]string{},
expectedError: "loopia: some credentials information are missing: LOOPIA_API_USER,LOOPIA_API_PASSWORD",
},
}
for _, test := range testCases {
t.Run(test.desc, func(t *testing.T) {
defer envTest.RestoreEnv()
envTest.ClearEnv()
envTest.Apply(test.envVars)
p, err := NewDNSProvider()
if len(test.expectedError) == 0 {
require.NoError(t, err)
require.NotNil(t, p)
} else {
require.Error(t, err)
require.EqualError(t, err, test.expectedError)
}
})
}
}
func TestNewDNSProviderConfig(t *testing.T) {
testCases := []struct {
desc string
config *Config
expectedTTL int
expectedError string
}{
{
desc: "success",
config: &Config{
APIUser: "user",
APIPassword: "secret",
TTL: 3600,
},
expectedTTL: 3600,
},
{
desc: "nil config user",
expectedError: "loopia: the configuration of the DNS provider is nil",
},
{
desc: "empty user",
config: &Config{
APIUser: "",
APIPassword: "secret",
TTL: 3600,
},
expectedError: "loopia: credentials missing",
},
{
desc: "empty password",
config: &Config{
APIUser: "user",
APIPassword: "",
TTL: 3600,
},
expectedTTL: 3600,
expectedError: "loopia: credentials missing",
},
{
desc: "too low TTL",
config: &Config{
APIUser: "user",
APIPassword: "secret",
TTL: 299,
},
expectedTTL: 300,
},
}
for _, test := range testCases {
t.Run(test.desc, func(t *testing.T) {
p, err := NewDNSProviderConfig(test.config)
if len(test.expectedError) == 0 {
require.NoError(t, err)
require.NotNil(t, p)
assert.Equal(t, test.expectedTTL, p.config.TTL)
} else {
require.Error(t, err)
assert.EqualError(t, err, test.expectedError)
}
})
}
}
func TestLivePresent(t *testing.T) {
if !envTest.IsLiveTest() {
t.Skip("skipping live test")
}
envTest.RestoreEnv()
provider, err := NewDNSProvider()
require.NoError(t, err)
err = provider.Present(envTest.GetDomain(), "", "123d==")
require.NoError(t, err)
}
func TestLiveCleanUp(t *testing.T) {
if !envTest.IsLiveTest() {
t.Skip("skipping live test")
}
envTest.RestoreEnv()
provider, err := NewDNSProvider()
require.NoError(t, err)
time.Sleep(2 * time.Second)
err = provider.CleanUp(envTest.GetDomain(), "", "123d==")
require.NoError(t, err)
}