dnscontrol/providers/namedotcom/nameservers_test.go
Craig Peterson 12f006441b Refactoring diff package interface (#22)
* initial refactoring of diffing

* making cloudflare and others compile

* gandi and gcloud. no idea if gandi works anymore.

* r53

* namedotcom wasn't working.
2017-01-11 12:38:07 -07:00

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)
}
}
}