lego/providers/dns/vkcloud/vkcloud_test.go
Andrew Kluev 8fe27e0cc3
Add DNS provider for VK Cloud (#1706)
Co-authored-by: Fernandez Ludovic <ldez@users.noreply.github.com>
2022-09-02 22:56:10 +02:00

209 lines
5.2 KiB
Go

package vkcloud
import (
"testing"
"github.com/go-acme/lego/v4/platform/tester"
"github.com/stretchr/testify/require"
)
const envDomain = envNamespace + "DOMAIN"
const (
fakeProjectID = "an_project_id_from_vk_cloud_ui"
fakeUsername = "vkclouduser@email.address"
fakePasswd = "vkcloudpasswd"
)
var envTest = tester.NewEnvTest(EnvProjectID, EnvUsername, EnvPassword).WithDomain(envDomain)
func TestNewDNSProvider(t *testing.T) {
testCases := []struct {
desc string
envVars map[string]string
expected string
}{
{
desc: "success",
envVars: map[string]string{
EnvProjectID: fakeProjectID,
EnvUsername: fakeUsername,
EnvPassword: fakePasswd,
},
},
{
desc: "missing project id",
envVars: map[string]string{
EnvUsername: fakeUsername,
EnvPassword: fakePasswd,
},
expected: "vkcloud: some credentials information are missing: VK_CLOUD_PROJECT_ID",
},
{
desc: "missing username",
envVars: map[string]string{
EnvProjectID: fakeProjectID,
EnvPassword: fakePasswd,
},
expected: "vkcloud: some credentials information are missing: VK_CLOUD_USERNAME",
},
{
desc: "missing password",
envVars: map[string]string{
EnvProjectID: fakeProjectID,
EnvUsername: fakeUsername,
},
expected: "vkcloud: some credentials information are missing: VK_CLOUD_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 test.expected == "" {
require.NoError(t, err)
require.NotNil(t, p)
require.NotNil(t, p.config)
} else {
require.EqualError(t, err, test.expected)
}
})
}
}
func TestNewDNSProviderConfig(t *testing.T) {
testCases := []struct {
desc string
config *Config
expected string
}{
{
desc: "success",
config: &Config{
ProjectID: fakeProjectID,
Username: fakeUsername,
Password: fakePasswd,
DNSEndpoint: defaultDNSEndpoint,
IdentityEndpoint: defaultIdentityEndpoint,
DomainName: defaultDomainName,
},
},
{
desc: "nil config",
config: nil,
expected: "vkcloud: the configuration of the DNS provider is nil",
},
{
desc: "missing project id",
config: &Config{
Username: fakeUsername,
Password: fakePasswd,
DNSEndpoint: defaultDNSEndpoint,
IdentityEndpoint: defaultIdentityEndpoint,
DomainName: defaultDomainName,
},
expected: "vkcloud: unable to build VK Cloud client: project id is missing in credentials information",
},
{
desc: "missing username",
config: &Config{
ProjectID: fakeProjectID,
Password: fakePasswd,
DNSEndpoint: defaultDNSEndpoint,
IdentityEndpoint: defaultIdentityEndpoint,
DomainName: defaultDomainName,
},
expected: "vkcloud: unable to build VK Cloud client: username is missing in credentials information",
},
{
desc: "missing password",
config: &Config{
ProjectID: fakeProjectID,
Username: fakeUsername,
DNSEndpoint: defaultDNSEndpoint,
IdentityEndpoint: defaultIdentityEndpoint,
DomainName: defaultDomainName,
},
expected: "vkcloud: unable to build VK Cloud client: password is missing in credentials information",
},
{
desc: "missing dns endpoint",
config: &Config{
ProjectID: fakeProjectID,
Username: fakeUsername,
Password: fakePasswd,
IdentityEndpoint: defaultIdentityEndpoint,
DomainName: defaultDomainName,
},
expected: "vkcloud: DNS endpoint is missing in config",
},
{
desc: "missing identity endpoint",
config: &Config{
ProjectID: fakeProjectID,
Username: fakeUsername,
Password: fakePasswd,
DNSEndpoint: defaultDNSEndpoint,
DomainName: defaultDomainName,
},
expected: "vkcloud: unable to build VK Cloud client: identity endpoint is missing in config",
},
{
desc: "missing domain name",
config: &Config{
ProjectID: fakeProjectID,
Username: fakeUsername,
Password: fakePasswd,
DNSEndpoint: defaultDNSEndpoint,
IdentityEndpoint: defaultIdentityEndpoint,
},
expected: "vkcloud: unable to build VK Cloud client: domain name is missing in config",
},
}
for _, test := range testCases {
t.Run(test.desc, func(t *testing.T) {
p, err := NewDNSProviderConfig(test.config)
if test.expected == "" {
require.NoError(t, err)
require.NotNil(t, p)
require.NotNil(t, p.config)
} else {
require.EqualError(t, err, test.expected)
}
})
}
}
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)
err = provider.CleanUp(envTest.GetDomain(), "", "123d==")
require.NoError(t, err)
}