lego/providers/dns/wedos/internal/client_test.go
2021-08-25 11:44:11 +02:00

147 lines
3.5 KiB
Go

package internal
import (
"context"
"fmt"
"net/http"
"net/http/httptest"
"os"
"regexp"
"testing"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
func setupNew(t *testing.T, expectedForm string, filename string) *Client {
t.Helper()
mux := http.NewServeMux()
server := httptest.NewServer(mux)
t.Cleanup(server.Close)
mux.HandleFunc("/", func(rw http.ResponseWriter, req *http.Request) {
err := req.ParseForm()
if err != nil {
http.Error(rw, err.Error(), http.StatusBadRequest)
return
}
exp := regexp.MustCompile(`"auth":"\w+",`)
form := req.PostForm.Get("request")
form = exp.ReplaceAllString(form, `"auth":"xxx",`)
if form != expectedForm {
t.Logf("invalid form data: %s", req.PostForm.Get("request"))
http.Error(rw, fmt.Sprintf("invalid form data: %s", req.PostForm.Get("request")), http.StatusBadRequest)
return
}
data, err := os.ReadFile(fmt.Sprintf("./fixtures/%s.json", filename))
if err != nil {
http.Error(rw, err.Error(), http.StatusInternalServerError)
return
}
rw.Header().Set("Content-Type", "application/json")
_, _ = rw.Write(data)
})
client := NewClient("user", "secret")
client.baseURL = server.URL
return client
}
func TestClient_GetRecords(t *testing.T) {
expectedForm := `{"request":{"user":"user","auth":"xxx","command":"dns-rows-list","data":{"domain":"example.com"}}}`
client := setupNew(t, expectedForm, commandDNSRowsList)
records, err := client.GetRecords(context.Background(), "example.com.")
require.NoError(t, err)
assert.Len(t, records, 4)
expected := []DNSRow{
{
ID: "911",
TTL: "1800",
Type: "A",
Data: "1.2.3.4",
},
{
ID: "913",
TTL: "1800",
Type: "MX",
Data: "1 mail1.wedos.net",
},
{
ID: "914",
TTL: "1800",
Type: "MX",
Data: "10 mailbackup.wedos.net",
},
{
ID: "912",
Name: "*",
TTL: "1800",
Type: "A",
Data: "1.2.3.4",
},
}
assert.Equal(t, expected, records)
}
func TestClient_AddRecord(t *testing.T) {
expectedForm := `{"request":{"user":"user","auth":"xxx","command":"dns-row-add","data":{"domain":"example.com","name":"foo","ttl":1800,"type":"TXT","rdata":"foobar"}}}`
client := setupNew(t, expectedForm, commandDNSRowAdd)
record := DNSRow{
ID: "",
Name: "foo",
TTL: "1800",
Type: "TXT",
Data: "foobar",
}
err := client.AddRecord(context.Background(), "example.com.", record)
require.NoError(t, err)
}
func TestClient_AddRecord_update(t *testing.T) {
expectedForm := `{"request":{"user":"user","auth":"xxx","command":"dns-row-update","data":{"row_id":"1","domain":"example.com","ttl":1800,"type":"TXT","rdata":"foobar"}}}`
client := setupNew(t, expectedForm, commandDNSRowUpdate)
record := DNSRow{
ID: "1",
Name: "foo",
TTL: "1800",
Type: "TXT",
Data: "foobar",
}
err := client.AddRecord(context.Background(), "example.com.", record)
require.NoError(t, err)
}
func TestClient_DeleteRecord(t *testing.T) {
expectedForm := `{"request":{"user":"user","auth":"xxx","command":"dns-row-delete","data":{"row_id":"1","domain":"example.com","rdata":""}}}`
client := setupNew(t, expectedForm, commandDNSRowDelete)
err := client.DeleteRecord(context.Background(), "example.com.", "1")
require.NoError(t, err)
}
func TestClient_Commit(t *testing.T) {
expectedForm := `{"request":{"user":"user","auth":"xxx","command":"dns-domain-commit","data":{"name":"example.com"}}}`
client := setupNew(t, expectedForm, commandDNSDomainCommit)
err := client.Commit(context.Background(), "example.com.")
require.NoError(t, err)
}