From d905835a6a4b2659b1052dd0fdba3660f07ff733 Mon Sep 17 00:00:00 2001 From: feasel <120589145+feasel0@users.noreply.github.com> Date: Thu, 25 Apr 2024 09:44:51 -0400 Subject: [PATCH] Updated unit tests in src/protocols/bdx/tests/ to use PW instead of NL. (#33084) * Updated unit tests in src/protocols/bdx/tests/ to use PW instead of NL. * Fixed clang and GN formatting. Moved BDXTests from test_components_nl.txt to test_components.txt. * Used ASSERT_* in places where tests should be stopped immediately. Refactored to get rid of else branches that did nothing but ASSERT_TRUE(false). * Simplified TestBdxTransfersession::SetUpTestSuite as per PR suggestion. * Undid the accidental reformatting of the comments at the top. * Semicolon fix. --------- Co-authored-by: Andrei Litvin --- src/protocols/bdx/tests/BUILD.gn | 7 +- src/protocols/bdx/tests/TestBdxMessages.cpp | 114 ++--- .../bdx/tests/TestBdxTransferSession.cpp | 424 +++++++----------- src/protocols/bdx/tests/TestBdxUri.cpp | 63 +-- .../openiotsdk/unit-tests/test_components.txt | 1 + .../unit-tests/test_components_nl.txt | 3 +- 6 files changed, 223 insertions(+), 389 deletions(-) diff --git a/src/protocols/bdx/tests/BUILD.gn b/src/protocols/bdx/tests/BUILD.gn index 59d5f01d35a9c1..055301b3432916 100644 --- a/src/protocols/bdx/tests/BUILD.gn +++ b/src/protocols/bdx/tests/BUILD.gn @@ -14,11 +14,10 @@ import("//build_overrides/build.gni") import("//build_overrides/chip.gni") -import("//build_overrides/nlunit_test.gni") +import("//build_overrides/pigweed.gni") import("${chip_root}/build/chip/chip_test_suite.gni") - -chip_test_suite_using_nltest("tests") { +chip_test_suite("tests") { output_name = "libBDXTests" test_sources = [ @@ -30,9 +29,7 @@ chip_test_suite_using_nltest("tests") { public_deps = [ "${chip_root}/src/lib/core", "${chip_root}/src/lib/support", - "${chip_root}/src/lib/support:testing_nlunit", "${chip_root}/src/protocols/bdx", - "${nlunit_test_root}:nlunit-test", ] cflags = [ "-Wconversion" ] diff --git a/src/protocols/bdx/tests/TestBdxMessages.cpp b/src/protocols/bdx/tests/TestBdxMessages.cpp index 1a6d2c4643fb2e..6475cbd89c14c2 100644 --- a/src/protocols/bdx/tests/TestBdxMessages.cpp +++ b/src/protocols/bdx/tests/TestBdxMessages.cpp @@ -1,11 +1,10 @@ #include -#include +#include #include #include #include -#include #include @@ -17,29 +16,40 @@ using namespace chip::bdx; * is identical to the origianl. */ template -void TestHelperWrittenAndParsedMatch(nlTestSuite * inSuite, void * inContext, MsgType & testMsg) +void TestHelperWrittenAndParsedMatch(MsgType & testMsg) { CHIP_ERROR err = CHIP_NO_ERROR; size_t msgSize = testMsg.MessageSize(); Encoding::LittleEndian::PacketBufferWriter bbuf(System::PacketBufferHandle::New(msgSize)); - NL_TEST_ASSERT(inSuite, !bbuf.IsNull()); + ASSERT_FALSE(bbuf.IsNull()); testMsg.WriteToBuffer(bbuf); - NL_TEST_ASSERT(inSuite, bbuf.Fit()); + EXPECT_TRUE(bbuf.Fit()); System::PacketBufferHandle msgBuf = bbuf.Finalize(); - NL_TEST_ASSERT(inSuite, !msgBuf.IsNull()); + ASSERT_FALSE(msgBuf.IsNull()); System::PacketBufferHandle rcvBuf = System::PacketBufferHandle::NewWithData(msgBuf->Start(), msgSize); - NL_TEST_ASSERT(inSuite, !rcvBuf.IsNull()); + ASSERT_FALSE(rcvBuf.IsNull()); MsgType testMsgRcvd; err = testMsgRcvd.Parse(std::move(rcvBuf)); - NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR); - NL_TEST_ASSERT(inSuite, testMsgRcvd == testMsg); + EXPECT_EQ(err, CHIP_NO_ERROR); + EXPECT_EQ(testMsgRcvd, testMsg); } -void TestTransferInitMessage(nlTestSuite * inSuite, void * inContext) +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; @@ -60,10 +70,10 @@ void TestTransferInitMessage(nlTestSuite * inSuite, void * inContext) testMsg.MetadataLength = 5; testMsg.Metadata = reinterpret_cast(fakeData); - TestHelperWrittenAndParsedMatch(inSuite, inContext, testMsg); + TestHelperWrittenAndParsedMatch(testMsg); } -void TestSendAcceptMessage(nlTestSuite * inSuite, void * inContext) +TEST_F(TestBdxMessages, TestSendAcceptMessage) { SendAccept testMsg; @@ -75,10 +85,10 @@ void TestSendAcceptMessage(nlTestSuite * inSuite, void * inContext) testMsg.MetadataLength = 5; testMsg.Metadata = reinterpret_cast(fakeData); - TestHelperWrittenAndParsedMatch(inSuite, inContext, testMsg); + TestHelperWrittenAndParsedMatch(testMsg); } -void TestReceiveAcceptMessage(nlTestSuite * inSuite, void * inContext) +TEST_F(TestBdxMessages, TestReceiveAcceptMessage) { ReceiveAccept testMsg; @@ -95,19 +105,19 @@ void TestReceiveAcceptMessage(nlTestSuite * inSuite, void * inContext) testMsg.MetadataLength = 5; testMsg.Metadata = reinterpret_cast(fakeData); - TestHelperWrittenAndParsedMatch(inSuite, inContext, testMsg); + TestHelperWrittenAndParsedMatch(testMsg); } -void TestCounterMessage(nlTestSuite * inSuite, void * inContext) +TEST_F(TestBdxMessages, TestCounterMessage) { CounterMessage testMsg; testMsg.BlockCounter = 4; - TestHelperWrittenAndParsedMatch(inSuite, inContext, testMsg); + TestHelperWrittenAndParsedMatch(testMsg); } -void TestDataBlockMessage(nlTestSuite * inSuite, void * inContext) +TEST_F(TestBdxMessages, TestDataBlockMessage) { DataBlock testMsg; @@ -116,77 +126,15 @@ void TestDataBlockMessage(nlTestSuite * inSuite, void * inContext) testMsg.DataLength = 5; testMsg.Data = reinterpret_cast(fakeData); - TestHelperWrittenAndParsedMatch(inSuite, inContext, testMsg); + TestHelperWrittenAndParsedMatch(testMsg); } -void TestBlockQueryWithSkipMessage(nlTestSuite * inSuite, void * inContext) +TEST_F(TestBdxMessages, TestBlockQueryWithSkipMessage) { BlockQueryWithSkip testMsg; testMsg.BlockCounter = 5; testMsg.BytesToSkip = 16; - TestHelperWrittenAndParsedMatch(inSuite, inContext, testMsg); -} - -// Test Suite - -/** - * Test Suite that lists all the test functions. - */ -// clang-format off -static const nlTest sTests[] = -{ - NL_TEST_DEF("TestTransferInitMessage", TestTransferInitMessage), - NL_TEST_DEF("TestSendAcceptMessage", TestSendAcceptMessage), - NL_TEST_DEF("TestReceiveAcceptMessage", TestReceiveAcceptMessage), - NL_TEST_DEF("TestCounterMessage", TestCounterMessage), - NL_TEST_DEF("TestDataBlockMessage", TestDataBlockMessage), - NL_TEST_DEF("TestBlockQueryWithSkipMessage", TestBlockQueryWithSkipMessage), - - NL_TEST_SENTINEL() -}; -// clang-format on - -/** - * Set up the test suite. - */ -static int TestSetup(void * inContext) -{ - CHIP_ERROR error = chip::Platform::MemoryInit(); - if (error != CHIP_NO_ERROR) - return FAILURE; - return SUCCESS; -} - -/** - * Tear down the test suite. - */ -static int TestTeardown(void * inContext) -{ - chip::Platform::MemoryShutdown(); - return SUCCESS; + TestHelperWrittenAndParsedMatch(testMsg); } - -// clang-format off -static nlTestSuite sSuite = -{ - "Test-CHIP-BdxMessages", - &sTests[0], - TestSetup, - TestTeardown, -}; -// clang-format on - -/** - * Main - */ -int TestBdxMessages() -{ - // Run test suit against one context - nlTestRunner(&sSuite, nullptr); - - return (nlTestRunnerStats(&sSuite)); -} - -CHIP_REGISTER_TEST_SUITE(TestBdxMessages) diff --git a/src/protocols/bdx/tests/TestBdxTransferSession.cpp b/src/protocols/bdx/tests/TestBdxTransferSession.cpp index 9be2d7f5ffc885..a3a76df6bddf67 100644 --- a/src/protocols/bdx/tests/TestBdxTransferSession.cpp +++ b/src/protocols/bdx/tests/TestBdxTransferSession.cpp @@ -4,13 +4,12 @@ #include -#include +#include #include #include #include #include -#include #include #include #include @@ -48,8 +47,7 @@ CHIP_ERROR WriteTLVString(uint8_t * buf, uint32_t bufLen, const char * data, uin } // Helper method: read a TLV structure with a single tag and string and verify it matches expected string. -CHIP_ERROR ReadAndVerifyTLVString(nlTestSuite * inSuite, void * inContext, const uint8_t * dataStart, uint32_t len, - const char * expected, size_t expectedLen) +CHIP_ERROR ReadAndVerifyTLVString(const uint8_t * dataStart, uint32_t len, const char * expected, size_t expectedLen) { TLV::TLVReader reader; char tmp[64] = { 0 }; @@ -91,55 +89,45 @@ CHIP_ERROR AttachHeaderAndSend(TransferSession::MessageTypeData typeData, chip:: } // Helper method for verifying that a PacketBufferHandle contains a valid BDX header and message type matches expected. -void VerifyBdxMessageToSend(nlTestSuite * inSuite, void * inContext, const TransferSession::OutputEvent & outEvent, - MessageType expected) +void VerifyBdxMessageToSend(const TransferSession::OutputEvent & outEvent, MessageType expected) { static_assert(std::is_same, uint8_t>::value, "Cast is not safe"); - NL_TEST_ASSERT(inSuite, outEvent.EventType == TransferSession::OutputEventType::kMsgToSend); - NL_TEST_ASSERT(inSuite, !outEvent.MsgData.IsNull()); - NL_TEST_ASSERT(inSuite, outEvent.msgTypeData.ProtocolId == Protocols::BDX::Id); - NL_TEST_ASSERT(inSuite, outEvent.msgTypeData.MessageType == static_cast(expected)); + EXPECT_EQ(outEvent.EventType, TransferSession::OutputEventType::kMsgToSend); + EXPECT_FALSE(outEvent.MsgData.IsNull()); + EXPECT_EQ(outEvent.msgTypeData.ProtocolId, Protocols::BDX::Id); + EXPECT_EQ(outEvent.msgTypeData.MessageType, static_cast(expected)); } // Helper method for verifying that a PacketBufferHandle contains a valid StatusReport message and contains a specific StatusCode. // The msg argument is expected to begin at the message data start, not at the PayloadHeader. -void VerifyStatusReport(nlTestSuite * inSuite, void * inContext, const System::PacketBufferHandle & msg, StatusCode expectedCode) +void VerifyStatusReport(const System::PacketBufferHandle & msg, StatusCode expectedCode) { CHIP_ERROR err = CHIP_NO_ERROR; - if (msg.IsNull()) - { - NL_TEST_ASSERT(inSuite, false); - return; - } + ASSERT_FALSE(msg.IsNull()); System::PacketBufferHandle msgCopy = msg.CloneData(); - if (msgCopy.IsNull()) - { - NL_TEST_ASSERT(inSuite, false); - return; - } + ASSERT_FALSE(msgCopy.IsNull()); SecureChannel::StatusReport report; err = report.Parse(std::move(msgCopy)); - NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR); - NL_TEST_ASSERT(inSuite, report.GetGeneralCode() == SecureChannel::GeneralStatusCode::kFailure); - NL_TEST_ASSERT(inSuite, report.GetProtocolId() == Protocols::BDX::Id); - NL_TEST_ASSERT(inSuite, report.GetProtocolCode() == static_cast(expectedCode)); + EXPECT_EQ(err, CHIP_NO_ERROR); + EXPECT_EQ(report.GetGeneralCode(), SecureChannel::GeneralStatusCode::kFailure); + EXPECT_EQ(report.GetProtocolId(), Protocols::BDX::Id); + EXPECT_EQ(report.GetProtocolCode(), static_cast(expectedCode)); } -void VerifyNoMoreOutput(nlTestSuite * inSuite, void * inContext, TransferSession & transferSession) +void VerifyNoMoreOutput(TransferSession & transferSession) { TransferSession::OutputEvent event; transferSession.PollOutput(event, kNoAdvanceTime); - NL_TEST_ASSERT(inSuite, event.EventType == TransferSession::OutputEventType::kNone); + EXPECT_EQ(event.EventType, TransferSession::OutputEventType::kNone); } // Helper method for initializing two TransferSession objects, generating a TransferInit message, and passing it to a responding // TransferSession. -void SendAndVerifyTransferInit(nlTestSuite * inSuite, void * inContext, TransferSession::OutputEvent & outEvent, - System::Clock::Timeout timeout, TransferSession & initiator, TransferRole initiatorRole, - TransferSession::TransferInitData initData, TransferSession & responder, +void SendAndVerifyTransferInit(TransferSession::OutputEvent & outEvent, System::Clock::Timeout timeout, TransferSession & initiator, + TransferRole initiatorRole, TransferSession::TransferInitData initData, TransferSession & responder, BitFlags & responderControlOpts, uint16_t responderMaxBlock) { CHIP_ERROR err = CHIP_NO_ERROR; @@ -148,55 +136,45 @@ void SendAndVerifyTransferInit(nlTestSuite * inSuite, void * inContext, Transfer // Initializer responder to wait for transfer err = responder.WaitForTransfer(responderRole, responderControlOpts, responderMaxBlock, timeout); - NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR); - VerifyNoMoreOutput(inSuite, inContext, responder); + EXPECT_EQ(err, CHIP_NO_ERROR); + VerifyNoMoreOutput(responder); // Verify initiator outputs respective Init message (depending on role) after StartTransfer() err = initiator.StartTransfer(initiatorRole, initData, timeout); - NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR); + EXPECT_EQ(err, CHIP_NO_ERROR); initiator.PollOutput(outEvent, kNoAdvanceTime); - NL_TEST_ASSERT(inSuite, outEvent.EventType == TransferSession::OutputEventType::kMsgToSend); - VerifyBdxMessageToSend(inSuite, inContext, outEvent, expectedInitMsg); - VerifyNoMoreOutput(inSuite, inContext, initiator); + EXPECT_EQ(outEvent.EventType, TransferSession::OutputEventType::kMsgToSend); + VerifyBdxMessageToSend(outEvent, expectedInitMsg); + VerifyNoMoreOutput(initiator); // Verify that all parsed TransferInit fields match what was sent by the initiator err = AttachHeaderAndSend(outEvent.msgTypeData, std::move(outEvent.MsgData), responder); - NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR); + EXPECT_EQ(err, CHIP_NO_ERROR); responder.PollOutput(outEvent, kNoAdvanceTime); - VerifyNoMoreOutput(inSuite, inContext, responder); - NL_TEST_ASSERT(inSuite, outEvent.EventType == TransferSession::OutputEventType::kInitReceived); - NL_TEST_ASSERT(inSuite, outEvent.transferInitData.TransferCtlFlags == initData.TransferCtlFlags); - NL_TEST_ASSERT(inSuite, outEvent.transferInitData.MaxBlockSize == initData.MaxBlockSize); - NL_TEST_ASSERT(inSuite, outEvent.transferInitData.StartOffset == initData.StartOffset); - NL_TEST_ASSERT(inSuite, outEvent.transferInitData.Length == initData.Length); - NL_TEST_ASSERT(inSuite, outEvent.transferInitData.FileDesignator != nullptr); - NL_TEST_ASSERT(inSuite, outEvent.transferInitData.FileDesLength == initData.FileDesLength); + VerifyNoMoreOutput(responder); + EXPECT_EQ(outEvent.EventType, TransferSession::OutputEventType::kInitReceived); + EXPECT_EQ(outEvent.transferInitData.TransferCtlFlags, initData.TransferCtlFlags); + EXPECT_EQ(outEvent.transferInitData.MaxBlockSize, initData.MaxBlockSize); + EXPECT_EQ(outEvent.transferInitData.StartOffset, initData.StartOffset); + EXPECT_EQ(outEvent.transferInitData.Length, initData.Length); + EXPECT_NE(outEvent.transferInitData.FileDesignator, nullptr); + EXPECT_EQ(outEvent.transferInitData.FileDesLength, initData.FileDesLength); if (outEvent.EventType == TransferSession::OutputEventType::kInitReceived && outEvent.transferInitData.FileDesignator != nullptr) { - NL_TEST_ASSERT( - inSuite, - !memcmp(initData.FileDesignator, outEvent.transferInitData.FileDesignator, outEvent.transferInitData.FileDesLength)); + EXPECT_EQ( + 0, memcmp(initData.FileDesignator, outEvent.transferInitData.FileDesignator, outEvent.transferInitData.FileDesLength)); } if (outEvent.transferInitData.Metadata != nullptr) { - NL_TEST_ASSERT(inSuite, outEvent.transferInitData.MetadataLength == initData.MetadataLength); - if (outEvent.transferInitData.MetadataLength == initData.MetadataLength) + ASSERT_EQ(outEvent.transferInitData.MetadataLength, initData.MetadataLength); + // Even if initData.MetadataLength is 0, it is still technically undefined behaviour to call memcmp with a null + bool isNullAndLengthZero = initData.Metadata == nullptr && initData.MetadataLength == 0; + if (!isNullAndLengthZero) { - // Even if initData.MetadataLength is 0, it is still technically undefined behaviour to call memcmp with a null - bool isNullAndLengthZero = initData.Metadata == nullptr && initData.MetadataLength == 0; - if (!isNullAndLengthZero) - { - // Only check that metadata buffers match. The OutputEvent can still be inspected when this function returns to - // parse the metadata and verify that it matches. - NL_TEST_ASSERT( - inSuite, - !memcmp(initData.Metadata, outEvent.transferInitData.Metadata, outEvent.transferInitData.MetadataLength)); - } - } - else - { - NL_TEST_ASSERT(inSuite, false); // Metadata length mismatch + // Only check that metadata buffers match. The OutputEvent can still be inspected when this function returns to + // parse the metadata and verify that it matches. + EXPECT_EQ(0, memcmp(initData.Metadata, outEvent.transferInitData.Metadata, outEvent.transferInitData.MetadataLength)); } } } @@ -207,8 +185,7 @@ void SendAndVerifyTransferInit(nlTestSuite * inSuite, void * inContext, Transfer // receiver should emit a StatusCode event instead. // // The acceptSender is the node that is sending the Accept message (not necessarily the same node that will send Blocks). -void SendAndVerifyAcceptMsg(nlTestSuite * inSuite, void * inContext, TransferSession::OutputEvent & outEvent, - TransferSession & acceptSender, TransferRole acceptSenderRole, +void SendAndVerifyAcceptMsg(TransferSession::OutputEvent & outEvent, TransferSession & acceptSender, TransferRole acceptSenderRole, TransferSession::TransferAcceptData acceptData, TransferSession & acceptReceiver, TransferSession::TransferInitData initData) { @@ -218,90 +195,77 @@ void SendAndVerifyAcceptMsg(nlTestSuite * inSuite, void * inContext, TransferSes MessageType expectedMsg = (acceptSenderRole == TransferRole::kSender) ? MessageType::ReceiveAccept : MessageType::SendAccept; err = acceptSender.AcceptTransfer(acceptData); - NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR); + EXPECT_EQ(err, CHIP_NO_ERROR); // Verify Sender emits ReceiveAccept message for sending acceptSender.PollOutput(outEvent, kNoAdvanceTime); - VerifyNoMoreOutput(inSuite, inContext, acceptSender); - NL_TEST_ASSERT(inSuite, outEvent.EventType == TransferSession::OutputEventType::kMsgToSend); - VerifyBdxMessageToSend(inSuite, inContext, outEvent, expectedMsg); + VerifyNoMoreOutput(acceptSender); + EXPECT_EQ(outEvent.EventType, TransferSession::OutputEventType::kMsgToSend); + VerifyBdxMessageToSend(outEvent, expectedMsg); // Pass Accept message to acceptReceiver err = AttachHeaderAndSend(outEvent.msgTypeData, std::move(outEvent.MsgData), acceptReceiver); - NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR); + EXPECT_EQ(err, CHIP_NO_ERROR); // Verify received ReceiveAccept. // Client may want to inspect TransferControl, MaxBlockSize, StartOffset, Length, and Metadata, and may choose to reject the // Transfer at this point. acceptReceiver.PollOutput(outEvent, kNoAdvanceTime); - VerifyNoMoreOutput(inSuite, inContext, acceptReceiver); - NL_TEST_ASSERT(inSuite, outEvent.EventType == TransferSession::OutputEventType::kAcceptReceived); - NL_TEST_ASSERT(inSuite, outEvent.transferAcceptData.ControlMode == acceptData.ControlMode); - NL_TEST_ASSERT(inSuite, outEvent.transferAcceptData.MaxBlockSize == acceptData.MaxBlockSize); - NL_TEST_ASSERT(inSuite, outEvent.transferAcceptData.StartOffset == acceptData.StartOffset); - NL_TEST_ASSERT(inSuite, outEvent.transferAcceptData.Length == acceptData.Length); + VerifyNoMoreOutput(acceptReceiver); + EXPECT_EQ(outEvent.EventType, TransferSession::OutputEventType::kAcceptReceived); + EXPECT_EQ(outEvent.transferAcceptData.ControlMode, acceptData.ControlMode); + EXPECT_EQ(outEvent.transferAcceptData.MaxBlockSize, acceptData.MaxBlockSize); + EXPECT_EQ(outEvent.transferAcceptData.StartOffset, acceptData.StartOffset); + EXPECT_EQ(outEvent.transferAcceptData.Length, acceptData.Length); if (outEvent.transferAcceptData.Metadata != nullptr) { - NL_TEST_ASSERT(inSuite, outEvent.transferAcceptData.MetadataLength == acceptData.MetadataLength); - if (outEvent.transferAcceptData.MetadataLength == acceptData.MetadataLength) - { - // Even if acceptData.MetadataLength is 0, it is still technically undefined behaviour to call memcmp with a null - bool isNullAndLengthZero = acceptData.Metadata == nullptr && acceptData.MetadataLength == 0; - if (!isNullAndLengthZero) - { - // Only check that metadata buffers match. The OutputEvent can still be inspected when this function returns to - // parse the metadata and verify that it matches. - NL_TEST_ASSERT( - inSuite, - !memcmp(acceptData.Metadata, outEvent.transferAcceptData.Metadata, outEvent.transferAcceptData.MetadataLength)); - } - } - else + ASSERT_EQ(outEvent.transferAcceptData.MetadataLength, acceptData.MetadataLength); + // Even if acceptData.MetadataLength is 0, it is still technically undefined behaviour to call memcmp with a null + bool isNullAndLengthZero = acceptData.Metadata == nullptr && acceptData.MetadataLength == 0; + if (!isNullAndLengthZero) { - NL_TEST_ASSERT(inSuite, false); // Metadata length mismatch + // Only check that metadata buffers match. The OutputEvent can still be inspected when this function returns to + // parse the metadata and verify that it matches. + EXPECT_EQ( + 0, memcmp(acceptData.Metadata, outEvent.transferAcceptData.Metadata, outEvent.transferAcceptData.MetadataLength)); } } // Verify that MaxBlockSize was set appropriately - NL_TEST_ASSERT(inSuite, acceptReceiver.GetTransferBlockSize() <= initData.MaxBlockSize); + EXPECT_LE(acceptReceiver.GetTransferBlockSize(), initData.MaxBlockSize); } // Helper method for preparing a sending a BlockQuery message between two TransferSession objects. -void SendAndVerifyQuery(nlTestSuite * inSuite, void * inContext, TransferSession & queryReceiver, TransferSession & querySender, - TransferSession::OutputEvent & outEvent) +void SendAndVerifyQuery(TransferSession & queryReceiver, TransferSession & querySender, TransferSession::OutputEvent & outEvent) { // Verify that querySender emits BlockQuery message CHIP_ERROR err = querySender.PrepareBlockQuery(); - NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR); + EXPECT_EQ(err, CHIP_NO_ERROR); querySender.PollOutput(outEvent, kNoAdvanceTime); - NL_TEST_ASSERT(inSuite, outEvent.EventType == TransferSession::OutputEventType::kMsgToSend); - VerifyBdxMessageToSend(inSuite, inContext, outEvent, MessageType::BlockQuery); - VerifyNoMoreOutput(inSuite, inContext, querySender); + EXPECT_EQ(outEvent.EventType, TransferSession::OutputEventType::kMsgToSend); + VerifyBdxMessageToSend(outEvent, MessageType::BlockQuery); + VerifyNoMoreOutput(querySender); // Pass BlockQuery to queryReceiver and verify queryReceiver emits QueryReceived event err = AttachHeaderAndSend(outEvent.msgTypeData, std::move(outEvent.MsgData), queryReceiver); - NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR); + EXPECT_EQ(err, CHIP_NO_ERROR); queryReceiver.PollOutput(outEvent, kNoAdvanceTime); - NL_TEST_ASSERT(inSuite, outEvent.EventType == TransferSession::OutputEventType::kQueryReceived); - VerifyNoMoreOutput(inSuite, inContext, queryReceiver); + EXPECT_EQ(outEvent.EventType, TransferSession::OutputEventType::kQueryReceived); + VerifyNoMoreOutput(queryReceiver); } // Helper method for preparing a sending a Block message between two TransferSession objects. The sender refers to the node that is // sending Blocks. Uses a static counter incremented with each call. Also verifies that block data received matches what was sent. -void SendAndVerifyArbitraryBlock(nlTestSuite * inSuite, void * inContext, TransferSession & sender, TransferSession & receiver, - TransferSession::OutputEvent & outEvent, bool isEof, uint32_t inBlockCounter) +void SendAndVerifyArbitraryBlock(TransferSession & sender, TransferSession & receiver, TransferSession::OutputEvent & outEvent, + bool isEof, uint32_t inBlockCounter) { CHIP_ERROR err = CHIP_NO_ERROR; static uint8_t dataCount = 0; uint16_t maxBlockSize = sender.GetTransferBlockSize(); - NL_TEST_ASSERT(inSuite, maxBlockSize > 0); + EXPECT_GT(maxBlockSize, 0); System::PacketBufferHandle fakeDataBuf = System::PacketBufferHandle::New(maxBlockSize); - if (fakeDataBuf.IsNull()) - { - NL_TEST_ASSERT(inSuite, false); - return; - } + ASSERT_FALSE(fakeDataBuf.IsNull()); uint8_t * fakeBlockData = fakeDataBuf->Start(); fakeBlockData[0] = dataCount++; @@ -315,29 +279,29 @@ void SendAndVerifyArbitraryBlock(nlTestSuite * inSuite, void * inContext, Transf // Provide Block data and verify sender emits Block message err = sender.PrepareBlock(blockData); - NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR); + EXPECT_EQ(err, CHIP_NO_ERROR); sender.PollOutput(outEvent, kNoAdvanceTime); - NL_TEST_ASSERT(inSuite, outEvent.EventType == TransferSession::OutputEventType::kMsgToSend); - VerifyBdxMessageToSend(inSuite, inContext, outEvent, expected); - VerifyNoMoreOutput(inSuite, inContext, sender); + EXPECT_EQ(outEvent.EventType, TransferSession::OutputEventType::kMsgToSend); + VerifyBdxMessageToSend(outEvent, expected); + VerifyNoMoreOutput(sender); // Pass Block message to receiver and verify matching Block is received err = AttachHeaderAndSend(outEvent.msgTypeData, std::move(outEvent.MsgData), receiver); - NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR); + EXPECT_EQ(err, CHIP_NO_ERROR); receiver.PollOutput(outEvent, kNoAdvanceTime); - NL_TEST_ASSERT(inSuite, outEvent.EventType == TransferSession::OutputEventType::kBlockReceived); - NL_TEST_ASSERT(inSuite, outEvent.blockdata.Data != nullptr); + EXPECT_EQ(outEvent.EventType, TransferSession::OutputEventType::kBlockReceived); + EXPECT_NE(outEvent.blockdata.Data, nullptr); if (outEvent.EventType == TransferSession::OutputEventType::kBlockReceived && outEvent.blockdata.Data != nullptr) { - NL_TEST_ASSERT(inSuite, !memcmp(fakeBlockData, outEvent.blockdata.Data, outEvent.blockdata.Length)); - NL_TEST_ASSERT(inSuite, outEvent.blockdata.BlockCounter == inBlockCounter); + EXPECT_EQ(0, memcmp(fakeBlockData, outEvent.blockdata.Data, outEvent.blockdata.Length)); + EXPECT_EQ(outEvent.blockdata.BlockCounter, inBlockCounter); } - VerifyNoMoreOutput(inSuite, inContext, receiver); + VerifyNoMoreOutput(receiver); } // Helper method for sending a BlockAck or BlockAckEOF, depending on the state of the receiver. -void SendAndVerifyBlockAck(nlTestSuite * inSuite, void * inContext, TransferSession & ackReceiver, TransferSession & ackSender, - TransferSession::OutputEvent & outEvent, bool expectEOF) +void SendAndVerifyBlockAck(TransferSession & ackReceiver, TransferSession & ackSender, TransferSession::OutputEvent & outEvent, + bool expectEOF) { TransferSession::OutputEventType expectedEventType = expectEOF ? TransferSession::OutputEventType::kAckEOFReceived : TransferSession::OutputEventType::kAckReceived; @@ -345,22 +309,29 @@ void SendAndVerifyBlockAck(nlTestSuite * inSuite, void * inContext, TransferSess // Verify PrepareBlockAck() outputs message to send CHIP_ERROR err = ackSender.PrepareBlockAck(); - NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR); + EXPECT_EQ(err, CHIP_NO_ERROR); ackSender.PollOutput(outEvent, kNoAdvanceTime); - NL_TEST_ASSERT(inSuite, outEvent.EventType == TransferSession::OutputEventType::kMsgToSend); - VerifyBdxMessageToSend(inSuite, inContext, outEvent, expectedMsgType); - VerifyNoMoreOutput(inSuite, inContext, ackSender); + EXPECT_EQ(outEvent.EventType, TransferSession::OutputEventType::kMsgToSend); + VerifyBdxMessageToSend(outEvent, expectedMsgType); + VerifyNoMoreOutput(ackSender); // Pass BlockAck to ackReceiver and verify it was received err = AttachHeaderAndSend(outEvent.msgTypeData, std::move(outEvent.MsgData), ackReceiver); - NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR); + EXPECT_EQ(err, CHIP_NO_ERROR); ackReceiver.PollOutput(outEvent, kNoAdvanceTime); - NL_TEST_ASSERT(inSuite, outEvent.EventType == expectedEventType); - VerifyNoMoreOutput(inSuite, inContext, ackReceiver); + EXPECT_EQ(outEvent.EventType, expectedEventType); + VerifyNoMoreOutput(ackReceiver); } +struct TestBdxTransferSession : public ::testing::Test +{ + static void SetUpTestSuite() { EXPECT_EQ(chip::Platform::MemoryInit(), CHIP_NO_ERROR); } + + static void TearDownTestSuite() { chip::Platform::MemoryShutdown(); } +}; + // Test a full transfer using a responding receiver and an initiating sender, receiver drive. -void TestInitiatingReceiverReceiverDrive(nlTestSuite * inSuite, void * inContext) +TEST_F(TestBdxTransferSession, TestInitiatingReceiverReceiverDrive) { CHIP_ERROR err = CHIP_NO_ERROR; TransferSession::OutputEvent outEvent; @@ -391,15 +362,15 @@ void TestInitiatingReceiverReceiverDrive(nlTestSuite * inSuite, void * inContext BitFlags senderOpts; senderOpts.Set(driveMode); - SendAndVerifyTransferInit(inSuite, inContext, outEvent, timeout, initiatingReceiver, TransferRole::kReceiver, initOptions, - respondingSender, senderOpts, proposedBlockSize); + SendAndVerifyTransferInit(outEvent, timeout, initiatingReceiver, TransferRole::kReceiver, initOptions, respondingSender, + senderOpts, proposedBlockSize); // Test metadata for Accept message uint8_t tlvBuf[64] = { 0 }; char metadataStr[11] = { "hi_dad.txt" }; uint32_t bytesWritten = 0; err = WriteTLVString(tlvBuf, sizeof(tlvBuf), metadataStr, bytesWritten); - NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR); + EXPECT_EQ(err, CHIP_NO_ERROR); uint16_t metadataSize = static_cast(bytesWritten & 0x0000FFFF); // Compose ReceiveAccept parameters struct and give to respondingSender @@ -411,60 +382,55 @@ void TestInitiatingReceiverReceiverDrive(nlTestSuite * inSuite, void * inContext acceptData.Metadata = tlvBuf; acceptData.MetadataLength = metadataSize; - SendAndVerifyAcceptMsg(inSuite, inContext, outEvent, respondingSender, TransferRole::kSender, acceptData, initiatingReceiver, - initOptions); + SendAndVerifyAcceptMsg(outEvent, respondingSender, TransferRole::kSender, acceptData, initiatingReceiver, initOptions); // Verify that MaxBlockSize was chosen correctly - NL_TEST_ASSERT(inSuite, respondingSender.GetTransferBlockSize() == testSmallerBlockSize); - NL_TEST_ASSERT(inSuite, respondingSender.GetTransferBlockSize() == initiatingReceiver.GetTransferBlockSize()); + EXPECT_EQ(respondingSender.GetTransferBlockSize(), testSmallerBlockSize); + EXPECT_EQ(respondingSender.GetTransferBlockSize(), initiatingReceiver.GetTransferBlockSize()); // Verify parsed TLV metadata matches the original - err = ReadAndVerifyTLVString(inSuite, inContext, outEvent.transferAcceptData.Metadata, + err = ReadAndVerifyTLVString(outEvent.transferAcceptData.Metadata, static_cast(outEvent.transferAcceptData.MetadataLength), metadataStr, static_cast(strlen(metadataStr))); - NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR); + EXPECT_EQ(err, CHIP_NO_ERROR); // Test BlockQuery -> Block -> BlockAck - SendAndVerifyQuery(inSuite, inContext, respondingSender, initiatingReceiver, outEvent); - SendAndVerifyArbitraryBlock(inSuite, inContext, respondingSender, initiatingReceiver, outEvent, false, numBlocksSent); + SendAndVerifyQuery(respondingSender, initiatingReceiver, outEvent); + SendAndVerifyArbitraryBlock(respondingSender, initiatingReceiver, outEvent, false, numBlocksSent); numBlocksSent++; // Test only one block can be prepared at a time, without receiving a response to the first System::PacketBufferHandle fakeBuf = System::PacketBufferHandle::New(testSmallerBlockSize); TransferSession::BlockData prematureBlock; - if (fakeBuf.IsNull()) - { - NL_TEST_ASSERT(inSuite, false); - return; - } + ASSERT_FALSE(fakeBuf.IsNull()); prematureBlock.Data = fakeBuf->Start(); prematureBlock.Length = testSmallerBlockSize; prematureBlock.IsEof = false; err = respondingSender.PrepareBlock(prematureBlock); - NL_TEST_ASSERT(inSuite, err != CHIP_NO_ERROR); - VerifyNoMoreOutput(inSuite, inContext, respondingSender); + EXPECT_NE(err, CHIP_NO_ERROR); + VerifyNoMoreOutput(respondingSender); // Test Ack -> Query -> Block - SendAndVerifyBlockAck(inSuite, inContext, respondingSender, initiatingReceiver, outEvent, false); + SendAndVerifyBlockAck(respondingSender, initiatingReceiver, outEvent, false); // Test multiple Blocks sent and received (last Block is BlockEOF) while (numBlocksSent < numBlockSends) { bool isEof = (numBlocksSent == numBlockSends - 1); - SendAndVerifyQuery(inSuite, inContext, respondingSender, initiatingReceiver, outEvent); - SendAndVerifyArbitraryBlock(inSuite, inContext, respondingSender, initiatingReceiver, outEvent, isEof, numBlocksSent); + SendAndVerifyQuery(respondingSender, initiatingReceiver, outEvent); + SendAndVerifyArbitraryBlock(respondingSender, initiatingReceiver, outEvent, isEof, numBlocksSent); numBlocksSent++; } // Verify last block was BlockEOF, then verify response BlockAckEOF message - NL_TEST_ASSERT(inSuite, outEvent.blockdata.IsEof == true); - SendAndVerifyBlockAck(inSuite, inContext, respondingSender, initiatingReceiver, outEvent, true); + EXPECT_TRUE(outEvent.blockdata.IsEof); + SendAndVerifyBlockAck(respondingSender, initiatingReceiver, outEvent, true); } // Partial transfer test using Sender Drive to specifically test Block -> BlockAck -> Block sequence -void TestInitiatingSenderSenderDrive(nlTestSuite * inSuite, void * inContext) +TEST_F(TestBdxTransferSession, TestInitiatingSenderSenderDrive) { CHIP_ERROR err = CHIP_NO_ERROR; TransferSession::OutputEvent outEvent; @@ -486,7 +452,7 @@ void TestInitiatingSenderSenderDrive(nlTestSuite * inSuite, void * inContext) char metadataStr[11] = { "hi_dad.txt" }; uint32_t bytesWritten = 0; err = WriteTLVString(tlvBuf, sizeof(tlvBuf), metadataStr, bytesWritten); - NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR); + EXPECT_EQ(err, CHIP_NO_ERROR); uint16_t metadataSize = static_cast(bytesWritten & 0x0000FFFF); // Initialize struct with TransferInit parameters @@ -499,14 +465,14 @@ void TestInitiatingSenderSenderDrive(nlTestSuite * inSuite, void * inContext) initOptions.Metadata = tlvBuf; initOptions.MetadataLength = metadataSize; - SendAndVerifyTransferInit(inSuite, inContext, outEvent, timeout, initiatingSender, TransferRole::kSender, initOptions, - respondingReceiver, receiverOpts, transferBlockSize); + SendAndVerifyTransferInit(outEvent, timeout, initiatingSender, TransferRole::kSender, initOptions, respondingReceiver, + receiverOpts, transferBlockSize); // Verify parsed TLV metadata matches the original - err = ReadAndVerifyTLVString(inSuite, inContext, outEvent.transferInitData.Metadata, - static_cast(outEvent.transferInitData.MetadataLength), metadataStr, - static_cast(strlen(metadataStr))); - NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR); + err = + ReadAndVerifyTLVString(outEvent.transferInitData.Metadata, static_cast(outEvent.transferInitData.MetadataLength), + metadataStr, static_cast(strlen(metadataStr))); + EXPECT_EQ(err, CHIP_NO_ERROR); // Compose SendAccept parameters struct and give to respondingSender uint16_t proposedBlockSize = transferBlockSize; @@ -518,24 +484,23 @@ void TestInitiatingSenderSenderDrive(nlTestSuite * inSuite, void * inContext) acceptData.Metadata = nullptr; acceptData.MetadataLength = 0; - SendAndVerifyAcceptMsg(inSuite, inContext, outEvent, respondingReceiver, TransferRole::kReceiver, acceptData, initiatingSender, - initOptions); + SendAndVerifyAcceptMsg(outEvent, respondingReceiver, TransferRole::kReceiver, acceptData, initiatingSender, initOptions); uint32_t numBlocksSent = 0; // Test multiple Block -> BlockAck -> Block for (int i = 0; i < 3; i++) { - SendAndVerifyArbitraryBlock(inSuite, inContext, initiatingSender, respondingReceiver, outEvent, false, numBlocksSent); - SendAndVerifyBlockAck(inSuite, inContext, initiatingSender, respondingReceiver, outEvent, false); + SendAndVerifyArbitraryBlock(initiatingSender, respondingReceiver, outEvent, false, numBlocksSent); + SendAndVerifyBlockAck(initiatingSender, respondingReceiver, outEvent, false); numBlocksSent++; } - SendAndVerifyArbitraryBlock(inSuite, inContext, initiatingSender, respondingReceiver, outEvent, true, numBlocksSent); - SendAndVerifyBlockAck(inSuite, inContext, initiatingSender, respondingReceiver, outEvent, true); + SendAndVerifyArbitraryBlock(initiatingSender, respondingReceiver, outEvent, true, numBlocksSent); + SendAndVerifyBlockAck(initiatingSender, respondingReceiver, outEvent, true); } // Test that calls to AcceptTransfer() with bad parameters result in an error. -void TestBadAcceptMessageFields(nlTestSuite * inSuite, void * inContext) +TEST_F(TestBdxTransferSession, TestBadAcceptMessageFields) { CHIP_ERROR err = CHIP_NO_ERROR; TransferSession::OutputEvent outEvent; @@ -564,8 +529,8 @@ void TestBadAcceptMessageFields(nlTestSuite * inSuite, void * inContext) BitFlags responderControl; responderControl.Set(driveMode); - SendAndVerifyTransferInit(inSuite, inContext, outEvent, timeout, initiatingReceiver, TransferRole::kReceiver, initOptions, - respondingSender, responderControl, maxBlockSize); + SendAndVerifyTransferInit(outEvent, timeout, initiatingReceiver, TransferRole::kReceiver, initOptions, respondingSender, + responderControl, maxBlockSize); // Verify AcceptTransfer() returns error for choosing larger max block size TransferSession::TransferAcceptData acceptData; @@ -574,7 +539,7 @@ void TestBadAcceptMessageFields(nlTestSuite * inSuite, void * inContext) acceptData.StartOffset = commonOffset; acceptData.Length = commonLength; err = respondingSender.AcceptTransfer(acceptData); - NL_TEST_ASSERT(inSuite, err != CHIP_NO_ERROR); + EXPECT_NE(err, CHIP_NO_ERROR); // Verify AcceptTransfer() returns error for choosing unsupported transfer control mode TransferSession::TransferAcceptData acceptData2; @@ -584,11 +549,11 @@ void TestBadAcceptMessageFields(nlTestSuite * inSuite, void * inContext) acceptData2.StartOffset = commonOffset; acceptData2.Length = commonLength; err = respondingSender.AcceptTransfer(acceptData2); - NL_TEST_ASSERT(inSuite, err != CHIP_NO_ERROR); + EXPECT_NE(err, CHIP_NO_ERROR); } // Test that a TransferSession will emit kTransferTimeout if the specified timeout is exceeded while waiting for a response. -void TestTimeout(nlTestSuite * inSuite, void * inContext) +TEST_F(TestBdxTransferSession, TestTimeout) { CHIP_ERROR err = CHIP_NO_ERROR; TransferSession initiator; @@ -614,22 +579,22 @@ void TestTimeout(nlTestSuite * inSuite, void * inContext) // Verify initiator outputs respective Init message (depending on role) after StartTransfer() err = initiator.StartTransfer(role, initOptions, timeout); - NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR); + EXPECT_EQ(err, CHIP_NO_ERROR); // First PollOutput() should output the TransferInit message initiator.PollOutput(outEvent, startTime); - NL_TEST_ASSERT(inSuite, outEvent.EventType == TransferSession::OutputEventType::kMsgToSend); + EXPECT_EQ(outEvent.EventType, TransferSession::OutputEventType::kMsgToSend); MessageType expectedInitMsg = (role == TransferRole::kSender) ? MessageType::SendInit : MessageType::ReceiveInit; - VerifyBdxMessageToSend(inSuite, inContext, outEvent, expectedInitMsg); + VerifyBdxMessageToSend(outEvent, expectedInitMsg); // Second PollOutput() with no call to HandleMessageReceived() should result in a timeout. initiator.PollOutput(outEvent, endTime); - NL_TEST_ASSERT(inSuite, outEvent.EventType == TransferSession::OutputEventType::kTransferTimeout); + EXPECT_EQ(outEvent.EventType, TransferSession::OutputEventType::kTransferTimeout); } // Test that sending the same block twice (with same block counter) results in a StatusReport message with BadBlockCounter. Also // test that receiving the StatusReport ends the transfer on the other node. -void TestDuplicateBlockError(nlTestSuite * inSuite, void * inContext) +TEST_F(TestBdxTransferSession, TestDuplicateBlockError) { CHIP_ERROR err = CHIP_NO_ERROR; TransferSession::OutputEvent outEvent; @@ -661,8 +626,8 @@ void TestDuplicateBlockError(nlTestSuite * inSuite, void * inContext) BitFlags senderOpts; senderOpts.Set(driveMode); - SendAndVerifyTransferInit(inSuite, inContext, outEvent, timeout, initiatingReceiver, TransferRole::kReceiver, initOptions, - respondingSender, senderOpts, blockSize); + SendAndVerifyTransferInit(outEvent, timeout, initiatingReceiver, TransferRole::kReceiver, initOptions, respondingSender, + senderOpts, blockSize); // Compose ReceiveAccept parameters struct and give to respondingSender TransferSession::TransferAcceptData acceptData; @@ -673,10 +638,9 @@ void TestDuplicateBlockError(nlTestSuite * inSuite, void * inContext) acceptData.Metadata = nullptr; acceptData.MetadataLength = 0; - SendAndVerifyAcceptMsg(inSuite, inContext, outEvent, respondingSender, TransferRole::kSender, acceptData, initiatingReceiver, - initOptions); + SendAndVerifyAcceptMsg(outEvent, respondingSender, TransferRole::kSender, acceptData, initiatingReceiver, initOptions); - SendAndVerifyQuery(inSuite, inContext, respondingSender, initiatingReceiver, outEvent); + SendAndVerifyQuery(respondingSender, initiatingReceiver, outEvent); TransferSession::BlockData blockData; blockData.Data = fakeData; @@ -685,106 +649,52 @@ void TestDuplicateBlockError(nlTestSuite * inSuite, void * inContext) // Provide Block data and verify sender emits Block message err = respondingSender.PrepareBlock(blockData); - NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR); + EXPECT_EQ(err, CHIP_NO_ERROR); respondingSender.PollOutput(eventWithBlock, kNoAdvanceTime); - NL_TEST_ASSERT(inSuite, eventWithBlock.EventType == TransferSession::OutputEventType::kMsgToSend); - VerifyBdxMessageToSend(inSuite, inContext, eventWithBlock, MessageType::Block); - VerifyNoMoreOutput(inSuite, inContext, respondingSender); + EXPECT_EQ(eventWithBlock.EventType, TransferSession::OutputEventType::kMsgToSend); + VerifyBdxMessageToSend(eventWithBlock, MessageType::Block); + VerifyNoMoreOutput(respondingSender); System::PacketBufferHandle blockCopy = System::PacketBufferHandle::NewWithData(eventWithBlock.MsgData->Start(), eventWithBlock.MsgData->DataLength()); // Pass Block message to receiver and verify matching Block is received err = AttachHeaderAndSend(eventWithBlock.msgTypeData, std::move(eventWithBlock.MsgData), initiatingReceiver); - NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR); + EXPECT_EQ(err, CHIP_NO_ERROR); initiatingReceiver.PollOutput(outEvent, kNoAdvanceTime); - NL_TEST_ASSERT(inSuite, outEvent.EventType == TransferSession::OutputEventType::kBlockReceived); - NL_TEST_ASSERT(inSuite, outEvent.blockdata.Data != nullptr); - VerifyNoMoreOutput(inSuite, inContext, initiatingReceiver); + EXPECT_EQ(outEvent.EventType, TransferSession::OutputEventType::kBlockReceived); + EXPECT_NE(outEvent.blockdata.Data, nullptr); + VerifyNoMoreOutput(initiatingReceiver); - SendAndVerifyQuery(inSuite, inContext, respondingSender, initiatingReceiver, outEvent); + SendAndVerifyQuery(respondingSender, initiatingReceiver, outEvent); // Verify receiving same Block twice fails and results in StatusReport event, and then InternalError event err = AttachHeaderAndSend(eventWithBlock.msgTypeData, std::move(blockCopy), initiatingReceiver); - NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR); + EXPECT_EQ(err, CHIP_NO_ERROR); initiatingReceiver.PollOutput(outEvent, kNoAdvanceTime); - NL_TEST_ASSERT(inSuite, outEvent.EventType == TransferSession::OutputEventType::kMsgToSend); + EXPECT_EQ(outEvent.EventType, TransferSession::OutputEventType::kMsgToSend); System::PacketBufferHandle statusReportMsg = outEvent.MsgData.Retain(); TransferSession::MessageTypeData statusReportMsgTypeData = outEvent.msgTypeData; - VerifyStatusReport(inSuite, inContext, std::move(outEvent.MsgData), StatusCode::kBadBlockCounter); + VerifyStatusReport(std::move(outEvent.MsgData), StatusCode::kBadBlockCounter); // All subsequent PollOutput() calls should return kInternalError for (int i = 0; i < 5; ++i) { initiatingReceiver.PollOutput(outEvent, kNoAdvanceTime); - NL_TEST_ASSERT(inSuite, outEvent.EventType == TransferSession::OutputEventType::kInternalError); - NL_TEST_ASSERT(inSuite, outEvent.statusData.statusCode == StatusCode::kBadBlockCounter); + EXPECT_EQ(outEvent.EventType, TransferSession::OutputEventType::kInternalError); + EXPECT_EQ(outEvent.statusData.statusCode, StatusCode::kBadBlockCounter); } err = AttachHeaderAndSend(statusReportMsgTypeData, std::move(statusReportMsg), respondingSender); - NL_TEST_ASSERT(inSuite, err == CHIP_NO_ERROR); + EXPECT_EQ(err, CHIP_NO_ERROR); respondingSender.PollOutput(outEvent, kNoAdvanceTime); - NL_TEST_ASSERT(inSuite, outEvent.EventType == TransferSession::OutputEventType::kStatusReceived); - NL_TEST_ASSERT(inSuite, outEvent.statusData.statusCode == StatusCode::kBadBlockCounter); + EXPECT_EQ(outEvent.EventType, TransferSession::OutputEventType::kStatusReceived); + EXPECT_EQ(outEvent.statusData.statusCode, StatusCode::kBadBlockCounter); // All subsequent PollOutput() calls should return kInternalError for (int i = 0; i < 5; ++i) { respondingSender.PollOutput(outEvent, kNoAdvanceTime); - NL_TEST_ASSERT(inSuite, outEvent.EventType == TransferSession::OutputEventType::kInternalError); - NL_TEST_ASSERT(inSuite, outEvent.statusData.statusCode == StatusCode::kBadBlockCounter); + EXPECT_EQ(outEvent.EventType, TransferSession::OutputEventType::kInternalError); + EXPECT_EQ(outEvent.statusData.statusCode, StatusCode::kBadBlockCounter); } } - -// Test Suite - -/** - * Test Suite that lists all the test functions. - */ -// clang-format off -static const nlTest sTests[] = -{ - NL_TEST_DEF("TestInitiatingReceiverReceiverDrive", TestInitiatingReceiverReceiverDrive), - NL_TEST_DEF("TestInitiatingSenderSenderDrive", TestInitiatingSenderSenderDrive), - NL_TEST_DEF("TestBadAcceptMessageFields", TestBadAcceptMessageFields), - NL_TEST_DEF("TestTimeout", TestTimeout), - NL_TEST_DEF("TestDuplicateBlockError", TestDuplicateBlockError), - NL_TEST_SENTINEL() -}; -// clang-format on - -int TestBdxTransferSession_Setup(void * inContext) -{ - CHIP_ERROR error = chip::Platform::MemoryInit(); - if (error != CHIP_NO_ERROR) - return FAILURE; - return SUCCESS; -} - -int TestBdxTransferSession_Teardown(void * inContext) -{ - chip::Platform::MemoryShutdown(); - return SUCCESS; -} - -// clang-format off -static nlTestSuite sSuite = -{ - "Test-CHIP-TransferSession", - &sTests[0], - TestBdxTransferSession_Setup, - TestBdxTransferSession_Teardown -}; -// clang-format on - -/** - * Main - */ -int TestBdxTransferSession() -{ - // Run test suit against one context - nlTestRunner(&sSuite, nullptr); - - return (nlTestRunnerStats(&sSuite)); -} - -CHIP_REGISTER_TEST_SUITE(TestBdxTransferSession) diff --git a/src/protocols/bdx/tests/TestBdxUri.cpp b/src/protocols/bdx/tests/TestBdxUri.cpp index 8641ee1d4524a6..e94b88ec0d9f21 100644 --- a/src/protocols/bdx/tests/TestBdxUri.cpp +++ b/src/protocols/bdx/tests/TestBdxUri.cpp @@ -15,11 +15,10 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -#include #include #include -#include +#include using namespace ::chip; @@ -30,7 +29,7 @@ CharSpan ToSpan(const char * str) return CharSpan::fromCharString(str); } -void TestParseURI(nlTestSuite * inSuite, void * inContext) +TEST(TestBdxUri, TestParseURI) { NodeId nodeId; CharSpan file; @@ -38,75 +37,55 @@ void TestParseURI(nlTestSuite * inSuite, void * inContext) const auto parse = [&](const char * uri) { return bdx::ParseURI(ToSpan(uri), nodeId, file); }; // Happy path - NL_TEST_ASSERT(inSuite, parse("bdx://1234567890ABCDEF/file_name") == CHIP_NO_ERROR); - NL_TEST_ASSERT(inSuite, nodeId == 0x1234567890ABCDEFULL); - NL_TEST_ASSERT(inSuite, file.data_equal(ToSpan("file_name"))); + EXPECT_EQ(parse("bdx://1234567890ABCDEF/file_name"), CHIP_NO_ERROR); + EXPECT_EQ(nodeId, 0x1234567890ABCDEFULL); + EXPECT_TRUE(file.data_equal(ToSpan("file_name"))); // File designator may contain slashes - NL_TEST_ASSERT(inSuite, parse("bdx://1234567890ABCDEF/file/na/me") == CHIP_NO_ERROR); - NL_TEST_ASSERT(inSuite, nodeId == 0x1234567890ABCDEFULL); - NL_TEST_ASSERT(inSuite, file.data_equal(ToSpan("file/na/me"))); + EXPECT_EQ(parse("bdx://1234567890ABCDEF/file/na/me"), CHIP_NO_ERROR); + EXPECT_EQ(nodeId, 0x1234567890ABCDEFULL); + EXPECT_TRUE(file.data_equal(ToSpan("file/na/me"))); // Wrong scheme - NL_TEST_ASSERT(inSuite, parse("bdy://1234567890ABCDEF/file_name") == CHIP_ERROR_INVALID_SCHEME_PREFIX); + EXPECT_EQ(parse("bdy://1234567890ABCDEF/file_name"), CHIP_ERROR_INVALID_SCHEME_PREFIX); // Node ID contains non-hex digit - NL_TEST_ASSERT(inSuite, parse("bdx://1234567890ABCDEG/file_name") == CHIP_ERROR_INVALID_DESTINATION_NODE_ID); + EXPECT_EQ(parse("bdx://1234567890ABCDEG/file_name"), CHIP_ERROR_INVALID_DESTINATION_NODE_ID); // Node ID too short - NL_TEST_ASSERT(inSuite, parse("bdx://1234567890ABCDE/file_name") == CHIP_ERROR_INVALID_DESTINATION_NODE_ID); + EXPECT_EQ(parse("bdx://1234567890ABCDE/file_name"), CHIP_ERROR_INVALID_DESTINATION_NODE_ID); // Node ID too long - NL_TEST_ASSERT(inSuite, parse("bdx://1234567890ABCDEFEF/file_name") == CHIP_ERROR_MISSING_URI_SEPARATOR); + EXPECT_EQ(parse("bdx://1234567890ABCDEFEF/file_name"), CHIP_ERROR_MISSING_URI_SEPARATOR); // Node ID to non-operational - NL_TEST_ASSERT(inSuite, parse("bdx://FFFFFFFFFFFFFFFF/file_name") == CHIP_ERROR_INVALID_DESTINATION_NODE_ID); + EXPECT_EQ(parse("bdx://FFFFFFFFFFFFFFFF/file_name"), CHIP_ERROR_INVALID_DESTINATION_NODE_ID); // No file designator - NL_TEST_ASSERT(inSuite, parse("bdx://1234567890ABCDEF/") == CHIP_ERROR_INVALID_STRING_LENGTH); + EXPECT_EQ(parse("bdx://1234567890ABCDEF/"), CHIP_ERROR_INVALID_STRING_LENGTH); } -void TestMakeURI(nlTestSuite * inSuite, void * inContext) +TEST(TestBdxUri, TestMakeURI) { char uriBuffer[128]; MutableCharSpan uri(uriBuffer); // Happy path - NL_TEST_ASSERT(inSuite, bdx::MakeURI(0xFEDCBA0987654321ULL, ToSpan("file_name"), uri) == CHIP_NO_ERROR); - NL_TEST_ASSERT(inSuite, uri.data_equal(ToSpan("bdx://FEDCBA0987654321/file_name"))); + EXPECT_EQ(bdx::MakeURI(0xFEDCBA0987654321ULL, ToSpan("file_name"), uri), CHIP_NO_ERROR); + EXPECT_TRUE(uri.data_equal(ToSpan("bdx://FEDCBA0987654321/file_name"))); // File designator with slashes uri = MutableCharSpan(uriBuffer); - NL_TEST_ASSERT(inSuite, bdx::MakeURI(0xFEDCBA0987654321ULL, ToSpan("file/na/me"), uri) == CHIP_NO_ERROR); - NL_TEST_ASSERT(inSuite, uri.data_equal(ToSpan("bdx://FEDCBA0987654321/file/na/me"))); + EXPECT_EQ(bdx::MakeURI(0xFEDCBA0987654321ULL, ToSpan("file/na/me"), uri), CHIP_NO_ERROR); + EXPECT_TRUE(uri.data_equal(ToSpan("bdx://FEDCBA0987654321/file/na/me"))); // Empty file designator uri = MutableCharSpan(uriBuffer); - NL_TEST_ASSERT(inSuite, bdx::MakeURI(0xFEDCBA0987654321ULL, CharSpan(), uri) != CHIP_NO_ERROR); + EXPECT_NE(bdx::MakeURI(0xFEDCBA0987654321ULL, CharSpan(), uri), CHIP_NO_ERROR); // Too small buffer uri = MutableCharSpan(uriBuffer, 31); - NL_TEST_ASSERT(inSuite, bdx::MakeURI(0xFEDCBA0987654321ULL, CharSpan(), uri) != CHIP_NO_ERROR); + EXPECT_NE(bdx::MakeURI(0xFEDCBA0987654321ULL, CharSpan(), uri), CHIP_NO_ERROR); } -// clang-format off -const nlTest sTests[] = -{ - NL_TEST_DEF("TestParseURI", TestParseURI), - NL_TEST_DEF("TestMakeURI", TestMakeURI), - NL_TEST_SENTINEL() -}; -// clang-format on - -nlTestSuite sSuite = { "Test BDX URI", &sTests[0], nullptr, nullptr }; } // namespace - -int TestBdxUri() -{ - // Run test suit against one context - nlTestRunner(&sSuite, nullptr); - - return (nlTestRunnerStats(&sSuite)); -} - -CHIP_REGISTER_TEST_SUITE(TestBdxUri) diff --git a/src/test_driver/openiotsdk/unit-tests/test_components.txt b/src/test_driver/openiotsdk/unit-tests/test_components.txt index 0471f70b7a1a55..c874d341b2d58c 100644 --- a/src/test_driver/openiotsdk/unit-tests/test_components.txt +++ b/src/test_driver/openiotsdk/unit-tests/test_components.txt @@ -1,6 +1,7 @@ accesstest SystemLayerTests ASN1Tests +BDXTests MinimalMdnsCoreTests ChipCryptoTests MinimalMdnsRecordsTests diff --git a/src/test_driver/openiotsdk/unit-tests/test_components_nl.txt b/src/test_driver/openiotsdk/unit-tests/test_components_nl.txt index d9801e9f9cd305..2d1633c33228e7 100644 --- a/src/test_driver/openiotsdk/unit-tests/test_components_nl.txt +++ b/src/test_driver/openiotsdk/unit-tests/test_components_nl.txt @@ -1,5 +1,4 @@ AppTests -BDXTests DataModelTests InetLayerTests MessagingLayerTests @@ -9,4 +8,4 @@ SecureChannelTests SetupPayloadTestsNL SupportTestsNL TransportLayerTests -UserDirectedCommissioningTests +UserDirectedCommissioningTests \ No newline at end of file