-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathdnscache_test.go
79 lines (69 loc) · 2.44 KB
/
dnscache_test.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
package tgbotapi
import (
"net"
"sort"
"testing"
"time"
)
func TestFetchReturnsAndErrorOnInvalidLookup(t *testing.T) {
ips, err := NewCachedResolver(0).Lookup("invalid.viki.io")
if ips != nil {
t.Errorf("Expecting nil ips, got %v", ips)
}
expected := "lookup invalid.viki.io: no such host"
if err.Error() != expected {
t.Errorf("Expecting %q error, got %q", expected, err.Error())
}
}
func TestFetchReturnsAListOfIps(t *testing.T) {
ips, _ := NewCachedResolver(0).Lookup("dnscache.go.test.viki.io")
assertIps(t, ips, []string{"1.123.58.13", "31.85.32.110"})
}
func TestCallingLookupAddsTheItemToTheCache(t *testing.T) {
r := NewCachedResolver(0)
r.Lookup("dnscache.go.test.viki.io")
assertIps(t, r.cache["dnscache.go.test.viki.io"], []string{"1.123.58.13", "31.85.32.110"})
}
func TestFetchLoadsValueFromTheCache(t *testing.T) {
r := NewCachedResolver(0)
r.cache["invalid.viki.io"] = []net.IP{net.ParseIP("1.1.2.3")}
ips, _ := r.Fetch("invalid.viki.io")
assertIps(t, ips, []string{"1.1.2.3"})
}
func TestFetchOneLoadsTheFirstValue(t *testing.T) {
r := NewCachedResolver(0)
r.cache["something.viki.io"] = []net.IP{net.ParseIP("1.1.2.3"), net.ParseIP("100.100.102.103")}
ip, _ := r.FetchOne("something.viki.io")
assertIps(t, []net.IP{ip}, []string{"1.1.2.3"})
}
func TestFetchOneStringLoadsTheFirstValue(t *testing.T) {
r := NewCachedResolver(0)
r.cache["something.viki.io"] = []net.IP{net.ParseIP("100.100.102.103"), net.ParseIP("100.100.102.104")}
ip, _ := r.FetchOneString("something.viki.io")
if ip != "100.100.102.103" {
t.Errorf("expected 100.100.102.103 but got %v", ip)
}
}
func TestFetchLoadsTheIpAndCachesIt(t *testing.T) {
r := NewCachedResolver(0)
ips, _ := r.Fetch("dnscache.go.test.viki.io")
assertIps(t, ips, []string{"1.123.58.13", "31.85.32.110"})
assertIps(t, r.cache["dnscache.go.test.viki.io"], []string{"1.123.58.13", "31.85.32.110"})
}
func TestItReloadsTheIpsAtAGivenInterval(t *testing.T) {
r := NewCachedResolver(1)
r.cache["dnscache.go.test.viki.io"] = nil
time.Sleep(time.Second * 2)
assertIps(t, r.cache["dnscache.go.test.viki.io"], []string{"1.123.58.13", "31.85.32.110"})
}
func assertIps(t *testing.T, actuals []net.IP, expected []string) {
if len(actuals) != len(expected) {
t.Errorf("Expecting %d ips, got %d", len(expected), len(actuals))
}
sort.Strings(expected)
for _, ip := range actuals {
if sort.SearchStrings(expected, ip.String()) == -1 {
t.Errorf("Got an unexpected ip: %v:", actuals[0])
}
}
}