Files
quic-go/qlog/packet_header_test.go
Marten Seemann e52027f496 qlog: migrate tests away from Ginkgo (#4640)
* qlog: migrate tests away from Ginkgo

* ci: don't run prealloc linter on test files
2024-09-11 00:28:28 -07:00

146 lines
3.6 KiB
Go

package qlog
import (
"bytes"
"encoding/json"
"testing"
"github.com/francoispqt/gojay"
"github.com/quic-go/quic-go/internal/protocol"
"github.com/quic-go/quic-go/internal/wire"
"github.com/quic-go/quic-go/logging"
"github.com/stretchr/testify/require"
)
func TestPacketTypeFromEncryptionLevel(t *testing.T) {
tests := []struct {
name string
level protocol.EncryptionLevel
want logging.PacketType
}{
{"Initial", protocol.EncryptionInitial, logging.PacketTypeInitial},
{"Handshake", protocol.EncryptionHandshake, logging.PacketTypeHandshake},
{"0-RTT", protocol.Encryption0RTT, logging.PacketType0RTT},
{"1-RTT", protocol.Encryption1RTT, logging.PacketType1RTT},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
got := getPacketTypeFromEncryptionLevel(tt.level)
require.Equal(t, tt.want, got)
})
}
}
func checkHeader(t *testing.T, hdr *wire.ExtendedHeader, expected map[string]interface{}) {
buf := &bytes.Buffer{}
enc := gojay.NewEncoder(buf)
require.NoError(t, enc.Encode(transformLongHeader(hdr)))
data := buf.Bytes()
require.True(t, json.Valid(data))
checkEncoding(t, data, expected)
}
func TestMarshalHeaderWithPayloadLength(t *testing.T) {
checkHeader(t,
&wire.ExtendedHeader{
PacketNumber: 42,
Header: wire.Header{
Type: protocol.PacketTypeInitial,
Length: 123,
Version: protocol.Version(0xdecafbad),
},
},
map[string]interface{}{
"packet_type": "initial",
"packet_number": 42,
"dcil": 0,
"scil": 0,
"version": "decafbad",
},
)
}
func TestMarshalInitialWithToken(t *testing.T) {
checkHeader(t,
&wire.ExtendedHeader{
PacketNumber: 4242,
Header: wire.Header{
Type: protocol.PacketTypeInitial,
Length: 123,
Version: protocol.Version(0xdecafbad),
Token: []byte{0xde, 0xad, 0xbe, 0xef},
},
},
map[string]interface{}{
"packet_type": "initial",
"packet_number": 4242,
"dcil": 0,
"scil": 0,
"version": "decafbad",
"token": map[string]interface{}{"data": "deadbeef"},
},
)
}
func TestMarshalRetryPacket(t *testing.T) {
checkHeader(t,
&wire.ExtendedHeader{
Header: wire.Header{
Type: protocol.PacketTypeRetry,
SrcConnectionID: protocol.ParseConnectionID([]byte{0x11, 0x22, 0x33, 0x44}),
Version: protocol.Version(0xdecafbad),
Token: []byte{0xde, 0xad, 0xbe, 0xef},
},
},
map[string]interface{}{
"packet_type": "retry",
"dcil": 0,
"scil": 4,
"scid": "11223344",
"token": map[string]interface{}{"data": "deadbeef"},
"version": "decafbad",
},
)
}
func TestMarshalPacketWithPacketNumber0(t *testing.T) {
checkHeader(t,
&wire.ExtendedHeader{
PacketNumber: 0,
Header: wire.Header{
Type: protocol.PacketTypeHandshake,
Version: protocol.Version(0xdecafbad),
},
},
map[string]interface{}{
"packet_type": "handshake",
"packet_number": 0,
"dcil": 0,
"scil": 0,
"version": "decafbad",
},
)
}
func TestMarshalHeaderWithSourceConnectionID(t *testing.T) {
checkHeader(t,
&wire.ExtendedHeader{
PacketNumber: 42,
Header: wire.Header{
Type: protocol.PacketTypeHandshake,
SrcConnectionID: protocol.ParseConnectionID([]byte{0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff}),
Version: protocol.Version(0xdecafbad),
},
},
map[string]interface{}{
"packet_type": "handshake",
"packet_number": 42,
"dcil": 0,
"scil": 16,
"scid": "00112233445566778899aabbccddeeff",
"version": "decafbad",
},
)
}