forked from TrueCloudLab/lego
195 lines
4.5 KiB
Go
195 lines
4.5 KiB
Go
package internal
|
|
|
|
import (
|
|
"context"
|
|
"net/http"
|
|
"net/http/httptest"
|
|
"net/url"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
const authorizationHeader = "Authorization"
|
|
|
|
func setupTest(t *testing.T) (*Client, *http.ServeMux) {
|
|
t.Helper()
|
|
|
|
mux := http.NewServeMux()
|
|
server := httptest.NewServer(mux)
|
|
t.Cleanup(server.Close)
|
|
|
|
client := NewClient("token", "secret")
|
|
client.HTTPClient = server.Client()
|
|
client.baseURL, _ = url.Parse(server.URL)
|
|
|
|
return client, mux
|
|
}
|
|
|
|
func TestClient_CreateTXTRecord(t *testing.T) {
|
|
client, mux := setupTest(t)
|
|
|
|
mux.HandleFunc("/domains/1/dns", func(rw http.ResponseWriter, req *http.Request) {
|
|
if req.Method != http.MethodPost {
|
|
http.Error(rw, "invalid method: "+req.Method, http.StatusBadRequest)
|
|
return
|
|
}
|
|
|
|
auth := req.Header.Get(authorizationHeader)
|
|
if auth != "Basic dG9rZW46c2VjcmV0" {
|
|
http.Error(rw, "invalid credentials: "+auth, http.StatusUnauthorized)
|
|
return
|
|
}
|
|
|
|
_, _ = rw.Write([]byte(`{"id": 1}`))
|
|
})
|
|
|
|
err := client.CreateTXTRecord(context.Background(), &Domain{ID: 1}, "example", "txtTXTtxt")
|
|
require.NoError(t, err)
|
|
}
|
|
|
|
func TestClient_DeleteTXTRecord(t *testing.T) {
|
|
client, mux := setupTest(t)
|
|
|
|
mux.HandleFunc("/domains/1/dns", func(rw http.ResponseWriter, req *http.Request) {
|
|
if req.Method != http.MethodGet {
|
|
http.Error(rw, "invalid method: "+req.Method, http.StatusBadRequest)
|
|
return
|
|
}
|
|
|
|
auth := req.Header.Get(authorizationHeader)
|
|
if auth != "Basic dG9rZW46c2VjcmV0" {
|
|
http.Error(rw, "invalid credentials: "+auth, http.StatusUnauthorized)
|
|
return
|
|
}
|
|
|
|
_, _ = rw.Write([]byte(`[
|
|
{
|
|
"id": 1,
|
|
"host": "example.com",
|
|
"ttl": 3600,
|
|
"type": "TXT",
|
|
"data": "txtTXTtxt"
|
|
}
|
|
]`))
|
|
})
|
|
|
|
mux.HandleFunc("/domains/1/dns/1", func(rw http.ResponseWriter, req *http.Request) {
|
|
if req.Method != http.MethodDelete {
|
|
http.Error(rw, "invalid method: "+req.Method, http.StatusBadRequest)
|
|
return
|
|
}
|
|
|
|
auth := req.Header.Get(authorizationHeader)
|
|
if auth != "Basic dG9rZW46c2VjcmV0" {
|
|
http.Error(rw, "invalid credentials: "+auth, http.StatusUnauthorized)
|
|
return
|
|
}
|
|
})
|
|
|
|
err := client.DeleteTXTRecord(context.Background(), &Domain{ID: 1}, "example.com", "txtTXTtxt")
|
|
require.NoError(t, err)
|
|
}
|
|
|
|
func TestClient_getDNSRecordByHostData(t *testing.T) {
|
|
client, mux := setupTest(t)
|
|
|
|
mux.HandleFunc("/domains/1/dns", func(rw http.ResponseWriter, req *http.Request) {
|
|
if req.Method != http.MethodGet {
|
|
http.Error(rw, "invalid method: "+req.Method, http.StatusBadRequest)
|
|
return
|
|
}
|
|
|
|
auth := req.Header.Get(authorizationHeader)
|
|
if auth != "Basic dG9rZW46c2VjcmV0" {
|
|
http.Error(rw, "invalid credentials: "+auth, http.StatusUnauthorized)
|
|
return
|
|
}
|
|
|
|
_, _ = rw.Write([]byte(`[
|
|
{
|
|
"id": 1,
|
|
"host": "example.com",
|
|
"ttl": 3600,
|
|
"type": "TXT",
|
|
"data": "txtTXTtxt"
|
|
}
|
|
]`))
|
|
})
|
|
|
|
record, err := client.getDNSRecordByHostData(context.Background(), Domain{ID: 1}, "example.com", "txtTXTtxt")
|
|
require.NoError(t, err)
|
|
|
|
expected := &DNSRecord{
|
|
ID: 1,
|
|
Type: "TXT",
|
|
Host: "example.com",
|
|
Data: "txtTXTtxt",
|
|
TTL: 3600,
|
|
}
|
|
|
|
assert.Equal(t, expected, record)
|
|
}
|
|
|
|
func TestClient_GetDomainByName(t *testing.T) {
|
|
client, mux := setupTest(t)
|
|
|
|
mux.HandleFunc("/domains", func(rw http.ResponseWriter, req *http.Request) {
|
|
if req.Method != http.MethodGet {
|
|
http.Error(rw, "invalid method: "+req.Method, http.StatusBadRequest)
|
|
return
|
|
}
|
|
|
|
auth := req.Header.Get(authorizationHeader)
|
|
if auth != "Basic dG9rZW46c2VjcmV0" {
|
|
http.Error(rw, "invalid credentials: "+auth, http.StatusUnauthorized)
|
|
return
|
|
}
|
|
|
|
_, _ = rw.Write([]byte(`[
|
|
{
|
|
"id": 1,
|
|
"domain": "example.com",
|
|
"expiry_date": "2019-08-24",
|
|
"registered_date": "2019-08-24",
|
|
"renew": true,
|
|
"registrant": "Ola Nordmann",
|
|
"status": "active",
|
|
"nameservers": [
|
|
"ns1.hyp.net",
|
|
"ns2.hyp.net",
|
|
"ns3.hyp.net"
|
|
],
|
|
"services": {
|
|
"registrar": true,
|
|
"dns": true,
|
|
"email": true,
|
|
"webhotel": "none"
|
|
}
|
|
}
|
|
]`))
|
|
})
|
|
|
|
domain, err := client.GetDomainByName(context.Background(), "example.com")
|
|
require.NoError(t, err)
|
|
|
|
expected := &Domain{
|
|
Name: "example.com",
|
|
ID: 1,
|
|
ExpiryDate: "2019-08-24",
|
|
Nameservers: []string{"ns1.hyp.net", "ns2.hyp.net", "ns3.hyp.net"},
|
|
RegisteredDate: "2019-08-24",
|
|
Registrant: "Ola Nordmann",
|
|
Renew: true,
|
|
Services: Service{
|
|
DNS: true,
|
|
Email: true,
|
|
Registrar: true,
|
|
Webhotel: "none",
|
|
},
|
|
Status: "active",
|
|
}
|
|
|
|
assert.Equal(t, expected, domain)
|
|
}
|