forked from TrueCloudLab/lego
147 lines
3.5 KiB
Go
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)
|
|
}
|