From 69a822568236661fd2d2d3fc4618be1561874dfb Mon Sep 17 00:00:00 2001 From: Andrei Litvin Date: Wed, 14 Aug 2024 14:49:14 -0400 Subject: [PATCH] Add constraint enforcement on responseTimeoutSeconds in commissioner control cluster (#34982) * Add constraint enforcement on responseTimeoutSeconds This adds constraints in the implementation and also fixes up error codes in CCTRL_2_2 test. * Fix comment --- .../commissioner-control-server.cpp | 8 ++++++++ src/python_testing/TC_CCTRL_2_2.py | 4 ++-- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/src/app/clusters/commissioner-control-server/commissioner-control-server.cpp b/src/app/clusters/commissioner-control-server/commissioner-control-server.cpp index 25f6153959a22e..d8a655f6afb241 100644 --- a/src/app/clusters/commissioner-control-server/commissioner-control-server.cpp +++ b/src/app/clusters/commissioner-control-server/commissioner-control-server.cpp @@ -216,6 +216,14 @@ bool emberAfCommissionerControlClusterCommissionNodeCallback( auto sourceNodeId = GetNodeId(commandObj); + // Constraint on responseTimeoutSeconds is [30; 120] seconds + if ((commandData.responseTimeoutSeconds < 30) || (commandData.responseTimeoutSeconds > 120)) + { + ChipLogError(Zcl, "Invalid responseTimeoutSeconds for CommissionNode."); + commandObj->AddStatus(commandPath, Status::ConstraintError); + return true; + } + // Check if the command is executed via a CASE session if (sourceNodeId == kUndefinedNodeId) { diff --git a/src/python_testing/TC_CCTRL_2_2.py b/src/python_testing/TC_CCTRL_2_2.py index 6fd6b9764abac2..5204352b8b66a5 100644 --- a/src/python_testing/TC_CCTRL_2_2.py +++ b/src/python_testing/TC_CCTRL_2_2.py @@ -217,7 +217,7 @@ async def test_TC_CCTRL_2_2(self): await self.send_single_cmd(cmd=cmd) asserts.fail("Unexpected success on CommissionNode") except InteractionModelError as e: - asserts.assert_equal(e.status, Status.Failure, "Incorrect error returned") + asserts.assert_equal(e.status, Status.ConstraintError, "Incorrect error returned") self.step(16) cmd = Clusters.CommissionerControl.Commands.CommissionNode(requestId=good_request_id, responseTimeoutSeconds=121) @@ -225,7 +225,7 @@ async def test_TC_CCTRL_2_2(self): await self.send_single_cmd(cmd=cmd) asserts.fail("Unexpected success on CommissionNode") except InteractionModelError as e: - asserts.assert_equal(e.status, Status.Failure, "Incorrect error returned") + asserts.assert_equal(e.status, Status.ConstraintError, "Incorrect error returned") self.step(17) cmd = Clusters.CommissionerControl.Commands.CommissionNode(requestId=good_request_id, responseTimeoutSeconds=30)