TUN-6864: Don't reuse port in quic unit tests
This commit is contained in:
		
							parent
							
								
									442af9ee38
								
							
						
					
					
						commit
						60a12fcb27
					
				|  | @ -11,7 +11,6 @@ import ( | ||||||
| 	"net/url" | 	"net/url" | ||||||
| 	"os" | 	"os" | ||||||
| 	"strings" | 	"strings" | ||||||
| 	"sync" |  | ||||||
| 	"testing" | 	"testing" | ||||||
| 	"time" | 	"time" | ||||||
| 
 | 
 | ||||||
|  | @ -142,24 +141,33 @@ func TestQUICServer(t *testing.T) { | ||||||
| 		}, | 		}, | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	for _, test := range tests { | 	for i, test := range tests { | ||||||
|  | 		test := test // capture range variable
 | ||||||
| 		t.Run(test.desc, func(t *testing.T) { | 		t.Run(test.desc, func(t *testing.T) { | ||||||
| 			ctx, cancel := context.WithCancel(context.Background()) | 			ctx, cancel := context.WithCancel(context.Background()) | ||||||
| 			var wg sync.WaitGroup | 
 | ||||||
| 			wg.Add(1) | 			quicListener, err := quic.Listen(udpListener, testTLSServerConfig, testQUICConfig) | ||||||
|  | 			require.NoError(t, err) | ||||||
|  | 
 | ||||||
|  | 			serverDone := make(chan struct{}) | ||||||
| 			go func() { | 			go func() { | ||||||
| 				defer wg.Done() |  | ||||||
| 				quicServer( | 				quicServer( | ||||||
| 					t, udpListener, testTLSServerConfig, testQUICConfig, | 					ctx, t, quicListener, test.dest, test.connectionType, test.metadata, test.message, test.expectedResponse, | ||||||
| 					test.dest, test.connectionType, test.metadata, test.message, test.expectedResponse, |  | ||||||
| 				) | 				) | ||||||
|  | 				close(serverDone) | ||||||
| 			}() | 			}() | ||||||
| 
 | 
 | ||||||
| 			qc := testQUICConnection(udpListener.LocalAddr(), t) | 			qc := testQUICConnection(udpListener.LocalAddr(), t, uint8(i)) | ||||||
| 			go qc.Serve(ctx) |  | ||||||
| 
 | 
 | ||||||
| 			wg.Wait() | 			connDone := make(chan struct{}) | ||||||
|  | 			go func() { | ||||||
|  | 				qc.Serve(ctx) | ||||||
|  | 				close(connDone) | ||||||
|  | 			}() | ||||||
|  | 
 | ||||||
|  | 			<-serverDone | ||||||
| 			cancel() | 			cancel() | ||||||
|  | 			<-connDone | ||||||
| 		}) | 		}) | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
|  | @ -177,23 +185,16 @@ func (fakeControlStream) IsStopped() bool { | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func quicServer( | func quicServer( | ||||||
|  | 	ctx context.Context, | ||||||
| 	t *testing.T, | 	t *testing.T, | ||||||
| 	conn net.PacketConn, | 	listener quic.Listener, | ||||||
| 	tlsConf *tls.Config, |  | ||||||
| 	config *quic.Config, |  | ||||||
| 	dest string, | 	dest string, | ||||||
| 	connectionType quicpogs.ConnectionType, | 	connectionType quicpogs.ConnectionType, | ||||||
| 	metadata []quicpogs.Metadata, | 	metadata []quicpogs.Metadata, | ||||||
| 	message []byte, | 	message []byte, | ||||||
| 	expectedResponse []byte, | 	expectedResponse []byte, | ||||||
| ) { | ) { | ||||||
| 	ctx, cancel := context.WithCancel(context.Background()) | 	session, err := listener.Accept(ctx) | ||||||
| 	defer cancel() |  | ||||||
| 
 |  | ||||||
| 	earlyListener, err := quic.Listen(conn, tlsConf, config) |  | ||||||
| 	require.NoError(t, err) |  | ||||||
| 
 |  | ||||||
| 	session, err := earlyListener.Accept(ctx) |  | ||||||
| 	require.NoError(t, err) | 	require.NoError(t, err) | ||||||
| 
 | 
 | ||||||
| 	quicStream, err := session.OpenStreamSync(context.Background()) | 	quicStream, err := session.OpenStreamSync(context.Background()) | ||||||
|  | @ -482,6 +483,7 @@ func TestBuildHTTPRequest(t *testing.T) { | ||||||
| 
 | 
 | ||||||
| 	log := zerolog.Nop() | 	log := zerolog.Nop() | ||||||
| 	for _, test := range tests { | 	for _, test := range tests { | ||||||
|  | 		test := test // capture range variable
 | ||||||
| 		t.Run(test.name, func(t *testing.T) { | 		t.Run(test.name, func(t *testing.T) { | ||||||
| 			req, err := buildHTTPRequest(context.Background(), test.connectRequest, test.body, &log) | 			req, err := buildHTTPRequest(context.Background(), test.connectRequest, test.body, &log) | ||||||
| 			assert.NoError(t, err) | 			assert.NoError(t, err) | ||||||
|  | @ -519,7 +521,8 @@ func TestServeUDPSession(t *testing.T) { | ||||||
| 		edgeQUICSessionChan <- edgeQUICSession | 		edgeQUICSessionChan <- edgeQUICSession | ||||||
| 	}() | 	}() | ||||||
| 
 | 
 | ||||||
| 	qc := testQUICConnection(val, t) | 	// Random index to avoid reusing port
 | ||||||
|  | 	qc := testQUICConnection(val, t, 28) | ||||||
| 	go qc.Serve(ctx) | 	go qc.Serve(ctx) | ||||||
| 
 | 
 | ||||||
| 	edgeQUICSession := <-edgeQUICSessionChan | 	edgeQUICSession := <-edgeQUICSessionChan | ||||||
|  | @ -703,7 +706,7 @@ func (s mockSessionRPCServer) UnregisterUdpSession(ctx context.Context, sessionI | ||||||
| 	return nil | 	return nil | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func testQUICConnection(udpListenerAddr net.Addr, t *testing.T) *QUICConnection { | func testQUICConnection(udpListenerAddr net.Addr, t *testing.T, index uint8) *QUICConnection { | ||||||
| 	tlsClientConfig := &tls.Config{ | 	tlsClientConfig := &tls.Config{ | ||||||
| 		InsecureSkipVerify: true, | 		InsecureSkipVerify: true, | ||||||
| 		NextProtos:         []string{"argotunnel"}, | 		NextProtos:         []string{"argotunnel"}, | ||||||
|  | @ -713,7 +716,7 @@ func testQUICConnection(udpListenerAddr net.Addr, t *testing.T) *QUICConnection | ||||||
| 	qc, err := NewQUICConnection( | 	qc, err := NewQUICConnection( | ||||||
| 		testQUICConfig, | 		testQUICConfig, | ||||||
| 		udpListenerAddr, | 		udpListenerAddr, | ||||||
| 		0, | 		index, | ||||||
| 		tlsClientConfig, | 		tlsClientConfig, | ||||||
| 		&mockOrchestrator{originProxy: &mockOriginProxyWithRequest{}}, | 		&mockOrchestrator{originProxy: &mockOriginProxyWithRequest{}}, | ||||||
| 		&tunnelpogs.ConnectionOptions{}, | 		&tunnelpogs.ConnectionOptions{}, | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue