Index: unittests/tst_messaging.cpp =================================================================== diff -u -ra6abc05918a15924460d2b9358365b3eeedf1d1c -rf6c480d06e4b8c770012115d20df2a44e0da8031 --- unittests/tst_messaging.cpp (.../tst_messaging.cpp) (revision a6abc05918a15924460d2b9358365b3eeedf1d1c) +++ unittests/tst_messaging.cpp (.../tst_messaging.cpp) (revision f6c480d06e4b8c770012115d20df2a44e0da8031) @@ -1,15 +1,15 @@ /*! * - * Copyright (c) 2019-2020 Diality Inc. - All Rights Reserved. + * Copyright (c) 2020-2024 Diality Inc. - All Rights Reserved. * \copyright * THIS CODE MAY NOT BE COPIED OR REPRODUCED IN ANY FORM, IN PART OR IN * WHOLE, WITHOUT THE EXPLICIT PERMISSION OF THE COPYRIGHT OWNER. * - * \file tst_messaging.cpp - * \author (last) Peter Lucia - * \date (last) 15-Oct-2020 - * \author (original) Behrouz NematiPour - * \date (original) 21-Apr-2020 + * \file tst_messaging.cpp + * \author (last) Behrouz NematiPour + * \date (last) 22-Feb-2024 + * \author (original) Behrouz NematiPour + * \date (original) 21-Apr-2020 * */ #include "tst_messaging.h" @@ -20,9 +20,12 @@ #include "main.h" #include "MessageInterpreter.h" #include "MessageBuilder.h" -#include "MPowerOff.h" +#include "MAdjustPowerOff.h" #include "MessageDispatcher.h" +#include "AlarmGenerator.h" +using namespace Can; + tst_messaging::tst_messaging(QObject *parent) : QObject(parent) { } /*! @@ -66,80 +69,24 @@ } /*! - * \brief tst_messaging::tst_MessageInterpreter_getPowerOffData_isType - * \details Tests MessageInterpreter getPowerOffData method Message Type checking - */ -void tst_messaging::tst_MessageInterpreter_getPowerOffData_isType() -{ - Can::MessageInterpreter iMsg; - Can::Message msg; - msg.actionId = Gui::GuiActionType::ID_Unknown; - msg.data = {}; - Model::MPowerOff data; - data.fromByteArray(msg.data); - // QVERIFY( ! iMsg.interpretMessage(msg, data)); -} - -/*! - * \brief tst_messaging::tst_MessageInterpreter_getPowerOffData_payloadLen - * \details Tests MessageInterpreter getPowerOffData method Message payload length check - */ -void tst_messaging::tst_MessageInterpreter_getPowerOffData_payloadLen() -{ - Can::MessageInterpreter iMsg; - Can::Message msg; - msg.actionId = Gui::GuiActionType::ID_PowerOff; - msg.data = {}; - Model::MPowerOff data; - data.fromByteArray(msg.data); - // QVERIFY( ! iMsg.interpretMessage(msg, data)); -} - -/*! * \brief tst_messaging::tst_MessageInterpreter_powerOffData * \details Tests MessageInterpreter powerOffData method Message payload length check */ void tst_messaging::tst_MessageInterpreter_powerOffData() { Can::MessageInterpreter iMsg; + Can_Id canId = Can::Can_Id::eChlid_UI_HD; + Can::Message msg; msg.actionId = Gui::GuiActionType::ID_PowerOff; msg.data = {}; + msg.can_id = canId; + QVariantList data; QVERIFY( ! iMsg.interpretMessage(msg, data)); } /*! - * \brief tst_messaging::tst_MessageInterpreter_getBloodFlowData_isType - * \details Tests MessageInterpreter getBloodFlowData method Message Type checking - */ -void tst_messaging::tst_MessageInterpreter_getBloodFlowData_isType() -{ - Can::MessageInterpreter iMsg; - Can::Message msg; - msg.actionId = Gui::GuiActionType::ID_Unknown; - msg.data = {}; - Model::MBloodFlow data; - data.fromByteArray(msg.data); - //QVERIFY( ! iMsg.interpretMessage(msg, data)); -} - -/*! - * \brief tst_messaging::tst_MessageInterpreter_getBloodFlowData_payloadLen - * \details Tests MessageInterpreter getBloodFlowData method Message payload length check - */ -void tst_messaging::tst_MessageInterpreter_getBloodFlowData_payloadLen() -{ - Can::MessageInterpreter iMsg; - Can::Message msg; - msg.actionId = Gui::GuiActionType::ID_BloodFlow; - msg.data = {}; - Model::MBloodFlow data; - data.fromByteArray(msg.data); - //QVERIFY( ! iMsg.interpretMessage(msg, data)); -} - -/*! * \brief tst_messaging::tst_MessageInterpreter_bloodFlowData * \details Tests MessageInterpreter bloodFlowData method Message payload length check */ @@ -155,36 +102,6 @@ } /*! - * \brief tst_messaging::tst_MessageInterpreter_getDialysateInletFlowData_isType - * \details Tests MessageInterpreter getDialysateInletFlowData method Message Type checking - */ -void tst_messaging::tst_MessageInterpreter_getDialysateInletFlowData_isType() -{ - Can::MessageInterpreter iMsg; - Can::Message msg; - msg.actionId = Gui::GuiActionType::ID_Unknown; - msg.data = {}; - Model::MDialysateFlow data; - data.fromByteArray(msg.data); - //QVERIFY( ! iMsg.interpretMessage(msg, data)); -} - -/*! - * \brief tst_messaging::tst_MessageInterpreter_getDialysateInletFlowData_payloadLen - * \details Tests MessageInterpreter getDialysateInletFlowData method Message payload length check - */ -void tst_messaging::tst_MessageInterpreter_getDialysateInletFlowData_payloadLen() -{ - Can::MessageInterpreter iMsg; - Can::Message msg; - msg.actionId = Gui::GuiActionType::ID_DialysateInletFlow; - msg.data = {}; - Model::MDialysateFlow data; - data.fromByteArray(msg.data); - //QVERIFY( ! iMsg.interpretMessage(msg, data)); -} - -/*! * \brief tst_messaging::tst_MessageInterpreter_dialysateInletFlowData * \details Tests MessageInterpreter dialysateInletFlowData method Message payload length check */ @@ -200,36 +117,6 @@ } /*! - * \brief tst_messaging::tst_MessageInterpreter_getDialysateOutletFlowData_isType - * \details Tests MessageInterpreter getDialysateOutletFlowData method Message Type checking - */ -void tst_messaging::tst_MessageInterpreter_getDialysateOutletFlowData_isType() -{ - Can::MessageInterpreter iMsg; - Can::Message msg; - msg.actionId = Gui::GuiActionType::ID_Unknown; - msg.data = {}; - Model::MOutletFlow data; - data.fromByteArray(msg.data); - //QVERIFY( ! iMsg.interpretMessage(msg, data)); -} - -/*! - * \brief tst_messaging::tst_MessageInterpreter_getDialysateOutletFlowData_payloadLen - * \details Tests MessageInterpreter getDialysateOutletFlowData method Message payload length check - */ -void tst_messaging::tst_MessageInterpreter_getDialysateOutletFlowData_payloadLen() -{ - Can::MessageInterpreter iMsg; - Can::Message msg; - msg.actionId = Gui::GuiActionType::ID_DialysateOutletFlow; - msg.data = {}; - Model::MOutletFlow data; - data.fromByteArray(msg.data); - //QVERIFY( ! iMsg.interpretMessage(msg, data)); -} - -/*! * \brief tst_messaging::tst_MessageInterpreter_dialysateOutletFlowData * \details Tests MessageInterpreter dialysateOutletFlowData method Message payload length check */ @@ -245,36 +132,6 @@ } /*! - * \brief tst_messaging::tst_MessageInterpreter_getTreatmentTime_isType - * \details Tests MessageInterpreter getTreatmentTime method Message Type checking - */ -void tst_messaging::tst_MessageInterpreter_getTreatmentTime_isType() -{ - Can::MessageInterpreter iMsg; - Can::Message msg; - msg.actionId = Gui::GuiActionType::ID_Unknown; - msg.data = {}; - Model::MTreatmentTime data; - data.fromByteArray(msg.data); - //QVERIFY( ! iMsg.interpretMessage(msg, data)); -} - -/*! - * \brief tst_messaging::tst_MessageInterpreter_getTreatmentTime_payloadLen - * \details Tests MessageInterpreter getTreatmentTime method Message payload length check - */ -void tst_messaging::tst_MessageInterpreter_getTreatmentTime_payloadLen() -{ - Can::MessageInterpreter iMsg; - Can::Message msg; - msg.actionId = Gui::GuiActionType::ID_TreatmentTime; - msg.data = {}; - Model::MTreatmentTime data; - data.fromByteArray(msg.data); - //QVERIFY( ! iMsg.getTreatmentTime(msg, data)); -} - -/*! * \brief tst_messaging::tst_MessageInterpreter_treatmentTime * \details Tests MessageInterpreter treatmentTime method Message payload length check */ @@ -290,81 +147,6 @@ } /*! - * \brief tst_messaging::tst_MessageInterpreter_getAlarmStatus_isType - * \details Tests MessageInterpreter getAlarmStatus method Message Type check - */ -void tst_messaging::tst_MessageInterpreter_getAlarmStatus_isType() -{ - Can::MessageInterpreter iMsg; - Can::Message msg; - msg.actionId = Gui::GuiActionType::ID_Unknown; - msg.data = {}; - Model::MAlarmStatus data; - data.fromByteArray(msg.data); - //QVERIFY( ! iMsg.getAlarmStatus(msg, data)); -} - -/*! - * \brief tst_messaging::tst_MessageInterpreter_getAlarmStatus_payloadLen - * \details Test MessageInterpreter getAlarmStatus method Message payload length check - */ -void tst_messaging::tst_MessageInterpreter_getAlarmStatus_payloadLen() -{ - Can::MessageInterpreter iMsg; - Can::Message msg; - msg.actionId = Gui::GuiActionType::ID_AlarmStatus; - msg.data = {}; - Model::MAlarmStatus data; - data.fromByteArray(msg.data); - //QVERIFY( ! iMsg.getAlarmStatus(msg, data)); -} - -/*! - * \brief tst_messaging::tst_MessageInterpreter_alarmStatus - * \details Tests MessageInterpreter alarmStatus method Message payload length check - */ -void tst_messaging::tst_MessageInterpreter_alarmStatus() -{ - Can::MessageInterpreter iMsg; - Can::Message msg; - msg.actionId = Gui::GuiActionType::ID_AlarmStatus; - msg.data = {}; - QVariantList data; - QVERIFY( ! iMsg.alarmStatus(msg, data)); - QVERIFY( data.isEmpty()); -} - -/*! - * \brief tst_messaging::tst_MessageInterpreter_getPressureOcclusionData_isType - * \details Tests MessageInterpreter getPressureOcclusionData method Message Type check - */ -void tst_messaging::tst_MessageInterpreter_getPressureOcclusionData_isType() -{ - Can::MessageInterpreter iMsg; - Can::Message msg; - msg.actionId = Gui::GuiActionType::ID_Unknown; - msg.data = {}; - Model::MPressureOcclusion data; - data.fromByteArray(msg.data); - //QVERIFY( ! iMsg.getPressureOcclusionData(msg, data)); -} - -/*! - * \brief tst_messaging::tst_MessageInterpreter_getPressureOcclusionData_payloadLen - * \details Tests MessageInterpreter getPressureOcclusionData method Message payload length check - */ -void tst_messaging::tst_MessageInterpreter_getPressureOcclusionData_payloadLen() -{ - Can::MessageInterpreter iMsg; - Can::Message msg; - msg.actionId = Gui::GuiActionType::ID_PressureOcclusion; - msg.data = {}; - Model::MPressureOcclusion data; - data.fromByteArray(msg.data); - //QVERIFY( ! iMsg.getPressureOcclusionData(msg, data)); -} - -/*! * \brief tst_messaging::tst_MessageInterpreter_pressureOcclusionData * \details Tests MessageInterpreter pressureOcclusionData method Message payload length check */ @@ -507,7 +289,6 @@ QList actionTypes = { Gui::GuiActionType::ID_AlarmTriggered, Gui::GuiActionType::ID_AlarmCleared, - Gui::GuiActionType::ID_AlarmSilenceRsp, Gui::GuiActionType::ID_TreatmentStates, }; @@ -641,7 +422,9 @@ { Can::MessageInterpreter iMsg; QByteArray payload; - QVERIFY(iMsg.interpretMessage(Gui::GuiActionType::ID_RawData, {}, payload)); + Can_Id canId = Can::Can_Id::eChlid_NONE; + + QVERIFY(iMsg.interpretMessage(Gui::GuiActionType::ID_RawData, {}, payload, canId)); QVERIFY(payload.isEmpty()); } @@ -677,8 +460,10 @@ { Can::MessageInterpreter iMsg; QByteArray payload; + Can_Id canId = Can::Can_Id::eChlid_UI_HD; + // if the payload is empty the len is not valid and should return false and empty payload - QVERIFY(! iMsg.interpretMessage(Gui::GuiActionType::ID_AdjustBloodDialysateReq, {}, payload)); + QVERIFY(! iMsg.interpretMessage(Gui::GuiActionType::ID_AdjustBloodDialysateReq, {}, payload, canId)); QVERIFY(payload.isEmpty()); } @@ -691,8 +476,10 @@ { Can::MessageInterpreter iMsg; QByteArray payload; + Can_Id canId = Can::Can_Id::eChlid_UI_HD; + // if the payload is empty the len is not valid and should return false and empty payload - QVERIFY( ! iMsg.interpretMessage(Gui::GuiActionType::ID_AdjustDurationReq, {}, payload)); + QVERIFY( ! iMsg.interpretMessage(Gui::GuiActionType::ID_AdjustDurationReq, {}, payload, canId)); QVERIFY(payload.isEmpty()); } @@ -705,12 +492,30 @@ { Can::MessageInterpreter iMsg; QByteArray payload; + Can_Id canId = Can::Can_Id::eChlid_UI_HD; + // if the payload is empty the len is not valid and should return false and empty payload - QVERIFY(! iMsg.interpretMessage(Gui::GuiActionType::ID_AlarmSilenceReq, {}, payload)); + QVERIFY(! iMsg.interpretMessage(Gui::GuiActionType::ID_AlarmSilenceReq, {}, payload, canId)); QVERIFY(payload.isEmpty()); } /*! + * \brief tst_messaging::tst_MessageInterpreter_interpretMessage_AdjustUltrafiltrationInitReq + * \details Tests MessageInterpreter interpretMessage to handle AdjustUltrafiltrationInitReq message type + * if data is empty (count==0) + */ +void tst_messaging::tst_MessageInterpreter_interpretMessage_AdjustUltrafiltrationInitReq() +{ + Can::MessageInterpreter iMsg; + QByteArray payload; + Can_Id canId = Can::Can_Id::eChlid_UI_HD; + + // if the payload is empty the len is not valid and should return false and empty payload + QVERIFY(! iMsg.interpretMessage(Gui::GuiActionType::ID_AdjustUltrafiltrationInitReq, {}, payload, canId)); + QVERIFY(payload.isEmpty()); +} + +/*! * \brief tst_messaging::tst_MessageInterpreter_interpretMessage_AdjustUltrafiltrationStateReq * \details Tests MessageInterpreter interpretMessage to handle AdjustUltrafiltrationStateReq message type * if data is empty (count==0) @@ -719,8 +524,10 @@ { Can::MessageInterpreter iMsg; QByteArray payload; + Can_Id canId = Can::Can_Id::eChlid_UI_HD; + // if the payload is empty the len is not valid and should return false and empty payload - QVERIFY(! iMsg.interpretMessage(Gui::GuiActionType::ID_AdjustUltrafiltrationStateReq, {}, payload)); + QVERIFY(! iMsg.interpretMessage(Gui::GuiActionType::ID_AdjustUltrafiltrationStateReq, {}, payload, canId)); QVERIFY(payload.isEmpty()); } @@ -733,8 +540,10 @@ { Can::MessageInterpreter iMsg; QByteArray payload; + Can_Id canId = Can::Can_Id::eChlid_UI_HD; + // if the payload is empty the len is not valid and should return false and empty payload - QVERIFY( ! iMsg.interpretMessage(Gui::GuiActionType::ID_AdjustUltrafiltrationEditReq, {}, payload)); + QVERIFY( ! iMsg.interpretMessage(Gui::GuiActionType::ID_AdjustUltrafiltrationEditReq, {}, payload, canId)); QVERIFY(payload.isEmpty()); } @@ -747,8 +556,10 @@ { Can::MessageInterpreter iMsg; QByteArray payload; + Can_Id canId = Can::Can_Id::eChlid_UI_HD; + // if the payload is empty the len is not valid and should return false and empty payload - QVERIFY( ! iMsg.interpretMessage(Gui::GuiActionType::ID_AdjustUltrafiltrationConfirmReq, {}, payload)); + QVERIFY( ! iMsg.interpretMessage(Gui::GuiActionType::ID_AdjustUltrafiltrationConfirmReq, {}, payload, canId)); QVERIFY(payload.isEmpty()); } @@ -761,12 +572,41 @@ { Can::MessageInterpreter iMsg; QByteArray payload; + Can_Id canId = Can::Can_Id::eChlid_UI_HD; + // if the payload is empty the len is not valid and should return false and empty payload - QVERIFY( ! iMsg.interpretMessage(Gui::GuiActionType::ID_AdjustSalineReq, {}, payload)); + QVERIFY( ! iMsg.interpretMessage(Gui::GuiActionType::ID_AdjustSalineReq, {}, payload, canId)); QVERIFY(payload.isEmpty()); } /*! + * \brief tst_messaging::tst_MessageInterpreter_interpretMessage_AdjustHeparinReq + * \details Tests MessageInterpreter interpretMessage to handle ID_AdjustHeparinReq message type + * if data is empty (count==0) + */ +void tst_messaging::tst_MessageInterpreter_interpretMessage_AdjustHeparinReq() +{ + Can::MessageInterpreter iMsg; + QByteArray payload; + Can_Id canId = Can::Can_Id::eChlid_UI_HD; + + // if the payload is empty the len is not valid and should return false and empty payload + QVERIFY( ! iMsg.interpretMessage(Gui::GuiActionType::ID_AdjustHeparinReq, {}, payload, canId)); + QVERIFY(payload.isEmpty()); +} + +void tst_messaging::tst_MessageInterpreter_interpretMessage_AdjustPressuresReq() +{ + Can::MessageInterpreter iMsg; + QByteArray payload; + Can_Id canId = Can::Can_Id::eChlid_UI_HD; + + // if the payload is empty the len is not valid and should return false and empty payload + QVERIFY( ! iMsg.interpretMessage(Gui::GuiActionType::ID_AdjustPressuresLimitsReq, {}, payload, canId)); + QVERIFY(payload.isEmpty()); +} + +/*! * \brief tst_messaging::tst_MessageInterpreter_interpretMessage_CANBusFaultCount * \details Tests MessageInterpreter interpretMessage to handle ID_CANBusFaultCount message type * if data is empty (count==0) @@ -782,31 +622,6 @@ } /*! - * \brief tst_messaging::tst_MessageInterpreter_createTreatmentResp - * Tests that an invalid response message is detected properly - */ -void tst_messaging::tst_MessageInterpreter_createTreatmentResp() -{ - Can::MessageInterpreter interpreter; - Can::Message msg; - msg.actionId = Gui::GuiActionType::ID_CreateTreatmentRsp; - msg.data = {}; - QVariantList data; - QVERIFY(! interpreter.createTreatmentRespData(msg, data)); - - msg.actionId = Gui::GuiActionType::ID_CreateTreatmentReq; - QVERIFY(! interpreter.createTreatmentRespData(msg, data)); - - QVariantList variantList = QVariantList() << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 - << 0 << 0 << 0; - QByteArray byteArray; - QVERIFY(interpreter.interpretMessage(msg.actionId, variantList, byteArray)); - - QVERIFY(!interpreter.interpretMessage(msg.actionId, QVariantList(), byteArray)); - -} - -/*! * \brief tst_messaging::tst_MessageBuilder_addActionId * \details Tests addActionId() method usage of MessageBuilder */ @@ -944,3 +759,19 @@ Can::Sequence seq = 1; dMsg.actionTransmit(Gui::GuiActionType::ID_KeepAlive, data, seq); } + +/*! + * \brief tst_messaging::tst_AlarmGenerator_setBits_OutOfRange + * \details Tests the longer list of the bits sent to AlarmGenerator::setBits method. + */ +void tst_messaging::tst_AlarmGenerator_setBits_OutOfRange() +{ + quint8 len = sizeof(AlarmGenerator::TAlarms) * 8; + AlarmGenerator ag; + AlarmGenerator::TBits bits {0, 15, len}; // 16 is out of range + QBitArray ba_actual = ag.setBits(bits); + QBitArray ba_expected(len,false); + ba_expected.setBit(0); + ba_expected.setBit(15); + QCOMPARE(ba_actual, ba_expected); +}