github.com/pmoroney/dnscontrol@v0.2.4-0.20171024134423-fad98f73f44a/providers/namedotcom/nameservers_test.go (about) 1 package namedotcom 2 3 import ( 4 "fmt" 5 "net/http" 6 "net/http/httptest" 7 "strings" 8 "testing" 9 10 "github.com/StackExchange/dnscontrol/models" 11 ) 12 13 var ( 14 mux *http.ServeMux 15 client *nameDotCom 16 server *httptest.Server 17 ) 18 19 func setup() { 20 mux = http.NewServeMux() 21 server = httptest.NewServer(mux) 22 23 client = &nameDotCom{ 24 APIUser: "bob", 25 APIKey: "123", 26 APIUrl: server.URL, 27 } 28 } 29 30 func teardown() { 31 server.Close() 32 } 33 34 func TestGetNameserversRaw(t *testing.T) { 35 for i, test := range []struct { 36 givenNs, expected string 37 }{ 38 {"", ""}, 39 {`"foo.ns.tld","bar.ns.tld"`, "bar.ns.tld,foo.ns.tld"}, 40 {"ERR", "ERR"}, 41 {"MSGERR", "ERR"}, 42 } { 43 setup() 44 defer teardown() 45 46 mux.HandleFunc("/domain/get/example.tld", func(w http.ResponseWriter, r *http.Request) { 47 if test.givenNs == "ERR" { 48 http.Error(w, "UH OH", 500) 49 return 50 } 51 if test.givenNs == "MSGERR" { 52 w.Write(nameComError) 53 return 54 } 55 w.Write(domainResponse(test.givenNs)) 56 }) 57 58 found, err := client.getNameserversRaw("example.tld") 59 if err != nil { 60 if test.expected == "ERR" { 61 continue 62 } 63 t.Errorf("Error on test %d: %s", i, err) 64 continue 65 } 66 if test.expected == "ERR" { 67 t.Errorf("Expected error on test %d, but was none", i) 68 continue 69 } 70 if strings.Join(found, ",") != test.expected { 71 t.Errorf("Test %d: Expected '%s', but found '%s'", i, test.expected, found) 72 } 73 } 74 } 75 76 func TestGetCorrections(t *testing.T) { 77 for i, test := range []struct { 78 givenNs string 79 expected int 80 }{ 81 {"", 1}, 82 {`"foo.ns.tld","bar.ns.tld"`, 0}, 83 {`"bar.ns.tld","foo.ns.tld"`, 0}, 84 {`"foo.ns.tld"`, 1}, 85 {`"1.ns.aaa","2.ns.www"`, 1}, 86 {"ERR", -1}, //-1 means we expect an error 87 {"MSGERR", -1}, 88 } { 89 setup() 90 defer teardown() 91 92 mux.HandleFunc("/domain/get/example.tld", func(w http.ResponseWriter, r *http.Request) { 93 if test.givenNs == "ERR" { 94 http.Error(w, "UH OH", 500) 95 return 96 } 97 if test.givenNs == "MSGERR" { 98 w.Write(nameComError) 99 return 100 } 101 w.Write(domainResponse(test.givenNs)) 102 }) 103 dc := &models.DomainConfig{ 104 Name: "example.tld", 105 Nameservers: []*models.Nameserver{ 106 {Name: "foo.ns.tld"}, 107 {Name: "bar.ns.tld"}, 108 }, 109 } 110 corrections, err := client.GetRegistrarCorrections(dc) 111 if err != nil { 112 if test.expected == -1 { 113 continue 114 } 115 t.Errorf("Error on test %d: %s", i, err) 116 continue 117 } 118 if test.expected == -1 { 119 t.Errorf("Expected error on test %d, but was none", i) 120 continue 121 } 122 if len(corrections) != test.expected { 123 t.Errorf("Test %d: Expected '%d', but found '%d'", i, test.expected, len(corrections)) 124 } 125 } 126 } 127 128 func domainResponse(ns string) []byte { 129 return []byte(fmt.Sprintf(`{ 130 "result": { 131 "code": 100, 132 "message": "Command Successful" 133 }, 134 "domain_name": "example.tld", 135 "create_date": "2015-12-28 18:08:05", 136 "expire_date": "2016-12-28 23:59:59", 137 "locked": true, 138 "nameservers": [%s], 139 "contacts": [], 140 "addons": { 141 "whois_privacy": { 142 "price": "3.99" 143 }, 144 "domain\/renew": { 145 "price": "10.99" 146 } 147 } 148 }`, ns)) 149 } 150 151 var nameComError = []byte(`{"result":{"code":251,"message":"Authentication Error - Invalid Username Or Api Token"}}`) 152 153 func TestGetNameservers(t *testing.T) { 154 const d = "ns1.name.com,ns2.name.com,ns3.name.com,ns4.name.com" 155 for i, test := range []struct { 156 givenNs, expected string 157 }{ 158 //empty or external dsp, use ns1-4.name.com 159 {"", d}, 160 {`"foo.ns.tld","bar.ns.tld"`, d}, 161 //if already on name.com, use the existing nameservers 162 {`"ns1aaa.name.com","ns2bbb.name.com","ns3ccc.name.com","ns4ddd.name.com"`, "ns1aaa.name.com,ns2bbb.name.com,ns3ccc.name.com,ns4ddd.name.com"}, 163 //also handle half and half 164 {`"ns1aaa.name.com","ns2bbb.name.com","ns3ccc.aws.net","ns4ddd.awsdns.org"`, "ns1aaa.name.com,ns2bbb.name.com,ns3.name.com,ns4.name.com"}, 165 {`"nsa.azuredns.com","ns2b.gandhi.net","ns3ccc.name.com","ns4ddd.name.com"`, "ns1.name.com,ns2.name.com,ns3ccc.name.com,ns4ddd.name.com"}, 166 } { 167 setup() 168 defer teardown() 169 170 mux.HandleFunc("/domain/get/example.tld", func(w http.ResponseWriter, r *http.Request) { 171 w.Write(domainResponse(test.givenNs)) 172 }) 173 found, err := client.GetNameservers("example.tld") 174 if err != nil { 175 t.Errorf("Test %d: %s", i, err) 176 continue 177 } 178 fStrs := []string{} 179 for _, n := range found { 180 fStrs = append(fStrs, n.Name) 181 } 182 if strings.Join(fStrs, ",") != test.expected { 183 t.Errorf("Test %d: Expected '%s', but found '%s'", i, test.expected, found) 184 } 185 } 186 }