Skip to content

Commit 9dda583

Browse files
authored
Update soil measurement, boolean state, fixed label and user label cluster unit tests (#41508)
* Update soil measurement unit tests * Code update * Code update * Code update * Code update * Code update * Implement ClusterTester class with member functions instead * Addressing review comments * Address comment
1 parent ad8b86b commit 9dda583

File tree

9 files changed

+232
-245
lines changed

9 files changed

+232
-245
lines changed

src/app/clusters/boolean-state-server/tests/TestBooleanStateCluster.cpp

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
#include <pw_unit_test/framework.h>
1919

2020
#include <app/clusters/testing/AttributeTesting.h>
21-
#include <app/clusters/testing/TestReadWriteAttribute.h>
21+
#include <app/clusters/testing/ClusterTester.h>
2222
#include <app/server-cluster/AttributeListBuilder.h>
2323
#include <app/server-cluster/testing/TestEventGenerator.h>
2424
#include <app/server-cluster/testing/TestServerClusterContext.h>
@@ -44,7 +44,7 @@ struct TestBooleanStateCluster : public ::testing::Test
4444

4545
void TearDown() override { booleanState.Shutdown(); }
4646

47-
TestBooleanStateCluster() : testContext(), context(testContext.Create()), booleanState(kRootEndpointId) {}
47+
TestBooleanStateCluster() : context(testContext.Create()), booleanState(kRootEndpointId) {}
4848

4949
chip::Test::TestServerClusterContext testContext;
5050
ServerClusterContext context;
@@ -66,14 +66,16 @@ TEST_F(TestBooleanStateCluster, AttributeTest)
6666

6767
TEST_F(TestBooleanStateCluster, ReadAttributeTest)
6868
{
69+
ClusterTester tester(booleanState);
70+
6971
uint16_t revision{};
70-
ASSERT_EQ(ReadClusterAttribute(booleanState, Globals::Attributes::ClusterRevision::Id, revision), CHIP_NO_ERROR);
72+
ASSERT_EQ(tester.ReadAttribute(Globals::Attributes::ClusterRevision::Id, revision), CHIP_NO_ERROR);
7173

7274
uint32_t features{};
73-
ASSERT_EQ(ReadClusterAttribute(booleanState, FeatureMap::Id, features), CHIP_NO_ERROR);
75+
ASSERT_EQ(tester.ReadAttribute(FeatureMap::Id, features), CHIP_NO_ERROR);
7476

7577
bool stateValue{};
76-
ASSERT_EQ(ReadClusterAttribute(booleanState, StateValue::Id, stateValue), CHIP_NO_ERROR);
78+
ASSERT_EQ(tester.ReadAttribute(StateValue::Id, stateValue), CHIP_NO_ERROR);
7779
}
7880

7981
TEST_F(TestBooleanStateCluster, StateValue)

src/app/clusters/fixed-label-server/tests/BUILD.gn

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ chip_test_suite("tests") {
3030
public_deps = [
3131
"${chip_root}/src/app/clusters/fixed-label-server",
3232
"${chip_root}/src/app/clusters/testing",
33+
"${chip_root}/src/app/server-cluster/testing:testing",
3334
"${chip_root}/src/lib/support",
3435
]
3536
}

src/app/clusters/fixed-label-server/tests/TestFixedLabelCluster.cpp

Lines changed: 31 additions & 77 deletions
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,11 @@
1717
#include <pw_unit_test/framework.h>
1818

1919
#include <app/clusters/fixed-label-server/fixed-label-cluster.h>
20-
2120
#include <app/clusters/testing/AttributeTesting.h>
21+
#include <app/clusters/testing/ClusterTester.h>
2222
#include <app/server-cluster/AttributeListBuilder.h>
2323
#include <app/server-cluster/DefaultServerCluster.h>
24+
#include <app/server-cluster/testing/TestServerClusterContext.h>
2425
#include <clusters/FixedLabel/Attributes.h>
2526
#include <clusters/FixedLabel/Metadata.h>
2627

@@ -29,102 +30,55 @@ using namespace chip::app;
2930
using namespace chip::app::Clusters;
3031
using namespace chip::app::Clusters::FixedLabel;
3132
using namespace chip::app::Clusters::FixedLabel::Attributes;
33+
using namespace chip::Test;
3234

3335
namespace {
3436

3537
struct TestFixedLabelCluster : public ::testing::Test
3638
{
37-
static void SetUpTestSuite() { ASSERT_EQ(Platform::MemoryInit(), CHIP_NO_ERROR); }
38-
static void TearDownTestSuite() { Platform::MemoryShutdown(); }
39-
};
40-
41-
constexpr size_t kFixedLabelFixedClusterCount = 2;
42-
43-
class FixedLabelClusterTest
44-
{
45-
FixedLabelCluster fixedLabel;
39+
static void SetUpTestSuite() { ASSERT_EQ(chip::Platform::MemoryInit(), CHIP_NO_ERROR); }
4640

47-
public:
48-
template <typename... Args>
49-
FixedLabelClusterTest(Args &&... args) : fixedLabel(std::forward<Args>(args)...)
50-
{}
41+
static void TearDownTestSuite() { chip::Platform::MemoryShutdown(); }
5142

52-
template <typename F>
53-
void Check(F check)
54-
{
55-
check(fixedLabel);
56-
}
57-
};
43+
void SetUp() override { ASSERT_EQ(fixedLabel.Startup(context), CHIP_NO_ERROR); }
5844

59-
class ReadAttribute
60-
{
61-
FixedLabelCluster & mCluster;
62-
DataModel::ActionReturnStatus mStatus;
63-
64-
public:
65-
ReadAttribute(FixedLabelCluster & cluster) : mCluster(cluster), mStatus(CHIP_NO_ERROR) {}
45+
void TearDown() override { fixedLabel.Shutdown(); }
6646

67-
DataModel::ActionReturnStatus GetStatus() const { return mStatus; }
47+
TestFixedLabelCluster() : context(testContext.Create()), fixedLabel(kRootEndpointId) {}
6848

69-
void operator()(DataModel::ReadAttributeRequest & request)
70-
{
71-
Platform::ScopedMemoryBufferWithSize<uint8_t> buffer;
72-
ASSERT_NE(buffer.Alloc(1024).Get(), nullptr);
73-
74-
AttributeReportIBs::Builder attributeReportIBsBuilder;
75-
TLV::TLVWriter reportWriter;
76-
reportWriter.Init(buffer.Get(), buffer.AllocatedSize());
77-
ASSERT_EQ(attributeReportIBsBuilder.Init(&reportWriter), CHIP_NO_ERROR);
78-
79-
AttributeValueEncoder encoder(attributeReportIBsBuilder, Access::SubjectDescriptor{}, request.path, 0 /* dataVersion */);
80-
81-
mStatus = mCluster.ReadAttribute(request, encoder);
82-
}
49+
chip::Test::TestServerClusterContext testContext;
50+
ServerClusterContext context;
51+
FixedLabelCluster fixedLabel;
8352
};
8453

8554
} // namespace
8655

8756
TEST_F(TestFixedLabelCluster, AttributeTest)
8857
{
89-
for (EndpointId endpoint = 0; endpoint < kFixedLabelFixedClusterCount; ++endpoint)
90-
{
91-
FixedLabelClusterTest(endpoint).Check([&](FixedLabelCluster & fixedLabel) {
92-
ReadOnlyBufferBuilder<DataModel::AttributeEntry> attributes;
93-
ASSERT_EQ(fixedLabel.Attributes(ConcreteClusterPath(endpoint, FixedLabel::Id), attributes), CHIP_NO_ERROR);
94-
95-
ReadOnlyBufferBuilder<DataModel::AttributeEntry> expected;
96-
AttributeListBuilder listBuilder(expected);
97-
ASSERT_EQ(listBuilder.Append(Span(FixedLabel::Attributes::kMandatoryMetadata), {}), CHIP_NO_ERROR);
98-
ASSERT_TRUE(Testing::EqualAttributeSets(attributes.TakeBuffer(), expected.TakeBuffer()));
99-
});
100-
}
58+
ReadOnlyBufferBuilder<DataModel::AttributeEntry> attributes;
59+
ASSERT_EQ(fixedLabel.Attributes(ConcreteClusterPath(kRootEndpointId, FixedLabel::Id), attributes), CHIP_NO_ERROR);
60+
61+
ReadOnlyBufferBuilder<DataModel::AttributeEntry> expected;
62+
AttributeListBuilder listBuilder(expected);
63+
ASSERT_EQ(listBuilder.Append(Span(FixedLabel::Attributes::kMandatoryMetadata), {}), CHIP_NO_ERROR);
64+
ASSERT_TRUE(chip::Testing::EqualAttributeSets(attributes.TakeBuffer(), expected.TakeBuffer()));
10165
}
10266

10367
TEST_F(TestFixedLabelCluster, ReadAttributeTest)
10468
{
105-
for (EndpointId endpoint = 0; endpoint < kFixedLabelFixedClusterCount; ++endpoint)
69+
ClusterTester tester(fixedLabel);
70+
71+
uint16_t revision{};
72+
ASSERT_EQ(tester.ReadAttribute(Globals::Attributes::ClusterRevision::Id, revision), CHIP_NO_ERROR);
73+
74+
uint32_t features{};
75+
ASSERT_EQ(tester.ReadAttribute(FeatureMap::Id, features), CHIP_NO_ERROR);
76+
77+
DataModel::DecodableList<Structs::LabelStruct::DecodableType> labelList;
78+
ASSERT_EQ(tester.ReadAttribute(LabelList::Id, labelList), CHIP_NO_ERROR);
79+
auto it = labelList.begin();
80+
while (it.Next())
10681
{
107-
FixedLabelClusterTest(endpoint).Check([&](FixedLabelCluster & fixedLabel) {
108-
DataModel::ReadAttributeRequest request;
109-
request.path.mEndpointId = endpoint;
110-
request.path.mClusterId = FixedLabel::Id;
111-
request.path.mAttributeId = Globals::Attributes::ClusterRevision::Id;
112-
113-
ReadAttribute readAttribute(fixedLabel);
114-
readAttribute(request);
115-
EXPECT_TRUE(readAttribute.GetStatus().IsSuccess());
116-
117-
request.path.mAttributeId = FeatureMap::Id;
118-
readAttribute(request);
119-
EXPECT_TRUE(readAttribute.GetStatus().IsSuccess());
120-
121-
request.path.mAttributeId = LabelList::Id;
122-
readAttribute(request);
123-
EXPECT_TRUE(readAttribute.GetStatus().IsSuccess());
124-
125-
request.path.mAttributeId = 0xFFFF;
126-
readAttribute(request);
127-
EXPECT_TRUE(readAttribute.GetStatus().IsError());
128-
});
82+
ASSERT_GT(it.GetValue().label.size(), 0u);
12983
}
13084
}

src/app/clusters/soil-measurement-server/tests/BUILD.gn

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ chip_test_suite("tests") {
3030
public_deps = [
3131
"${chip_root}/src/app/clusters/soil-measurement-server",
3232
"${chip_root}/src/app/clusters/testing",
33+
"${chip_root}/src/app/server-cluster/testing:testing",
3334
"${chip_root}/src/lib/support",
3435
]
3536
}

src/app/clusters/soil-measurement-server/tests/TestSoilMeasurementCluster.cpp

Lines changed: 74 additions & 69 deletions
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,10 @@
1717
#include <pw_unit_test/framework.h>
1818

1919
#include <app/clusters/soil-measurement-server/soil-measurement-cluster.h>
20-
2120
#include <app/clusters/testing/AttributeTesting.h>
21+
#include <app/clusters/testing/ClusterTester.h>
2222
#include <app/server-cluster/AttributeListBuilder.h>
23-
#include <app/server-cluster/DefaultServerCluster.h>
23+
#include <app/server-cluster/testing/TestServerClusterContext.h>
2424
#include <clusters/SoilMeasurement/Attributes.h>
2525
#include <clusters/SoilMeasurement/Metadata.h>
2626

@@ -29,15 +29,10 @@ using namespace chip::app;
2929
using namespace chip::app::Clusters;
3030
using namespace chip::app::Clusters::SoilMeasurement;
3131
using namespace chip::app::Clusters::SoilMeasurement::Attributes;
32+
using namespace chip::Test;
3233

3334
namespace {
3435

35-
struct TestSoilMeasurementCluster : public ::testing::Test
36-
{
37-
static void SetUpTestSuite() { ASSERT_EQ(chip::Platform::MemoryInit(), CHIP_NO_ERROR); }
38-
static void TearDownTestSuite() { chip::Platform::MemoryShutdown(); }
39-
};
40-
4136
const Globals::Structs::MeasurementAccuracyRangeStruct::Type kDefaultSoilMoistureMeasurementLimitsAccuracyRange[] = {
4237
{ .rangeMin = 0, .rangeMax = 100, .percentMax = MakeOptional(static_cast<chip::Percent100ths>(10)) }
4338
};
@@ -66,83 +61,93 @@ class SoilMeasurementClusterLocal : public SoilMeasurementCluster
6661
SoilMoistureMeasuredValue::TypeInfo::Type GetSoilMoistureMeasuredValue() const { return mSoilMoistureMeasuredValue; }
6762
};
6863

69-
class SoilMeasurementClusterTest
64+
struct TestSoilMeasurementCluster : public ::testing::Test
7065
{
71-
SoilMeasurementClusterLocal soilMeasurement;
66+
static void SetUpTestSuite() { ASSERT_EQ(chip::Platform::MemoryInit(), CHIP_NO_ERROR); }
7267

73-
public:
74-
template <typename... Args>
75-
SoilMeasurementClusterTest(Args &&... args) : soilMeasurement(std::forward<Args>(args)...)
68+
static void TearDownTestSuite() { chip::Platform::MemoryShutdown(); }
69+
70+
void SetUp() override { ASSERT_EQ(soilMeasurement.Startup(context), CHIP_NO_ERROR); }
71+
72+
void TearDown() override { soilMeasurement.Shutdown(); }
73+
74+
TestSoilMeasurementCluster() :
75+
context(testContext.Create()), soilMeasurement(kEndpointWithSoilMeasurement, kDefaultSoilMoistureMeasurementLimits)
7676
{}
7777

78-
template <typename F>
79-
void Check(F check)
80-
{
81-
check(soilMeasurement);
82-
}
78+
chip::Test::TestServerClusterContext testContext;
79+
ServerClusterContext context;
80+
SoilMeasurementClusterLocal soilMeasurement;
8381
};
8482

8583
} // namespace
8684

8785
TEST_F(TestSoilMeasurementCluster, AttributeTest)
8886
{
89-
SoilMeasurementClusterTest(kEndpointWithSoilMeasurement, kDefaultSoilMoistureMeasurementLimits)
90-
.Check([](SoilMeasurementClusterLocal & soilMeasurement) {
91-
ReadOnlyBufferBuilder<DataModel::AttributeEntry> attributes;
92-
ASSERT_EQ(
93-
soilMeasurement.Attributes(ConcreteClusterPath(kEndpointWithSoilMeasurement, SoilMeasurement::Id), attributes),
94-
CHIP_NO_ERROR);
95-
96-
ReadOnlyBufferBuilder<DataModel::AttributeEntry> expected;
97-
AttributeListBuilder listBuilder(expected);
98-
ASSERT_EQ(listBuilder.Append(Span(SoilMeasurement::Attributes::kMandatoryMetadata), {}), CHIP_NO_ERROR);
99-
ASSERT_TRUE(Testing::EqualAttributeSets(attributes.TakeBuffer(), expected.TakeBuffer()));
100-
});
87+
ReadOnlyBufferBuilder<DataModel::AttributeEntry> attributes;
88+
ASSERT_EQ(soilMeasurement.Attributes(ConcreteClusterPath(kEndpointWithSoilMeasurement, SoilMeasurement::Id), attributes),
89+
CHIP_NO_ERROR);
90+
91+
ReadOnlyBufferBuilder<DataModel::AttributeEntry> expected;
92+
AttributeListBuilder listBuilder(expected);
93+
ASSERT_EQ(listBuilder.Append(Span(SoilMeasurement::Attributes::kMandatoryMetadata), {}), CHIP_NO_ERROR);
94+
ASSERT_TRUE(chip::Testing::EqualAttributeSets(attributes.TakeBuffer(), expected.TakeBuffer()));
95+
}
96+
97+
TEST_F(TestSoilMeasurementCluster, ReadAttributeTest)
98+
{
99+
ClusterTester tester(soilMeasurement);
100+
101+
uint16_t revision{};
102+
ASSERT_EQ(tester.ReadAttribute(Globals::Attributes::ClusterRevision::Id, revision), CHIP_NO_ERROR);
103+
104+
uint32_t features{};
105+
ASSERT_EQ(tester.ReadAttribute(FeatureMap::Id, features), CHIP_NO_ERROR);
106+
107+
SoilMoistureMeasuredValue::TypeInfo::DecodableType soilMoistureMeasuredValue;
108+
ASSERT_EQ(tester.ReadAttribute(SoilMoistureMeasuredValue::Id, soilMoistureMeasuredValue), CHIP_NO_ERROR);
109+
110+
SoilMoistureMeasurementLimits::TypeInfo::DecodableType soilMoistureMeasurementLimits;
111+
ASSERT_EQ(tester.ReadAttribute(SoilMoistureMeasurementLimits::Id, soilMoistureMeasurementLimits), CHIP_NO_ERROR);
101112
}
102113

103114
TEST_F(TestSoilMeasurementCluster, SoilMoistureMeasuredValue)
104115
{
105-
SoilMeasurementClusterTest(kEndpointWithSoilMeasurement, kDefaultSoilMoistureMeasurementLimits)
106-
.Check([](SoilMeasurementClusterLocal & soilMeasurement) {
107-
SoilMoistureMeasuredValue::TypeInfo::Type measuredValue;
108-
measuredValue.SetNull();
109-
ASSERT_EQ(soilMeasurement.GetSoilMoistureMeasuredValue(), measuredValue);
110-
111-
measuredValue = 50;
112-
ASSERT_EQ(soilMeasurement.SetSoilMoistureMeasuredValue(measuredValue), CHIP_NO_ERROR);
113-
ASSERT_EQ(soilMeasurement.GetSoilMoistureMeasuredValue(), measuredValue);
114-
115-
measuredValue = 101;
116-
ASSERT_EQ(soilMeasurement.SetSoilMoistureMeasuredValue(measuredValue), CHIP_ERROR_INVALID_ARGUMENT);
117-
118-
measuredValue = -1;
119-
ASSERT_EQ(soilMeasurement.SetSoilMoistureMeasuredValue(measuredValue), CHIP_ERROR_INVALID_ARGUMENT);
120-
121-
measuredValue.SetNull();
122-
ASSERT_EQ(soilMeasurement.SetSoilMoistureMeasuredValue(measuredValue), CHIP_NO_ERROR);
123-
ASSERT_EQ(soilMeasurement.GetSoilMoistureMeasuredValue(), measuredValue);
124-
});
116+
SoilMoistureMeasuredValue::TypeInfo::Type measuredValue;
117+
measuredValue.SetNull();
118+
ASSERT_EQ(soilMeasurement.GetSoilMoistureMeasuredValue(), measuredValue);
119+
120+
measuredValue = 50;
121+
ASSERT_EQ(soilMeasurement.SetSoilMoistureMeasuredValue(measuredValue), CHIP_NO_ERROR);
122+
ASSERT_EQ(soilMeasurement.GetSoilMoistureMeasuredValue(), measuredValue);
123+
124+
measuredValue = 101;
125+
ASSERT_EQ(soilMeasurement.SetSoilMoistureMeasuredValue(measuredValue), CHIP_ERROR_INVALID_ARGUMENT);
126+
127+
measuredValue = -1;
128+
ASSERT_EQ(soilMeasurement.SetSoilMoistureMeasuredValue(measuredValue), CHIP_ERROR_INVALID_ARGUMENT);
129+
130+
measuredValue.SetNull();
131+
ASSERT_EQ(soilMeasurement.SetSoilMoistureMeasuredValue(measuredValue), CHIP_NO_ERROR);
132+
ASSERT_EQ(soilMeasurement.GetSoilMoistureMeasuredValue(), measuredValue);
125133
}
126134

127135
TEST_F(TestSoilMeasurementCluster, SoilMoistureMeasurementLimits)
128136
{
129-
SoilMeasurementClusterTest(kEndpointWithSoilMeasurement, kDefaultSoilMoistureMeasurementLimits)
130-
.Check([](SoilMeasurementClusterLocal & soilMeasurement) {
131-
const auto & measurementLimits = soilMeasurement.GetSoilMoistureMeasurementLimits();
132-
ASSERT_EQ(measurementLimits.measurementType, kDefaultSoilMoistureMeasurementLimits.measurementType);
133-
ASSERT_EQ(measurementLimits.measured, kDefaultSoilMoistureMeasurementLimits.measured);
134-
ASSERT_EQ(measurementLimits.minMeasuredValue, kDefaultSoilMoistureMeasurementLimits.minMeasuredValue);
135-
ASSERT_EQ(measurementLimits.maxMeasuredValue, kDefaultSoilMoistureMeasurementLimits.maxMeasuredValue);
136-
137-
const auto & accuracyRange = measurementLimits.accuracyRanges[0];
138-
const auto & defaultRange = kDefaultSoilMoistureMeasurementLimits.accuracyRanges[0];
139-
ASSERT_EQ(accuracyRange.rangeMin, defaultRange.rangeMin);
140-
ASSERT_EQ(accuracyRange.rangeMax, defaultRange.rangeMax);
141-
ASSERT_EQ(accuracyRange.percentMax.Value(), defaultRange.percentMax.Value());
142-
ASSERT_FALSE(accuracyRange.percentMin.HasValue());
143-
ASSERT_FALSE(accuracyRange.percentTypical.HasValue());
144-
ASSERT_FALSE(accuracyRange.fixedMax.HasValue());
145-
ASSERT_FALSE(accuracyRange.fixedMin.HasValue());
146-
ASSERT_FALSE(accuracyRange.fixedTypical.HasValue());
147-
});
137+
const auto & measurementLimits = soilMeasurement.GetSoilMoistureMeasurementLimits();
138+
ASSERT_EQ(measurementLimits.measurementType, kDefaultSoilMoistureMeasurementLimits.measurementType);
139+
ASSERT_EQ(measurementLimits.measured, kDefaultSoilMoistureMeasurementLimits.measured);
140+
ASSERT_EQ(measurementLimits.minMeasuredValue, kDefaultSoilMoistureMeasurementLimits.minMeasuredValue);
141+
ASSERT_EQ(measurementLimits.maxMeasuredValue, kDefaultSoilMoistureMeasurementLimits.maxMeasuredValue);
142+
143+
const auto & accuracyRange = measurementLimits.accuracyRanges[0];
144+
const auto & defaultRange = kDefaultSoilMoistureMeasurementLimits.accuracyRanges[0];
145+
ASSERT_EQ(accuracyRange.rangeMin, defaultRange.rangeMin);
146+
ASSERT_EQ(accuracyRange.rangeMax, defaultRange.rangeMax);
147+
ASSERT_EQ(accuracyRange.percentMax.Value(), defaultRange.percentMax.Value());
148+
ASSERT_FALSE(accuracyRange.percentMin.HasValue());
149+
ASSERT_FALSE(accuracyRange.percentTypical.HasValue());
150+
ASSERT_FALSE(accuracyRange.fixedMax.HasValue());
151+
ASSERT_FALSE(accuracyRange.fixedMin.HasValue());
152+
ASSERT_FALSE(accuracyRange.fixedTypical.HasValue());
148153
}

src/app/clusters/testing/BUILD.gn

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ source_set("testing") {
2020
sources = [
2121
"AttributeTesting.cpp",
2222
"AttributeTesting.h",
23-
"TestReadWriteAttribute.h",
23+
"ClusterTester.h",
2424
]
2525

2626
public_deps = [

0 commit comments

Comments
 (0)