From 5679b139addd617579b90b724433cae4906acfdf Mon Sep 17 00:00:00 2001 From: Robin Mueller Date: Wed, 26 Jul 2023 18:20:32 +0200 Subject: [PATCH] reserved message unittest working --- src/fsfw/cfdp/VarLenFields.cpp | 1 + src/fsfw/cfdp/handler/PutRequest.cpp | 11 ++++++++++- src/fsfw/cfdp/handler/PutRequest.h | 2 ++ unittests/cfdp/handler/testPutRequest.cpp | 22 ++++++++++++++++++++-- 4 files changed, 33 insertions(+), 3 deletions(-) diff --git a/src/fsfw/cfdp/VarLenFields.cpp b/src/fsfw/cfdp/VarLenFields.cpp index d5f4747a..ee3ee76f 100644 --- a/src/fsfw/cfdp/VarLenFields.cpp +++ b/src/fsfw/cfdp/VarLenFields.cpp @@ -117,6 +117,7 @@ ReturnValue_t cfdp::VarLenField::deSerialize(const uint8_t **buffer, size_t *siz switch (width) { case (cfdp::WidthInBytes::ONE_BYTE): { value.oneByte = **buffer; + *buffer += 1; *size += 1; return returnvalue::OK; } diff --git a/src/fsfw/cfdp/handler/PutRequest.cpp b/src/fsfw/cfdp/handler/PutRequest.cpp index e828f5e0..e0cafba1 100644 --- a/src/fsfw/cfdp/handler/PutRequest.cpp +++ b/src/fsfw/cfdp/handler/PutRequest.cpp @@ -106,6 +106,10 @@ ReturnValue_t cfdp::PutRequest::deSerialize(const uint8_t **buffer, size_t *size if (result != OK) { return result; } + result = SerializeAdapter::deSerialize(&hasTransmissionMode, buffer, size, streamEndianness); + if (result != OK) { + return result; + } result = SerializeAdapter::deSerialize(&transmissionMode, buffer, size, streamEndianness); if (result != OK) { return result; @@ -141,7 +145,7 @@ size_t cfdp::PutRequest::getSerializedSize() const { // Entity ID LV (1 leading size byte) and the metadata only flag. size_t baseSize = 1 + destId.getSerializedSize() + 1; if (!metadataOnly) { - baseSize += sourceName.getSerializedSize() + destName.getSerializedSize() + 2; + baseSize += sourceName.getSerializedSize() + destName.getSerializedSize() + 4; } baseSize += sizeof(msgsToUsersTotalSize) + msgsToUsersTotalSize + sizeof(fsRequestsTotalSize) + fsRequestsTotalSize; @@ -175,3 +179,8 @@ void cfdp::PutRequest::setClosureRequest(bool closureRequested_) { this->closureRequested = closureRequested_; hasClosureRequested = true; } + +const uint8_t *cfdp::PutRequest::getMessagesToUser(size_t &totalSize) { + totalSize = this->msgsToUsersTotalSize; + return msgsToUserStartPtr; +} diff --git a/src/fsfw/cfdp/handler/PutRequest.h b/src/fsfw/cfdp/handler/PutRequest.h index 76e4bbf2..9b7edc0a 100644 --- a/src/fsfw/cfdp/handler/PutRequest.h +++ b/src/fsfw/cfdp/handler/PutRequest.h @@ -49,6 +49,8 @@ class PutRequest : public SerializeIF { void setClosureRequest(bool closureRequested); void clearClosureRequest(); + const uint8_t* getMessagesToUser(size_t& msgSize); + [[nodiscard]] bool isMetadataOnly() const; [[nodiscard]] const EntityId& getDestId() const; diff --git a/unittests/cfdp/handler/testPutRequest.cpp b/unittests/cfdp/handler/testPutRequest.cpp index 9c0c0f1f..e49ec1dd 100644 --- a/unittests/cfdp/handler/testPutRequest.cpp +++ b/unittests/cfdp/handler/testPutRequest.cpp @@ -26,15 +26,33 @@ TEST_CASE("Put Request", "[cfdp]") { ReservedMessageCreator creator(static_cast(ProxyOpMessageType::PUT_REQUEST), reservedMsgCustomData.data(), msgSize); msgSize = 0; - ReturnValue_t result = creator.serializeBe(buffer.data(), msgSize, buffer.size()); + ReturnValue_t result = creator.serializeBe(reservedMsgBuf.data(), msgSize, buffer.size()); CHECK(result == returnvalue::OK); SECTION("Put Request with reserved message") { - PutRequest putRequest(destId, reservedMsgCustomData.data(), msgSize, nullptr, 0); + PutRequest putRequest(destId, reservedMsgBuf.data(), msgSize, nullptr, 0); uint8_t* bufPtr = buffer.data(); size_t serLen = 0; REQUIRE(putRequest.serialize(&bufPtr, &serLen, buffer.size(), SerializeIF::Endianness::NETWORK) == OK); + CHECK(putRequest.getSerializedSize() == serLen); + PutRequest requestDeserialized; + size_t deserLen = putRequest.getSerializedSize(); + const uint8_t* deserPtr = buffer.data(); + REQUIRE(requestDeserialized.deSerialize(&deserPtr, &deserLen, SerializeIF::Endianness::NETWORK) == OK); + CHECK(requestDeserialized.getDestId().getWidth() == destId.getWidth()); + CHECK(requestDeserialized.getDestId().getValue() == destId.getValue()); + size_t totalMsgsSize = 0; + const uint8_t* msgsToUserStart = requestDeserialized.getMessagesToUser(totalMsgsSize); + CHECK(totalMsgsSize == msgSize); + cfdp::Tlv genericTlv; + genericTlv.deSerialize(&msgsToUserStart, &totalMsgsSize, SerializeIF::Endianness::NETWORK); + CHECK(genericTlv.getType() == TlvType::MSG_TO_USER); + CHECK(genericTlv.getLengthField() == genericTlv.getSerializedSize() - 2); + CHECK(genericTlv.getValue()[0] == 'c'); + CHECK(genericTlv.getValue()[1] == 'f'); + CHECK(genericTlv.getValue()[2] == 'd'); + CHECK(genericTlv.getValue()[3] == 'p'); } }