148 lines
3.1 KiB
Go
148 lines
3.1 KiB
Go
package whois
|
|
|
|
import (
|
|
"strings"
|
|
"testing"
|
|
"time"
|
|
)
|
|
|
|
func TestClient(t *testing.T) {
|
|
scenarios := []struct {
|
|
domain string
|
|
wantErr bool
|
|
}{
|
|
{
|
|
domain: "name.com",
|
|
wantErr: false,
|
|
},
|
|
{
|
|
domain: "name.org",
|
|
wantErr: false,
|
|
},
|
|
{
|
|
domain: "name.net",
|
|
wantErr: false,
|
|
},
|
|
{
|
|
domain: "name.sh",
|
|
wantErr: false,
|
|
},
|
|
{
|
|
domain: "name.io",
|
|
wantErr: false,
|
|
},
|
|
{
|
|
domain: "get.dev",
|
|
wantErr: false,
|
|
},
|
|
{
|
|
domain: "name.red",
|
|
wantErr: false,
|
|
},
|
|
{
|
|
domain: "name.green",
|
|
wantErr: false,
|
|
},
|
|
{
|
|
domain: "color.black",
|
|
wantErr: false,
|
|
},
|
|
{
|
|
domain: "name.cn",
|
|
wantErr: false,
|
|
},
|
|
{
|
|
domain: "name.de",
|
|
wantErr: true,
|
|
},
|
|
{
|
|
domain: "google.com.br", // name.com.br is handled weirdly by whois.registro.br, so we'll use this instead
|
|
wantErr: false,
|
|
},
|
|
{
|
|
domain: "name.ua",
|
|
wantErr: false,
|
|
},
|
|
{
|
|
domain: "name.pp.ua",
|
|
wantErr: false,
|
|
},
|
|
{
|
|
domain: "name.co.uk",
|
|
wantErr: false,
|
|
},
|
|
{
|
|
domain: "name.cz",
|
|
wantErr: false,
|
|
},
|
|
{
|
|
domain: "name.me",
|
|
wantErr: false,
|
|
},
|
|
{
|
|
domain: "name.im",
|
|
wantErr: false,
|
|
},
|
|
{
|
|
domain: "name.uk",
|
|
wantErr: false,
|
|
},
|
|
{
|
|
domain: "dot.scot", // name.scot not registered
|
|
wantErr: false,
|
|
},
|
|
{
|
|
domain: "name.ru", // expiration date in `paid-till` field
|
|
wantErr: false,
|
|
},
|
|
{
|
|
domain: "register.su", // expiration date in `paid-till` field
|
|
wantErr: false,
|
|
},
|
|
{
|
|
domain: "nic.mx",
|
|
wantErr: false,
|
|
},
|
|
}
|
|
client := NewClient().WithReferralCache(true)
|
|
for _, scenario := range scenarios {
|
|
t.Run(scenario.domain+"_Query", func(t *testing.T) {
|
|
output, err := client.Query(scenario.domain)
|
|
if scenario.wantErr && err == nil {
|
|
t.Error("expected error, got none")
|
|
t.FailNow()
|
|
}
|
|
if !scenario.wantErr {
|
|
if err != nil {
|
|
t.Error("expected no error, got", err.Error())
|
|
}
|
|
if !strings.Contains(strings.ToLower(output), scenario.domain) {
|
|
t.Errorf("expected %s in output, got %s", scenario.domain, output)
|
|
}
|
|
}
|
|
})
|
|
time.Sleep(50 * time.Millisecond) // Give the WHOIS servers some breathing room
|
|
t.Run(scenario.domain+"_QueryAndParse", func(t *testing.T) {
|
|
response, err := client.QueryAndParse(scenario.domain)
|
|
if scenario.wantErr && err == nil {
|
|
t.Error("expected error, got none")
|
|
t.FailNow()
|
|
}
|
|
if !scenario.wantErr {
|
|
if err != nil {
|
|
t.Error("expected no error, got", err.Error(), "for domain", scenario.domain)
|
|
}
|
|
if response.ExpirationDate.Unix() <= 0 {
|
|
t.Error("expected to have a valid expiry date, got", response.ExpirationDate.Unix(), "for domain", scenario.domain)
|
|
}
|
|
if len(response.NameServers) == 0 {
|
|
t.Errorf("expected to have at least one name server for domain %s", scenario.domain)
|
|
}
|
|
if len(response.DomainStatuses) == 0 && !strings.HasSuffix(scenario.domain, ".im") && !strings.HasSuffix(scenario.domain, ".mx") && !strings.HasSuffix(scenario.domain, ".cz") {
|
|
t.Errorf("expected to have at least one domain status for domain %s", scenario.domain)
|
|
}
|
|
}
|
|
})
|
|
time.Sleep(50 * time.Millisecond) // Give the WHOIS servers some breathing room
|
|
}
|
|
}
|