forked from quic-go/quic-go
use synctest for the stateless reset tests (#5415)
This commit is contained in:
@@ -3,13 +3,14 @@ package self_test
|
|||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"crypto/rand"
|
"crypto/rand"
|
||||||
"net"
|
|
||||||
"sync/atomic"
|
"sync/atomic"
|
||||||
"testing"
|
"testing"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/quic-go/quic-go"
|
"github.com/quic-go/quic-go"
|
||||||
quicproxy "github.com/quic-go/quic-go/integrationtests/tools/proxy"
|
"github.com/quic-go/quic-go/internal/synctest"
|
||||||
|
"github.com/quic-go/quic-go/testutils/simnet"
|
||||||
|
|
||||||
"github.com/stretchr/testify/require"
|
"github.com/stretchr/testify/require"
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -23,15 +24,23 @@ func TestStatelessResets(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func testStatelessReset(t *testing.T, connIDLen int) {
|
func testStatelessReset(t *testing.T, connIDLen int) {
|
||||||
|
synctest.Test(t, func(t *testing.T) {
|
||||||
|
var drop atomic.Bool
|
||||||
|
clientPacketConn, serverPacketConn, closeFn := newSimnetLinkWithRouter(t,
|
||||||
|
time.Millisecond,
|
||||||
|
&droppingRouter{Drop: func(p simnet.Packet) bool { return drop.Load() }},
|
||||||
|
)
|
||||||
|
defer closeFn(t)
|
||||||
|
|
||||||
var statelessResetKey quic.StatelessResetKey
|
var statelessResetKey quic.StatelessResetKey
|
||||||
rand.Read(statelessResetKey[:])
|
rand.Read(statelessResetKey[:])
|
||||||
|
|
||||||
c := newUDPConnLocalhost(t)
|
|
||||||
tr := &quic.Transport{
|
tr := &quic.Transport{
|
||||||
Conn: c,
|
Conn: serverPacketConn,
|
||||||
StatelessResetKey: &statelessResetKey,
|
StatelessResetKey: &statelessResetKey,
|
||||||
}
|
}
|
||||||
defer tr.Close()
|
defer tr.Close()
|
||||||
|
|
||||||
ln, err := tr.Listen(getTLSConfig(), getQuicConfig(nil))
|
ln, err := tr.Listen(getTLSConfig(), getQuicConfig(nil))
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
@@ -55,26 +64,17 @@ func testStatelessReset(t *testing.T, connIDLen int) {
|
|||||||
close(serverErr)
|
close(serverErr)
|
||||||
}()
|
}()
|
||||||
|
|
||||||
var drop atomic.Bool
|
|
||||||
proxy := quicproxy.Proxy{
|
|
||||||
Conn: newUDPConnLocalhost(t),
|
|
||||||
ServerAddr: ln.Addr().(*net.UDPAddr),
|
|
||||||
DropPacket: func(quicproxy.Direction, net.Addr, net.Addr, []byte) bool { return drop.Load() },
|
|
||||||
}
|
|
||||||
require.NoError(t, proxy.Start())
|
|
||||||
defer proxy.Close()
|
|
||||||
|
|
||||||
var conn *quic.Conn
|
var conn *quic.Conn
|
||||||
if connIDLen > 0 {
|
if connIDLen > 0 {
|
||||||
cl := &quic.Transport{
|
cl := &quic.Transport{
|
||||||
Conn: newUDPConnLocalhost(t),
|
Conn: clientPacketConn,
|
||||||
ConnectionIDLength: connIDLen,
|
ConnectionIDLength: connIDLen,
|
||||||
}
|
}
|
||||||
defer cl.Close()
|
defer cl.Close()
|
||||||
var err error
|
var err error
|
||||||
conn, err = cl.Dial(
|
conn, err = cl.Dial(
|
||||||
context.Background(),
|
context.Background(),
|
||||||
proxy.LocalAddr(),
|
serverPacketConn.LocalAddr(),
|
||||||
getTLSClientConfig(),
|
getTLSClientConfig(),
|
||||||
getQuicConfig(&quic.Config{MaxIdleTimeout: 2 * time.Second}),
|
getQuicConfig(&quic.Config{MaxIdleTimeout: 2 * time.Second}),
|
||||||
)
|
)
|
||||||
@@ -82,8 +82,8 @@ func testStatelessReset(t *testing.T, connIDLen int) {
|
|||||||
} else {
|
} else {
|
||||||
conn, err = quic.Dial(
|
conn, err = quic.Dial(
|
||||||
context.Background(),
|
context.Background(),
|
||||||
newUDPConnLocalhost(t),
|
clientPacketConn,
|
||||||
proxy.LocalAddr(),
|
serverPacketConn.LocalAddr(),
|
||||||
getTLSClientConfig(),
|
getTLSClientConfig(),
|
||||||
getQuicConfig(&quic.Config{MaxIdleTimeout: 2 * time.Second}),
|
getQuicConfig(&quic.Config{MaxIdleTimeout: 2 * time.Second}),
|
||||||
)
|
)
|
||||||
@@ -106,7 +106,7 @@ func testStatelessReset(t *testing.T, connIDLen int) {
|
|||||||
// We need to create a new Transport here, since the old one is still sending out
|
// We need to create a new Transport here, since the old one is still sending out
|
||||||
// CONNECTION_CLOSE packets for (recently) closed connections).
|
// CONNECTION_CLOSE packets for (recently) closed connections).
|
||||||
tr2 := &quic.Transport{
|
tr2 := &quic.Transport{
|
||||||
Conn: c,
|
Conn: serverPacketConn,
|
||||||
StatelessResetKey: &statelessResetKey,
|
StatelessResetKey: &statelessResetKey,
|
||||||
}
|
}
|
||||||
defer tr2.Close()
|
defer tr2.Close()
|
||||||
@@ -123,4 +123,5 @@ func testStatelessReset(t *testing.T, connIDLen int) {
|
|||||||
require.Error(t, serr)
|
require.Error(t, serr)
|
||||||
require.IsType(t, &quic.StatelessResetError{}, serr)
|
require.IsType(t, &quic.StatelessResetError{}, serr)
|
||||||
require.NoError(t, ln2.Close())
|
require.NoError(t, ln2.Close())
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user