more tests
This commit is contained in:
parent
c527391b10
commit
36e524abe3
@ -11,7 +11,8 @@
|
|||||||
* @brief This helper class will be used to serialize and deserialize update housekeeping packets
|
* @brief This helper class will be used to serialize and deserialize update housekeeping packets
|
||||||
* into the store.
|
* into the store.
|
||||||
*/
|
*/
|
||||||
class HousekeepingSnapshot: public SerializeIF {
|
class HousekeepingSnapshot:
|
||||||
|
public SerializeIF {
|
||||||
public:
|
public:
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -36,6 +37,17 @@ public:
|
|||||||
timeStamp(timeStamp), timeStampSize(timeStampSize),
|
timeStamp(timeStamp), timeStampSize(timeStampSize),
|
||||||
updateData(dataSetPtr) {};
|
updateData(dataSetPtr) {};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Update packet constructor for pool variables.
|
||||||
|
* @param timeStamp
|
||||||
|
* @param timeStampSize
|
||||||
|
* @param dataSetPtr
|
||||||
|
*/
|
||||||
|
HousekeepingSnapshot(CCSDSTime::CDS_short* cdsShort, LocalPoolObjectBase* dataSetPtr):
|
||||||
|
timeStamp(reinterpret_cast<uint8_t*>(cdsShort)),
|
||||||
|
timeStampSize(sizeof(CCSDSTime::CDS_short)), updateData(dataSetPtr) {};
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Update packet constructor for pool variables.
|
* Update packet constructor for pool variables.
|
||||||
* @param timeStamp
|
* @param timeStamp
|
||||||
@ -47,8 +59,8 @@ public:
|
|||||||
timeStamp(timeStamp), timeStampSize(timeStampSize),
|
timeStamp(timeStamp), timeStampSize(timeStampSize),
|
||||||
updateData(dataSetPtr) {};
|
updateData(dataSetPtr) {};
|
||||||
|
|
||||||
virtual ReturnValue_t serialize(uint8_t **buffer, size_t *size,
|
virtual ReturnValue_t serialize(uint8_t **buffer, size_t *size, size_t maxSize,
|
||||||
size_t maxSize, Endianness streamEndianness) const {
|
Endianness streamEndianness) const {
|
||||||
if(timeStamp != nullptr) {
|
if(timeStamp != nullptr) {
|
||||||
/* Endianness will always be MACHINE, so we can simply use memcpy
|
/* Endianness will always be MACHINE, so we can simply use memcpy
|
||||||
here. */
|
here. */
|
||||||
|
@ -20,7 +20,7 @@ TEST_CASE("LocalPoolManagerTest" , "[LocManTest]") {
|
|||||||
REQUIRE(poolOwner->initializeHkManager() == retval::CATCH_OK);
|
REQUIRE(poolOwner->initializeHkManager() == retval::CATCH_OK);
|
||||||
REQUIRE(poolOwner->initializeHkManagerAfterTaskCreation()
|
REQUIRE(poolOwner->initializeHkManagerAfterTaskCreation()
|
||||||
== retval::CATCH_OK);
|
== retval::CATCH_OK);
|
||||||
//REQUIRE(poolOwner->dataset.assignPointers() == retval::CATCH_OK);
|
|
||||||
MessageQueueMockBase* mqMock = poolOwner->getMockQueueHandle();
|
MessageQueueMockBase* mqMock = poolOwner->getMockQueueHandle();
|
||||||
REQUIRE(mqMock != nullptr);
|
REQUIRE(mqMock != nullptr);
|
||||||
CommandMessage messageSent;
|
CommandMessage messageSent;
|
||||||
@ -154,7 +154,21 @@ TEST_CASE("LocalPoolManagerTest" , "[LocManTest]") {
|
|||||||
auto poolVar = dynamic_cast<lp_var_t<uint8_t>*>(
|
auto poolVar = dynamic_cast<lp_var_t<uint8_t>*>(
|
||||||
poolOwner->getPoolObjectHandle(lpool::uint8VarId));
|
poolOwner->getPoolObjectHandle(lpool::uint8VarId));
|
||||||
REQUIRE(poolVar != nullptr);
|
REQUIRE(poolVar != nullptr);
|
||||||
|
|
||||||
|
{
|
||||||
|
PoolReadGuard rg(poolVar);
|
||||||
|
CHECK(rg.getReadResult() == retval::CATCH_OK);
|
||||||
|
poolVar->value = 25;
|
||||||
|
}
|
||||||
|
|
||||||
poolVar->setChanged(true);
|
poolVar->setChanged(true);
|
||||||
|
|
||||||
|
/* Store current time, we are going to check the (approximate) time equality later */
|
||||||
|
CCSDSTime::CDS_short timeCdsNow;
|
||||||
|
timeval now;
|
||||||
|
Clock::getClock_timeval(&now);
|
||||||
|
CCSDSTime::convertToCcsds(&timeCdsNow, &now);
|
||||||
|
|
||||||
REQUIRE(poolOwner->poolManager.performHkOperation() == retval::CATCH_OK);
|
REQUIRE(poolOwner->poolManager.performHkOperation() == retval::CATCH_OK);
|
||||||
|
|
||||||
/* Check update snapshot was sent. */
|
/* Check update snapshot was sent. */
|
||||||
@ -166,6 +180,30 @@ TEST_CASE("LocalPoolManagerTest" , "[LocManTest]") {
|
|||||||
REQUIRE(mqMock->receiveMessage(&messageSent) == retval::CATCH_OK);
|
REQUIRE(mqMock->receiveMessage(&messageSent) == retval::CATCH_OK);
|
||||||
CHECK(messageSent.getCommand() == static_cast<int>(
|
CHECK(messageSent.getCommand() == static_cast<int>(
|
||||||
HousekeepingMessage::UPDATE_SNAPSHOT_VARIABLE));
|
HousekeepingMessage::UPDATE_SNAPSHOT_VARIABLE));
|
||||||
|
/* Now we deserialize the snapshot into a new dataset instance */
|
||||||
|
CCSDSTime::CDS_short cdsShort;
|
||||||
|
lp_var_t<uint8_t> varCopy = lp_var_t<uint8_t>(lpool::uint8VarGpid);
|
||||||
|
HousekeepingSnapshot snapshot(&cdsShort, &varCopy);
|
||||||
|
store_address_t storeId;
|
||||||
|
HousekeepingMessage::getUpdateSnapshotVariableCommand(&messageSent, &storeId);
|
||||||
|
ConstAccessorPair accessorPair = tglob::getIpcStoreHandle()->getData(storeId);
|
||||||
|
REQUIRE(accessorPair.first == retval::CATCH_OK);
|
||||||
|
const uint8_t* readOnlyPtr = accessorPair.second.data();
|
||||||
|
size_t sizeToDeserialize = accessorPair.second.size();
|
||||||
|
CHECK(varCopy.value == 0);
|
||||||
|
/* Fill the dataset and timestamp */
|
||||||
|
REQUIRE(snapshot.deSerialize(&readOnlyPtr, &sizeToDeserialize,
|
||||||
|
SerializeIF::Endianness::MACHINE) == retval::CATCH_OK);
|
||||||
|
CHECK(varCopy.value == 25);
|
||||||
|
|
||||||
|
/* Now we check that both times are equal */
|
||||||
|
CHECK(cdsShort.pField == timeCdsNow.pField);
|
||||||
|
CHECK(cdsShort.dayLSB == Catch::Approx(timeCdsNow.dayLSB).margin(1));
|
||||||
|
CHECK(cdsShort.dayMSB == Catch::Approx(timeCdsNow.dayMSB).margin(1));
|
||||||
|
CHECK(cdsShort.msDay_h == Catch::Approx(timeCdsNow.msDay_h).margin(1));
|
||||||
|
CHECK(cdsShort.msDay_hh == Catch::Approx(timeCdsNow.msDay_hh).margin(1));
|
||||||
|
CHECK(cdsShort.msDay_l == Catch::Approx(timeCdsNow.msDay_l).margin(1));
|
||||||
|
CHECK(cdsShort.msDay_ll == Catch::Approx(timeCdsNow.msDay_ll).margin(1));
|
||||||
}
|
}
|
||||||
|
|
||||||
SECTION("VariableUpdateTest") {
|
SECTION("VariableUpdateTest") {
|
||||||
|
Loading…
Reference in New Issue
Block a user