Skip to content

Commit a236f13

Browse files
committed
all: imp test code
1 parent a045175 commit a236f13

File tree

2 files changed

+41
-46
lines changed

2 files changed

+41
-46
lines changed

proxy/serverquic_internal_test.go

Lines changed: 20 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ import (
66
"crypto/x509"
77
"io"
88
"net"
9-
"sync/atomic"
109
"testing"
1110
"time"
1211

@@ -17,6 +16,7 @@ import (
1716
"github.com/AdguardTeam/golibs/testutil/servicetest"
1817
"github.com/miekg/dns"
1918
"github.com/quic-go/quic-go"
19+
"github.com/stretchr/testify/assert"
2020
"github.com/stretchr/testify/require"
2121
)
2222

@@ -143,10 +143,9 @@ func TestQuicProxy_largePackets(t *testing.T) {
143143
requireResponse(t, msg, resp)
144144
}
145145

146-
func TestQuicProxy_truncatedRequestUsesOnlyReadBytes(t *testing.T) {
146+
func TestQuicProxy_truncatedRequest(t *testing.T) {
147147
serverConfig, caPem := newTLSConfig(t)
148148

149-
var handled atomic.Bool
150149
conf := &Config{
151150
Logger: slogutil.NewDiscardLogger(),
152151
QUICListenAddr: []*net.UDPAddr{net.UDPAddrFromAddrPort(localhostAnyPort)},
@@ -156,27 +155,15 @@ func TestQuicProxy_truncatedRequestUsesOnlyReadBytes(t *testing.T) {
156155
RatelimitSubnetLenIPv4: 24,
157156
RatelimitSubnetLenIPv6: 64,
158157
RequestHandler: &TestRequestHandler{
159-
OnHandle: func(p *Proxy, dctx *DNSContext) (err error) {
160-
handled.Store(true)
161-
resp := (&dns.Msg{}).SetReply(dctx.Req)
162-
resp.Answer = []dns.RR{&dns.A{
163-
Hdr: dns.RR_Header{
164-
Name: dctx.Req.Question[0].Name,
165-
Rrtype: dns.TypeA,
166-
Class: dns.ClassINET,
167-
},
168-
A: net.IP{8, 8, 8, 8},
169-
}}
170-
dctx.Res = resp
171-
172-
return nil
158+
OnHandle: func(p *Proxy, d *DNSContext) (_ error) {
159+
panic(testutil.UnexpectedCall(p, d))
173160
},
174161
},
175162
}
176163

177164
dnsProxy := mustNew(t, conf)
178165

179-
req := &dns.Msg{
166+
req := (&dns.Msg{
180167
MsgHdr: dns.MsgHdr{
181168
Id: 0,
182169
RecursionDesired: true,
@@ -186,8 +173,7 @@ func TestQuicProxy_truncatedRequestUsesOnlyReadBytes(t *testing.T) {
186173
Qtype: dns.TypeA,
187174
Qclass: dns.ClassINET,
188175
}},
189-
}
190-
req.SetEdns0(4096, false)
176+
}).SetEdns0(4096, false)
191177

192178
packed, err := req.Pack()
193179
require.NoError(t, err)
@@ -203,36 +189,39 @@ func TestQuicProxy_truncatedRequestUsesOnlyReadBytes(t *testing.T) {
203189

204190
servicetest.RequireRun(t, dnsProxy, testTimeout)
205191

192+
addr := dnsProxy.Addr(ProtoQUIC)
193+
206194
roots := x509.NewCertPool()
207-
roots.AppendCertsFromPEM(caPem)
195+
require.True(t, roots.AppendCertsFromPEM(caPem))
196+
208197
tlsConfig := &tls.Config{
209198
ServerName: tlsServerName,
210199
RootCAs: roots,
211200
NextProtos: append([]string{NextProtoDQ}, compatProtoDQ...),
212201
}
213202

214-
addr := dnsProxy.Addr(ProtoQUIC)
215-
conn, err := quic.DialAddrEarly(context.Background(), addr.String(), tlsConfig, nil)
203+
ctx := testutil.ContextWithTimeout(t, testTimeout)
204+
205+
conn, err := quic.DialAddrEarly(ctx, addr.String(), tlsConfig, nil)
216206
require.NoError(t, err)
217207
testutil.CleanupAndRequireSuccess(t, func() (err error) {
218208
return conn.CloseWithError(DoQCodeNoError, "")
219209
})
220210

221-
truncLen := len(packed) - 5
211+
truncLen := len(packed) - len(packed)/2
222212
require.Greater(t, truncLen, 0)
213+
223214
truncated := packed[:truncLen]
224215
reqBuf := proxyutil.AddPrefix(truncated)
225216
require.Greater(t, len(reqBuf), minDNSPacketSize)
226217

227-
stream, err := conn.OpenStreamSync(context.Background())
228-
require.NoError(t, err)
229-
_, err = stream.Write(reqBuf)
218+
stream, err := conn.OpenStreamSync(ctx)
230219
require.NoError(t, err)
231-
_ = stream.Close()
220+
testutil.CleanupAndRequireSuccess(t, stream.Close)
232221

233-
require.Never(t, func() bool {
234-
return handled.Load()
235-
}, testTimeout, 10*time.Millisecond)
222+
n, err := stream.Write(reqBuf)
223+
require.NoError(t, err)
224+
assert.Greater(t, n, minDNSPacketSize)
236225
}
237226

238227
// newTestResponse creates a test response for the specified request.

upstream/doq_internal_test.go

Lines changed: 21 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -232,7 +232,7 @@ func TestUpstreamDoQ_0RTT(t *testing.T) {
232232
require.True(t, conns[1].is0RTT())
233233
}
234234

235-
func TestUpstreamDoQ_readMsg_partialRead(t *testing.T) {
235+
func TestUpstreamDoQ_ReadMsg_partialRead(t *testing.T) {
236236
oldReq := createHostTestMessage("old.example")
237237
oldResp := (&dns.Msg{}).SetReply(oldReq)
238238
oldResp.Answer = []dns.RR{&dns.A{
@@ -242,23 +242,34 @@ func TestUpstreamDoQ_readMsg_partialRead(t *testing.T) {
242242
Class: dns.ClassINET,
243243
Ttl: 60,
244244
},
245-
A: net.IPv4(1, 1, 1, 1),
245+
A: net.IP{192, 0, 2, 1},
246246
}}
247247

248248
oldPacked, err := oldResp.Pack()
249249
require.NoError(t, err)
250+
250251
oldBuf := make([]byte, 2+len(oldPacked))
251252
binary.BigEndian.PutUint16(oldBuf, uint16(len(oldPacked)))
252253
copy(oldBuf[2:], oldPacked)
253254

254255
pool := &sync.Pool{
255-
New: func() any {
256+
New: func() (buf any) {
256257
b := make([]byte, dns.MaxMsgSize)
257258
copy(b, oldBuf)
259+
258260
return &b
259261
},
260262
}
261263

264+
ups, err := newDoQ(&url.URL{Host: "example:853"}, &Options{})
265+
require.NoError(t, err)
266+
testutil.CleanupAndRequireSuccess(t, ups.Close)
267+
268+
doq := testutil.RequireTypeAssert[*dnsOverQUIC](t, ups)
269+
doq.bytesPool = pool
270+
271+
newAnsIP := net.IP{192, 0, 2, 2}
272+
262273
newReq := createHostTestMessage("new.example")
263274
newResp := (&dns.Msg{}).SetReply(newReq)
264275
newResp.Answer = []dns.RR{&dns.A{
@@ -268,11 +279,12 @@ func TestUpstreamDoQ_readMsg_partialRead(t *testing.T) {
268279
Class: dns.ClassINET,
269280
Ttl: 60,
270281
},
271-
A: net.IPv4(2, 2, 2, 2),
282+
A: newAnsIP,
272283
}}
273284

274285
newPacked, err := newResp.Pack()
275286
require.NoError(t, err)
287+
276288
newBuf := make([]byte, 2+len(newPacked))
277289
binary.BigEndian.PutUint16(newBuf, uint16(len(newPacked)))
278290
copy(newBuf[2:], newPacked)
@@ -282,20 +294,14 @@ func TestUpstreamDoQ_readMsg_partialRead(t *testing.T) {
282294
chunk: 1,
283295
}
284296

285-
p := &dnsOverQUIC{
286-
addr: &url.URL{Host: "example:853"},
287-
bytesPool: pool,
288-
bytesPoolMu: &sync.Mutex{},
289-
}
290-
291-
got, err := p.readMsg(stream)
297+
got, err := doq.readMsg(stream)
292298
require.NoError(t, err)
293299
require.Len(t, got.Answer, 1)
294-
require.Equal(t, dns.Fqdn("new.example"), got.Question[0].Name)
295300

296-
a, ok := got.Answer[0].(*dns.A)
297-
require.True(t, ok, "wrong answer type: %T", got.Answer[0])
298-
require.Equal(t, net.IPv4(2, 2, 2, 2).To4(), a.A)
301+
assert.Equal(t, dns.Fqdn("new.example"), got.Question[0].Name)
302+
303+
a := testutil.RequireTypeAssert[*dns.A](t, got.Answer[0])
304+
assert.Equal(t, newAnsIP, a.A)
299305
}
300306

301307
type testQUICStream struct {

0 commit comments

Comments
 (0)