From 3167988951c2cb333b813d3e982a1feb75323a9f Mon Sep 17 00:00:00 2001 From: Robin Mueller Date: Thu, 3 Aug 2023 13:03:58 +0200 Subject: [PATCH] continue source handler --- src/fsfw/cfdp/handler/SourceHandler.cpp | 2 ++ unittests/action/TestActionHelper.cpp | 6 +++--- unittests/cfdp/handler/testSourceHandler.cpp | 14 ++++++++++++++ unittests/datapoollocal/testLocalPoolManager.cpp | 6 +++--- unittests/mocks/AcceptsTmMock.h | 4 ++-- unittests/mocks/MessageQueueMock.cpp | 2 +- unittests/mocks/MessageQueueMock.h | 2 +- unittests/mocks/StorageManagerMock.h | 1 + unittests/tmtcservices/testSendHelper.cpp | 2 +- unittests/tmtcservices/testStoreAndSendHelper.cpp | 2 +- 10 files changed, 29 insertions(+), 12 deletions(-) diff --git a/src/fsfw/cfdp/handler/SourceHandler.cpp b/src/fsfw/cfdp/handler/SourceHandler.cpp index e46edf6c..bbfc6475 100644 --- a/src/fsfw/cfdp/handler/SourceHandler.cpp +++ b/src/fsfw/cfdp/handler/SourceHandler.cpp @@ -40,6 +40,7 @@ cfdp::SourceHandler::SourceHandler(SourceHandlerParams params, FsfwParams fsfwPa cfdp::SourceHandler::FsmResult& cfdp::SourceHandler::fsmNacked() { ReturnValue_t result; if (step == TransactionStep::IDLE) { + fsmResult.packetsSent = 0; step = TransactionStep::TRANSACTION_START; } if (step == TransactionStep::TRANSACTION_START) { @@ -203,6 +204,7 @@ ReturnValue_t cfdp::SourceHandler::prepareAndSendMetadataPdu() { if (result != OK) { return result; } + fsmResult.packetsSent += 1; // Advance FSM if everything works step = TransactionStep::SENDING_FILE_DATA; return OK; diff --git a/unittests/action/TestActionHelper.cpp b/unittests/action/TestActionHelper.cpp index de021bb8..3b22dcee 100644 --- a/unittests/action/TestActionHelper.cpp +++ b/unittests/action/TestActionHelper.cpp @@ -57,7 +57,7 @@ TEST_CASE("Action Helper", "[action]") { step += 1; CHECK(testMqMock.wasMessageSent()); CommandMessage testMessage; - REQUIRE(testMqMock.getNextSentMessage(testMessage) == returnvalue::OK); + REQUIRE(testMqMock.getNextSentMessageToDefaultDest(testMessage) == returnvalue::OK); REQUIRE(testMessage.getCommand() == static_cast(ActionMessage::STEP_FAILED)); REQUIRE(testMessage.getParameter() == static_cast(testActionId)); uint32_t parameter2 = ((uint32_t)step << 16) | (uint32_t)status; @@ -71,7 +71,7 @@ TEST_CASE("Action Helper", "[action]") { actionHelper.finish(false, testMqMock.getId(), testActionId, status); CHECK(testMqMock.wasMessageSent()); CommandMessage testMessage; - REQUIRE(testMqMock.getNextSentMessage(testMessage) == returnvalue::OK); + REQUIRE(testMqMock.getNextSentMessageToDefaultDest(testMessage) == returnvalue::OK); REQUIRE(testMessage.getCommand() == static_cast(ActionMessage::COMPLETION_FAILED)); REQUIRE(ActionMessage::getActionId(&testMessage) == testActionId); REQUIRE(ActionMessage::getReturnCode(&testMessage) == static_cast(status)); @@ -87,7 +87,7 @@ TEST_CASE("Action Helper", "[action]") { REQUIRE(ipcStore->getData(toLongParamAddress).first == static_cast(StorageManagerIF::DATA_DOES_NOT_EXIST)); CommandMessage testMessage; - REQUIRE(testMqMock.getNextSentMessage(testMessage) == returnvalue::OK); + REQUIRE(testMqMock.getNextSentMessageToDefaultDest(testMessage) == returnvalue::OK); REQUIRE(testMessage.getCommand() == static_cast(ActionMessage::STEP_FAILED)); REQUIRE(ActionMessage::getReturnCode(&testMessage) == 0xAFFE); REQUIRE(ActionMessage::getStep(&testMessage) == 0); diff --git a/unittests/cfdp/handler/testSourceHandler.cpp b/unittests/cfdp/handler/testSourceHandler.cpp index 879e5ca2..ab5dbf80 100644 --- a/unittests/cfdp/handler/testSourceHandler.cpp +++ b/unittests/cfdp/handler/testSourceHandler.cpp @@ -2,11 +2,13 @@ #include #include "fsfw/cfdp.h" +#include "fsfw/cfdp/CfdpMessage.h" #include "fsfw/cfdp/handler/PutRequest.h" #include "fsfw/cfdp/handler/SourceHandler.h" #include "fsfw/cfdp/pdu/EofPduCreator.h" #include "fsfw/cfdp/pdu/FileDataCreator.h" #include "fsfw/cfdp/pdu/MetadataPduCreator.h" +#include "fsfw/storagemanager/StorageManagerIF.h" #include "fsfw/util/SeqCountProvider.h" #include "mocks/AcceptsTmMock.h" #include "mocks/EventReportingProxyMock.h" @@ -38,7 +40,10 @@ TEST_CASE("CFDP Source Handler", "[cfdp]") { StorageManagerMock tcStore(2, storeCfg); StorageManagerMock tmStore(3, storeCfg); FsfwParams fp(tmReceiver, &mqMock, &eventReporterMock); + fp.tcStore = &tcStore; + fp.tmStore = &tmStore; auto sourceHandler = SourceHandler(dp, fp); + CHECK(sourceHandler.initialize() == OK); SECTION("Test Basic") { CHECK(sourceHandler.getState() == CfdpState::IDLE); @@ -46,6 +51,7 @@ TEST_CASE("CFDP Source Handler", "[cfdp]") { } SECTION("Transfer empty file") { + // using StorageManagerIF::getData; RemoteEntityCfg cfg; EntityId id(cfdp::WidthInBytes::ONE_BYTE, 5); cfg.remoteId = id; @@ -56,5 +62,13 @@ TEST_CASE("CFDP Source Handler", "[cfdp]") { cfdp::StringLv destNameLv(destFileName.path, std::strlen(destFileName.path)); PutRequest putRequest(id, srcNameLv, destNameLv); CHECK(sourceHandler.transactionStart(putRequest, cfg) == OK); + SourceHandler::FsmResult& fsmResult = sourceHandler.stateMachine(); + CHECK(fsmResult.packetsSent == 1); + CHECK(mqMock.numberOfSentMessages() == 1); + CommandMessage msg; + CHECK(mqMock.getNextSentMessage(destQueueId, msg) == OK); + store_address_t storeId = CfdpMessage::getStoreId(&msg); + auto accessor = tmStore.getData(storeId); + // CHECK(fsmResult.) } } \ No newline at end of file diff --git a/unittests/datapoollocal/testLocalPoolManager.cpp b/unittests/datapoollocal/testLocalPoolManager.cpp index e463a123..1913474e 100644 --- a/unittests/datapoollocal/testLocalPoolManager.cpp +++ b/unittests/datapoollocal/testLocalPoolManager.cpp @@ -82,7 +82,7 @@ TEST_CASE("Local Pool Manager Tests", "[LocManTest]") { REQUIRE(poolOwnerMock.getNextSentMessage(subscriberId, messageSent) == returnvalue::OK); CHECK(messageSent.getCommand() == static_cast(HousekeepingMessage::UPDATE_NOTIFICATION_SET)); - REQUIRE(poolOwnerMock.getNextSentMessage(messageSent) == returnvalue::OK); + REQUIRE(poolOwnerMock.getNextSentMessageToDefaultDest(messageSent) == returnvalue::OK); CHECK(messageSent.getCommand() == static_cast(HousekeepingMessage::HK_REPORT)); /* Clear message to avoid memory leak, our mock won't do it for us (yet) */ CommandMessageCleaner::clearCommandMessage(&messageSent); @@ -259,11 +259,11 @@ TEST_CASE("Local Pool Manager Tests", "[LocManTest]") { CHECK(messageSent.getCommand() == static_cast(HousekeepingMessage::UPDATE_NOTIFICATION_SET)); REQUIRE(poolOwnerMock.clearLastSentMessage(subscriberId) == returnvalue::OK); - REQUIRE(poolOwnerMock.getNextSentMessage(messageSent) == returnvalue::OK); + REQUIRE(poolOwnerMock.getNextSentMessageToDefaultDest(messageSent) == returnvalue::OK); CHECK(messageSent.getCommand() == static_cast(HousekeepingMessage::HK_REPORT)); REQUIRE(poolOwnerMock.clearLastSentMessage() == returnvalue::OK); REQUIRE(poolOwnerMock.getNextSentMessage(subscriberId, messageSent) == MessageQueueIF::EMPTY); - REQUIRE(poolOwnerMock.getNextSentMessage(messageSent) == MessageQueueIF::EMPTY); + REQUIRE(poolOwnerMock.getNextSentMessageToDefaultDest(messageSent) == MessageQueueIF::EMPTY); } SECTION("PeriodicHKAndMessaging") { diff --git a/unittests/mocks/AcceptsTmMock.h b/unittests/mocks/AcceptsTmMock.h index b12e1094..c736c952 100644 --- a/unittests/mocks/AcceptsTmMock.h +++ b/unittests/mocks/AcceptsTmMock.h @@ -9,8 +9,8 @@ class AcceptsTmMock : public SystemObject, public AcceptsTelemetryIF { AcceptsTmMock(object_id_t registeredId, MessageQueueId_t queueToReturn); explicit AcceptsTmMock(MessageQueueId_t queueToReturn); - MessageQueueId_t getReportReceptionQueue(uint8_t virtualChannel) const override; - const char* getName() const override; + [[nodiscard]] MessageQueueId_t getReportReceptionQueue(uint8_t virtualChannel) const override; + [[nodiscard]] const char* getName() const override; MessageQueueId_t returnedQueue; }; diff --git a/unittests/mocks/MessageQueueMock.cpp b/unittests/mocks/MessageQueueMock.cpp index cac5a0d9..96a6ee86 100644 --- a/unittests/mocks/MessageQueueMock.cpp +++ b/unittests/mocks/MessageQueueMock.cpp @@ -124,7 +124,7 @@ ReturnValue_t MessageQueueMock::getNextSentMessage(MessageQueueId_t id, return returnvalue::OK; } -ReturnValue_t MessageQueueMock::getNextSentMessage(MessageQueueMessageIF& message) { +ReturnValue_t MessageQueueMock::getNextSentMessageToDefaultDest(MessageQueueMessageIF& message) { return getNextSentMessage(MessageQueueBase::getDefaultDestination(), message); } diff --git a/unittests/mocks/MessageQueueMock.h b/unittests/mocks/MessageQueueMock.h index 52ba5dfe..cacb72e4 100644 --- a/unittests/mocks/MessageQueueMock.h +++ b/unittests/mocks/MessageQueueMock.h @@ -26,7 +26,7 @@ class MessageQueueMock : public MessageQueueBase { explicit MessageQueueMock(MessageQueueId_t queueId); //! Get next message which was sent to the default destination - ReturnValue_t getNextSentMessage(MessageQueueMessageIF& message); + ReturnValue_t getNextSentMessageToDefaultDest(MessageQueueMessageIF& message); //! Get message which was sent to a specific ID ReturnValue_t getNextSentMessage(MessageQueueId_t id, MessageQueueMessageIF& message); [[nodiscard]] bool wasMessageSent() const; diff --git a/unittests/mocks/StorageManagerMock.h b/unittests/mocks/StorageManagerMock.h index a0a59a47..ce5f3811 100644 --- a/unittests/mocks/StorageManagerMock.h +++ b/unittests/mocks/StorageManagerMock.h @@ -32,6 +32,7 @@ class StorageManagerMock : public LocalPool { std::pair nextFreeElementCallFails; using LocalPool::getFreeElement; + using StorageManagerIF::getData; void reset(); }; diff --git a/unittests/tmtcservices/testSendHelper.cpp b/unittests/tmtcservices/testSendHelper.cpp index 43816835..07315e44 100644 --- a/unittests/tmtcservices/testSendHelper.cpp +++ b/unittests/tmtcservices/testSendHelper.cpp @@ -71,7 +71,7 @@ TEST_CASE("TM Send Helper", "[tm-send-helper]") { REQUIRE(msgQueue.wasMessageSent()); REQUIRE(msgQueue.numberOfSentMessagesToDefault() == 1); TmTcMessage msg; - REQUIRE(msgQueue.getNextSentMessage(msg) == returnvalue::OK); + REQUIRE(msgQueue.getNextSentMessageToDefaultDest(msg) == returnvalue::OK); REQUIRE(msg.getStorageId() == storeId); REQUIRE(pool.hasDataAtId(msg.getStorageId())); } diff --git a/unittests/tmtcservices/testStoreAndSendHelper.cpp b/unittests/tmtcservices/testStoreAndSendHelper.cpp index 46418dfe..6fe9f8e2 100644 --- a/unittests/tmtcservices/testStoreAndSendHelper.cpp +++ b/unittests/tmtcservices/testStoreAndSendHelper.cpp @@ -52,7 +52,7 @@ TEST_CASE("TM Store And Send Helper", "[tm-store-send-helper]") { REQUIRE(msgQueue.wasMessageSent()); REQUIRE(msgQueue.numberOfSentMessagesToDefault() == 1); TmTcMessage msg; - REQUIRE(msgQueue.getNextSentMessage(msg) == returnvalue::OK); + REQUIRE(msgQueue.getNextSentMessageToDefaultDest(msg) == returnvalue::OK); REQUIRE(msg.getStorageId() == storeId); REQUIRE(pool.hasDataAtId(msg.getStorageId())); storeHelper.deletePacket();