-
Notifications
You must be signed in to change notification settings - Fork 2.1k
/
Copy pathTestBdxMessages.cpp
140 lines (103 loc) · 3.86 KB
/
TestBdxMessages.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
#include <protocols/bdx/BdxMessages.h>
#include <gtest/gtest.h>
#include <lib/support/BufferWriter.h>
#include <lib/support/CHIPMem.h>
#include <lib/support/CodeUtils.h>
#include <limits>
using namespace chip;
using namespace chip::bdx;
/**
* Helper method for testing that WriteToBuffer() and Parse() are successful, and that the parsed message
* is identical to the origianl.
*/
template <class MsgType>
void TestHelperWrittenAndParsedMatch(MsgType & testMsg)
{
CHIP_ERROR err = CHIP_NO_ERROR;
size_t msgSize = testMsg.MessageSize();
Encoding::LittleEndian::PacketBufferWriter bbuf(System::PacketBufferHandle::New(msgSize));
ASSERT_FALSE(bbuf.IsNull());
testMsg.WriteToBuffer(bbuf);
EXPECT_TRUE(bbuf.Fit());
System::PacketBufferHandle msgBuf = bbuf.Finalize();
ASSERT_FALSE(msgBuf.IsNull());
System::PacketBufferHandle rcvBuf = System::PacketBufferHandle::NewWithData(msgBuf->Start(), msgSize);
ASSERT_FALSE(rcvBuf.IsNull());
MsgType testMsgRcvd;
err = testMsgRcvd.Parse(std::move(rcvBuf));
EXPECT_EQ(err, CHIP_NO_ERROR);
EXPECT_EQ(testMsgRcvd, testMsg);
}
struct TestBdxMessages : public ::testing::Test
{
static void SetUpTestSuite()
{
CHIP_ERROR error = chip::Platform::MemoryInit();
ASSERT_EQ(error, CHIP_NO_ERROR);
}
static void TearDownTestSuite() { chip::Platform::MemoryShutdown(); }
};
TEST_F(TestBdxMessages, TestTransferInitMessage)
{
TransferInit testMsg;
testMsg.TransferCtlOptions.ClearAll().Set(TransferControlFlags::kReceiverDrive, true);
testMsg.Version = 1;
// Make sure MaxLength is greater than UINT32_MAX to test widerange being set
testMsg.MaxLength = static_cast<uint64_t>(std::numeric_limits<uint32_t>::max()) + 1;
testMsg.StartOffset = 42;
testMsg.MaxBlockSize = 256;
char testFileDes[9] = { "test.txt" };
testMsg.FileDesLength = 9;
testMsg.FileDesignator = reinterpret_cast<uint8_t *>(testFileDes);
uint8_t fakeData[5] = { 7, 6, 5, 4, 3 };
testMsg.MetadataLength = 5;
testMsg.Metadata = reinterpret_cast<uint8_t *>(fakeData);
TestHelperWrittenAndParsedMatch<TransferInit>(testMsg);
}
TEST_F(TestBdxMessages, TestSendAcceptMessage)
{
SendAccept testMsg;
testMsg.Version = 1;
testMsg.TransferCtlFlags.ClearAll().Set(TransferControlFlags::kReceiverDrive, true);
testMsg.MaxBlockSize = 256;
uint8_t fakeData[5] = { 7, 6, 5, 4, 3 };
testMsg.MetadataLength = 5;
testMsg.Metadata = reinterpret_cast<uint8_t *>(fakeData);
TestHelperWrittenAndParsedMatch<SendAccept>(testMsg);
}
TEST_F(TestBdxMessages, TestReceiveAcceptMessage)
{
ReceiveAccept testMsg;
testMsg.Version = 1;
testMsg.TransferCtlFlags.ClearAll().Set(TransferControlFlags::kReceiverDrive, true);
// Make sure Length is greater than UINT32_MAX to test widerange being set
testMsg.Length = static_cast<uint64_t>(std::numeric_limits<uint32_t>::max()) + 1;
testMsg.StartOffset = 42;
testMsg.MaxBlockSize = 256;
uint8_t fakeData[5] = { 7, 6, 5, 4, 3 };
testMsg.MetadataLength = 5;
testMsg.Metadata = reinterpret_cast<uint8_t *>(fakeData);
TestHelperWrittenAndParsedMatch<ReceiveAccept>(testMsg);
}
TEST_F(TestBdxMessages, TestCounterMessage)
{
CounterMessage testMsg;
testMsg.BlockCounter = 4;
TestHelperWrittenAndParsedMatch<CounterMessage>(testMsg);
}
TEST_F(TestBdxMessages, TestDataBlockMessage)
{
DataBlock testMsg;
testMsg.BlockCounter = 4;
uint8_t fakeData[5] = { 7, 6, 5, 4, 3 };
testMsg.DataLength = 5;
testMsg.Data = reinterpret_cast<uint8_t *>(fakeData);
TestHelperWrittenAndParsedMatch<DataBlock>(testMsg);
}
TEST_F(TestBdxMessages, TestBlockQueryWithSkipMessage)
{
BlockQueryWithSkip testMsg;
testMsg.BlockCounter = 5;
testMsg.BytesToSkip = 16;
TestHelperWrittenAndParsedMatch<BlockQueryWithSkip>(testMsg);
}