forked from quic-go/quic-go
split the tracing function for received short and long header packets
This commit is contained in:
@@ -17,7 +17,7 @@ import (
|
||||
|
||||
var (
|
||||
sentHeaders []*logging.ExtendedHeader
|
||||
receivedHeaders []*logging.ExtendedHeader
|
||||
receivedHeaders []*logging.ShortHeader
|
||||
)
|
||||
|
||||
func countKeyPhases() (sent, received int) {
|
||||
@@ -33,9 +33,6 @@ func countKeyPhases() (sent, received int) {
|
||||
}
|
||||
lastKeyPhase = protocol.KeyPhaseOne
|
||||
for _, hdr := range receivedHeaders {
|
||||
if hdr.IsLongHeader {
|
||||
continue
|
||||
}
|
||||
if hdr.KeyPhase != lastKeyPhase {
|
||||
received++
|
||||
lastKeyPhase = hdr.KeyPhase
|
||||
@@ -52,7 +49,7 @@ func (t *keyUpdateConnTracer) SentPacket(hdr *logging.ExtendedHeader, size loggi
|
||||
sentHeaders = append(sentHeaders, hdr)
|
||||
}
|
||||
|
||||
func (t *keyUpdateConnTracer) ReceivedPacket(hdr *logging.ExtendedHeader, size logging.ByteCount, frames []logging.Frame) {
|
||||
func (t *keyUpdateConnTracer) ReceivedShortHeaderPacket(hdr *logging.ShortHeader, size logging.ByteCount, frames []logging.Frame) {
|
||||
receivedHeaders = append(receivedHeaders, hdr)
|
||||
}
|
||||
|
||||
|
||||
@@ -84,11 +84,8 @@ var _ = Describe("Packetization", func() {
|
||||
}
|
||||
Expect(conn.CloseWithError(0, "")).To(Succeed())
|
||||
|
||||
countBundledPackets := func(packets []packet) (numBundled int) {
|
||||
countBundledPackets := func(packets []shortHeaderPacket) (numBundled int) {
|
||||
for _, p := range packets {
|
||||
if p.hdr.IsLongHeader {
|
||||
continue
|
||||
}
|
||||
var hasAck, hasStreamFrame bool
|
||||
for _, f := range p.frames {
|
||||
switch f.(type) {
|
||||
@@ -105,8 +102,8 @@ var _ = Describe("Packetization", func() {
|
||||
return
|
||||
}
|
||||
|
||||
numBundledIncoming := countBundledPackets(clientTracer.getRcvdPackets())
|
||||
numBundledOutgoing := countBundledPackets(serverTracer.getRcvdPackets())
|
||||
numBundledIncoming := countBundledPackets(clientTracer.getRcvdShortHeaderPackets())
|
||||
numBundledOutgoing := countBundledPackets(serverTracer.getRcvdShortHeaderPackets())
|
||||
fmt.Fprintf(GinkgoWriter, "bundled incoming packets: %d / %d\n", numBundledIncoming, numMsg)
|
||||
fmt.Fprintf(GinkgoWriter, "bundled outgoing packets: %d / %d\n", numBundledOutgoing, numMsg)
|
||||
Expect(numBundledIncoming).To(And(
|
||||
|
||||
@@ -347,18 +347,29 @@ type packet struct {
|
||||
frames []logging.Frame
|
||||
}
|
||||
|
||||
type shortHeaderPacket struct {
|
||||
time time.Time
|
||||
hdr *logging.ShortHeader
|
||||
frames []logging.Frame
|
||||
}
|
||||
|
||||
type packetTracer struct {
|
||||
logging.NullConnectionTracer
|
||||
closed chan struct{}
|
||||
sent, rcvd []packet
|
||||
closed chan struct{}
|
||||
rcvdShortHdr []shortHeaderPacket
|
||||
sent, rcvdLongHdr []packet
|
||||
}
|
||||
|
||||
func newPacketTracer() *packetTracer {
|
||||
return &packetTracer{closed: make(chan struct{})}
|
||||
}
|
||||
|
||||
func (t *packetTracer) ReceivedPacket(hdr *logging.ExtendedHeader, _ logging.ByteCount, frames []logging.Frame) {
|
||||
t.rcvd = append(t.rcvd, packet{time: time.Now(), hdr: hdr, frames: frames})
|
||||
func (t *packetTracer) ReceivedLongHeaderPacket(hdr *logging.ExtendedHeader, _ logging.ByteCount, frames []logging.Frame) {
|
||||
t.rcvdLongHdr = append(t.rcvdLongHdr, packet{time: time.Now(), hdr: hdr, frames: frames})
|
||||
}
|
||||
|
||||
func (t *packetTracer) ReceivedShortHeaderPacket(hdr *logging.ShortHeader, _ logging.ByteCount, frames []logging.Frame) {
|
||||
t.rcvdShortHdr = append(t.rcvdShortHdr, shortHeaderPacket{time: time.Now(), hdr: hdr, frames: frames})
|
||||
}
|
||||
|
||||
func (t *packetTracer) SentPacket(hdr *logging.ExtendedHeader, _ logging.ByteCount, ack *wire.AckFrame, frames []logging.Frame) {
|
||||
@@ -373,9 +384,14 @@ func (t *packetTracer) getSentPackets() []packet {
|
||||
return t.sent
|
||||
}
|
||||
|
||||
func (t *packetTracer) getRcvdPackets() []packet {
|
||||
func (t *packetTracer) getRcvdLongHeaderPackets() []packet {
|
||||
<-t.closed
|
||||
return t.rcvd
|
||||
return t.rcvdLongHdr
|
||||
}
|
||||
|
||||
func (t *packetTracer) getRcvdShortHeaderPackets() []shortHeaderPacket {
|
||||
<-t.closed
|
||||
return t.rcvdShortHdr
|
||||
}
|
||||
|
||||
func TestSelf(t *testing.T) {
|
||||
|
||||
@@ -226,7 +226,7 @@ var _ = Describe("Timeout tests", func() {
|
||||
lastAckElicitingPacketSentAt = p.time
|
||||
}
|
||||
}
|
||||
rcvdPackets := tr.getRcvdPackets()
|
||||
rcvdPackets := tr.getRcvdShortHeaderPackets()
|
||||
lastPacketRcvdAt := rcvdPackets[len(rcvdPackets)-1].time
|
||||
// We're ignoring here that only the first ack-eliciting packet sent resets the idle timeout.
|
||||
// This is ok since we're dealing with a lossless connection here,
|
||||
|
||||
@@ -217,7 +217,7 @@ var _ = Describe("0-RTT", func() {
|
||||
)
|
||||
|
||||
var numNewConnIDs int
|
||||
for _, p := range tracer.getRcvdPackets() {
|
||||
for _, p := range tracer.getRcvdLongHeaderPackets() {
|
||||
for _, f := range p.frames {
|
||||
if _, ok := f.(*logging.NewConnectionIDFrame); ok {
|
||||
numNewConnIDs++
|
||||
@@ -233,7 +233,7 @@ var _ = Describe("0-RTT", func() {
|
||||
num0RTT := atomic.LoadUint32(num0RTTPackets)
|
||||
fmt.Fprintf(GinkgoWriter, "Sent %d 0-RTT packets.", num0RTT)
|
||||
Expect(num0RTT).ToNot(BeZero())
|
||||
zeroRTTPackets := get0RTTPackets(tracer.getRcvdPackets())
|
||||
zeroRTTPackets := get0RTTPackets(tracer.getRcvdLongHeaderPackets())
|
||||
Expect(len(zeroRTTPackets)).To(BeNumerically(">", 10))
|
||||
sort.Slice(zeroRTTPackets, func(i, j int) bool { return zeroRTTPackets[i] < zeroRTTPackets[j] })
|
||||
Expect(zeroRTTPackets[0]).To(Equal(protocol.PacketNumber(0)))
|
||||
@@ -310,7 +310,7 @@ var _ = Describe("0-RTT", func() {
|
||||
num0RTT := atomic.LoadUint32(num0RTTPackets)
|
||||
fmt.Fprintf(GinkgoWriter, "Sent %d 0-RTT packets.", num0RTT)
|
||||
Expect(num0RTT).To(Or(BeEquivalentTo(2), BeEquivalentTo(3))) // the FIN might be sent in a separate packet
|
||||
Expect(get0RTTPackets(tracer.getRcvdPackets())).To(HaveLen(int(num0RTT)))
|
||||
Expect(get0RTTPackets(tracer.getRcvdLongHeaderPackets())).To(HaveLen(int(num0RTT)))
|
||||
})
|
||||
|
||||
It("transfers 0-RTT data, when 0-RTT packets are lost", func() {
|
||||
@@ -367,7 +367,7 @@ var _ = Describe("0-RTT", func() {
|
||||
fmt.Fprintf(GinkgoWriter, "Sent %d 0-RTT packets. Dropped %d of those.", num0RTT, numDropped)
|
||||
Expect(numDropped).ToNot(BeZero())
|
||||
Expect(num0RTT).ToNot(BeZero())
|
||||
Expect(get0RTTPackets(tracer.getRcvdPackets())).ToNot(BeEmpty())
|
||||
Expect(get0RTTPackets(tracer.getRcvdLongHeaderPackets())).ToNot(BeEmpty())
|
||||
})
|
||||
|
||||
It("retransmits all 0-RTT data when the server performs a Retry", func() {
|
||||
@@ -441,7 +441,7 @@ var _ = Describe("0-RTT", func() {
|
||||
defer mutex.Unlock()
|
||||
Expect(firstCounter).To(BeNumerically("~", 5000+100 /* framing overhead */, 100)) // the FIN bit might be sent extra
|
||||
Expect(secondCounter).To(BeNumerically("~", firstCounter, 20))
|
||||
zeroRTTPackets := get0RTTPackets(tracer.getRcvdPackets())
|
||||
zeroRTTPackets := get0RTTPackets(tracer.getRcvdLongHeaderPackets())
|
||||
Expect(len(zeroRTTPackets)).To(BeNumerically(">=", 5))
|
||||
Expect(zeroRTTPackets[0]).To(BeNumerically(">=", protocol.PacketNumber(5)))
|
||||
})
|
||||
@@ -516,7 +516,7 @@ var _ = Describe("0-RTT", func() {
|
||||
num0RTT := atomic.LoadUint32(num0RTTPackets)
|
||||
fmt.Fprintf(GinkgoWriter, "Sent %d 0-RTT packets.", num0RTT)
|
||||
Expect(num0RTT).ToNot(BeZero())
|
||||
Expect(get0RTTPackets(tracer.getRcvdPackets())).To(BeEmpty())
|
||||
Expect(get0RTTPackets(tracer.getRcvdLongHeaderPackets())).To(BeEmpty())
|
||||
})
|
||||
|
||||
It("rejects 0-RTT when the ALPN changed", func() {
|
||||
@@ -545,7 +545,7 @@ var _ = Describe("0-RTT", func() {
|
||||
num0RTT := atomic.LoadUint32(num0RTTPackets)
|
||||
fmt.Fprintf(GinkgoWriter, "Sent %d 0-RTT packets.", num0RTT)
|
||||
Expect(num0RTT).ToNot(BeZero())
|
||||
Expect(get0RTTPackets(tracer.getRcvdPackets())).To(BeEmpty())
|
||||
Expect(get0RTTPackets(tracer.getRcvdLongHeaderPackets())).To(BeEmpty())
|
||||
})
|
||||
|
||||
DescribeTable("flow control limits",
|
||||
@@ -603,7 +603,7 @@ var _ = Describe("0-RTT", func() {
|
||||
Eventually(conn.Context().Done()).Should(BeClosed())
|
||||
|
||||
var processedFirst bool
|
||||
for _, p := range tracer.getRcvdPackets() {
|
||||
for _, p := range tracer.getRcvdLongHeaderPackets() {
|
||||
for _, f := range p.frames {
|
||||
if sf, ok := f.(*logging.StreamFrame); ok {
|
||||
if !processedFirst {
|
||||
@@ -613,9 +613,7 @@ var _ = Describe("0-RTT", func() {
|
||||
Expect(sf.Length).To(BeEquivalentTo(3))
|
||||
processedFirst = true
|
||||
} else {
|
||||
// All other STREAM frames can only be sent after handshake completion.
|
||||
Expect(p.hdr.IsLongHeader).To(BeFalse())
|
||||
Expect(sf.Offset).ToNot(BeZero())
|
||||
Fail("STREAM was shouldn't have been sent in 0-RTT")
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -700,7 +698,7 @@ var _ = Describe("0-RTT", func() {
|
||||
num0RTT := atomic.LoadUint32(num0RTTPackets)
|
||||
fmt.Fprintf(GinkgoWriter, "Sent %d 0-RTT packets.", num0RTT)
|
||||
Expect(num0RTT).ToNot(BeZero())
|
||||
Expect(get0RTTPackets(tracer.getRcvdPackets())).To(BeEmpty())
|
||||
Expect(get0RTTPackets(tracer.getRcvdLongHeaderPackets())).To(BeEmpty())
|
||||
})
|
||||
}
|
||||
|
||||
@@ -732,8 +730,8 @@ var _ = Describe("0-RTT", func() {
|
||||
|
||||
transfer0RTTData(ln, proxy.LocalPort(), clientConf, nil, PRData)
|
||||
|
||||
Expect(tracer.getRcvdPackets()[0].hdr.Type).To(Equal(protocol.PacketTypeInitial))
|
||||
zeroRTTPackets := get0RTTPackets(tracer.getRcvdPackets())
|
||||
Expect(tracer.getRcvdLongHeaderPackets()[0].hdr.Type).To(Equal(protocol.PacketTypeInitial))
|
||||
zeroRTTPackets := get0RTTPackets(tracer.getRcvdLongHeaderPackets())
|
||||
Expect(len(zeroRTTPackets)).To(BeNumerically(">", 10))
|
||||
Expect(zeroRTTPackets[0]).To(Equal(protocol.PacketNumber(0)))
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user