1package dnspod
2
3import (
4	"testing"
5	"time"
6
7	"github.com/go-acme/lego/v3/platform/tester"
8	"github.com/stretchr/testify/require"
9)
10
11const envDomain = envNamespace + "DOMAIN"
12
13var envTest = tester.NewEnvTest(EnvAPIKey).
14	WithDomain(envDomain)
15
16func TestNewDNSProvider(t *testing.T) {
17	testCases := []struct {
18		desc     string
19		envVars  map[string]string
20		expected string
21	}{
22		{
23			desc: "success",
24			envVars: map[string]string{
25				EnvAPIKey: "123",
26			},
27		},
28		{
29			desc: "missing api key",
30			envVars: map[string]string{
31				EnvAPIKey: "",
32			},
33			expected: "dnspod: some credentials information are missing: DNSPOD_API_KEY",
34		},
35	}
36
37	for _, test := range testCases {
38		t.Run(test.desc, func(t *testing.T) {
39			defer envTest.RestoreEnv()
40			envTest.ClearEnv()
41
42			envTest.Apply(test.envVars)
43
44			p, err := NewDNSProvider()
45
46			if len(test.expected) == 0 {
47				require.NoError(t, err)
48				require.NotNil(t, p)
49				require.NotNil(t, p.config)
50				require.NotNil(t, p.client)
51			} else {
52				require.EqualError(t, err, test.expected)
53			}
54		})
55	}
56}
57
58func TestNewDNSProviderConfig(t *testing.T) {
59	testCases := []struct {
60		desc       string
61		loginToken string
62		expected   string
63	}{
64		{
65			desc:       "success",
66			loginToken: "123",
67		},
68		{
69			desc:     "missing credentials",
70			expected: "dnspod: credentials missing",
71		},
72	}
73
74	for _, test := range testCases {
75		t.Run(test.desc, func(t *testing.T) {
76			config := NewDefaultConfig()
77			config.LoginToken = test.loginToken
78
79			p, err := NewDNSProviderConfig(config)
80
81			if len(test.expected) == 0 {
82				require.NoError(t, err)
83				require.NotNil(t, p)
84				require.NotNil(t, p.config)
85				require.NotNil(t, p.client)
86			} else {
87				require.EqualError(t, err, test.expected)
88			}
89		})
90	}
91}
92
93func TestLivePresent(t *testing.T) {
94	if !envTest.IsLiveTest() {
95		t.Skip("skipping live test")
96	}
97
98	envTest.RestoreEnv()
99	provider, err := NewDNSProvider()
100	require.NoError(t, err)
101
102	err = provider.Present(envTest.GetDomain(), "", "123d==")
103	require.NoError(t, err)
104}
105
106func TestLiveCleanUp(t *testing.T) {
107	if !envTest.IsLiveTest() {
108		t.Skip("skipping live test")
109	}
110
111	envTest.RestoreEnv()
112	provider, err := NewDNSProvider()
113	require.NoError(t, err)
114
115	time.Sleep(1 * time.Second)
116
117	err = provider.CleanUp(envTest.GetDomain(), "", "123d==")
118	require.NoError(t, err)
119}
120