add the packet_received event

This commit is contained in:
Marten Seemann
2020-01-21 13:50:01 +07:00
parent 4d92dd05f9
commit 391a419142
3 changed files with 67 additions and 0 deletions

View File

@@ -61,3 +61,25 @@ func (e eventPacketSent) MarshalJSONObject(enc *gojay.Encoder) {
enc.BoolKeyOmitEmpty("is_coalesced", e.IsCoalesced)
enc.StringKeyOmitEmpty("trigger", e.Trigger)
}
type eventPacketReceived struct {
PacketType packetType
Header packetHeader
Frames frames
IsCoalesced bool
Trigger string
}
var _ eventDetails = eventPacketReceived{}
func (e eventPacketReceived) Category() category { return categoryTransport }
func (e eventPacketReceived) Name() string { return "packet_received" }
func (e eventPacketReceived) IsNil() bool { return false }
func (e eventPacketReceived) MarshalJSONObject(enc *gojay.Encoder) {
enc.StringKey("packet_type", e.PacketType.String())
enc.ObjectKey("header", e.Header)
enc.ArrayKeyOmitEmpty("frames", e.Frames)
enc.BoolKeyOmitEmpty("is_coalesced", e.IsCoalesced)
enc.StringKeyOmitEmpty("trigger", e.Trigger)
}

View File

@@ -13,6 +13,7 @@ import (
type Tracer interface {
Export() error
SentPacket(time.Time, *wire.ExtendedHeader, *wire.AckFrame, []wire.Frame)
ReceivedPacket(time.Time, *wire.ExtendedHeader, []wire.Frame)
}
type tracer struct {
@@ -73,3 +74,18 @@ func (t *tracer) SentPacket(time time.Time, hdr *wire.ExtendedHeader, ack *wire.
},
})
}
func (t *tracer) ReceivedPacket(time time.Time, hdr *wire.ExtendedHeader, frames []wire.Frame) {
fs := make([]frame, len(frames))
for i, f := range frames {
fs[i] = *transformFrame(f)
}
t.events = append(t.events, event{
Time: time,
eventDetails: eventPacketReceived{
PacketType: getPacketType(hdr),
Header: *transformHeader(hdr),
Frames: fs,
},
})
}

View File

@@ -130,5 +130,34 @@ var _ = Describe("Tracer", func() {
Expect(frames[0].(map[string]interface{})).To(HaveKeyWithValue("frame_type", "ack"))
Expect(frames[1].(map[string]interface{})).To(HaveKeyWithValue("frame_type", "max_data"))
})
It("records a received packet", func() {
now := time.Now()
tracer.ReceivedPacket(
now,
&wire.ExtendedHeader{
Header: wire.Header{
IsLongHeader: true,
Type: protocol.PacketTypeInitial,
DestConnectionID: protocol.ConnectionID{1, 2, 3, 4, 5, 6, 7, 8},
SrcConnectionID: protocol.ConnectionID{4, 3, 2, 1},
Version: protocol.VersionTLS,
},
PacketNumber: 1337,
},
[]wire.Frame{
&wire.MaxStreamDataFrame{StreamID: 42, ByteOffset: 987},
&wire.StreamFrame{StreamID: 123, Offset: 1234, Data: []byte("foobar"), FinBit: true},
},
)
t, category, eventName, ev := exportAndParse()
Expect(t).To(BeTemporally("~", now, time.Millisecond))
Expect(category).To(Equal("transport"))
Expect(eventName).To(Equal("packet_received"))
Expect(ev).To(HaveKeyWithValue("packet_type", "initial"))
Expect(ev).To(HaveKey("header"))
Expect(ev).To(HaveKey("frames"))
Expect(ev["frames"].([]interface{})).To(HaveLen(2))
})
})
})