@@ -53,7 +53,6 @@ namespace {
5353constexpr size_t kMaxTcpActiveConnectionCount = 4 ;
5454constexpr size_t kMaxTcpPendingPackets = 4 ;
5555constexpr size_t kPacketSizeBytes = sizeof (uint32_t );
56- uint16_t gChipTCPPort = static_cast <uint16_t >(CHIP_PORT + chip::Crypto::GetRandU16() % 100 );
5756chip::Transport::AppTCPConnectionCallbackCtxt gAppTCPConnCbCtxt ;
5857chip::Transport::ActiveTCPConnectionState * gActiveTCPConnState = nullptr ;
5958
@@ -66,6 +65,11 @@ constexpr uint32_t kMessageCounter = 18;
6665
6766const char PAYLOAD[] = " Hello!" ;
6867
68+ uint16_t GetRandomPort ()
69+ {
70+ return static_cast <uint16_t >(CHIP_PORT + chip::Crypto::GetRandU16 () % 100 );
71+ }
72+
6973class MockTransportMgrDelegate : public chip ::TransportMgrDelegate
7074{
7175public:
@@ -134,11 +138,10 @@ class MockTransportMgrDelegate : public chip::TransportMgrDelegate
134138 }
135139 }
136140
137- void InitializeMessageTest (TCPImpl & tcp, const IPAddress & addr)
141+ void InitializeMessageTest (TCPImpl & tcp, const IPAddress & addr, uint16_t port )
138142 {
139- CHIP_ERROR err = tcp.Init (Transport::TcpListenParameters (mIOContext ->GetTCPEndPointManager ())
140- .SetAddressType (addr.Type ())
141- .SetListenPort (gChipTCPPort ));
143+ CHIP_ERROR err = tcp.Init (
144+ Transport::TcpListenParameters (mIOContext ->GetTCPEndPointManager ()).SetAddressType (addr.Type ()).SetListenPort (port));
142145
143146 // retry a few times in case the port is somehow in use.
144147 // this is a WORKAROUND for flaky testing if we run tests very fast after each other.
@@ -159,7 +162,7 @@ class MockTransportMgrDelegate : public chip::TransportMgrDelegate
159162 chip::test_utils::SleepMillis (100 );
160163 err = tcp.Init (Transport::TcpListenParameters (mIOContext ->GetTCPEndPointManager ())
161164 .SetAddressType (addr.Type ())
162- .SetListenPort (gChipTCPPort ));
165+ .SetListenPort (port ));
163166 }
164167
165168 EXPECT_EQ (err, CHIP_NO_ERROR);
@@ -177,7 +180,7 @@ class MockTransportMgrDelegate : public chip::TransportMgrDelegate
177180 gAppTCPConnCbCtxt .connClosedCb = nullptr ;
178181 }
179182
180- void SingleMessageTest (TCPImpl & tcp, const IPAddress & addr)
183+ void SingleMessageTest (TCPImpl & tcp, const IPAddress & addr, uint16_t port )
181184 {
182185 chip::System::PacketBufferHandle buffer = chip::System::PacketBufferHandle::NewWithData (PAYLOAD, sizeof (PAYLOAD));
183186 ASSERT_FALSE (buffer.IsNull ());
@@ -192,7 +195,7 @@ class MockTransportMgrDelegate : public chip::TransportMgrDelegate
192195 EXPECT_EQ (err, CHIP_NO_ERROR);
193196
194197 // Should be able to send a message to itself by just calling send.
195- err = tcp.SendMessage (Transport::PeerAddress::TCP (addr, gChipTCPPort ), std::move (buffer));
198+ err = tcp.SendMessage (Transport::PeerAddress::TCP (addr, port ), std::move (buffer));
196199 EXPECT_EQ (err, CHIP_NO_ERROR);
197200
198201 mIOContext ->DriveIOUntil (chip::System::Clock::Seconds16 (5 ), [this ]() { return mReceiveHandlerCallCount != 0 ; });
@@ -201,38 +204,38 @@ class MockTransportMgrDelegate : public chip::TransportMgrDelegate
201204 SetCallback (nullptr );
202205 }
203206
204- void ConnectTest (TCPImpl & tcp, const IPAddress & addr)
207+ void ConnectTest (TCPImpl & tcp, const IPAddress & addr, uint16_t port )
205208 {
206209 // Connect and wait for seeing active connection
207- CHIP_ERROR err = tcp.TCPConnect (Transport::PeerAddress::TCP (addr, gChipTCPPort ), &gAppTCPConnCbCtxt , &gActiveTCPConnState );
210+ CHIP_ERROR err = tcp.TCPConnect (Transport::PeerAddress::TCP (addr, port ), &gAppTCPConnCbCtxt , &gActiveTCPConnState );
208211 EXPECT_EQ (err, CHIP_NO_ERROR);
209212
210213 mIOContext ->DriveIOUntil (chip::System::Clock::Seconds16 (5 ), [&tcp]() { return tcp.HasActiveConnections (); });
211214 EXPECT_EQ (tcp.HasActiveConnections (), true );
212215 }
213216
214- void HandleConnectCompleteCbCalledTest (TCPImpl & tcp, const IPAddress & addr)
217+ void HandleConnectCompleteCbCalledTest (TCPImpl & tcp, const IPAddress & addr, uint16_t port )
215218 {
216219 // Connect and wait for seeing active connection and connection complete
217220 // handler being called.
218- CHIP_ERROR err = tcp.TCPConnect (Transport::PeerAddress::TCP (addr, gChipTCPPort ), &gAppTCPConnCbCtxt , &gActiveTCPConnState );
221+ CHIP_ERROR err = tcp.TCPConnect (Transport::PeerAddress::TCP (addr, port ), &gAppTCPConnCbCtxt , &gActiveTCPConnState );
219222 EXPECT_EQ (err, CHIP_NO_ERROR);
220223
221224 mIOContext ->DriveIOUntil (chip::System::Clock::Seconds16 (5 ), [this ]() { return mHandleConnectionCompleteCalled ; });
222225 EXPECT_EQ (mHandleConnectionCompleteCalled , true );
223226 }
224227
225- void HandleConnectCloseCbCalledTest (TCPImpl & tcp, const IPAddress & addr)
228+ void HandleConnectCloseCbCalledTest (TCPImpl & tcp, const IPAddress & addr, uint16_t port )
226229 {
227230 // Connect and wait for seeing active connection and connection complete
228231 // handler being called.
229- CHIP_ERROR err = tcp.TCPConnect (Transport::PeerAddress::TCP (addr, gChipTCPPort ), &gAppTCPConnCbCtxt , &gActiveTCPConnState );
232+ CHIP_ERROR err = tcp.TCPConnect (Transport::PeerAddress::TCP (addr, port ), &gAppTCPConnCbCtxt , &gActiveTCPConnState );
230233 EXPECT_EQ (err, CHIP_NO_ERROR);
231234
232235 mIOContext ->DriveIOUntil (chip::System::Clock::Seconds16 (5 ), [this ]() { return mHandleConnectionCompleteCalled ; });
233236 EXPECT_EQ (mHandleConnectionCompleteCalled , true );
234237
235- tcp.TCPDisconnect (Transport::PeerAddress::TCP (addr, gChipTCPPort ));
238+ tcp.TCPDisconnect (Transport::PeerAddress::TCP (addr, port ));
236239 mIOContext ->DriveIOUntil (chip::System::Clock::Seconds16 (5 ), [&tcp]() { return !tcp.HasActiveConnections (); });
237240 EXPECT_EQ (mHandleConnectionCloseCalled , true );
238241 }
@@ -245,10 +248,10 @@ class MockTransportMgrDelegate : public chip::TransportMgrDelegate
245248 EXPECT_EQ (tcp.HasActiveConnections (), false );
246249 }
247250
248- void DisconnectTest (TCPImpl & tcp, const IPAddress & addr)
251+ void DisconnectTest (TCPImpl & tcp, const IPAddress & addr, uint16_t port )
249252 {
250253 // Disconnect and wait for seeing peer close
251- tcp.TCPDisconnect (Transport::PeerAddress::TCP (addr, gChipTCPPort ));
254+ tcp.TCPDisconnect (Transport::PeerAddress::TCP (addr, port ));
252255 mIOContext ->DriveIOUntil (chip::System::Clock::Seconds16 (5 ), [&tcp]() { return !tcp.HasActiveConnections (); });
253256 EXPECT_EQ (tcp.HasActiveConnections (), false );
254257 }
@@ -448,8 +451,9 @@ class TestTCP : public ::testing::Test
448451 {
449452 TCPImpl tcp;
450453
451- CHIP_ERROR err = tcp.Init (
452- Transport::TcpListenParameters (mIOContext ->GetTCPEndPointManager ()).SetAddressType (type).SetListenPort (gChipTCPPort ));
454+ uint16_t port = GetRandomPort ();
455+ CHIP_ERROR err =
456+ tcp.Init (Transport::TcpListenParameters (mIOContext ->GetTCPEndPointManager ()).SetAddressType (type).SetListenPort (port));
453457
454458 EXPECT_EQ (err, CHIP_NO_ERROR);
455459 }
@@ -459,51 +463,56 @@ class TestTCP : public ::testing::Test
459463 {
460464 TCPImpl tcp;
461465
466+ uint16_t port = GetRandomPort ();
462467 MockTransportMgrDelegate gMockTransportMgrDelegate (mIOContext );
463- gMockTransportMgrDelegate .InitializeMessageTest (tcp, addr);
464- gMockTransportMgrDelegate .SingleMessageTest (tcp, addr);
465- gMockTransportMgrDelegate .DisconnectTest (tcp, addr);
468+ gMockTransportMgrDelegate .InitializeMessageTest (tcp, addr, port );
469+ gMockTransportMgrDelegate .SingleMessageTest (tcp, addr, port );
470+ gMockTransportMgrDelegate .DisconnectTest (tcp, addr, port );
466471 }
467472
468473 void ConnectToSelfTest (const IPAddress & addr)
469474 {
470475 TCPImpl tcp;
471476
477+ uint16_t port = GetRandomPort ();
472478 MockTransportMgrDelegate gMockTransportMgrDelegate (mIOContext );
473- gMockTransportMgrDelegate .InitializeMessageTest (tcp, addr);
474- gMockTransportMgrDelegate .ConnectTest (tcp, addr);
475- gMockTransportMgrDelegate .DisconnectTest (tcp, addr);
479+ gMockTransportMgrDelegate .InitializeMessageTest (tcp, addr, port );
480+ gMockTransportMgrDelegate .ConnectTest (tcp, addr, port );
481+ gMockTransportMgrDelegate .DisconnectTest (tcp, addr, port );
476482 }
477483
478484 void ConnectSendMessageThenCloseTest (const IPAddress & addr)
479485 {
480486 TCPImpl tcp;
481487
488+ uint16_t port = GetRandomPort ();
482489 MockTransportMgrDelegate gMockTransportMgrDelegate (mIOContext );
483- gMockTransportMgrDelegate .InitializeMessageTest (tcp, addr);
484- gMockTransportMgrDelegate .ConnectTest (tcp, addr);
485- gMockTransportMgrDelegate .SingleMessageTest (tcp, addr);
486- gMockTransportMgrDelegate .DisconnectTest (tcp, addr);
490+ gMockTransportMgrDelegate .InitializeMessageTest (tcp, addr, port );
491+ gMockTransportMgrDelegate .ConnectTest (tcp, addr, port );
492+ gMockTransportMgrDelegate .SingleMessageTest (tcp, addr, port );
493+ gMockTransportMgrDelegate .DisconnectTest (tcp, addr, port );
487494 }
488495
489496 void HandleConnCompleteTest (const IPAddress & addr)
490497 {
491498 TCPImpl tcp;
492499
500+ uint16_t port = GetRandomPort ();
493501 MockTransportMgrDelegate gMockTransportMgrDelegate (mIOContext );
494- gMockTransportMgrDelegate .InitializeMessageTest (tcp, addr);
495- gMockTransportMgrDelegate .HandleConnectCompleteCbCalledTest (tcp, addr);
496- gMockTransportMgrDelegate .DisconnectTest (tcp, addr);
502+ gMockTransportMgrDelegate .InitializeMessageTest (tcp, addr, port );
503+ gMockTransportMgrDelegate .HandleConnectCompleteCbCalledTest (tcp, addr, port );
504+ gMockTransportMgrDelegate .DisconnectTest (tcp, addr, port );
497505 }
498506
499507 void HandleConnCloseTest (const IPAddress & addr)
500508 {
501509 TCPImpl tcp;
502510
511+ uint16_t port = GetRandomPort ();
503512 MockTransportMgrDelegate gMockTransportMgrDelegate (mIOContext );
504- gMockTransportMgrDelegate .InitializeMessageTest (tcp, addr);
505- gMockTransportMgrDelegate .HandleConnectCloseCbCalledTest (tcp, addr);
506- gMockTransportMgrDelegate .DisconnectTest (tcp, addr);
513+ gMockTransportMgrDelegate .InitializeMessageTest (tcp, addr, port );
514+ gMockTransportMgrDelegate .HandleConnectCloseCbCalledTest (tcp, addr, port );
515+ gMockTransportMgrDelegate .DisconnectTest (tcp, addr, port );
507516 }
508517
509518 // Callback used by CheckProcessReceivedBuffer.
@@ -616,11 +625,12 @@ TEST_F(TestTCP, CheckTCPEndpointAfterCloseTest)
616625 IPAddress addr;
617626 IPAddress::FromString (" ::1" , addr);
618627
628+ uint16_t port = GetRandomPort ();
619629 MockTransportMgrDelegate gMockTransportMgrDelegate (mIOContext );
620- gMockTransportMgrDelegate .InitializeMessageTest (tcp, addr);
621- gMockTransportMgrDelegate .ConnectTest (tcp, addr);
630+ gMockTransportMgrDelegate .InitializeMessageTest (tcp, addr, port );
631+ gMockTransportMgrDelegate .ConnectTest (tcp, addr, port );
622632
623- Transport::PeerAddress lPeerAddress = Transport::PeerAddress::TCP (addr, gChipTCPPort );
633+ Transport::PeerAddress lPeerAddress = Transport::PeerAddress::TCP (addr, port );
624634 void * state = TestAccess::FindActiveConnection (tcp, lPeerAddress);
625635 ASSERT_NE (state, nullptr );
626636 TCPEndPoint * lEndPoint = TestAccess::GetEndpoint (state);
@@ -639,14 +649,15 @@ TEST_F(TestTCP, CheckProcessReceivedBuffer)
639649 IPAddress addr;
640650 IPAddress::FromString (" ::1" , addr);
641651
652+ uint16_t port = GetRandomPort ();
642653 MockTransportMgrDelegate gMockTransportMgrDelegate (mIOContext );
643- gMockTransportMgrDelegate .InitializeMessageTest (tcp, addr);
654+ gMockTransportMgrDelegate .InitializeMessageTest (tcp, addr, port );
644655
645656 // Send a packet to get TCP going, so that we can find a TCPEndPoint to pass to ProcessReceivedBuffer.
646657 // (The current TCPEndPoint implementation is not effectively mockable.)
647- gMockTransportMgrDelegate .SingleMessageTest (tcp, addr);
658+ gMockTransportMgrDelegate .SingleMessageTest (tcp, addr, port );
648659
649- Transport::PeerAddress lPeerAddress = Transport::PeerAddress::TCP (addr, gChipTCPPort );
660+ Transport::PeerAddress lPeerAddress = Transport::PeerAddress::TCP (addr, port );
650661 void * state = TestAccess::FindActiveConnection (tcp, lPeerAddress);
651662 ASSERT_NE (state, nullptr );
652663 TCPEndPoint * lEndPoint = TestAccess::GetEndpoint (state);
0 commit comments