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

Function serveSession

connection/quic_connection_test.go:782–836  ·  view source on GitHub ↗
(ctx context.Context, datagramConn *datagramV2Connection, edgeQUICSession quic.Connection, closeType closeReason, expectedReason string, t *testing.T)

Source from the content-addressed store, hash-verified

780}
781
782func serveSession(ctx context.Context, datagramConn *datagramV2Connection, edgeQUICSession quic.Connection, closeType closeReason, expectedReason string, t *testing.T) {
783 payload := []byte(t.Name())
784 sessionID := uuid.New()
785 cfdConn, originConn := net.Pipe()
786 // Registers and run a new session
787 session, err := datagramConn.sessionManager.RegisterSession(ctx, sessionID, cfdConn)
788 require.NoError(t, err)
789
790 sessionDone := make(chan struct{})
791 go func() {
792 datagramConn.serveUDPSession(session, time.Millisecond*50)
793 close(sessionDone)
794 }()
795
796 // Send a message to the quic session on edge side, it should be deumx to this datagram v2 session
797 muxedPayload, err := cfdquic.SuffixSessionID(sessionID, payload)
798 require.NoError(t, err)
799 muxedPayload, err = cfdquic.SuffixType(muxedPayload, cfdquic.DatagramTypeUDP)
800 require.NoError(t, err)
801
802 err = edgeQUICSession.SendDatagram(muxedPayload)
803 require.NoError(t, err)
804
805 readBuffer := make([]byte, len(payload)+1)
806 n, err := originConn.Read(readBuffer)
807 require.NoError(t, err)
808 require.Equal(t, len(payload), n)
809 require.True(t, bytes.Equal(payload, readBuffer[:n]))
810
811 // Close connection to terminate session
812 switch closeType {
813 case closedByOrigin:
814 _ = originConn.Close()
815 case closedByRemote:
816 err = datagramConn.UnregisterUdpSession(ctx, sessionID, expectedReason)
817 require.NoError(t, err)
818 case closedByTimeout:
819 }
820
821 if closeType != closedByRemote {
822 // Session was not closed by remote, so closeUDPSession should be invoked to unregister from remote
823 unregisterFromEdgeChan := make(chan struct{})
824 sessionRPCServer := &mockSessionRPCServer{
825 sessionID: sessionID,
826 unregisterReason: expectedReason,
827 calledUnregisterChan: unregisterFromEdgeChan,
828 }
829 // nolint: testifylint
830 go runRPCServer(ctx, edgeQUICSession, sessionRPCServer, nil, t)
831
832 <-unregisterFromEdgeChan
833 }
834
835 <-sessionDone
836}
837
838type closeReason uint8
839

Callers 1

TestServeUDPSessionFunction · 0.85

Calls 9

runRPCServerFunction · 0.85
serveUDPSessionMethod · 0.80
NameMethod · 0.65
RegisterSessionMethod · 0.65
SendDatagramMethod · 0.65
EqualMethod · 0.65
CloseMethod · 0.65
UnregisterUdpSessionMethod · 0.65
ReadMethod · 0.45

Tested by

no test coverage detected