File: ack_frequency_frame_test.go

package info (click to toggle)
golang-github-lucas-clemente-quic-go 0.55.0-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 4,376 kB
  • sloc: sh: 54; makefile: 14
file content (71 lines) | stat: -rw-r--r-- 2,789 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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
package wire

import (
	"io"
	"math"
	"testing"
	"time"

	"github.com/quic-go/quic-go/internal/protocol"
	"github.com/quic-go/quic-go/quicvarint"

	"github.com/stretchr/testify/require"
)

func TestParseAckFrequency(t *testing.T) {
	data := encodeVarInt(0xdeadbeef)             // sequence number
	data = append(data, encodeVarInt(0xcafe)...) // threshold
	data = append(data, encodeVarInt(1337)...)   // update max ack delay
	data = append(data, encodeVarInt(12345)...)  // reordering threshold
	frame, l, err := parseAckFrequencyFrame(data, protocol.Version1)
	require.NoError(t, err)
	require.Equal(t, uint64(0xdeadbeef), frame.SequenceNumber)
	require.Equal(t, uint64(0xcafe), frame.AckElicitingThreshold)
	require.Equal(t, 1337*time.Microsecond, frame.RequestMaxAckDelay)
	require.Equal(t, protocol.PacketNumber(12345), frame.ReorderingThreshold)
	require.Equal(t, len(data), l)
}

func TestParseAckFrequencyMaxAckDelayOverflow(t *testing.T) {
	data := encodeVarInt(0xdeadbeef)                     // sequence number
	data = append(data, encodeVarInt(0xcafe)...)         // threshold
	data = append(data, encodeVarInt(quicvarint.Max)...) // update max ack delay
	data = append(data, encodeVarInt(12345)...)          // reordering threshold
	frame, l, err := parseAckFrequencyFrame(data, protocol.Version1)
	require.NoError(t, err)
	require.Greater(t, frame.RequestMaxAckDelay, time.Duration(0))
	require.Equal(t, frame.RequestMaxAckDelay, time.Duration(math.MaxInt64))
	require.Equal(t, len(data), l)
}

func TestParseAckFrequencyErrorsOnEOFs(t *testing.T) {
	data := append([]byte{}, encodeVarInt(0xdeadbeef)...) // sequence number
	data = append(data, encodeVarInt(0xcafe)...)          // threshold
	data = append(data, encodeVarInt(1337)...)            // update max ack delay
	data = append(data, encodeVarInt(12345)...)           // reordering threshold
	_, l, err := parseAckFrequencyFrame(data, protocol.Version1)
	require.NoError(t, err)
	require.Equal(t, len(data), l)
	for i := range data {
		_, _, err := parseAckFrequencyFrame(data[:i], protocol.Version1)
		require.Equal(t, io.EOF, err)
	}
}

func TestWriteAckFrequencyFrame(t *testing.T) {
	frame := &AckFrequencyFrame{
		SequenceNumber:        0xdecafbad,
		AckElicitingThreshold: 0xdeadbeef,
		RequestMaxAckDelay:    12345 * time.Microsecond,
		ReorderingThreshold:   1337,
	}
	b, err := frame.Append(nil, protocol.Version1)
	require.NoError(t, err)
	expected := encodeVarInt(uint64(FrameTypeAckFrequency))
	expected = append(expected, encodeVarInt(0xdecafbad)...)
	expected = append(expected, encodeVarInt(0xdeadbeef)...)
	expected = append(expected, encodeVarInt(12345)...)
	expected = append(expected, encodeVarInt(1337)...)
	require.Equal(t, expected, b)
	require.Len(t, b, int(frame.Length(protocol.Version1)))
}