Files
nginx-proxy-manager/backend/internal/acme/acmesh_test.go
Jamie Curnow 556f8b773b Work on acme.sh hander
and dns providers
2021-08-20 08:21:19 +10:00

191 lines
4.4 KiB
Go

package acme
import (
"testing"
"npm/internal/entity/dnsprovider"
"github.com/stretchr/testify/assert"
)
// Tear up/down
/*
func TestMain(m *testing.M) {
config.Init(&version, &commit, &sentryDSN)
code := m.Run()
os.Exit(code)
}
*/
// TODO configurable
const acmeLogFile = "/data/logs/acme.sh.log"
const acmeWebroot = "/data/acme/wellknown"
func TestBuildCertRequestArgs(t *testing.T) {
type want struct {
args []string
err error
}
tests := []struct {
name string
domains []string
method string
caBundle string
outputFullchainFile string
outputKeyFile string
dnsProvider *dnsprovider.Model
want want
}{
{
name: "http single domain",
domains: []string{"example.com"},
method: "http",
caBundle: "",
outputFullchainFile: "/data/acme/certs/a.crt",
outputKeyFile: "/data/acme/certs/example.com.key",
dnsProvider: nil,
want: want{
args: []string{
"--issue",
"--log",
acmeLogFile,
"--fullchain-file",
"/data/acme/certs/a.crt",
"--key-file",
"/data/acme/certs/example.com.key",
"-d",
"example.com",
"-w",
acmeWebroot,
},
err: nil,
},
},
{
name: "http multiple domains",
domains: []string{"example.com", "example-two.com", "example-three.com"},
method: "http",
caBundle: "",
outputFullchainFile: "/data/acme/certs/a.crt",
outputKeyFile: "/data/acme/certs/example.com.key",
dnsProvider: nil,
want: want{
args: []string{
"--issue",
"--log",
acmeLogFile,
"--fullchain-file",
"/data/acme/certs/a.crt",
"--key-file",
"/data/acme/certs/example.com.key",
"-d",
"example.com",
"-w",
acmeWebroot,
"-d",
"example-two.com",
"-d",
"example-three.com",
},
err: nil,
},
},
{
name: "http single domain with dns provider",
domains: []string{"example.com"},
method: "http",
caBundle: "",
outputFullchainFile: "/data/acme/certs/a.crt",
outputKeyFile: "/data/acme/certs/example.com.key",
dnsProvider: &dnsprovider.Model{
AcmeShName: "dns_cf",
},
want: want{
args: nil,
err: ErrHTTPHasDNSProvider,
},
},
{
name: "dns single domain",
domains: []string{"example.com"},
method: "dns",
caBundle: "",
outputFullchainFile: "/data/acme/certs/a.crt",
outputKeyFile: "/data/acme/certs/example.com.key",
dnsProvider: &dnsprovider.Model{
AcmeShName: "dns_cf",
},
want: want{
args: []string{
"--issue",
"--log",
acmeLogFile,
"--fullchain-file",
"/data/acme/certs/a.crt",
"--key-file",
"/data/acme/certs/example.com.key",
"-d",
"example.com",
"--dns",
"dns_cf",
},
err: nil,
},
},
{
name: "dns multiple domains",
domains: []string{"example.com", "example-two.com", "example-three.com"},
method: "dns",
caBundle: "",
outputFullchainFile: "/data/acme/certs/a.crt",
outputKeyFile: "/data/acme/certs/example.com.key",
dnsProvider: &dnsprovider.Model{
AcmeShName: "dns_cf",
},
want: want{
args: []string{
"--issue",
"--log",
acmeLogFile,
"--fullchain-file",
"/data/acme/certs/a.crt",
"--key-file",
"/data/acme/certs/example.com.key",
"-d",
"example.com",
"--dns",
"dns_cf",
"-d",
"example-two.com",
"-d",
"example-three.com",
},
err: nil,
},
},
{
name: "dns single domain no provider",
domains: []string{"example.com"},
method: "dns",
caBundle: "",
outputFullchainFile: "/data/acme/certs/a.crt",
outputKeyFile: "/data/acme/certs/example.com.key",
dnsProvider: nil,
want: want{
args: nil,
err: ErrDNSNeedsDNSProvider,
},
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
args, err := buildCertRequestArgs(tt.domains, tt.method, tt.caBundle, tt.outputFullchainFile, tt.outputKeyFile, tt.dnsProvider)
assert.Equal(t, tt.want.args, args)
assert.Equal(t, tt.want.err, err)
})
}
}