1 #include <protocols/bdx/BdxMessages.h>
3 #include <nlunit-test.h>
5 #include <support/BufferWriter.h>
6 #include <support/CHIPMem.h>
7 #include <support/CodeUtils.h>
8 #include <support/UnitTestRegistration.h>
13 using namespace chip::bdx;
16 * Helper method for testing that WriteToBuffer() and Parse() are successful, and that the parsed message
17 * is identical to the origianl.
19 template <class MsgType>
20 void TestHelperWrittenAndParsedMatch(nlTestSuite * inSuite, void * inContext, MsgType & testMsg)
22 CHIP_ERROR err = CHIP_NO_ERROR;
24 size_t msgSize = testMsg.MessageSize();
25 Encoding::LittleEndian::PacketBufferWriter bbuf(System::PacketBufferHandle::New(msgSize));
26 NL_TEST_ASSERT(inSuite, !bbuf.IsNull());
28 testMsg.WriteToBuffer(bbuf);
29 NL_TEST_ASSERT(inSuite, bbuf.Fit());
31 System::PacketBufferHandle msgBuf = bbuf.Finalize();
32 NL_TEST_ASSERT(inSuite, !msgBuf.IsNull());
33 System::PacketBufferHandle rcvBuf = System::PacketBufferHandle::NewWithData(msgBuf->Start(), msgSize);
34 NL_TEST_ASSERT(inSuite, !rcvBuf.IsNull());
37 err = testMsgRcvd.Parse(std::move(rcvBuf));
38 NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR);
39 NL_TEST_ASSERT(inSuite, testMsgRcvd == testMsg);
42 void TestTransferInitMessage(nlTestSuite * inSuite, void * inContext)
46 testMsg.TransferCtlOptions.ClearAll().Set(TransferControlFlags::kReceiverDrive, true);
49 // Make sure MaxLength is greater than UINT32_MAX to test widerange being set
50 testMsg.MaxLength = static_cast<uint64_t>(std::numeric_limits<uint32_t>::max()) + 1;
52 testMsg.StartOffset = 42;
53 testMsg.MaxBlockSize = 256;
55 char testFileDes[9] = { "test.txt" };
56 testMsg.FileDesLength = 9;
57 testMsg.FileDesignator = reinterpret_cast<uint8_t *>(testFileDes);
59 uint8_t fakeData[5] = { 7, 6, 5, 4, 3 };
60 testMsg.MetadataLength = 5;
61 testMsg.Metadata = reinterpret_cast<uint8_t *>(fakeData);
63 TestHelperWrittenAndParsedMatch<TransferInit>(inSuite, inContext, testMsg);
66 void TestSendAcceptMessage(nlTestSuite * inSuite, void * inContext)
71 testMsg.TransferCtlFlags.ClearAll().Set(TransferControlFlags::kReceiverDrive, true);
72 testMsg.MaxBlockSize = 256;
74 uint8_t fakeData[5] = { 7, 6, 5, 4, 3 };
75 testMsg.MetadataLength = 5;
76 testMsg.Metadata = reinterpret_cast<uint8_t *>(fakeData);
78 TestHelperWrittenAndParsedMatch<SendAccept>(inSuite, inContext, testMsg);
81 void TestReceiveAcceptMessage(nlTestSuite * inSuite, void * inContext)
83 ReceiveAccept testMsg;
86 testMsg.TransferCtlFlags.ClearAll().Set(TransferControlFlags::kReceiverDrive, true);
88 // Make sure Length is greater than UINT32_MAX to test widerange being set
89 testMsg.Length = static_cast<uint64_t>(std::numeric_limits<uint32_t>::max()) + 1;
91 testMsg.StartOffset = 42;
92 testMsg.MaxBlockSize = 256;
94 uint8_t fakeData[5] = { 7, 6, 5, 4, 3 };
95 testMsg.MetadataLength = 5;
96 testMsg.Metadata = reinterpret_cast<uint8_t *>(fakeData);
98 TestHelperWrittenAndParsedMatch<ReceiveAccept>(inSuite, inContext, testMsg);
101 void TestCounterMessage(nlTestSuite * inSuite, void * inContext)
103 CounterMessage testMsg;
105 testMsg.BlockCounter = 4;
107 TestHelperWrittenAndParsedMatch<CounterMessage>(inSuite, inContext, testMsg);
110 void TestDataBlockMessage(nlTestSuite * inSuite, void * inContext)
114 testMsg.BlockCounter = 4;
115 uint8_t fakeData[5] = { 7, 6, 5, 4, 3 };
116 testMsg.DataLength = 5;
117 testMsg.Data = reinterpret_cast<uint8_t *>(fakeData);
119 TestHelperWrittenAndParsedMatch<DataBlock>(inSuite, inContext, testMsg);
125 * Test Suite that lists all the test functions.
128 static const nlTest sTests[] =
130 NL_TEST_DEF("TestTransferInitMessage", TestTransferInitMessage),
131 NL_TEST_DEF("TestSendAcceptMessage", TestSendAcceptMessage),
132 NL_TEST_DEF("TestReceiveAcceptMessage", TestReceiveAcceptMessage),
133 NL_TEST_DEF("TestCounterMessage", TestCounterMessage),
134 NL_TEST_DEF("TestDataBlockMessage", TestDataBlockMessage),
141 * Set up the test suite.
143 static int TestSetup(void * inContext)
145 CHIP_ERROR error = chip::Platform::MemoryInit();
146 if (error != CHIP_NO_ERROR)
152 * Tear down the test suite.
154 static int TestTeardown(void * inContext)
156 chip::Platform::MemoryShutdown();
161 static nlTestSuite sSuite =
163 "Test-CHIP-BdxMessages",
173 int TestBdxMessages()
175 // Run test suit against one context
176 nlTestRunner(&sSuite, nullptr);
178 return (nlTestRunnerStats(&sSuite));
181 CHIP_REGISTER_TEST_SUITE(TestBdxMessages)