File: rtt_test.go

package info (click to toggle)
golang-github-lucas-clemente-quic-go 0.54.0-1
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 4,312 kB
  • sloc: sh: 54; makefile: 7
file content (57 lines) | stat: -rw-r--r-- 1,611 bytes parent folder | download
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
package versionnegotiation

import (
	"context"
	"net"
	"testing"
	"time"

	"github.com/quic-go/quic-go"
	quicproxy "github.com/quic-go/quic-go/integrationtests/tools/proxy"
	"github.com/quic-go/quic-go/internal/protocol"
	"github.com/stretchr/testify/require"
)

const rtt = 400 * time.Millisecond

func expectDurationInRTTs(t *testing.T, startTime time.Time, num int) {
	t.Helper()
	testDuration := time.Since(startTime)
	rtts := float32(testDuration) / float32(rtt)
	require.GreaterOrEqual(t, rtts, float32(num))
	require.Less(t, rtts, float32(num+1))
}

func TestVersionNegotiationFailure(t *testing.T) {
	if len(protocol.SupportedVersions) == 1 {
		t.Fatal("Test requires at least 2 supported versions.")
	}

	serverConfig := &quic.Config{}
	serverConfig.Versions = protocol.SupportedVersions[:1]
	ln, err := quic.ListenAddr("localhost:0", getTLSConfig(), serverConfig)
	require.NoError(t, err)
	defer ln.Close()

	proxyConn, err := net.ListenUDP("udp", &net.UDPAddr{IP: net.IPv4(127, 0, 0, 1), Port: 0})
	require.NoError(t, err)
	defer proxyConn.Close()
	// start the proxy
	proxy := quicproxy.Proxy{
		Conn:        proxyConn,
		ServerAddr:  ln.Addr().(*net.UDPAddr),
		DelayPacket: func(quicproxy.Direction, net.Addr, net.Addr, []byte) time.Duration { return rtt / 2 },
	}
	require.NoError(t, proxy.Start())
	defer proxy.Close()

	startTime := time.Now()
	_, err = quic.DialAddr(
		context.Background(),
		proxy.LocalAddr().String(),
		getTLSClientConfig(),
		maybeAddQLOGTracer(&quic.Config{Versions: protocol.SupportedVersions[1:2]}),
	)
	require.Error(t, err)
	expectDurationInRTTs(t, startTime, 1)
}