forked from quic-go/quic-go
* wire: translate ACK frame tests * wire: translate CONNECTION_CLOSE frame tests * wire: translate DATA_BLOCKED frame tests * wire: translate DATAGRAM frame tests * wire: translate HANDSHAKE_DONE frame tests * wire: translate MAX_DATA frame tests * wire: translate MAX_STREAM_DATA frame tests * wire: translate MAX_STREAMS frame tests * wire: translate NEW_CONNECTION_ID frame tests * wire: translate NEW_TOKEN frame tests * wire: translate PATH_CHALLENGE frame tests * wire: translate PATH_RESPONSE frame tests * wire: translate PING frame test * wire: translate RESET_STREAM frame tests * wire: translate RETIRE_CONNECTION_ID frame tests * wire: translate STOP_SENDING frame tests * wire: translate STREAM_DATA_BLOCKED frame tests * wire: translate STREAMS_BLOCKED frame tests * wire: translate CRYPTO frame tests * wire: translate STREAM frame tests * wire: translate version negotiation tests * wire: translate header tests * wire: translate pool tests * wire: translate frame logging tests * wire: translate short header tests * wire: translate framer parser tests * wire: translate transport parameter tests
106 lines
3.1 KiB
Go
106 lines
3.1 KiB
Go
package wire
|
|
|
|
import (
|
|
"bytes"
|
|
"io"
|
|
"testing"
|
|
|
|
"github.com/quic-go/quic-go/internal/protocol"
|
|
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func TestParseShortHeader(t *testing.T) {
|
|
data := []byte{
|
|
0b01000110,
|
|
0xde, 0xad, 0xbe, 0xef,
|
|
0x13, 0x37, 0x99,
|
|
}
|
|
l, pn, pnLen, kp, err := ParseShortHeader(data, 4)
|
|
require.NoError(t, err)
|
|
require.Equal(t, len(data), l)
|
|
require.Equal(t, protocol.KeyPhaseOne, kp)
|
|
require.Equal(t, protocol.PacketNumber(0x133799), pn)
|
|
require.Equal(t, protocol.PacketNumberLen3, pnLen)
|
|
}
|
|
|
|
func TestParseShortHeaderNoQUICBit(t *testing.T) {
|
|
data := []byte{
|
|
0b00000101,
|
|
0xde, 0xad, 0xbe, 0xef,
|
|
0x13, 0x37,
|
|
}
|
|
_, _, _, _, err := ParseShortHeader(data, 4)
|
|
require.EqualError(t, err, "not a QUIC packet")
|
|
}
|
|
|
|
func TestParseShortHeaderReservedBitsSet(t *testing.T) {
|
|
data := []byte{
|
|
0b01010101,
|
|
0xde, 0xad, 0xbe, 0xef,
|
|
0x13, 0x37,
|
|
}
|
|
_, pn, _, _, err := ParseShortHeader(data, 4)
|
|
require.EqualError(t, err, ErrInvalidReservedBits.Error())
|
|
require.Equal(t, protocol.PacketNumber(0x1337), pn)
|
|
}
|
|
|
|
func TestParseShortHeaderErrorsWhenPassedLongHeaderPacket(t *testing.T) {
|
|
_, _, _, _, err := ParseShortHeader([]byte{0x80}, 4)
|
|
require.EqualError(t, err, "not a short header packet")
|
|
}
|
|
|
|
func TestParseShortHeaderErrorsOnEOF(t *testing.T) {
|
|
data := []byte{
|
|
0b01000110,
|
|
0xde, 0xad, 0xbe, 0xef,
|
|
0x13, 0x37, 0x99,
|
|
}
|
|
_, _, _, _, err := ParseShortHeader(data, 4)
|
|
require.NoError(t, err)
|
|
for i := range data {
|
|
_, _, _, _, err := ParseShortHeader(data[:i], 4)
|
|
require.EqualError(t, err, io.EOF.Error())
|
|
}
|
|
}
|
|
|
|
func TestShortHeaderLen(t *testing.T) {
|
|
require.Equal(t, protocol.ByteCount(8), ShortHeaderLen(protocol.ParseConnectionID([]byte{1, 2, 3, 4}), protocol.PacketNumberLen3))
|
|
require.Equal(t, protocol.ByteCount(2), ShortHeaderLen(protocol.ParseConnectionID([]byte{}), protocol.PacketNumberLen1))
|
|
}
|
|
|
|
func TestWriteShortHeaderPacket(t *testing.T) {
|
|
connID := protocol.ParseConnectionID([]byte{1, 2, 3, 4})
|
|
b, err := AppendShortHeader(nil, connID, 1337, 4, protocol.KeyPhaseOne)
|
|
require.NoError(t, err)
|
|
l, pn, pnLen, kp, err := ParseShortHeader(b, 4)
|
|
require.NoError(t, err)
|
|
require.Equal(t, protocol.PacketNumber(1337), pn)
|
|
require.Equal(t, protocol.PacketNumberLen4, pnLen)
|
|
require.Equal(t, protocol.KeyPhaseOne, kp)
|
|
require.Equal(t, len(b), l)
|
|
}
|
|
|
|
func TestLogShortHeaderWithConnectionID(t *testing.T) {
|
|
buf := &bytes.Buffer{}
|
|
logger := setupLogTest(t, buf)
|
|
|
|
connID := protocol.ParseConnectionID([]byte{0xde, 0xad, 0xbe, 0xef, 0xca, 0xfe, 0x13, 0x37})
|
|
LogShortHeader(logger, connID, 1337, protocol.PacketNumberLen4, protocol.KeyPhaseOne)
|
|
require.Contains(t, buf.String(), "Short Header{DestConnectionID: deadbeefcafe1337, PacketNumber: 1337, PacketNumberLen: 4, KeyPhase: 1}")
|
|
}
|
|
|
|
func BenchmarkWriteShortHeader(b *testing.B) {
|
|
b.ReportAllocs()
|
|
buf := make([]byte, 100)
|
|
connID := protocol.ParseConnectionID([]byte{1, 2, 3, 4, 5, 6})
|
|
for i := 0; i < b.N; i++ {
|
|
var err error
|
|
buf, err = AppendShortHeader(buf, connID, 1337, protocol.PacketNumberLen4, protocol.KeyPhaseOne)
|
|
if err != nil {
|
|
b.Fatalf("failed to write short header: %s", err)
|
|
}
|
|
buf = buf[:0]
|
|
}
|
|
}
|