forked from TrueCloudLab/lego
195 lines
4.1 KiB
Go
195 lines
4.1 KiB
Go
|
package internal
|
||
|
|
||
|
import (
|
||
|
"fmt"
|
||
|
"io"
|
||
|
"net/http"
|
||
|
"net/http/httptest"
|
||
|
"os"
|
||
|
"path/filepath"
|
||
|
"testing"
|
||
|
|
||
|
"github.com/stretchr/testify/assert"
|
||
|
"github.com/stretchr/testify/require"
|
||
|
)
|
||
|
|
||
|
func TestClient_Authentication(t *testing.T) {
|
||
|
mux := http.NewServeMux()
|
||
|
server := httptest.NewServer(mux)
|
||
|
t.Cleanup(server.Close)
|
||
|
|
||
|
mux.HandleFunc("/", testHandler("auth.xml"))
|
||
|
|
||
|
client := NewClient("user", "secret")
|
||
|
client.authEndpoint = server.URL
|
||
|
|
||
|
credentialToken, err := client.Authentication(60, false)
|
||
|
require.NoError(t, err)
|
||
|
|
||
|
assert.Equal(t, "593959ca04f0de9689b586c6a647d15d", credentialToken)
|
||
|
}
|
||
|
|
||
|
func TestClient_Authentication_error(t *testing.T) {
|
||
|
mux := http.NewServeMux()
|
||
|
server := httptest.NewServer(mux)
|
||
|
t.Cleanup(server.Close)
|
||
|
|
||
|
mux.HandleFunc("/", testHandler("auth_fault.xml"))
|
||
|
|
||
|
client := NewClient("user", "secret")
|
||
|
client.authEndpoint = server.URL
|
||
|
|
||
|
_, err := client.Authentication(60, false)
|
||
|
require.Error(t, err)
|
||
|
}
|
||
|
|
||
|
func TestClient_GetDNSSettings(t *testing.T) {
|
||
|
mux := http.NewServeMux()
|
||
|
server := httptest.NewServer(mux)
|
||
|
t.Cleanup(server.Close)
|
||
|
|
||
|
mux.HandleFunc("/", testHandler("get_dns_settings.xml"))
|
||
|
|
||
|
client := NewClient("user", "secret")
|
||
|
client.apiEndpoint = server.URL
|
||
|
|
||
|
token := "sha1secret"
|
||
|
|
||
|
records, err := client.GetDNSSettings(token, "example.com", "")
|
||
|
require.NoError(t, err)
|
||
|
|
||
|
expected := []ReturnInfo{
|
||
|
{
|
||
|
ID: "57297429",
|
||
|
Zone: "example.org",
|
||
|
Name: "",
|
||
|
Type: "A",
|
||
|
Data: "10.0.0.1",
|
||
|
Changeable: "Y",
|
||
|
Aux: 0,
|
||
|
},
|
||
|
{
|
||
|
ID: int64(0),
|
||
|
Zone: "example.org",
|
||
|
Name: "",
|
||
|
Type: "NS",
|
||
|
Data: "ns5.kasserver.com.",
|
||
|
Changeable: "N",
|
||
|
Aux: 0,
|
||
|
},
|
||
|
{
|
||
|
ID: int64(0),
|
||
|
Zone: "example.org",
|
||
|
Name: "",
|
||
|
Type: "NS",
|
||
|
Data: "ns6.kasserver.com.",
|
||
|
Changeable: "N",
|
||
|
Aux: 0,
|
||
|
},
|
||
|
{
|
||
|
ID: "57297479",
|
||
|
Zone: "example.org",
|
||
|
Name: "*",
|
||
|
Type: "A",
|
||
|
Data: "10.0.0.1",
|
||
|
Changeable: "Y",
|
||
|
Aux: 0,
|
||
|
},
|
||
|
{
|
||
|
ID: "57297481",
|
||
|
Zone: "example.org",
|
||
|
Name: "",
|
||
|
Type: "MX",
|
||
|
Data: "user.kasserver.com.",
|
||
|
Changeable: "Y",
|
||
|
Aux: 10,
|
||
|
},
|
||
|
{
|
||
|
ID: "57297483",
|
||
|
Zone: "example.org",
|
||
|
Name: "",
|
||
|
Type: "TXT",
|
||
|
Data: "v=spf1 mx a ?all",
|
||
|
Changeable: "Y",
|
||
|
Aux: 0,
|
||
|
},
|
||
|
{
|
||
|
ID: "57297485",
|
||
|
Zone: "example.org",
|
||
|
Name: "_dmarc",
|
||
|
Type: "TXT",
|
||
|
Data: "v=DMARC1; p=none;",
|
||
|
Changeable: "Y",
|
||
|
Aux: 0,
|
||
|
},
|
||
|
}
|
||
|
|
||
|
assert.Equal(t, expected, records)
|
||
|
}
|
||
|
|
||
|
func TestClient_AddDNSSettings(t *testing.T) {
|
||
|
mux := http.NewServeMux()
|
||
|
server := httptest.NewServer(mux)
|
||
|
t.Cleanup(server.Close)
|
||
|
|
||
|
mux.HandleFunc("/", testHandler("add_dns_settings.xml"))
|
||
|
|
||
|
client := NewClient("user", "secret")
|
||
|
client.apiEndpoint = server.URL
|
||
|
|
||
|
token := "sha1secret"
|
||
|
|
||
|
record := DNSRequest{
|
||
|
ZoneHost: "42cnc.de.",
|
||
|
RecordType: "TXT",
|
||
|
RecordName: "lego",
|
||
|
RecordData: "abcdefgh",
|
||
|
}
|
||
|
|
||
|
recordID, err := client.AddDNSSettings(token, record)
|
||
|
require.NoError(t, err)
|
||
|
|
||
|
assert.Equal(t, "57347444", recordID)
|
||
|
}
|
||
|
|
||
|
func TestClient_DeleteDNSSettings(t *testing.T) {
|
||
|
mux := http.NewServeMux()
|
||
|
server := httptest.NewServer(mux)
|
||
|
t.Cleanup(server.Close)
|
||
|
|
||
|
mux.HandleFunc("/", testHandler("delete_dns_settings.xml"))
|
||
|
|
||
|
client := NewClient("user", "secret")
|
||
|
client.apiEndpoint = server.URL
|
||
|
|
||
|
token := "sha1secret"
|
||
|
|
||
|
r, err := client.DeleteDNSSettings(token, "57347450")
|
||
|
require.NoError(t, err)
|
||
|
|
||
|
assert.True(t, r)
|
||
|
}
|
||
|
|
||
|
func testHandler(filename string) http.HandlerFunc {
|
||
|
return func(rw http.ResponseWriter, req *http.Request) {
|
||
|
if req.Method != http.MethodPost {
|
||
|
http.Error(rw, fmt.Sprintf("unsupported method: %s", req.Method), http.StatusMethodNotAllowed)
|
||
|
return
|
||
|
}
|
||
|
|
||
|
file, err := os.Open(filepath.Join("fixtures", filename))
|
||
|
if err != nil {
|
||
|
http.Error(rw, err.Error(), http.StatusInternalServerError)
|
||
|
return
|
||
|
}
|
||
|
|
||
|
defer func() { _ = file.Close() }()
|
||
|
|
||
|
_, err = io.Copy(rw, file)
|
||
|
if err != nil {
|
||
|
http.Error(rw, err.Error(), http.StatusInternalServerError)
|
||
|
return
|
||
|
}
|
||
|
}
|
||
|
}
|