mirror of
https://github.com/StackExchange/dnscontrol.git
synced 2024-12-29 11:43:29 +08:00
12f006441b
* initial refactoring of diffing * making cloudflare and others compile * gandi and gcloud. no idea if gandi works anymore. * r53 * namedotcom wasn't working.
186 lines
4.4 KiB
Go
186 lines
4.4 KiB
Go
package namedotcom
|
|
|
|
import (
|
|
"fmt"
|
|
"net/http"
|
|
"net/http/httptest"
|
|
"strings"
|
|
"testing"
|
|
|
|
"github.com/StackExchange/dnscontrol/models"
|
|
)
|
|
|
|
var (
|
|
mux *http.ServeMux
|
|
client *nameDotCom
|
|
server *httptest.Server
|
|
)
|
|
|
|
func setup() {
|
|
mux = http.NewServeMux()
|
|
server = httptest.NewServer(mux)
|
|
|
|
client = &nameDotCom{
|
|
APIUser: "bob",
|
|
APIKey: "123",
|
|
}
|
|
apiBase = server.URL
|
|
}
|
|
|
|
func teardown() {
|
|
server.Close()
|
|
}
|
|
|
|
func TestGetNameserversRaw(t *testing.T) {
|
|
for i, test := range []struct {
|
|
givenNs, expected string
|
|
}{
|
|
{"", ""},
|
|
{`"foo.ns.tld","bar.ns.tld"`, "bar.ns.tld,foo.ns.tld"},
|
|
{"ERR", "ERR"},
|
|
{"MSGERR", "ERR"},
|
|
} {
|
|
setup()
|
|
defer teardown()
|
|
|
|
mux.HandleFunc("/domain/get/example.tld", func(w http.ResponseWriter, r *http.Request) {
|
|
if test.givenNs == "ERR" {
|
|
http.Error(w, "UH OH", 500)
|
|
return
|
|
}
|
|
if test.givenNs == "MSGERR" {
|
|
w.Write(nameComError)
|
|
return
|
|
}
|
|
w.Write(domainResponse(test.givenNs))
|
|
})
|
|
|
|
found, err := client.getNameserversRaw("example.tld")
|
|
if err != nil {
|
|
if test.expected == "ERR" {
|
|
continue
|
|
}
|
|
t.Errorf("Error on test %d: %s", i, err)
|
|
continue
|
|
}
|
|
if test.expected == "ERR" {
|
|
t.Errorf("Expected error on test %d, but was none", i)
|
|
continue
|
|
}
|
|
if strings.Join(found, ",") != test.expected {
|
|
t.Errorf("Test %d: Expected '%s', but found '%s'", i, test.expected, found)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestGetCorrections(t *testing.T) {
|
|
for i, test := range []struct {
|
|
givenNs string
|
|
expected int
|
|
}{
|
|
{"", 1},
|
|
{`"foo.ns.tld","bar.ns.tld"`, 0},
|
|
{`"bar.ns.tld","foo.ns.tld"`, 0},
|
|
{`"foo.ns.tld"`, 1},
|
|
{`"1.ns.aaa","2.ns.www"`, 1},
|
|
{"ERR", -1}, //-1 means we expect an error
|
|
{"MSGERR", -1},
|
|
} {
|
|
setup()
|
|
defer teardown()
|
|
|
|
mux.HandleFunc("/domain/get/example.tld", func(w http.ResponseWriter, r *http.Request) {
|
|
if test.givenNs == "ERR" {
|
|
http.Error(w, "UH OH", 500)
|
|
return
|
|
}
|
|
if test.givenNs == "MSGERR" {
|
|
w.Write(nameComError)
|
|
return
|
|
}
|
|
w.Write(domainResponse(test.givenNs))
|
|
})
|
|
dc := &models.DomainConfig{
|
|
Name: "example.tld",
|
|
Nameservers: []*models.Nameserver{
|
|
{Name: "foo.ns.tld"},
|
|
{Name: "bar.ns.tld"},
|
|
},
|
|
}
|
|
corrections, err := client.GetRegistrarCorrections(dc)
|
|
if err != nil {
|
|
if test.expected == -1 {
|
|
continue
|
|
}
|
|
t.Errorf("Error on test %d: %s", i, err)
|
|
continue
|
|
}
|
|
if test.expected == -1 {
|
|
t.Errorf("Expected error on test %d, but was none", i)
|
|
continue
|
|
}
|
|
if len(corrections) != test.expected {
|
|
t.Errorf("Test %d: Expected '%d', but found '%d'", i, test.expected, len(corrections))
|
|
}
|
|
}
|
|
}
|
|
|
|
func domainResponse(ns string) []byte {
|
|
return []byte(fmt.Sprintf(`{
|
|
"result": {
|
|
"code": 100,
|
|
"message": "Command Successful"
|
|
},
|
|
"domain_name": "example.tld",
|
|
"create_date": "2015-12-28 18:08:05",
|
|
"expire_date": "2016-12-28 23:59:59",
|
|
"locked": true,
|
|
"nameservers": [%s],
|
|
"contacts": [],
|
|
"addons": {
|
|
"whois_privacy": {
|
|
"price": "3.99"
|
|
},
|
|
"domain\/renew": {
|
|
"price": "10.99"
|
|
}
|
|
}
|
|
}`, ns))
|
|
}
|
|
|
|
var nameComError = []byte(`{"result":{"code":251,"message":"Authentication Error - Invalid Username Or Api Token"}}`)
|
|
|
|
func TestGetNameservers(t *testing.T) {
|
|
const d = "ns1.name.com,ns2.name.com,ns3.name.com,ns4.name.com"
|
|
for i, test := range []struct {
|
|
givenNs, expected string
|
|
}{
|
|
//empty or external dsp, use ns1-4.name.com
|
|
{"", d},
|
|
{`"foo.ns.tld","bar.ns.tld"`, d},
|
|
//if already on name.com, use the existing nameservers
|
|
{`"ns1aaa.name.com","ns2bbb.name.com","ns3ccc.name.com","ns4ddd.name.com"`, "ns1aaa.name.com,ns2bbb.name.com,ns3ccc.name.com,ns4ddd.name.com"},
|
|
//also handle half and half
|
|
{`"ns1aaa.name.com","ns2bbb.name.com","ns3ccc.aws.net","ns4ddd.awsdns.org"`, "ns1aaa.name.com,ns2bbb.name.com,ns3.name.com,ns4.name.com"},
|
|
{`"nsa.azuredns.com","ns2b.gandhi.net","ns3ccc.name.com","ns4ddd.name.com"`, "ns1.name.com,ns2.name.com,ns3ccc.name.com,ns4ddd.name.com"},
|
|
} {
|
|
setup()
|
|
defer teardown()
|
|
|
|
mux.HandleFunc("/domain/get/example.tld", func(w http.ResponseWriter, r *http.Request) {
|
|
w.Write(domainResponse(test.givenNs))
|
|
})
|
|
found, err := client.GetNameservers("example.tld")
|
|
if err != nil {
|
|
t.Errorf("Test %d: %s", i, err)
|
|
continue
|
|
}
|
|
fStrs := []string{}
|
|
for _, n := range found {
|
|
fStrs = append(fStrs, n.Name)
|
|
}
|
|
if strings.Join(fStrs, ",") != test.expected {
|
|
t.Errorf("Test %d: Expected '%s', but found '%s'", i, test.expected, found)
|
|
}
|
|
}
|
|
}
|