From 26db2daca846acea9be5e2705c89341bb5e2137b Mon Sep 17 00:00:00 2001
From: Arkadiusz Bokowy <a.bokowy@samsung.com>
Date: Thu, 31 Oct 2024 10:22:43 +0100
Subject: [PATCH 1/4] Run TestReadInteraction tests against sync fixture

---
 src/app/tests/TestReadInteraction.cpp     | 186 +++++++++++++++-------
 src/lib/support/tests/ExtraPwTestMacros.h |  16 +-
 2 files changed, 147 insertions(+), 55 deletions(-)

diff --git a/src/app/tests/TestReadInteraction.cpp b/src/app/tests/TestReadInteraction.cpp
index 5baab570f6e071..a6a103f674c81b 100644
--- a/src/app/tests/TestReadInteraction.cpp
+++ b/src/app/tests/TestReadInteraction.cpp
@@ -286,28 +286,23 @@ namespace app {
 using Seconds16      = System::Clock::Seconds16;
 using Milliseconds32 = System::Clock::Milliseconds32;
 
-// TODO: Add support for a 2nd Test Context by making sSyncScheduler = true (this was not ported from NL Tests yet)
 class TestReadInteraction : public chip::Test::AppContext
 {
-
 public:
-    static void SetUpTestSuite()
+    static void SetUpTestSuiteCommon(bool syncScheduler = false)
     {
         AppContext::SetUpTestSuite();
 
         gRealClock = &chip::System::SystemClock();
         chip::System::Clock::Internal::SetSystemClockForTesting(&gMockClock);
 
-        if (sSyncScheduler)
-        {
-            gReportScheduler = chip::app::reporting::GetSynchronizedReportScheduler();
-            sUsingSubSync    = true;
-        }
-        else
-        {
-            gReportScheduler = chip::app::reporting::GetDefaultReportScheduler();
-        }
+        sUsingSubSync    = syncScheduler;
+        gReportScheduler = syncScheduler ? chip::app::reporting::GetSynchronizedReportScheduler()
+                                         : chip::app::reporting::GetDefaultReportScheduler();
     }
+
+    static void SetUpTestSuite() { SetUpTestSuiteCommon(false); }
+
     static void TearDownTestSuite()
     {
         chip::System::Clock::Internal::SetSystemClockForTesting(gRealClock);
@@ -332,6 +327,7 @@ class TestReadInteraction : public chip::Test::AppContext
         chip::Test::SetMockNodeConfig(TestMockNodeConfig());
         chip::Test::SetVersionTo(chip::Test::kTestDataVersion1);
     }
+
     void TearDown() override
     {
         chip::Test::ResetMockNodeConfig();
@@ -385,16 +381,23 @@ class TestReadInteraction : public chip::Test::AppContext
         kInvalidNoAttributeId,
         kInvalidOutOfRangeAttributeId,
     };
+
     static void GenerateReportData(System::PacketBufferHandle & aPayload, ReportType aReportType, bool aSuppressResponse,
                                    bool aHasSubscriptionId);
 
 protected:
     chip::MonotonicallyIncreasingCounter<chip::EventNumber> mEventCounter;
-    static bool sSyncScheduler;
     chip::app::DataModel::Provider * mOldProvider = nullptr;
 };
 
-bool TestReadInteraction::sSyncScheduler = false;
+class TestReadInteractionSync : public TestReadInteraction
+{
+public:
+    static void SetUpTestSuite() { TestReadInteraction::SetUpTestSuiteCommon(true); }
+    static void TearDownTestSuite() { TestReadInteraction::TearDownTestSuite(); }
+    void SetUp() { TestReadInteraction::SetUp(); }
+    void TearDown() { TestReadInteraction::TearDown(); }
+};
 
 void TestReadInteraction::GenerateReportData(System::PacketBufferHandle & aPayload, ReportType aReportType, bool aSuppressResponse,
                                              bool aHasSubscriptionId = false)
@@ -476,7 +479,9 @@ void TestReadInteraction::GenerateReportData(System::PacketBufferHandle & aPaylo
     EXPECT_EQ(writer.Finalize(&aPayload), CHIP_NO_ERROR);
 }
 
-TEST_F_FROM_FIXTURE(TestReadInteraction, TestReadClient)
+TEST_F_FROM_FIXTURE_NO_BODY(TestReadInteraction, TestReadClient)
+TEST_F_FROM_FIXTURE_NO_BODY(TestReadInteractionSync, TestReadClient)
+void TestReadInteraction::TestReadClient()
 {
     MockInteractionModelApp delegate;
     app::ReadClient readClient(chip::app::InteractionModelEngine::GetInstance(), &GetExchangeManager(), delegate,
@@ -497,7 +502,9 @@ TEST_F_FROM_FIXTURE(TestReadInteraction, TestReadClient)
     EXPECT_EQ(readClient.ProcessReportData(std::move(buf), ReadClient::ReportType::kContinuingTransaction), CHIP_NO_ERROR);
 }
 
-TEST_F_FROM_FIXTURE(TestReadInteraction, TestReadUnexpectedSubscriptionId)
+TEST_F_FROM_FIXTURE_NO_BODY(TestReadInteraction, TestReadUnexpectedSubscriptionId)
+TEST_F_FROM_FIXTURE_NO_BODY(TestReadInteractionSync, TestReadUnexpectedSubscriptionId)
+void TestReadInteraction::TestReadUnexpectedSubscriptionId()
 {
     MockInteractionModelApp delegate;
     app::ReadClient readClient(chip::app::InteractionModelEngine::GetInstance(), &GetExchangeManager(), delegate,
@@ -520,7 +527,9 @@ TEST_F_FROM_FIXTURE(TestReadInteraction, TestReadUnexpectedSubscriptionId)
               CHIP_ERROR_INVALID_ARGUMENT);
 }
 
-TEST_F_FROM_FIXTURE(TestReadInteraction, TestReadHandler)
+TEST_F_FROM_FIXTURE_NO_BODY(TestReadInteraction, TestReadHandler)
+TEST_F_FROM_FIXTURE_NO_BODY(TestReadInteractionSync, TestReadHandler)
+void TestReadInteraction::TestReadHandler()
 {
     System::PacketBufferTLVWriter writer;
     System::PacketBufferHandle reportDatabuf  = System::PacketBufferHandle::New(System::PacketBuffer::kMaxSize);
@@ -569,7 +578,9 @@ TEST_F_FROM_FIXTURE(TestReadInteraction, TestReadHandler)
     EXPECT_EQ(GetExchangeManager().GetNumActiveExchanges(), 0u);
 }
 
-TEST_F_FROM_FIXTURE(TestReadInteraction, TestReadHandlerSetMaxReportingInterval)
+TEST_F_FROM_FIXTURE_NO_BODY(TestReadInteraction, TestReadHandlerSetMaxReportingInterval)
+TEST_F_FROM_FIXTURE_NO_BODY(TestReadInteractionSync, TestReadHandlerSetMaxReportingInterval)
+void TestReadInteraction::TestReadHandlerSetMaxReportingInterval()
 {
     System::PacketBufferTLVWriter writer;
     System::PacketBufferHandle subscribeRequestbuf = System::PacketBufferHandle::New(System::PacketBuffer::kMaxSize);
@@ -678,7 +689,9 @@ TEST_F_FROM_FIXTURE(TestReadInteraction, TestReadHandlerSetMaxReportingInterval)
     EXPECT_EQ(GetExchangeManager().GetNumActiveExchanges(), 0u);
 }
 
-TEST_F_FROM_FIXTURE(TestReadInteraction, TestReadClientGenerateAttributePathList)
+TEST_F_FROM_FIXTURE_NO_BODY(TestReadInteraction, TestReadClientGenerateAttributePathList)
+TEST_F_FROM_FIXTURE_NO_BODY(TestReadInteractionSync, TestReadClientGenerateAttributePathList)
+void TestReadInteraction::TestReadClientGenerateAttributePathList()
 {
     MockInteractionModelApp delegate;
     System::PacketBufferHandle msgBuf;
@@ -703,7 +716,9 @@ TEST_F_FROM_FIXTURE(TestReadInteraction, TestReadClientGenerateAttributePathList
     EXPECT_EQ(readClient.GenerateAttributePaths(attributePathListBuilder, attributePaths), CHIP_NO_ERROR);
 }
 
-TEST_F_FROM_FIXTURE(TestReadInteraction, TestReadClientGenerateInvalidAttributePathList)
+TEST_F_FROM_FIXTURE_NO_BODY(TestReadInteraction, TestReadClientGenerateInvalidAttributePathList)
+TEST_F_FROM_FIXTURE_NO_BODY(TestReadInteractionSync, TestReadClientGenerateInvalidAttributePathList)
+void TestReadInteraction::TestReadClientGenerateInvalidAttributePathList()
 {
     MockInteractionModelApp delegate;
     System::PacketBufferHandle msgBuf;
@@ -729,7 +744,9 @@ TEST_F_FROM_FIXTURE(TestReadInteraction, TestReadClientGenerateInvalidAttributeP
               CHIP_ERROR_IM_MALFORMED_ATTRIBUTE_PATH_IB);
 }
 
-TEST_F_FROM_FIXTURE(TestReadInteraction, TestReadClientInvalidReport)
+TEST_F_FROM_FIXTURE_NO_BODY(TestReadInteraction, TestReadClientInvalidReport)
+TEST_F_FROM_FIXTURE_NO_BODY(TestReadInteractionSync, TestReadClientInvalidReport)
+void TestReadInteraction::TestReadClientInvalidReport()
 {
     MockInteractionModelApp delegate;
 
@@ -753,7 +770,9 @@ TEST_F_FROM_FIXTURE(TestReadInteraction, TestReadClientInvalidReport)
               CHIP_ERROR_IM_MALFORMED_ATTRIBUTE_PATH_IB);
 }
 
-TEST_F_FROM_FIXTURE(TestReadInteraction, TestReadClientInvalidAttributeId)
+TEST_F_FROM_FIXTURE_NO_BODY(TestReadInteraction, TestReadClientInvalidAttributeId)
+TEST_F_FROM_FIXTURE_NO_BODY(TestReadInteractionSync, TestReadClientInvalidAttributeId)
+void TestReadInteraction::TestReadClientInvalidAttributeId()
 {
     MockInteractionModelApp delegate;
 
@@ -783,7 +802,9 @@ TEST_F_FROM_FIXTURE(TestReadInteraction, TestReadClientInvalidAttributeId)
     EXPECT_FALSE(delegate.mReadError);
 }
 
-TEST_F_FROM_FIXTURE(TestReadInteraction, TestReadHandlerInvalidAttributePath)
+TEST_F_FROM_FIXTURE_NO_BODY(TestReadInteraction, TestReadHandlerInvalidAttributePath)
+TEST_F_FROM_FIXTURE_NO_BODY(TestReadInteractionSync, TestReadHandlerInvalidAttributePath)
+void TestReadInteraction::TestReadHandlerInvalidAttributePath()
 {
     CHIP_ERROR err = CHIP_NO_ERROR;
 
@@ -840,7 +861,9 @@ TEST_F_FROM_FIXTURE(TestReadInteraction, TestReadHandlerInvalidAttributePath)
     EXPECT_EQ(GetExchangeManager().GetNumActiveExchanges(), 0u);
 }
 
-TEST_F_FROM_FIXTURE(TestReadInteraction, TestReadClientGenerateOneEventPaths)
+TEST_F_FROM_FIXTURE_NO_BODY(TestReadInteraction, TestReadClientGenerateOneEventPaths)
+TEST_F_FROM_FIXTURE_NO_BODY(TestReadInteractionSync, TestReadClientGenerateOneEventPaths)
+void TestReadInteraction::TestReadClientGenerateOneEventPaths()
 {
     MockInteractionModelApp delegate;
     System::PacketBufferHandle msgBuf;
@@ -881,7 +904,9 @@ TEST_F_FROM_FIXTURE(TestReadInteraction, TestReadClientGenerateOneEventPaths)
     EXPECT_EQ(GetExchangeManager().GetNumActiveExchanges(), 0u);
 }
 
-TEST_F_FROM_FIXTURE(TestReadInteraction, TestReadClientGenerateTwoEventPaths)
+TEST_F_FROM_FIXTURE_NO_BODY(TestReadInteraction, TestReadClientGenerateTwoEventPaths)
+TEST_F_FROM_FIXTURE_NO_BODY(TestReadInteractionSync, TestReadClientGenerateTwoEventPaths)
+void TestReadInteraction::TestReadClientGenerateTwoEventPaths()
 {
     MockInteractionModelApp delegate;
     System::PacketBufferHandle msgBuf;
@@ -1358,8 +1383,7 @@ TEST_F(TestReadInteraction, TestSetDirtyBetweenChunks)
         public:
             DirtyingMockDelegate(AttributePathParams (&aReadPaths)[2], int & aNumAttributeResponsesWhenSetDirty,
                                  int & aNumArrayItemsWhenSetDirty) :
-                mReadPaths(aReadPaths),
-                mNumAttributeResponsesWhenSetDirty(aNumAttributeResponsesWhenSetDirty),
+                mReadPaths(aReadPaths), mNumAttributeResponsesWhenSetDirty(aNumAttributeResponsesWhenSetDirty),
                 mNumArrayItemsWhenSetDirty(aNumArrayItemsWhenSetDirty)
             {}
 
@@ -1513,7 +1537,9 @@ TEST_F(TestReadInteraction, TestReadInvalidAttributePathRoundtrip)
     EXPECT_EQ(GetExchangeManager().GetNumActiveExchanges(), 0u);
 }
 
-TEST_F_FROM_FIXTURE(TestReadInteraction, TestProcessSubscribeRequest)
+TEST_F_FROM_FIXTURE_NO_BODY(TestReadInteraction, TestProcessSubscribeRequest)
+TEST_F_FROM_FIXTURE_NO_BODY(TestReadInteractionSync, TestProcessSubscribeRequest)
+void TestReadInteraction::TestProcessSubscribeRequest()
 {
     System::PacketBufferTLVWriter writer;
     System::PacketBufferHandle subscribeRequestbuf = System::PacketBufferHandle::New(System::PacketBuffer::kMaxSize);
@@ -1570,7 +1596,9 @@ TEST_F_FROM_FIXTURE(TestReadInteraction, TestProcessSubscribeRequest)
  * @brief Test validates that an ICD will choose its IdleModeDuration (GetPublisherSelectedIntervalLimit)
  *        as MaxInterval when the MaxIntervalCeiling is superior.
  */
-TEST_F_FROM_FIXTURE(TestReadInteraction, TestICDProcessSubscribeRequestSupMaxIntervalCeiling)
+TEST_F_FROM_FIXTURE_NO_BODY(TestReadInteraction, TestICDProcessSubscribeRequestSupMaxIntervalCeiling)
+TEST_F_FROM_FIXTURE_NO_BODY(TestReadInteractionSync, TestICDProcessSubscribeRequestSupMaxIntervalCeiling)
+void TestReadInteraction::TestICDProcessSubscribeRequestSupMaxIntervalCeiling()
 {
     System::PacketBufferTLVWriter writer;
     System::PacketBufferHandle subscribeRequestbuf = System::PacketBufferHandle::New(System::PacketBuffer::kMaxSize);
@@ -1638,7 +1666,9 @@ TEST_F_FROM_FIXTURE(TestReadInteraction, TestICDProcessSubscribeRequestSupMaxInt
  * @brief Test validates that an ICD will choose its IdleModeDuration (GetPublisherSelectedIntervalLimit)
  *        as MaxInterval when the MaxIntervalCeiling is inferior.
  */
-TEST_F_FROM_FIXTURE(TestReadInteraction, TestICDProcessSubscribeRequestInfMaxIntervalCeiling)
+TEST_F_FROM_FIXTURE_NO_BODY(TestReadInteraction, TestICDProcessSubscribeRequestInfMaxIntervalCeiling)
+TEST_F_FROM_FIXTURE_NO_BODY(TestReadInteractionSync, TestICDProcessSubscribeRequestInfMaxIntervalCeiling)
+void TestReadInteraction::TestICDProcessSubscribeRequestInfMaxIntervalCeiling()
 {
     System::PacketBufferTLVWriter writer;
     System::PacketBufferHandle subscribeRequestbuf = System::PacketBufferHandle::New(System::PacketBuffer::kMaxSize);
@@ -1706,7 +1736,9 @@ TEST_F_FROM_FIXTURE(TestReadInteraction, TestICDProcessSubscribeRequestInfMaxInt
  * @brief Test validates that an ICD will choose a multiple of its IdleModeDuration (GetPublisherSelectedIntervalLimit)
  *        as MaxInterval when the MinInterval > IdleModeDuration.
  */
-TEST_F_FROM_FIXTURE(TestReadInteraction, TestICDProcessSubscribeRequestSupMinInterval)
+TEST_F_FROM_FIXTURE_NO_BODY(TestReadInteraction, TestICDProcessSubscribeRequestSupMinInterval)
+TEST_F_FROM_FIXTURE_NO_BODY(TestReadInteractionSync, TestICDProcessSubscribeRequestSupMinInterval)
+void TestReadInteraction::TestICDProcessSubscribeRequestSupMinInterval()
 {
     System::PacketBufferTLVWriter writer;
     System::PacketBufferHandle subscribeRequestbuf = System::PacketBufferHandle::New(System::PacketBuffer::kMaxSize);
@@ -1774,7 +1806,9 @@ TEST_F_FROM_FIXTURE(TestReadInteraction, TestICDProcessSubscribeRequestSupMinInt
  * @brief Test validates that an ICD will choose a maximal value for an uint16 if the multiple of the IdleModeDuration
  *        is greater than variable size.
  */
-TEST_F_FROM_FIXTURE(TestReadInteraction, TestICDProcessSubscribeRequestMaxMinInterval)
+TEST_F_FROM_FIXTURE_NO_BODY(TestReadInteraction, TestICDProcessSubscribeRequestMaxMinInterval)
+TEST_F_FROM_FIXTURE_NO_BODY(TestReadInteractionSync, TestICDProcessSubscribeRequestMaxMinInterval)
+void TestReadInteraction::TestICDProcessSubscribeRequestMaxMinInterval()
 {
     System::PacketBufferTLVWriter writer;
     System::PacketBufferHandle subscribeRequestbuf = System::PacketBufferHandle::New(System::PacketBuffer::kMaxSize);
@@ -1840,7 +1874,9 @@ TEST_F_FROM_FIXTURE(TestReadInteraction, TestICDProcessSubscribeRequestMaxMinInt
  * @brief Test validates that an ICD will choose the MaxIntervalCeiling as MaxInterval if the next multiple after the MinInterval
  *        is greater than the IdleModeDuration and MaxIntervalCeiling
  */
-TEST_F_FROM_FIXTURE(TestReadInteraction, TestICDProcessSubscribeRequestInvalidIdleModeDuration)
+TEST_F_FROM_FIXTURE_NO_BODY(TestReadInteraction, TestICDProcessSubscribeRequestInvalidIdleModeDuration)
+TEST_F_FROM_FIXTURE_NO_BODY(TestReadInteractionSync, TestICDProcessSubscribeRequestInvalidIdleModeDuration)
+void TestReadInteraction::TestICDProcessSubscribeRequestInvalidIdleModeDuration()
 {
     System::PacketBufferTLVWriter writer;
     System::PacketBufferHandle subscribeRequestbuf = System::PacketBufferHandle::New(System::PacketBuffer::kMaxSize);
@@ -1904,7 +1940,9 @@ TEST_F_FROM_FIXTURE(TestReadInteraction, TestICDProcessSubscribeRequestInvalidId
 
 #endif // CHIP_CONFIG_ENABLE_ICD_SERVER
 
-TEST_F_FROM_FIXTURE(TestReadInteraction, TestSubscribeRoundtrip)
+TEST_F_FROM_FIXTURE_NO_BODY(TestReadInteraction, TestSubscribeRoundtrip)
+TEST_F_FROM_FIXTURE_NO_BODY(TestReadInteractionSync, TestSubscribeRoundtrip)
+void TestReadInteraction::TestSubscribeRoundtrip()
 {
 
     Messaging::ReliableMessageMgr * rm = GetExchangeManager().GetReliableMessageMgr();
@@ -2099,7 +2137,9 @@ TEST_F_FROM_FIXTURE(TestReadInteraction, TestSubscribeRoundtrip)
     EXPECT_EQ(GetExchangeManager().GetNumActiveExchanges(), 0u);
 }
 
-TEST_F_FROM_FIXTURE(TestReadInteraction, TestSubscribeEarlyReport)
+TEST_F_FROM_FIXTURE_NO_BODY(TestReadInteraction, TestSubscribeEarlyReport)
+TEST_F_FROM_FIXTURE_NO_BODY(TestReadInteractionSync, TestSubscribeEarlyReport)
+void TestReadInteraction::TestSubscribeEarlyReport()
 {
 
     Messaging::ReliableMessageMgr * rm = GetExchangeManager().GetReliableMessageMgr();
@@ -2260,7 +2300,9 @@ TEST_F_FROM_FIXTURE(TestReadInteraction, TestSubscribeEarlyReport)
     EXPECT_EQ(GetExchangeManager().GetNumActiveExchanges(), 0u);
 }
 
-TEST_F_FROM_FIXTURE(TestReadInteraction, TestSubscribeUrgentWildcardEvent)
+TEST_F_FROM_FIXTURE_NO_BODY(TestReadInteraction, TestSubscribeUrgentWildcardEvent)
+TEST_F_FROM_FIXTURE_NO_BODY(TestReadInteractionSync, TestSubscribeUrgentWildcardEvent)
+void TestReadInteraction::TestSubscribeUrgentWildcardEvent()
 {
 
     Messaging::ReliableMessageMgr * rm = GetExchangeManager().GetReliableMessageMgr();
@@ -2830,7 +2872,9 @@ TEST_F(TestReadInteraction, TestSubscribeEarlyShutdown)
     EXPECT_EQ(GetExchangeManager().GetNumActiveExchanges(), 0u);
 }
 
-TEST_F_FROM_FIXTURE(TestReadInteraction, TestSubscribeInvalidAttributePathRoundtrip)
+TEST_F_FROM_FIXTURE_NO_BODY(TestReadInteraction, TestSubscribeInvalidAttributePathRoundtrip)
+TEST_F_FROM_FIXTURE_NO_BODY(TestReadInteractionSync, TestSubscribeInvalidAttributePathRoundtrip)
+void TestReadInteraction::TestSubscribeInvalidAttributePathRoundtrip()
 {
 
     Messaging::ReliableMessageMgr * rm = GetExchangeManager().GetReliableMessageMgr();
@@ -2977,7 +3021,9 @@ TEST_F(TestReadInteraction, TestSubscribeInvalidInterval)
     EXPECT_EQ(GetExchangeManager().GetNumActiveExchanges(), 0u);
 }
 
-TEST_F_FROM_FIXTURE(TestReadInteraction, TestPostSubscribeRoundtripStatusReportTimeout)
+TEST_F_FROM_FIXTURE_NO_BODY(TestReadInteraction, TestPostSubscribeRoundtripStatusReportTimeout)
+TEST_F_FROM_FIXTURE_NO_BODY(TestReadInteractionSync, TestPostSubscribeRoundtripStatusReportTimeout)
+void TestReadInteraction::TestPostSubscribeRoundtripStatusReportTimeout()
 {
     Messaging::ReliableMessageMgr * rm = GetExchangeManager().GetReliableMessageMgr();
     // Shouldn't have anything in the retransmit table when starting the test.
@@ -3641,7 +3687,9 @@ void CheckForInvalidAction(Test::MessageCapturer & messageLog)
 
 // Read Client sends the read request, Read Handler drops the response, then test injects unknown status reponse message for
 // Read Client.
-TEST_F_FROM_FIXTURE(TestReadInteraction, TestReadClientReceiveInvalidMessage)
+TEST_F_FROM_FIXTURE_NO_BODY(TestReadInteraction, TestReadClientReceiveInvalidMessage)
+TEST_F_FROM_FIXTURE_NO_BODY(TestReadInteractionSync, TestReadClientReceiveInvalidMessage)
+void TestReadInteraction::TestReadClientReceiveInvalidMessage()
 {
 
     Messaging::ReliableMessageMgr * rm = GetExchangeManager().GetReliableMessageMgr();
@@ -3726,7 +3774,9 @@ TEST_F_FROM_FIXTURE(TestReadInteraction, TestReadClientReceiveInvalidMessage)
 
 // Read Client sends the subscribe request, Read Handler drops the response, then test injects unknown status response message
 // for Read Client.
-TEST_F_FROM_FIXTURE(TestReadInteraction, TestSubscribeClientReceiveInvalidStatusResponse)
+TEST_F_FROM_FIXTURE_NO_BODY(TestReadInteraction, TestSubscribeClientReceiveInvalidStatusResponse)
+TEST_F_FROM_FIXTURE_NO_BODY(TestReadInteractionSync, TestSubscribeClientReceiveInvalidStatusResponse)
+void TestReadInteraction::TestSubscribeClientReceiveInvalidStatusResponse()
 {
 
     Messaging::ReliableMessageMgr * rm = GetExchangeManager().GetReliableMessageMgr();
@@ -3817,7 +3867,9 @@ TEST_F_FROM_FIXTURE(TestReadInteraction, TestSubscribeClientReceiveInvalidStatus
 
 // Read Client sends the subscribe request, Read Handler drops the response, then test injects well-formed status response
 // message with Success for Read Client, we expect the error with CHIP_ERROR_INVALID_MESSAGE_TYPE
-TEST_F_FROM_FIXTURE(TestReadInteraction, TestSubscribeClientReceiveWellFormedStatusResponse)
+TEST_F_FROM_FIXTURE_NO_BODY(TestReadInteraction, TestSubscribeClientReceiveWellFormedStatusResponse)
+TEST_F_FROM_FIXTURE_NO_BODY(TestReadInteractionSync, TestSubscribeClientReceiveWellFormedStatusResponse)
+void TestReadInteraction::TestSubscribeClientReceiveWellFormedStatusResponse()
 {
 
     Messaging::ReliableMessageMgr * rm = GetExchangeManager().GetReliableMessageMgr();
@@ -3907,7 +3959,9 @@ TEST_F_FROM_FIXTURE(TestReadInteraction, TestSubscribeClientReceiveWellFormedSta
 
 // Read Client sends the subscribe request, Read Handler drops the response, then test injects invalid report message for Read
 // Client.
-TEST_F_FROM_FIXTURE(TestReadInteraction, TestSubscribeClientReceiveInvalidReportMessage)
+TEST_F_FROM_FIXTURE_NO_BODY(TestReadInteraction, TestSubscribeClientReceiveInvalidReportMessage)
+TEST_F_FROM_FIXTURE_NO_BODY(TestReadInteractionSync, TestSubscribeClientReceiveInvalidReportMessage)
+void TestReadInteraction::TestSubscribeClientReceiveInvalidReportMessage()
 {
 
     Messaging::ReliableMessageMgr * rm = GetExchangeManager().GetReliableMessageMgr();
@@ -3997,7 +4051,9 @@ TEST_F_FROM_FIXTURE(TestReadInteraction, TestSubscribeClientReceiveInvalidReport
 
 // Read Client create the subscription, handler sends unsolicited malformed report to client,
 // InteractionModelEngine::OnUnsolicitedReportData would process this malformed report and sends out status report
-TEST_F_FROM_FIXTURE(TestReadInteraction, TestSubscribeClientReceiveUnsolicitedInvalidReportMessage)
+TEST_F_FROM_FIXTURE_NO_BODY(TestReadInteraction, TestSubscribeClientReceiveUnsolicitedInvalidReportMessage)
+TEST_F_FROM_FIXTURE_NO_BODY(TestReadInteractionSync, TestSubscribeClientReceiveUnsolicitedInvalidReportMessage)
+void TestReadInteraction::TestSubscribeClientReceiveUnsolicitedInvalidReportMessage()
 {
 
     Messaging::ReliableMessageMgr * rm = GetExchangeManager().GetReliableMessageMgr();
@@ -4068,7 +4124,9 @@ TEST_F_FROM_FIXTURE(TestReadInteraction, TestSubscribeClientReceiveUnsolicitedIn
 
 // Read Client sends the subscribe request, Read Handler drops the subscribe response, then test injects invalid subscribe
 // response message
-TEST_F_FROM_FIXTURE(TestReadInteraction, TestSubscribeClientReceiveInvalidSubscribeResponseMessage)
+TEST_F_FROM_FIXTURE_NO_BODY(TestReadInteraction, TestSubscribeClientReceiveInvalidSubscribeResponseMessage)
+TEST_F_FROM_FIXTURE_NO_BODY(TestReadInteractionSync, TestSubscribeClientReceiveInvalidSubscribeResponseMessage)
+void TestReadInteraction::TestSubscribeClientReceiveInvalidSubscribeResponseMessage()
 {
 
     Messaging::ReliableMessageMgr * rm = GetExchangeManager().GetReliableMessageMgr();
@@ -4159,7 +4217,9 @@ TEST_F_FROM_FIXTURE(TestReadInteraction, TestSubscribeClientReceiveInvalidSubscr
 
 // Read Client create the subscription, handler sends unsolicited malformed report with invalid subscription id to client,
 // InteractionModelEngine::OnUnsolicitedReportData would process this malformed report and sends out status report
-TEST_F_FROM_FIXTURE(TestReadInteraction, TestSubscribeClientReceiveUnsolicitedReportMessageWithInvalidSubscriptionId)
+TEST_F_FROM_FIXTURE_NO_BODY(TestReadInteraction, TestSubscribeClientReceiveUnsolicitedReportMessageWithInvalidSubscriptionId)
+TEST_F_FROM_FIXTURE_NO_BODY(TestReadInteractionSync, TestSubscribeClientReceiveUnsolicitedReportMessageWithInvalidSubscriptionId)
+void TestReadInteraction::TestSubscribeClientReceiveUnsolicitedReportMessageWithInvalidSubscriptionId()
 {
 
     Messaging::ReliableMessageMgr * rm = GetExchangeManager().GetReliableMessageMgr();
@@ -4235,7 +4295,9 @@ TEST_F_FROM_FIXTURE(TestReadInteraction, TestSubscribeClientReceiveUnsolicitedRe
 // TestReadChunkingInvalidSubscriptionId will try to read a few large attributes, the report won't fit into the MTU and result
 // in chunking, second report has different subscription id from the first one, read client sends out the status report with
 // invalid subscription
-TEST_F_FROM_FIXTURE(TestReadInteraction, TestReadChunkingInvalidSubscriptionId)
+TEST_F_FROM_FIXTURE_NO_BODY(TestReadInteraction, TestReadChunkingInvalidSubscriptionId)
+TEST_F_FROM_FIXTURE_NO_BODY(TestReadInteractionSync, TestReadChunkingInvalidSubscriptionId)
+void TestReadInteraction::TestReadChunkingInvalidSubscriptionId()
 {
 
     Messaging::ReliableMessageMgr * rm = GetExchangeManager().GetReliableMessageMgr();
@@ -4325,7 +4387,9 @@ TEST_F_FROM_FIXTURE(TestReadInteraction, TestReadChunkingInvalidSubscriptionId)
 
 // Read Client sends a malformed subscribe request, interaction model engine fails to parse the request and generates a status
 // report to client, and client is closed.
-TEST_F_FROM_FIXTURE(TestReadInteraction, TestReadHandlerMalformedSubscribeRequest)
+TEST_F_FROM_FIXTURE_NO_BODY(TestReadInteraction, TestReadHandlerMalformedSubscribeRequest)
+TEST_F_FROM_FIXTURE_NO_BODY(TestReadInteractionSync, TestReadHandlerMalformedSubscribeRequest)
+void TestReadInteraction::TestReadHandlerMalformedSubscribeRequest()
 {
 
     Messaging::ReliableMessageMgr * rm = GetExchangeManager().GetReliableMessageMgr();
@@ -4369,7 +4433,9 @@ TEST_F_FROM_FIXTURE(TestReadInteraction, TestReadHandlerMalformedSubscribeReques
 
 // Read Client sends a malformed read request, interaction model engine fails to parse the request and generates a status report
 // to client, and client is closed.
-TEST_F_FROM_FIXTURE(TestReadInteraction, TestReadHandlerMalformedReadRequest1)
+TEST_F_FROM_FIXTURE_NO_BODY(TestReadInteraction, TestReadHandlerMalformedReadRequest1)
+TEST_F_FROM_FIXTURE_NO_BODY(TestReadInteractionSync, TestReadHandlerMalformedReadRequest1)
+void TestReadInteraction::TestReadHandlerMalformedReadRequest1()
 {
 
     Messaging::ReliableMessageMgr * rm = GetExchangeManager().GetReliableMessageMgr();
@@ -4411,7 +4477,9 @@ TEST_F_FROM_FIXTURE(TestReadInteraction, TestReadHandlerMalformedReadRequest1)
 
 // Read Client sends a malformed read request, read handler fails to parse the request and generates a status report to client,
 // and client is closed.
-TEST_F_FROM_FIXTURE(TestReadInteraction, TestReadHandlerMalformedReadRequest2)
+TEST_F_FROM_FIXTURE_NO_BODY(TestReadInteraction, TestReadHandlerMalformedReadRequest2)
+TEST_F_FROM_FIXTURE_NO_BODY(TestReadInteractionSync, TestReadHandlerMalformedReadRequest2)
+void TestReadInteraction::TestReadHandlerMalformedReadRequest2()
 {
 
     Messaging::ReliableMessageMgr * rm = GetExchangeManager().GetReliableMessageMgr();
@@ -4454,7 +4522,9 @@ TEST_F_FROM_FIXTURE(TestReadInteraction, TestReadHandlerMalformedReadRequest2)
 
 // Read Client creates a subscription with the server, server sends chunked reports, after the handler sends out the first
 // chunked report, client sends out invalid write request message, handler sends status report with invalid action and closes
-TEST_F_FROM_FIXTURE(TestReadInteraction, TestSubscribeSendUnknownMessage)
+TEST_F_FROM_FIXTURE_NO_BODY(TestReadInteraction, TestSubscribeSendUnknownMessage)
+TEST_F_FROM_FIXTURE_NO_BODY(TestReadInteractionSync, TestSubscribeSendUnknownMessage)
+void TestReadInteraction::TestSubscribeSendUnknownMessage()
 {
 
     Messaging::ReliableMessageMgr * rm = GetExchangeManager().GetReliableMessageMgr();
@@ -4528,7 +4598,9 @@ TEST_F_FROM_FIXTURE(TestReadInteraction, TestSubscribeSendUnknownMessage)
 
 // Read Client creates a subscription with the server, server sends chunked reports, after the handler sends out invalid status
 // report, client sends out invalid status report message, handler sends status report with invalid action and close
-TEST_F_FROM_FIXTURE(TestReadInteraction, TestSubscribeSendInvalidStatusReport)
+TEST_F_FROM_FIXTURE_NO_BODY(TestReadInteraction, TestSubscribeSendInvalidStatusReport)
+TEST_F_FROM_FIXTURE_NO_BODY(TestReadInteractionSync, TestSubscribeSendInvalidStatusReport)
+void TestReadInteraction::TestSubscribeSendInvalidStatusReport()
 {
 
     Messaging::ReliableMessageMgr * rm = GetExchangeManager().GetReliableMessageMgr();
@@ -4599,7 +4671,9 @@ TEST_F_FROM_FIXTURE(TestReadInteraction, TestSubscribeSendInvalidStatusReport)
 
 // Read Client sends a malformed subscribe request, the server fails to parse the request and generates a status report to the
 // client, and client closes itself.
-TEST_F_FROM_FIXTURE(TestReadInteraction, TestReadHandlerInvalidSubscribeRequest)
+TEST_F_FROM_FIXTURE_NO_BODY(TestReadInteraction, TestReadHandlerInvalidSubscribeRequest)
+TEST_F_FROM_FIXTURE_NO_BODY(TestReadInteractionSync, TestReadHandlerInvalidSubscribeRequest)
+void TestReadInteraction::TestReadHandlerInvalidSubscribeRequest()
 {
 
     Messaging::ReliableMessageMgr * rm = GetExchangeManager().GetReliableMessageMgr();
@@ -4696,7 +4770,9 @@ TEST_F(TestReadInteraction, TestSubscribeInvalidateFabric)
     EXPECT_EQ(GetExchangeManager().GetNumActiveExchanges(), 0u);
 }
 
-TEST_F_FROM_FIXTURE(TestReadInteraction, TestShutdownSubscription)
+TEST_F_FROM_FIXTURE_NO_BODY(TestReadInteraction, TestShutdownSubscription)
+TEST_F_FROM_FIXTURE_NO_BODY(TestReadInteractionSync, TestShutdownSubscription)
+void TestReadInteraction::TestShutdownSubscription()
 {
 
     Messaging::ReliableMessageMgr * rm = GetExchangeManager().GetReliableMessageMgr();
@@ -4747,7 +4823,9 @@ TEST_F_FROM_FIXTURE(TestReadInteraction, TestShutdownSubscription)
  * session it has is defunct.  Makes sure we correctly tear down the ReadHandler
  * and don't increment the "reports in flight" count.
  */
-TEST_F_FROM_FIXTURE(TestReadInteraction, TestSubscriptionReportWithDefunctSession)
+TEST_F_FROM_FIXTURE_NO_BODY(TestReadInteraction, TestSubscriptionReportWithDefunctSession)
+TEST_F_FROM_FIXTURE_NO_BODY(TestReadInteractionSync, TestSubscriptionReportWithDefunctSession)
+void TestReadInteraction::TestSubscriptionReportWithDefunctSession()
 {
 
     Messaging::ReliableMessageMgr * rm = GetExchangeManager().GetReliableMessageMgr();
diff --git a/src/lib/support/tests/ExtraPwTestMacros.h b/src/lib/support/tests/ExtraPwTestMacros.h
index ab592800716592..6eda462f803db5 100644
--- a/src/lib/support/tests/ExtraPwTestMacros.h
+++ b/src/lib/support/tests/ExtraPwTestMacros.h
@@ -17,8 +17,9 @@
  */
 #pragma once
 
-/*
+/**
  * Run Fixture's class function as a test.
+ *
  * It is used to execute test cases that need to use private members of a particular class.
  * Unlike the pigweed macro `FRIEND_TEST`, this approach allows you to define the entire
  * test_fixture class as a friend, rather than having to define each testcase as a friend.
@@ -54,3 +55,16 @@
         test_name();                                                                                                               \
     }                                                                                                                              \
     void test_fixture::test_name()
+
+/**
+ * Run Fixture's class function as a test.
+ *
+ * This macro does not define the body of the test function. It can be used to
+ * run a single test case which needs to be run against different fixtures.
+ *
+ */
+#define TEST_F_FROM_FIXTURE_NO_BODY(test_fixture, test_name)                                                                       \
+    TEST_F(test_fixture, test_name)                                                                                                \
+    {                                                                                                                              \
+        test_name();                                                                                                               \
+    }

From 22bff985924724c991e1ebc2c5146912183bac4c Mon Sep 17 00:00:00 2001
From: Arkadiusz Bokowy <a.bokowy@samsung.com>
Date: Thu, 31 Oct 2024 10:30:26 +0100
Subject: [PATCH 2/4] Run all unit tests on both fixtures

---
 src/app/tests/TestReadInteraction.cpp | 169 ++++++++++++++++++--------
 1 file changed, 119 insertions(+), 50 deletions(-)

diff --git a/src/app/tests/TestReadInteraction.cpp b/src/app/tests/TestReadInteraction.cpp
index a6a103f674c81b..6bb96dcb850ac0 100644
--- a/src/app/tests/TestReadInteraction.cpp
+++ b/src/app/tests/TestReadInteraction.cpp
@@ -336,43 +336,66 @@ class TestReadInteraction : public chip::Test::AppContext
         AppContext::TearDown();
     }
 
+    void TestICDProcessSubscribeRequestInfMaxIntervalCeiling();
+    void TestICDProcessSubscribeRequestInvalidIdleModeDuration();
+    void TestICDProcessSubscribeRequestMaxMinInterval();
+    void TestICDProcessSubscribeRequestSupMaxIntervalCeiling();
+    void TestICDProcessSubscribeRequestSupMinInterval();
+    void TestPostSubscribeRoundtripChunkReport();
+    void TestPostSubscribeRoundtripChunkReportTimeout();
+    void TestPostSubscribeRoundtripChunkStatusReportTimeout();
+    void TestPostSubscribeRoundtripStatusReportTimeout();
+    void TestProcessSubscribeRequest();
+    void TestReadChunking();
+    void TestReadChunkingInvalidSubscriptionId();
+    void TestReadChunkingStatusReportTimeout();
     void TestReadClient();
-    void TestReadUnexpectedSubscriptionId();
-    void TestReadHandler();
-    void TestReadHandlerSetMaxReportingInterval();
     void TestReadClientGenerateAttributePathList();
     void TestReadClientGenerateInvalidAttributePathList();
-    void TestReadClientInvalidReport();
-    void TestReadClientInvalidAttributeId();
-    void TestReadHandlerInvalidAttributePath();
     void TestReadClientGenerateOneEventPaths();
     void TestReadClientGenerateTwoEventPaths();
-    void TestProcessSubscribeRequest();
-    void TestICDProcessSubscribeRequestSupMaxIntervalCeiling();
-    void TestICDProcessSubscribeRequestInfMaxIntervalCeiling();
-    void TestICDProcessSubscribeRequestSupMinInterval();
-    void TestICDProcessSubscribeRequestMaxMinInterval();
-    void TestICDProcessSubscribeRequestInvalidIdleModeDuration();
-    void TestSubscribeRoundtrip();
-    void TestSubscribeEarlyReport();
-    void TestSubscribeUrgentWildcardEvent();
-    void TestSubscribeInvalidAttributePathRoundtrip();
-    void TestPostSubscribeRoundtripStatusReportTimeout();
+    void TestReadClientInvalidAttributeId();
+    void TestReadClientInvalidReport();
     void TestReadClientReceiveInvalidMessage();
-    void TestSubscribeClientReceiveInvalidStatusResponse();
-    void TestSubscribeClientReceiveWellFormedStatusResponse();
+    void TestReadHandler();
+    void TestReadHandlerInvalidAttributePath();
+    void TestReadHandlerInvalidSubscribeRequest();
+    void TestReadHandlerMalformedReadRequest1();
+    void TestReadHandlerMalformedReadRequest2();
+    void TestReadHandlerMalformedSubscribeRequest();
+    void TestReadHandlerSetMaxReportingInterval();
+    void TestReadInvalidAttributePathRoundtrip();
+    void TestReadReportFailure();
+    void TestReadRoundtrip();
+    void TestReadRoundtripWithDataVersionFilter();
+    void TestReadRoundtripWithMultiSamePathDifferentDataVersionFilter();
+    void TestReadRoundtripWithNoMatchPathDataVersionFilter();
+    void TestReadRoundtripWithSameDifferentPathsDataVersionFilter();
+    void TestReadShutdown();
+    void TestReadUnexpectedSubscriptionId();
+    void TestReadWildcard();
+    void TestSetDirtyBetweenChunks();
+    void TestShutdownSubscription();
     void TestSubscribeClientReceiveInvalidReportMessage();
-    void TestSubscribeClientReceiveUnsolicitedInvalidReportMessage();
+    void TestSubscribeClientReceiveInvalidStatusResponse();
     void TestSubscribeClientReceiveInvalidSubscribeResponseMessage();
+    void TestSubscribeClientReceiveUnsolicitedInvalidReportMessage();
     void TestSubscribeClientReceiveUnsolicitedReportMessageWithInvalidSubscriptionId();
-    void TestReadChunkingInvalidSubscriptionId();
-    void TestReadHandlerMalformedSubscribeRequest();
-    void TestReadHandlerMalformedReadRequest1();
-    void TestReadHandlerMalformedReadRequest2();
-    void TestSubscribeSendUnknownMessage();
+    void TestSubscribeClientReceiveWellFormedStatusResponse();
+    void TestSubscribeEarlyReport();
+    void TestSubscribeEarlyShutdown();
+    void TestSubscribeInvalidateFabric();
+    void TestSubscribeInvalidAttributePathRoundtrip();
+    void TestSubscribeInvalidInterval();
+    void TestSubscribePartialOverlap();
+    void TestSubscribeRoundtrip();
+    void TestSubscribeRoundtripChunkStatusReportTimeout();
+    void TestSubscribeRoundtripStatusReportTimeout();
     void TestSubscribeSendInvalidStatusReport();
-    void TestReadHandlerInvalidSubscribeRequest();
-    void TestShutdownSubscription();
+    void TestSubscribeSendUnknownMessage();
+    void TestSubscribeSetDirtyFullyOverlap();
+    void TestSubscribeUrgentWildcardEvent();
+    void TestSubscribeWildcard();
     void TestSubscriptionReportWithDefunctSession();
 
     enum class ReportType : uint8_t
@@ -951,7 +974,9 @@ void TestReadInteraction::TestReadClientGenerateTwoEventPaths()
     EXPECT_EQ(GetExchangeManager().GetNumActiveExchanges(), 0u);
 }
 
-TEST_F(TestReadInteraction, TestReadRoundtrip)
+TEST_F_FROM_FIXTURE_NO_BODY(TestReadInteraction, TestReadRoundtrip)
+TEST_F_FROM_FIXTURE_NO_BODY(TestReadInteractionSync, TestReadRoundtrip)
+void TestReadInteraction::TestReadRoundtrip()
 {
 
     Messaging::ReliableMessageMgr * rm = GetExchangeManager().GetReliableMessageMgr();
@@ -1028,7 +1053,9 @@ TEST_F(TestReadInteraction, TestReadRoundtrip)
     EXPECT_EQ(GetExchangeManager().GetNumActiveExchanges(), 0u);
 }
 
-TEST_F(TestReadInteraction, TestReadRoundtripWithDataVersionFilter)
+TEST_F_FROM_FIXTURE_NO_BODY(TestReadInteraction, TestReadRoundtripWithDataVersionFilter)
+TEST_F_FROM_FIXTURE_NO_BODY(TestReadInteractionSync, TestReadRoundtripWithDataVersionFilter)
+void TestReadInteraction::TestReadRoundtripWithDataVersionFilter()
 {
 
     Messaging::ReliableMessageMgr * rm = GetExchangeManager().GetReliableMessageMgr();
@@ -1080,7 +1107,9 @@ TEST_F(TestReadInteraction, TestReadRoundtripWithDataVersionFilter)
     EXPECT_EQ(GetExchangeManager().GetNumActiveExchanges(), 0u);
 }
 
-TEST_F(TestReadInteraction, TestReadRoundtripWithNoMatchPathDataVersionFilter)
+TEST_F_FROM_FIXTURE_NO_BODY(TestReadInteraction, TestReadRoundtripWithNoMatchPathDataVersionFilter)
+TEST_F_FROM_FIXTURE_NO_BODY(TestReadInteractionSync, TestReadRoundtripWithNoMatchPathDataVersionFilter)
+void TestReadInteraction::TestReadRoundtripWithNoMatchPathDataVersionFilter()
 {
 
     Messaging::ReliableMessageMgr * rm = GetExchangeManager().GetReliableMessageMgr();
@@ -1136,7 +1165,9 @@ TEST_F(TestReadInteraction, TestReadRoundtripWithNoMatchPathDataVersionFilter)
     EXPECT_EQ(GetExchangeManager().GetNumActiveExchanges(), 0u);
 }
 
-TEST_F(TestReadInteraction, TestReadRoundtripWithMultiSamePathDifferentDataVersionFilter)
+TEST_F_FROM_FIXTURE_NO_BODY(TestReadInteraction, TestReadRoundtripWithMultiSamePathDifferentDataVersionFilter)
+TEST_F_FROM_FIXTURE_NO_BODY(TestReadInteractionSync, TestReadRoundtripWithMultiSamePathDifferentDataVersionFilter)
+void TestReadInteraction::TestReadRoundtripWithMultiSamePathDifferentDataVersionFilter()
 {
 
     Messaging::ReliableMessageMgr * rm = GetExchangeManager().GetReliableMessageMgr();
@@ -1193,7 +1224,9 @@ TEST_F(TestReadInteraction, TestReadRoundtripWithMultiSamePathDifferentDataVersi
     EXPECT_EQ(GetExchangeManager().GetNumActiveExchanges(), 0u);
 }
 
-TEST_F(TestReadInteraction, TestReadRoundtripWithSameDifferentPathsDataVersionFilter)
+TEST_F_FROM_FIXTURE_NO_BODY(TestReadInteraction, TestReadRoundtripWithSameDifferentPathsDataVersionFilter)
+TEST_F_FROM_FIXTURE_NO_BODY(TestReadInteractionSync, TestReadRoundtripWithSameDifferentPathsDataVersionFilter)
+void TestReadInteraction::TestReadRoundtripWithSameDifferentPathsDataVersionFilter()
 {
 
     Messaging::ReliableMessageMgr * rm = GetExchangeManager().GetReliableMessageMgr();
@@ -1250,7 +1283,9 @@ TEST_F(TestReadInteraction, TestReadRoundtripWithSameDifferentPathsDataVersionFi
     EXPECT_EQ(GetExchangeManager().GetNumActiveExchanges(), 0u);
 }
 
-TEST_F(TestReadInteraction, TestReadWildcard)
+TEST_F_FROM_FIXTURE_NO_BODY(TestReadInteraction, TestReadWildcard)
+TEST_F_FROM_FIXTURE_NO_BODY(TestReadInteractionSync, TestReadWildcard)
+void TestReadInteraction::TestReadWildcard()
 {
 
     Messaging::ReliableMessageMgr * rm = GetExchangeManager().GetReliableMessageMgr();
@@ -1296,7 +1331,9 @@ TEST_F(TestReadInteraction, TestReadWildcard)
 }
 
 // TestReadChunking will try to read a few large attributes, the report won't fit into the MTU and result in chunking.
-TEST_F(TestReadInteraction, TestReadChunking)
+TEST_F_FROM_FIXTURE_NO_BODY(TestReadInteraction, TestReadChunking)
+TEST_F_FROM_FIXTURE_NO_BODY(TestReadInteractionSync, TestReadChunking)
+void TestReadInteraction::TestReadChunking()
 {
 
     Messaging::ReliableMessageMgr * rm = GetExchangeManager().GetReliableMessageMgr();
@@ -1348,7 +1385,9 @@ TEST_F(TestReadInteraction, TestReadChunking)
     EXPECT_EQ(GetExchangeManager().GetNumActiveExchanges(), 0u);
 }
 
-TEST_F(TestReadInteraction, TestSetDirtyBetweenChunks)
+TEST_F_FROM_FIXTURE_NO_BODY(TestReadInteraction, TestSetDirtyBetweenChunks)
+TEST_F_FROM_FIXTURE_NO_BODY(TestReadInteractionSync, TestSetDirtyBetweenChunks)
+void TestReadInteraction::TestSetDirtyBetweenChunks()
 {
 
     Messaging::ReliableMessageMgr * rm = GetExchangeManager().GetReliableMessageMgr();
@@ -1496,7 +1535,9 @@ TEST_F(TestReadInteraction, TestSetDirtyBetweenChunks)
     EXPECT_EQ(GetExchangeManager().GetNumActiveExchanges(), 0u);
 }
 
-TEST_F(TestReadInteraction, TestReadInvalidAttributePathRoundtrip)
+TEST_F_FROM_FIXTURE_NO_BODY(TestReadInteraction, TestReadInvalidAttributePathRoundtrip)
+TEST_F_FROM_FIXTURE_NO_BODY(TestReadInteractionSync, TestReadInvalidAttributePathRoundtrip)
+void TestReadInteraction::TestReadInvalidAttributePathRoundtrip()
 {
 
     Messaging::ReliableMessageMgr * rm = GetExchangeManager().GetReliableMessageMgr();
@@ -2546,7 +2587,9 @@ void TestReadInteraction::TestSubscribeUrgentWildcardEvent()
     EXPECT_EQ(GetExchangeManager().GetNumActiveExchanges(), 0u);
 }
 
-TEST_F(TestReadInteraction, TestSubscribeWildcard)
+TEST_F_FROM_FIXTURE_NO_BODY(TestReadInteraction, TestSubscribeWildcard)
+TEST_F_FROM_FIXTURE_NO_BODY(TestReadInteractionSync, TestSubscribeWildcard)
+void TestReadInteraction::TestSubscribeWildcard()
 {
     // This test in particular is completely tied to the DefaultMockConfig in the mock
     // attribute storage, so reset to that (figuring out chunking location is extra hard to
@@ -2684,7 +2727,9 @@ TEST_F(TestReadInteraction, TestSubscribeWildcard)
 }
 
 // Subscribe (wildcard, C3, A1), then setDirty (E2, C3, wildcard), receive one attribute after setDirty
-TEST_F(TestReadInteraction, TestSubscribePartialOverlap)
+TEST_F_FROM_FIXTURE_NO_BODY(TestReadInteraction, TestSubscribePartialOverlap)
+TEST_F_FROM_FIXTURE_NO_BODY(TestReadInteractionSync, TestSubscribePartialOverlap)
+void TestReadInteraction::TestSubscribePartialOverlap()
 {
 
     Messaging::ReliableMessageMgr * rm = GetExchangeManager().GetReliableMessageMgr();
@@ -2754,7 +2799,9 @@ TEST_F(TestReadInteraction, TestSubscribePartialOverlap)
 }
 
 // Subscribe (E2, C3, A1), then setDirty (wildcard, wildcard, wildcard), receive one attribute after setDirty
-TEST_F(TestReadInteraction, TestSubscribeSetDirtyFullyOverlap)
+TEST_F_FROM_FIXTURE_NO_BODY(TestReadInteraction, TestSubscribeSetDirtyFullyOverlap)
+TEST_F_FROM_FIXTURE_NO_BODY(TestReadInteractionSync, TestSubscribeSetDirtyFullyOverlap)
+void TestReadInteraction::TestSubscribeSetDirtyFullyOverlap()
 {
 
     Messaging::ReliableMessageMgr * rm = GetExchangeManager().GetReliableMessageMgr();
@@ -2823,7 +2870,9 @@ TEST_F(TestReadInteraction, TestSubscribeSetDirtyFullyOverlap)
 
 // Verify that subscription can be shut down just after receiving SUBSCRIBE RESPONSE,
 // before receiving any subsequent REPORT DATA.
-TEST_F(TestReadInteraction, TestSubscribeEarlyShutdown)
+TEST_F_FROM_FIXTURE_NO_BODY(TestReadInteraction, TestSubscribeEarlyShutdown)
+TEST_F_FROM_FIXTURE_NO_BODY(TestReadInteractionSync, TestSubscribeEarlyShutdown)
+void TestReadInteraction::TestSubscribeEarlyShutdown()
 {
     Messaging::ReliableMessageMgr * rm = GetExchangeManager().GetReliableMessageMgr();
     InteractionModelEngine & engine    = *InteractionModelEngine::GetInstance();
@@ -2940,7 +2989,9 @@ void TestReadInteraction::TestSubscribeInvalidAttributePathRoundtrip()
     EXPECT_EQ(GetExchangeManager().GetNumActiveExchanges(), 0u);
 }
 
-TEST_F(TestReadInteraction, TestReadShutdown)
+TEST_F_FROM_FIXTURE_NO_BODY(TestReadInteraction, TestReadShutdown)
+TEST_F_FROM_FIXTURE_NO_BODY(TestReadInteractionSync, TestReadShutdown)
+void TestReadInteraction::TestReadShutdown()
 {
     auto * engine = chip::app::InteractionModelEngine::GetInstance();
     app::ReadClient * pClients[4];
@@ -2977,7 +3028,9 @@ TEST_F(TestReadInteraction, TestReadShutdown)
     Platform::Delete(pClients[2]);
 }
 
-TEST_F(TestReadInteraction, TestSubscribeInvalidInterval)
+TEST_F_FROM_FIXTURE_NO_BODY(TestReadInteraction, TestSubscribeInvalidInterval)
+TEST_F_FROM_FIXTURE_NO_BODY(TestReadInteractionSync, TestSubscribeInvalidInterval)
+void TestReadInteraction::TestSubscribeInvalidInterval()
 {
 
     Messaging::ReliableMessageMgr * rm = GetExchangeManager().GetReliableMessageMgr();
@@ -3140,7 +3193,9 @@ void TestReadInteraction::TestPostSubscribeRoundtripStatusReportTimeout()
     CreateSessionBobToAlice();
 }
 
-TEST_F(TestReadInteraction, TestSubscribeRoundtripStatusReportTimeout)
+TEST_F_FROM_FIXTURE_NO_BODY(TestReadInteraction, TestSubscribeRoundtripStatusReportTimeout)
+TEST_F_FROM_FIXTURE_NO_BODY(TestReadInteractionSync, TestSubscribeRoundtripStatusReportTimeout)
+void TestReadInteraction::TestSubscribeRoundtripStatusReportTimeout()
 {
 
     Messaging::ReliableMessageMgr * rm = GetExchangeManager().GetReliableMessageMgr();
@@ -3213,7 +3268,9 @@ TEST_F(TestReadInteraction, TestSubscribeRoundtripStatusReportTimeout)
     CreateSessionBobToAlice();
 }
 
-TEST_F(TestReadInteraction, TestReadChunkingStatusReportTimeout)
+TEST_F_FROM_FIXTURE_NO_BODY(TestReadInteraction, TestReadChunkingStatusReportTimeout)
+TEST_F_FROM_FIXTURE_NO_BODY(TestReadInteractionSync, TestReadChunkingStatusReportTimeout)
+void TestReadInteraction::TestReadChunkingStatusReportTimeout()
 {
 
     Messaging::ReliableMessageMgr * rm = GetExchangeManager().GetReliableMessageMgr();
@@ -3265,7 +3322,9 @@ TEST_F(TestReadInteraction, TestReadChunkingStatusReportTimeout)
 // ReadClient sends the read request, but handler fails to send the one report (SendMessage returns an error).
 // Since this is an un-chunked read, we are not in the AwaitingReportResponse state, so the "reports in flight"
 // counter should not increase.
-TEST_F(TestReadInteraction, TestReadReportFailure)
+TEST_F_FROM_FIXTURE_NO_BODY(TestReadInteraction, TestReadReportFailure)
+TEST_F_FROM_FIXTURE_NO_BODY(TestReadInteractionSync, TestReadReportFailure)
+void TestReadInteraction::TestReadReportFailure()
 {
 
     Messaging::ReliableMessageMgr * rm = GetExchangeManager().GetReliableMessageMgr();
@@ -3309,7 +3368,9 @@ TEST_F(TestReadInteraction, TestReadReportFailure)
     EXPECT_EQ(GetExchangeManager().GetNumActiveExchanges(), 0u);
 }
 
-TEST_F(TestReadInteraction, TestSubscribeRoundtripChunkStatusReportTimeout)
+TEST_F_FROM_FIXTURE_NO_BODY(TestReadInteraction, TestSubscribeRoundtripChunkStatusReportTimeout)
+TEST_F_FROM_FIXTURE_NO_BODY(TestReadInteractionSync, TestSubscribeRoundtripChunkStatusReportTimeout)
+void TestReadInteraction::TestSubscribeRoundtripChunkStatusReportTimeout()
 {
 
     Messaging::ReliableMessageMgr * rm = GetExchangeManager().GetReliableMessageMgr();
@@ -3377,7 +3438,9 @@ TEST_F(TestReadInteraction, TestSubscribeRoundtripChunkStatusReportTimeout)
     CreateSessionBobToAlice();
 }
 
-TEST_F(TestReadInteraction, TestPostSubscribeRoundtripChunkStatusReportTimeout)
+TEST_F_FROM_FIXTURE_NO_BODY(TestReadInteraction, TestPostSubscribeRoundtripChunkStatusReportTimeout)
+TEST_F_FROM_FIXTURE_NO_BODY(TestReadInteractionSync, TestPostSubscribeRoundtripChunkStatusReportTimeout)
+void TestReadInteraction::TestPostSubscribeRoundtripChunkStatusReportTimeout()
 {
 
     Messaging::ReliableMessageMgr * rm = GetExchangeManager().GetReliableMessageMgr();
@@ -3476,7 +3539,9 @@ TEST_F(TestReadInteraction, TestPostSubscribeRoundtripChunkStatusReportTimeout)
     CreateSessionBobToAlice();
 }
 
-TEST_F(TestReadInteraction, TestPostSubscribeRoundtripChunkReportTimeout)
+TEST_F_FROM_FIXTURE_NO_BODY(TestReadInteraction, TestPostSubscribeRoundtripChunkReportTimeout)
+TEST_F_FROM_FIXTURE_NO_BODY(TestReadInteractionSync, TestPostSubscribeRoundtripChunkReportTimeout)
+void TestReadInteraction::TestPostSubscribeRoundtripChunkReportTimeout()
 {
 
     Messaging::ReliableMessageMgr * rm = GetExchangeManager().GetReliableMessageMgr();
@@ -3574,7 +3639,9 @@ TEST_F(TestReadInteraction, TestPostSubscribeRoundtripChunkReportTimeout)
     CreateSessionBobToAlice();
 }
 
-TEST_F(TestReadInteraction, TestPostSubscribeRoundtripChunkReport)
+TEST_F_FROM_FIXTURE_NO_BODY(TestReadInteraction, TestPostSubscribeRoundtripChunkReport)
+TEST_F_FROM_FIXTURE_NO_BODY(TestReadInteractionSync, TestPostSubscribeRoundtripChunkReport)
+void TestReadInteraction::TestPostSubscribeRoundtripChunkReport()
 {
 
     Messaging::ReliableMessageMgr * rm = GetExchangeManager().GetReliableMessageMgr();
@@ -4715,7 +4782,9 @@ void TestReadInteraction::TestReadHandlerInvalidSubscribeRequest()
 
 // Create the subscription, then remove the corresponding fabric in client and handler, the corresponding
 // client and handler would be released as well.
-TEST_F(TestReadInteraction, TestSubscribeInvalidateFabric)
+TEST_F_FROM_FIXTURE_NO_BODY(TestReadInteraction, TestSubscribeInvalidateFabric)
+TEST_F_FROM_FIXTURE_NO_BODY(TestReadInteractionSync, TestSubscribeInvalidateFabric)
+void TestReadInteraction::TestSubscribeInvalidateFabric()
 {
 
     Messaging::ReliableMessageMgr * rm = GetExchangeManager().GetReliableMessageMgr();

From 683ca41442c5386ef215bb300caed98fb7e73306 Mon Sep 17 00:00:00 2001
From: "Restyled.io" <commits@restyled.io>
Date: Thu, 31 Oct 2024 09:33:26 +0000
Subject: [PATCH 3/4] Restyled by clang-format

---
 src/app/tests/TestReadInteraction.cpp | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/src/app/tests/TestReadInteraction.cpp b/src/app/tests/TestReadInteraction.cpp
index 6bb96dcb850ac0..befc104f956664 100644
--- a/src/app/tests/TestReadInteraction.cpp
+++ b/src/app/tests/TestReadInteraction.cpp
@@ -1422,7 +1422,8 @@ void TestReadInteraction::TestSetDirtyBetweenChunks()
         public:
             DirtyingMockDelegate(AttributePathParams (&aReadPaths)[2], int & aNumAttributeResponsesWhenSetDirty,
                                  int & aNumArrayItemsWhenSetDirty) :
-                mReadPaths(aReadPaths), mNumAttributeResponsesWhenSetDirty(aNumAttributeResponsesWhenSetDirty),
+                mReadPaths(aReadPaths),
+                mNumAttributeResponsesWhenSetDirty(aNumAttributeResponsesWhenSetDirty),
                 mNumArrayItemsWhenSetDirty(aNumArrayItemsWhenSetDirty)
             {}
 

From dbd689aa43ca0b6be1852262550d5ce481c358d4 Mon Sep 17 00:00:00 2001
From: Arkadiusz Bokowy <a.bokowy@samsung.com>
Date: Mon, 4 Nov 2024 10:59:30 +0100
Subject: [PATCH 4/4] Fix issues reported by clang-tidy

---
 src/app/tests/TestReadInteraction.cpp | 48 +++++++++++++++------------
 1 file changed, 26 insertions(+), 22 deletions(-)

diff --git a/src/app/tests/TestReadInteraction.cpp b/src/app/tests/TestReadInteraction.cpp
index befc104f956664..f997266b935c09 100644
--- a/src/app/tests/TestReadInteraction.cpp
+++ b/src/app/tests/TestReadInteraction.cpp
@@ -2611,10 +2611,10 @@ void TestReadInteraction::TestSubscribeWildcard()
     ReadPrepareParams readPrepareParams(GetSessionBobToAlice());
     readPrepareParams.mEventPathParamsListSize = 0;
 
-    std::unique_ptr<chip::app::AttributePathParams[]> attributePathParams(new chip::app::AttributePathParams[2]);
-    // Subscribe to full wildcard paths, repeat twice to ensure chunking.
-    readPrepareParams.mpAttributePathParamsList    = attributePathParams.get();
     readPrepareParams.mAttributePathParamsListSize = 2;
+    auto attributePathParams = std::make_unique<chip::app::AttributePathParams[]>(readPrepareParams.mAttributePathParamsListSize);
+    // Subscribe to full wildcard paths, repeat twice to ensure chunking.
+    readPrepareParams.mpAttributePathParamsList = attributePathParams.get();
 
     readPrepareParams.mMinIntervalFloorSeconds   = 0;
     readPrepareParams.mMaxIntervalCeilingSeconds = 1;
@@ -2745,11 +2745,11 @@ void TestReadInteraction::TestSubscribePartialOverlap()
     ReadPrepareParams readPrepareParams(GetSessionBobToAlice());
     readPrepareParams.mEventPathParamsListSize = 0;
 
-    std::unique_ptr<chip::app::AttributePathParams[]> attributePathParams(new chip::app::AttributePathParams[2]);
-    attributePathParams[0].mClusterId              = chip::Test::MockClusterId(3);
-    attributePathParams[0].mAttributeId            = chip::Test::MockAttributeId(1);
-    readPrepareParams.mpAttributePathParamsList    = attributePathParams.get();
     readPrepareParams.mAttributePathParamsListSize = 1;
+    auto attributePathParams = std::make_unique<chip::app::AttributePathParams[]>(readPrepareParams.mAttributePathParamsListSize);
+    attributePathParams[0].mClusterId           = chip::Test::MockClusterId(3);
+    attributePathParams[0].mAttributeId         = chip::Test::MockAttributeId(1);
+    readPrepareParams.mpAttributePathParamsList = attributePathParams.get();
 
     readPrepareParams.mMinIntervalFloorSeconds   = 0;
     readPrepareParams.mMaxIntervalCeilingSeconds = 1;
@@ -2817,12 +2817,12 @@ void TestReadInteraction::TestSubscribeSetDirtyFullyOverlap()
     ReadPrepareParams readPrepareParams(GetSessionBobToAlice());
     readPrepareParams.mEventPathParamsListSize = 0;
 
-    std::unique_ptr<chip::app::AttributePathParams[]> attributePathParams(new chip::app::AttributePathParams[1]);
-    attributePathParams[0].mClusterId              = chip::Test::kMockEndpoint2;
-    attributePathParams[0].mClusterId              = chip::Test::MockClusterId(3);
-    attributePathParams[0].mAttributeId            = chip::Test::MockAttributeId(1);
-    readPrepareParams.mpAttributePathParamsList    = attributePathParams.get();
     readPrepareParams.mAttributePathParamsListSize = 1;
+    auto attributePathParams = std::make_unique<chip::app::AttributePathParams[]>(readPrepareParams.mAttributePathParamsListSize);
+    attributePathParams[0].mEndpointId          = chip::Test::kMockEndpoint2;
+    attributePathParams[0].mClusterId           = chip::Test::MockClusterId(3);
+    attributePathParams[0].mAttributeId         = chip::Test::MockAttributeId(1);
+    readPrepareParams.mpAttributePathParamsList = attributePathParams.get();
 
     readPrepareParams.mMinIntervalFloorSeconds   = 0;
     readPrepareParams.mMaxIntervalCeilingSeconds = 1;
@@ -4799,12 +4799,13 @@ void TestReadInteraction::TestSubscribeInvalidateFabric()
     EXPECT_EQ(engine->Init(&GetExchangeManager(), &GetFabricTable(), gReportScheduler), CHIP_NO_ERROR);
 
     ReadPrepareParams readPrepareParams(GetSessionBobToAlice());
-    readPrepareParams.mpAttributePathParamsList    = new chip::app::AttributePathParams[1];
-    readPrepareParams.mAttributePathParamsListSize = 1;
 
-    readPrepareParams.mpAttributePathParamsList[0].mEndpointId  = chip::Test::kMockEndpoint3;
-    readPrepareParams.mpAttributePathParamsList[0].mClusterId   = chip::Test::MockClusterId(2);
-    readPrepareParams.mpAttributePathParamsList[0].mAttributeId = chip::Test::MockAttributeId(1);
+    readPrepareParams.mAttributePathParamsListSize = 1;
+    auto attributePathParams = std::make_unique<chip::app::AttributePathParams[]>(readPrepareParams.mAttributePathParamsListSize);
+    attributePathParams[0].mEndpointId          = chip::Test::kMockEndpoint3;
+    attributePathParams[0].mClusterId           = chip::Test::MockClusterId(2);
+    attributePathParams[0].mAttributeId         = chip::Test::MockAttributeId(1);
+    readPrepareParams.mpAttributePathParamsList = attributePathParams.get();
 
     readPrepareParams.mMinIntervalFloorSeconds   = 0;
     readPrepareParams.mMaxIntervalCeilingSeconds = 0;
@@ -4815,6 +4816,7 @@ void TestReadInteraction::TestSubscribeInvalidateFabric()
 
         delegate.mGotReport = false;
 
+        attributePathParams.release();
         EXPECT_EQ(readClient.SendAutoResubscribeRequest(std::move(readPrepareParams)), CHIP_NO_ERROR);
 
         DrainAndServiceIO();
@@ -4856,12 +4858,13 @@ void TestReadInteraction::TestShutdownSubscription()
     EXPECT_EQ(engine->Init(&GetExchangeManager(), &GetFabricTable(), gReportScheduler), CHIP_NO_ERROR);
 
     ReadPrepareParams readPrepareParams(GetSessionBobToAlice());
-    readPrepareParams.mpAttributePathParamsList    = new chip::app::AttributePathParams[1];
-    readPrepareParams.mAttributePathParamsListSize = 1;
 
-    readPrepareParams.mpAttributePathParamsList[0].mEndpointId  = chip::Test::kMockEndpoint3;
-    readPrepareParams.mpAttributePathParamsList[0].mClusterId   = chip::Test::MockClusterId(2);
-    readPrepareParams.mpAttributePathParamsList[0].mAttributeId = chip::Test::MockAttributeId(1);
+    readPrepareParams.mAttributePathParamsListSize = 1;
+    auto attributePathParams = std::make_unique<chip::app::AttributePathParams[]>(readPrepareParams.mAttributePathParamsListSize);
+    attributePathParams[0].mEndpointId          = chip::Test::kMockEndpoint3;
+    attributePathParams[0].mClusterId           = chip::Test::MockClusterId(2);
+    attributePathParams[0].mAttributeId         = chip::Test::MockAttributeId(1);
+    readPrepareParams.mpAttributePathParamsList = attributePathParams.get();
 
     readPrepareParams.mMinIntervalFloorSeconds   = 0;
     readPrepareParams.mMaxIntervalCeilingSeconds = 0;
@@ -4872,6 +4875,7 @@ void TestReadInteraction::TestShutdownSubscription()
 
         delegate.mGotReport = false;
 
+        attributePathParams.release();
         EXPECT_EQ(readClient.SendAutoResubscribeRequest(std::move(readPrepareParams)), CHIP_NO_ERROR);
 
         DrainAndServiceIO();