Skip to content

Commit b1a4021

Browse files
committed
Moved TCPBaseTestAccess into an H file so it can be used by other tests in the future.
1 parent 8cae458 commit b1a4021

File tree

3 files changed

+65
-31
lines changed

3 files changed

+65
-31
lines changed

src/transport/raw/TCP.h

+4-1
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,8 @@
3939
namespace chip {
4040
namespace Transport {
4141

42+
template <size_t kActiveConnectionsSize, size_t kPendingPacketSize> class TCPBaseTestAccess;
43+
4244
/** Defines listening parameters for setting up a TCP transport */
4345
class TcpListenParameters
4446
{
@@ -181,7 +183,8 @@ class DLL_EXPORT TCPBase : public Base
181183
void CloseActiveConnections();
182184

183185
private:
184-
friend class TCPTestAccess;
186+
// Allow tests to access private members.
187+
template <size_t kActiveConnectionsSize, size_t kPendingPacketSize> friend class TCPBaseTestAccess;
185188

186189
/**
187190
* Find an active connection to the given peer or return nullptr if
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
/*
2+
*
3+
* Copyright (c) 2024 Project CHIP Authors
4+
*
5+
* Licensed under the Apache License, Version 2.0 (the "License");
6+
* you may not use this file except in compliance with the License.
7+
* You may obtain a copy of the License at
8+
*
9+
* http://www.apache.org/licenses/LICENSE-2.0
10+
*
11+
* Unless required by applicable law or agreed to in writing, software
12+
* distributed under the License is distributed on an "AS IS" BASIS,
13+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14+
* See the License for the specific language governing permissions and
15+
* limitations under the License.
16+
*/
17+
18+
#pragma once
19+
20+
#include <transport/raw/TCP.h>
21+
22+
using namespace chip::Inet;
23+
24+
namespace chip {
25+
namespace Transport {
26+
/**
27+
* @brief Class acts as an accessor to private members of the TCPBase class without needing to give
28+
* friend access to each individual test.
29+
*/
30+
template <size_t kActiveConnectionsSize, size_t kPendingPacketSize>
31+
class TCPBaseTestAccess
32+
{
33+
public:
34+
using TCPImpl = Transport::TCP<kActiveConnectionsSize, kPendingPacketSize>;
35+
36+
static void * FindActiveConnection(TCPImpl & tcp, Transport::PeerAddress & peerAddress)
37+
{
38+
return tcp.FindActiveConnection(peerAddress);
39+
}
40+
static TCPEndPoint * GetEndpoint(void * state) { return static_cast<TCPBase::ActiveConnectionState *>(state)->mEndPoint; }
41+
42+
static CHIP_ERROR ProcessReceivedBuffer(TCPImpl & tcp, TCPEndPoint * endPoint, const PeerAddress & peerAddress,
43+
System::PacketBufferHandle && buffer)
44+
{
45+
return tcp.ProcessReceivedBuffer(endPoint, peerAddress, std::move(buffer));
46+
}
47+
};
48+
} // namespace Transport
49+
} // namespace chip

src/transport/raw/tests/TestTCP.cpp

+12-30
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
#include <system/SystemLayer.h>
3333
#include <transport/TransportMgr.h>
3434
#include <transport/raw/TCP.h>
35+
#include <transport/raw/tests/TCPBaseTestAccess.h>
3536

3637
#include <errno.h>
3738
#include <stdlib.h>
@@ -42,33 +43,14 @@ using namespace chip;
4243
using namespace chip::Test;
4344
using namespace chip::Inet;
4445

46+
namespace {
47+
4548
constexpr size_t kMaxTcpActiveConnectionCount = 4;
4649
constexpr size_t kMaxTcpPendingPackets = 4;
4750
constexpr uint16_t kPacketSizeBytes = static_cast<uint16_t>(sizeof(uint16_t));
4851

49-
using TCPImpl = Transport::TCP<kMaxTcpActiveConnectionCount, kMaxTcpPendingPackets>;
50-
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 {
52+
using TCPImpl = Transport::TCP<kMaxTcpActiveConnectionCount, kMaxTcpPendingPackets>;
53+
using TestAccess = Transport::TCPBaseTestAccess<kMaxTcpActiveConnectionCount, kMaxTcpPendingPackets>;
7254

7355
constexpr NodeId kSourceNodeId = 123654;
7456
constexpr NodeId kDestinationNodeId = 111222333;
@@ -421,9 +403,9 @@ TEST_F(TestTCP, CheckProcessReceivedBuffer)
421403
gMockTransportMgrDelegate.SingleMessageTest(tcp, addr);
422404

423405
Transport::PeerAddress lPeerAddress = Transport::PeerAddress::TCP(addr);
424-
void * state = Transport::TCPTestAccess::FindActiveConnection(tcp, lPeerAddress);
406+
void * state = TestAccess::FindActiveConnection(tcp, lPeerAddress);
425407
ASSERT_NE(state, nullptr);
426-
TCPEndPoint * lEndPoint = Transport::TCPTestAccess::GetEndpoint(state);
408+
TCPEndPoint * lEndPoint = TestAccess::GetEndpoint(state);
427409
ASSERT_NE(lEndPoint, nullptr);
428410

429411
CHIP_ERROR err = CHIP_NO_ERROR;
@@ -433,14 +415,14 @@ TEST_F(TestTCP, CheckProcessReceivedBuffer)
433415
// Test a single packet buffer.
434416
gMockTransportMgrDelegate.mReceiveHandlerCallCount = 0;
435417
EXPECT_TRUE(testData[0].Init((const uint16_t[]){ 111, 0 }));
436-
err = Transport::TCPTestAccess::ProcessReceivedBuffer(tcp, lEndPoint, lPeerAddress, std::move(testData[0].mHandle));
418+
err = TestAccess::ProcessReceivedBuffer(tcp, lEndPoint, lPeerAddress, std::move(testData[0].mHandle));
437419
EXPECT_EQ(err, CHIP_NO_ERROR);
438420
EXPECT_EQ(gMockTransportMgrDelegate.mReceiveHandlerCallCount, 1);
439421

440422
// Test a message in a chain of three packet buffers. The message length is split across buffers.
441423
gMockTransportMgrDelegate.mReceiveHandlerCallCount = 0;
442424
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));
425+
err = TestAccess::ProcessReceivedBuffer(tcp, lEndPoint, lPeerAddress, std::move(testData[0].mHandle));
444426
EXPECT_EQ(err, CHIP_NO_ERROR);
445427
EXPECT_EQ(gMockTransportMgrDelegate.mReceiveHandlerCallCount, 1);
446428

@@ -449,7 +431,7 @@ TEST_F(TestTCP, CheckProcessReceivedBuffer)
449431
EXPECT_TRUE(testData[0].Init((const uint16_t[]){ 131, 0 }));
450432
EXPECT_TRUE(testData[1].Init((const uint16_t[]){ 132, 0 }));
451433
testData[0].mHandle->AddToEnd(std::move(testData[1].mHandle));
452-
err = Transport::TCPTestAccess::ProcessReceivedBuffer(tcp, lEndPoint, lPeerAddress, std::move(testData[0].mHandle));
434+
err = TestAccess::ProcessReceivedBuffer(tcp, lEndPoint, lPeerAddress, std::move(testData[0].mHandle));
453435
EXPECT_EQ(err, CHIP_NO_ERROR);
454436
EXPECT_EQ(gMockTransportMgrDelegate.mReceiveHandlerCallCount, 2);
455437

@@ -458,7 +440,7 @@ TEST_F(TestTCP, CheckProcessReceivedBuffer)
458440
EXPECT_TRUE(testData[0].Init((const uint16_t[]){ 141, 142, 0 }));
459441
EXPECT_TRUE(testData[1].Init((const uint16_t[]){ 143, 144, 0 }));
460442
testData[0].mHandle->AddToEnd(std::move(testData[1].mHandle));
461-
err = Transport::TCPTestAccess::ProcessReceivedBuffer(tcp, lEndPoint, lPeerAddress, std::move(testData[0].mHandle));
443+
err = TestAccess::ProcessReceivedBuffer(tcp, lEndPoint, lPeerAddress, std::move(testData[0].mHandle));
462444
EXPECT_EQ(err, CHIP_NO_ERROR);
463445
EXPECT_EQ(gMockTransportMgrDelegate.mReceiveHandlerCallCount, 2);
464446

@@ -468,7 +450,7 @@ TEST_F(TestTCP, CheckProcessReceivedBuffer)
468450
EXPECT_TRUE(testData[0].Init((const uint16_t[]){ 51, System::PacketBuffer::kMaxSizeWithoutReserve, 0 }));
469451
// Sending only the first buffer of the long chain. This should be enough to trigger the error.
470452
System::PacketBufferHandle head = testData[0].mHandle.PopHead();
471-
err = Transport::TCPTestAccess::ProcessReceivedBuffer(tcp, lEndPoint, lPeerAddress, std::move(head));
453+
err = TestAccess::ProcessReceivedBuffer(tcp, lEndPoint, lPeerAddress, std::move(head));
472454
EXPECT_EQ(err, CHIP_ERROR_MESSAGE_TOO_LONG);
473455
EXPECT_EQ(gMockTransportMgrDelegate.mReceiveHandlerCallCount, 0);
474456

0 commit comments

Comments
 (0)