continue source handler
This commit is contained in:
parent
a856f91c67
commit
3167988951
@ -40,6 +40,7 @@ cfdp::SourceHandler::SourceHandler(SourceHandlerParams params, FsfwParams fsfwPa
|
|||||||
cfdp::SourceHandler::FsmResult& cfdp::SourceHandler::fsmNacked() {
|
cfdp::SourceHandler::FsmResult& cfdp::SourceHandler::fsmNacked() {
|
||||||
ReturnValue_t result;
|
ReturnValue_t result;
|
||||||
if (step == TransactionStep::IDLE) {
|
if (step == TransactionStep::IDLE) {
|
||||||
|
fsmResult.packetsSent = 0;
|
||||||
step = TransactionStep::TRANSACTION_START;
|
step = TransactionStep::TRANSACTION_START;
|
||||||
}
|
}
|
||||||
if (step == TransactionStep::TRANSACTION_START) {
|
if (step == TransactionStep::TRANSACTION_START) {
|
||||||
@ -203,6 +204,7 @@ ReturnValue_t cfdp::SourceHandler::prepareAndSendMetadataPdu() {
|
|||||||
if (result != OK) {
|
if (result != OK) {
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
fsmResult.packetsSent += 1;
|
||||||
// Advance FSM if everything works
|
// Advance FSM if everything works
|
||||||
step = TransactionStep::SENDING_FILE_DATA;
|
step = TransactionStep::SENDING_FILE_DATA;
|
||||||
return OK;
|
return OK;
|
||||||
|
@ -57,7 +57,7 @@ TEST_CASE("Action Helper", "[action]") {
|
|||||||
step += 1;
|
step += 1;
|
||||||
CHECK(testMqMock.wasMessageSent());
|
CHECK(testMqMock.wasMessageSent());
|
||||||
CommandMessage testMessage;
|
CommandMessage testMessage;
|
||||||
REQUIRE(testMqMock.getNextSentMessage(testMessage) == returnvalue::OK);
|
REQUIRE(testMqMock.getNextSentMessageToDefaultDest(testMessage) == returnvalue::OK);
|
||||||
REQUIRE(testMessage.getCommand() == static_cast<uint32_t>(ActionMessage::STEP_FAILED));
|
REQUIRE(testMessage.getCommand() == static_cast<uint32_t>(ActionMessage::STEP_FAILED));
|
||||||
REQUIRE(testMessage.getParameter() == static_cast<uint32_t>(testActionId));
|
REQUIRE(testMessage.getParameter() == static_cast<uint32_t>(testActionId));
|
||||||
uint32_t parameter2 = ((uint32_t)step << 16) | (uint32_t)status;
|
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);
|
actionHelper.finish(false, testMqMock.getId(), testActionId, status);
|
||||||
CHECK(testMqMock.wasMessageSent());
|
CHECK(testMqMock.wasMessageSent());
|
||||||
CommandMessage testMessage;
|
CommandMessage testMessage;
|
||||||
REQUIRE(testMqMock.getNextSentMessage(testMessage) == returnvalue::OK);
|
REQUIRE(testMqMock.getNextSentMessageToDefaultDest(testMessage) == returnvalue::OK);
|
||||||
REQUIRE(testMessage.getCommand() == static_cast<uint32_t>(ActionMessage::COMPLETION_FAILED));
|
REQUIRE(testMessage.getCommand() == static_cast<uint32_t>(ActionMessage::COMPLETION_FAILED));
|
||||||
REQUIRE(ActionMessage::getActionId(&testMessage) == testActionId);
|
REQUIRE(ActionMessage::getActionId(&testMessage) == testActionId);
|
||||||
REQUIRE(ActionMessage::getReturnCode(&testMessage) == static_cast<uint32_t>(status));
|
REQUIRE(ActionMessage::getReturnCode(&testMessage) == static_cast<uint32_t>(status));
|
||||||
@ -87,7 +87,7 @@ TEST_CASE("Action Helper", "[action]") {
|
|||||||
REQUIRE(ipcStore->getData(toLongParamAddress).first ==
|
REQUIRE(ipcStore->getData(toLongParamAddress).first ==
|
||||||
static_cast<uint32_t>(StorageManagerIF::DATA_DOES_NOT_EXIST));
|
static_cast<uint32_t>(StorageManagerIF::DATA_DOES_NOT_EXIST));
|
||||||
CommandMessage testMessage;
|
CommandMessage testMessage;
|
||||||
REQUIRE(testMqMock.getNextSentMessage(testMessage) == returnvalue::OK);
|
REQUIRE(testMqMock.getNextSentMessageToDefaultDest(testMessage) == returnvalue::OK);
|
||||||
REQUIRE(testMessage.getCommand() == static_cast<uint32_t>(ActionMessage::STEP_FAILED));
|
REQUIRE(testMessage.getCommand() == static_cast<uint32_t>(ActionMessage::STEP_FAILED));
|
||||||
REQUIRE(ActionMessage::getReturnCode(&testMessage) == 0xAFFE);
|
REQUIRE(ActionMessage::getReturnCode(&testMessage) == 0xAFFE);
|
||||||
REQUIRE(ActionMessage::getStep(&testMessage) == 0);
|
REQUIRE(ActionMessage::getStep(&testMessage) == 0);
|
||||||
|
@ -2,11 +2,13 @@
|
|||||||
#include <filesystem>
|
#include <filesystem>
|
||||||
|
|
||||||
#include "fsfw/cfdp.h"
|
#include "fsfw/cfdp.h"
|
||||||
|
#include "fsfw/cfdp/CfdpMessage.h"
|
||||||
#include "fsfw/cfdp/handler/PutRequest.h"
|
#include "fsfw/cfdp/handler/PutRequest.h"
|
||||||
#include "fsfw/cfdp/handler/SourceHandler.h"
|
#include "fsfw/cfdp/handler/SourceHandler.h"
|
||||||
#include "fsfw/cfdp/pdu/EofPduCreator.h"
|
#include "fsfw/cfdp/pdu/EofPduCreator.h"
|
||||||
#include "fsfw/cfdp/pdu/FileDataCreator.h"
|
#include "fsfw/cfdp/pdu/FileDataCreator.h"
|
||||||
#include "fsfw/cfdp/pdu/MetadataPduCreator.h"
|
#include "fsfw/cfdp/pdu/MetadataPduCreator.h"
|
||||||
|
#include "fsfw/storagemanager/StorageManagerIF.h"
|
||||||
#include "fsfw/util/SeqCountProvider.h"
|
#include "fsfw/util/SeqCountProvider.h"
|
||||||
#include "mocks/AcceptsTmMock.h"
|
#include "mocks/AcceptsTmMock.h"
|
||||||
#include "mocks/EventReportingProxyMock.h"
|
#include "mocks/EventReportingProxyMock.h"
|
||||||
@ -38,7 +40,10 @@ TEST_CASE("CFDP Source Handler", "[cfdp]") {
|
|||||||
StorageManagerMock tcStore(2, storeCfg);
|
StorageManagerMock tcStore(2, storeCfg);
|
||||||
StorageManagerMock tmStore(3, storeCfg);
|
StorageManagerMock tmStore(3, storeCfg);
|
||||||
FsfwParams fp(tmReceiver, &mqMock, &eventReporterMock);
|
FsfwParams fp(tmReceiver, &mqMock, &eventReporterMock);
|
||||||
|
fp.tcStore = &tcStore;
|
||||||
|
fp.tmStore = &tmStore;
|
||||||
auto sourceHandler = SourceHandler(dp, fp);
|
auto sourceHandler = SourceHandler(dp, fp);
|
||||||
|
CHECK(sourceHandler.initialize() == OK);
|
||||||
|
|
||||||
SECTION("Test Basic") {
|
SECTION("Test Basic") {
|
||||||
CHECK(sourceHandler.getState() == CfdpState::IDLE);
|
CHECK(sourceHandler.getState() == CfdpState::IDLE);
|
||||||
@ -46,6 +51,7 @@ TEST_CASE("CFDP Source Handler", "[cfdp]") {
|
|||||||
}
|
}
|
||||||
|
|
||||||
SECTION("Transfer empty file") {
|
SECTION("Transfer empty file") {
|
||||||
|
// using StorageManagerIF::getData;
|
||||||
RemoteEntityCfg cfg;
|
RemoteEntityCfg cfg;
|
||||||
EntityId id(cfdp::WidthInBytes::ONE_BYTE, 5);
|
EntityId id(cfdp::WidthInBytes::ONE_BYTE, 5);
|
||||||
cfg.remoteId = id;
|
cfg.remoteId = id;
|
||||||
@ -56,5 +62,13 @@ TEST_CASE("CFDP Source Handler", "[cfdp]") {
|
|||||||
cfdp::StringLv destNameLv(destFileName.path, std::strlen(destFileName.path));
|
cfdp::StringLv destNameLv(destFileName.path, std::strlen(destFileName.path));
|
||||||
PutRequest putRequest(id, srcNameLv, destNameLv);
|
PutRequest putRequest(id, srcNameLv, destNameLv);
|
||||||
CHECK(sourceHandler.transactionStart(putRequest, cfg) == OK);
|
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.)
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -82,7 +82,7 @@ TEST_CASE("Local Pool Manager Tests", "[LocManTest]") {
|
|||||||
REQUIRE(poolOwnerMock.getNextSentMessage(subscriberId, messageSent) == returnvalue::OK);
|
REQUIRE(poolOwnerMock.getNextSentMessage(subscriberId, messageSent) == returnvalue::OK);
|
||||||
CHECK(messageSent.getCommand() ==
|
CHECK(messageSent.getCommand() ==
|
||||||
static_cast<int>(HousekeepingMessage::UPDATE_NOTIFICATION_SET));
|
static_cast<int>(HousekeepingMessage::UPDATE_NOTIFICATION_SET));
|
||||||
REQUIRE(poolOwnerMock.getNextSentMessage(messageSent) == returnvalue::OK);
|
REQUIRE(poolOwnerMock.getNextSentMessageToDefaultDest(messageSent) == returnvalue::OK);
|
||||||
CHECK(messageSent.getCommand() == static_cast<int>(HousekeepingMessage::HK_REPORT));
|
CHECK(messageSent.getCommand() == static_cast<int>(HousekeepingMessage::HK_REPORT));
|
||||||
/* Clear message to avoid memory leak, our mock won't do it for us (yet) */
|
/* Clear message to avoid memory leak, our mock won't do it for us (yet) */
|
||||||
CommandMessageCleaner::clearCommandMessage(&messageSent);
|
CommandMessageCleaner::clearCommandMessage(&messageSent);
|
||||||
@ -259,11 +259,11 @@ TEST_CASE("Local Pool Manager Tests", "[LocManTest]") {
|
|||||||
CHECK(messageSent.getCommand() ==
|
CHECK(messageSent.getCommand() ==
|
||||||
static_cast<int>(HousekeepingMessage::UPDATE_NOTIFICATION_SET));
|
static_cast<int>(HousekeepingMessage::UPDATE_NOTIFICATION_SET));
|
||||||
REQUIRE(poolOwnerMock.clearLastSentMessage(subscriberId) == returnvalue::OK);
|
REQUIRE(poolOwnerMock.clearLastSentMessage(subscriberId) == returnvalue::OK);
|
||||||
REQUIRE(poolOwnerMock.getNextSentMessage(messageSent) == returnvalue::OK);
|
REQUIRE(poolOwnerMock.getNextSentMessageToDefaultDest(messageSent) == returnvalue::OK);
|
||||||
CHECK(messageSent.getCommand() == static_cast<int>(HousekeepingMessage::HK_REPORT));
|
CHECK(messageSent.getCommand() == static_cast<int>(HousekeepingMessage::HK_REPORT));
|
||||||
REQUIRE(poolOwnerMock.clearLastSentMessage() == returnvalue::OK);
|
REQUIRE(poolOwnerMock.clearLastSentMessage() == returnvalue::OK);
|
||||||
REQUIRE(poolOwnerMock.getNextSentMessage(subscriberId, messageSent) == MessageQueueIF::EMPTY);
|
REQUIRE(poolOwnerMock.getNextSentMessage(subscriberId, messageSent) == MessageQueueIF::EMPTY);
|
||||||
REQUIRE(poolOwnerMock.getNextSentMessage(messageSent) == MessageQueueIF::EMPTY);
|
REQUIRE(poolOwnerMock.getNextSentMessageToDefaultDest(messageSent) == MessageQueueIF::EMPTY);
|
||||||
}
|
}
|
||||||
|
|
||||||
SECTION("PeriodicHKAndMessaging") {
|
SECTION("PeriodicHKAndMessaging") {
|
||||||
|
@ -9,8 +9,8 @@ class AcceptsTmMock : public SystemObject, public AcceptsTelemetryIF {
|
|||||||
AcceptsTmMock(object_id_t registeredId, MessageQueueId_t queueToReturn);
|
AcceptsTmMock(object_id_t registeredId, MessageQueueId_t queueToReturn);
|
||||||
explicit AcceptsTmMock(MessageQueueId_t queueToReturn);
|
explicit AcceptsTmMock(MessageQueueId_t queueToReturn);
|
||||||
|
|
||||||
MessageQueueId_t getReportReceptionQueue(uint8_t virtualChannel) const override;
|
[[nodiscard]] MessageQueueId_t getReportReceptionQueue(uint8_t virtualChannel) const override;
|
||||||
const char* getName() const override;
|
[[nodiscard]] const char* getName() const override;
|
||||||
|
|
||||||
MessageQueueId_t returnedQueue;
|
MessageQueueId_t returnedQueue;
|
||||||
};
|
};
|
||||||
|
@ -124,7 +124,7 @@ ReturnValue_t MessageQueueMock::getNextSentMessage(MessageQueueId_t id,
|
|||||||
return returnvalue::OK;
|
return returnvalue::OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
ReturnValue_t MessageQueueMock::getNextSentMessage(MessageQueueMessageIF& message) {
|
ReturnValue_t MessageQueueMock::getNextSentMessageToDefaultDest(MessageQueueMessageIF& message) {
|
||||||
return getNextSentMessage(MessageQueueBase::getDefaultDestination(), message);
|
return getNextSentMessage(MessageQueueBase::getDefaultDestination(), message);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -26,7 +26,7 @@ class MessageQueueMock : public MessageQueueBase {
|
|||||||
explicit MessageQueueMock(MessageQueueId_t queueId);
|
explicit MessageQueueMock(MessageQueueId_t queueId);
|
||||||
|
|
||||||
//! Get next message which was sent to the default destination
|
//! 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
|
//! Get message which was sent to a specific ID
|
||||||
ReturnValue_t getNextSentMessage(MessageQueueId_t id, MessageQueueMessageIF& message);
|
ReturnValue_t getNextSentMessage(MessageQueueId_t id, MessageQueueMessageIF& message);
|
||||||
[[nodiscard]] bool wasMessageSent() const;
|
[[nodiscard]] bool wasMessageSent() const;
|
||||||
|
@ -32,6 +32,7 @@ class StorageManagerMock : public LocalPool {
|
|||||||
std::pair<bool, ReturnValue_t> nextFreeElementCallFails;
|
std::pair<bool, ReturnValue_t> nextFreeElementCallFails;
|
||||||
|
|
||||||
using LocalPool::getFreeElement;
|
using LocalPool::getFreeElement;
|
||||||
|
using StorageManagerIF::getData;
|
||||||
|
|
||||||
void reset();
|
void reset();
|
||||||
};
|
};
|
||||||
|
@ -71,7 +71,7 @@ TEST_CASE("TM Send Helper", "[tm-send-helper]") {
|
|||||||
REQUIRE(msgQueue.wasMessageSent());
|
REQUIRE(msgQueue.wasMessageSent());
|
||||||
REQUIRE(msgQueue.numberOfSentMessagesToDefault() == 1);
|
REQUIRE(msgQueue.numberOfSentMessagesToDefault() == 1);
|
||||||
TmTcMessage msg;
|
TmTcMessage msg;
|
||||||
REQUIRE(msgQueue.getNextSentMessage(msg) == returnvalue::OK);
|
REQUIRE(msgQueue.getNextSentMessageToDefaultDest(msg) == returnvalue::OK);
|
||||||
REQUIRE(msg.getStorageId() == storeId);
|
REQUIRE(msg.getStorageId() == storeId);
|
||||||
REQUIRE(pool.hasDataAtId(msg.getStorageId()));
|
REQUIRE(pool.hasDataAtId(msg.getStorageId()));
|
||||||
}
|
}
|
||||||
|
@ -52,7 +52,7 @@ TEST_CASE("TM Store And Send Helper", "[tm-store-send-helper]") {
|
|||||||
REQUIRE(msgQueue.wasMessageSent());
|
REQUIRE(msgQueue.wasMessageSent());
|
||||||
REQUIRE(msgQueue.numberOfSentMessagesToDefault() == 1);
|
REQUIRE(msgQueue.numberOfSentMessagesToDefault() == 1);
|
||||||
TmTcMessage msg;
|
TmTcMessage msg;
|
||||||
REQUIRE(msgQueue.getNextSentMessage(msg) == returnvalue::OK);
|
REQUIRE(msgQueue.getNextSentMessageToDefaultDest(msg) == returnvalue::OK);
|
||||||
REQUIRE(msg.getStorageId() == storeId);
|
REQUIRE(msg.getStorageId() == storeId);
|
||||||
REQUIRE(pool.hasDataAtId(msg.getStorageId()));
|
REQUIRE(pool.hasDataAtId(msg.getStorageId()));
|
||||||
storeHelper.deletePacket();
|
storeHelper.deletePacket();
|
||||||
|
Loading…
Reference in New Issue
Block a user