lego/providers/dns/exec/exec_test.go
Ludovic Fernandez 42941ccea6
Refactor the core of the lib (#700)
- Packages
- Isolate code used by the CLI into the package `cmd`
- (experimental) Add e2e tests for HTTP01, TLS-ALPN-01 and DNS-01, use [Pebble](https://github.com/letsencrypt/pebble) and [challtestsrv](https://github.com/letsencrypt/boulder/tree/master/test/challtestsrv) 
- Support non-ascii domain name (punnycode)
- Check all challenges in a predictable order
- No more global exported variables
- Archive revoked certificates
- Fixes revocation for subdomains and non-ascii domains
- Disable pending authorizations
- use pointer for RemoteError/ProblemDetails
- Poll authz URL instead of challenge URL
- The ability for a DNS provider to solve the challenge sequentially
- Check all nameservers in a predictable order
- Option to disable the complete propagation Requirement
- CLI, support for renew with CSR
- CLI, add SAN on renew
- Add command to list certificates.
- Logs every iteration of waiting for the propagation
- update DNSimple client
- update github.com/miekg/dns
2018-12-06 22:50:17 +01:00

158 lines
3 KiB
Go

package exec
import (
"fmt"
"os"
"testing"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/mock"
"github.com/stretchr/testify/require"
"github.com/xenolf/lego/log"
)
func TestDNSProvider_Present(t *testing.T) {
backupLogger := log.Logger
defer func() {
log.Logger = backupLogger
}()
logRecorder := &LogRecorder{}
log.Logger = logRecorder
type expected struct {
args string
error bool
}
testCases := []struct {
desc string
config *Config
expected expected
}{
{
desc: "Standard mode",
config: &Config{
Program: "echo",
Mode: "",
},
expected: expected{
args: "present _acme-challenge.domain. pW9ZKG0xz_PCriK-nCMOjADy9eJcgGWIzkkj2fN4uZM\n",
},
},
{
desc: "program error",
config: &Config{
Program: "ogellego",
Mode: "",
},
expected: expected{error: true},
},
{
desc: "Raw mode",
config: &Config{
Program: "echo",
Mode: "RAW",
},
expected: expected{
args: "present -- domain token keyAuth\n",
},
},
}
var message string
logRecorder.On("Println", mock.Anything).Run(func(args mock.Arguments) {
message = args.String(0)
fmt.Fprintln(os.Stdout, "XXX", message)
})
for _, test := range testCases {
t.Run(test.desc, func(t *testing.T) {
message = ""
provider, err := NewDNSProviderConfig(test.config)
require.NoError(t, err)
err = provider.Present("domain", "token", "keyAuth")
if test.expected.error {
require.Error(t, err)
} else {
require.NoError(t, err)
assert.Equal(t, test.expected.args, message)
}
})
}
}
func TestDNSProvider_CleanUp(t *testing.T) {
backupLogger := log.Logger
defer func() {
log.Logger = backupLogger
}()
logRecorder := &LogRecorder{}
log.Logger = logRecorder
type expected struct {
args string
error bool
}
testCases := []struct {
desc string
config *Config
expected expected
}{
{
desc: "Standard mode",
config: &Config{
Program: "echo",
Mode: "",
},
expected: expected{
args: "cleanup _acme-challenge.domain. pW9ZKG0xz_PCriK-nCMOjADy9eJcgGWIzkkj2fN4uZM\n",
},
},
{
desc: "program error",
config: &Config{
Program: "ogellego",
Mode: "",
},
expected: expected{error: true},
},
{
desc: "Raw mode",
config: &Config{
Program: "echo",
Mode: "RAW",
},
expected: expected{
args: "cleanup -- domain token keyAuth\n",
},
},
}
var message string
logRecorder.On("Println", mock.Anything).Run(func(args mock.Arguments) {
message = args.String(0)
fmt.Fprintln(os.Stdout, "XXX", message)
})
for _, test := range testCases {
t.Run(test.desc, func(t *testing.T) {
message = ""
provider, err := NewDNSProviderConfig(test.config)
require.NoError(t, err)
err = provider.CleanUp("domain", "token", "keyAuth")
if test.expected.error {
require.Error(t, err)
} else {
require.NoError(t, err)
assert.Equal(t, test.expected.args, message)
}
})
}
}