MCPcopy
hub / github.com/cloudflare/cloudflared / testDatagram

Function testDatagram

quic/datagram_test.go:116–239  ·  view source on GitHub ↗
(t *testing.T, version uint8, sessionToPayloads []*packet.Session, packets []packet.ICMP)

Source from the content-addressed store, hash-verified

114}
115
116func testDatagram(t *testing.T, version uint8, sessionToPayloads []*packet.Session, packets []packet.ICMP) {
117 quicConfig := &quic.Config{
118 KeepAlivePeriod: 5 * time.Millisecond,
119 EnableDatagrams: true,
120 }
121 quicListener := newQUICListener(t, quicConfig)
122 defer quicListener.Close()
123
124 logger := zerolog.Nop()
125
126 tracingIdentity, err := tracing.NewIdentity("ec31ad8a01fde11fdcabe2efdce36873:52726f6cabc144f5:0:1")
127 require.NoError(t, err)
128 serializedTracingID, err := tracingIdentity.MarshalBinary()
129 require.NoError(t, err)
130 tracingSpan := &TracingSpanPacket{
131 Spans: []byte("tracing"),
132 TracingIdentity: serializedTracingID,
133 }
134
135 errGroup, ctx := errgroup.WithContext(context.Background())
136 // Run edge side of datagram muxer
137 errGroup.Go(func() error {
138 // Accept quic connection
139 quicSession, err := quicListener.Accept(ctx)
140 if err != nil {
141 return err
142 }
143
144 sessionDemuxChan := make(chan *packet.Session, 16)
145
146 switch version {
147 case 1:
148 muxer := NewDatagramMuxer(quicSession, &logger, sessionDemuxChan)
149 muxer.ServeReceive(ctx)
150 case 2:
151 muxer := NewDatagramMuxerV2(quicSession, &logger, sessionDemuxChan)
152 muxer.ServeReceive(ctx)
153
154 for _, pk := range packets {
155 received, err := muxer.ReceivePacket(ctx)
156 require.NoError(t, err)
157 validateIPPacket(t, received, &pk)
158 received, err = muxer.ReceivePacket(ctx)
159 require.NoError(t, err)
160 validateIPPacketWithTracing(t, received, &pk, serializedTracingID)
161 }
162 received, err := muxer.ReceivePacket(ctx)
163 require.NoError(t, err)
164 validateTracingSpans(t, received, tracingSpan)
165 default:
166 return fmt.Errorf("unknown datagram version %d", version)
167 }
168
169 for _, expectedPayload := range sessionToPayloads {
170 actualPayload := <-sessionDemuxChan
171 require.Equal(t, expectedPayload, actualPayload)
172 }
173 return nil

Callers 1

TestDatagramFunction · 0.85

Calls 15

MarshalBinaryMethod · 0.95
ServeReceiveMethod · 0.95
EncodeMethod · 0.95
SendPacketMethod · 0.95
SendToSessionMethod · 0.95
NewIdentityFunction · 0.92
NewEncoderFunction · 0.92
newQUICListenerFunction · 0.85
NewDatagramMuxerFunction · 0.85
NewDatagramMuxerV2Function · 0.85
validateIPPacketFunction · 0.85

Tested by

no test coverage detected