Skip to content

Commit 2f6d910

Browse files
[FAN] Fan add constraint checks (project-chip#32861)
* Changes per issue * Update tests * Restyled by autopep8 * Fix lint error from CI * Added skip tests if bit not supported * Remove delays * Restyled by isort --------- Co-authored-by: Restyled.io <commits@restyled.io>
1 parent 74e2cd4 commit 2f6d910

File tree

2 files changed

+110
-25
lines changed

2 files changed

+110
-25
lines changed

src/python_testing/TC_FAN_3_3.py

+59-14
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,10 @@
1616
#
1717

1818
import logging
19-
import time
2019

2120
import chip.clusters as Clusters
2221
from chip.interaction_model import Status
23-
from matter_testing_support import MatterBaseTest, async_test_body, default_matter_test_main
22+
from matter_testing_support import MatterBaseTest, TestStep, async_test_body, default_matter_test_main
2423
from mobly import asserts
2524

2625
logger = logging.getLogger(__name__)
@@ -42,50 +41,96 @@ async def write_rock_setting(self, endpoint, rock_setting):
4241
result = await self.default_controller.WriteAttribute(self.dut_node_id, [(endpoint, Clusters.FanControl.Attributes.RockSetting(rock_setting))])
4342
asserts.assert_equal(result[0].Status, Status.Success, "RockSetting write failed")
4443

44+
async def write_rock_setting_expect_failure(self, endpoint, rock_setting):
45+
result = await self.default_controller.WriteAttribute(self.dut_node_id, [(endpoint, Clusters.FanControl.Attributes.RockSetting(rock_setting))])
46+
asserts.assert_equal(result[0].Status, Status.ConstraintError, "Expected ConstraintError but received a different error.")
47+
48+
def desc_TC_FAN_3_3(self) -> str:
49+
return "[TC-FAN-3.3] Optional rock functionality with DUT as Server"
50+
51+
def steps_TC_FAN_3_3(self) -> list[TestStep]:
52+
steps = [
53+
TestStep(1, "Commissioning, already done", is_commissioning=True),
54+
TestStep(2, "Read from the DUT the RockSupport attribute and store"),
55+
TestStep(3, "RockLeftRight is supported, so write 0x01 to RockSetting"),
56+
TestStep(4, "Read from the DUT the RockSetting attribute"),
57+
TestStep(5, "RockLeftRight is not supported, so write 0x01 to RockSetting to check for constraint error"),
58+
TestStep(6, "RockUpDown is supported, so write 0x02 to RockSetting"),
59+
TestStep(7, "Read from the DUT the RockSetting attribute"),
60+
TestStep(8, "RockUpDown is not supported, so write 0x02 to RockSetting to check for constraint error"),
61+
TestStep(9, "RockRound is supported, so write 0x04 to RockSetting"),
62+
TestStep(10, "Read from the DUT the RockSetting attribute"),
63+
TestStep(11, "RockRound is not supported, so write 0x04 to RockSetting to check for constraint error"),
64+
TestStep(12, "Write RockSetting to 0x00"),
65+
]
66+
return steps
67+
4568
def pics_TC_FAN_3_3(self) -> list[str]:
4669
return ["FAN.S"]
4770

4871
@async_test_body
4972
async def test_TC_FAN_3_3(self):
5073
if not self.check_pics("FAN.S.F02"):
5174
logger.info("Test skipped because PICS FAN.S.F02 is not set")
75+
self.skip_all_remaining_steps(1)
5276
return
5377

5478
endpoint = self.user_params.get("endpoint", 1)
5579

56-
self.print_step(1, "Commissioning, already done")
80+
self.step(1)
5781

58-
self.print_step(2, "Read from the DUT the RockSupport attribute and store")
82+
self.step(2)
5983
rock_support = await self.read_rock_support(endpoint=endpoint)
6084

6185
if rock_support & Clusters.FanControl.Bitmaps.RockBitmap.kRockLeftRight:
62-
self.print_step(3, "RockLeftRight is supported, so write 0x01 to RockSetting")
86+
self.step(3)
6387
await self.write_rock_setting(endpoint=endpoint, rock_setting=Clusters.FanControl.Bitmaps.RockBitmap.kRockLeftRight)
64-
time.sleep(1)
6588

66-
self.print_step(4, "Read from the DUT the RockSetting attribute")
89+
self.step(4)
6790
rock_setting = await self.read_rock_setting(endpoint=endpoint)
6891
asserts.assert_equal(rock_setting, Clusters.FanControl.Bitmaps.RockBitmap.kRockLeftRight, "RockSetting is not 0x01")
6992

93+
self.skip_step(5)
94+
else:
95+
self.skip_step(3)
96+
self.skip_step(4)
97+
98+
self.step(5)
99+
self.write_rock_setting_expect_failure(
100+
endpoint=endpoint, rock_setting=Clusters.FanControl.Bitmaps.RockBitmap.kRockLeftRight)
101+
70102
if rock_support & Clusters.FanControl.Bitmaps.RockBitmap.kRockUpDown:
71-
self.print_step(5, "RockUpDown is supported, so write 0x02 to RockSetting")
103+
self.step(6)
72104
await self.write_rock_setting(endpoint=endpoint, rock_setting=Clusters.FanControl.Bitmaps.RockBitmap.kRockUpDown)
73-
time.sleep(1)
74105

75-
self.print_step(6, "Read from the DUT the RockSetting attribute")
106+
self.step(7)
76107
rock_setting = await self.read_rock_setting(endpoint=endpoint)
77108
asserts.assert_equal(rock_setting, Clusters.FanControl.Bitmaps.RockBitmap.kRockUpDown, "RockSetting is not 0x02")
78109

110+
self.skip_step(8)
111+
else:
112+
self.skip_step(6)
113+
self.skip_step(7)
114+
115+
self.step(8)
116+
await self.write_rock_setting_expect_failure(endpoint=endpoint, rock_setting=Clusters.FanControl.Bitmaps.RockBitmap.kRockUpDown)
117+
79118
if rock_support & Clusters.FanControl.Bitmaps.RockBitmap.kRockRound:
80-
self.print_step(7, "RockRound is supported, so write 0x04 to RockSetting")
119+
self.step(9)
81120
await self.write_rock_setting(endpoint=endpoint, rock_setting=Clusters.FanControl.Bitmaps.RockBitmap.kRockRound)
82-
time.sleep(1)
83121

84-
self.print_step(8, "Read from the DUT the RockSetting attribute")
122+
self.step(10)
85123
rock_setting = await self.read_rock_setting(endpoint=endpoint)
86124
asserts.assert_equal(rock_setting, Clusters.FanControl.Bitmaps.RockBitmap.kRockRound, "RockSetting is not 0x04")
125+
self.skip_step(11)
126+
else:
127+
self.skip_step(9)
128+
self.skip_step(10)
129+
130+
self.step(11)
131+
await self.write_rock_setting_expect_failure(endpoint=endpoint, rock_setting=Clusters.FanControl.Bitmaps.RockBitmap.kRockRound)
87132

88-
self.print_step(9, "Write RockSetting to 0x00")
133+
self.step(12)
89134
await self.write_rock_setting(endpoint=endpoint, rock_setting=0x00)
90135

91136

src/python_testing/TC_FAN_3_4.py

+51-11
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,15 @@
1616
#
1717

1818
import logging
19-
import time
2019

2120
import chip.clusters as Clusters
2221
from chip.interaction_model import Status
23-
from matter_testing_support import MatterBaseTest, async_test_body, default_matter_test_main
22+
from matter_testing_support import MatterBaseTest, TestStep, async_test_body, default_matter_test_main
2423
from mobly import asserts
2524

25+
#import time
26+
27+
2628
logger = logging.getLogger(__name__)
2729

2830

@@ -42,41 +44,79 @@ async def write_wind_setting(self, endpoint, wind_setting):
4244
result = await self.default_controller.WriteAttribute(self.dut_node_id, [(endpoint, Clusters.FanControl.Attributes.WindSetting(wind_setting))])
4345
asserts.assert_equal(result[0].Status, Status.Success, "WindSetting write failed")
4446

47+
async def write_wind_setting_expect_failure(self, endpoint, wind_setting):
48+
result = await self.default_controller.WriteAttribute(self.dut_node_id, [(endpoint, Clusters.FanControl.Attributes.WindSetting(wind_setting))])
49+
asserts.assert_equal(result[0].Status, Status.ConstraintError, "Expected ConstraintError but received a different error.")
50+
51+
def desc_TC_FAN_3_4(self) -> str:
52+
return "[TC-FAN-3.4] Optional wind functionality with DUT as Server"
53+
54+
def steps_TC_FAN_3_4(self) -> list[TestStep]:
55+
steps = [
56+
TestStep(1, "Commissioning, already done", is_commissioning=True),
57+
TestStep(2, "Read from the DUT the WindSupport attribute and store"),
58+
TestStep(3, "SleepWind is supported, so write 0x01 to WindSetting"),
59+
TestStep(4, "Read from the DUT the WindSetting attribute"),
60+
TestStep(5, "SleepWind is not supported, so write 0x01 to WindSetting to check for constraint error"),
61+
TestStep(6, "NaturalWind is supported, so write 0x02 to WindSetting"),
62+
TestStep(7, "Read from the DUT the WindSetting attribute"),
63+
TestStep(8, "NaturalWind is not supported, so write 0x02 to WindSetting to check for constraint error"),
64+
TestStep(9, "Write WindSetting to 0x00"),
65+
]
66+
return steps
67+
4568
def pics_TC_FAN_3_4(self) -> list[str]:
4669
return ["FAN.S"]
4770

4871
@async_test_body
4972
async def test_TC_FAN_3_4(self):
5073
if not self.check_pics("FAN.S.F03"):
74+
self.skip_all_remaining_steps(1)
5175
logger.info("Test skipped because PICS FAN.S.F03 is not set")
5276
return
5377

5478
endpoint = self.user_params.get("endpoint", 1)
5579

56-
self.print_step(1, "Commissioning, already done")
80+
self.step(1)
5781

58-
self.print_step(2, "Read from the DUT the WindSupport attribute and store")
82+
self.step(2)
5983
wind_support = await self.read_wind_support(endpoint=endpoint)
6084

6185
if wind_support & Clusters.FanControl.Bitmaps.WindBitmap.kSleepWind:
62-
self.print_step(3, "SleepWind is supported, so write 0x01 to WindSetting")
86+
self.step(3)
6387
await self.write_wind_setting(endpoint=endpoint, wind_setting=Clusters.FanControl.Bitmaps.WindBitmap.kSleepWind)
64-
time.sleep(1)
88+
# time.sleep(1)
6589

66-
self.print_step(4, "Read from the DUT the WindSetting attribute")
90+
self.step(4)
6791
wind_setting = await self.read_wind_setting(endpoint=endpoint)
6892
asserts.assert_equal(wind_setting, Clusters.FanControl.Bitmaps.WindBitmap.kSleepWind, "WindSetting is not 0x01")
6993

94+
self.skip_step(5)
95+
else:
96+
self.skip_step(3)
97+
self.skip_step(4)
98+
99+
self.step(5)
100+
await self.write_wind_setting_expect_failure(endpoint=endpoint, wind_setting=Clusters.FanControl.Bitmaps.WindBitmap.kSleepWind)
101+
70102
if wind_support & Clusters.FanControl.Bitmaps.WindBitmap.kNaturalWind:
71-
self.print_step(5, "NaturalWind is supported, so write 0x02 to WindSetting")
103+
self.step(6)
72104
await self.write_wind_setting(endpoint=endpoint, wind_setting=Clusters.FanControl.Bitmaps.WindBitmap.kNaturalWind)
73-
time.sleep(1)
105+
# time.sleep(1)
74106

75-
self.print_step(6, "Read from the DUT the WindSetting attribute")
107+
self.step(7)
76108
wind_setting = await self.read_wind_setting(endpoint=endpoint)
77109
asserts.assert_equal(wind_setting, Clusters.FanControl.Bitmaps.WindBitmap.kNaturalWind, "WindSetting is not 0x02")
78110

79-
self.print_step(9, "Write WindSetting to 0x00")
111+
self.skip_step(8)
112+
else:
113+
self.skip_step(6)
114+
self.skip_step(7)
115+
116+
self.step(8)
117+
await self.write_wind_setting_expect_failure(endpoint=endpoint, wind_setting=Clusters.FanControl.Bitmaps.WindBitmap.kNaturalWind)
118+
119+
self.step(9)
80120
await self.write_wind_setting(endpoint=endpoint, wind_setting=0x00)
81121

82122

0 commit comments

Comments
 (0)