Skip to content

Commit c565622

Browse files
andy31415andreilitvinrestyled-commitsbzbarsky-apple
authored
Make reporting::Engine able to use DataModel::Provider for cluster version checks (project-chip#35863)
* Update repoting Engine to be able to use DataModel::Provider for version checks. * Restyle * Fix an include * Fix an include * Fix an include * Restyled by clang-format * Update src/app/reporting/Read-Ember.cpp Co-authored-by: Boris Zbarsky <bzbarsky@apple.com> --------- Co-authored-by: Andrei Litvin <andreilitvin@google.com> Co-authored-by: Restyled.io <commits@restyled.io> Co-authored-by: Boris Zbarsky <bzbarsky@apple.com>
1 parent 79386f6 commit c565622

10 files changed

+63
-8
lines changed

src/app/reporting/Engine.cpp

+6-3
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,9 @@
2323
*
2424
*/
2525

26-
#include "app/data-model-provider/ActionReturnStatus.h"
26+
#include <app/data-model-provider/ActionReturnStatus.h>
2727
#include <app/icd/server/ICDServerConfig.h>
28+
#include <app/reporting/Read-Checked.h>
2829
#if CHIP_CONFIG_ENABLE_ICD_SERVER
2930
#include <app/icd/server/ICDNotifier.h> // nogncheck
3031
#endif
@@ -72,8 +73,10 @@ bool Engine::IsClusterDataVersionMatch(const SingleLinkedListNode<DataVersionFil
7273
if (aPath.mEndpointId == filter->mValue.mEndpointId && aPath.mClusterId == filter->mValue.mClusterId)
7374
{
7475
existPathMatch = true;
75-
if (!IsClusterDataVersionEqual(ConcreteClusterPath(filter->mValue.mEndpointId, filter->mValue.mClusterId),
76-
filter->mValue.mDataVersion.Value()))
76+
77+
if (!Impl::IsClusterDataVersionEqualTo(mpImEngine->GetDataModelProvider(),
78+
ConcreteClusterPath(filter->mValue.mEndpointId, filter->mValue.mClusterId),
79+
filter->mValue.mDataVersion.Value()))
7780
{
7881
existVersionMismatch = true;
7982
}

src/app/reporting/Read-Checked.cpp

+20-2
Original file line numberDiff line numberDiff line change
@@ -14,13 +14,14 @@
1414
* See the License for the specific language governing permissions and
1515
* limitations under the License.
1616
*/
17-
#include "app/data-model-provider/ActionReturnStatus.h"
18-
#include "lib/support/StringBuilder.h"
1917
#include <app/reporting/Read-Checked.h>
2018

19+
#include <app/data-model-provider/ActionReturnStatus.h>
2120
#include <app/reporting/Read-DataModel.h>
2221
#include <app/reporting/Read-Ember.h>
2322
#include <app/util/MatterCallbacks.h>
23+
#include <lib/support/CodeUtils.h>
24+
#include <lib/support/StringBuilder.h>
2425

2526
namespace chip {
2627
namespace app {
@@ -160,6 +161,23 @@ ActionReturnStatus RetrieveClusterData(DataModel::Provider * dataModel, const Ac
160161
return statusDm;
161162
}
162163

164+
bool IsClusterDataVersionEqualTo(DataModel::Provider * dataModel, const ConcreteClusterPath & path, DataVersion dataVersion)
165+
{
166+
bool emberResult = EmberImpl::IsClusterDataVersionEqualTo(dataModel, path, dataVersion);
167+
bool dmResult = DataModelImpl::IsClusterDataVersionEqualTo(dataModel, path, dataVersion);
168+
169+
if (emberResult != dmResult)
170+
{
171+
ChipLogError(Test, "Different data model check result between ember (%s) and data model provider(%s)",
172+
emberResult ? "TRUE" : "FALSE", dmResult ? "TRUE" : "FALSE");
173+
#if CHIP_CONFIG_DATA_MODEL_CHECK_DIE_ON_FAILURE
174+
chipDie();
175+
#endif
176+
}
177+
178+
return dmResult;
179+
}
180+
163181
} // namespace CheckedImpl
164182
} // namespace reporting
165183
} // namespace app

src/app/reporting/Read-Checked.h

+2
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,8 @@ DataModel::ActionReturnStatus RetrieveClusterData(DataModel::Provider * dataMode
3333
AttributeReportIBs::Builder & reportBuilder,
3434
const ConcreteReadAttributePath & path, AttributeEncodeState * encoderState);
3535

36+
bool IsClusterDataVersionEqualTo(DataModel::Provider * dataModel, const ConcreteClusterPath & path, DataVersion dataVersion);
37+
3638
} // namespace CheckedImpl
3739
} // namespace reporting
3840
} // namespace app

src/app/reporting/Read-DataModel.cpp

+14-2
Original file line numberDiff line numberDiff line change
@@ -14,13 +14,14 @@
1414
* See the License for the specific language governing permissions and
1515
* limitations under the License.
1616
*/
17-
#include "app/data-model-provider/ActionReturnStatus.h"
18-
#include "lib/support/logging/TextOnlyLogging.h"
1917
#include <app/reporting/Read-DataModel.h>
2018

2119
#include <app/AppConfig.h>
20+
#include <app/data-model-provider/ActionReturnStatus.h>
21+
#include <app/data-model-provider/MetadataTypes.h>
2222
#include <app/data-model-provider/Provider.h>
2323
#include <app/util/MatterCallbacks.h>
24+
#include <optional>
2425

2526
namespace chip {
2627
namespace app {
@@ -101,6 +102,17 @@ DataModel::ActionReturnStatus RetrieveClusterData(DataModel::Provider * dataMode
101102
return status;
102103
}
103104

105+
bool IsClusterDataVersionEqualTo(DataModel::Provider * dataModel, const ConcreteClusterPath & path, DataVersion dataVersion)
106+
{
107+
std::optional<DataModel::ClusterInfo> info = dataModel->GetClusterInfo(path);
108+
if (!info.has_value())
109+
{
110+
return false;
111+
}
112+
113+
return (info->dataVersion == dataVersion);
114+
}
115+
104116
} // namespace DataModelImpl
105117
} // namespace reporting
106118
} // namespace app

src/app/reporting/Read-DataModel.h

+2
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,8 @@ DataModel::ActionReturnStatus RetrieveClusterData(DataModel::Provider * dataMode
3434
AttributeReportIBs::Builder & reportBuilder,
3535
const ConcreteReadAttributePath & path, AttributeEncodeState * encoderState);
3636

37+
bool IsClusterDataVersionEqualTo(DataModel::Provider * dataModel, const ConcreteClusterPath & path, DataVersion dataVersion);
38+
3739
} // namespace DataModelImpl
3840
} // namespace reporting
3941
} // namespace app

src/app/reporting/Read-Ember.cpp

+6-1
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,10 @@
1414
* See the License for the specific language governing permissions and
1515
* limitations under the License.
1616
*/
17-
#include "app/data-model-provider/ActionReturnStatus.h"
1817
#include <app/reporting/Read-Ember.h>
1918

2019
#include <app/AppConfig.h>
20+
#include <app/data-model-provider/ActionReturnStatus.h>
2121
#include <app/util/MatterCallbacks.h>
2222
#include <app/util/ember-compatibility-functions.h>
2323

@@ -51,6 +51,11 @@ DataModel::ActionReturnStatus RetrieveClusterData(DataModel::Provider * dataMode
5151
return CHIP_NO_ERROR;
5252
}
5353

54+
bool IsClusterDataVersionEqualTo(DataModel::Provider * dataModel, const ConcreteClusterPath & path, DataVersion dataVersion)
55+
{
56+
return IsClusterDataVersionEqual(path, dataVersion);
57+
}
58+
5459
} // namespace EmberImpl
5560
} // namespace reporting
5661
} // namespace app

src/app/reporting/Read-Ember.h

+4
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,12 @@
1818

1919
#include <access/SubjectDescriptor.h>
2020
#include <app/AttributeEncodeState.h>
21+
#include <app/ConcreteClusterPath.h>
2122
#include <app/MessageDef/AttributeReportIBs.h>
2223
#include <app/data-model-provider/ActionReturnStatus.h>
2324
#include <app/data-model-provider/Provider.h>
2425
#include <lib/core/CHIPError.h>
26+
#include <lib/core/DataModelTypes.h>
2527

2628
namespace chip {
2729
namespace app {
@@ -33,6 +35,8 @@ DataModel::ActionReturnStatus RetrieveClusterData(DataModel::Provider * dataMode
3335
AttributeReportIBs::Builder & reportBuilder,
3436
const ConcreteReadAttributePath & path, AttributeEncodeState * encoderState);
3537

38+
bool IsClusterDataVersionEqualTo(DataModel::Provider * dataModel, const ConcreteClusterPath & path, DataVersion dataVersion);
39+
3640
} // namespace EmberImpl
3741
} // namespace reporting
3842
} // namespace app

src/app/tests/TestReadInteraction.cpp

+1
Original file line numberDiff line numberDiff line change
@@ -330,6 +330,7 @@ class TestReadInteraction : public chip::Test::AppContext
330330
gCircularEventBuffer, logStorageResources, &mEventCounter);
331331
mOldProvider = InteractionModelEngine::GetInstance()->SetDataModelProvider(&TestImCustomDataModel::Instance());
332332
chip::Test::SetMockNodeConfig(TestMockNodeConfig());
333+
chip::Test::SetVersionTo(chip::Test::kTestDataVersion1);
333334
}
334335
void TearDown() override
335336
{

src/app/util/mock/Functions.h

+3
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,9 @@ void BumpVersion();
4343
/// Sets GetVersion to return 0
4444
void ResetVersion();
4545

46+
/// Force the global cluster version to a specific value
47+
void SetVersionTo(DataVersion version);
48+
4649
/// Gets the current value for the version that will
4750
/// be returned by emberAfDataVersionStorage
4851
DataVersion GetVersion();

src/app/util/mock/attribute-storage.cpp

+5
Original file line numberDiff line numberDiff line change
@@ -376,6 +376,11 @@ DataVersion GetVersion()
376376
return dataVersion;
377377
}
378378

379+
void SetVersionTo(DataVersion version)
380+
{
381+
dataVersion = version;
382+
}
383+
379384
CHIP_ERROR ReadSingleMockClusterData(FabricIndex aAccessingFabricIndex, const ConcreteAttributePath & aPath,
380385
AttributeReportIBs::Builder & aAttributeReports, AttributeEncodeState * apEncoderState)
381386
{

0 commit comments

Comments
 (0)