Skip to content

Commit a797b5e

Browse files
committed
Restyle and re-organize for readability
1 parent 7533d78 commit a797b5e

File tree

1 file changed

+62
-68
lines changed

1 file changed

+62
-68
lines changed

src/app/codegen-interaction-model/tests/TestCodegenModelViaMocks.cpp

+62-68
Original file line numberDiff line numberDiff line change
@@ -189,6 +189,49 @@ struct UseMockNodeConfig
189189
~UseMockNodeConfig() { ResetMockNodeConfig(); }
190190
};
191191

192+
struct TestReadRequest
193+
{
194+
ReadAttributeRequest request;
195+
196+
// encoded-used classes
197+
EncodedReportIBs encodedIBs;
198+
AttributeReportIBs::Builder reportBuilder;
199+
std::unique_ptr<AttributeValueEncoder> encoder;
200+
201+
TestReadRequest(const Access::SubjectDescriptor & subject, const ConcreteAttributePath & path)
202+
{
203+
// operationFlags is 0 i.e. not internal
204+
// readFlags is 0 i.e. not fabric filtered
205+
// dataVersion is missing (no data version filtering)
206+
request.subjectDescriptor = subject;
207+
request.path = path;
208+
}
209+
210+
std::unique_ptr<AttributeValueEncoder> StartEncoding(chip::app::InteractionModel::Model * model)
211+
{
212+
std::optional<ClusterInfo> info = model->GetClusterInfo(request.path);
213+
if (!info.has_value())
214+
{
215+
ChipLogError(Test, "Missing cluster information - no data version");
216+
return nullptr;
217+
}
218+
219+
DataVersion dataVersion = info->dataVersion; // NOLINT(bugprone-unchecked-optional-access)
220+
221+
CHIP_ERROR err = encodedIBs.StartEncoding(reportBuilder);
222+
if (err != CHIP_NO_ERROR)
223+
{
224+
ChipLogError(Test, "FAILURE starting encoding %" CHIP_ERROR_FORMAT, err.Format());
225+
return nullptr;
226+
}
227+
228+
// TODO: isFabricFiltered? EncodeState?
229+
return std::make_unique<AttributeValueEncoder>(reportBuilder, request.subjectDescriptor.value(), request.path, dataVersion);
230+
}
231+
232+
CHIP_ERROR FinishEncoding() { return encodedIBs.FinishEncoding(reportBuilder); }
233+
};
234+
192235
} // namespace
193236

194237
TEST(TestCodegenModelViaMocks, IterateOverEndpoints)
@@ -414,25 +457,11 @@ TEST(TestCodegenModelViaMocks, EmberAttributeReadAclDeny)
414457
chip::app::CodegenDataModel::Model model;
415458
ScopedMockAccessControl accessControl;
416459

417-
ReadAttributeRequest readRequest;
418-
419-
// operationFlags is 0 i.e. not internal
420-
// readFlags is 0 i.e. not fabric filtered
421-
// dataVersion is missing (no data version filtering)
422-
readRequest.subjectDescriptor = kDenySubjectDescriptor;
423-
readRequest.path = ConcreteAttributePath(kMockEndpoint1, MockClusterId(1), MockAttributeId(10));
460+
TestReadRequest testRequest(kDenySubjectDescriptor,
461+
ConcreteAttributePath(kMockEndpoint1, MockClusterId(1), MockAttributeId(10)));
462+
std::unique_ptr<AttributeValueEncoder> encoder = testRequest.StartEncoding(&model);
424463

425-
std::optional<ClusterInfo> info = model.GetClusterInfo(readRequest.path);
426-
ASSERT_TRUE(info.has_value());
427-
428-
DataVersion dataVersion = info->dataVersion; // NOLINT(bugprone-unchecked-optional-access)
429-
EncodedReportIBs reportIBs;
430-
AttributeReportIBs::Builder builder;
431-
ASSERT_EQ(reportIBs.StartEncoding(builder), CHIP_NO_ERROR);
432-
AttributeValueEncoder encoder(builder, kDenySubjectDescriptor, readRequest.path, dataVersion);
433-
434-
CHIP_ERROR err = model.ReadAttribute(readRequest, encoder);
435-
ASSERT_EQ(err, CHIP_ERROR_ACCESS_DENIED);
464+
ASSERT_EQ(model.ReadAttribute(testRequest.request, *encoder), CHIP_ERROR_ACCESS_DENIED);
436465
}
437466

438467
TEST(TestCodegenModelViaMocks, EmberAttributeInvalidRead)
@@ -441,25 +470,11 @@ TEST(TestCodegenModelViaMocks, EmberAttributeInvalidRead)
441470
chip::app::CodegenDataModel::Model model;
442471
ScopedMockAccessControl accessControl;
443472

444-
ReadAttributeRequest readRequest;
445-
446-
// operationFlags is 0 i.e. not internal
447-
// readFlags is 0 i.e. not fabric filtered
448-
// dataVersion is missing (no data version filtering)
449-
readRequest.subjectDescriptor = kAdminSubjectDescriptor;
450-
readRequest.path = ConcreteAttributePath(kMockEndpoint1, MockClusterId(1), MockAttributeId(10));
473+
TestReadRequest testRequest(kAdminSubjectDescriptor,
474+
ConcreteAttributePath(kMockEndpoint1, MockClusterId(1), MockAttributeId(10)));
475+
std::unique_ptr<AttributeValueEncoder> encoder = testRequest.StartEncoding(&model);
451476

452-
std::optional<ClusterInfo> info = model.GetClusterInfo(readRequest.path);
453-
ASSERT_TRUE(info.has_value());
454-
455-
DataVersion dataVersion = info->dataVersion; // NOLINT(bugprone-unchecked-optional-access)
456-
EncodedReportIBs reportIBs;
457-
AttributeReportIBs::Builder builder;
458-
ASSERT_EQ(reportIBs.StartEncoding(builder), CHIP_NO_ERROR);
459-
AttributeValueEncoder encoder(builder, kAdminSubjectDescriptor, readRequest.path, dataVersion);
460-
461-
CHIP_ERROR err = model.ReadAttribute(readRequest, encoder);
462-
ASSERT_EQ(err, CHIP_IM_GLOBAL_STATUS(UnsupportedAttribute));
477+
ASSERT_EQ(model.ReadAttribute(testRequest.request, *encoder), CHIP_IM_GLOBAL_STATUS(UnsupportedAttribute));
463478
}
464479

465480
TEST(TestCodegenModelViaMocks, EmberAttributeRead)
@@ -468,51 +483,30 @@ TEST(TestCodegenModelViaMocks, EmberAttributeRead)
468483
chip::app::CodegenDataModel::Model model;
469484
ScopedMockAccessControl accessControl;
470485

471-
///////// INPUT ARGUMENTS SETUP
472-
ReadAttributeRequest readRequest;
473-
474-
// operationFlags is 0 i.e. not internal
475-
// readFlags is 0 i.e. not fabric filtered
476-
// dataVersion is missing (no data version filtering)
477-
readRequest.subjectDescriptor = kAdminSubjectDescriptor;
478-
readRequest.path = ConcreteAttributePath(kMockEndpoint3, MockClusterId(2), MockAttributeId(3));
479-
480-
std::optional<ClusterInfo> info = model.GetClusterInfo(readRequest.path);
481-
ASSERT_TRUE(info.has_value());
482-
483-
DataVersion dataVersion = info->dataVersion; // NOLINT(bugprone-unchecked-optional-access)
486+
TestReadRequest testRequest(kAdminSubjectDescriptor,
487+
ConcreteAttributePath(kMockEndpoint3, MockClusterId(2), MockAttributeId(3)));
484488

485-
EncodedReportIBs reportIBs;
486-
AttributeReportIBs::Builder builder;
487-
ASSERT_EQ(reportIBs.StartEncoding(builder), CHIP_NO_ERROR);
488-
AttributeValueEncoder encoder(builder, kAdminSubjectDescriptor, readRequest.path, dataVersion);
489+
std::unique_ptr<AttributeValueEncoder> encoder = testRequest.StartEncoding(&model);
489490

490-
///////// FAKE DATA SETUP
491-
uint8_t data[] = { 0x01, 0x02, 0x03, 0x04 };
492-
chip::Test::SetEmberReadOutput(ByteSpan(data));
491+
// Ember encoding for integers is IDENTICAL to the in-memory representation for them
492+
const uint32_t expected = 0x01020304;
493+
chip::Test::SetEmberReadOutput(ByteSpan(reinterpret_cast<const uint8_t *>(&expected), sizeof(expected)));
493494

494-
CHIP_ERROR err = model.ReadAttribute(readRequest, encoder);
495-
ASSERT_EQ(err, CHIP_NO_ERROR);
495+
ASSERT_EQ(model.ReadAttribute(testRequest.request, *encoder), CHIP_NO_ERROR);
496496

497-
///////// OVERHEAD: finish!
498-
ASSERT_EQ(reportIBs.FinishEncoding(builder), CHIP_NO_ERROR);
497+
ASSERT_EQ(testRequest.FinishEncoding(), CHIP_NO_ERROR);
499498

500499
/////// VALIDATE
501500
std::vector<DecodedAttributeData> attribute_data;
502-
err = reportIBs.Decode(attribute_data);
503-
ASSERT_EQ(err, CHIP_NO_ERROR);
501+
ASSERT_EQ(testRequest.encodedIBs.Decode(attribute_data), CHIP_NO_ERROR);
504502
ASSERT_EQ(attribute_data.size(), 1u);
505503

506504
const DecodedAttributeData & encodedData = attribute_data[0];
507-
ASSERT_EQ(encodedData.attributePath, readRequest.path);
505+
ASSERT_EQ(encodedData.attributePath, testRequest.request.path);
508506

509507
// data element should be a uint32 encoded as TLV
510508
ASSERT_EQ(encodedData.dataReader.GetType(), TLV::kTLVType_UnsignedInteger);
511-
uint32_t expected;
512-
static_assert(sizeof(expected) == sizeof(data));
513-
memcpy(&expected, data, sizeof(expected));
514509
uint32_t actual;
515-
err = encodedData.dataReader.Get(actual);
516-
ASSERT_EQ(CHIP_NO_ERROR, err);
510+
ASSERT_EQ(encodedData.dataReader.Get(actual), CHIP_NO_ERROR);
517511
ASSERT_EQ(actual, expected);
518512
}

0 commit comments

Comments
 (0)