@@ -6,6 +6,7 @@ package net
6
6
7
7
import (
8
8
"bytes"
9
+ "context"
9
10
"encoding/json"
10
11
"errors"
11
12
"fmt"
@@ -26,104 +27,117 @@ func toJson(v any) string {
26
27
return string (data )
27
28
}
28
29
30
+ func testLookup (t * testing.T , fn func (* testing.T , * Resolver , string )) {
31
+ for _ , def := range []bool {true , false } {
32
+ def := def
33
+ for _ , server := range nslookupTestServers {
34
+ server := server
35
+ var name string
36
+ if def {
37
+ name = "default/"
38
+ } else {
39
+ name = "go/"
40
+ }
41
+ t .Run (name + server , func (t * testing.T ) {
42
+ t .Parallel ()
43
+ r := DefaultResolver
44
+ if ! def {
45
+ r = & Resolver {PreferGo : true }
46
+ }
47
+ fn (t , r , server )
48
+ })
49
+ }
50
+ }
51
+ }
52
+
29
53
func TestNSLookupMX (t * testing.T ) {
30
54
testenv .MustHaveExternalNetwork (t )
31
55
32
- for _ , server := range nslookupTestServers {
33
- mx , err := LookupMX (server )
56
+ testLookup ( t , func ( t * testing. T , r * Resolver , server string ) {
57
+ mx , err := r . LookupMX (context . Background (), server )
34
58
if err != nil {
35
- t .Error (err )
36
- continue
59
+ t .Fatal (err )
37
60
}
38
61
if len (mx ) == 0 {
39
- t .Errorf ("no results" )
40
- continue
62
+ t .Fatal ("no results" )
41
63
}
42
64
expected , err := nslookupMX (server )
43
65
if err != nil {
44
- t .Logf ("skipping failed nslookup %s test: %s" , server , err )
66
+ t .Skipf ("skipping failed nslookup %s test: %s" , server , err )
45
67
}
46
68
sort .Sort (byPrefAndHost (expected ))
47
69
sort .Sort (byPrefAndHost (mx ))
48
70
if ! reflect .DeepEqual (expected , mx ) {
49
71
t .Errorf ("different results %s:\t exp:%v\t got:%v" , server , toJson (expected ), toJson (mx ))
50
72
}
51
- }
73
+ })
52
74
}
53
75
54
76
func TestNSLookupCNAME (t * testing.T ) {
55
77
testenv .MustHaveExternalNetwork (t )
56
78
57
- for _ , server := range nslookupTestServers {
58
- cname , err := LookupCNAME (server )
79
+ testLookup ( t , func ( t * testing. T , r * Resolver , server string ) {
80
+ cname , err := r . LookupCNAME (context . Background (), server )
59
81
if err != nil {
60
- t .Errorf ("failed %s: %s" , server , err )
61
- continue
82
+ t .Fatalf ("failed %s: %s" , server , err )
62
83
}
63
84
if cname == "" {
64
- t .Errorf ("no result %s" , server )
85
+ t .Fatalf ("no result %s" , server )
65
86
}
66
87
expected , err := nslookupCNAME (server )
67
88
if err != nil {
68
- t .Logf ("skipping failed nslookup %s test: %s" , server , err )
69
- continue
89
+ t .Skipf ("skipping failed nslookup %s test: %s" , server , err )
70
90
}
71
91
if expected != cname {
72
92
t .Errorf ("different results %s:\t exp:%v\t got:%v" , server , expected , cname )
73
93
}
74
- }
94
+ })
75
95
}
76
96
77
97
func TestNSLookupNS (t * testing.T ) {
78
98
testenv .MustHaveExternalNetwork (t )
79
99
80
- for _ , server := range nslookupTestServers {
81
- ns , err := LookupNS (server )
100
+ testLookup ( t , func ( t * testing. T , r * Resolver , server string ) {
101
+ ns , err := r . LookupNS (context . Background (), server )
82
102
if err != nil {
83
- t .Errorf ("failed %s: %s" , server , err )
84
- continue
103
+ t .Fatalf ("failed %s: %s" , server , err )
85
104
}
86
105
if len (ns ) == 0 {
87
- t .Errorf ("no results" )
88
- continue
106
+ t .Fatal ("no results" )
89
107
}
90
108
expected , err := nslookupNS (server )
91
109
if err != nil {
92
- t .Logf ("skipping failed nslookup %s test: %s" , server , err )
93
- continue
110
+ t .Skipf ("skipping failed nslookup %s test: %s" , server , err )
94
111
}
95
112
sort .Sort (byHost (expected ))
96
113
sort .Sort (byHost (ns ))
97
114
if ! reflect .DeepEqual (expected , ns ) {
98
115
t .Errorf ("different results %s:\t exp:%v\t got:%v" , toJson (server ), toJson (expected ), ns )
99
116
}
100
- }
117
+ })
101
118
}
102
119
103
120
func TestNSLookupTXT (t * testing.T ) {
104
121
testenv .MustHaveExternalNetwork (t )
105
122
106
- for _ , server := range nslookupTestServers {
107
- txt , err := LookupTXT (server )
123
+ testLookup ( t , func ( t * testing. T , r * Resolver , server string ) {
124
+ txt , err := r . LookupTXT (context . Background (), server )
108
125
if err != nil {
109
- t .Errorf ("failed %s: %s" , server , err )
110
- continue
126
+ t .Fatalf ("failed %s: %s" , server , err )
111
127
}
112
128
if len (txt ) == 0 {
113
- t .Errorf ("no results" )
114
- continue
129
+ t .Fatalf ("no results" )
115
130
}
116
131
expected , err := nslookupTXT (server )
117
132
if err != nil {
118
- t .Logf ("skipping failed nslookup %s test: %s" , server , err )
119
- continue
133
+ t .Skipf ("skipping failed nslookup %s test: %s" , server , err )
120
134
}
121
135
sort .Strings (expected )
122
136
sort .Strings (txt )
123
137
if ! reflect .DeepEqual (expected , txt ) {
124
138
t .Errorf ("different results %s:\t exp:%v\t got:%v" , server , toJson (expected ), toJson (txt ))
125
139
}
126
- }
140
+ })
127
141
}
128
142
129
143
func TestLookupLocalPTR (t * testing.T ) {
0 commit comments