forked from quic-go/quic-go
* qlog: implement a Trace and a Writer struct * qlog: rename Trace to FileSeq * split qlog trace writer and QUIC qlog events into separate packages * use the new qlog.Recorder instead of the logging.ConnectionTracer
102 lines
2.7 KiB
Go
102 lines
2.7 KiB
Go
package events
|
|
|
|
import (
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/quic-go/quic-go/internal/synctest"
|
|
"github.com/quic-go/quic-go/qlog"
|
|
"github.com/quic-go/quic-go/qlogwriter"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func TestRecorder(t *testing.T) {
|
|
recorder := &Recorder{}
|
|
defer recorder.Close()
|
|
|
|
recorder.RecordEvent(qlog.MTUUpdated{Value: 1000})
|
|
recorder.RecordEvent(qlog.ALPNInformation{ChosenALPN: "foobar"})
|
|
recorder.RecordEvent(qlog.ECNStateUpdated{State: qlog.ECNStateCapable})
|
|
recorder.RecordEvent(qlog.MTUUpdated{Value: 1200})
|
|
|
|
require.Equal(t,
|
|
[]qlogwriter.Event{
|
|
qlog.MTUUpdated{Value: 1000},
|
|
qlog.ALPNInformation{ChosenALPN: "foobar"},
|
|
qlog.ECNStateUpdated{State: qlog.ECNStateCapable},
|
|
qlog.MTUUpdated{Value: 1200},
|
|
},
|
|
recorder.Events(),
|
|
)
|
|
|
|
require.Empty(t, recorder.Events(qlog.PacketBuffered{}))
|
|
require.Equal(t,
|
|
[]qlogwriter.Event{
|
|
qlog.MTUUpdated{Value: 1000},
|
|
qlog.MTUUpdated{Value: 1200},
|
|
},
|
|
recorder.Events(qlog.MTUUpdated{}),
|
|
)
|
|
|
|
recorder.Clear()
|
|
require.Empty(t, recorder.Events())
|
|
require.Empty(t, recorder.Events(qlog.MTUUpdated{}))
|
|
}
|
|
|
|
func TestRecorderFilterEventsSameName(t *testing.T) {
|
|
// some events have the same name when serialized, but use different structs
|
|
require.Equal(t,
|
|
qlog.PacketReceived{}.Name(),
|
|
qlog.VersionNegotiationReceived{}.Name(),
|
|
)
|
|
|
|
recorder := &Recorder{}
|
|
defer recorder.Close()
|
|
|
|
recorder.RecordEvent(qlog.PacketReceived{
|
|
Header: qlog.PacketHeader{PacketType: qlog.PacketTypeHandshake},
|
|
})
|
|
recorder.RecordEvent(qlog.VersionNegotiationReceived{
|
|
Header: qlog.PacketHeaderVersionNegotiation{},
|
|
SupportedVersions: []qlog.Version{0xdeadbeef, 0xdecafbad},
|
|
})
|
|
|
|
require.Equal(t,
|
|
[]qlogwriter.Event{
|
|
qlog.PacketReceived{
|
|
Header: qlog.PacketHeader{PacketType: qlog.PacketTypeHandshake},
|
|
},
|
|
},
|
|
recorder.Events(qlog.PacketReceived{}),
|
|
)
|
|
require.Equal(t,
|
|
[]qlogwriter.Event{
|
|
qlog.VersionNegotiationReceived{
|
|
Header: qlog.PacketHeaderVersionNegotiation{},
|
|
SupportedVersions: []qlog.Version{0xdeadbeef, 0xdecafbad},
|
|
},
|
|
},
|
|
recorder.Events(qlog.VersionNegotiationReceived{}),
|
|
)
|
|
}
|
|
|
|
func TestRecorderEventsWithTime(t *testing.T) {
|
|
synctest.Test(t, func(t *testing.T) {
|
|
recorder := &Recorder{}
|
|
start := time.Now()
|
|
recorder.RecordEvent(qlog.MTUUpdated{Value: 1000})
|
|
time.Sleep(time.Minute)
|
|
recorder.RecordEvent(qlog.ECNStateUpdated{State: qlog.ECNStateCapable})
|
|
time.Sleep(time.Minute)
|
|
recorder.RecordEvent(qlog.MTUUpdated{Value: 1200})
|
|
|
|
require.Equal(t,
|
|
[]Event{
|
|
{Time: start, Event: qlog.MTUUpdated{Value: 1000}},
|
|
{Time: start.Add(2 * time.Minute), Event: qlog.MTUUpdated{Value: 1200}},
|
|
},
|
|
recorder.EventsWithTime(qlog.MTUUpdated{}),
|
|
)
|
|
})
|
|
}
|