logging: use code generation to generate the multiplexed tracers (#4677)

* logging: use code generation to generate the multiplexed tracers

* logging: ignore auto-generated files for code coverage

* logging: move code generation comment to generator script
This commit is contained in:
Marten Seemann
2024-11-28 23:57:11 +08:00
committed by GitHub
parent 40a768e77b
commit a7795541c9
13 changed files with 522 additions and 707 deletions

View File

@@ -4,12 +4,10 @@ import (
"net"
"testing"
mocklogging "github.com/quic-go/quic-go/internal/mocks/logging"
"github.com/quic-go/quic-go/internal/protocol"
. "github.com/quic-go/quic-go/logging"
"github.com/stretchr/testify/require"
"go.uber.org/mock/gomock"
)
func TestNilTracerWhenEmpty(t *testing.T) {
@@ -23,69 +21,16 @@ func TestSingleTracer(t *testing.T) {
}
func TestTracerPacketSent(t *testing.T) {
ctrl := gomock.NewController(t)
t1, tr1 := mocklogging.NewMockTracer(ctrl)
t2, tr2 := mocklogging.NewMockTracer(ctrl)
var s1, s2 ByteCount
t1 := &Tracer{SentPacket: func(_ net.Addr, _ *Header, s ByteCount, _ []Frame) { s1 = s }}
t2 := &Tracer{SentPacket: func(_ net.Addr, _ *Header, s ByteCount, _ []Frame) { s2 = s }}
tracer := NewMultiplexedTracer(t1, t2, &Tracer{})
const size ByteCount = 1024
remote := &net.UDPAddr{IP: net.IPv4(4, 3, 2, 1)}
hdr := &Header{DestConnectionID: protocol.ParseConnectionID([]byte{1, 2, 3})}
f := &MaxDataFrame{MaximumData: 1337}
tr1.EXPECT().SentPacket(remote, hdr, ByteCount(1024), []Frame{f})
tr2.EXPECT().SentPacket(remote, hdr, ByteCount(1024), []Frame{f})
tracer.SentPacket(remote, hdr, 1024, []Frame{f})
}
func TestTracerVersionNegotiationSent(t *testing.T) {
ctrl := gomock.NewController(t)
t1, tr1 := mocklogging.NewMockTracer(ctrl)
t2, tr2 := mocklogging.NewMockTracer(ctrl)
tracer := NewMultiplexedTracer(t1, t2, &Tracer{})
remote := &net.UDPAddr{IP: net.IPv4(4, 3, 2, 1)}
src := ArbitraryLenConnectionID{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13}
dest := ArbitraryLenConnectionID{1, 2, 3, 4}
versions := []Version{1, 2, 3}
tr1.EXPECT().SentVersionNegotiationPacket(remote, dest, src, versions)
tr2.EXPECT().SentVersionNegotiationPacket(remote, dest, src, versions)
tracer.SentVersionNegotiationPacket(remote, dest, src, versions)
}
func TestTracerPacketDropped(t *testing.T) {
ctrl := gomock.NewController(t)
t1, tr1 := mocklogging.NewMockTracer(ctrl)
t2, tr2 := mocklogging.NewMockTracer(ctrl)
tracer := NewMultiplexedTracer(t1, t2, &Tracer{})
remote := &net.UDPAddr{IP: net.IPv4(4, 3, 2, 1)}
tr1.EXPECT().DroppedPacket(remote, PacketTypeRetry, ByteCount(1024), PacketDropDuplicate)
tr2.EXPECT().DroppedPacket(remote, PacketTypeRetry, ByteCount(1024), PacketDropDuplicate)
tracer.DroppedPacket(remote, PacketTypeRetry, 1024, PacketDropDuplicate)
}
func TestTracerDebug(t *testing.T) {
ctrl := gomock.NewController(t)
t1, tr1 := mocklogging.NewMockTracer(ctrl)
t2, tr2 := mocklogging.NewMockTracer(ctrl)
tracer := NewMultiplexedTracer(t1, t2, &Tracer{})
tr1.EXPECT().Debug("foo", "bar")
tr2.EXPECT().Debug("foo", "bar")
tracer.Debug("foo", "bar")
}
func TestTracerClose(t *testing.T) {
ctrl := gomock.NewController(t)
t1, tr1 := mocklogging.NewMockTracer(ctrl)
t2, tr2 := mocklogging.NewMockTracer(ctrl)
tracer := NewMultiplexedTracer(t1, t2, &Tracer{})
tr1.EXPECT().Close()
tr2.EXPECT().Close()
tracer.Close()
tracer.SentPacket(remote, hdr, size, []Frame{f})
require.Equal(t, size, s1)
require.Equal(t, size, s2)
}