Skip to content

Commit 49594a5

Browse files
Use a copy constructor everytime we initialize a DataModel::AttributeEntry's instance with an assignment (project-chip#39302)
* Making DataModel::AttributeEntry immutable, adding copy constructor calls. * Restyled by clang-format --------- Co-authored-by: Restyled.io <commits@restyled.io>
1 parent 8b16749 commit 49594a5

3 files changed

Lines changed: 25 additions & 24 deletions

File tree

src/app/WriteHandler.cpp

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -774,10 +774,9 @@ DataModel::ActionReturnStatus WriteHandler::CheckWriteAllowed(const Access::Subj
774774
//
775775
// Open issue that needs fixing: https://github.com/project-chip/connectedhomeip/issues/33735
776776

777-
std::optional<DataModel::AttributeEntry> attributeEntry;
778777
DataModel::AttributeFinder finder(mDataModelProvider);
779778

780-
attributeEntry = finder.Find(aPath);
779+
std::optional<DataModel::AttributeEntry> attributeEntry = finder.Find(aPath);
781780

782781
// if path is not valid, return a spec-compliant return code.
783782
if (!attributeEntry.has_value())

src/app/data-model-provider/MetadataTypes.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,7 @@ enum class AttributeQualityFlags : uint32_t
112112

113113
struct AttributeEntry
114114
{
115-
AttributeId attributeId;
115+
const AttributeId attributeId;
116116

117117
// Constructor
118118

src/data-model-providers/codegen/tests/TestCodegenModelViaMocks.cpp

Lines changed: 23 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1193,26 +1193,27 @@ TEST_F(TestCodegenModelViaMocks, FindAttribute)
11931193
ASSERT_FALSE(finder.Find(ConcreteAttributePath(kMockEndpoint1, MockClusterId(1), MockAttributeId(10))).has_value());
11941194

11951195
// valid info
1196-
std::optional<AttributeEntry> info = finder.Find(ConcreteAttributePath(kMockEndpoint1, MockClusterId(1), FeatureMap::Id));
1197-
ASSERT_TRUE(info.has_value());
1198-
EXPECT_FALSE(info->HasFlags(AttributeQualityFlags::kListAttribute)); // NOLINT(bugprone-unchecked-optional-access)
1196+
std::optional<AttributeEntry> info1 = finder.Find(ConcreteAttributePath(kMockEndpoint1, MockClusterId(1), FeatureMap::Id));
1197+
ASSERT_TRUE(info1.has_value());
1198+
EXPECT_FALSE(info1->HasFlags(AttributeQualityFlags::kListAttribute)); // NOLINT(bugprone-unchecked-optional-access)
11991199

12001200
// Mocks always set everything as R/W with administrative privileges
1201-
EXPECT_EQ(info->GetReadPrivilege(), chip::Access::Privilege::kAdminister); // NOLINT(bugprone-unchecked-optional-access)
1202-
EXPECT_EQ(info->GetWritePrivilege(), chip::Access::Privilege::kAdminister); // NOLINT(bugprone-unchecked-optional-access)
1201+
EXPECT_EQ(info1->GetReadPrivilege(), chip::Access::Privilege::kAdminister); // NOLINT(bugprone-unchecked-optional-access)
1202+
EXPECT_EQ(info1->GetWritePrivilege(), chip::Access::Privilege::kAdminister); // NOLINT(bugprone-unchecked-optional-access)
12031203

1204-
info = finder.Find(ConcreteAttributePath(kMockEndpoint2, MockClusterId(2), MockAttributeId(2)));
1205-
ASSERT_TRUE(info.has_value());
1206-
EXPECT_TRUE(info->HasFlags(AttributeQualityFlags::kListAttribute)); // NOLINT(bugprone-unchecked-optional-access)
1207-
EXPECT_EQ(info->GetReadPrivilege(), chip::Access::Privilege::kAdminister); // NOLINT(bugprone-unchecked-optional-access)
1208-
EXPECT_EQ(info->GetWritePrivilege(), chip::Access::Privilege::kAdminister); // NOLINT(bugprone-unchecked-optional-access)
1204+
std::optional<AttributeEntry> info2 = finder.Find(ConcreteAttributePath(kMockEndpoint2, MockClusterId(2), MockAttributeId(2)));
1205+
ASSERT_TRUE(info2.has_value());
1206+
EXPECT_TRUE(info2->HasFlags(AttributeQualityFlags::kListAttribute)); // NOLINT(bugprone-unchecked-optional-access)
1207+
EXPECT_EQ(info2->GetReadPrivilege(), chip::Access::Privilege::kAdminister); // NOLINT(bugprone-unchecked-optional-access)
1208+
EXPECT_EQ(info2->GetWritePrivilege(), chip::Access::Privilege::kAdminister); // NOLINT(bugprone-unchecked-optional-access)
12091209

12101210
// test a read-only attribute, which will not have a write privilege
1211-
info = finder.Find(ConcreteAttributePath(kMockEndpoint3, MockClusterId(3), kReadOnlyAttributeId));
1212-
ASSERT_TRUE(info.has_value());
1213-
EXPECT_FALSE(info->HasFlags(AttributeQualityFlags::kListAttribute)); // NOLINT(bugprone-unchecked-optional-access)
1214-
EXPECT_EQ(info->GetReadPrivilege(), chip::Access::Privilege::kAdminister); // NOLINT(bugprone-unchecked-optional-access)
1215-
EXPECT_FALSE(info->GetWritePrivilege().has_value()); // NOLINT(bugprone-unchecked-optional-access)
1211+
std::optional<AttributeEntry> info3 =
1212+
finder.Find(ConcreteAttributePath(kMockEndpoint3, MockClusterId(3), kReadOnlyAttributeId));
1213+
ASSERT_TRUE(info3.has_value());
1214+
EXPECT_FALSE(info3->HasFlags(AttributeQualityFlags::kListAttribute)); // NOLINT(bugprone-unchecked-optional-access)
1215+
EXPECT_EQ(info3->GetReadPrivilege(), chip::Access::Privilege::kAdminister); // NOLINT(bugprone-unchecked-optional-access)
1216+
EXPECT_FALSE(info3->GetWritePrivilege().has_value()); // NOLINT(bugprone-unchecked-optional-access)
12161217
}
12171218

12181219
// global attributes are EXPLICITLY supported
@@ -1223,17 +1224,18 @@ TEST_F(TestCodegenModelViaMocks, GlobalAttributeInfo)
12231224

12241225
AttributeFinder finder(&model);
12251226

1226-
std::optional<AttributeEntry> info = finder.Find(
1227+
std::optional<AttributeEntry> info1 = finder.Find(
12271228
ConcreteAttributePath(kMockEndpoint1, MockClusterId(1), Clusters::Globals::Attributes::GeneratedCommandList::Id));
12281229

1229-
ASSERT_TRUE(info.has_value());
1230+
ASSERT_TRUE(info1.has_value());
12301231

1231-
info = finder.Find(ConcreteAttributePath(kMockEndpoint1, MockClusterId(1), Clusters::Globals::Attributes::AttributeList::Id));
1232-
ASSERT_TRUE(info.has_value());
1232+
std::optional<AttributeEntry> info2 =
1233+
finder.Find(ConcreteAttributePath(kMockEndpoint1, MockClusterId(1), Clusters::Globals::Attributes::AttributeList::Id));
1234+
ASSERT_TRUE(info2.has_value());
12331235

1234-
info = finder.Find(
1236+
std::optional<AttributeEntry> info3 = finder.Find(
12351237
ConcreteAttributePath(kMockEndpoint1, MockClusterId(1), Clusters::Globals::Attributes::AcceptedCommandList::Id));
1236-
ASSERT_TRUE(info.has_value());
1238+
ASSERT_TRUE(info3.has_value());
12371239
}
12381240

12391241
TEST_F(TestCodegenModelViaMocks, IterateOverAcceptedCommands)

0 commit comments

Comments
 (0)