Skip to content
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Commit 8cae458

Browse files
committedMay 4, 2024
Refactored TestTCP and TestUDP to simplify them. Pulled out the places where test needs access to private members and put those in a TestAccess class.
1 parent 335ae19 commit 8cae458

File tree

6 files changed

+253
-203
lines changed

6 files changed

+253
-203
lines changed
 

‎src/inet/TCPEndPoint.h

-5
Original file line numberDiff line numberDiff line change
@@ -38,10 +38,6 @@
3838

3939
namespace chip {
4040

41-
namespace Transport {
42-
class TCPTest;
43-
};
44-
4541
namespace Inet {
4642

4743
class TCPTest;
@@ -529,7 +525,6 @@ class DLL_EXPORT TCPEndPoint : public EndPointBasis<TCPEndPoint>
529525
constexpr static size_t kMaxReceiveMessageSize = System::PacketBuffer::kMaxSizeWithoutReserve;
530526

531527
protected:
532-
friend class ::chip::Transport::TCPTest;
533528
friend class TCPTest;
534529

535530
TCPEndPoint(EndPointManager<TCPEndPoint> & endPointManager) :

‎src/transport/raw/TCP.h

+1-2
Original file line numberDiff line numberDiff line change
@@ -181,7 +181,7 @@ class DLL_EXPORT TCPBase : public Base
181181
void CloseActiveConnections();
182182

183183
private:
184-
friend class TCPTest;
184+
friend class TCPTestAccess;
185185

186186
/**
187187
* Find an active connection to the given peer or return nullptr if
@@ -283,7 +283,6 @@ class TCP : public TCPBase
283283
~TCP() override { mPendingPackets.ReleaseAll(); }
284284

285285
private:
286-
friend class TCPTest;
287286
TCPBase::ActiveConnectionState mConnectionsBuffer[kActiveConnectionsSize];
288287
PoolImpl<PendingPacket, kPendingPacketSize, ObjectPoolMem::kInline, PendingPacketPoolType::Interface> mPendingPackets;
289288
};

‎src/transport/raw/tests/TestMessageHeader.cpp

+1-2
Original file line numberDiff line numberDiff line change
@@ -23,14 +23,13 @@
2323
*
2424
*/
2525

26+
#include <gtest/gtest.h>
2627
#include <lib/core/ErrorStr.h>
2728
#include <lib/support/CHIPMem.h>
2829
#include <lib/support/CodeUtils.h>
2930
#include <protocols/Protocols.h>
3031
#include <transport/raw/MessageHeader.h>
3132

32-
#include <gtest/gtest.h>
33-
3433
namespace {
3534

3635
using namespace chip;

‎src/transport/raw/tests/TestPeerAddress.cpp

+1-2
Original file line numberDiff line numberDiff line change
@@ -21,13 +21,12 @@
2121
#include <stdint.h>
2222
#include <string.h>
2323

24+
#include <gtest/gtest.h>
2425
#include <inet/IPAddress.h>
2526
#include <lib/core/DataModelTypes.h>
2627
#include <lib/core/PeerId.h>
2728
#include <transport/raw/PeerAddress.h>
2829

29-
#include <gtest/gtest.h>
30-
3130
namespace {
3231

3332
using namespace chip;

‎src/transport/raw/tests/TestTCP.cpp

+178-145
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323

2424
#include "NetworkTestHelpers.h"
2525

26+
#include <gtest/gtest.h>
2627
#include <lib/core/CHIPCore.h>
2728
#include <lib/core/CHIPEncoding.h>
2829
#include <lib/support/CHIPMem.h>
@@ -32,38 +33,55 @@
3233
#include <transport/TransportMgr.h>
3334
#include <transport/raw/TCP.h>
3435

35-
#include <gtest/gtest.h>
36-
3736
#include <errno.h>
3837
#include <stdlib.h>
3938
#include <string.h>
4039
#include <utility>
4140

4241
using namespace chip;
42+
using namespace chip::Test;
4343
using namespace chip::Inet;
4444

45-
namespace {
46-
4745
constexpr size_t kMaxTcpActiveConnectionCount = 4;
4846
constexpr size_t kMaxTcpPendingPackets = 4;
4947
constexpr uint16_t kPacketSizeBytes = static_cast<uint16_t>(sizeof(uint16_t));
5048

5149
using TCPImpl = Transport::TCP<kMaxTcpActiveConnectionCount, kMaxTcpPendingPackets>;
5250

51+
namespace chip {
52+
namespace Transport {
53+
class TCPTestAccess
54+
{
55+
public:
56+
static void * FindActiveConnection(TCPImpl & tcp, Transport::PeerAddress & lPeerAddress)
57+
{
58+
return tcp.FindActiveConnection(lPeerAddress);
59+
}
60+
static TCPEndPoint * GetEndpoint(void * state) { return static_cast<TCPBase::ActiveConnectionState *>(state)->mEndPoint; }
61+
62+
static CHIP_ERROR ProcessReceivedBuffer(TCPImpl & tcp, TCPEndPoint * endPoint, const PeerAddress & peerAddress,
63+
System::PacketBufferHandle && buffer)
64+
{
65+
return tcp.ProcessReceivedBuffer(endPoint, peerAddress, std::move(buffer));
66+
}
67+
};
68+
} // namespace Transport
69+
} // namespace chip
70+
71+
namespace {
72+
5373
constexpr NodeId kSourceNodeId = 123654;
5474
constexpr NodeId kDestinationNodeId = 111222333;
5575
constexpr uint32_t kMessageCounter = 18;
5676

57-
using TestContext = chip::Test::IOContext;
58-
5977
const char PAYLOAD[] = "Hello!";
6078

6179
class MockTransportMgrDelegate : public chip::TransportMgrDelegate
6280
{
6381
public:
6482
typedef int (*MessageReceivedCallback)(const uint8_t * message, size_t length, int count, void * data);
6583

66-
MockTransportMgrDelegate(TestContext * inContext) : mContext(inContext), mCallback(nullptr), mCallbackData(nullptr) {}
84+
MockTransportMgrDelegate(IOContext * inContext) : mContext(inContext), mCallback(nullptr), mCallbackData(nullptr) {}
6785
~MockTransportMgrDelegate() override {}
6886

6987
void SetCallback(MessageReceivedCallback callback = nullptr, void * callback_data = nullptr)
@@ -151,66 +169,12 @@ class MockTransportMgrDelegate : public chip::TransportMgrDelegate
151169
int mReceiveHandlerCallCount = 0;
152170

153171
private:
154-
TestContext * mContext;
172+
IOContext * mContext;
155173
MessageReceivedCallback mCallback;
156174
void * mCallbackData;
157175
TransportMgrBase mTransportMgrBase;
158176
};
159177

160-
/////////////////////////// Init test
161-
162-
class TestTCP : public ::testing::Test, public chip::Test::IOContext
163-
{
164-
protected:
165-
void SetUp() { ASSERT_EQ(Init(), CHIP_NO_ERROR); }
166-
void TearDown() { Shutdown(); }
167-
168-
void CheckSimpleInitTest(Inet::IPAddressType type)
169-
{
170-
TCPImpl tcp;
171-
172-
CHIP_ERROR err = tcp.Init(Transport::TcpListenParameters(GetTCPEndPointManager()).SetAddressType(type));
173-
174-
EXPECT_EQ(err, CHIP_NO_ERROR);
175-
}
176-
177-
void CheckMessageTest(const IPAddress & addr)
178-
{
179-
TCPImpl tcp;
180-
181-
MockTransportMgrDelegate gMockTransportMgrDelegate(this);
182-
gMockTransportMgrDelegate.InitializeMessageTest(tcp, addr);
183-
gMockTransportMgrDelegate.SingleMessageTest(tcp, addr);
184-
gMockTransportMgrDelegate.FinalizeMessageTest(tcp, addr);
185-
}
186-
};
187-
188-
#if INET_CONFIG_ENABLE_IPV4
189-
TEST_F(TestTCP, CheckSimpleInitTest4)
190-
{
191-
CheckSimpleInitTest(IPAddressType::kIPv4);
192-
}
193-
194-
TEST_F(TestTCP, CheckMessageTest4)
195-
{
196-
IPAddress addr;
197-
IPAddress::FromString("127.0.0.1", addr);
198-
CheckMessageTest(addr);
199-
}
200-
#endif
201-
202-
TEST_F(TestTCP, CheckSimpleInitTest6)
203-
{
204-
CheckSimpleInitTest(IPAddressType::kIPv6);
205-
}
206-
207-
TEST_F(TestTCP, CheckMessageTest6)
208-
{
209-
IPAddress addr;
210-
IPAddress::FromString("::1", addr);
211-
CheckMessageTest(addr);
212-
}
213-
214178
// Generates a packet buffer or a chain of packet buffers for a single message.
215179
struct TestData
216180
{
@@ -338,108 +302,177 @@ void TestData::Free()
338302
mMessageOffset = 0;
339303
}
340304

341-
int TestDataCallbackCheck(const uint8_t * message, size_t length, int count, void * data)
305+
// Test Context
306+
307+
class TestTCP : public ::testing::Test
342308
{
343-
if (data == nullptr)
344-
{
345-
return -1;
346-
}
347-
TestData * currentData = static_cast<TestData *>(data) + count;
348-
if (currentData->mPayload == nullptr)
349-
{
350-
return -2;
351-
}
352-
if (currentData->mMessageLength != length)
309+
public:
310+
// Performs shared setup for all tests in the test suite
311+
static void SetUpTestSuite()
353312
{
354-
return -3;
313+
if (mIOContext == nullptr)
314+
{
315+
mIOContext = new IOContext();
316+
ASSERT_NE(mIOContext, nullptr);
317+
}
318+
ASSERT_EQ(mIOContext->Init(), CHIP_NO_ERROR);
355319
}
356-
if (memcmp(currentData->mPayload + currentData->mMessageOffset, message, length) != 0)
320+
321+
// Performs shared teardown for all tests in the test suite
322+
static void TearDownTestSuite()
357323
{
358-
return -4;
324+
if (mIOContext != nullptr)
325+
{
326+
mIOContext->Shutdown();
327+
delete mIOContext;
328+
mIOContext = nullptr;
329+
}
359330
}
360-
return 0;
361-
}
362331

363-
} // namespace
332+
protected:
333+
static IOContext * mIOContext;
364334

365-
namespace chip {
366-
namespace Transport {
367-
class TCPTest
368-
{
369-
public:
370-
static void CheckProcessReceivedBuffer(TestContext * ctx)
335+
void CheckSimpleInitTest(IPAddressType type)
371336
{
372337
TCPImpl tcp;
373338

374-
IPAddress addr;
375-
IPAddress::FromString("::1", addr);
339+
CHIP_ERROR err = tcp.Init(Transport::TcpListenParameters(mIOContext->GetTCPEndPointManager()).SetAddressType(type));
376340

377-
MockTransportMgrDelegate gMockTransportMgrDelegate(ctx);
378-
gMockTransportMgrDelegate.InitializeMessageTest(tcp, addr);
341+
EXPECT_EQ(err, CHIP_NO_ERROR);
342+
}
343+
344+
void CheckMessageTest(const IPAddress & addr)
345+
{
346+
TCPImpl tcp;
379347

380-
// Send a packet to get TCP going, so that we can find a TCPEndPoint to pass to ProcessReceivedBuffer.
381-
// (The current TCPEndPoint implementation is not effectively mockable.)
348+
MockTransportMgrDelegate gMockTransportMgrDelegate(mIOContext);
349+
gMockTransportMgrDelegate.InitializeMessageTest(tcp, addr);
382350
gMockTransportMgrDelegate.SingleMessageTest(tcp, addr);
351+
gMockTransportMgrDelegate.FinalizeMessageTest(tcp, addr);
352+
}
383353

384-
Transport::PeerAddress lPeerAddress = Transport::PeerAddress::TCP(addr);
385-
TCPBase::ActiveConnectionState * state = tcp.FindActiveConnection(lPeerAddress);
386-
ASSERT_NE(state, nullptr);
387-
Inet::TCPEndPoint * lEndPoint = state->mEndPoint;
388-
ASSERT_NE(lEndPoint, nullptr);
354+
static int TestDataCallbackCheck(const uint8_t * message, size_t length, int count, void * data)
355+
{
356+
if (data == nullptr)
357+
{
358+
return -1;
359+
}
360+
TestData * currentData = static_cast<TestData *>(data) + count;
361+
if (currentData->mPayload == nullptr)
362+
{
363+
return -2;
364+
}
365+
if (currentData->mMessageLength != length)
366+
{
367+
return -3;
368+
}
369+
if (memcmp(currentData->mPayload + currentData->mMessageOffset, message, length) != 0)
370+
{
371+
return -4;
372+
}
373+
return 0;
374+
}
375+
};
389376

390-
CHIP_ERROR err = CHIP_NO_ERROR;
391-
TestData testData[2];
392-
gMockTransportMgrDelegate.SetCallback(TestDataCallbackCheck, testData);
377+
IOContext * TestTCP::mIOContext = nullptr;
393378

394-
// Test a single packet buffer.
395-
gMockTransportMgrDelegate.mReceiveHandlerCallCount = 0;
396-
EXPECT_TRUE(testData[0].Init((const uint16_t[]){ 111, 0 }));
397-
err = tcp.ProcessReceivedBuffer(lEndPoint, lPeerAddress, std::move(testData[0].mHandle));
398-
EXPECT_EQ(err, CHIP_NO_ERROR);
399-
EXPECT_EQ(gMockTransportMgrDelegate.mReceiveHandlerCallCount, 1);
379+
// IPv4 Tests
400380

401-
// Test a message in a chain of three packet buffers. The message length is split across buffers.
402-
gMockTransportMgrDelegate.mReceiveHandlerCallCount = 0;
403-
EXPECT_TRUE(testData[0].Init((const uint16_t[]){ 1, 122, 123, 0 }));
404-
err = tcp.ProcessReceivedBuffer(lEndPoint, lPeerAddress, std::move(testData[0].mHandle));
405-
EXPECT_EQ(err, CHIP_NO_ERROR);
406-
EXPECT_EQ(gMockTransportMgrDelegate.mReceiveHandlerCallCount, 1);
407-
408-
// Test two messages in a chain.
409-
gMockTransportMgrDelegate.mReceiveHandlerCallCount = 0;
410-
EXPECT_TRUE(testData[0].Init((const uint16_t[]){ 131, 0 }));
411-
EXPECT_TRUE(testData[1].Init((const uint16_t[]){ 132, 0 }));
412-
testData[0].mHandle->AddToEnd(std::move(testData[1].mHandle));
413-
err = tcp.ProcessReceivedBuffer(lEndPoint, lPeerAddress, std::move(testData[0].mHandle));
414-
EXPECT_EQ(err, CHIP_NO_ERROR);
415-
EXPECT_EQ(gMockTransportMgrDelegate.mReceiveHandlerCallCount, 2);
416-
417-
// Test a chain of two messages, each a chain.
418-
gMockTransportMgrDelegate.mReceiveHandlerCallCount = 0;
419-
EXPECT_TRUE(testData[0].Init((const uint16_t[]){ 141, 142, 0 }));
420-
EXPECT_TRUE(testData[1].Init((const uint16_t[]){ 143, 144, 0 }));
421-
testData[0].mHandle->AddToEnd(std::move(testData[1].mHandle));
422-
err = tcp.ProcessReceivedBuffer(lEndPoint, lPeerAddress, std::move(testData[0].mHandle));
423-
EXPECT_EQ(err, CHIP_NO_ERROR);
424-
EXPECT_EQ(gMockTransportMgrDelegate.mReceiveHandlerCallCount, 2);
425-
426-
// Test a message that is too large to coalesce into a single packet buffer.
427-
gMockTransportMgrDelegate.mReceiveHandlerCallCount = 0;
428-
gMockTransportMgrDelegate.SetCallback(TestDataCallbackCheck, &testData[1]);
429-
EXPECT_TRUE(testData[0].Init((const uint16_t[]){ 51, System::PacketBuffer::kMaxSizeWithoutReserve, 0 }));
430-
// Sending only the first buffer of the long chain. This should be enough to trigger the error.
431-
System::PacketBufferHandle head = testData[0].mHandle.PopHead();
432-
err = tcp.ProcessReceivedBuffer(lEndPoint, lPeerAddress, std::move(head));
433-
EXPECT_EQ(err, CHIP_ERROR_MESSAGE_TOO_LONG);
434-
EXPECT_EQ(gMockTransportMgrDelegate.mReceiveHandlerCallCount, 0);
381+
#if INET_CONFIG_ENABLE_IPV4
382+
TEST_F(TestTCP, CheckSimpleInitTest4)
383+
{
384+
CheckSimpleInitTest(IPAddressType::kIPv4);
385+
}
435386

436-
gMockTransportMgrDelegate.FinalizeMessageTest(tcp, addr);
437-
}
438-
};
439-
} // namespace Transport
440-
} // namespace chip
387+
TEST_F(TestTCP, CheckMessageTest4)
388+
{
389+
IPAddress addr;
390+
IPAddress::FromString("127.0.0.1", addr);
391+
CheckMessageTest(addr);
392+
}
393+
#endif
394+
395+
// IPv6 Tests
396+
397+
TEST_F(TestTCP, CheckSimpleInitTest6)
398+
{
399+
CheckSimpleInitTest(IPAddressType::kIPv6);
400+
}
401+
402+
TEST_F(TestTCP, CheckMessageTest6)
403+
{
404+
IPAddress addr;
405+
IPAddress::FromString("::1", addr);
406+
CheckMessageTest(addr);
407+
}
441408

442409
TEST_F(TestTCP, CheckProcessReceivedBuffer)
443410
{
444-
chip::Transport::TCPTest::CheckProcessReceivedBuffer(this);
411+
TCPImpl tcp;
412+
413+
IPAddress addr;
414+
IPAddress::FromString("::1", addr);
415+
416+
MockTransportMgrDelegate gMockTransportMgrDelegate(mIOContext);
417+
gMockTransportMgrDelegate.InitializeMessageTest(tcp, addr);
418+
419+
// Send a packet to get TCP going, so that we can find a TCPEndPoint to pass to ProcessReceivedBuffer.
420+
// (The current TCPEndPoint implementation is not effectively mockable.)
421+
gMockTransportMgrDelegate.SingleMessageTest(tcp, addr);
422+
423+
Transport::PeerAddress lPeerAddress = Transport::PeerAddress::TCP(addr);
424+
void * state = Transport::TCPTestAccess::FindActiveConnection(tcp, lPeerAddress);
425+
ASSERT_NE(state, nullptr);
426+
TCPEndPoint * lEndPoint = Transport::TCPTestAccess::GetEndpoint(state);
427+
ASSERT_NE(lEndPoint, nullptr);
428+
429+
CHIP_ERROR err = CHIP_NO_ERROR;
430+
TestData testData[2];
431+
gMockTransportMgrDelegate.SetCallback(TestDataCallbackCheck, testData);
432+
433+
// Test a single packet buffer.
434+
gMockTransportMgrDelegate.mReceiveHandlerCallCount = 0;
435+
EXPECT_TRUE(testData[0].Init((const uint16_t[]){ 111, 0 }));
436+
err = Transport::TCPTestAccess::ProcessReceivedBuffer(tcp, lEndPoint, lPeerAddress, std::move(testData[0].mHandle));
437+
EXPECT_EQ(err, CHIP_NO_ERROR);
438+
EXPECT_EQ(gMockTransportMgrDelegate.mReceiveHandlerCallCount, 1);
439+
440+
// Test a message in a chain of three packet buffers. The message length is split across buffers.
441+
gMockTransportMgrDelegate.mReceiveHandlerCallCount = 0;
442+
EXPECT_TRUE(testData[0].Init((const uint16_t[]){ 1, 122, 123, 0 }));
443+
err = Transport::TCPTestAccess::ProcessReceivedBuffer(tcp, lEndPoint, lPeerAddress, std::move(testData[0].mHandle));
444+
EXPECT_EQ(err, CHIP_NO_ERROR);
445+
EXPECT_EQ(gMockTransportMgrDelegate.mReceiveHandlerCallCount, 1);
446+
447+
// Test two messages in a chain.
448+
gMockTransportMgrDelegate.mReceiveHandlerCallCount = 0;
449+
EXPECT_TRUE(testData[0].Init((const uint16_t[]){ 131, 0 }));
450+
EXPECT_TRUE(testData[1].Init((const uint16_t[]){ 132, 0 }));
451+
testData[0].mHandle->AddToEnd(std::move(testData[1].mHandle));
452+
err = Transport::TCPTestAccess::ProcessReceivedBuffer(tcp, lEndPoint, lPeerAddress, std::move(testData[0].mHandle));
453+
EXPECT_EQ(err, CHIP_NO_ERROR);
454+
EXPECT_EQ(gMockTransportMgrDelegate.mReceiveHandlerCallCount, 2);
455+
456+
// Test a chain of two messages, each a chain.
457+
gMockTransportMgrDelegate.mReceiveHandlerCallCount = 0;
458+
EXPECT_TRUE(testData[0].Init((const uint16_t[]){ 141, 142, 0 }));
459+
EXPECT_TRUE(testData[1].Init((const uint16_t[]){ 143, 144, 0 }));
460+
testData[0].mHandle->AddToEnd(std::move(testData[1].mHandle));
461+
err = Transport::TCPTestAccess::ProcessReceivedBuffer(tcp, lEndPoint, lPeerAddress, std::move(testData[0].mHandle));
462+
EXPECT_EQ(err, CHIP_NO_ERROR);
463+
EXPECT_EQ(gMockTransportMgrDelegate.mReceiveHandlerCallCount, 2);
464+
465+
// Test a message that is too large to coalesce into a single packet buffer.
466+
gMockTransportMgrDelegate.mReceiveHandlerCallCount = 0;
467+
gMockTransportMgrDelegate.SetCallback(TestDataCallbackCheck, &testData[1]);
468+
EXPECT_TRUE(testData[0].Init((const uint16_t[]){ 51, System::PacketBuffer::kMaxSizeWithoutReserve, 0 }));
469+
// Sending only the first buffer of the long chain. This should be enough to trigger the error.
470+
System::PacketBufferHandle head = testData[0].mHandle.PopHead();
471+
err = Transport::TCPTestAccess::ProcessReceivedBuffer(tcp, lEndPoint, lPeerAddress, std::move(head));
472+
EXPECT_EQ(err, CHIP_ERROR_MESSAGE_TOO_LONG);
473+
EXPECT_EQ(gMockTransportMgrDelegate.mReceiveHandlerCallCount, 0);
474+
475+
gMockTransportMgrDelegate.FinalizeMessageTest(tcp, addr);
445476
}
477+
478+
} // namespace

‎src/transport/raw/tests/TestUDP.cpp

+72-47
Original file line numberDiff line numberDiff line change
@@ -23,16 +23,16 @@
2323

2424
#include "NetworkTestHelpers.h"
2525

26+
#include <gtest/gtest.h>
2627
#include <lib/core/CHIPCore.h>
2728
#include <lib/support/CodeUtils.h>
2829
#include <transport/TransportMgr.h>
2930
#include <transport/raw/UDP.h>
3031

31-
#include <gtest/gtest.h>
32-
3332
#include <errno.h>
3433

3534
using namespace chip;
35+
using namespace chip::Test;
3636
using namespace chip::Inet;
3737

3838
namespace {
@@ -41,8 +41,6 @@ constexpr NodeId kSourceNodeId = 123654;
4141
constexpr NodeId kDestinationNodeId = 111222333;
4242
constexpr uint32_t kMessageCounter = 18;
4343

44-
using TestContext = chip::Test::IOContext;
45-
4644
const char PAYLOAD[] = "Hello!";
4745
int ReceiveHandlerCallCount = 0;
4846

@@ -70,87 +68,114 @@ class MockTransportMgrDelegate : public TransportMgrDelegate
7068
}
7169
};
7270

73-
} // namespace
74-
75-
/////////////////////////// Init test
71+
// Test Context
7672

7773
class TestUDP : public ::testing::Test
7874
{
75+
public:
76+
// Performs shared setup for all tests in the test suite
77+
static void SetUpTestSuite()
78+
{
79+
if (mIOContext == nullptr)
80+
{
81+
mIOContext = new IOContext();
82+
ASSERT_NE(mIOContext, nullptr);
83+
}
84+
ASSERT_EQ(mIOContext->Init(), CHIP_NO_ERROR);
85+
}
86+
87+
// Performs shared teardown for all tests in the test suite
88+
static void TearDownTestSuite()
89+
{
90+
if (mIOContext != nullptr)
91+
{
92+
mIOContext->Shutdown();
93+
delete mIOContext;
94+
mIOContext = nullptr;
95+
}
96+
}
97+
7998
protected:
80-
TestUDP() { inContext = new TestContext(); }
81-
~TestUDP() { delete inContext; }
82-
void SetUp() { ASSERT_EQ(inContext->Init(), CHIP_NO_ERROR); }
83-
void TearDown() { inContext->Shutdown(); }
84-
TestContext * inContext;
85-
};
99+
static IOContext * mIOContext;
86100

87-
void CheckSimpleInitTest(TestContext * ctx, Inet::IPAddressType type)
88-
{
89-
Transport::UDP udp;
101+
void CheckSimpleInitTest(IPAddressType type)
102+
{
103+
Transport::UDP udp;
90104

91-
CHIP_ERROR err = udp.Init(Transport::UdpListenParameters(ctx->GetUDPEndPointManager()).SetAddressType(type).SetListenPort(0));
105+
CHIP_ERROR err =
106+
udp.Init(Transport::UdpListenParameters(mIOContext->GetUDPEndPointManager()).SetAddressType(type).SetListenPort(0));
92107

93-
EXPECT_EQ(err, CHIP_NO_ERROR);
94-
}
108+
EXPECT_EQ(err, CHIP_NO_ERROR);
109+
}
95110

96-
void CheckMessageTest(TestContext * ctx, const IPAddress & addr)
97-
{
98-
uint16_t payload_len = sizeof(PAYLOAD);
111+
void CheckMessageTest(const IPAddress & addr)
112+
{
113+
uint16_t payload_len = sizeof(PAYLOAD);
114+
115+
chip::System::PacketBufferHandle buffer = chip::System::PacketBufferHandle::NewWithData(PAYLOAD, payload_len);
116+
EXPECT_FALSE(buffer.IsNull());
99117

100-
chip::System::PacketBufferHandle buffer = chip::System::PacketBufferHandle::NewWithData(PAYLOAD, payload_len);
101-
EXPECT_FALSE(buffer.IsNull());
118+
CHIP_ERROR err = CHIP_NO_ERROR;
102119

103-
CHIP_ERROR err = CHIP_NO_ERROR;
120+
Transport::UDP udp;
121+
122+
err = udp.Init(
123+
Transport::UdpListenParameters(mIOContext->GetUDPEndPointManager()).SetAddressType(addr.Type()).SetListenPort(0));
124+
EXPECT_EQ(err, CHIP_NO_ERROR);
104125

105-
Transport::UDP udp;
126+
MockTransportMgrDelegate gMockTransportMgrDelegate;
127+
TransportMgrBase gTransportMgrBase;
128+
gTransportMgrBase.SetSessionManager(&gMockTransportMgrDelegate);
129+
gTransportMgrBase.Init(&udp);
106130

107-
err = udp.Init(Transport::UdpListenParameters(ctx->GetUDPEndPointManager()).SetAddressType(addr.Type()).SetListenPort(0));
108-
EXPECT_EQ(err, CHIP_NO_ERROR);
131+
ReceiveHandlerCallCount = 0;
109132

110-
MockTransportMgrDelegate gMockTransportMgrDelegate;
111-
TransportMgrBase gTransportMgrBase;
112-
gTransportMgrBase.SetSessionManager(&gMockTransportMgrDelegate);
113-
gTransportMgrBase.Init(&udp);
133+
PacketHeader header;
134+
header.SetSourceNodeId(kSourceNodeId).SetDestinationNodeId(kDestinationNodeId).SetMessageCounter(kMessageCounter);
114135

115-
ReceiveHandlerCallCount = 0;
136+
err = header.EncodeBeforeData(buffer);
137+
EXPECT_EQ(err, CHIP_NO_ERROR);
116138

117-
PacketHeader header;
118-
header.SetSourceNodeId(kSourceNodeId).SetDestinationNodeId(kDestinationNodeId).SetMessageCounter(kMessageCounter);
139+
// Should be able to send a message to itself by just calling send.
140+
err = udp.SendMessage(Transport::PeerAddress::UDP(addr, udp.GetBoundPort()), std::move(buffer));
141+
EXPECT_EQ(err, CHIP_NO_ERROR);
119142

120-
err = header.EncodeBeforeData(buffer);
121-
EXPECT_EQ(err, CHIP_NO_ERROR);
143+
mIOContext->DriveIOUntil(chip::System::Clock::Seconds16(1), []() { return ReceiveHandlerCallCount != 0; });
122144

123-
// Should be able to send a message to itself by just calling send.
124-
err = udp.SendMessage(Transport::PeerAddress::UDP(addr, udp.GetBoundPort()), std::move(buffer));
125-
EXPECT_EQ(err, CHIP_NO_ERROR);
145+
EXPECT_EQ(ReceiveHandlerCallCount, 1);
146+
}
147+
};
126148

127-
ctx->DriveIOUntil(chip::System::Clock::Seconds16(1), []() { return ReceiveHandlerCallCount != 0; });
149+
IOContext * TestUDP::mIOContext = nullptr;
128150

129-
EXPECT_EQ(ReceiveHandlerCallCount, 1);
130-
}
151+
// IPv4 Tests
131152

132153
#if INET_CONFIG_ENABLE_IPV4
133154
TEST_F(TestUDP, CheckSimpleInitTest4)
134155
{
135-
CheckSimpleInitTest(inContext, IPAddressType::kIPv4);
156+
CheckSimpleInitTest(IPAddressType::kIPv4);
136157
}
137158

138159
TEST_F(TestUDP, CheckMessageTest4)
139160
{
140161
IPAddress addr;
141162
IPAddress::FromString("127.0.0.1", addr);
142-
CheckMessageTest(inContext, addr);
163+
CheckMessageTest(addr);
143164
}
144165
#endif
145166

167+
// IPv6 Tests
168+
146169
TEST_F(TestUDP, CheckSimpleInitTest6)
147170
{
148-
CheckSimpleInitTest(inContext, IPAddressType::kIPv6);
171+
CheckSimpleInitTest(IPAddressType::kIPv6);
149172
}
150173

151174
TEST_F(TestUDP, CheckMessageTest6)
152175
{
153176
IPAddress addr;
154177
IPAddress::FromString("::1", addr);
155-
CheckMessageTest(inContext, addr);
178+
CheckMessageTest(addr);
156179
}
180+
181+
} // namespace

0 commit comments

Comments
 (0)
Please sign in to comment.