From 7fbfa9da9056a568dc3a8a8b269472e0a5bc2efa Mon Sep 17 00:00:00 2001
From: Dimitrios Stoupis <dimitris.apple@gmail.com>
Date: Thu, 21 Mar 2019 00:33:29 +0000
Subject: [PATCH] Implement a message comparison function

---
 inc/Message.hpp                              | 20 +++++++++++++++-----
 test/Services/TimeBasedSchedulingService.cpp | 20 ++++++++++----------
 2 files changed, 25 insertions(+), 15 deletions(-)

diff --git a/inc/Message.hpp b/inc/Message.hpp
index 8bb3017d..8e5f1d25 100644
--- a/inc/Message.hpp
+++ b/inc/Message.hpp
@@ -23,11 +23,21 @@ class Message {
 public:
 	Message() = default;
 
-	// todo: Decide on the final format of this comparison operator
-	// Define the message comparison operator
-	bool operator==(const Message &msg) const {
-		return (this->packetType == msg.packetType) &&
-		       (this->messageType == msg.messageType) && (this->serviceType == msg.serviceType);
+	/**
+	 * @brief Compare two messages
+	 * @details Check whether two Message objects are of the same type
+	 * @param msg1 First message for comparison
+	 * @param msg2 Second message for comparison
+	 * @return A boolean value indicating whether the messages are of the same type
+	 */
+	static bool isSameType(const Message &msg1, const Message &msg2) {
+		for (uint16_t i = 0; i < ECSS_MAX_MESSAGE_SIZE; i++) {
+			if (msg1.data[i] != msg2.data[i]) {
+				return false;
+			}
+		}
+		return (msg1.packetType == msg2.packetType) &&
+		       (msg1.messageType == msg2.messageType) && (msg1.serviceType == msg2.serviceType);
 	}
 
 	enum PacketType {
diff --git a/test/Services/TimeBasedSchedulingService.cpp b/test/Services/TimeBasedSchedulingService.cpp
index 81b4193c..5f8a2eda 100644
--- a/test/Services/TimeBasedSchedulingService.cpp
+++ b/test/Services/TimeBasedSchedulingService.cpp
@@ -111,10 +111,10 @@ TEST_CASE("TC[11,4] Activity Insertion", "[service][st11]") {
 	REQUIRE(scheduledActivities.at(1)->requestReleaseTime == currentTime + 1726435);
 	REQUIRE(scheduledActivities.at(2)->requestReleaseTime == currentTime + 1957232);
 	REQUIRE(scheduledActivities.at(3)->requestReleaseTime == currentTime + 17248435);
-	REQUIRE(scheduledActivities.at(0)->request == testMessage1);
-	REQUIRE(scheduledActivities.at(1)->request == testMessage3);
-	REQUIRE(scheduledActivities.at(2)->request == testMessage2);
-	REQUIRE(scheduledActivities.at(3)->request == testMessage4);
+	REQUIRE(Message::isSameType(scheduledActivities.at(0)->request, testMessage1));
+	REQUIRE(Message::isSameType(scheduledActivities.at(1)->request, testMessage3));
+	REQUIRE(Message::isSameType(scheduledActivities.at(2)->request, testMessage2));
+	REQUIRE(Message::isSameType(scheduledActivities.at(3)->request, testMessage4));
 }
 
 TEST_CASE("TC[11,15] Time shift all scheduled activities (Positive shift)", "[service][st11]") {
@@ -172,7 +172,7 @@ TEST_CASE("TC[11,7] Time shift activities by ID (Positive Shift)", "[service][st
 	timeService.timeShiftActivitiesByID(receivedMessage);
 
 	REQUIRE(scheduledActivities.at(2)->requestReleaseTime == currentTime + 1957232 + timeShift);
-	REQUIRE(scheduledActivities.at(2)->request == testMessage2);
+	REQUIRE(Message::isSameType(scheduledActivities.at(2)->request, testMessage2));
 }
 
 TEST_CASE("TC[11,7] Time shift activities by ID (Negative Shift)", "[service][st11]") {
@@ -195,7 +195,7 @@ TEST_CASE("TC[11,7] Time shift activities by ID (Negative Shift)", "[service][st
 	timeService.timeShiftActivitiesByID(receivedMessage);
 
 	REQUIRE(scheduledActivities.at(2)->requestReleaseTime == currentTime + 1957232 - timeShift);
-	REQUIRE(scheduledActivities.at(2)->request == testMessage2);
+	REQUIRE(Message::isSameType(scheduledActivities.at(2)->request, testMessage2));
 }
 
 
@@ -236,10 +236,10 @@ TEST_CASE("TC[11,9] Detail report scheduled activities by ID", "[service][st11]"
 
 		if (i == 0) {
 			REQUIRE(receivedReleaseTime == scheduledActivities.at(0)->requestReleaseTime);
-			REQUIRE(receivedTCPacket == scheduledActivities.at(0)->request);
+			REQUIRE(Message::isSameType(scheduledActivities.at(0)->request, testMessage1));
 		} else {
 			REQUIRE(receivedReleaseTime == scheduledActivities.at(2)->requestReleaseTime);
-			REQUIRE(receivedTCPacket == scheduledActivities.at(2)->request);
+			REQUIRE(Message::isSameType(scheduledActivities.at(2)->request, testMessage2));
 		}
 	}
 }
@@ -315,7 +315,7 @@ TEST_CASE("TC[11,16] Detail report all scheduled activities", "[service][st11]")
 		receivedTCPacket = msgParser.parseRequestTC(receivedDataStr);
 
 		REQUIRE(receivedReleaseTime == scheduledActivities.at(i)->requestReleaseTime);
-		REQUIRE(receivedTCPacket == scheduledActivities.at(i)->request);
+		REQUIRE(Message::isSameType(scheduledActivities.at(i)->request, receivedTCPacket));
 	}
 }
 
@@ -339,7 +339,7 @@ TEST_CASE("TC[11,5] Activity deletion by ID", "[service][st11]") {
 
 	REQUIRE(scheduledActivities.size() == 3);
 	REQUIRE(scheduledActivities.at(2)->requestReleaseTime == currentTime + 17248435);
-	REQUIRE(scheduledActivities.at(2)->request == testMessage4);
+	REQUIRE(Message::isSameType(scheduledActivities.at(2)->request, testMessage4));
 }
 
 TEST_CASE("TC[11,3] Reset schedule", "[service][st11]") {
-- 
GitLab