From 1a3fccca8b0d02a00ddcbf4f01c2cf2f53ec733b Mon Sep 17 00:00:00 2001 From: Hilton Lima Date: Thu, 26 Sep 2024 14:13:52 -0300 Subject: [PATCH] Rebasing --- ...1a38e909e7874593bcb87c31be03a5866f1d4.json | 13255 ++++++++++++++++ .../list_python_tests_classes.py | 152 + .../models/python_test_parser.py | 94 +- .../models/rpc_client/test_harness_client.py | 64 +- .../python_testing/models/test_case.py | 17 +- .../python_testing/sdk_python_tests.py | 92 +- 6 files changed, 13569 insertions(+), 105 deletions(-) create mode 100644 test_collections/matter/sdk_tests/python_tests_17b1a38e909e7874593bcb87c31be03a5866f1d4.json create mode 100644 test_collections/matter/sdk_tests/support/python_testing/list_python_tests_classes.py diff --git a/test_collections/matter/sdk_tests/python_tests_17b1a38e909e7874593bcb87c31be03a5866f1d4.json b/test_collections/matter/sdk_tests/python_tests_17b1a38e909e7874593bcb87c31be03a5866f1d4.json new file mode 100644 index 00000000..f392a806 --- /dev/null +++ b/test_collections/matter/sdk_tests/python_tests_17b1a38e909e7874593bcb87c31be03a5866f1d4.json @@ -0,0 +1,13255 @@ +[ + { + "class_name": "TCP_Tests", + "desc": "test_TC_SC_8_1", + "function": "test_TC_SC_8_1", + "path": "sdk/TCP_Tests", + "pics": [], + "steps": [ + { + "description": "Run entire test", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 1 + } + ] + }, + { + "class_name": "TCP_Tests", + "desc": "test_TC_SC_8_2", + "function": "test_TC_SC_8_2", + "path": "sdk/TCP_Tests", + "pics": [], + "steps": [ + { + "description": "Run entire test", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 1 + } + ] + }, + { + "class_name": "TCP_Tests", + "desc": "test_TC_SC_8_3", + "function": "test_TC_SC_8_3", + "path": "sdk/TCP_Tests", + "pics": [], + "steps": [ + { + "description": "Run entire test", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 1 + } + ] + }, + { + "class_name": "TCP_Tests", + "desc": "test_TC_SC_8_4", + "function": "test_TC_SC_8_4", + "path": "sdk/TCP_Tests", + "pics": [], + "steps": [ + { + "description": "Run entire test", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 1 + } + ] + }, + { + "class_name": "TCP_Tests", + "desc": "test_TC_SC_8_5", + "function": "test_TC_SC_8_5", + "path": "sdk/TCP_Tests", + "pics": [], + "steps": [ + { + "description": "Run entire test", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 1 + } + ] + }, + { + "class_name": "TCP_Tests", + "desc": "test_TC_SC_8_6", + "function": "test_TC_SC_8_6", + "path": "sdk/TCP_Tests", + "pics": [], + "steps": [ + { + "description": "Run entire test", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 1 + } + ] + }, + { + "class_name": "TCP_Tests", + "desc": "test_TC_SC_8_7", + "function": "test_TC_SC_8_7", + "path": "sdk/TCP_Tests", + "pics": [], + "steps": [ + { + "description": "Run entire test", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 1 + } + ] + }, + { + "class_name": "TC_ACE_1_2", + "desc": "test_TC_ACE_1_2", + "function": "test_TC_ACE_1_2", + "path": "sdk/TC_ACE_1_2", + "pics": [], + "steps": [ + { + "description": "Run entire test", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 1 + } + ] + }, + { + "class_name": "TC_ACE_1_3", + "desc": "[TC-ACE-1.3] Subjects", + "function": "test_TC_ACE_1_3", + "path": "sdk/TC_ACE_1_3", + "pics": [], + "steps": [ + { + "description": "Commissioning, already done", + "expectation": "", + "is_commissioning": true, + "test_plan_number": 1 + }, + { + "description": "TH0 writes ACL all view on PIXIT.ACE.TESTENDPOINT", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 2 + }, + { + "description": "TH1 reads EP0 descriptor - expect SUCCESS", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 3 + }, + { + "description": "TH2 reads EP0 descriptor - expect SUCCESS", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 4 + }, + { + "description": "TH3 reads EP0 descriptor - expect SUCCESS", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 5 + }, + { + "description": "TH0 writes ACL TH1 view on EP0", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 6 + }, + { + "description": "TH1 reads EP0 descriptor - expect SUCCESS", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 7 + }, + { + "description": "TH2 reads EP0 descriptor - expect UNSUPPORTED_ACCESS", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 8 + }, + { + "description": "TH3 reads EP0 descriptor - expect UNSUPPORTED_ACCESS", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 9 + }, + { + "description": "TH0 writes ACL TH2 view on EP0", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 10 + }, + { + "description": "TH1 reads EP0 descriptor - expect UNSUPPORTED_ACCESS", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 11 + }, + { + "description": "TH2 reads EP0 descriptor - expect SUCCESS", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 12 + }, + { + "description": "TH3 reads EP0 descriptor - expect UNSUPPORTED_ACCESS", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 13 + }, + { + "description": "TH0 writes ACL TH3 view on EP0", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 14 + }, + { + "description": "TH1 reads EP0 descriptor - expect UNSUPPORTED_ACCESS", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 15 + }, + { + "description": "TH2 reads EP0 descriptor - expect UNSUPPORTED_ACCESS", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 16 + }, + { + "description": "TH3 reads EP0 descriptor - expect SUCCESS", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 17 + }, + { + "description": "TH0 writes ACL TH1 TH2 view on EP0", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 18 + }, + { + "description": "TH1 reads EP0 descriptor - expect SUCCESS", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 19 + }, + { + "description": "TH2 reads EP0 descriptor - expect SUCCESS", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 20 + }, + { + "description": "TH3 reads EP0 descriptor - expect UNSUPPORTED_ACCESS", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 21 + }, + { + "description": "TH0 writes ACL TH1 TH3 view on EP0", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 22 + }, + { + "description": "TH1 reads EP0 descriptor - expect SUCCESS", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 23 + }, + { + "description": "TH2 reads EP0 descriptor - expect UNSUPPORTED_ACCESS", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 24 + }, + { + "description": "TH3 reads EP0 descriptor - expect SUCCESS", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 25 + }, + { + "description": "TH0 writes ACL TH2 TH3 view on EP0", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 26 + }, + { + "description": "TH1 reads EP0 descriptor - expect UNSUPPORTED_ACCESS", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 27 + }, + { + "description": "TH2 reads EP0 descriptor - expect SUCCESS", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 28 + }, + { + "description": "TH3 reads EP0 descriptor - expect SUCCESS", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 29 + }, + { + "description": "TH0 writes ACL TH1 TH2 TH3 view on EP0", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 30 + }, + { + "description": "TH1 reads EP0 descriptor - expect SUCCESS", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 31 + }, + { + "description": "TH2 reads EP0 descriptor - expect SUCCESS", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 32 + }, + { + "description": "TH3 reads EP0 descriptor - expect SUCCESS", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 33 + }, + { + "description": "TH0 writes ACL cat1v1 view on EP0", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 34 + }, + { + "description": "TH1 reads EP0 descriptor - expect SUCCESS", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 35 + }, + { + "description": "TH2 reads EP0 descriptor - expect SUCCESS", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 36 + }, + { + "description": "TH3 reads EP0 descriptor - expect SUCCESS", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 37 + }, + { + "description": "TH0 writes ACL cat1v2 view on EP0", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 38 + }, + { + "description": "TH1 reads EP0 descriptor - expect SUCCESS", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 39 + }, + { + "description": "TH2 reads EP0 descriptor - expect SUCCESS", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 40 + }, + { + "description": "TH3 reads EP0 descriptor - expect UNSUPPORTED_ACCESS", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 41 + }, + { + "description": "TH0 writes ACL cat1v3 view on EP0", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 42 + }, + { + "description": "TH1 reads EP0 descriptor - expect SUCCESS", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 43 + }, + { + "description": "TH2 reads EP0 descriptor - expect UNSUPPORTED_ACCESS", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 44 + }, + { + "description": "TH3 reads EP0 descriptor - expect UNSUPPORTED_ACCESS", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 45 + }, + { + "description": "TH0 writes ACL cat2v1 view on EP0", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 46 + }, + { + "description": "TH1 reads EP0 descriptor - expect UNSUPPORTED_ACCESS", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 47 + }, + { + "description": "TH2 reads EP0 descriptor - expect SUCCESS", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 48 + }, + { + "description": "TH3 reads EP0 descriptor - expect SUCCESS", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 49 + }, + { + "description": "TH0 writes ACL cat2v2 view on EP0", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 50 + }, + { + "description": "TH1 reads EP0 descriptor - expect UNSUPPORTED_ACCESS", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 51 + }, + { + "description": "TH2 reads EP0 descriptor - expect UNSUPPORTED_ACCESS", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 52 + }, + { + "description": "TH3 reads EP0 descriptor - expect SUCCESS", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 53 + }, + { + "description": "TH0 writes ACL cat2v3 view on EP0", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 54 + }, + { + "description": "TH1 reads EP0 descriptor - expect UNSUPPORTED_ACCESS", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 55 + }, + { + "description": "TH2 reads EP0 descriptor - expect UNSUPPORTED_ACCESS", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 56 + }, + { + "description": "TH3 reads EP0 descriptor - expect UNSUPPORTED_ACCESS", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 57 + }, + { + "description": "TH0 writes ACL back to default", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 58 + } + ] + }, + { + "class_name": "TC_ACE_1_4", + "desc": "test_TC_ACE_1_4", + "function": "test_TC_ACE_1_4", + "path": "sdk/TC_ACE_1_4", + "pics": [], + "steps": [ + { + "description": "Run entire test", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 1 + } + ] + }, + { + "class_name": "TC_ACE_1_5", + "desc": "test_TC_ACE_1_5", + "function": "test_TC_ACE_1_5", + "path": "sdk/TC_ACE_1_5", + "pics": [], + "steps": [ + { + "description": "Run entire test", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 1 + } + ] + }, + { + "class_name": "TC_ACL_2_11", + "desc": "[TC-ACL-2.11] Verification of Managed Device feature", + "function": "test_TC_ACL_2_11", + "path": "sdk/TC_ACL_2_11", + "pics": [ + "ACL.S.F01" + ], + "steps": [ + { + "description": "Commissioning (already done) and precondition checks", + "expectation": "", + "is_commissioning": true, + "test_plan_number": 1 + }, + { + "description": "TH1 reads DUT Endpoint 0 AccessControl cluster CommissioningARL attribute", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 2 + }, + { + "description": "TH1 reads DUT Endpoint 0 AccessControl cluster ARL attribute", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 3 + }, + { + "description": "For each entry in ARL, iterate over each restriction and attempt access the restriction's ID on the Endpoint and Cluster in the ARL entry.", + "expectation": "If the restriction is Type AttributeAccessForbidden, read the restriction's attribute ID and verify the response is ACCESS_RESTRICTED.If the restriction is Type AttributeWriteForbidden, write restriction's the attribute ID and verify the response is ACCESS_RESTRICTED.If the restriction is Type CommandForbidden, invoke the restriction's command ID and verify the response is ACCESS_RESTRICTED.", + "is_commissioning": false, + "test_plan_number": 4 + }, + { + "description": "Ensure protected attributes are accessible", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 5 + }, + { + "description": "TH1 sends DUT Endpoint 0 AccessControl cluster command ReviewFabricRestrictions", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 6 + }, + { + "description": "Wait for up to 1 hour. Follow instructions provided by device maker to remove all access restrictions", + "expectation": "AccessRestrictionReviewUpdate event is received", + "is_commissioning": false, + "test_plan_number": 7 + }, + { + "description": "TH1 reads DUT Endpoint 0 AccessControl cluster ARL attribute", + "expectation": "ARL is empty", + "is_commissioning": false, + "test_plan_number": 8 + } + ] + }, + { + "class_name": "TC_ACL_2_2", + "desc": "[TC-ACL-2.2] Cluster endpoint", + "function": "test_TC_ACL_2_2", + "path": "sdk/TC_ACL_2_2", + "pics": [], + "steps": [ + { + "description": "Commissioning, already done", + "expectation": "", + "is_commissioning": true, + "test_plan_number": 1 + }, + { + "description": "TH1 reads DUT Descriptor cluster ServerList attribute from Endpoint 0", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 2 + }, + { + "description": "TH1 reads DUT Descriptor cluster ServerList attribute from every Endpoint except 0", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 3 + } + ] + }, + { + "class_name": "AccessChecker", + "desc": "[TC-ACE-2.1] Attribute read privilege enforcement - [DUT as Server]", + "function": "test_TC_ACE_2_1", + "path": "sdk/TC_AccessChecker", + "pics": [], + "steps": [ + { + "description": "DUT is commissioned", + "expectation": "", + "is_commissioning": true, + "test_plan_number": "precondition" + }, + { + "description": "TH_commissioner performs a wildcard read", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 1 + }, + { + "description": "TH_commissioner reads the ACL attribute", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 2 + }, + { + "description": "Repeat steps 3a and 3b for each permission level", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 3 + }, + { + "description": "TH_commissioner gives TH_second_commissioner the specified privilege", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "3a_kView" + }, + { + "description": "TH_second_controller reads all the attributes and checks for appropriate permission errors", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "3b_kView" + }, + { + "description": "TH_commissioner gives TH_second_commissioner the specified privilege", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "3a_kProxyView" + }, + { + "description": "TH_second_controller reads all the attributes and checks for appropriate permission errors", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "3b_kProxyView" + }, + { + "description": "TH_commissioner gives TH_second_commissioner the specified privilege", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "3a_kOperate" + }, + { + "description": "TH_second_controller reads all the attributes and checks for appropriate permission errors", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "3b_kOperate" + }, + { + "description": "TH_commissioner gives TH_second_commissioner the specified privilege", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "3a_kManage" + }, + { + "description": "TH_second_controller reads all the attributes and checks for appropriate permission errors", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "3b_kManage" + }, + { + "description": "TH_commissioner gives TH_second_commissioner the specified privilege", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "3a_kAdminister" + }, + { + "description": "TH_second_controller reads all the attributes and checks for appropriate permission errors", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "3b_kAdminister" + } + ] + }, + { + "class_name": "AccessChecker", + "desc": "[TC-ACE-2.2] Attribute write privilege enforcement - [DUT as Server]", + "function": "test_TC_ACE_2_2", + "path": "sdk/TC_AccessChecker", + "pics": [], + "steps": [ + { + "description": "DUT is commissioned", + "expectation": "", + "is_commissioning": true, + "test_plan_number": "precondition" + }, + { + "description": "TH_commissioner performs a wildcard read", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 1 + }, + { + "description": "TH_commissioner reads the ACL attribute", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 2 + }, + { + "description": "TH_commissioner grants TH_second_controller admin permission", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 3 + }, + { + "description": "TH_second_controller performs a wildcard read", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 4 + }, + { + "description": "Repeat steps 5a and 5b for each permission level", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 5 + }, + { + "description": "TH_commissioner gives TH_second_commissioner the specified privilege", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "5a_kView" + }, + { + "description": "TH_second_commissioner writes all the attributes and checks for appropriate permission errors", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "5b_kView" + }, + { + "description": "TH_commissioner gives TH_second_commissioner the specified privilege", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "5a_kProxyView" + }, + { + "description": "TH_second_commissioner writes all the attributes and checks for appropriate permission errors", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "5b_kProxyView" + }, + { + "description": "TH_commissioner gives TH_second_commissioner the specified privilege", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "5a_kOperate" + }, + { + "description": "TH_second_commissioner writes all the attributes and checks for appropriate permission errors", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "5b_kOperate" + }, + { + "description": "TH_commissioner gives TH_second_commissioner the specified privilege", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "5a_kManage" + }, + { + "description": "TH_second_commissioner writes all the attributes and checks for appropriate permission errors", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "5b_kManage" + }, + { + "description": "TH_commissioner gives TH_second_commissioner the specified privilege", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "5a_kAdminister" + }, + { + "description": "TH_second_commissioner writes all the attributes and checks for appropriate permission errors", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "5b_kAdminister" + } + ] + }, + { + "class_name": "TC_BOOLCFG_2_1", + "desc": "[TC-BOOLCFG-2.1] Attributes with DUT as Server", + "function": "test_TC_BOOLCFG_2_1", + "path": "sdk/TC_BOOLCFG_2_1", + "pics": [ + "BOOLCFG.S" + ], + "steps": [ + { + "description": "Commissioning, already done", + "expectation": "", + "is_commissioning": true, + "test_plan_number": 1 + }, + { + "description": "Read attribute list to determine supported attributes", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 2 + }, + { + "description": "Read SupportedSensitivityLevels attribute, if supported", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 3 + }, + { + "description": "Read CurrentSensitivityLevel attribute, if supported", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 4 + }, + { + "description": "Read DefaultSensitivityLevel attribute, if supported", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 5 + }, + { + "description": "Read AlarmsActive attribute, if supported", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 6 + }, + { + "description": "Read AlarmsSuppressed attribute, if supported", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 7 + }, + { + "description": "Read AlarmsEnabled attribute, if supported", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 8 + }, + { + "description": "Read AlarmsSupported attribute, if supported", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 9 + }, + { + "description": "Read SensorFault attribute, if supported", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 10 + } + ] + }, + { + "class_name": "TC_BOOLCFG_3_1", + "desc": "[TC-BOOLCFG-3.1] SensitivityLevel with DUT as Server", + "function": "test_TC_BOOLCFG_3_1", + "path": "sdk/TC_BOOLCFG_3_1", + "pics": [ + "BOOLCFG.S" + ], + "steps": [ + { + "description": "Commissioning, already done", + "expectation": "", + "is_commissioning": true, + "test_plan_number": 1 + }, + { + "description": "Read FeatureMap attribute", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "2a" + }, + { + "description": "Verify SENSLVL feature is supported", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "2b" + }, + { + "description": "Read AttributeList attribute", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "2c" + }, + { + "description": "Read SupportedSensitivityLevels attribute", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 3 + }, + { + "description": "Read DefaultSensitivityLevel attribute, if supported", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 4 + }, + { + "description": "Read CurrentSensitivityLevel attribute", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 5 + }, + { + "description": "TH loops through the number of supported sensitivity levels", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 6 + }, + { + "description": "Write CurrentSensitivityLevel attribute to non-default value", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 7 + }, + { + "description": "Write CurrentSensitivityLevel attribute to default value", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 8 + }, + { + "description": "Write CurrentSensitivityLevel attribute to 10", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 9 + }, + { + "description": "Write CurrentSensitivityLevel attribute to 255", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 10 + }, + { + "description": "Write CurrentSensitivityLevel attribute to the initial current value", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 11 + } + ] + }, + { + "class_name": "TC_BOOLCFG_4_1", + "desc": "[TC-BOOLCFG-4.1] AlarmsSupported attribute with DUT as Server", + "function": "test_TC_BOOLCFG_4_1", + "path": "sdk/TC_BOOLCFG_4_1", + "pics": [ + "BOOLCFG.S" + ], + "steps": [ + { + "description": "Commissioning, already done", + "expectation": "", + "is_commissioning": true, + "test_plan_number": 1 + }, + { + "description": "Read FeatureMap attribute", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 2 + }, + { + "description": "Read AlarmsSupported attribute", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 3 + }, + { + "description": "Verify AlarmsSupported attribute bit 0", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "4a" + }, + { + "description": "Verify AlarmsSupported attribute bit 0", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "4b" + }, + { + "description": "Verify AlarmsSupported attribute bit 1", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "5a" + }, + { + "description": "Verify AlarmsSupported attribute bit 1", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "5b" + } + ] + }, + { + "class_name": "TC_BOOLCFG_4_2", + "desc": "[TC-BOOLCFG-4.2] AlarmsActive attribute with DUT as Server", + "function": "test_TC_BOOLCFG_4_2", + "path": "sdk/TC_BOOLCFG_4_2", + "pics": [ + "BOOLCFG.S" + ], + "steps": [ + { + "description": "Commissioning, already done", + "expectation": "", + "is_commissioning": true, + "test_plan_number": 1 + }, + { + "description": "Read FeatureMap attribute", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "2a" + }, + { + "description": "Read AttributeList attribute", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "2b" + }, + { + "description": "Create variable named enabledAlarms", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "3a" + }, + { + "description": "If VIS is supported, set bit 0 to 1", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "3b" + }, + { + "description": "If AUD is supported, set bit 1 to 1", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "3c" + }, + { + "description": "Set AlarmsEnabled attribute to value of enabledAlarms using EnableDisableAlarm command", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "3d" + }, + { + "description": "Send TestEventTrigger with SensorTrigger event", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 4 + }, + { + "description": "Read AlarmsActive attribute", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 5 + }, + { + "description": "Verify VIS alarm is active, if supported", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "6a" + }, + { + "description": "Verify VIS alarm is not active, if not supported", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "6b" + }, + { + "description": "Verify AUD alarm is active, if supported", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "7a" + }, + { + "description": "Verify AUD alarm is not active, if not supported", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "7b" + }, + { + "description": "Send TestEventTrigger with SensorUntrigger event", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 8 + }, + { + "description": "Read AlarmsActive attribute", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 9 + } + ] + }, + { + "class_name": "TC_BOOLCFG_4_3", + "desc": "[TC-BOOLCFG-4.3] AlarmsEnabled functionality for inactive alarms with DUT as Server", + "function": "test_TC_BOOLCFG_4_3", + "path": "sdk/TC_BOOLCFG_4_3", + "pics": [ + "BOOLCFG.S" + ], + "steps": [ + { + "description": "Commissioning, already done", + "expectation": "", + "is_commissioning": true, + "test_plan_number": 1 + }, + { + "description": "Read FeatureMap attribute", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "2a" + }, + { + "description": "Read AttributeList attribute", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "2b" + }, + { + "description": "Verify AlarmsEnabled is supported", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 3 + }, + { + "description": "Create enabledAlarms and set to 0", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 4 + }, + { + "description": "Enable VIS alarm in enabledAlarms", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "5a" + }, + { + "description": "Set AlarmsEnabled attribute to value of enabledAlarms using AlarmsToEnableDisable command", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "5b" + }, + { + "description": "Send TestEventTrigger with SensorTrigger event", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 6 + }, + { + "description": "Read AlarmsActive attribute", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 7 + }, + { + "description": "Send TestEventTrigger with SensorUntrigger event", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 8 + }, + { + "description": "Read AlarmsActive attribute", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 9 + }, + { + "description": "Set enabledAlarms to 0", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 10 + }, + { + "description": "Set AlarmsEnabled attribute to value of enabledAlarms using AlarmsToEnableDisable command", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 11 + }, + { + "description": "Send TestEventTrigger with SensorTrigger event", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 12 + }, + { + "description": "Read AlarmsActive attribute", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 13 + }, + { + "description": "Send TestEventTrigger with SensorUntrigger event", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 14 + }, + { + "description": "Enable AUD alarm in enabledAlarms", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "15a" + }, + { + "description": "Set AlarmsEnabled attribute to value of enabledAlarms using AlarmsToEnableDisable command", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "15b" + }, + { + "description": "Send TestEventTrigger with SensorTrigger event", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 16 + }, + { + "description": "Read AlarmsActive attribute", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 17 + }, + { + "description": "Send TestEventTrigger with SensorUntrigger event", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 18 + }, + { + "description": "Read AlarmsActive attribute", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 19 + }, + { + "description": "Set enabledAlarms to 0", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 20 + }, + { + "description": "Set AlarmsEnabled attribute to value of enabledAlarms using AlarmsToEnableDisable command", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 21 + }, + { + "description": "Send TestEventTrigger with SensorTrigger event", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 22 + }, + { + "description": "Read AlarmsActive attribute", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 23 + }, + { + "description": "Send TestEventTrigger with SensorUntrigger event", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 24 + } + ] + }, + { + "class_name": "TC_BOOLCFG_4_4", + "desc": "[TC-BOOLCFG-4.4] AlarmsEnabled functionality for active alarms with DUT as Server", + "function": "test_TC_BOOLCFG_4_4", + "path": "sdk/TC_BOOLCFG_4_4", + "pics": [ + "BOOLCFG.S" + ], + "steps": [ + { + "description": "Commissioning, already done", + "expectation": "", + "is_commissioning": true, + "test_plan_number": 1 + }, + { + "description": "Read FeatureMap attribute", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "2a" + }, + { + "description": "Read AttributeList attribute", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "2b" + }, + { + "description": "Verify AlarmsEnabled is supported", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 3 + }, + { + "description": "Create enabledAlarms and set to 0", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 4 + }, + { + "description": "Enable VIS alarm in enabledAlarms", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "5a" + }, + { + "description": "Enable AUD alarm in enabledAlarms", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "5b" + }, + { + "description": "Set AlarmsEnabled attribute to value of enabledAlarms using AlarmsToEnableDisable command", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "5c" + }, + { + "description": "Send TestEventTrigger with SensorTrigger event", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 6 + }, + { + "description": "Read AlarmsActive attribute", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 7 + }, + { + "description": "Verify VIS alarm is active", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 8 + }, + { + "description": "Disable VIS alarm in enabledAlarms", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "9a" + }, + { + "description": "Set AlarmsEnabled attribute to value of enabledAlarms using AlarmsToEnableDisable command", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "9b" + }, + { + "description": "Read AlarmsActive attribute", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 10 + }, + { + "description": "Verify AUD alarm is active", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 11 + }, + { + "description": "Disable VIS alarm in enabledAlarms", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "12a" + }, + { + "description": "Set AlarmsEnabled attribute to value of enabledAlarms using AlarmsToEnableDisable command", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "12b" + }, + { + "description": "Read AlarmsActive attribute", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 13 + }, + { + "description": "Send TestEventTrigger with SensorUntrigger event", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 14 + } + ] + }, + { + "class_name": "TC_BOOLCFG_5_1", + "desc": "[TC-BOOLCFG-5.1] SuppressAlarm functionality for inactive alarms with DUT as Server", + "function": "test_TC_BOOLCFG_5_1", + "path": "sdk/TC_BOOLCFG_5_1", + "pics": [ + "BOOLCFG.S" + ], + "steps": [ + { + "description": "Commissioning, already done", + "expectation": "", + "is_commissioning": true, + "test_plan_number": 1 + }, + { + "description": "Read FeatureMap attribute", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 2 + }, + { + "description": "Verify SPRS feature is supported", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 3 + }, + { + "description": "Create enabledAlarms and set to 0", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 4 + }, + { + "description": "Enable VIS alarm in enabledAlarms", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "5a" + }, + { + "description": "Enable AUD alarm in enabledAlarms", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "5b" + }, + { + "description": "Set AlarmsEnabled attribute to value of enabledAlarms using AlarmsToEnableDisable command", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "5c" + }, + { + "description": "Send TestEventTrigger with SensorUntrigger event", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 6 + }, + { + "description": "Suppress VIS alarm using SuppressAlarm command", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "7a" + }, + { + "description": "Suppress VIS alarm using SuppressAlarm command", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "7b" + }, + { + "description": "Read AlarmsSuppressed attribute", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 8 + }, + { + "description": "Suppress AUD alarm using SuppressAlarm command", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "9a" + }, + { + "description": "Suppress AUD alarm using SuppressAlarm command", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "9b" + }, + { + "description": "Read AlarmsSuppressed attribute", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 10 + } + ] + }, + { + "class_name": "TC_BOOLCFG_5_2", + "desc": "[TC-BOOLCFG-5.2] SuppressAlarm functionality for active alarms with DUT as Server", + "function": "test_TC_BOOLCFG_5_2", + "path": "sdk/TC_BOOLCFG_5_2", + "pics": [ + "BOOLCFG.S" + ], + "steps": [ + { + "description": "Commissioning, already done", + "expectation": "", + "is_commissioning": true, + "test_plan_number": 1 + }, + { + "description": "Read FeatureMap attribute", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 2 + }, + { + "description": "Verify SPRS feature is supported", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 3 + }, + { + "description": "Create enabledAlarms and set to 0", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 4 + }, + { + "description": "Enable VIS alarm in enabledAlarms", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "5a" + }, + { + "description": "Enable AUD alarm in enabledAlarms", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "5b" + }, + { + "description": "Set AlarmsEnabled attribute to value of enabledAlarms using AlarmsToEnableDisable command", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "5c" + }, + { + "description": "Send TestEventTrigger with SensorTrigger event", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 6 + }, + { + "description": "Suppress VIS alarm using SuppressAlarm command", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 7 + }, + { + "description": "Read AlarmsSuppressed attribute", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 8 + }, + { + "description": "Suppress AUD alarm using SuppressAlarm command", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 9 + }, + { + "description": "Read AlarmsActive attribute", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 10 + }, + { + "description": "Send TestEventTrigger with SensorUntrigger event", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 11 + } + ] + }, + { + "class_name": "TC_BRBINFO_4_1", + "desc": "[TC_BRBINFO_4_1] Verification of KeepActive Command [DUT-Server]", + "function": "test_TC_BRBINFO_4_1", + "path": "sdk/TC_BRBINFO_4_1", + "pics": [], + "steps": [ + { + "description": "DUT commissioned and preconditions", + "expectation": "", + "is_commissioning": true, + "test_plan_number": "0" + }, + { + "description": "TH reads from the ICD the A_IDLE_MODE_DURATION, A_ACTIVE_MODE_DURATION, and ACTIVE_MODE_THRESHOLD attributes", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "1" + }, + { + "description": "Setting up subscribe to ActiveChange event", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "2" + }, + { + "description": "Check TimeoutMs too low fails", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "3" + }, + { + "description": "Check TimeoutMs too high fails", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "4" + }, + { + "description": "Check KeepActive successful with valid command parameters lowest possible TimeoutMs", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "5" + }, + { + "description": "Validate previous command results in ActiveChanged event shortly after ICD device checks-in", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "6" + }, + { + "description": "Check KeepActive successful with valid command parameters highest possible TimeoutMs", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "7" + }, + { + "description": "Validate previous command results in ActiveChanged event shortly after ICD device checks-in", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "8" + }, + { + "description": "Send multiple KeepActive commands during window where ICD device will not check in", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "9" + }, + { + "description": "Validate previous command results in single ActiveChanged event shortly after ICD device checks-in", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "10" + }, + { + "description": "Validate we received no additional ActiveChanged event after subsequent ICD check in", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "11" + }, + { + "description": "Send KeepActive command with shortest TimeoutMs value while TH_ICD is prevented from sending check-ins", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "12" + }, + { + "description": "TH allows TH_ICD to resume sending check-ins after timeout should have expired", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "13" + }, + { + "description": "Wait for TH_ICD to check into TH twice, then confirm we have had no new ActiveChanged events reported from DUT", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "14" + }, + { + "description": "Send KeepActive command with shortest TimeoutMs value while TH_ICD is prevented from sending check-ins", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "15" + }, + { + "description": "Wait 15 seconds then send second KeepActive command with double the TimeoutMs value of the previous step", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "16" + }, + { + "description": "TH allows TH_ICD to resume sending check-ins after timeout from step 15 expired but before second timeout from step 16 still valid", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "17" + }, + { + "description": "Wait for TH_ICD to check into TH, then confirm we have received new event from DUT", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "18" + } + ] + }, + { + "class_name": "TC_CADMIN_1_9", + "desc": "test_TC_CADMIN_1_9", + "function": "test_TC_CADMIN_1_9", + "path": "sdk/TC_CADMIN_1_9", + "pics": [ + "CADMIN.S" + ], + "steps": [ + { + "description": "Commissioning, already done", + "expectation": "", + "is_commissioning": true, + "test_plan_number": 1 + }, + { + "description": "TH1 opens commissioning window on DUT with duration set to value for maxCumulativeFailsafeSeconds", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 2 + }, + { + "description": "TH2 attempts to connect 20 times to endpoint with incorrect passcode", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 3 + }, + { + "description": "TH2 attempts to connect to endpoint with correct passcode", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 4 + }, + { + "description": "TH1 opening Commissioning Window one more time to validate ability to do so", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 5 + }, + { + "description": "TH1 revoking Commissioning Window", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 6 + } + ] + }, + { + "class_name": "TC_CCTRL_2_1", + "desc": "test_TC_CCTRL_2_1", + "function": "test_TC_CCTRL_2_1", + "path": "sdk/TC_CCTRL_2_1", + "pics": [], + "steps": [ + { + "description": "Read MCORE.FS PICS code", + "expectation": "", + "is_commissioning": true, + "test_plan_number": 1 + }, + { + "description": "Validate SupportedDeviceCategories is set accordingly based on MCORE.FS", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 2 + } + ] + }, + { + "class_name": "TC_CCTRL_2_2", + "desc": "test_TC_CCTRL_2_2", + "function": "test_TC_CCTRL_2_2", + "path": "sdk/TC_CCTRL_2_2", + "pics": [], + "steps": [ + { + "description": "Get number of fabrics from TH_SERVER", + "expectation": "", + "is_commissioning": true, + "test_plan_number": 1 + }, + { + "description": "Reading Attribute VendorId from TH_SERVER", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 2 + }, + { + "description": "Reading Attribute ProductId from TH_SERVER", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 3 + }, + { + "description": "Reading Event CommissioningRequestResult from DUT", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 4 + }, + { + "description": "Send CommissionNode command to DUT with CASE session", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 5 + }, + { + "description": "Send OpenCommissioningWindow command on Administrator Commissioning Cluster to DUT with CASE session", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 6 + }, + { + "description": "Send CommissionNode command to DUT with PASE session", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 7 + }, + { + "description": "Send RequestCommissioningApproval command to DUT with PASE session", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 8 + }, + { + "description": "Send RevokeCommissioning command on Administrator Commissioning Cluster to DUT with CASE session", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 9 + }, + { + "description": "Reading Event CommissioningRequestResult from DUT, confirm no new events", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 10 + }, + { + "description": "Send RequestCommissioningApproval command to DUT with CASE session with incorrect vendorID", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 11 + }, + { + "description": "(Manual Step) Approve Commissioning Approval Request on DUT using method indicated by the manufacturer", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 12 + }, + { + "description": "Reading Event CommissioningRequestResult from DUT, confirm one new event", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 13 + }, + { + "description": "Send CommissionNode command to DUT with CASE session, with invalid RequestId", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 14 + }, + { + "description": "Send CommissionNode command to DUT with CASE session, with invalid ResponseTimeoutSeconds too low", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 15 + }, + { + "description": "Send CommissionNode command to DUT with CASE session, with invalid ResponseTimeoutSeconds too high", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 16 + }, + { + "description": "Send CommissionNode command to DUT with CASE session, with valid parameters", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 17 + }, + { + "description": "Send OpenCommissioningWindow command on Administrator Commissioning Cluster sent to TH_SERVER", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 18 + }, + { + "description": "Wait for DUT to fail commissioning TH_SERVER, 30 seconds", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 19 + }, + { + "description": "Get number of fabrics from TH_SERVER", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 20 + }, + { + "description": "Send RevokeCommissioning command on Administrator Commissioning Cluster sent to TH_SERVER", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 21 + }, + { + "description": "Send RequestCommissioningApproval command to DUT with CASE session with correct vendorID", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 22 + }, + { + "description": "(Manual Step) Approve Commissioning Approval Request on DUT using method indicated by the manufacturer", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 23 + }, + { + "description": "Reading Event CommissioningRequestResult from DUT, confirm one new event", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 24 + }, + { + "description": "Send CommissionNode command to DUT with CASE session, with valid parameters", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 25 + }, + { + "description": "Send OpenCommissioningWindow command on Administrator Commissioning Cluster sent to TH_SERVER", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 26 + }, + { + "description": "Wait for DUT to successfully commission TH_SERVER, 30 seconds", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 27 + }, + { + "description": "Get number of fabrics from TH_SERVER, verify DUT successfully commissioned TH_SERVER", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 28 + } + ] + }, + { + "class_name": "TC_CC_10_1", + "desc": "4.2.29. [TC_CC_10_1] Scenes Management Cluster Interaction with DUT as Server", + "function": "test_TC_CC_10_1", + "path": "sdk/TC_CC_10_1", + "pics": [ + "CC.S", + "S.S" + ], + "steps": [ + { + "description": "Commissioning, already done", + "expectation": "", + "is_commissioning": true, + "test_plan_number": "0" + }, + { + "description": "TH sends KeySetWrite command in the GroupKeyManagement cluster to DUT using a key that is pre-installed on the TH. GroupKeySet fields are as follows: GroupKeySetID: 0x01a1, GroupKeySecurityPolicy: TrustFirst (0), EpochKey0: a0a1a2a3a4a5a6a7a8a9aaabacadaeaf, EpochStartTime0: 1110000, EpochKey1: b0b1b2b3b4b5b6b7b8b9babbbcbdbebf, EpochStartTime1: 1110001, EpochKey2: c0c1c2c3c4c5c6c7c8c9cacbcccdcecf, EpochStartTime2: 1110002", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "0a" + }, + { + "description": "TH binds GroupIds 0x0001 with GroupKeySetID 0x01a1 in the GroupKeyMap attribute list on GroupKeyManagement cluster by writing the GroupKeyMap attribute with two entries as follows: * List item 1: - FabricIndex: 1 - GroupId: 0x0001 - GroupKeySetId: 0x01a1", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "0b" + }, + { + "description": "TH sends a _RemoveAllGroups_ command to DUT.", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "0c" + }, + { + "description": "TH sends a _AddGroup_ command to DUT with the _GroupID_ field set to _G~1~_.", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "1a" + }, + { + "description": "TH sends a _RemoveAllScenes_ command to DUT with the _GroupID_ field set to _G~1~_.", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "1b" + }, + { + "description": "TH sends a _GetSceneMembership_ command to DUT with the _GroupID_ field set to _G~1~_.", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "1c" + }, + { + "description": "TH reads ColorTempPhysicalMinMireds attribute from DUT.", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "1d" + }, + { + "description": "TH reads ColorTempPhysicalMaxMireds attribute from DUT.", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "1e" + }, + { + "description": "TH sends _MoveToHueAndSaturation command_ to DUT with _Hue_=200, _Saturation_=50 and _TransitionTime_=0 (immediately).", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "2a" + }, + { + "description": "TH reads _CurrentHue and CurrentSaturation attributes_ from DUT.", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "2b" + }, + { + "description": "TH sends _MoveToColor command_ to DUT, with: ColorX = 32768/0x8000 (x=0.5) (purple), ColorY = 19660/0x4CCC (y=0.3), TransitionTime = 0 (immediate)", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "2c" + }, + { + "description": "TH reads _CurrentX and CurrentY attributes_ from DUT.", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "2d" + }, + { + "description": "TH sends _MoveToColorTemperature command_ to DUT with _ColorTemperatureMireds_=(_ColorTempPhysicalMinMireds_ + _ColorTempPhysicalMaxMireds_)/2", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "2e" + }, + { + "description": "TH sends _MoveColorTemperature command_ to DUT with _MoveMode_ = 0x01 (up), _Rate_ = (_ColorTempPhysicalMaxMireds_ - _ColorTempPhysicalMinMireds_)/40", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "2f" + }, + { + "description": "After 10 seconds, TH reads _ColorTemperatureMireds attribute_ from DUT.", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "2g" + }, + { + "description": "TH sends _EnhancedMoveToHueAndSaturation command_ to DUT with _EnhancedHue_=20000, _Saturation_=50 and _TransitionTime_=0 (immediately).", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "2h" + }, + { + "description": "TH reads _EnhancedCurrentHue and CurrentSaturation attributes_ from DUT.", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "2i" + }, + { + "description": "TH sends a _StoreScene_ command to DUT with the _GroupID_ field set to _G~1~_ and the _SceneID_ field set to 0x01.", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "3" + }, + { + "description": "TH sends a _ViewScene_ command to DUT with the _GroupID_ field set to _G~1~_ and the _SceneID_ field set to 0x01.", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "4" + }, + { + "description": "TH sends a _AddScene_ command to DUT with the _GroupID_ field set to _G~1~_, the _SceneID_ field set to 0x02, the TransitionTime field set to 0 and the ExtensionFieldSets set to: '[{ ClusterID: 0x0300, AttributeValueList: [{ AttributeID: 0x4001, ValueUnsigned8: 0x00 }, { AttributeID: 0x0001, ValueUnsigned8: 0xFE }]}]'", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "5a" + }, + { + "description": "TH sends a _RecallScene_ command to DUT with the _GroupID_ field set to _G~1~_, the _SceneID_ field set to 0x02 and the _TransitionTime_ omitted.", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "5b" + }, + { + "description": "TH reads the _CurrentSaturation attribute_ from DUT.", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "5c" + }, + { + "description": "TH sends a _AddScene_ command to DUT with the _GroupID_ field set to _G~1~_, the _SceneID_ field set to 0x03, the TransitionTime field set to 0 and the ExtensionFieldSets set to: '[{ ClusterID: 0x0300, AttributeValueList: [{ AttributeID: 0x4001, ValueUnsigned8: 0x01 }, { AttributeID: 0x0003, ValueUnsigned16: 16334 },{ AttributeID: 0x0004, ValueUnsigned16: 13067 }]}]'", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "6a" + }, + { + "description": "TH sends a _RecallScene_ command to DUT with the _GroupID_ field set to _G~1~_, the _SceneID_ field set to 0x03 and the _TransitionTime_ omitted.", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "6b" + }, + { + "description": "TH reads _CurrentX and CurrentY attributes_ from DUT.", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "6c" + }, + { + "description": "TH sends a _AddScene_ command to DUT with the _GroupID_ field set to _G~1~_, the _SceneID_ field set to 0x04, the TransitionTime field set to 0 and the ExtensionFieldSets set to: '[{ ClusterID: 0x0300, AttributeValueList: [{ AttributeID: 0x4001, ValueUnsigned8: 0x02 }, { AttributeID: 0x0007, ValueUnsigned16: 175 }]}]'", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "7a" + }, + { + "description": "TH sends a _RecallScene_ command to DUT with the _GroupID_ field set to _G~1~_, the _SceneID_ field set to 0x04 and the _TransitionTime_ omitted.", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "7b" + }, + { + "description": "TH reads _ColorTemperatureMireds attribute_ from DUT.", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "7c" + }, + { + "description": "TH sends a _AddScene_ command to DUT with the _GroupID_ field set to _G~1~_, the _SceneID_ field set to 0x05, the TransitionTime field set to 0 and the ExtensionFieldSets set to: '[{ ClusterID: 0x0300, AttributeValueList: [{ AttributeID: 0x4001, ValueUnsigned8: 0x03 }, { AttributeID: 0x4000, ValueUnsigned16: 12000 }, { AttributeID: 0x0001, ValueUnsigned16: 70 }]}]'", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "8a" + }, + { + "description": "TH sends a _RecallScene_ command to DUT with the _GroupID_ field set to _G~1~_, the _SceneID_ field set to 0x05 and the _TransitionTime_ omitted.", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "8b" + }, + { + "description": "TH reads _EnhancedCurrentHue and CurrentSaturation attributes_ from DUT.", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "8c" + }, + { + "description": "TH sends a _AddScene_ command to DUT with the _GroupID_ field set to _G~1~_, the _SceneID_ field set to 0x06, the TransitionTime field set to 0 and the ExtensionFieldSets set to: '[{ ClusterID: 0x0300, AttributeValueList: [{ AttributeID: 0x4002, ValueUnsigned16: 1 }, { AttributeID: 0x4002, ValueUnsigned16: 1 }, { AttributeID: 0x4004, ValueUnsigned16: 5 }]}]'", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "9a" + }, + { + "description": "TH sends a _RecallScene_ command to DUT with the _GroupID_ field set to _G~1~_, the _SceneID_ field set to 0x05 and the _TransitionTime_ omitted.", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "9b" + }, + { + "description": "TH read _ColorLoopActive attribute_ from DUT.", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "9c" + }, + { + "description": "TH read _ColorLoopDirection attribute_ from DUT.", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "9d" + }, + { + "description": "TH read _ColorLoopTime attribute_ from DUT.", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "9e" + } + ] + }, + { + "class_name": "TC_CC_2_3", + "desc": "test_TC_CC_2_2", + "function": "test_TC_CC_2_2", + "path": "sdk/TC_CC_2_2", + "pics": [], + "steps": [ + { + "description": "Commission DUT if not already done", + "expectation": "", + "is_commissioning": true, + "test_plan_number": 1 + }, + { + "description": "reads the FeatureMap attribute", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 2 + }, + { + "description": "reads the AttributeList attribute", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 3 + }, + { + "description": "reads the ServerList attribute from Descriptor", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 4 + }, + { + "description": "If OnOff cluster is present in _ServerList_, Test Harness sends the On command on OnOff cluster", + "expectation": "Verify DUT responds w/ status SUCCESS", + "is_commissioning": false, + "test_plan_number": 5 + }, + { + "description": "Set up a subscription wildcard subscription for the Color Control Cluster, with MinIntervalFloor set to 0, MaxIntervalCeiling set to 30 and KeepSubscriptions set to false", + "expectation": "Subscription successfully established", + "is_commissioning": false, + "test_plan_number": 6 + }, + { + "description": "If the CT feature is not supported, skip step 8 to 12", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 7 + }, + { + "description": "Test Harness sends the MoveColorTemperature with _MoveMode_ field set to Down, _Rate_ field set to 65535 and remaining fields set to 0", + "expectation": "Verify DUT responds w/ status SUCCESS", + "is_commissioning": false, + "test_plan_number": 8 + }, + { + "description": "TH reads from the DUT the ColorTempPhysicalMaxMireds and stores the returned value as colorTempPhysicalMaxMireds", + "expectation": "Verify DUT responds w/ status SUCCESS", + "is_commissioning": false, + "test_plan_number": 9 + }, + { + "description": "Test Harness sends the MoveToColorTemperature with ColorTemperatureMireds field set to the value of colorTempPhysicalMaxMireds, TransitionTime field set to 100, remaining fields set to 0", + "expectation": "Verify DUT responds w/ status SUCCESS", + "is_commissioning": false, + "test_plan_number": 10 + }, + { + "description": "TH stores the reported values of _ColorTemperatureMireds_ in all incoming reports for _ColorTemperatureMireds_ attribute, that contains data in _reportedColorTemperatureMiredsValuesList_, over a period of 20 seconds.", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 11 + }, + { + "description": "TH verifies that _reportedColorTemperatureMiredsValuesList_ does not contain more than 12 entries for _ColorTemperatureMireds_", + "expectation": "_reportedColorTemperatureMiredsValuesList_ has 12 or less entries in the list", + "is_commissioning": false, + "test_plan_number": 12 + }, + { + "description": "If the HS feature is not supported, skip step 14 to 21", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 13 + }, + { + "description": "Test Harness sends the MoveHue with _MoveMode_ field set to Down, _Rate_ field set to 255 and remaining fields set to 0", + "expectation": "Verify DUT responds w/ status SUCCESS", + "is_commissioning": false, + "test_plan_number": 14 + }, + { + "description": "Test Harness sends the MoveSaturation with _MoveMode_ field set to Down, _Rate_ field set to 255 and remaining fields set to 0", + "expectation": "Verify DUT responds w/ status SUCCESS", + "is_commissioning": false, + "test_plan_number": 15 + }, + { + "description": "Test Harness sends the MoveToHue with _Hue_ field set to 254, _TransitionTime_ field set to 100, _Direction_ field set to Shortest and remaining fields set to 0", + "expectation": "Verify DUT responds w/ status SUCCESS", + "is_commissioning": false, + "test_plan_number": 16 + }, + { + "description": "TH stores the reported values of _CurrentHue_ in all incoming reports for _CurrentHue_ attribute, that contains data in _reportedCurrentHueValuesList_, over a period of 20 seconds.", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 17 + }, + { + "description": "TH verifies that _reportedCurrentHueValuesList_ does not contain more than 12 entries for _CurrentHue_", + "expectation": "_reportedCurrentHueValuesList_ has 12 or less entries in the list", + "is_commissioning": false, + "test_plan_number": 18 + }, + { + "description": "Test Harness sends the MoveToSaturation with _Saturation_ field set to 254, _TransitionTime_ field set to 100 and remaining fields set to 0", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 19 + }, + { + "description": "TH stores the reported values of _CurrentSaturation_ in all incoming reports for _CurrentSaturation_ attribute, that contains data in _reportedCurrentSaturationValuesList_, over a period of 20 seconds.", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 20 + }, + { + "description": "TH verifies that _reportedCurrentSaturationValuesList_ does not contain more than 12 entries for _CurrentSaturation_", + "expectation": "_reportedCurrentSaturationValuesList_ has 12 or less entries in the list", + "is_commissioning": false, + "test_plan_number": 21 + }, + { + "description": "If XY feature is not supported, skip steps 23-28", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 22 + }, + { + "description": "Test Harness sends the MoveToColor with _ColorX_ field set to 32768, _ColorY_ set to 19660, _TransitionTime_ field set to 0 and remaining fields set to 0", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 23 + }, + { + "description": "Test Harness sends the MoveToColor with _ColorX_ field set to 13107, _ColorY_ set to 13107, _TransitionTime_ field set to 100 and remaining fields set to 0", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 24 + }, + { + "description": "TH stores the reported values of _CurrentX_ in all incoming reports for _CurrentX_ attribute, that contains data in _reportedCurrentXValuesList_, over a period of 20 seconds.", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 25 + }, + { + "description": "TH stores the reported values of _CurrentY_ in all incoming reports for _CurrentY_ attribute, that contains data in _reportedCurrentYValuesList_, over a period of 20 seconds.", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 26 + }, + { + "description": "TH verifies that _reportedCurrentXValuesList_ does not contain more than 12 entries for _CurrentX_", + "expectation": "_reportedCurrentXValuesList_ has 12 or less entries in the list", + "is_commissioning": false, + "test_plan_number": 27 + }, + { + "description": "TH verifies that _reportedCurrentYValuesList_ does not contain more than 12 entries for _CurrentY_", + "expectation": "_reportedCurrentYValuesList_ has 12 or less entries in the list", + "is_commissioning": false, + "test_plan_number": 28 + }, + { + "description": "If the EHUE feature is not supported, skip steps 30 to 32", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 29 + }, + { + "description": "Test Harness sends the EnhancedMoveToHue with _EnhancedHue_ field set to 0, _TransitionTime_ field set to 100, _Direction_ field set to Shortest and remaining fields set to 0", + "expectation": "Verify DUT responds w/ status SUCCESS", + "is_commissioning": false, + "test_plan_number": 30 + }, + { + "description": "TH stores the reported values of _EnhancedCurrentHue_ in all incoming reports for _EnhancedCurrentHue_ attribute, that contains data in _reportedEnhancedCurrentHueValuesList_, over a period of 20 seconds.", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 31 + }, + { + "description": "TH verifies that _reportedEnhancedCurrentHueValuesList_ does not contain more than 12 entries for _EnhancedCurrentHue_", + "expectation": "_reportedEnhancedCurrentHueValuesList_ has 12 or less entries in the list", + "is_commissioning": false, + "test_plan_number": 32 + }, + { + "description": "If the RemainingTime attribute is not supported or the CT feature is not supported, skip the remaining steps and end test case", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 33 + }, + { + "description": "Test Harness sends the MoveColorTemperature with MoveMode field set to Down, Rate field set to 65535 and remaining fields set to 0", + "expectation": "Verify DUT responds w/ status SUCCESS", + "is_commissioning": false, + "test_plan_number": 34 + }, + { + "description": "TH stores the reported values of RemainingTime in all incoming reports for RemainingTime attribute, for steps 36 to 39 that contains data in reportedRemainingTimeValuesList.", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 35 + }, + { + "description": "Test Harness sends the MoveToColorTemperature with ColorTemperatureMireds field set to the value of colorTempPhysicalMaxMireds / 2, TransitionTime field set to 100, remaining fields set to 0", + "expectation": "Verify DUT responds w/ status SUCCESS", + "is_commissioning": false, + "test_plan_number": 36 + }, + { + "description": "Wait for 5 seconds", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 37 + }, + { + "description": "Test Harness sends the MoveToColorTemperature with ColorTemperatureMireds field set to the value of colorTempPhysicalMaxMireds, TransitionTime field set to 150, remaining fields set to 0", + "expectation": "Verify DUT responds w/ status SUCCESS", + "is_commissioning": false, + "test_plan_number": 38 + }, + { + "description": "Wait for 20 seconds", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 39 + }, + { + "description": "TH verifies _reportedRemainingTimeValuesList_ contains three entries", + "expectation": "_reportedRemainingTimeValuesList_ has 3 entries in the list", + "is_commissioning": false, + "test_plan_number": 40 + }, + { + "description": "TH verifies the first entry in _reportedRemainingTimeValuesList_ is 100", + "expectation": "The first entry in reportedRemainingTimeValuesList is in the range of 95 to 100", + "is_commissioning": false, + "test_plan_number": 41 + }, + { + "description": "TH verifies the second entry in _reportedRemainingTimeValuesList_ is approximately 150", + "expectation": "The second entry in reportedRemainingTimeValuesList is in the range of 145 to 150", + "is_commissioning": false, + "test_plan_number": 42 + }, + { + "description": "TH verifies the third entry in _reportedRemainingTimeValuesList_ is 0", + "expectation": "The third entry in _reportedRemainingTimeValuesList_ is equal to 0", + "is_commissioning": false, + "test_plan_number": 43 + } + ] + }, + { + "class_name": "TC_CGEN_2_4", + "desc": "test_TC_CGEN_2_4", + "function": "test_TC_CGEN_2_4", + "path": "sdk/TC_CGEN_2_4", + "pics": [], + "steps": [ + { + "description": "Run entire test", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 1 + } + ] + }, + { + "class_name": "TC_CNET_1_4", + "desc": "test_TC_CNET_1_4", + "function": "test_TC_CNET_1_4", + "path": "sdk/TC_CNET_1_4", + "pics": [ + "CNET.S" + ], + "steps": [ + { + "description": "TH is commissioned", + "expectation": "", + "is_commissioning": true, + "test_plan_number": 1 + }, + { + "description": "TH performs a wildcard read of the FeatureMap attribute on Network Commissioning clusters across all endpoints, and saves the response as `NetworkCommissioningResponse`", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 2 + }, + { + "description": "If `NetworkCommissioningResponse` does not contain any entries for Network Commissioning cluster, skip remaining steps and end test case", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 3 + }, + { + "description": "If `NetworkCommissioningResponse` contains only a single entry for Network Commissioning cluster on Endpoint 0, skip remaining steps and end test case. Verify `NetworkCommissioningResponse` contains an entry for Network Commissioning cluster on Endpoint 0", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 4 + }, + { + "description": "TH reads from the DUT the Descriptor Cluster DeviceTypeList attribute on each endpoint from the `NetworkCommissioningResponse` (except for Endpoint 0), verify that the Secondary Network Interface device type id (0x0019) is listed in the DeviceTypeList", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 5 + }, + { + "description": "TH reads from the DUT the General Commissioning Cluster SupportsConcurrentConnection attribute, verify that it is true", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 6 + } + ] + }, + { + "class_name": "TC_CNET_4_4", + "desc": "test_TC_CNET_4_4", + "function": "test_TC_CNET_4_4", + "path": "sdk/TC_CNET_4_4", + "pics": [ + "CNET.S" + ], + "steps": [ + { + "description": "TH is commissioned", + "expectation": "", + "is_commissioning": true, + "test_plan_number": "precondition" + }, + { + "description": "TH reads from the DUT the Network Commissioning Cluster FeatureMap. If the FeatureMap does not include the WI flag (bit 0), skip the remaining steps in this test case", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 1 + }, + { + "description": "TH reads from the DUT the SupportedWifiBands attribute and saves as supported_wifi_bands", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 2 + }, + { + "description": "TH reads from the DUT the Networks attribute.", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 3 + }, + { + "description": "TH sends ScanNetworks command to the DUT with the SSID field set to null and Breadcrumb field set to 1", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 4 + }, + { + "description": "TH reads from the DUT the Breadcrumb attribute from the General Commissioning Cluster", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 5 + }, + { + "description": "TH sends ScanNetworks Command to the DUT with SSID field set to known_ssid and Breadcrumb field set to 2", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 6 + }, + { + "description": "TH reads Breadcrumb attribute from the General Commissioning Cluster", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 7 + }, + { + "description": "TH sends ScanNetworks Command to the DUT with SSID field set to a string of 31 random alphabetical characters and Breadcrumb field set to 2", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 8 + } + ] + }, + { + "class_name": "TC_DA_1_2", + "desc": "Device Attestation Request Validation [DUT - Commissionee]", + "function": "test_TC_DA_1_2", + "path": "sdk/TC_DA_1_2", + "pics": [], + "steps": [ + { + "description": "Commission DUT if not done", + "expectation": "", + "is_commissioning": true, + "test_plan_number": 0 + }, + { + "description": "TH1 generates 32-byte AttestationNonce and saves as `nonce", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 1 + }, + { + "description": "TH1 sends AttestationRequest Command to the DUT with AttestationNonce set to `nonce`", + "expectation": "Verify AttestationResponse is received", + "is_commissioning": false, + "test_plan_number": 2 + }, + { + "description": "TH1 sends CertificateChainRequest Command with CertificateType field set to DACCertificate (1) to DUT to obtain DAC", + "expectation": "DUT responds with CertificateChainResponse the DAC certificate in X.509v3 format with size \u21d0 600 bytes", + "is_commissioning": false, + "test_plan_number": "3a" + }, + { + "description": "TH1 sends CertificateChainRequest Command with CertificateType field set to PAICertificate (2) to DUT to obtain PAI", + "expectation": "DUT responds with CertificateChainResponse the PAI certificate in X.509v3 format with size \u21d0 600 bytes", + "is_commissioning": false, + "test_plan_number": "3b" + }, + { + "description": "TH1 Reads the VendorID attribute of the Basic Information cluster and saves it as `basic_info_vendor_id`", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "4a" + }, + { + "description": "TH1 Reads the ProductID attribute of the Basic Information cluster and saves it as `basic_info_product_id`", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "4b" + }, + { + "description": "Extract the attestation_elements_message structure fields from the AttestationResponse", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 5 + }, + { + "description": "Verify AttestationElements field size", + "expectation": "AttestationElements field size should not be greater than RESP_MAX(900 bytes)", + "is_commissioning": false, + "test_plan_number": "5.1" + }, + { + "description": "Verify certification_declaration format", + "expectation": "certification_declaration is present and is an octet string representation CMS-format certification declaration, as described in section 6.3.1", + "is_commissioning": false, + "test_plan_number": "5.2" + }, + { + "description": "Verify CD format_version", + "expectation": "format_version = 1", + "is_commissioning": false, + "test_plan_number": "6.1" + }, + { + "description": "Verify CD vendor_id", + "expectation": "vendor_id field matches `basic_info_vendor_id` and is in the standard vendor ID range", + "is_commissioning": false, + "test_plan_number": "6.2" + }, + { + "description": "Verify CD product_id_array", + "expectation": "product_id_array field contains `basic_info_product_id`", + "is_commissioning": false, + "test_plan_number": "6.3" + }, + { + "description": "Verify CD device_type_id", + "expectation": "device_type_id has a value between 0 and (2^31 - 1)", + "is_commissioning": false, + "test_plan_number": "6.4" + }, + { + "description": "Verify CD certificate_id", + "expectation": "certificate_id has a length of 19", + "is_commissioning": false, + "test_plan_number": "6.5" + }, + { + "description": "Verify CD security level", + "expectation": "security level = 0", + "is_commissioning": false, + "test_plan_number": "6.6" + }, + { + "description": "Verify CD security_information", + "expectation": "security_information = 0", + "is_commissioning": false, + "test_plan_number": "6.7" + }, + { + "description": "Verify CD version_number", + "expectation": "version_number is an integer in range 0..65535", + "is_commissioning": false, + "test_plan_number": "6.8" + }, + { + "description": "Verify CD certification_type", + "expectation": "certification_type has a value between 1..2", + "is_commissioning": false, + "test_plan_number": "6.9" + }, + { + "description": "Extract the Vendor ID (VID) and Product ID (PID) from the DAC. Extract the VID from the PAI. Extract the PID from the PAI, if present", + "expectation": "VID and PID are present and properly encoded in the DAC. VID is present and properly encoded in the PAI. If the PID is present in the PAI, it is properly encoded", + "is_commissioning": false, + "test_plan_number": "7.0" + }, + { + "description": "", + "expectation": "If the dac_origin_vendor_id is present in the CD, confirm the dac_origin_product_id is also present. If the dac_origin_vendor_id is not present in the CD, confirm the dac_origin_product_id is also not present.", + "is_commissioning": false, + "test_plan_number": "7.1" + }, + { + "description": "If the Certification Declaration has both the dac_origin_vendor_id and the dac_origin_product_id fields, verify dac_origin fields", + "expectation": "* The Vendor ID (VID) in the DAC subject and PAI subject are the same as the dac_origin_vendor_id field in the Certification Declaration.\n* The Product ID (PID) in the DAC subject is same as the dac_origin_product_id field in the Certification Declaration.\n* If it is present in the PAI certificate, the Product ID (PID) in the subject is same as the dac_origin_product_id field in the Certification Declaration.\n", + "is_commissioning": false, + "test_plan_number": "7.2" + }, + { + "description": "If the Certification Declaration has neither the dac_origin_vendor_id nor the dac_origin_product_id fields, verify the vendor_id and product_id_array fields", + "expectation": "* The Vendor ID (VID) in the DAC subject and PAI subject are the same as the vendor_id field in the Certification Declaration.\n* The Product ID (PID) subject DN in the DAC is contained in the product_id_array field in the Certification Declaration.\n* If it is present in the PAI certificate, the Product ID (PID) in the subject is contained in the product_id_array field in the Certification Declaration.\n", + "is_commissioning": false, + "test_plan_number": "7.3" + }, + { + "description": "If the Certification Declaration has authorized_paa_list, check that the authority_key_id extension of the PAI matches one found in the authorized_paa_list", + "expectation": "PAA from PAI authority_key_id extension matches one found in authorized_paa_list", + "is_commissioning": false, + "test_plan_number": 8 + }, + { + "description": "Verify that the certification_declaration CMS enveloped can be verified with the well-known Certification Declaration public key used to originally sign the Certification Declaration", + "expectation": "Signature verification passes", + "is_commissioning": false, + "test_plan_number": 9 + }, + { + "description": "Verify attestation_nonce", + "expectation": "* attestation_nonce is present in the attestation_elements_message structure\n* attestation_nonce value matches the AttestationNonce field value sent in the AttestationRequest Command sent by the commissioner\n* attestation_nonce is a 32 byte-long octet string\n", + "is_commissioning": false, + "test_plan_number": 10 + }, + { + "description": "If firmware_information is present, verify firmware information type", + "expectation": "firmware_information is an octet string", + "is_commissioning": false, + "test_plan_number": 11 + }, + { + "description": "Using Crypto_Verify cryptographic primitive, validate that the AttestationSignature from the AttestationResponse Command is valid if verified against a message constructed by concatenating AttestationElements with the attestation challenge associated with the secure session over which the AttestationResponse was obtained, using the subject public key found in the DAC.", + "expectation": "Signature is valid", + "is_commissioning": false, + "test_plan_number": 12 + }, + { + "description": "TH1 sends AttestationRequest Command with Invalid AttestationNonce (size > 32 bytes) as the field to the DUT.", + "expectation": "Verify DUT responds w/ status INVALID_COMMAND(0x85)", + "is_commissioning": false, + "test_plan_number": 13 + }, + { + "description": "TH1 sends AttestationRequest Command with invalid AttestationNonce (size < 32 bytes) as the field to the DUT.", + "expectation": "Verify that the DUT reports an INVALID_COMMAND error", + "is_commissioning": false, + "test_plan_number": 14 + } + ] + }, + { + "class_name": "TC_DA_1_5", + "desc": "test_TC_DA_1_5", + "function": "test_TC_DA_1_5", + "path": "sdk/TC_DA_1_5", + "pics": [], + "steps": [ + { + "description": "Run entire test", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 1 + } + ] + }, + { + "class_name": "TC_DA_1_7", + "desc": "test_TC_DA_1_7", + "function": "test_TC_DA_1_7", + "path": "sdk/TC_DA_1_7", + "pics": [], + "steps": [ + { + "description": "Run entire test", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 1 + } + ] + }, + { + "class_name": "TC_DEM_2_1", + "desc": "4.1.2. [TC-DEM-2.1] Attributes with DUT as Server", + "function": "test_TC_DEM_2_1", + "path": "sdk/TC_DEM_2_1", + "pics": [ + "DEM.S" + ], + "steps": [ + { + "description": "Commissioning, already done", + "expectation": "", + "is_commissioning": true, + "test_plan_number": "1" + }, + { + "description": "TH reads from the DUT FeatureMap attribute.", + "expectation": "Store the value as FeatureMap.", + "is_commissioning": false, + "test_plan_number": "2" + }, + { + "description": "TH reads from the DUT ESAType attribute.", + "expectation": "Verify that the DUT response contains an a ESATypeEnum (enum8) value to match the DUT type.", + "is_commissioning": false, + "test_plan_number": "3" + }, + { + "description": "TH reads from the DUT the ESACanGenerate attribute.", + "expectation": "Verify that the DUT response contains a boolean value to match the DUT capability.", + "is_commissioning": false, + "test_plan_number": "4" + }, + { + "description": "TH reads from the DUT ESAState attribute.", + "expectation": "Verify that the DUT response contains an a ESAStateEnum (enum8) value to match the DUT state (Online or Offline).", + "is_commissioning": false, + "test_plan_number": "5" + }, + { + "description": "TH reads from the DUT the AbsMinPower attribute.", + "expectation": "Verify that the DUT response contains a power-mW value to match the DUT capability, and is negative if and only if the ESACanGenerate read in step 4 is TRUE.", + "is_commissioning": false, + "test_plan_number": "6" + }, + { + "description": "TH reads from the DUT the AbsMaxPower attribute.", + "expectation": "Verify that the DUT response contains a power-mW value to match the DUT capability, and greater than or equal to the AbsMinPower read in step 6.", + "is_commissioning": false, + "test_plan_number": "7" + }, + { + "description": "TH reads from the DUT the PowerAdjustmentCapability attribute.", + "expectation": "Verify that the DUT response contains either a null value or a PowerAdjustCapabilityStruct value which contains a list of PowerAdjustStruct values and a valid Cause PowerAdjustReasonEnum (enum8) value.", + "is_commissioning": false, + "test_plan_number": "8" + }, + { + "description": "If PFR or SFR feature is supported on the cluster, TH reads from the DUT the Forecast attribute.", + "expectation": "Verify that the DUT response contains either a null value or a valid ForecastStruct value.", + "is_commissioning": false, + "test_plan_number": "9" + }, + { + "description": "If PA, STA, PAU, FA or CON feature is supported on the cluster, TH reads from the DUT the OptOutState attribute.", + "expectation": "Verify that the DUT response contains an OptOutStateEnum (enum8) value.", + "is_commissioning": false, + "test_plan_number": "10" + } + ] + }, + { + "class_name": "TC_DEM_2_10", + "desc": "4.1.3. [TC-DEM-2.10] This test case verifies attributes of the Device Energy Mangement cluster server having the Q quality.", + "function": "test_TC_DEM_2_10", + "path": "sdk/TC_DEM_2_10", + "pics": [ + "DEM.S" + ], + "steps": [ + { + "description": "Commission DUT to TH (can be skipped if done in a preceding test)", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "1" + }, + { + "description": "TH reads from the DUT the FeatureMap", + "expectation": "Verify that the DUT response contains the FeatureMap attribute. Store the value as FeatureMap.", + "is_commissioning": false, + "test_plan_number": "2" + }, + { + "description": "TH reads TestEventTriggersEnabled attribute from General Diagnostics Cluster", + "expectation": "Value has to be 1 (True)", + "is_commissioning": false, + "test_plan_number": "3" + }, + { + "description": "Set up a subscription to the DeviceEnergyManagement cluster, with MinIntervalFloor set to 0, MaxIntervalCeiling set to 10 and KeepSubscriptions set to false", + "expectation": "Subscription successfully established", + "is_commissioning": false, + "test_plan_number": "4" + }, + { + "description": "TH sends TestEventTrigger command to General Diagnostics Cluster on Endpoint 0 with EnableKey field set to PIXIT.DEM.TESTEVENT_TRIGGERKEY and EventTrigger field set to PIXIT.DEM.TESTEVENTTRIGGER for User Opt-out Test Event Clear", + "expectation": "Verify DUT responds w/ status SUCCESS(0x00)", + "is_commissioning": false, + "test_plan_number": "5" + }, + { + "description": "TH reads from the DUT the OptOutState", + "expectation": "Value has to be 0x00 (NoOptOut)", + "is_commissioning": false, + "test_plan_number": "5a" + }, + { + "description": "If ForecastAdjustment feature is not supported on the cluster skip steps 7 to 14", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "6" + }, + { + "description": "TH sends TestEventTrigger command to General Diagnostics Cluster on Endpoint 0 with EnableKey field set to PIXIT.DEM.TESTEVENT_TRIGGERKEY and EventTrigger field set to PIXIT.DEM.TESTEVENTTRIGGER for Forecast Adjustment Test Event", + "expectation": "Verify DUT responds w/ status SUCCESS(0x00)", + "is_commissioning": false, + "test_plan_number": "7" + }, + { + "description": "TH reads from the DUT the ESAState", + "expectation": "Value has to be 0x01 (Online)", + "is_commissioning": false, + "test_plan_number": "7a" + }, + { + "description": "Reset all accumulated report counts, then wait 12 seconds", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "8" + }, + { + "description": "TH counts all report transactions with an attribute report for the Forecast attribute", + "expectation": "TH verifies that numberOfReportsReceived <= 2", + "is_commissioning": false, + "test_plan_number": "9" + }, + { + "description": "TH reads from the DUT the Forecast", + "expectation": "Value has to include slots[0].MinDurationAdjustment, slots[0].MaxDurationAdjustment", + "is_commissioning": false, + "test_plan_number": "10" + }, + { + "description": "If PowerForecastReporting feature is supported on the cluster TH sends command ModifyForecastRequest with ForecastID=Forecast.ForecastID, SlotAdjustments[0].{SlotIndex=0, Duration=Forecast.Slots[0].MaxDurationAdjustment, NominalPower=forecast.slots[0].minPowerAdjustment}, Cause=GridOptimization, else StateForecastReporting shall be used, omit the NominalPower: TH sends command ModifyForecastRequest with ForecastID=Forecast.ForecastID, SlotAdjustments[0].{SlotIndex=0, Duration=Forecast.Slots[0].MaxDurationAdjustment}, Cause=GridOptimization", + "expectation": "Verify DUT responds w/ status SUCCESS(0x00)", + "is_commissioning": false, + "test_plan_number": "11" + }, + { + "description": "TH resets all accumulated report counts, then TH sends command CancelRequest", + "expectation": "Verify DUT responds w/ status SUCCESS(0x00)", + "is_commissioning": false, + "test_plan_number": "12" + }, + { + "description": "Wait 5 seconds", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "13" + }, + { + "description": "TH counts all report transactions with an attribute report for the Forecast attribute", + "expectation": "TH verifies that numberOfReportsReceived >= 1", + "is_commissioning": false, + "test_plan_number": "13a" + }, + { + "description": "TH sends TestEventTrigger command to General Diagnostics Cluster on Endpoint 0 with EnableKey field set to PIXIT.DEM.TESTEVENT_TRIGGERKEY and EventTrigger field set to PIXIT.DEM.TESTEVENTTRIGGER for Forecast Adjustment Test Event Clear", + "expectation": "Verify DUT responds w/ status SUCCESS(0x00)", + "is_commissioning": false, + "test_plan_number": "14" + }, + { + "description": "If PowerAdjustment feature is not supported on the cluster skip steps 16 to 21", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "15" + }, + { + "description": "TH sends TestEventTrigger command to General Diagnostics Cluster on Endpoint 0 with EnableKey field set to PIXIT.DEM.TESTEVENT_TRIGGERKEY and EventTrigger field set to PIXIT.DEM.TESTEVENTTRIGGER for Power Adjustment Test Event", + "expectation": "Verify DUT responds w/ status SUCCESS(0x00)", + "is_commissioning": false, + "test_plan_number": "16" + }, + { + "description": "TH reads from the DUT the PowerAdjustmentCapability", + "expectation": "Value has to include Cause=NoAdjustment.", + "is_commissioning": false, + "test_plan_number": "16b" + }, + { + "description": "TH resets all accumulated report counts, then TH sends command PowerAdjustRequest with Power=PowerAdjustmentCapability[0].MaxPower, Duration=20, Cause=LocalOptimization", + "expectation": "Verify DUT responds w/ status SUCCESS(0x00)", + "is_commissioning": false, + "test_plan_number": "17" + }, + { + "description": "Wait 12 seconds", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "18" + }, + { + "description": "TH counts all report transactions with an attribute report for the PowerAdjustmentCapability attribute", + "expectation": "TH verifies that numberOfReportsReceived <= 2", + "is_commissioning": false, + "test_plan_number": "18a" + }, + { + "description": "TH resets all accumulated report counts, then TH sends command CancelPowerAdjustment", + "expectation": "Verify DUT responds w/ status SUCCESS(0x00)", + "is_commissioning": false, + "test_plan_number": "19" + }, + { + "description": "Wait 5 seconds", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "20" + }, + { + "description": "TH counts all report transactions with an attribute report for the PowerAdjustmentCapability attribute", + "expectation": "TH verifies that numberOfReportsReceived >=1", + "is_commissioning": false, + "test_plan_number": "20a" + }, + { + "description": "TH sends TestEventTrigger command to General Diagnostics Cluster on Endpoint 0 with EnableKey field set to PIXIT.DEM.TESTEVENT_TRIGGERKEY and EventTrigger field set to PIXIT.DEM.TESTEVENTTRIGGER for Power Adjustment Test Event Clear", + "expectation": "Verify DUT responds w/ status SUCCESS(0x00)", + "is_commissioning": false, + "test_plan_number": "21" + }, + { + "description": "Cancel the subscription to the Device Energy Management cluster", + "expectation": "The subscription is cancelled successfully", + "is_commissioning": false, + "test_plan_number": "22" + } + ] + }, + { + "class_name": "TC_DEM_2_2", + "desc": "4.1.3. [TC-DEM-2.2] Power Adjustment feature functionality with DUT as Server", + "function": "test_TC_DEM_2_2", + "path": "sdk/TC_DEM_2_2", + "pics": [ + "DEM.S.F00" + ], + "steps": [ + { + "description": "Commission DUT to TH (can be skipped if done in a preceding test)", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "1" + }, + { + "description": "TH reads from the DUT the _FeatureMap_ attribute", + "expectation": "Verify that the DUT response contains the _FeatureMap_ attribute. Verify PowerAdjustment is supported.", + "is_commissioning": false, + "test_plan_number": "2" + }, + { + "description": "Set up a subscription to all DeviceEnergyManagement cluster events", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "3" + }, + { + "description": "TH reads TestEventTriggersEnabled attribute from General Diagnostics Cluster", + "expectation": "Value has to be 1 (True)", + "is_commissioning": false, + "test_plan_number": "4" + }, + { + "description": "TH sends TestEventTrigger command to General Diagnostics Cluster on Endpoint 0 with EnableKey field set to PIXIT.DEM.TEST_EVENT_TRIGGER_KEY and EventTrigger field set to PIXIT.DEM.TEST_EVENT_TRIGGER for Power Adjustment Test Event", + "expectation": "Verify DUT responds w/ status SUCCESS(0x00)", + "is_commissioning": false, + "test_plan_number": "5" + }, + { + "description": "TH reads from the DUT the ESAState", + "expectation": "Value has to be 0x01 (Online)", + "is_commissioning": false, + "test_plan_number": "5a" + }, + { + "description": "TH reads from the DUT the PowerAdjustmentCapability", + "expectation": "Value has to include Cause=NoAdjustment. Note value for later. Determine the OverallMaxPower and OverallMaxDuration as the largest MaxPower and MaxDuration of the PowerAdjustStructs returned, and similarly the OverallMinPower and OverallMinDuration as the smallest of the MinPower and MinDuration values.", + "is_commissioning": false, + "test_plan_number": "5b" + }, + { + "description": "TH reads from the DUT the OptOutState", + "expectation": "Value has to be 0x00 (NoOptOut)", + "is_commissioning": false, + "test_plan_number": "5c" + }, + { + "description": "TH sends command PowerAdjustRequest with Power=PowerAdjustmentCapability[0].MaxPower, Duration=PowerAdjustmentCapability[0].MinDuration, Cause=LocalOptimization", + "expectation": "Verify DUT responds w/ status SUCCESS(0x00) and Event DEM.S.E00(PowerAdjustStart) sent", + "is_commissioning": false, + "test_plan_number": "6" + }, + { + "description": "TH reads from the DUT the ESAState", + "expectation": "Value has to be 0x04 (PowerAdjustActive)", + "is_commissioning": false, + "test_plan_number": "6a" + }, + { + "description": "TH reads from the DUT the PowerAdjustmentCapability", + "expectation": "Value has to include Cause=LocalOptimizationAdjustment.", + "is_commissioning": false, + "test_plan_number": "6b" + }, + { + "description": "TH sends command CancelPowerAdjustRequest", + "expectation": "Verify DUT responds w/ status SUCCESS(0x00) and Event DEM.S.E01(PowerAdjustEnd) sent with Cause=Cancelled", + "is_commissioning": false, + "test_plan_number": "7" + }, + { + "description": "TH reads from the DUT the PowerAdjustmentCapability", + "expectation": "Value has to include Cause=NoAdjustment.", + "is_commissioning": false, + "test_plan_number": "7a" + }, + { + "description": "TH reads from the DUT the ESAState", + "expectation": "Value has to be 0x01 (Online)", + "is_commissioning": false, + "test_plan_number": "7b" + }, + { + "description": "TH sends command CancelPowerAdjustRequest", + "expectation": "Verify DUT responds w/ status INVALID_IN_STATE(0xcb)", + "is_commissioning": false, + "test_plan_number": "8" + }, + { + "description": "TH sends command PowerAdjustRequest with Power=OverallMaxPower+1 Duration=OverallMinDuration Cause=LocalOptimization", + "expectation": "Verify DUT responds w/ status CONSTRAINT_ERROR(0x87)", + "is_commissioning": false, + "test_plan_number": "9" + }, + { + "description": "TH sends command PowerAdjustRequest with Power=OverallMinPower Duration=OverallMaxDuration+1 Cause=LocalOptimization", + "expectation": "Verify DUT responds w/ status CONSTRAINT_ERROR(0x87)", + "is_commissioning": false, + "test_plan_number": "10" + }, + { + "description": "TH sends command PowerAdjustRequest with Power=OverallMinPower-1 Duration=OverallMaxDuration Cause=LocalOptimization", + "expectation": "Verify DUT responds w/ status CONSTRAINT_ERROR(0x87)", + "is_commissioning": false, + "test_plan_number": "11" + }, + { + "description": "TH sends command PowerAdjustRequest with Power=OverallMaxPower Duration=OverallMinDuration-1 Cause=LocalOptimization", + "expectation": "Verify DUT responds w/ status CONSTRAINT_ERROR(0x87)", + "is_commissioning": false, + "test_plan_number": "12" + }, + { + "description": "TH sends command PowerAdjustRequest with Power=PowerAdjustmentCapability[0].MaxPower, Duration=PowerAdjustmentCapability[0].MinDuration, Cause=LocalOptimization", + "expectation": "Verify DUT responds w/ status SUCCESS(0x00) and event DEM.S.E00(PowerAdjustStart) sent", + "is_commissioning": false, + "test_plan_number": "13" + }, + { + "description": "TH reads from the DUT the PowerAdjustmentCapability", + "expectation": "Value has to include Cause=LocalOptimizationAdjustment.", + "is_commissioning": false, + "test_plan_number": "13a" + }, + { + "description": "TH sends command PowerAdjustRequest with Power=PowerAdjustmentCapability[0].MaxPower, Duration=PowerAdjustmentCapability[0].MinDuration, Cause=GridOptimization", + "expectation": "Verify DUT responds w/ status SUCCESS(0x00) and no event sent", + "is_commissioning": false, + "test_plan_number": "14" + }, + { + "description": "TH reads from the DUT the ESAState", + "expectation": "Value has to be 0x04 (PowerAdjustActive)", + "is_commissioning": false, + "test_plan_number": "14a" + }, + { + "description": "TH reads from the DUT the PowerAdjustmentCapability", + "expectation": "Value has to include Cause=GridOptimizationAdjustment.", + "is_commissioning": false, + "test_plan_number": "14b" + }, + { + "description": "TH sends TestEventTrigger command to General Diagnostics Cluster on Endpoint 0 with EnableKey field set to PIXIT.DEM.TEST_EVENT_TRIGGER_KEY and EventTrigger field set to PIXIT.DEM.TEST_EVENT_TRIGGER for User Opt-out Local Optimization Test Event", + "expectation": "Verify DUT responds w/ status SUCCESS(0x00) and no event sent", + "is_commissioning": false, + "test_plan_number": "15" + }, + { + "description": "TH reads from the DUT the ESAState", + "expectation": "Value has to be 0x04 (PowerAdjustActive)", + "is_commissioning": false, + "test_plan_number": "15a" + }, + { + "description": "TH reads from the DUT the OptOutState", + "expectation": "Value has to be 0x02 (LocalOptOut)", + "is_commissioning": false, + "test_plan_number": "15b" + }, + { + "description": "TH sends command PowerAdjustRequest with Power=PowerAdjustmentCapability[0].MaxPower, Duration=PowerAdjustmentCapability[0].MinDuration, Cause=LocalOptimization", + "expectation": "Verify DUT responds w/ status CONSTRAINT_ERROR(0x87)", + "is_commissioning": false, + "test_plan_number": "16" + }, + { + "description": "TH sends TestEventTrigger command to General Diagnostics Cluster on Endpoint 0 with EnableKey field set to PIXIT.DEM.TEST_EVENT_TRIGGER_KEY and EventTrigger field set to PIXIT.DEM.TEST_EVENT_TRIGGER for User Opt-out Grid Optimization Test Event", + "expectation": "Verify DUT responds w/ status SUCCESS(0x00) and event DEM.S.E01(PowerAdjustEnd) sent with Cause=UserOptOut, Duration= approx time from step 11 to step 15, EnergyUse= a valid value", + "is_commissioning": false, + "test_plan_number": "17" + }, + { + "description": "TH reads from the DUT the ESAState", + "expectation": "Value has to be 0x01 (Online)", + "is_commissioning": false, + "test_plan_number": "17a" + }, + { + "description": "TH reads from the DUT the OptOutState", + "expectation": "Value has to be 0x03 (OptOut)", + "is_commissioning": false, + "test_plan_number": "17b" + }, + { + "description": "TH reads from the DUT the PowerAdjustmentCapability", + "expectation": "Value has to include Cause=NoAdjustment.", + "is_commissioning": false, + "test_plan_number": "17c" + }, + { + "description": "TH sends TestEventTrigger command to General Diagnostics Cluster on Endpoint 0 with EnableKey field set to PIXIT.DEM.TEST_EVENT_TRIGGER_KEY and EventTrigger field set to PIXIT.DEM.TEST_EVENT_TRIGGER for User Opt-out Test Event Clear", + "expectation": "Verify DUT responds w/ status SUCCESS(0x00)", + "is_commissioning": false, + "test_plan_number": "18" + }, + { + "description": "TH reads from the DUT the ESAState", + "expectation": "Value has to be 0x01 (Online)", + "is_commissioning": false, + "test_plan_number": "18a" + }, + { + "description": "TH reads from the DUT the OptOutState", + "expectation": "Value has to be 0x00 (NoOptOut)", + "is_commissioning": false, + "test_plan_number": "18b" + }, + { + "description": "TH sends command PowerAdjustRequest with Power=PowerAdjustmentCapability[0].MaxPower, Duration=PowerAdjustmentCapability[0].MinDuration, Cause=LocalOptimization", + "expectation": "Verify DUT responds w/ status SUCCESS(0x00) and event DEM.S.E00(PowerAdjustStart) sent", + "is_commissioning": false, + "test_plan_number": "19" + }, + { + "description": "TH reads from the DUT the ESAState", + "expectation": "Value has to be 0x04 (PowerAdjustActive)", + "is_commissioning": false, + "test_plan_number": "19a" + }, + { + "description": "TH reads from the DUT the PowerAdjustmentCapability", + "expectation": "Value has to include Cause=LocalOptimizationAdjustment.", + "is_commissioning": false, + "test_plan_number": "19b" + }, + { + "description": "Wait 10 seconds", + "expectation": "Event DEM.S.E01(PowerAdjustEnd) sent with Cause=NormalCompletion, Duration in the range 10-12s, EnergyUse= a valid value", + "is_commissioning": false, + "test_plan_number": "20" + }, + { + "description": "TH reads from the DUT the ESAState", + "expectation": "Value has to be 0x01 (Online)", + "is_commissioning": false, + "test_plan_number": "20a" + }, + { + "description": "TH reads from the DUT the PowerAdjustmentCapability", + "expectation": "Value has to include Cause=NoAdjustment.", + "is_commissioning": false, + "test_plan_number": "20b" + }, + { + "description": "TH sends TestEventTrigger command to General Diagnostics Cluster on Endpoint 0 with EnableKey field set to PIXIT.DEM.TEST_EVENT_TRIGGER_KEY and EventTrigger field set to PIXIT.DEM.TEST_EVENT_TRIGGER for Power Adjustment Test Event Clear", + "expectation": "Verify DUT responds w/ status SUCCESS(0x00)", + "is_commissioning": false, + "test_plan_number": "21" + } + ] + }, + { + "class_name": "TC_DEM_2_3", + "desc": "4.1.3. [TC-DEM-2.3] Start Time Adjustment feature functionality with DUT as Server", + "function": "test_TC_DEM_2_3", + "path": "sdk/TC_DEM_2_3", + "pics": [ + "DEM.S.F03" + ], + "steps": [ + { + "description": "Commission DUT to TH (can be skipped if done in a preceding test)", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "1" + }, + { + "description": "TH reads from the DUT the _FeatureMap_ attribute", + "expectation": "Verify that the DUT response contains the _FeatureMap_ attribute. Verify StartTimeAdjustment feature is supported on the cluster. Verify PowerForecastReporting or StateForecastReporting feature is supported on the cluster.", + "is_commissioning": false, + "test_plan_number": "2" + }, + { + "description": "TH reads TestEventTriggersEnabled attribute from General Diagnostics Cluster", + "expectation": "Value has to be 1 (True)", + "is_commissioning": false, + "test_plan_number": "3" + }, + { + "description": "TH sends TestEventTrigger command to General Diagnostics Cluster on Endpoint 0 with EnableKey field set to PIXIT.DEM.TEST_EVENT_TRIGGER_KEY and EventTrigger field set to PIXIT.DEM.TEST_EVENT_TRIGGER for Start Time Adjustment Test Event", + "expectation": "Verify DUT responds w/ status SUCCESS(0x00)", + "is_commissioning": false, + "test_plan_number": "4" + }, + { + "description": "TH reads from the DUT the ESAState", + "expectation": "Value has to be 0x01 (Online)", + "is_commissioning": false, + "test_plan_number": "4a" + }, + { + "description": "TH reads from the DUT the Forecast", + "expectation": "Value has to include EarliestStartTime<=StartTime, LatestEndTime>=EndTime, and ForecastUpdateReason=Internal Optimization", + "is_commissioning": false, + "test_plan_number": "4b" + }, + { + "description": "TH reads from the DUT the OptOutState", + "expectation": "Value has to be 0x00 (NoOptOut)", + "is_commissioning": false, + "test_plan_number": "4c" + }, + { + "description": "TH sends TestEventTrigger command to General Diagnostics Cluster on Endpoint 0 with EnableKey field set to PIXIT.DEM.TEST_EVENT_TRIGGER_KEY and EventTrigger field set to PIXIT.DEM.TEST_EVENT_TRIGGER for User Opt-out Local Optimization Test Event", + "expectation": "Verify DUT responds w/ status SUCCESS(0x00)", + "is_commissioning": false, + "test_plan_number": "5" + }, + { + "description": "TH reads from the DUT the ESAState", + "expectation": "Value has to be 0x01 (Online)", + "is_commissioning": false, + "test_plan_number": "5a" + }, + { + "description": "TH reads from the DUT the OptOutState", + "expectation": "Value has to be 0x01 (LocalOptOut)", + "is_commissioning": false, + "test_plan_number": "5b" + }, + { + "description": "TH sends command StartTimeAdjustRequest with RequestedStartTime=EarliestStartTime from Forecast, Cause=LocalOptimization", + "expectation": "Verify DUT responds w/ status CONSTRAINT_ERROR(0x87)", + "is_commissioning": false, + "test_plan_number": "6" + }, + { + "description": "TH reads from the DUT the ESAState", + "expectation": "Value has to be 0x01 (Online)", + "is_commissioning": false, + "test_plan_number": "6a" + }, + { + "description": "TH reads from the DUT the Forecast", + "expectation": "Value has to be unchanged from step 3b", + "is_commissioning": false, + "test_plan_number": "6b" + }, + { + "description": "TH sends TestEventTrigger command to General Diagnostics Cluster on Endpoint 0 with EnableKey field set to PIXIT.DEM.TEST_EVENT_TRIGGER_KEY and EventTrigger field set to PIXIT.DEM.TEST_EVENT_TRIGGER for User Opt-out Test Event Clear", + "expectation": "Verify DUT responds w/ status SUCCESS(0x00)", + "is_commissioning": false, + "test_plan_number": "7" + }, + { + "description": "TH reads from the DUT the ESAState", + "expectation": "Value has to be 0x01 (Online)", + "is_commissioning": false, + "test_plan_number": "7a" + }, + { + "description": "TH reads from the DUT the OptOutState", + "expectation": "Value has to be 0x00 (NoOptOut)", + "is_commissioning": false, + "test_plan_number": "7b" + }, + { + "description": "TH sends command StartTimeAdjustRequest with RequestedStartTime=EarliestStartTime from Forecast, Cause=LocalOptimization", + "expectation": "Verify DUT responds w/ status SUCCESS(0x00)", + "is_commissioning": false, + "test_plan_number": "8" + }, + { + "description": "TH reads from the DUT the ESAState", + "expectation": "Value has to be 0x01 (Online)", + "is_commissioning": false, + "test_plan_number": "8a" + }, + { + "description": "TH reads from the DUT the Forecast", + "expectation": "Value has to include EarliestStartTime=StartTime, LatestEndTime>=EndTime, and ForecastUpdateReason=Local Optimization", + "is_commissioning": false, + "test_plan_number": "8b" + }, + { + "description": "TH sends TestEventTrigger command to General Diagnostics Cluster on Endpoint 0 with EnableKey field set to PIXIT.DEM.TEST_EVENT_TRIGGER_KEY and EventTrigger field set to PIXIT.DEM.TEST_EVENT_TRIGGER for User Opt-out Local Optimization Test Event", + "expectation": "Verify DUT responds w/ status SUCCESS(0x00)", + "is_commissioning": false, + "test_plan_number": "9" + }, + { + "description": "TH reads from the DUT the ESAState", + "expectation": "Value has to be 0x01 (Online)", + "is_commissioning": false, + "test_plan_number": "9a" + }, + { + "description": "TH reads from the DUT the OptOutState", + "expectation": "Value has to be 0x01 (LocalOptOut)", + "is_commissioning": false, + "test_plan_number": "9b" + }, + { + "description": "TH reads from the DUT the Forecast", + "expectation": "Value has to include EarliestStartTime<=StartTime, LatestEndTime>=EndTime, and ForecastUpdateReason=Internal Optimization", + "is_commissioning": false, + "test_plan_number": "9c" + }, + { + "description": "TH sends command StartTimeAdjustRequest with RequestedStartTime=StartTime+(LatestEndTime-EndTime) from Forecast, Cause=GridOptimization", + "expectation": "Verify DUT responds w/ status SUCCESS(0x00)", + "is_commissioning": false, + "test_plan_number": "10" + }, + { + "description": "TH reads from the DUT the ESAState", + "expectation": "Value has to be 0x01 (Online)", + "is_commissioning": false, + "test_plan_number": "10a" + }, + { + "description": "TH reads from the DUT the Forecast", + "expectation": "Value has to include EarliestStartTime<=StartTime, LatestEndTime=EndTime, and ForecastUpdateReason=Grid Optimization", + "is_commissioning": false, + "test_plan_number": "10b" + }, + { + "description": "TH sends command CancelRequest", + "expectation": "Verify DUT responds w/ status SUCCESS(0x00)", + "is_commissioning": false, + "test_plan_number": "11" + }, + { + "description": "TH reads from the DUT the ESAState", + "expectation": "Value has to be 0x01 (Online)", + "is_commissioning": false, + "test_plan_number": "11a" + }, + { + "description": "TH reads from the DUT the Forecast", + "expectation": "Value has to include EarliestStartTime<=StartTime, LatestEndTime>=EndTime, and ForecastUpdateReason=Internal Optimization", + "is_commissioning": false, + "test_plan_number": "11b" + }, + { + "description": "TH sends command StartTimeAdjustRequest with RequestedStartTime=EarliestStartTime-1 from Forecast, Cause=LocalOptimization", + "expectation": "Verify DUT responds w/ status CONSTRAINT_ERROR(0x87)", + "is_commissioning": false, + "test_plan_number": "12" + }, + { + "description": "TH reads from the DUT the ESAState", + "expectation": "Value has to be 0x01 (Online)", + "is_commissioning": false, + "test_plan_number": "12a" + }, + { + "description": "TH reads from the DUT the Forecast", + "expectation": "Value has to include StartTime and EndTime unchanged from step 10b", + "is_commissioning": false, + "test_plan_number": "12b" + }, + { + "description": "TH sends command StartTimeAdjustRequest with RequestedStartTime=StartTime+(LatestEndTime-EndTime)+1 from Forecast, Cause=LocalOptimization", + "expectation": "Verify DUT responds w/ status CONSTRAINT_ERROR(0x87)", + "is_commissioning": false, + "test_plan_number": "13" + }, + { + "description": "TH reads from the DUT the ESAState", + "expectation": "Value has to be 0x01 (Online)", + "is_commissioning": false, + "test_plan_number": "13a" + }, + { + "description": "TH reads from the DUT the Forecast", + "expectation": "Value has to include StartTime and EndTime unchanged from step 10b", + "is_commissioning": false, + "test_plan_number": "13b" + }, + { + "description": "TH sends command CancelRequest", + "expectation": "Verify DUT responds w/ status INVALID_IN_STATE(0xcb)", + "is_commissioning": false, + "test_plan_number": "14" + }, + { + "description": "TH sends TestEventTrigger command to General Diagnostics Cluster on Endpoint 0 with EnableKey field set to PIXIT.DEM.TEST_EVENT_TRIGGER_KEY and EventTrigger field set to PIXIT.DEM.TEST_EVENT_TRIGGER for Start Time Adjustment Test Event Clear", + "expectation": "Verify DUT responds w/ status SUCCESS(0x00)", + "is_commissioning": false, + "test_plan_number": "15" + } + ] + }, + { + "class_name": "TC_DEM_2_4", + "desc": "4.1.3. [TC-DEM-2.4] Pausable feature functionality with DUT as Server", + "function": "test_TC_DEM_2_4", + "path": "sdk/TC_DEM_2_4", + "pics": [ + "DEM.S.F04" + ], + "steps": [ + { + "description": "Commission DUT to TH (can be skipped if done in a preceding test)", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "1" + }, + { + "description": "TH reads from the DUT the _FeatureMap_ attribute", + "expectation": "Verify that the DUT response contains the _FeatureMap_ attribute. Verify Pausable feature is supported on the cluster. Verify PowerForecastReporting or StateForecastReporting feature is supported on the cluster.", + "is_commissioning": false, + "test_plan_number": "2" + }, + { + "description": "Set up a subscription to all DeviceEnergyManagement cluster events", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "3" + }, + { + "description": "TH reads TestEventTriggersEnabled attribute from General Diagnostics Cluster", + "expectation": "Value has to be 1 (True)", + "is_commissioning": false, + "test_plan_number": "4" + }, + { + "description": "TH sends TestEventTrigger command to General Diagnostics Cluster on Endpoint 0 with EnableKey field set to PIXIT.DEM.TEST_EVENT_TRIGGER_KEY and EventTrigger field set to PIXIT.DEM.TEST_EVENT_TRIGGER for Pausable Test Event", + "expectation": "Verify DUT responds w/ status SUCCESS(0x00)", + "is_commissioning": false, + "test_plan_number": "5" + }, + { + "description": "TH reads from the DUT the ESAState", + "expectation": "Value has to be 0x01 (Online)", + "is_commissioning": false, + "test_plan_number": "5a" + }, + { + "description": "TH reads from the DUT the Forecast", + "expectation": "Value has to include IsPausable=True, slots[0].SlotIsPausable=True, slots[0].MinPauseDuration>1, slots[0].MaxPauseDuration>1, slots[1].SlotIsPausable=False, ActiveSlotNumber=0, and ForecastUpdateReason=Internal Optimization", + "is_commissioning": false, + "test_plan_number": "5b" + }, + { + "description": "TH reads from the DUT the OptOutState", + "expectation": "Value has to be 0x00 (NoOptOut)", + "is_commissioning": false, + "test_plan_number": "5c" + }, + { + "description": "TH sends command PauseRequest with Duration=Forecast.slots[0].MinPauseDuration-1, Cause=LocalOptimization", + "expectation": "Verify DUT responds w/ status CONSTRAINT_ERROR(0x87)", + "is_commissioning": false, + "test_plan_number": "6" + }, + { + "description": "TH reads from the DUT the ESAState", + "expectation": "Value has to be 0x01 (Online)", + "is_commissioning": false, + "test_plan_number": "6a" + }, + { + "description": "TH sends command PauseRequest with Duration=Forecast.slots[0].MaxPauseDuration+1, Cause=LocalOptimization", + "expectation": "Verify DUT responds w/ status CONSTRAINT_ERROR(0x87)", + "is_commissioning": false, + "test_plan_number": "7" + }, + { + "description": "TH reads from the DUT the ESAState", + "expectation": "Value has to be 0x01 (Online)", + "is_commissioning": false, + "test_plan_number": "7a" + }, + { + "description": "TH sends TestEventTrigger command to General Diagnostics Cluster on Endpoint 0 with EnableKey field set to PIXIT.DEM.TEST_EVENT_TRIGGER_KEY and EventTrigger field set to PIXIT.DEM.TEST_EVENT_TRIGGER for User Opt-out Grid Optimization Test Event", + "expectation": "Verify DUT responds w/ status SUCCESS(0x00)", + "is_commissioning": false, + "test_plan_number": "8" + }, + { + "description": "TH reads from the DUT the ESAState", + "expectation": "Value has to be 0x01 (Online)", + "is_commissioning": false, + "test_plan_number": "8a" + }, + { + "description": "TH reads from the DUT the OptOutState", + "expectation": "Value has to be 0x02 (GridOptOut)", + "is_commissioning": false, + "test_plan_number": "8b" + }, + { + "description": "TH sends command PauseRequest with Duration=Forecast.slots[0].MinPauseDuration, Cause=GridOptimization", + "expectation": "Verify DUT responds w/ status CONSTRAINT_ERROR(0x87)", + "is_commissioning": false, + "test_plan_number": "9" + }, + { + "description": "TH reads from the DUT the ESAState", + "expectation": "Value has to be 0x01 (Online)", + "is_commissioning": false, + "test_plan_number": "9a" + }, + { + "description": "TH sends command PauseRequest with Duration=Forecast.slots[0].MinPauseDuration, Cause=LocalOptimization", + "expectation": "Verify DUT responds w/ status SUCCESS(0x00) and Event DEM.S.E02(Paused) sent", + "is_commissioning": false, + "test_plan_number": "10" + }, + { + "description": "TH reads from the DUT the ESAState", + "expectation": "Value has to be 0x05 (Paused)", + "is_commissioning": false, + "test_plan_number": "10a" + }, + { + "description": "TH sends TestEventTrigger command to General Diagnostics Cluster on Endpoint 0 with EnableKey field set to PIXIT.DEM.TEST_EVENT_TRIGGER_KEY and EventTrigger field set to PIXIT.DEM.TEST_EVENT_TRIGGER for User Opt-out Local Optimization Test Event", + "expectation": "Verify DUT responds w/ status SUCCESS(0x00) and Event DEM.S.E03(Resumed) sent with Cause=3 (UserOptOut)", + "is_commissioning": false, + "test_plan_number": "11" + }, + { + "description": "TH reads from the DUT the ESAState", + "expectation": "Value has to be 0x01 (Online)", + "is_commissioning": false, + "test_plan_number": "11a" + }, + { + "description": "TH reads from the DUT the OptOutState", + "expectation": "Value has to be 0x03 (OptOut)", + "is_commissioning": false, + "test_plan_number": "11b" + }, + { + "description": "TH reads from the DUT the Forecast", + "expectation": "Value has to include ForecastUpdateReason=Internal Optimization", + "is_commissioning": false, + "test_plan_number": "11c" + }, + { + "description": "TH sends TestEventTrigger command to General Diagnostics Cluster on Endpoint 0 with EnableKey field set to PIXIT.DEM.TEST_EVENT_TRIGGER_KEY and EventTrigger field set to PIXIT.DEM.TEST_EVENT_TRIGGER for User Opt-out Test Event Clear", + "expectation": "Verify DUT responds w/ status SUCCESS(0x00)", + "is_commissioning": false, + "test_plan_number": "12" + }, + { + "description": "TH reads from the DUT the ESAState", + "expectation": "Value has to be 0x01 (Online)", + "is_commissioning": false, + "test_plan_number": "12a" + }, + { + "description": "TH reads from the DUT the OptOutState", + "expectation": "Value has to be 0x00 (NoOptOut)", + "is_commissioning": false, + "test_plan_number": "12b" + }, + { + "description": "TH sends command PauseRequest with Duration=Forecast.slots[0].MinPauseDuration, Cause=LocalOptimization", + "expectation": "Verify DUT responds w/ status SUCCESS(0x00) and Event DEM.S.E02(Paused) sent", + "is_commissioning": false, + "test_plan_number": "13" + }, + { + "description": "TH reads from the DUT the ESAState", + "expectation": "Value has to be 0x05 (Paused)", + "is_commissioning": false, + "test_plan_number": "13a" + }, + { + "description": "TH reads from the DUT the Forecast", + "expectation": "Value has to include ForecastUpdateReason=Local Optimization", + "is_commissioning": false, + "test_plan_number": "13b" + }, + { + "description": "TH sends command ResumeRequest", + "expectation": "Verify DUT responds w/ status SUCCESS(0x00) and Event DEM.S.E03(Resumed) sent with Cause=4 (Cancelled)", + "is_commissioning": false, + "test_plan_number": "14" + }, + { + "description": "TH reads from the DUT the ESAState", + "expectation": "Value has to be 0x01 (Online)", + "is_commissioning": false, + "test_plan_number": "14a" + }, + { + "description": "TH reads from the DUT the Forecast", + "expectation": "Value has to include IsPausable=True, slots[0].SlotIsPausable=True, slots[0].MinPauseDuration>1, slots[0].MaxPauseDuration>1, slots[1].SlotIsPausable=False, ActiveSlotNumber=0, ForecastUpdateReason=InternalOptimization", + "is_commissioning": false, + "test_plan_number": "14b" + }, + { + "description": "TH sends command PauseRequest with Duration=Forecast.slots[0].MinPauseDuration, Cause=LocalOptimization", + "expectation": "Verify DUT responds w/ status SUCCESS(0x00) and Event DEM.S.E02(Paused) sent", + "is_commissioning": false, + "test_plan_number": "15" + }, + { + "description": "TH reads from the DUT the ESAState", + "expectation": "Value has to be 0x05 (Paused)", + "is_commissioning": false, + "test_plan_number": "15a" + }, + { + "description": "TH reads from the DUT the Forecast", + "expectation": "Value has to include ForecastUpdateReason=Local Optimization", + "is_commissioning": false, + "test_plan_number": "15b" + }, + { + "description": "TH sends command ResumeRequest", + "expectation": "Verify DUT responds w/ status SUCCESS(0x00) and Event DEM.S.E03(Resumed) sent with Cause=4 (Cancelled)", + "is_commissioning": false, + "test_plan_number": "16" + }, + { + "description": "TH reads from the DUT the ESAState", + "expectation": "Value has to be 0x01 (Online)", + "is_commissioning": false, + "test_plan_number": "16a" + }, + { + "description": "TH sends command PauseRequest with Duration=Forecast.slots[0].MinPauseDuration, Cause=LocalOptimization", + "expectation": "Verify DUT responds w/ status SUCCESS(0x00) and Event DEM.S.E02(Paused) sent", + "is_commissioning": false, + "test_plan_number": "17" + }, + { + "description": "TH reads from the DUT the ESAState", + "expectation": "Value has to be 0x05 (Paused)", + "is_commissioning": false, + "test_plan_number": "17a" + }, + { + "description": "Wait for minPauseDuration.", + "expectation": "Event DEM.S.E03(Resumed) sent with Cause=0 (NormalCompletion)", + "is_commissioning": false, + "test_plan_number": "18" + }, + { + "description": "TH reads from the DUT the ESAState", + "expectation": "Value has to be 0x01 (Online)", + "is_commissioning": false, + "test_plan_number": "18a" + }, + { + "description": "TH sends TestEventTrigger command to General Diagnostics Cluster on Endpoint 0 with EnableKey field set to PIXIT.DEM.TEST_EVENT_TRIGGER_KEY and EventTrigger field set to PIXIT.DEM.TEST_EVENT_TRIGGER for Pausable Test Event Next Slot", + "expectation": "Verify DUT responds w/ status SUCCESS(0x00)", + "is_commissioning": false, + "test_plan_number": "19" + }, + { + "description": "TH reads from the DUT the ESAState", + "expectation": "Value has to be 0x01 (Online)", + "is_commissioning": false, + "test_plan_number": "19a" + }, + { + "description": "TH reads from the DUT the Forecast", + "expectation": "Value has to include ActiveSlotNumber=1", + "is_commissioning": false, + "test_plan_number": "19b" + }, + { + "description": "TH sends command PauseRequest with Duration=Forecast.slots[0].MinPauseDuration, Cause=LocalOptimization", + "expectation": "Verify DUT responds w/ status FAILURE(0x01)", + "is_commissioning": false, + "test_plan_number": "20" + }, + { + "description": "TH reads from the DUT the ESAState", + "expectation": "Value has to be 0x01 (Online)", + "is_commissioning": false, + "test_plan_number": "20a" + }, + { + "description": "TH sends command ResumeRequest", + "expectation": "Verify DUT responds w/ status INVALID_IN_STATE(0xcb)", + "is_commissioning": false, + "test_plan_number": "21" + }, + { + "description": "TH sends TestEventTrigger command to General Diagnostics Cluster on Endpoint 0 with EnableKey field set to PIXIT.DEM.TEST_EVENT_TRIGGER_KEY and EventTrigger field set to PIXIT.DEM.TEST_EVENT_TRIGGER for Pausable Test Event Clear", + "expectation": "Verify DUT responds w/ status SUCCESS(0x00)", + "is_commissioning": false, + "test_plan_number": "22" + } + ] + }, + { + "class_name": "TC_DEM_2_5", + "desc": "4.1.3. [TC-DEM-2.5] Forecast Adjustment with Power Forecast Reporting feature functionality with DUT as Server", + "function": "test_TC_DEM_2_5", + "path": "sdk/TC_DEM_2_5", + "pics": [ + "DEM.S.F05", + "DEM.S.F01" + ], + "steps": [ + { + "description": "Commission DUT to TH (can be skipped if done in a preceding test)", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "1" + }, + { + "description": "TH reads from the DUT the _FeatureMap_ attribute", + "expectation": "Verify that the DUT response contains the _FeatureMap_ attribute. Verify ForecastAdjustment feature is supported on the cluster. Verify PowerForecastReporting feature is supported on the cluster. Verify StateForecastReporting feature is not supported on the cluster.", + "is_commissioning": false, + "test_plan_number": "2" + }, + { + "description": "TH reads TestEventTriggersEnabled attribute from General Diagnostics Cluster", + "expectation": "Value has to be 1 (True)", + "is_commissioning": false, + "test_plan_number": "3" + }, + { + "description": "TH sends TestEventTrigger command to General Diagnostics Cluster on Endpoint 0 with EnableKey field set to PIXIT.DEM.TEST_EVENT_TRIGGER_KEY and EventTrigger field set to PIXIT.DEM.TEST_EVENT_TRIGGER for Forecast Adjustment Test Event", + "expectation": "Verify DUT responds w/ status SUCCESS(0x00)", + "is_commissioning": false, + "test_plan_number": "4" + }, + { + "description": "TH reads from the DUT the ESAState", + "expectation": "Value has to be 0x01 (Online)", + "is_commissioning": false, + "test_plan_number": "4a" + }, + { + "description": "TH reads from the DUT the Forecast", + "expectation": "Value has to include slots[0].MinPowerAdjustment, slots[0].MaxPowerAdjustment, slots[0].MinDurationAdjustment, slots[0].MaxDurationAdjustment", + "is_commissioning": false, + "test_plan_number": "4b" + }, + { + "description": "TH reads from the DUT the OptOutState", + "expectation": "Value has to be 0x00 (NoOptOut)", + "is_commissioning": false, + "test_plan_number": "4c" + }, + { + "description": "TH sends command ModifyForecastRequest with ForecastID=Forecast.ForecastID, SlotAdjustments[0].{SlotIndex=0, Duration=Forecast.Slots[0].MaxDurationAdjustment}, Cause=GridOptimization", + "expectation": "Verify DUT responds w/ status CONSTRAINT_ERROR(0x87)", + "is_commissioning": false, + "test_plan_number": "5" + }, + { + "description": "TH sends command ModifyForecastRequest with ForecastID=Forecast.ForecastID+1, SlotAdjustments[0].{SlotIndex=0, NominalPower=Forecast.Slots[0].MinPowerAdjustment, Duration=Forecast.Slots[0].MaxDurationAdjustment}, Cause=GridOptimization", + "expectation": "Verify DUT responds w/ status FAILURE(0x01)", + "is_commissioning": false, + "test_plan_number": "6" + }, + { + "description": "TH sends command ModifyForecastRequest with ForecastID=Forecast.ForecastID, SlotAdjustments[0].{SlotIndex=len(Forecast.Slots), NominalPower=Forecast.Slots[0].MinPowerAdjustment, Duration=Forecast.Slots[0].MaxDurationAdjustment}, Cause=GridOptimization", + "expectation": "Verify DUT responds w/ status FAILURE(0x01)", + "is_commissioning": false, + "test_plan_number": "7" + }, + { + "description": "TH sends command ModifyForecastRequest with ForecastID=Forecast.ForecastID, SlotAdjustments[0].{SlotIndex=0, NominalPower=Forecast.Slots[0].MinPowerAdjustment-1, Duration=Forecast.Slots[0].MaxDurationAdjustment}, Cause=GridOptimization", + "expectation": "Verify DUT responds w/ status CONSTRAINT_ERROR(0x87)", + "is_commissioning": false, + "test_plan_number": "8" + }, + { + "description": "TH sends command ModifyForecastRequest with ForecastID=Forecast.ForecastID, SlotAdjustments[0].{SlotIndex=0, NominalPower=Forecast.Slots[0].MaxPowerAdjustment+1, Duration=Forecast.Slots[0].MinDurationAdjustment}, Cause=GridOptimization", + "expectation": "Verify DUT responds w/ status CONSTRAINT_ERROR(0x87)", + "is_commissioning": false, + "test_plan_number": "9" + }, + { + "description": "TH sends command ModifyForecastRequest with ForecastID=Forecast.ForecastID, SlotAdjustments[0].{SlotIndex=0, NominalPower=Forecast.Slots[0].MinPowerAdjustment, Duration=Forecast.Slots[0].MaxDurationAdjustment+1}, Cause=GridOptimization", + "expectation": "Verify DUT responds w/ status CONSTRAINT_ERROR(0x87)", + "is_commissioning": false, + "test_plan_number": "10" + }, + { + "description": "TH sends command ModifyForecastRequest with ForecastID=Forecast.ForecastID, SlotAdjustments[0].{SlotIndex=0, NominalPower=Forecast.Slots[0].MaxPowerAdjustment, Duration=Forecast.Slots[0].MinDurationAdjustment-1}, Cause=GridOptimization", + "expectation": "Verify DUT responds w/ status CONSTRAINT_ERROR(0x87)", + "is_commissioning": false, + "test_plan_number": "11" + }, + { + "description": "TH sends command ModifyForecastRequest with ForecastID=Forecast.ForecastID, SlotAdjustments[0].{SlotIndex=0, NominalPower=Forecast.Slots[0].MinPowerAdjustment, Duration=Forecast.Slots[0].MaxDurationAdjustment}, SlotAdjustments[1].{SlotIndex=4, NominalPower=Forecast.Slots[0].MinPowerAdjustment, Duration=Forecast.Slots[0].MaxDurationAdjustment}, Cause=GridOptimization", + "expectation": "Verify DUT responds w/ status FAILURE(0x01)", + "is_commissioning": false, + "test_plan_number": "12" + }, + { + "description": "TH sends TestEventTrigger command to General Diagnostics Cluster on Endpoint 0 with EnableKey field set to PIXIT.DEM.TEST_EVENT_TRIGGER_KEY and EventTrigger field set to PIXIT.DEM.TEST_EVENT_TRIGGER for User Opt-out Local Optimization Test Event", + "expectation": "Verify DUT responds w/ status SUCCESS(0x00)", + "is_commissioning": false, + "test_plan_number": "13" + }, + { + "description": "TH reads from the DUT the ESAState", + "expectation": "Value has to be 0x01 (Online)", + "is_commissioning": false, + "test_plan_number": "13a" + }, + { + "description": "TH reads from the DUT the OptOutState", + "expectation": "Value has to be 0x02 (LocalOptOut)", + "is_commissioning": false, + "test_plan_number": "13b" + }, + { + "description": "TH sends command ModifyForecastRequest with ForecastID=Forecast.ForecastID, SlotAdjustments[0].{SlotIndex=0, NominalPower=Forecast.Slots[0].MinPowerAdjustment, Duration=Forecast.Slots[0].MaxDurationAdjustment}, Cause=LocalOptimization", + "expectation": "Verify DUT responds w/ status CONSTRAINT_ERROR(0x87)", + "is_commissioning": false, + "test_plan_number": "14" + }, + { + "description": "TH sends command ModifyForecastRequest with ForecastID=Forecast.ForecastID, SlotAdjustments[0].{SlotIndex=0, NominalPower=Forecast.Slots[0].MinPowerAdjustment, Duration=Forecast.Slots[0].MaxDurationAdjustment}, Cause=GridOptimization", + "expectation": "Verify DUT responds w/ status SUCCESS(0x00)", + "is_commissioning": false, + "test_plan_number": "15" + }, + { + "description": "TH reads from the DUT the Forecast", + "expectation": "Value has to include ForecastUpdateReason=GridOptimization", + "is_commissioning": false, + "test_plan_number": "15a" + }, + { + "description": "TH sends command CancelRequest", + "expectation": "Verify DUT responds w/ status SUCCESS(0x00)", + "is_commissioning": false, + "test_plan_number": "16" + }, + { + "description": "TH reads from the DUT the Forecast", + "expectation": "Value has to include ForecastUpdateReason=InternalOptimization", + "is_commissioning": false, + "test_plan_number": "16a" + }, + { + "description": "TH sends command ModifyForecastRequest with ForecastID=Forecast.ForecastID, SlotAdjustments[0].{SlotIndex=0, NominalPower=Forecast.Slots[0].MinPowerAdjustment, Duration=Forecast.Slots[0].MaxDurationAdjustment}, Cause=GridOptimization", + "expectation": "Verify DUT responds w/ status SUCCESS(0x00)", + "is_commissioning": false, + "test_plan_number": "17" + }, + { + "description": "TH reads from the DUT the Forecast", + "expectation": "Value has to include ForecastUpdateReason=GridOptimization", + "is_commissioning": false, + "test_plan_number": "17a" + }, + { + "description": "TH sends TestEventTrigger command to General Diagnostics Cluster on Endpoint 0 with EnableKey field set to PIXIT.DEM.TEST_EVENT_TRIGGER_KEY and EventTrigger field set to PIXIT.DEM.TEST_EVENT_TRIGGER for User Opt-out Grid Optimization Test Event", + "expectation": "Verify DUT responds w/ status SUCCESS(0x00)", + "is_commissioning": false, + "test_plan_number": "18" + }, + { + "description": "TH reads from the DUT the OptOutState", + "expectation": "Value has to be 0x03 (OptOut)", + "is_commissioning": false, + "test_plan_number": "18a" + }, + { + "description": "TH reads from the DUT the Forecast", + "expectation": "Value has to include ForecastUpdateReason=Internal Optimization", + "is_commissioning": false, + "test_plan_number": "18b" + }, + { + "description": "TH sends command ModifyForecastRequest with ForecastID=Forecast.ForecastID, SlotAdjustments[0].{SlotIndex=0, NominalPower=Forecast.Slots[0].MinPowerAdjustment, Duration=Forecast.Slots[0].MaxDurationAdjustment}, Cause=GridOptimization", + "expectation": "Verify DUT responds w/ status CONSTRAINT_ERROR(0x87)", + "is_commissioning": false, + "test_plan_number": "19" + }, + { + "description": "TH sends TestEventTrigger command to General Diagnostics Cluster on Endpoint 0 with EnableKey field set to PIXIT.DEM.TEST_EVENT_TRIGGER_KEY and EventTrigger field set to PIXIT.DEM.TEST_EVENT_TRIGGER for User Opt-out Test Event Clear", + "expectation": "Verify DUT responds w/ status SUCCESS(0x00)", + "is_commissioning": false, + "test_plan_number": "20" + }, + { + "description": "TH reads from the DUT the OptOutState", + "expectation": "Value has to be 0x00 (NoOptOut)", + "is_commissioning": false, + "test_plan_number": "20a" + }, + { + "description": "TH sends command ModifyForecastRequest with ForecastID=Forecast.ForecastID, SlotAdjustments[0].{SlotIndex=0, NominalPower=Forecast.Slots[0].MaxPowerAdjustment, Duration=Forecast.Slots[0].MinDurationAdjustment}, Cause=LocalOptimization", + "expectation": "Verify DUT responds w/ status SUCCESS(0x00)", + "is_commissioning": false, + "test_plan_number": "21" + }, + { + "description": "TH reads from the DUT the Forecast", + "expectation": "Value has to include ForecastUpdateReason=LocalOptimization", + "is_commissioning": false, + "test_plan_number": "21a" + }, + { + "description": "TH sends command CancelRequest", + "expectation": "Verify DUT responds w/ status SUCCESS(0x00)", + "is_commissioning": false, + "test_plan_number": "22" + }, + { + "description": "TH reads from the DUT the Forecast", + "expectation": "Value has to include ForecastUpdateReason=InternalOptimization", + "is_commissioning": false, + "test_plan_number": "22a" + }, + { + "description": "TH sends TestEventTrigger command to General Diagnostics Cluster on Endpoint 0 with EnableKey field set to PIXIT.DEM.TEST_EVENT_TRIGGER_KEY and EventTrigger field set to PIXIT.DEM.TEST_EVENT_TRIGGER for Forecast Adjustment Test Event Next Slot", + "expectation": "Verify DUT responds w/ status SUCCESS(0x00)", + "is_commissioning": false, + "test_plan_number": "23" + }, + { + "description": "TH sends command ModifyForecastRequest with ForecastID=Forecast.ForecastID, SlotAdjustments[0].{SlotIndex=0, NominalPower=Forecast.Slots[0].MaxPowerAdjustment, Duration=Forecast.Slots[0].MinDurationAdjustment}, Cause=LocalOptimization", + "expectation": "Verify DUT responds w/ status CONSTRAINT_ERROR(0x87)", + "is_commissioning": false, + "test_plan_number": "24" + }, + { + "description": "TH sends command CancelRequest", + "expectation": "Verify DUT responds w/ status INVALID_IN_STATE(0xcb)", + "is_commissioning": false, + "test_plan_number": "25" + }, + { + "description": "TH sends TestEventTrigger command to General Diagnostics Cluster on Endpoint 0 with EnableKey field set to PIXIT.DEM.TEST_EVENT_TRIGGER_KEY and EventTrigger field set to PIXIT.DEM.TEST_EVENT_TRIGGER for Forecast Adjustment Test Event Clear", + "expectation": "Verify DUT responds w/ status SUCCESS(0x00)", + "is_commissioning": false, + "test_plan_number": "26" + } + ] + }, + { + "class_name": "TC_DEM_2_6", + "desc": "4.1.3. [TC-DEM-2.6] Forecast Adjustment with State Forecast Reporting feature functionality with DUT as Server", + "function": "test_TC_DEM_2_6", + "path": "sdk/TC_DEM_2_6", + "pics": [ + "DEM.S.F05", + "DEM.S.F02" + ], + "steps": [ + { + "description": "Commission DUT to TH (can be skipped if done in a preceding test)", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "1" + }, + { + "description": "TH reads from the DUT the _FeatureMap_ attribute", + "expectation": "Verify that the DUT response contains the _FeatureMap_ attribute. Verify ForecastAdjustment feature is supported on the cluster. Verify StateForecastReporting feature is supported on the cluster. Verify PowerForecastReporting feature is not supported on the cluster.", + "is_commissioning": false, + "test_plan_number": "2" + }, + { + "description": "TH reads TestEventTriggersEnabled attribute from General Diagnostics Cluster", + "expectation": "Value has to be 1 (True)", + "is_commissioning": false, + "test_plan_number": "3" + }, + { + "description": "TH sends TestEventTrigger command to General Diagnostics Cluster on Endpoint 0 with EnableKey field set to PIXIT.DEM.TEST_EVENT_TRIGGER_KEY and EventTrigger field set to PIXIT.DEM.TEST_EVENT_TRIGGER for Forecast Adjustment Test Event", + "expectation": "Verify DUT responds w/ status SUCCESS(0x00)", + "is_commissioning": false, + "test_plan_number": "4" + }, + { + "description": "TH reads from the DUT the ESAState", + "expectation": "Value has to be 0x01 (Online)", + "is_commissioning": false, + "test_plan_number": "4a" + }, + { + "description": "TH reads from the DUT the Forecast", + "expectation": "Value has to include slots[0].MinDurationAdjustment, slots[0].MaxDurationAdjustment", + "is_commissioning": false, + "test_plan_number": "4b" + }, + { + "description": "TH reads from the DUT the OptOutState", + "expectation": "Value has to be 0x00 (NoOptOut)", + "is_commissioning": false, + "test_plan_number": "4c" + }, + { + "description": "TH sends command ModifyForecastRequest with ForecastID=Forecast.ForecastID+1, SlotAdjustments[0].{SlotIndex=0, Duration=Forecast.Slots[0].MaxDurationAdjustment}, Cause=GridOptimization", + "expectation": "Verify DUT responds w/ status FAILURE(0x01)", + "is_commissioning": false, + "test_plan_number": "5" + }, + { + "description": "TH sends command ModifyForecastRequest with ForecastID=Forecast.ForecastID, SlotAdjustments[0].{SlotIndex=4, Duration=Forecast.Slots[0].MaxDurationAdjustment}, Cause=GridOptimization", + "expectation": "Verify DUT responds w/ status FAILURE(0x01)", + "is_commissioning": false, + "test_plan_number": "6" + }, + { + "description": "TH sends command ModifyForecastRequest with ForecastID=Forecast.ForecastID, SlotAdjustments[0].{SlotIndex=0, Duration=Forecast.Slots[0].MaxDurationAdjustment+1}, Cause=GridOptimization", + "expectation": "Verify DUT responds w/ status CONSTRAINT_ERROR(0x87)", + "is_commissioning": false, + "test_plan_number": "7" + }, + { + "description": "TH sends command ModifyForecastRequest with ForecastID=Forecast.ForecastID, SlotAdjustments[0].{SlotIndex=0, Duration=Forecast.Slots[0].MinDurationAdjustment-1}, Cause=GridOptimization", + "expectation": "Verify DUT responds w/ status CONSTRAINT_ERROR(0x87)", + "is_commissioning": false, + "test_plan_number": "8" + }, + { + "description": "TH sends command ModifyForecastRequest with ForecastID=Forecast.ForecastID, SlotAdjustments[0].{SlotIndex=0, Duration=Forecast.Slots[0].MaxDurationAdjustment}, SlotAdjustments[1].{SlotIndex=4, Duration=Forecast.Slots[0].MaxDurationAdjustment}, Cause=GridOptimization", + "expectation": "Verify DUT responds w/ status FAILURE(0x01)", + "is_commissioning": false, + "test_plan_number": "9" + }, + { + "description": "TH sends TestEventTrigger command to General Diagnostics Cluster on Endpoint 0 with EnableKey field set to PIXIT.DEM.TEST_EVENT_TRIGGER_KEY and EventTrigger field set to PIXIT.DEM.TEST_EVENT_TRIGGER for User Opt-out Local Optimization Test Event", + "expectation": "Verify DUT responds w/ status SUCCESS(0x00)", + "is_commissioning": false, + "test_plan_number": "10" + }, + { + "description": "TH reads from the DUT the ESAState", + "expectation": "Value has to be 0x01 (Online)", + "is_commissioning": false, + "test_plan_number": "10a" + }, + { + "description": "TH reads from the DUT the OptOutState", + "expectation": "Value has to be 0x02 (LocalOptOut)", + "is_commissioning": false, + "test_plan_number": "10b" + }, + { + "description": "TH sends command ModifyForecastRequest with ForecastID=Forecast.ForecastID, SlotAdjustments[0].{SlotIndex=0, Duration=Forecast.Slots[0].MaxDurationAdjustment}, Cause=LocalOptimization", + "expectation": "Verify DUT responds w/ status CONSTRAINT_ERROR(0x87)", + "is_commissioning": false, + "test_plan_number": "11" + }, + { + "description": "TH sends command ModifyForecastRequest with ForecastID=Forecast.ForecastID, SlotAdjustments[0].{SlotIndex=0, Duration=Forecast.Slots[0].MaxDurationAdjustment}, Cause=GridOptimization", + "expectation": "Verify DUT responds w/ status SUCCESS(0x00)", + "is_commissioning": false, + "test_plan_number": "12" + }, + { + "description": "TH reads from the DUT the Forecast", + "expectation": "Value has to include ForecastUpdateReason=GridOptimization", + "is_commissioning": false, + "test_plan_number": "12a" + }, + { + "description": "TH sends command CancelRequest", + "expectation": "Verify DUT responds w/ status SUCCESS(0x00)", + "is_commissioning": false, + "test_plan_number": "13" + }, + { + "description": "TH reads from the DUT the Forecast", + "expectation": "Value has to include ForecastUpdateReason=InternalOptimization", + "is_commissioning": false, + "test_plan_number": "13a" + }, + { + "description": "TH sends command ModifyForecastRequest with ForecastID=Forecast.ForecastID, SlotAdjustments[0].{SlotIndex=0, Duration=Forecast.Slots[0].MaxDurationAdjustment}, Cause=GridOptimization", + "expectation": "Verify DUT responds w/ status SUCCESS(0x00)", + "is_commissioning": false, + "test_plan_number": "14" + }, + { + "description": "TH reads from the DUT the Forecast", + "expectation": "Value has to include ForecastUpdateReason=GridOptimization", + "is_commissioning": false, + "test_plan_number": "14a" + }, + { + "description": "TH sends TestEventTrigger command to General Diagnostics Cluster on Endpoint 0 with EnableKey field set to PIXIT.DEM.TEST_EVENT_TRIGGER_KEY and EventTrigger field set to PIXIT.DEM.TEST_EVENT_TRIGGER for User Opt-out Grid Optimization Test Event", + "expectation": "Verify DUT responds w/ status SUCCESS(0x00)", + "is_commissioning": false, + "test_plan_number": "15" + }, + { + "description": "TH reads from the DUT the OptOutState", + "expectation": "Value has to be 0x03 (OptOut)", + "is_commissioning": false, + "test_plan_number": "15a" + }, + { + "description": "TH reads from the DUT the Forecast", + "expectation": "Value has to include ForecastUpdateReason=Internal Optimization", + "is_commissioning": false, + "test_plan_number": "15b" + }, + { + "description": "TH sends command ModifyForecastRequest with ForecastID=Forecast.ForecastID, SlotAdjustments[0].{SlotIndex=0, Duration=Forecast.Slots[0].MaxDurationAdjustment}, Cause=GridOptimization", + "expectation": "Verify DUT responds w/ status CONSTRAINT_ERROR(0x87)", + "is_commissioning": false, + "test_plan_number": "16" + }, + { + "description": "TH sends TestEventTrigger command to General Diagnostics Cluster on Endpoint 0 with EnableKey field set to PIXIT.DEM.TEST_EVENT_TRIGGER_KEY and EventTrigger field set to PIXIT.DEM.TEST_EVENT_TRIGGER for User Opt-out Test Event Clear", + "expectation": "Verify DUT responds w/ status SUCCESS(0x00)", + "is_commissioning": false, + "test_plan_number": "17" + }, + { + "description": "TH reads from the DUT the OptOutState", + "expectation": "Value has to be 0x00 (NoOptOut)", + "is_commissioning": false, + "test_plan_number": "17a" + }, + { + "description": "TH sends command ModifyForecastRequest with ForecastID=Forecast.ForecastID, SlotAdjustments[0].{SlotIndex=0, Duration=Forecast.Slots[0].MinDurationAdjustment}, Cause=LocalOptimization", + "expectation": "Verify DUT responds w/ status SUCCESS(0x00)", + "is_commissioning": false, + "test_plan_number": "18" + }, + { + "description": "TH reads from the DUT the Forecast", + "expectation": "Value has to include ForecastUpdateReason=LocalOptimization", + "is_commissioning": false, + "test_plan_number": "18a" + }, + { + "description": "TH sends command CancelRequest", + "expectation": "Verify DUT responds w/ status SUCCESS(0x00)", + "is_commissioning": false, + "test_plan_number": "19" + }, + { + "description": "TH reads from the DUT the Forecast", + "expectation": "Value has to include ForecastUpdateReason=InternalOptimization", + "is_commissioning": false, + "test_plan_number": "19a" + }, + { + "description": "TH sends TestEventTrigger command to General Diagnostics Cluster on Endpoint 0 with EnableKey field set to PIXIT.DEM.TEST_EVENT_TRIGGER_KEY and EventTrigger field set to PIXIT.DEM.TEST_EVENT_TRIGGER for Forecast Adjustment Test Event Next Slot", + "expectation": "Verify DUT responds w/ status SUCCESS(0x00)", + "is_commissioning": false, + "test_plan_number": "20" + }, + { + "description": "TH sends command ModifyForecastRequest with ForecastID=Forecast.ForecastID, SlotAdjustments[0].{SlotIndex=0, Duration=Forecast.Slots[0].MinDurationAdjustment}, Cause=LocalOptimization", + "expectation": "Verify DUT responds w/ status CONSTRAINT_ERROR(0x87)", + "is_commissioning": false, + "test_plan_number": "21" + }, + { + "description": "TH sends command CancelRequest", + "expectation": "Verify DUT responds w/ status INVALID_IN_STATE(0xcb)", + "is_commissioning": false, + "test_plan_number": "22" + }, + { + "description": "TH sends TestEventTrigger command to General Diagnostics Cluster on Endpoint 0 with EnableKey field set to PIXIT.DEM.TEST_EVENT_TRIGGER_KEY and EventTrigger field set to PIXIT.DEM.TEST_EVENT_TRIGGER for Forecast Adjustment Test Event Clear", + "expectation": "Verify DUT responds w/ status SUCCESS(0x00)", + "is_commissioning": false, + "test_plan_number": "23" + } + ] + }, + { + "class_name": "TC_DEM_2_7", + "desc": "4.1.3. [TC-DEM-2.7] Constraints-based Adjustment with Power Forecast Reporting feature functionality with DUT as Server", + "function": "test_TC_DEM_2_7", + "path": "sdk/TC_DEM_2_7", + "pics": [ + "DEM.S.F06", + "DEM.S.F01" + ], + "steps": [ + { + "description": "Commission DUT to TH (can be skipped if done in a preceding test)", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "1" + }, + { + "description": "TH reads from the DUT the _FeatureMap_ attribute", + "expectation": "Verify that the DUT response contains the _FeatureMap_ attribute. Verify ConstraintBasedAdjustment feature is supported on the cluster. Verify PowerForecastReporting feature is supported on the cluster. Verify StateForecastReporting feature is not supported on the cluster.", + "is_commissioning": false, + "test_plan_number": "2" + }, + { + "description": "TH reads TestEventTriggersEnabled attribute from General Diagnostics Cluster", + "expectation": "Value has to be 1 (True)", + "is_commissioning": false, + "test_plan_number": "3" + }, + { + "description": "TH sends TestEventTrigger command to General Diagnostics Cluster on Endpoint 0 with EnableKey field set to PIXIT.DEM.TEST_EVENT_TRIGGER_KEY and EventTrigger field set to PIXIT.DEM.TEST_EVENT_TRIGGER for Constraints-based Adjustment Test Event", + "expectation": "Verify DUT responds w/ status SUCCESS(0x00)", + "is_commissioning": false, + "test_plan_number": "4" + }, + { + "description": "TH reads from the DUT the ESAState", + "expectation": "Value has to be 0x01 (Online)", + "is_commissioning": false, + "test_plan_number": "4a" + }, + { + "description": "TH reads from the DUT the Forecast", + "expectation": "Value has to include valid slots[0].NominalPower, slots[0].MinPower, slots[0].MaxPower, slots[0].NominalEnergy", + "is_commissioning": false, + "test_plan_number": "4b" + }, + { + "description": "TH reads from the DUT the OptOutState", + "expectation": "Value has to be 0x00 (NoOptOut)", + "is_commissioning": false, + "test_plan_number": "4c" + }, + { + "description": "TH sends command RequestConstraintBasedPowerForecast with constraints[0].{StartTime=now()-10, Duration=20, NominalPower=Forecast.Slots[0].NominalPower, MaximumEnergy=Forecast.Slots[0].NominalEnergy}, Cause=LocalOptimization", + "expectation": "Verify DUT responds w/ status CONSTRAINT_ERROR(0x87)", + "is_commissioning": false, + "test_plan_number": "5" + }, + { + "description": "TH sends command RequestConstraintBasedPowerForecast with constraints[0].{StartTime=now()+10, Duration=20, NominalPower=Forecast.Slots[0].NominalPower, MaximumEnergy=Forecast.Slots[0].NominalEnergy}, constraints[1].{StartTime=now()+20, Duration=20, NominalPower=Forecast.Slots[0].NominalPower, MaximumEnergy=Forecast.Slots[0].NominalEnergy}, constraints[2].{StartTime=now()+40, Duration=20, NominalPower=Forecast.Slots[0].NominalPower, MaximumEnergy=Forecast.Slots[0].NominalEnergy}, Cause=LocalOptimization", + "expectation": "Verify DUT responds w/ status CONSTRAINT_ERROR(0x87)", + "is_commissioning": false, + "test_plan_number": "6" + }, + { + "description": "TH sends command RequestConstraintBasedPowerForecast with constraints[0].{StartTime=now()+10, Duration=20, NominalPower=Forecast.Slots[0].NominalPower, MaximumEnergy=Forecast.Slots[0].NominalEnergy}, constraints[1].{StartTime=now()+30, Duration=20, NominalPower=Forecast.Slots[0].NominalPower, MaximumEnergy=Forecast.Slots[0].NominalEnergy}, constraints[2].{StartTime=now()+40, Duration=20, NominalPower=Forecast.Slots[0].NominalPower, MaximumEnergy=Forecast.Slots[0].NominalEnergy}, Cause=LocalOptimization", + "expectation": "Verify DUT responds w/ status CONSTRAINT_ERROR(0x87)", + "is_commissioning": false, + "test_plan_number": "7" + }, + { + "description": "TH sends command RequestConstraintBasedPowerForecast with constraints[0].{StartTime=now()+30, Duration=20, NominalPower=Forecast.Slots[0].NominalPower, MaximumEnergy=Forecast.Slots[0].NominalEnergy}, constraints[1].{StartTime=now()+10, Duration=20, NominalPower=Forecast.Slots[0].NominalPower, MaximumEnergy=Forecast.Slots[0].NominalEnergy}, constraints[2].{StartTime=now()+50, Duration=20, NominalPower=Forecast.Slots[0].NominalPower, MaximumEnergy=Forecast.Slots[0].NominalEnergy}, Cause=LocalOptimization", + "expectation": "Verify DUT responds w/ status CONSTRAINT_ERROR(0x87)", + "is_commissioning": false, + "test_plan_number": "8" + }, + { + "description": "TH sends command RequestConstraintBasedPowerForecast with constraints[0].{StartTime=now()+10, Duration=20, NominalPower=Forecast.Slots[0].NominalPower, MaximumEnergy=Forecast.Slots[0].NominalEnergy}, constraints[1].{StartTime=now()+50, Duration=20, NominalPower=Forecast.Slots[0].NominalPower, MaximumEnergy=Forecast.Slots[0].NominalEnergy}, constraints[2].{StartTime=now()+30, Duration=20, NominalPower=Forecast.Slots[0].NominalPower, MaximumEnergy=Forecast.Slots[0].NominalEnergy}, Cause=LocalOptimization", + "expectation": "Verify DUT responds w/ status CONSTRAINT_ERROR(0x87)", + "is_commissioning": false, + "test_plan_number": "9" + }, + { + "description": "TH reads from the DUT the AbsMaxPower attribute.", + "expectation": "Save the value", + "is_commissioning": false, + "test_plan_number": "10" + }, + { + "description": "TH sends command RequestConstraintBasedPowerForecast with constraints[0].{StartTime=Forecast.StartTime, Duration=Forecast.Slots[0].DefaultDuration, NominalPower=AbsMaxPower+1, MaximumEnergy=Forecast.Slots[0].NominalEnergy}, Cause=LocalOptimization", + "expectation": "Verify DUT responds w/ status CONSTRAINT_ERROR(0x87)", + "is_commissioning": false, + "test_plan_number": "10a" + }, + { + "description": "TH reads from the DUT the AbsMinPower attribute.", + "expectation": "Save the value", + "is_commissioning": false, + "test_plan_number": "11" + }, + { + "description": "TH sends command RequestConstraintBasedPowerForecast with constraints[0].{StartTime=Forecast.StartTime, Duration=Forecast.Slots[0].DefaultDuration, NominalPower=AbsMinPower-1, MaximumEnergy=Forecast.Slots[0].NominalEnergy}, Cause=LocalOptimization", + "expectation": "Verify DUT responds w/ status CONSTRAINT_ERROR(0x87)", + "is_commissioning": false, + "test_plan_number": "11a" + }, + { + "description": "TH sends command RequestConstraintBasedPowerForecast with constraints[0].{StartTime=Forecast.StartTime, Duration=Forecast.Slots[0].DefaultDuration, NominalPower=Forecast.Slots[0].NominalPower}, Cause=LocalOptimization", + "expectation": "Verify DUT responds w/ status INVALID_COMMAND(0x85)", + "is_commissioning": false, + "test_plan_number": "12" + }, + { + "description": "TH sends command RequestConstraintBasedPowerForecast with constraints[0].{StartTime=Forecast.StartTime, Duration=Forecast.Slots[0].DefaultDuration, MaximumEnergy=Forecast.Slots[0].NominalEnergy}, Cause=LocalOptimization", + "expectation": "Verify DUT responds w/ status INVALID_COMMAND(0x85)", + "is_commissioning": false, + "test_plan_number": "13" + }, + { + "description": "TH sends TestEventTrigger command to General Diagnostics Cluster on Endpoint 0 with EnableKey field set to PIXIT.DEM.TEST_EVENT_TRIGGER_KEY and EventTrigger field set to PIXIT.DEM.TEST_EVENT_TRIGGER for User Opt-out Local Optimization Test Event", + "expectation": "Verify DUT responds w/ status SUCCESS(0x00)", + "is_commissioning": false, + "test_plan_number": "14" + }, + { + "description": "TH reads from the DUT the ESAState", + "expectation": "Value has to be 0x01 (Online)", + "is_commissioning": false, + "test_plan_number": "14a" + }, + { + "description": "TH reads from the DUT the OptOutState", + "expectation": "Value has to be 0x02 (LocalOptOut)", + "is_commissioning": false, + "test_plan_number": "14b" + }, + { + "description": "TH sends command RequestConstraintBasedPowerForecast with constraints[0].{StartTime=Forecast.StartTime, Duration=Forecast.Slots[0].DefaultDuration, NominalPower=Forecast.Slots[0].NominalPower, MaximumEnergy=Forecast.Slots[0].NominalEnergy}, Cause=LocalOptimization", + "expectation": "Verify DUT responds w/ status CONSTRAINT_ERROR(0x87)", + "is_commissioning": false, + "test_plan_number": "15" + }, + { + "description": "TH sends command RequestConstraintBasedPowerForecast with constraints[0].{StartTime=Forecast.StartTime, Duration=Forecast.Slots[0].DefaultDuration, NominalPower=Forecast.Slots[0].NominalPower, MaximumEnergy=Forecast.Slots[0].NominalEnergy}, Cause=GridOptimization", + "expectation": "Verify DUT responds w/ status SUCCESS(0x00)", + "is_commissioning": false, + "test_plan_number": "16" + }, + { + "description": "TH reads from the DUT the Forecast", + "expectation": "Value has to include ForecastUpdateReason=GridOptimization", + "is_commissioning": false, + "test_plan_number": "16a" + }, + { + "description": "TH sends command CancelRequest", + "expectation": "Verify DUT responds w/ status SUCCESS(0x00)", + "is_commissioning": false, + "test_plan_number": "17" + }, + { + "description": "TH reads from the DUT the Forecast", + "expectation": "Value has to include ForecastUpdateReason=InternalOptimization", + "is_commissioning": false, + "test_plan_number": "17a" + }, + { + "description": "TH sends command RequestConstraintBasedPowerForecast with constraints[0].{StartTime=Forecast.StartTime, Duration=Forecast.Slots[0].DefaultDuration, NominalPower=Forecast.Slots[0].NominalPower, MaximumEnergy=Forecast.Slots[0].NominalEnergy}, Cause=GridOptimization", + "expectation": "Verify DUT responds w/ status SUCCESS(0x00)", + "is_commissioning": false, + "test_plan_number": "18" + }, + { + "description": "TH reads from the DUT the Forecast", + "expectation": "Value has to include ForecastUpdateReason=GridOptimization", + "is_commissioning": false, + "test_plan_number": "18a" + }, + { + "description": "TH sends TestEventTrigger command to General Diagnostics Cluster on Endpoint 0 with EnableKey field set to PIXIT.DEM.TEST_EVENT_TRIGGER_KEY and EventTrigger field set to PIXIT.DEM.TEST_EVENT_TRIGGER for User Opt-out Grid Optimization Test Event", + "expectation": "Verify DUT responds w/ status SUCCESS(0x00)", + "is_commissioning": false, + "test_plan_number": "19" + }, + { + "description": "TH reads from the DUT the OptOutState", + "expectation": "Value has to be 0x03 (OptOut)", + "is_commissioning": false, + "test_plan_number": "19a" + }, + { + "description": "TH reads from the DUT the Forecast", + "expectation": "Value has to include ForecastUpdateReason=InternalOptimization", + "is_commissioning": false, + "test_plan_number": "19b" + }, + { + "description": "TH sends command RequestConstraintBasedPowerForecast with constraints[0].{StartTime=Forecast.StartTime, Duration=Forecast.Slots[0].DefaultDuration, NominalPower=Forecast.Slots[0].NominalPower, MaximumEnergy=Forecast.Slots[0].NominalEnergy}, Cause=GridOptimization", + "expectation": "Verify DUT responds w/ status CONSTRAINT_ERROR(0x87)", + "is_commissioning": false, + "test_plan_number": "20" + }, + { + "description": "TH sends TestEventTrigger command to General Diagnostics Cluster on Endpoint 0 with EnableKey field set to PIXIT.DEM.TEST_EVENT_TRIGGER_KEY and EventTrigger field set to PIXIT.DEM.TEST_EVENT_TRIGGER for User Opt-out Test Event Clear", + "expectation": "Verify DUT responds w/ status SUCCESS(0x00)", + "is_commissioning": false, + "test_plan_number": "21" + }, + { + "description": "TH reads from the DUT the OptOutState", + "expectation": "Value has to be 0x00 (NoOptOut)", + "is_commissioning": false, + "test_plan_number": "21a" + }, + { + "description": "TH sends command RequestConstraintBasedPowerForecast with constraints[0].{StartTime=Forecast.StartTime, Duration=Forecast.Slots[0].DefaultDuration, NominalPower=Forecast.Slots[0].NominalPower, MaximumEnergy=Forecast.Slots[0].NominalEnergy}, Cause=LocalOptimization", + "expectation": "Verify DUT responds w/ status SUCCESS(0x00)", + "is_commissioning": false, + "test_plan_number": "22" + }, + { + "description": "TH reads from the DUT the Forecast", + "expectation": "Value has to include ForecastUpdateReason=LocalOptimization", + "is_commissioning": false, + "test_plan_number": "22a" + }, + { + "description": "TH sends command CancelRequest", + "expectation": "Verify DUT responds w/ status SUCCESS(0x00)", + "is_commissioning": false, + "test_plan_number": "23" + }, + { + "description": "TH reads from the DUT the Forecast", + "expectation": "Value has to include ForecastUpdateReason=InternalOptimization", + "is_commissioning": false, + "test_plan_number": "23a" + }, + { + "description": "TH sends command CancelRequest", + "expectation": "Verify DUT responds w/ status INVALID_IN_STATE(0xcb)", + "is_commissioning": false, + "test_plan_number": "24" + }, + { + "description": "TH sends TestEventTrigger command to General Diagnostics Cluster on Endpoint 0 with EnableKey field set to PIXIT.DEM.TEST_EVENT_TRIGGER_KEY and EventTrigger field set to PIXIT.DEM.TEST_EVENT_TRIGGER for Constraints-based Adjustment Adjustment Test Event Clear", + "expectation": "Verify DUT responds w/ status SUCCESS(0x00)", + "is_commissioning": false, + "test_plan_number": "25" + } + ] + }, + { + "class_name": "TC_DEM_2_8", + "desc": "4.1.3. [TC-DEM-2.8] Constraints-based Adjustment with State Forecast Reporting feature functionality with DUT as Server", + "function": "test_TC_DEM_2_8", + "path": "sdk/TC_DEM_2_8", + "pics": [ + "DEM.S.F06", + "DEM.S.F02" + ], + "steps": [ + { + "description": "Commission DUT to TH (can be skipped if done in a preceding test)", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "1" + }, + { + "description": "TH reads from the DUT the _FeatureMap_ attribute", + "expectation": "Verify that the DUT response contains the _FeatureMap_ attribute. Verify ConstraintBasedAdjustment feature is supported on the cluster. Verify StateForecastReporting feature is supported on the cluster. Verify PowerForecastReporting feature is not supported on the cluster.", + "is_commissioning": false, + "test_plan_number": "2" + }, + { + "description": "TH reads TestEventTriggersEnabled attribute from General Diagnostics Cluster", + "expectation": "Value has to be 1 (True)", + "is_commissioning": false, + "test_plan_number": "3" + }, + { + "description": "TH sends TestEventTrigger command to General Diagnostics Cluster on Endpoint 0 with EnableKey field set to PIXIT.DEM.TEST_EVENT_TRIGGER_KEY and EventTrigger field set to PIXIT.DEM.TEST_EVENT_TRIGGER for Constraints-based Adjustment Test Event", + "expectation": "Verify DUT responds w/ status SUCCESS(0x00)", + "is_commissioning": false, + "test_plan_number": "4" + }, + { + "description": "TH reads from the DUT the ESAState", + "expectation": "Value has to be 0x01 (Online)", + "is_commissioning": false, + "test_plan_number": "4a" + }, + { + "description": "TH reads from the DUT the Forecast", + "expectation": "Value has to include valid slots[0].ManufacturerESAState", + "is_commissioning": false, + "test_plan_number": "4b" + }, + { + "description": "TH reads from the DUT the OptOutState", + "expectation": "Value has to be 0x00 (NoOptOut)", + "is_commissioning": false, + "test_plan_number": "4c" + }, + { + "description": "TH sends command RequestConstraintBasedPowerForecast with constraints[0].{StartTime=now()-10, Duration=20, LoadControl=0}, Cause=LocalOptimization", + "expectation": "Verify DUT responds w/ status CONSTRAINT_ERROR(0x87)", + "is_commissioning": false, + "test_plan_number": "5" + }, + { + "description": "TH sends command RequestConstraintBasedPowerForecast with constraints[0].{StartTime=now()+10, Duration=20, LoadControl=0}, constraints[1].{StartTime=now()+20, Duration=20, LoadControl=0}, constraints[2].{StartTime=now()+50, Duration=20, LoadControl=0}, Cause=LocalOptimization", + "expectation": "Verify DUT responds w/ status CONSTRAINT_ERROR(0x87)", + "is_commissioning": false, + "test_plan_number": "6" + }, + { + "description": "TH sends command RequestConstraintBasedPowerForecast with constraints[0].{StartTime=now()+10, Duration=20, LoadControl=0}, constraints[1].{StartTime=now()+30, Duration=20, LoadControl=0}, constraints[2].{StartTime=now()+40, Duration=20, LoadControl=0}, Cause=LocalOptimization", + "expectation": "Verify DUT responds w/ status CONSTRAINT_ERROR(0x87)", + "is_commissioning": false, + "test_plan_number": "7" + }, + { + "description": "TH sends command RequestConstraintBasedPowerForecast with constraints[0].{StartTime=now()+30, Duration=20, LoadControl=0}, constraints[1].{StartTime=now()+10, Duration=20, LoadControl=0}, constraints[2].{StartTime=now()+50, Duration=20, LoadControl=0}, Cause=LocalOptimization", + "expectation": "Verify DUT responds w/ status CONSTRAINT_ERROR(0x87)", + "is_commissioning": false, + "test_plan_number": "8" + }, + { + "description": "TH sends command RequestConstraintBasedPowerForecast with constraints[0].{StartTime=now()+10, Duration=20, LoadControl=0}, constraints[1].{StartTime=now()+50, Duration=20, LoadControl=0}, constraints[2].{StartTime=now()+30, Duration=20, LoadControl=0}, Cause=LocalOptimization", + "expectation": "Verify DUT responds w/ status CONSTRAINT_ERROR(0x87)", + "is_commissioning": false, + "test_plan_number": "9" + }, + { + "description": "TH sends command RequestConstraintBasedPowerForecast with constraints[0].{StartTime=Forecast.StartTime, Duration=Forecast.Slots[0].DefaultDuration, LoadControl=101}, Cause=LocalOptimization", + "expectation": "Verify DUT responds w/ status CONSTRAINT_ERROR(0x87)", + "is_commissioning": false, + "test_plan_number": "10" + }, + { + "description": "TH sends command RequestConstraintBasedPowerForecast with constraints[0].{StartTime=Forecast.StartTime, Duration=Forecast.Slots[0].DefaultDuration, LoadControl=-101}, Cause=LocalOptimization", + "expectation": "Verify DUT responds w/ status CONSTRAINT_ERROR(0x87)", + "is_commissioning": false, + "test_plan_number": "11" + }, + { + "description": "TH sends TestEventTrigger command to General Diagnostics Cluster on Endpoint 0 with EnableKey field set to PIXIT.DEM.TEST_EVENT_TRIGGER_KEY and EventTrigger field set to PIXIT.DEM.TEST_EVENT_TRIGGER for User Opt-out Local Optimization Test Event", + "expectation": "Verify DUT responds w/ status SUCCESS(0x00)", + "is_commissioning": false, + "test_plan_number": "12" + }, + { + "description": "TH reads from the DUT the ESAState", + "expectation": "Value has to be 0x01 (Online)", + "is_commissioning": false, + "test_plan_number": "12a" + }, + { + "description": "TH reads from the DUT the OptOutState", + "expectation": "Value has to be 0x02 (LocalOptOut)", + "is_commissioning": false, + "test_plan_number": "12b" + }, + { + "description": "TH sends command RequestConstraintBasedPowerForecast with constraints[0].{StartTime=Forecast.StartTime, Duration=Forecast.Slots[0].DefaultDuration, LoadControl=1}, Cause=LocalOptimization", + "expectation": "Verify DUT responds w/ status CONSTRAINT_ERROR(0x87)", + "is_commissioning": false, + "test_plan_number": "13" + }, + { + "description": "TH sends command RequestConstraintBasedPowerForecast with constraints[0].{StartTime=Forecast.StartTime, Duration=Forecast.Slots[0].DefaultDuration, LoadControl=1}, Cause=GridOptimization", + "expectation": "Verify DUT responds w/ status SUCCESS(0x00)", + "is_commissioning": false, + "test_plan_number": "14" + }, + { + "description": "TH reads from the DUT the Forecast", + "expectation": "Value has to include ForecastUpdateReason=GridOptimization", + "is_commissioning": false, + "test_plan_number": "14a" + }, + { + "description": "TH sends command CancelRequest", + "expectation": "Verify DUT responds w/ status SUCCESS(0x00)", + "is_commissioning": false, + "test_plan_number": "15" + }, + { + "description": "TH reads from the DUT the Forecast", + "expectation": "Value has to include ForecastUpdateReason=InternalOptimization", + "is_commissioning": false, + "test_plan_number": "15a" + }, + { + "description": "TH sends command RequestConstraintBasedPowerForecast with constraints[0].{StartTime=Forecast.StartTime, Duration=Forecast.Slots[0].DefaultDuration, LoadControl=1}, Cause=GridOptimization", + "expectation": "Verify DUT responds w/ status SUCCESS(0x00)", + "is_commissioning": false, + "test_plan_number": "16" + }, + { + "description": "TH reads from the DUT the Forecast", + "expectation": "Value has to include ForecastUpdateReason=GridOptimization", + "is_commissioning": false, + "test_plan_number": "16a" + }, + { + "description": "TH sends TestEventTrigger command to General Diagnostics Cluster on Endpoint 0 with EnableKey field set to PIXIT.DEM.TEST_EVENT_TRIGGER_KEY and EventTrigger field set to PIXIT.DEM.TEST_EVENT_TRIGGER for User Opt-out Grid Optimization Test Event", + "expectation": "Verify DUT responds w/ status SUCCESS(0x00)", + "is_commissioning": false, + "test_plan_number": "17" + }, + { + "description": "TH reads from the DUT the OptOutState", + "expectation": "Value has to be 0x03 (OptOut)", + "is_commissioning": false, + "test_plan_number": "17a" + }, + { + "description": "TH reads from the DUT the Forecast", + "expectation": "Value has to include ForecastUpdateReason=InternalOptimization", + "is_commissioning": false, + "test_plan_number": "17b" + }, + { + "description": "TH sends command RequestConstraintBasedPowerForecast with constraints[0].{StartTime=Forecast.StartTime, Duration=Forecast.Slots[0].DefaultDuration, LoadControl=1}, Cause=GridOptimization", + "expectation": "Verify DUT responds w/ status CONSTRAINT_ERROR(0x87)", + "is_commissioning": false, + "test_plan_number": "18" + }, + { + "description": "TH sends TestEventTrigger command to General Diagnostics Cluster on Endpoint 0 with EnableKey field set to PIXIT.DEM.TEST_EVENT_TRIGGER_KEY and EventTrigger field set to PIXIT.DEM.TEST_EVENT_TRIGGER for User Opt-out Test Event Clear", + "expectation": "Verify DUT responds w/ status SUCCESS(0x00)", + "is_commissioning": false, + "test_plan_number": "19" + }, + { + "description": "TH reads from the DUT the OptOutState", + "expectation": "Value has to be 0x00 (NoOptOut)", + "is_commissioning": false, + "test_plan_number": "19a" + }, + { + "description": "TH sends command RequestConstraintBasedPowerForecast with constraints[0].{StartTime=Forecast.StartTime, Duration=Forecast.Slots[0].DefaultDuration, LoadControl=1}, Cause=LocalOptimization", + "expectation": "Verify DUT responds w/ status SUCCESS(0x00)", + "is_commissioning": false, + "test_plan_number": "20" + }, + { + "description": "TH reads from the DUT the Forecast", + "expectation": "Value has to include ForecastUpdateReason=LocalOptimization", + "is_commissioning": false, + "test_plan_number": "20a" + }, + { + "description": "TH sends command CancelRequest", + "expectation": "Verify DUT responds w/ status SUCCESS(0x00)", + "is_commissioning": false, + "test_plan_number": "21" + }, + { + "description": "TH reads from the DUT the Forecast", + "expectation": "Value has to include ForecastUpdateReason=InternalOptimization", + "is_commissioning": false, + "test_plan_number": "21a" + }, + { + "description": "TH sends command CancelRequest", + "expectation": "Verify DUT responds w/ status INVALID_IN_STATE(0xcb)", + "is_commissioning": false, + "test_plan_number": "22" + }, + { + "description": "TH sends TestEventTrigger command to General Diagnostics Cluster on Endpoint 0 with EnableKey field set to PIXIT.DEM.TEST_EVENT_TRIGGER_KEY and EventTrigger field set to PIXIT.DEM.TEST_EVENT_TRIGGER for Constraints-based Adjustment Adjustment Test Event Clear", + "expectation": "Verify DUT responds w/ status SUCCESS(0x00)", + "is_commissioning": false, + "test_plan_number": "23" + } + ] + }, + { + "class_name": "TC_DEM_2_9", + "desc": "4.1.3. [TC-DEM-2.2] Power or State Forecast Reporting feature functionality with DUT as Server", + "function": "test_TC_DEM_2_9", + "path": "sdk/TC_DEM_2_9", + "pics": [ + "DEM.S.F01", + "DEM.S.F02" + ], + "steps": [ + { + "description": "Commission DUT to TH (can be skipped if done in a preceding test)", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "1" + }, + { + "description": "TH reads from the DUT the _FeatureMap_ attribute", + "expectation": "Verify that the DUT response contains the _FeatureMap_ attribute. Verify one of PowerForecastReporting or StateForecastReporting is supported but not both.", + "is_commissioning": false, + "test_plan_number": "2" + }, + { + "description": "TH reads TestEventTriggersEnabled attribute from General Diagnostics Cluster", + "expectation": "Value has to be 1 (True)", + "is_commissioning": false, + "test_plan_number": "3" + }, + { + "description": "TH sends TestEventTrigger command to General Diagnostics Cluster on Endpoint 0 with EnableKey field set to PIXIT.DEM.TEST_EVENT_TRIGGER_KEY and EventTrigger field set to PIXIT.DEM.TEST_EVENT_TRIGGER for Forecast Test Event", + "expectation": "Verify DUT responds w/ status SUCCESS(0x00)", + "is_commissioning": false, + "test_plan_number": "4" + }, + { + "description": "TH reads from the DUT the Forecast", + "expectation": "Value has to include a valid slots[0].ManufacturerESAState", + "is_commissioning": false, + "test_plan_number": "4a" + }, + { + "description": "TH reads from the DUT the Forecast", + "expectation": "Value has to include valid slots[0].NominalPower, slots[0].MinPower, slots[0].MaxPower, slots[0].NominalEnergy", + "is_commissioning": false, + "test_plan_number": "4b" + }, + { + "description": "TH sends TestEventTrigger command to General Diagnostics Cluster on Endpoint 0 with EnableKey field set to PIXIT.DEM.TEST_EVENT_TRIGGER_KEY and EventTrigger field set to PIXIT.DEM.TEST_EVENT_TRIGGER for Forecast Test Event Clear", + "expectation": "Verify DUT responds w/ status SUCCESS(0x00)", + "is_commissioning": false, + "test_plan_number": "5" + } + ] + }, + { + "class_name": "TC_DGGEN_2_4", + "desc": "test_TC_DGGEN_2_4", + "function": "test_TC_DGGEN_2_4", + "path": "sdk/TC_DGGEN_2_4", + "pics": [], + "steps": [ + { + "description": "Run entire test", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 1 + } + ] + }, + { + "class_name": "TC_DGGEN_3_2", + "desc": "test_TC_DGGEN_3_2", + "function": "test_TC_DGGEN_3_2", + "path": "sdk/TC_DGGEN_3_2", + "pics": [], + "steps": [ + { + "description": "Commission DUT (already done)", + "expectation": "", + "is_commissioning": true, + "test_plan_number": 0 + }, + { + "description": "TH reads the MaxPathsPerInvoke attribute from the Basic Information Cluster from DUT. Save the value as `max_paths_per_invoke", + "expectation": "Read is successful", + "is_commissioning": false, + "test_plan_number": 1 + }, + { + "description": "TH reads FeatureMap attribute from the General Diagnostics Cluster from DUT", + "expectation": "Verify that the FeatureMap value has the DMTEST feature bit (0) set to 1 if `max_path_per_invoke` > 1", + "is_commissioning": false, + "test_plan_number": 2 + } + ] + }, + { + "class_name": "TC_DRLK_2_12", + "desc": "test_TC_DRLK_2_12", + "function": "test_TC_DRLK_2_12", + "path": "sdk/TC_DRLK_2_12", + "pics": [ + "DRLK.S.F0c" + ], + "steps": [ + { + "description": "Run entire test", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 1 + } + ] + }, + { + "class_name": "TC_DRLK_2_13", + "desc": "test_TC_DRLK_2_13", + "function": "test_TC_DRLK_2_13", + "path": "sdk/TC_DRLK_2_13", + "pics": [ + "DRLK.S.F0d" + ], + "steps": [ + { + "description": "TH reads OperationalCredentials cluster's CurrentFabricIndex and save the attribute", + "expectation": "TH Reads Attribute Successfully", + "is_commissioning": false, + "test_plan_number": "1a" + }, + { + "description": "TH sends ClearUser Command to DUT with the UserIndex as 0xFFFE to clear all the users", + "expectation": "DUT responds with Success response", + "is_commissioning": false, + "test_plan_number": "1b" + }, + { + "description": "TH sends ClearCredential Command to DUT to clear all the credentials", + "expectation": "Verify that the DUT sends SUCCESS response", + "is_commissioning": false, + "test_plan_number": "1c" + }, + { + "description": "TH sends ClearAliroReaderConfig Command to DUT for clearing any existing Aliro Configuration", + "expectation": "Verify that the DUT sends SUCCESS response", + "is_commissioning": false, + "test_plan_number": "2a" + }, + { + "description": ",TH sends SetAliroReaderConfig Command to DUT without GroupResolvingKey", + "expectation": "DUT sends success response", + "is_commissioning": false, + "test_plan_number": "2b" + }, + { + "description": "TH sends SetAliroReaderConfig Command to DUT with GroupResolvingKey", + "expectation": "DUT sends success response", + "is_commissioning": false, + "test_plan_number": "2c" + }, + { + "description": "TH reads AliroReaderVerificationKey attribute from DUT", + "expectation": "Verify that AliroReaderVerificationKey value is same as 'verificationkey'", + "is_commissioning": false, + "test_plan_number": "3" + }, + { + "description": "TH reads AliroReaderGroupIdentifier attribute from DUT", + "expectation": "Verify that AliroReaderGroupIdentifier value is same as 'groupidentifier'", + "is_commissioning": false, + "test_plan_number": "4" + }, + { + "description": "TH reads AliroGroupResolvingKey attribute from DUT", + "expectation": "Verify that AliroGroupResolvingKey value is same 'groupresolvingkey'", + "is_commissioning": false, + "test_plan_number": "5" + }, + { + "description": ",TH sends SetAliroReaderConfig Command to DUT without GroupResolvingKey", + "expectation": "Verify that the DUT sends INVALID_IN_STATE response", + "is_commissioning": false, + "test_plan_number": "6a" + }, + { + "description": "TH sends SetAliroReaderConfig Command to DUT with GroupResolvingKey", + "expectation": "Verify that the DUT sends INVALID_IN_STATE response", + "is_commissioning": false, + "test_plan_number": "6b" + }, + { + "description": "TH sends ClearAliroReaderConfig Command to DUT", + "expectation": "Verify that the DUT sends SUCCESS response", + "is_commissioning": false, + "test_plan_number": "7" + }, + { + "description": "TH reads AliroReaderVerificationKey attribute from DUT", + "expectation": "Verify that AliroReaderVerificationKey value is null", + "is_commissioning": false, + "test_plan_number": "8" + }, + { + "description": "TH reads AliroReaderGroupIdentifier attribute from DUT", + "expectation": "Verify that AliroReaderGroupIdentifier value is null", + "is_commissioning": false, + "test_plan_number": "9" + }, + { + "description": "TH reads AliroGroupResolvingKey attribute from DUT", + "expectation": "Verify that AliroGroupResolvingKey value is null", + "is_commissioning": false, + "test_plan_number": "10" + }, + { + "description": ",TH sends SetAliroReaderConfig Command to DUT without GroupResolvingKey", + "expectation": "DUT sends success response", + "is_commissioning": false, + "test_plan_number": "11a" + }, + { + "description": "TH sends SetAliroReaderConfig Command to DUT with GroupResolvingKey", + "expectation": "DUT sends success response", + "is_commissioning": false, + "test_plan_number": "11b" + }, + { + "description": "TH reads NumberOfAliroEndpointKeysSupported store as 'max_aliro_keys_supported' if max_aliro_keys_supported>= 2 continue with the next steps,Verify that Read operation is successful", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "12a" + }, + { + "description": "TH sends SetUser Command to DUT to create an Aliro user using username as 'AliroUser' and unique id 111", + "expectation": "Verify that the DUT sends SUCCESS response", + "is_commissioning": false, + "test_plan_number": "12b" + }, + { + "description": "TH sends SetCredential Command Credential as (6, 2)", + "expectation": "Verify that the DUT responds with SetCredentialResponse command, DUT responds with status success in SetCredentialResponse", + "is_commissioning": false, + "test_plan_number": "13a" + }, + { + "description": "TH sends SetCredential Command with Credential as (6, 1)", + "expectation": "Verify that the DUT responds with SetCredentialResponse command, DUT responds with status success in SetCredentialResponse", + "is_commissioning": false, + "test_plan_number": "13b" + }, + { + "description": "TH reads the LockUserChange event list from DUT", + "expectation": "Verify list has an event LockDataType: 11 as latest event with DataOperationType: 0(DataOperationTypeEnum.Add) along with other information", + "is_commissioning": false, + "test_plan_number": "14" + }, + { + "description": "TH sends GetCredentialStatus Command with Credential as (6,1)", + "expectation": "Verify DUT responds with GetCredentialStatusResponse having CredentialExists is true and UserIndex as 1", + "is_commissioning": false, + "test_plan_number": "15" + }, + { + "description": "TH sends ClearCredential Command to DUT to clear the CredentialType of AliroCredentialIssuerKey", + "expectation": "Verify that the DUT sends SUCCESS response", + "is_commissioning": false, + "test_plan_number": "16" + }, + { + "description": "TH reads the LockUserChange event list from DUT", + "expectation": "Verify list has an event LockDataType: 11 as latest event with DataOperationType: 1(DataOperationTypeEnum.Clear) along with other information", + "is_commissioning": false, + "test_plan_number": "17" + }, + { + "description": "TH sends SetCredential Command to DUT with CredentialType as AliroEvictableEndpointKey", + "expectation": "Verify that the DUT responds with SetCredentialResponse command, DUT responds with status success in SetCredentialResponse", + "is_commissioning": false, + "test_plan_number": "18" + }, + { + "description": "TH reads the LockUserChange event list from DUT", + "expectation": "Verify list has an event LockDataType: 11 as latest event with DataOperationType: 0(DataOperationTypeEnum.Add) along with other information", + "is_commissioning": false, + "test_plan_number": "19" + }, + { + "description": "TH sends GetCredentialStatus Command with Credential as 7 1", + "expectation": "Verify DUT responds with GetCredentialStatusResponse having CredentialExists is true and UserIndex as 1", + "is_commissioning": false, + "test_plan_number": "20" + }, + { + "description": "TH sends ClearCredential Command to DUT to clear the CredentialType of AliroEvictableEndpointKey", + "expectation": "Verify that the DUT sends SUCCESS response", + "is_commissioning": false, + "test_plan_number": "21" + }, + { + "description": "TH reads the LockUserChange event list from DUT", + "expectation": "Verify list has an event LockDataType: 12 as latest event with DataOperationType: 1(DataOperationTypeEnum.Clear) along with other information", + "is_commissioning": false, + "test_plan_number": "22" + }, + { + "description": "TH sends SetCredential Command to DUT with CredentialType as AliroNonEvictableEndpointKey ", + "expectation": "Verify that the DUT responds with SetCredentialResponse command and Status success.", + "is_commissioning": false, + "test_plan_number": "23" + }, + { + "description": "TH reads the LockUserChange event list from DUT", + "expectation": "Verify list has an event LockDataType: 12 as latest event with DataOperationType: 0(DataOperationTypeEnum.Add) along with other information", + "is_commissioning": false, + "test_plan_number": "24" + }, + { + "description": "TH sends GetCredentialStatus Command with Credential as 8 1", + "expectation": "Verify DUT responds with GetCredentialStatusResponse having CredentialExists is true and UserIndex as 1", + "is_commissioning": false, + "test_plan_number": "25" + }, + { + "description": "TH sends ClearCredential Command to DUT to clear the CredentialType of AliroNonEvictableEndpointKey", + "expectation": "DUT sends SUCCESS response", + "is_commissioning": false, + "test_plan_number": "26" + }, + { + "description": "TH reads the LockUserChange event list from DUT", + "expectation": "Verify list has an event LockDataType: 13 as latest event with DataOperationType: 1(DataOperationTypeEnum.Clear) along with other information", + "is_commissioning": false, + "test_plan_number": "27" + }, + { + "description": "Th Reads NumberOfCredentialsSupportedPerUser saves as numberofcredentialsupportedperuser,Read operation is successful", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "28a" + }, + { + "description": "TH sends ClearCredential Command to DUT to clear all the credentials of Aliro type TH sends ClearUser Command with UserIndex as 1 to DUT to clear alirouserExecuting steps 29 to 35 only when 'max_aliro_keys_supported <= numberofcredentialsupportedperuser' else exit script", + "expectation": "Verify that Read operation is successful", + "is_commissioning": false, + "test_plan_number": "28b" + }, + { + "description": "TH sends SetUser Command to DUT to create an Aliro user", + "expectation": "DUT sends SUCCESS response", + "is_commissioning": false, + "test_plan_number": "29a" + }, + { + "description": "TH performs repeated number of SetCredential commands with credentials as 8 'startcredentialindex' until 'max_aliro_keys_supported - 1', startcredentialindex initially has value 1 .", + "expectation": "Verify that the DUT responds with SetCredentialResponse command and Status success.", + "is_commissioning": false, + "test_plan_number": "29b" + }, + { + "description": "TH sends SetCredential Command to DUT with CredentialType as AliroEvictableEndpointKey for the 'alirouser' ", + "expectation": "Verify that the DUT responds with SetCredentialResponse command and Status success. This step will fill the last slot with credentialType as AliroEvictableEndpointKey", + "is_commissioning": false, + "test_plan_number": "30" + }, + { + "description": "TH sends SetCredential Command to DUT with CredentialType as AliroNonEvictableEndpointKey and number of credentials for 'alirouser' exceeds the max_aliro_keys_supported", + "expectation": "Verify that the DUT responds with SetCredentialResponse command and Status success.", + "is_commissioning": false, + "test_plan_number": "31" + }, + { + "description": "TH sends GetCredentialStatus Command with Credential as 7 startcredentialindex+1", + "expectation": "DUT responds with GetCredentialStatusResponse Command and CredentialExists is false", + "is_commissioning": false, + "test_plan_number": "32" + }, + { + "description": "TH sends GetCredentialStatus Command with Credential as 8 startcredentialindex+1", + "expectation": "Verify DUT responds with GetCredentialStatusResponse having CredentialExists is true and UserIndex as 1", + "is_commissioning": false, + "test_plan_number": "33" + }, + { + "description": "TH sends ClearCredential Command to DUT to clear the ALIRO CredentialType", + "expectation": "Verify that the DUT sends SUCCESS response", + "is_commissioning": false, + "test_plan_number": "34" + }, + { + "description": "TH sends ClearUser Command to DUT with the UserIndex as 1", + "expectation": "Verify that the DUT sends SUCCESS response", + "is_commissioning": false, + "test_plan_number": "35" + } + ] + }, + { + "class_name": "TC_DRLK_2_2", + "desc": "test_TC_DRLK_2_2", + "function": "test_TC_DRLK_2_2", + "path": "sdk/TC_DRLK_2_2", + "pics": [ + "DRLK.S" + ], + "steps": [ + { + "description": "Run entire test", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 1 + } + ] + }, + { + "class_name": "TC_DRLK_2_3", + "desc": "test_TC_DRLK_2_3", + "function": "test_TC_DRLK_2_3", + "path": "sdk/TC_DRLK_2_3", + "pics": [ + "DRLK.S" + ], + "steps": [ + { + "description": "Run entire test", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 1 + } + ] + }, + { + "class_name": "TC_DeviceBasicComposition", + "desc": "test_TC_DESC_2_2", + "function": "test_TC_DESC_2_2", + "path": "sdk/TC_DeviceBasicComposition", + "pics": [], + "steps": [ + { + "description": "Run entire test", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 1 + } + ] + }, + { + "class_name": "TC_DeviceBasicComposition", + "desc": "test_TC_DT_1_1", + "function": "test_TC_DT_1_1", + "path": "sdk/TC_DeviceBasicComposition", + "pics": [], + "steps": [ + { + "description": "Run entire test", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 1 + } + ] + }, + { + "class_name": "TC_DeviceBasicComposition", + "desc": "test_TC_IDM_10_1", + "function": "test_TC_IDM_10_1", + "path": "sdk/TC_DeviceBasicComposition", + "pics": [], + "steps": [ + { + "description": "Run entire test", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 1 + } + ] + }, + { + "class_name": "TC_DeviceBasicComposition", + "desc": "test_TC_IDM_11_1", + "function": "test_TC_IDM_11_1", + "path": "sdk/TC_DeviceBasicComposition", + "pics": [], + "steps": [ + { + "description": "Run entire test", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 1 + } + ] + }, + { + "class_name": "TC_DeviceBasicComposition", + "desc": "test_TC_IDM_12_1", + "function": "test_TC_IDM_12_1", + "path": "sdk/TC_DeviceBasicComposition", + "pics": [], + "steps": [ + { + "description": "TH performs a wildcard read of all attributes and endpoints on the device", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 0 + }, + { + "description": "TH creates a MatterTlvJson dump of the wildcard attributes for submission to certification.", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 1 + } + ] + }, + { + "class_name": "TC_DeviceBasicComposition", + "desc": "test_TC_PS_3_1", + "function": "test_TC_PS_3_1", + "path": "sdk/TC_DeviceBasicComposition", + "pics": [], + "steps": [ + { + "description": "Run entire test", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 1 + } + ] + }, + { + "class_name": "TC_DeviceBasicComposition", + "desc": "test_TC_SM_1_1", + "function": "test_TC_SM_1_1", + "path": "sdk/TC_DeviceBasicComposition", + "pics": [], + "steps": [ + { + "description": "Run entire test", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 1 + } + ] + }, + { + "class_name": "TC_DeviceBasicComposition", + "desc": "test_TC_SM_1_2", + "function": "test_TC_SM_1_2", + "path": "sdk/TC_DeviceBasicComposition", + "pics": [], + "steps": [ + { + "description": "Run entire test", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 1 + } + ] + }, + { + "class_name": "TC_DeviceBasicComposition", + "desc": "test_all_commands_reported_are_executable", + "function": "test_all_commands_reported_are_executable", + "path": "sdk/TC_DeviceBasicComposition", + "pics": [], + "steps": [ + { + "description": "Run entire test", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 1 + } + ] + }, + { + "class_name": "TC_DeviceBasicComposition", + "desc": "test_all_endpoints_have_valid_composition", + "function": "test_all_endpoints_have_valid_composition", + "path": "sdk/TC_DeviceBasicComposition", + "pics": [], + "steps": [ + { + "description": "Run entire test", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 1 + } + ] + }, + { + "class_name": "TC_DeviceBasicComposition", + "desc": "test_all_event_strings_valid", + "function": "test_all_event_strings_valid", + "path": "sdk/TC_DeviceBasicComposition", + "pics": [], + "steps": [ + { + "description": "Run entire test", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 1 + } + ] + }, + { + "class_name": "TC_DeviceBasicComposition", + "desc": "test_all_schema_mandatory_elements_present", + "function": "test_all_schema_mandatory_elements_present", + "path": "sdk/TC_DeviceBasicComposition", + "pics": [], + "steps": [ + { + "description": "Run entire test", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 1 + } + ] + }, + { + "class_name": "TC_DeviceBasicComposition", + "desc": "test_all_schema_scalars", + "function": "test_all_schema_scalars", + "path": "sdk/TC_DeviceBasicComposition", + "pics": [], + "steps": [ + { + "description": "Run entire test", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 1 + } + ] + }, + { + "class_name": "TC_DeviceBasicComposition", + "desc": "test_dump_all_pics_for_all_endpoints", + "function": "test_dump_all_pics_for_all_endpoints", + "path": "sdk/TC_DeviceBasicComposition", + "pics": [], + "steps": [ + { + "description": "Run entire test", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 1 + } + ] + }, + { + "class_name": "TC_DeviceConformance", + "desc": "test_TC_IDM_10_2", + "function": "test_TC_IDM_10_2", + "path": "sdk/TC_DeviceConformance", + "pics": [], + "steps": [ + { + "description": "Run entire test", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 1 + } + ] + }, + { + "class_name": "TC_DeviceConformance", + "desc": "test_TC_IDM_10_3", + "function": "test_TC_IDM_10_3", + "path": "sdk/TC_DeviceConformance", + "pics": [], + "steps": [ + { + "description": "Run entire test", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 1 + } + ] + }, + { + "class_name": "TC_DeviceConformance", + "desc": "test_TC_IDM_10_5", + "function": "test_TC_IDM_10_5", + "path": "sdk/TC_DeviceConformance", + "pics": [], + "steps": [ + { + "description": "Run entire test", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 1 + } + ] + }, + { + "class_name": "TC_ECOINFO_2_1", + "desc": "test_TC_ECOINFO_2_1", + "function": "test_TC_ECOINFO_2_1", + "path": "sdk/TC_ECOINFO_2_1", + "pics": [], + "steps": [ + { + "description": "Identify endpoints with Ecosystem Information Cluster", + "expectation": "", + "is_commissioning": true, + "test_plan_number": 1 + }, + { + "description": "Reading DeviceDirectory Attribute", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 2 + }, + { + "description": "Reading LocationDirectory Attribute", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 3 + }, + { + "description": "Try Writing to DeviceDirectory Attribute", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 4 + }, + { + "description": "Try Writing to LocationDirectory Attribute", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 5 + }, + { + "description": "Repeating steps 2 to 5 for each endpoint identified in step 1", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 6 + } + ] + }, + { + "class_name": "TC_ECOINFO_2_2", + "desc": "test_TC_ECOINFO_2_2", + "function": "test_TC_ECOINFO_2_2", + "path": "sdk/TC_ECOINFO_2_2", + "pics": [], + "steps": [ + { + "description": "Prepare", + "expectation": "", + "is_commissioning": true, + "test_plan_number": 1 + }, + { + "description": "Read root endpoint's PartsList", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "1a" + }, + { + "description": "For each endpoint in 1a read DeviceType list confirming aggregator endpoint exists", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "1b" + }, + { + "description": "Add a bridged device", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 2 + }, + { + "description": "(Manual Step) Add a bridged device using method indicated by the manufacturer", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "2a" + }, + { + "description": "Read root endpoint's PartsList, validate exactly one endpoint added", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "2b" + }, + { + "description": "On newly added endpoint detected in 2b read DeviceDirectory Ecosystem Information Attribute and validate success", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "2c" + }, + { + "description": "On newly added endpoint detected in 2b read LocationDirectory Ecosystem Information Attribute and validate success", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "2d" + }, + { + "description": "Remove bridged device", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 3 + }, + { + "description": "(Manual Step) Removed bridged device added in step 2a using method indicated by the manufacturer", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "3a" + }, + { + "description": "Verify that PartsList equals what was read in 1a", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "3b" + }, + { + "description": "On endpoint detected in 2b, read DeviceDirectory Ecosystem Information Attribute and validate failure", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "3c" + }, + { + "description": "On endpoint detected in 2b, read LocationDirectory Ecosystem Information Attribute and validate failure", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "3d" + } + ] + }, + { + "class_name": "TC_EEM_2_1", + "desc": "5.1.2. [TC-EEM-2.1] Attributes with Server as DUT", + "function": "test_TC_EEM_2_1", + "path": "sdk/TC_EEM_2_1", + "pics": [ + "EEM.S" + ], + "steps": [ + { + "description": "Commissioning, already done", + "expectation": "", + "is_commissioning": true, + "test_plan_number": "1" + }, + { + "description": "TH reads Accuracy attribute", + "expectation": "Verify that the DUT response contains a MeasurementAccuracyStruct value.", + "is_commissioning": false, + "test_plan_number": "2" + }, + { + "description": "TH reads CumulativeEnergyImported attribute", + "expectation": "Verify that the DUT response contains either null or an EnergyMeasurementStruct value.", + "is_commissioning": false, + "test_plan_number": "3" + }, + { + "description": "TH reads CumulativeEnergyExported attribute", + "expectation": "Verify that the DUT response contains either null or an EnergyMeasurementStruct value.", + "is_commissioning": false, + "test_plan_number": "4" + }, + { + "description": "TH reads PeriodicEnergyImported attribute", + "expectation": "Verify that the DUT response contains either null or an EnergyMeasurementStruct value.", + "is_commissioning": false, + "test_plan_number": "5" + }, + { + "description": "TH reads PeriodicEnergyExported attribute", + "expectation": "Verify that the DUT response contains either null or an EnergyMeasurementStruct value.", + "is_commissioning": false, + "test_plan_number": "6" + }, + { + "description": "TH reads CumulativeEnergyReset attribute", + "expectation": "Verify that the DUT response contains either null or an CumulativeEnergyResetStruct value.", + "is_commissioning": false, + "test_plan_number": "7" + } + ] + }, + { + "class_name": "TC_EEM_2_2", + "desc": "5.1.3. [TC-EEM-2.2] Optional cumulative imported energy attributes with DUT as Server", + "function": "test_TC_EEM_2_2", + "path": "sdk/TC_EEM_2_2", + "pics": [ + "EEM.S", + "EEM.S.F02", + "EEM.S.F00" + ], + "steps": [ + { + "description": "Commissioning, already done", + "expectation": "", + "is_commissioning": true, + "test_plan_number": "1" + }, + { + "description": "TH reads TestEventTriggersEnabled attribute from General Diagnostics Cluster", + "expectation": "Verify that TestEventTriggersEnabled attribute has a value of 1 (True)", + "is_commissioning": false, + "test_plan_number": "2" + }, + { + "description": "TH sends TestEventTrigger command to General Diagnostics Cluster on Endpoint 0 with EnableKey field set to PIXIT.EEM.TEST_EVENT_TRIGGER_KEY and EventTrigger field set to PIXIT.EEM.TEST_EVENT_TRIGGER for Start Fake Load Test 1kW Event", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "3" + }, + { + "description": "Wait 3 seconds", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "4" + }, + { + "description": "TH reads from the DUT the CumulativeEnergyImported attribute", + "expectation": "Verify the read is successful and note the value read.", + "is_commissioning": false, + "test_plan_number": "4a" + }, + { + "description": "Wait 3 seconds", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "5" + }, + { + "description": "TH reads from the DUT the CumulativeEnergyImported attribute", + "expectation": "Verify the read is successful and that the value is greater than the value measured in step 4a.", + "is_commissioning": false, + "test_plan_number": "5a" + }, + { + "description": "TH sends TestEventTrigger command to General Diagnostics Cluster on Endpoint 0 with EnableKey field set to PIXIT.EEM.TEST_EVENT_TRIGGER_KEY and EventTrigger field set to PIXIT.EEM.TEST_EVENT_TRIGGER for Stop Fake Readings Test Event.", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "6" + } + ] + }, + { + "class_name": "TC_EEM_2_3", + "desc": "5.1.4. [TC-EEM-2.3] Optional cumulative exported energy attributes with DUT as Server", + "function": "test_TC_EEM_2_3", + "path": "sdk/TC_EEM_2_3", + "pics": [ + "EEM.S", + "EEM.S.F02", + "EEM.S.F01" + ], + "steps": [ + { + "description": "Commissioning, already done", + "expectation": "", + "is_commissioning": true, + "test_plan_number": "1" + }, + { + "description": "TH reads TestEventTriggersEnabled attribute from General Diagnostics Cluster", + "expectation": "Verify that TestEventTriggersEnabled attribute has a value of 1 (True)", + "is_commissioning": false, + "test_plan_number": "2" + }, + { + "description": "TH sends TestEventTrigger command to General Diagnostics Cluster on Endpoint 0 with EnableKey field set to PIXIT.EEM.TEST_EVENT_TRIGGER_KEY and EventTrigger field set to PIXIT.EEM.TEST_EVENT_TRIGGER for Start Fake Generator Test 3kW Event", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "3" + }, + { + "description": "Wait 6 seconds", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "4" + }, + { + "description": "TH reads from the DUT the CumulativeEnergyExported attribute", + "expectation": "Verify the read is successful and note the value read.", + "is_commissioning": false, + "test_plan_number": "4a" + }, + { + "description": "Wait 6 seconds", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "5" + }, + { + "description": "TH reads from the DUT the CumulativeEnergyExported attribute", + "expectation": "Verify the read is successful and that the value is greater than the value measured in step 4a.", + "is_commissioning": false, + "test_plan_number": "5a" + }, + { + "description": "TH sends TestEventTrigger command to General Diagnostics Cluster on Endpoint 0 with EnableKey field set to PIXIT.EEM.TEST_EVENT_TRIGGER_KEY and EventTrigger field set to PIXIT.EEM.TEST_EVENT_TRIGGER for Stop Fake Readings Test Event.", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "6" + } + ] + }, + { + "class_name": "TC_EEM_2_4", + "desc": "5.1.5. [TC-EEM-2.4] Optional periodic imported energy attributes with DUT as Server", + "function": "test_TC_EEM_2_4", + "path": "sdk/TC_EEM_2_4", + "pics": [ + "EEM.S", + "EEM.S.F03", + "EEM.S.F00" + ], + "steps": [ + { + "description": "Commissioning, already done", + "expectation": "", + "is_commissioning": true, + "test_plan_number": "1" + }, + { + "description": "TH reads TestEventTriggersEnabled attribute from General Diagnostics Cluster", + "expectation": "Verify that TestEventTriggersEnabled attribute has a value of 1 (True)", + "is_commissioning": false, + "test_plan_number": "2" + }, + { + "description": "TH sends TestEventTrigger command to General Diagnostics Cluster on Endpoint 0 with EnableKey field set to PIXIT.EEM.TEST_EVENT_TRIGGER_KEY and EventTrigger field set to PIXIT.EEM.TEST_EVENT_TRIGGER for Start Fake Load Test 1kW Event", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "3" + }, + { + "description": "Wait 3 seconds", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "4" + }, + { + "description": "TH reads from the DUT the PeriodicEnergyImported attribute", + "expectation": "Verify the read is successful and note the value read.", + "is_commissioning": false, + "test_plan_number": "4a" + }, + { + "description": "Wait 3 seconds", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "5" + }, + { + "description": "TH reads from the DUT the PeriodicEnergyImported attribute", + "expectation": "Verify the read is successful and that the value read has to be different from value measure in step 4a.", + "is_commissioning": false, + "test_plan_number": "5a" + }, + { + "description": "TH sends TestEventTrigger command to General Diagnostics Cluster on Endpoint 0 with EnableKey field set to PIXIT.EEM.TEST_EVENT_TRIGGER_KEY and EventTrigger field set to PIXIT.EEM.TEST_EVENT_TRIGGER for Stop Fake Readings Test Event.", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "6" + } + ] + }, + { + "class_name": "TC_EEM_2_5", + "desc": "5.1.6. [TC-EEM-2.5] Optional periodic exported energy attributes with DUT as Server", + "function": "test_TC_EEM_2_5", + "path": "sdk/TC_EEM_2_5", + "pics": [ + "EEM.S", + "EEM.S.F03", + "EEM.S.F01" + ], + "steps": [ + { + "description": "Commissioning, already done", + "expectation": "", + "is_commissioning": true, + "test_plan_number": "1" + }, + { + "description": "TH reads TestEventTriggersEnabled attribute from General Diagnostics Cluster", + "expectation": "Verify that TestEventTriggersEnabled attribute has a value of 1 (True)", + "is_commissioning": false, + "test_plan_number": "2" + }, + { + "description": "TH sends TestEventTrigger command to General Diagnostics Cluster on Endpoint 0 with EnableKey field set to PIXIT.EEM.TEST_EVENT_TRIGGER_KEY and EventTrigger field set to PIXIT.EEM.TEST_EVENT_TRIGGER for Start Fake Generator Test 3kW Event", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "3" + }, + { + "description": "Wait 6 seconds", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "4" + }, + { + "description": "TH reads from the DUT the PeriodicEnergyExported attribute", + "expectation": "Verify the read is successful and note the value read.", + "is_commissioning": false, + "test_plan_number": "4a" + }, + { + "description": "Wait 6 seconds", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "5" + }, + { + "description": "TH reads from the DUT the PeriodicEnergyExported attribute", + "expectation": "Verify the read is successful and that the value read has to be different from value measure in step 4a.", + "is_commissioning": false, + "test_plan_number": "5a" + }, + { + "description": "TH sends TestEventTrigger command to General Diagnostics Cluster on Endpoint 0 with EnableKey field set to PIXIT.EEM.TEST_EVENT_TRIGGER_KEY and EventTrigger field set to PIXIT.EEM.TEST_EVENT_TRIGGER for Stop Fake Readings Test Event.", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "6" + } + ] + }, + { + "class_name": "TC_EEVSE_2_2", + "desc": "5.1.3. [TC-EEVSE-2.2] Primary functionality with DUT as Server", + "function": "test_TC_EEVSE_2_2", + "path": "sdk/TC_EEVSE_2_2", + "pics": [ + "EEVSE.S" + ], + "steps": [ + { + "description": "Commission DUT to TH (can be skipped if done in a preceding test)", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "1" + }, + { + "description": "TH reads TestEventTriggersEnabled attribute from General Diagnostics Cluster", + "expectation": "Value has to be 1 (True)", + "is_commissioning": false, + "test_plan_number": "2" + }, + { + "description": "TH sends TestEventTrigger command to General Diagnostics Cluster on Endpoint 0 with EnableKey field set to PIXIT.EEVSE.TESTEVENT_TRIGGERKEY and EventTrigger field set to PIXIT.EEVSE.TESTEVENTTRIGGER for Basic Functionality Test Event", + "expectation": "Verify DUT responds w/ status SUCCESS(0x00)", + "is_commissioning": false, + "test_plan_number": "3" + }, + { + "description": "After a few seconds TH reads from the DUT the State", + "expectation": "Value has to be 0x00 (NotPluggedIn)", + "is_commissioning": false, + "test_plan_number": "3a" + }, + { + "description": "TH reads from the DUT the SupplyState", + "expectation": "Value has to be 0x00 (Disabled)", + "is_commissioning": false, + "test_plan_number": "3b" + }, + { + "description": "TH reads from the DUT the FaultState", + "expectation": "Value has to be 0x00 (NoError)", + "is_commissioning": false, + "test_plan_number": "3c" + }, + { + "description": "TH sends TestEventTrigger command to General Diagnostics Cluster on Endpoint 0 with EnableKey field set to PIXIT.EEVSE.TESTEVENT_TRIGGERKEY and EventTrigger field set to PIXIT.EEVSE.TESTEVENTTRIGGER for EV Plugged-in Test Event", + "expectation": "Verify DUT responds w/ status SUCCESS(0x00) and event EEVSE.S.E00(EVConnected) sent", + "is_commissioning": false, + "test_plan_number": "4" + }, + { + "description": "TH reads from the DUT the State", + "expectation": "Value has to be 0x01 (PluggedInNoDemand)", + "is_commissioning": false, + "test_plan_number": "4a" + }, + { + "description": "TH reads from the DUT the SessionID", + "expectation": "Value is noted for later", + "is_commissioning": false, + "test_plan_number": "4b" + }, + { + "description": "TH sends command EnableCharging with ChargingEnabledUntil=2 minutes in the future, minimumChargeCurrent=6000, maximumChargeCurrent=60000", + "expectation": "Verify DUT responds w/ status SUCCESS(0x00)", + "is_commissioning": false, + "test_plan_number": "5" + }, + { + "description": "TH sends TestEventTrigger command to General Diagnostics Cluster on Endpoint 0 with EnableKey field set to PIXIT.EEVSE.TESTEVENT_TRIGGERKEY and EventTrigger field set to PIXIT.EEVSE.TESTEVENTTRIGGER for EV Charge Demand Test Event", + "expectation": "Verify DUT responds w/ status SUCCESS(0x00) and event EEVSE.S.E02(EnergyTransferStarted) sent", + "is_commissioning": false, + "test_plan_number": "6" + }, + { + "description": "TH reads from the DUT the State", + "expectation": "Value has to be 0x03 (PluggedInCharging)", + "is_commissioning": false, + "test_plan_number": "6a" + }, + { + "description": "TH reads from the DUT the SupplyState", + "expectation": "Value has to be 0x01 (ChargingEnabled)", + "is_commissioning": false, + "test_plan_number": "6b" + }, + { + "description": "TH reads from the DUT the ChargingEnabledUntil", + "expectation": "Value has to be the ChargingEnabledUntil commanded value", + "is_commissioning": false, + "test_plan_number": "6c" + }, + { + "description": "TH reads from the DUT the MinimumChargeCurrent", + "expectation": "Value has to be the minimumChargeCurrent commanded value", + "is_commissioning": false, + "test_plan_number": "6d" + }, + { + "description": "TH reads from the DUT the MaximumChargeCurrent", + "expectation": "Value has to be the min(maximumChargeCurrent commanded value,CircuitCapacity)", + "is_commissioning": false, + "test_plan_number": "6e" + }, + { + "description": "Wait 2 minutes", + "expectation": "Event EEVSE.S.E03(EnergyTransferStopped) sent with reason EvseStopped", + "is_commissioning": false, + "test_plan_number": "7" + }, + { + "description": "TH reads from the DUT the State", + "expectation": "Value has to be 0x02 (PluggedInDemand)", + "is_commissioning": false, + "test_plan_number": "7a" + }, + { + "description": "TH reads from the DUT the SupplyState", + "expectation": "Value has to be 0x00 (Disabled)", + "is_commissioning": false, + "test_plan_number": "7b" + }, + { + "description": "TH sends command EnableCharging with ChargingEnabledUntil=null, minimumChargeCurrent=6000, maximumChargeCurrent=12000", + "expectation": "Verify DUT responds w/ status SUCCESS(0x00) and Event EEVSE.S.E02(EnergyTransferStarted) sent", + "is_commissioning": false, + "test_plan_number": "8" + }, + { + "description": "TH reads from the DUT the State", + "expectation": "Value has to be 0x03 (PluggedInCharging)", + "is_commissioning": false, + "test_plan_number": "8a" + }, + { + "description": "TH reads from the DUT the SupplyState", + "expectation": "Value has to be 0x01 (ChargingEnabled)", + "is_commissioning": false, + "test_plan_number": "8b" + }, + { + "description": "TH reads from the DUT the ChargingEnabledUntil", + "expectation": "Value has to be the ChargingEnabledUntil commanded value", + "is_commissioning": false, + "test_plan_number": "8c" + }, + { + "description": "TH reads from the DUT the MinimumChargeCurrent", + "expectation": "Value has to be the minimumChargeCurrent commanded value", + "is_commissioning": false, + "test_plan_number": "8d" + }, + { + "description": "TH reads from the DUT the MaximumChargeCurrent", + "expectation": "Value has to be the min(maximumChargeCurrent commanded value,CircuitCapacity)", + "is_commissioning": false, + "test_plan_number": "8e" + }, + { + "description": "If the optional attribute is supported, TH writes to the DUT the UserMaximumChargeCurrent=6000", + "expectation": "Charging rate reduced to 6A", + "is_commissioning": false, + "test_plan_number": "9" + }, + { + "description": "After a few seconds TH reads from the DUT the MaximumChargeCurrent", + "expectation": "Value has to be the configured UserMaximumChargeCurrent value", + "is_commissioning": false, + "test_plan_number": "9a" + }, + { + "description": "TH sends TestEventTrigger command to General Diagnostics Cluster on Endpoint 0 with EnableKey field set to PIXIT.EEVSE.TESTEVENT_TRIGGERKEY and EventTrigger field set to PIXIT.EEVSE.TESTEVENTTRIGGER for EV Charge Demand Test Event Clear", + "expectation": "Verify DUT responds w/ status SUCCESS(0x00) and event EEVSE.S.E03(EnergyTransferStopped) sent with reason EvStopped", + "is_commissioning": false, + "test_plan_number": "10" + }, + { + "description": "TH reads from the DUT the State", + "expectation": "Value has to be 0x01 (PluggedInNoDemand)", + "is_commissioning": false, + "test_plan_number": "10a" + }, + { + "description": "TH sends TestEventTrigger command to General Diagnostics Cluster on Endpoint 0 with EnableKey field set to PIXIT.EEVSE.TESTEVENT_TRIGGERKEY and EventTrigger field set to PIXIT.EEVSE.TESTEVENTTRIGGER for EV Charge Demand Test Event", + "expectation": "Verify DUT responds w/ status SUCCESS(0x00) and event EEVSE.S.E02(EnergyTransferStarted) sent", + "is_commissioning": false, + "test_plan_number": "11" + }, + { + "description": "TH reads from the DUT the State", + "expectation": "Value has to be 0x03 (PluggedInCharging)", + "is_commissioning": false, + "test_plan_number": "11a" + }, + { + "description": "TH sends TestEventTrigger command to General Diagnostics Cluster on Endpoint 0 with EnableKey field set to PIXIT.EEVSE.TESTEVENT_TRIGGERKEY and EventTrigger field set to PIXIT.EEVSE.TESTEVENTTRIGGER for EV Charge Demand Test Event Clear", + "expectation": "Verify DUT responds w/ status SUCCESS(0x00) and event EEVSE.S.E03(EnergyTransferStopped) sent with reason EvStopped", + "is_commissioning": false, + "test_plan_number": "12" + }, + { + "description": "TH reads from the DUT the State", + "expectation": "Value has to be 0x01 (PluggedInNoDemand)", + "is_commissioning": false, + "test_plan_number": "12a" + }, + { + "description": "TH sends TestEventTrigger command to General Diagnostics Cluster on Endpoint 0 with EnableKey field set to PIXIT.EEVSE.TESTEVENT_TRIGGERKEY and EventTrigger field set to PIXIT.EEVSE.TESTEVENTTRIGGER for EV Plugged-in Test Event Clear", + "expectation": "Verify DUT responds w/ status SUCCESS(0x00) and event EEVSE.S.E01(EVNotDetected) sent", + "is_commissioning": false, + "test_plan_number": "13" + }, + { + "description": "TH reads from the DUT the State", + "expectation": "Value has to be 0x00 (NotPluggedIn)", + "is_commissioning": false, + "test_plan_number": "13a" + }, + { + "description": "TH reads from the DUT the SupplyState", + "expectation": "Value has to be 0x01 (ChargingEnabled)", + "is_commissioning": false, + "test_plan_number": "13b" + }, + { + "description": "TH reads from the DUT the SessionID", + "expectation": "Value has to be the same value noted in 4b", + "is_commissioning": false, + "test_plan_number": "13c" + }, + { + "description": "TH reads from the DUT the SessionDuration", + "expectation": "Value has to be greater than 120 (and match the time taken for the tests from step 4 to step 13)", + "is_commissioning": false, + "test_plan_number": "13d" + }, + { + "description": "TH sends TestEventTrigger command to General Diagnostics Cluster on Endpoint 0 with EnableKey field set to PIXIT.EEVSE.TESTEVENT_TRIGGERKEY and EventTrigger field set to PIXIT.EEVSE.TESTEVENTTRIGGER for EV Plugged-in Test Event", + "expectation": "Verify DUT responds w/ status SUCCESS(0x00) and event EEVSE.S.E00(EVConnected) sent", + "is_commissioning": false, + "test_plan_number": "14" + }, + { + "description": "TH sends TestEventTrigger command to General Diagnostics Cluster on Endpoint 0 with EnableKey field set to PIXIT.EEVSE.TESTEVENT_TRIGGERKEY and EventTrigger field set to PIXIT.EEVSE.TESTEVENTTRIGGER for EV Charge Demand Test Event", + "expectation": "Verify DUT responds w/ status SUCCESS(0x00) and event EEVSE.S.E02(EnergyTransferStarted) sent", + "is_commissioning": false, + "test_plan_number": "14a" + }, + { + "description": "TH reads from the DUT the SessionID", + "expectation": "Value has to be 1 more than the value noted in 4b", + "is_commissioning": false, + "test_plan_number": "14b" + }, + { + "description": "TH sends command Disable", + "expectation": "Verify DUT responds w/ status SUCCESS(0x00) and Event EEVSE.S.E03(EnergyTransferStopped) sent with reason EvseStopped", + "is_commissioning": false, + "test_plan_number": "15" + }, + { + "description": "TH reads from the DUT the SupplyState", + "expectation": "Value has to be 0x00 (Disabled)", + "is_commissioning": false, + "test_plan_number": "15a" + }, + { + "description": "TH sends TestEventTrigger command to General Diagnostics Cluster on Endpoint 0 with EnableKey field set to PIXIT.EEVSE.TESTEVENT_TRIGGERKEY and EventTrigger field set to PIXIT.EEVSE.TESTEVENTTRIGGER for EV Charge Demand Test Event Clear", + "expectation": "Verify DUT responds w/ status SUCCESS(0x00)", + "is_commissioning": false, + "test_plan_number": "16" + }, + { + "description": "TH sends TestEventTrigger command to General Diagnostics Cluster on Endpoint 0 with EnableKey field set to PIXIT.EEVSE.TESTEVENT_TRIGGERKEY and EventTrigger field set to PIXIT.EEVSE.TESTEVENTTRIGGER for EV Plugged-in Test Event Clear", + "expectation": "Verify DUT responds w/ status SUCCESS(0x00) and event EEVSE.S.E01(EVNotDetected) sent", + "is_commissioning": false, + "test_plan_number": "17" + }, + { + "description": "TH sends TestEventTrigger command to General Diagnostics Cluster on Endpoint 0 with EnableKey field set to PIXIT.EEVSE.TESTEVENT_TRIGGERKEY and EventTrigger field set to PIXIT.EEVSE.TESTEVENTTRIGGER for Basic Functionality Test Event Clear", + "expectation": "Verify DUT responds w/ status SUCCESS(0x00)", + "is_commissioning": false, + "test_plan_number": "18" + } + ] + }, + { + "class_name": "TC_EEVSE_2_3", + "desc": "5.1.4. [TC-EEVSE-2.3] Optional ChargingPreferences feature functionality with DUT as Server\nThis test case verifies the primary functionality of the Energy EVSE cluster server with the optional ChargingPreferences feature supported.", + "function": "test_TC_EEVSE_2_3", + "path": "sdk/TC_EEVSE_2_3", + "pics": [ + "EEVSE.S", + "EEVSE.S.F00" + ], + "steps": [ + { + "description": "Commission DUT to TH (can be skipped if done in a preceding test)", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "1" + }, + { + "description": "TH reads TestEventTriggersEnabled attribute from General Diagnostics Cluster", + "expectation": "Value has to be 1 (True)", + "is_commissioning": false, + "test_plan_number": "2" + }, + { + "description": "TH sends TestEventTrigger command to General Diagnostics Cluster on Endpoint 0 with EnableKey field set to PIXIT.EEVSE.TESTEVENT_TRIGGERKEY and EventTrigger field set to PIXIT.EEVSE.TESTEVENTTRIGGER for Basic Functionality Test Event", + "expectation": "Verify DUT responds w/ status SUCCESS(0x00)", + "is_commissioning": false, + "test_plan_number": "3" + }, + { + "description": "TH sends TestEventTrigger command to General Diagnostics Cluster on Endpoint 0 with EnableKey field set to PIXIT.EEVSE.TESTEVENT_TRIGGERKEY and EventTrigger field set to PIXIT.EEVSE.TESTEVENTTRIGGER for EVSE TimeOfUse Mode Test Event", + "expectation": "Verify DUT responds w/ status SUCCESS(0x00)", + "is_commissioning": false, + "test_plan_number": "4" + }, + { + "description": "TH sends TestEventTrigger command to General Diagnostics Cluster on Endpoint 0 with EnableKey field set to PIXIT.EEVSE.TESTEVENT_TRIGGERKEY and EventTrigger field set to PIXIT.EEVSE.TESTEVENTTRIGGER for EV Plugged-in Test Event", + "expectation": "Verify DUT responds w/ status SUCCESS(0x00) and event EEVSE.S.E00(EVConnected) sent", + "is_commissioning": false, + "test_plan_number": "5" + }, + { + "description": "TH sends command ClearTargets", + "expectation": "Verify DUT responds w/ status SUCCESS(0x00)", + "is_commissioning": false, + "test_plan_number": "6" + }, + { + "description": "TH reads from the DUT the NextChargeStartTime", + "expectation": "Value has to be null.", + "is_commissioning": false, + "test_plan_number": "6a" + }, + { + "description": "TH reads from the DUT the NextChargeTargetTime", + "expectation": "Value has to be null.", + "is_commissioning": false, + "test_plan_number": "6b" + }, + { + "description": "TH reads from the DUT the NextChargeRequiredEnergy", + "expectation": "Value has to be null.", + "is_commissioning": false, + "test_plan_number": "6c" + }, + { + "description": "TH reads from the DUT the NextChargeTargetSoC", + "expectation": "Value has to be null.", + "is_commissioning": false, + "test_plan_number": "6d" + }, + { + "description": "TH sends command GetTargets", + "expectation": "Response EEVSE.S.C00.Tx(GetTargetsResponse) sent with no targets defined.", + "is_commissioning": false, + "test_plan_number": "7" + }, + { + "description": "TH sends command SetTargets with DayOfTheWeekforSequence=0x7F (i.e. having all days set) and a single ChargingTargets={TargetTime=1439, TargetSoC=null, AddedEnergy=25000000}", + "expectation": "Verify DUT responds w/ status SUCCESS(0x00)", + "is_commissioning": false, + "test_plan_number": "8" + }, + { + "description": "TH reads from the DUT the NextChargeStartTime", + "expectation": "Value has to be null.", + "is_commissioning": false, + "test_plan_number": "8a" + }, + { + "description": "TH reads from the DUT the NextChargeTargetTime", + "expectation": "Value has to be null.", + "is_commissioning": false, + "test_plan_number": "8b" + }, + { + "description": "TH reads from the DUT the NextChargeRequiredEnergy", + "expectation": "Value has to be null.", + "is_commissioning": false, + "test_plan_number": "8c" + }, + { + "description": "TH reads from the DUT the NextChargeTargetSoC", + "expectation": "Value has to be null.", + "is_commissioning": false, + "test_plan_number": "8d" + }, + { + "description": "TH sends command EnableCharging with ChargingEnabledUntil=null, minimumChargeCurrent=6000, maximumChargeCurrent=60000", + "expectation": "Verify DUT responds w/ status SUCCESS(0x00)", + "is_commissioning": false, + "test_plan_number": "9" + }, + { + "description": "TH reads from the DUT the NextChargeStartTime", + "expectation": "Value has to be before the next TargetTime above.", + "is_commissioning": false, + "test_plan_number": "9a" + }, + { + "description": "TH reads from the DUT the NextChargeTargetTime", + "expectation": "Value has to be TargetTime above.", + "is_commissioning": false, + "test_plan_number": "9b" + }, + { + "description": "TH reads from the DUT the NextChargeRequiredEnergy", + "expectation": "Value has to be AddedEnergy above.", + "is_commissioning": false, + "test_plan_number": "9c" + }, + { + "description": "TH reads from the DUT the NextChargeTargetSoC", + "expectation": "Value has to be null.", + "is_commissioning": false, + "test_plan_number": "9d" + }, + { + "description": "TH sends command GetTargets", + "expectation": "Response EEVSE.S.C00.Tx(GetTargetsResponse) sent with targets equivalent to the above (Note 1).", + "is_commissioning": false, + "test_plan_number": "10" + }, + { + "description": "TH sends command SetTargets with DayOfTheWeekforSequence=0x7F (i.e. having all days set) and a single ChargingTargets={TargetTime=1, TargetSoC=100, AddedEnergy=null}", + "expectation": "Verify DUT responds w/ status SUCCESS(0x00)", + "is_commissioning": false, + "test_plan_number": "11" + }, + { + "description": "TH reads from the DUT the NextChargeStartTime", + "expectation": "Value has to be before the next TargetTime above.", + "is_commissioning": false, + "test_plan_number": "11a" + }, + { + "description": "TH reads from the DUT the NextChargeTargetTime", + "expectation": "Value has to be TargetTime above.", + "is_commissioning": false, + "test_plan_number": "11b" + }, + { + "description": "TH reads from the DUT the NextChargeRequiredEnergy", + "expectation": "Value has to be null.", + "is_commissioning": false, + "test_plan_number": "11c" + }, + { + "description": "TH reads from the DUT the NextChargeTargetSoC", + "expectation": "Value has to be 100.", + "is_commissioning": false, + "test_plan_number": "11d" + }, + { + "description": "TH sends command GetTargets", + "expectation": "Response EEVSE.S.C00.Tx(GetTargetsResponse) sent with targets equivalent to the above (Note 1).", + "is_commissioning": false, + "test_plan_number": "12" + }, + { + "description": "TH sends command SetTargets with DayOfTheWeekforSequence=0x40 (i.e. having Saturday set) and 10 ChargingTargets with TargetTimes=60,180,300,420,540,660,780,900,1020,1140 and all with TargetSoC=null, AddedEnergy=2500000", + "expectation": "Verify DUT responds w/ status SUCCESS(0x00)", + "is_commissioning": false, + "test_plan_number": "13" + }, + { + "description": "TH sends command SetTargets with DayOfTheWeekforSequence=0x01 (i.e. having Sunday set) and no ChargingTargets", + "expectation": "Verify DUT responds w/ status SUCCESS(0x00)", + "is_commissioning": false, + "test_plan_number": "14" + }, + { + "description": "TH sends command GetTargets", + "expectation": "Response EEVSE.S.C00.Tx(GetTargetsResponse) sent with 1 target for each day Monday to Friday equivalent to step 9 (Note 1), 10 targets for Saturday as step 11, and no targets for Sunday.", + "is_commissioning": false, + "test_plan_number": "15" + }, + { + "description": "TH sends command ClearTargets", + "expectation": "Verify DUT responds w/ status SUCCESS(0x00)", + "is_commissioning": false, + "test_plan_number": "16" + }, + { + "description": "TH reads from the DUT the NextChargeStartTime", + "expectation": "Value has to be null.", + "is_commissioning": false, + "test_plan_number": "16a" + }, + { + "description": "TH reads from the DUT the NextChargeTargetTime", + "expectation": "Value has to be null.", + "is_commissioning": false, + "test_plan_number": "16b" + }, + { + "description": "TH reads from the DUT the NextChargeRequiredEnergy", + "expectation": "Value has to be null.", + "is_commissioning": false, + "test_plan_number": "16c" + }, + { + "description": "TH reads from the DUT the NextChargeTargetSoC", + "expectation": "Value has to be null.", + "is_commissioning": false, + "test_plan_number": "16d" + }, + { + "description": "TH sends command GetTargets", + "expectation": "Response EEVSE.S.C00.Tx(GetTargetsResponse) sent with no targets defined.", + "is_commissioning": false, + "test_plan_number": "17" + }, + { + "description": "TH sends command SetTargets with two identical ChargingTargetSchedules={DayOfTheWeekforSequence=0x01,ChargingTarget[0]={TargetTime=60,TargetSoC=null,AddedEnergy=2500000}}", + "expectation": "Verify DUT responds w/ status CONSTRAINT_ERROR(0x87)", + "is_commissioning": false, + "test_plan_number": "18" + }, + { + "description": "TH sends command SetTargets with DayOfTheWeekforSequence=0x40 and 11 ChargingTargets with TargetTimes=60,180,300,420,540,660,780,900,1020,1140,1260 and all with TargetSoC=null, AddedEnergy=2500000", + "expectation": "Verify DUT responds w/ status RESOURCE_EXHAUSTED(0x89)", + "is_commissioning": false, + "test_plan_number": "19" + }, + { + "description": "TH sends TestEventTrigger command to General Diagnostics Cluster on Endpoint 0 with EnableKey field set to PIXIT.EEVSE.TESTEVENT_TRIGGERKEY and EventTrigger field set to PIXIT.EEVSE.TESTEVENTTRIGGER for EV Plugged-in Test Event Clear", + "expectation": "Verify DUT responds w/ status SUCCESS(0x00) and event EEVSE.S.E01(EVNotDetected) sent", + "is_commissioning": false, + "test_plan_number": "20" + }, + { + "description": "TH sends TestEventTrigger command to General Diagnostics Cluster on Endpoint 0 with EnableKey field set to PIXIT.EEVSE.TESTEVENT_TRIGGERKEY and EventTrigger field set to PIXIT.EEVSE.TESTEVENTTRIGGER for Basic Functionality Test Event Clear", + "expectation": "Verify DUT responds w/ status SUCCESS(0x00)", + "is_commissioning": false, + "test_plan_number": "21" + }, + { + "description": "TH sends TestEventTrigger command to General Diagnostics Cluster on Endpoint 0 with EnableKey field set to PIXIT.EEVSE.TESTEVENT_TRIGGERKEY and EventTrigger field set to PIXIT.EEVSE.TESTEVENTTRIGGER for EVSE TimeOfUse Mode Test Event Clear", + "expectation": "Verify DUT responds w/ status SUCCESS(0x00)", + "is_commissioning": false, + "test_plan_number": "22" + } + ] + }, + { + "class_name": "TC_EEVSE_2_4", + "desc": "5.1.5. [TC-EEVSE-2.4] Fault test functionality with DUT as Server", + "function": "test_TC_EEVSE_2_4", + "path": "sdk/TC_EEVSE_2_4", + "pics": [ + "EEVSE.S" + ], + "steps": [ + { + "description": "Commission DUT to TH (can be skipped if done in a preceding test)", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "1" + }, + { + "description": "TH reads TestEventTriggersEnabled attribute from General Diagnostics Cluster", + "expectation": "Value has to be 1 (True)", + "is_commissioning": false, + "test_plan_number": "2" + }, + { + "description": "TH sends TestEventTrigger command to General Diagnostics Cluster on Endpoint 0 with EnableKey field set to PIXIT.EEVSE.TESTEVENT_TRIGGERKEY and EventTrigger field set to PIXIT.EEVSE.TESTEVENTTRIGGER for Basic Functionality Test Event", + "expectation": "Verify DUT responds w/ status SUCCESS(0x00)", + "is_commissioning": false, + "test_plan_number": "3" + }, + { + "description": "After a few seconds TH reads from the DUT the State", + "expectation": "Value has to be 0x00 (NotPluggedIn)", + "is_commissioning": false, + "test_plan_number": "3a" + }, + { + "description": "TH reads from the DUT the SupplyState", + "expectation": "Value has to be 0x00 (Disabled)", + "is_commissioning": false, + "test_plan_number": "3b" + }, + { + "description": "TH reads from the DUT the FaultState", + "expectation": "Value has to be 0x00 (NoError)", + "is_commissioning": false, + "test_plan_number": "3c" + }, + { + "description": "TH sends TestEventTrigger command to General Diagnostics Cluster on Endpoint 0 with EnableKey field set to PIXIT.EEVSE.TESTEVENT_TRIGGERKEY and EventTrigger field set to PIXIT.EEVSE.TESTEVENTTRIGGER for EV Plugged-in Test Event", + "expectation": "Verify DUT responds w/ status SUCCESS(0x00) and event EEVSE.S.E00(EVConnected) sent", + "is_commissioning": false, + "test_plan_number": "4" + }, + { + "description": "TH reads from the DUT the State", + "expectation": "Value has to be 0x01 (PluggedInNoDemand)", + "is_commissioning": false, + "test_plan_number": "4a" + }, + { + "description": "TH reads from the DUT the SessionID", + "expectation": "Value is noted for later", + "is_commissioning": false, + "test_plan_number": "4b" + }, + { + "description": "TH sends command EnableCharging with ChargingEnabledUntil=null, minimumChargeCurrent=6000, maximumChargeCurrent=60000", + "expectation": "Verify DUT responds w/ status SUCCESS(0x00)", + "is_commissioning": false, + "test_plan_number": "5" + }, + { + "description": "TH sends TestEventTrigger command to General Diagnostics Cluster on Endpoint 0 with EnableKey field set to PIXIT.EEVSE.TESTEVENT_TRIGGERKEY and EventTrigger field set to PIXIT.EEVSE.TESTEVENTTRIGGER for EV Charge Demand Test Event", + "expectation": "Verify DUT responds w/ status SUCCESS(0x00) and event EEVSE.S.E02(EnergyTransferStarted) sent", + "is_commissioning": false, + "test_plan_number": "6" + }, + { + "description": "TH reads from the DUT the State", + "expectation": "Value has to be 0x03 (PluggedInCharging)", + "is_commissioning": false, + "test_plan_number": "6a" + }, + { + "description": "TH reads from the DUT the SupplyState", + "expectation": "Value has to be 0x01 (ChargingEnabled)", + "is_commissioning": false, + "test_plan_number": "6b" + }, + { + "description": "TH sends TestEventTrigger command to General Diagnostics Cluster on Endpoint 0 with EnableKey field set to PIXIT.EEVSE.TESTEVENT_TRIGGERKEY and EventTrigger field set to PIXIT.EEVSE.TESTEVENTTRIGGER for EVSE Ground Fault Test Event", + "expectation": "Verify DUT responds w/ status SUCCESS(0x00) and event EEVSE.S.E04(Fault) sent with SessionID matching value in step 4b, FaultStatePreviousFaultState = 0x00 (NoError), FaultStateCurrentFaultState = 0x07 (GroundFault)", + "is_commissioning": false, + "test_plan_number": "7" + }, + { + "description": "TH reads from the DUT the State", + "expectation": "Value has to be 0x06 (Fault)", + "is_commissioning": false, + "test_plan_number": "7a" + }, + { + "description": "TH reads from the DUT the SupplyState", + "expectation": "Value has to be 0x04 (DisabledError)", + "is_commissioning": false, + "test_plan_number": "7b" + }, + { + "description": "TH sends TestEventTrigger command to General Diagnostics Cluster on Endpoint 0 with EnableKey field set to PIXIT.EEVSE.TESTEVENT_TRIGGERKEY and EventTrigger field set to PIXIT.EEVSE.TESTEVENTTRIGGER for EVSE Over Temperature Fault Test Event", + "expectation": "Verify DUT responds w/ status SUCCESS(0x00) and event EEVSE.S.E04(Fault) sent with SessionID matching value in step 4b, FaultStatePreviousFaultState = 0x07 (GroundFault), FaultStateCurrentFaultState = 0x0F (OverTemperature)", + "is_commissioning": false, + "test_plan_number": "8" + }, + { + "description": "TH reads from the DUT the State", + "expectation": "Value has to be 0x06 (Fault)", + "is_commissioning": false, + "test_plan_number": "8a" + }, + { + "description": "TH reads from the DUT the SupplyState", + "expectation": "Value has to be 0x04 (DisabledError)", + "is_commissioning": false, + "test_plan_number": "8b" + }, + { + "description": "TH sends TestEventTrigger command to General Diagnostics Cluster on Endpoint 0 with EnableKey field set to PIXIT.EEVSE.TESTEVENT_TRIGGERKEY and EventTrigger field set to PIXIT.EEVSE.TESTEVENTTRIGGER for EVSE Fault Test Event Clear", + "expectation": "Verify DUT responds w/ status SUCCESS(0x00) and event EEVSE.S.E04(Fault) sent with SessionID matching value in step 4b, FaultStatePreviousFaultState = 0x0F (OverTemperature), FaultStateCurrentFaultState = 0x00 (NoError)", + "is_commissioning": false, + "test_plan_number": "9" + }, + { + "description": "TH reads from the DUT the State", + "expectation": "Value has to be 0x03 (PluggedInCharging)", + "is_commissioning": false, + "test_plan_number": "9a" + }, + { + "description": "TH reads from the DUT the SupplyState", + "expectation": "Value has to be 0x01 (ChargingEnabled)", + "is_commissioning": false, + "test_plan_number": "9b" + }, + { + "description": "TH sends TestEventTrigger command to General Diagnostics Cluster on Endpoint 0 with EnableKey field set to PIXIT.EEVSE.TESTEVENT_TRIGGERKEY and EventTrigger field set to PIXIT.EEVSE.TESTEVENTTRIGGER for EV Charge Demand Test Event Clear", + "expectation": "Verify DUT responds w/ status SUCCESS(0x00)", + "is_commissioning": false, + "test_plan_number": "10" + }, + { + "description": "TH sends TestEventTrigger command to General Diagnostics Cluster on Endpoint 0 with EnableKey field set to PIXIT.EEVSE.TESTEVENT_TRIGGERKEY and EventTrigger field set to PIXIT.EEVSE.TESTEVENTTRIGGER for EV Plugged-in Test Event Clear", + "expectation": "Verify DUT responds w/ status SUCCESS(0x00) and event EEVSE.S.E01(EVNotDetected) sent", + "is_commissioning": false, + "test_plan_number": "11" + }, + { + "description": "TH sends TestEventTrigger command to General Diagnostics Cluster on Endpoint 0 with EnableKey field set to PIXIT.EEVSE.TESTEVENT_TRIGGERKEY and EventTrigger field set to PIXIT.EEVSE.TESTEVENTTRIGGER for Basic Functionality Test Event Clear", + "expectation": "Verify DUT responds w/ status SUCCESS(0x00)", + "is_commissioning": false, + "test_plan_number": "12" + } + ] + }, + { + "class_name": "TC_EEVSE_2_5", + "desc": "5.1.6. [TC-EEVSE-2.5] Optional diagnostics functionality with DUT as Server", + "function": "test_TC_EEVSE_2_5", + "path": "sdk/TC_EEVSE_2_5", + "pics": [ + "EEVSE.S", + "EEVSE.S.C04.Rsp" + ], + "steps": [ + { + "description": "Commission DUT to TH (can be skipped if done in a preceding test)", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "1" + }, + { + "description": "TH reads TestEventTriggersEnabled attribute from General Diagnostics Cluster", + "expectation": "Value has to be 1 (True)", + "is_commissioning": false, + "test_plan_number": "2" + }, + { + "description": "TH sends TestEventTrigger command to General Diagnostics Cluster on Endpoint 0 with EnableKey field set to PIXIT.EEVSE.TESTEVENT_TRIGGERKEY and EventTrigger field set to PIXIT.EEVSE.TESTEVENTTRIGGER for Basic Functionality Test Event", + "expectation": "Verify DUT responds w/ status SUCCESS(0x00)", + "is_commissioning": false, + "test_plan_number": "3" + }, + { + "description": "TH reads from the DUT the State", + "expectation": "Value has to be 0x00 (NotPluggedIn)", + "is_commissioning": false, + "test_plan_number": "3a" + }, + { + "description": "TH reads from the DUT the SupplyState", + "expectation": "Value has to be 0x00 (Disabled)", + "is_commissioning": false, + "test_plan_number": "3b" + }, + { + "description": "TH reads from the DUT the FaultState", + "expectation": "Value has to be 0x00 (NoError)", + "is_commissioning": false, + "test_plan_number": "3c" + }, + { + "description": "TH sends command EnableCharging with ChargingEnabledUntil=null, minimumChargeCurrent=6000, maximumChargeCurrent=60000", + "expectation": "Verify DUT responds w/ status SUCCESS(0x00)", + "is_commissioning": false, + "test_plan_number": "4" + }, + { + "description": "TH reads from the DUT the State", + "expectation": "Value has to be 0x00 (NotPluggedIn)", + "is_commissioning": false, + "test_plan_number": "4a" + }, + { + "description": "TH reads from the DUT the SupplyState", + "expectation": "Value has to be 0x01 (ChargingEnabled)", + "is_commissioning": false, + "test_plan_number": "4b" + }, + { + "description": "TH sends command StartDiagnostics", + "expectation": "Verify DUT responds w/ status FAILURE(0x01)", + "is_commissioning": false, + "test_plan_number": "5" + }, + { + "description": "TH sends command Disable", + "expectation": "Verify DUT responds w/ status SUCCESS(0x00)", + "is_commissioning": false, + "test_plan_number": "6" + }, + { + "description": "TH reads from the DUT the State", + "expectation": "Value has to be 0x00 (NotPluggedIn)", + "is_commissioning": false, + "test_plan_number": "6a" + }, + { + "description": "TH reads from the DUT the SupplyState", + "expectation": "Value has to be 0x00 (Disabled)", + "is_commissioning": false, + "test_plan_number": "6b" + }, + { + "description": "TH sends command StartDiagnostics", + "expectation": "Verify DUT responds w/ status SUCCESS(0x00)", + "is_commissioning": false, + "test_plan_number": "7" + }, + { + "description": "TH reads from the DUT the SupplyState", + "expectation": "Value has to be 0x04 (DisabledDiagnostics)", + "is_commissioning": false, + "test_plan_number": "7a" + }, + { + "description": "TH sends command EnableCharging with ChargingEnabledUntil=null, minimumChargeCurrent=6000, maximumChargeCurrent=60000", + "expectation": "Verify DUT responds w/ status FAILURE(0x01)", + "is_commissioning": false, + "test_plan_number": "8" + }, + { + "description": "TH reads from the DUT the SupplyState", + "expectation": "Value has to be 0x04 (DisabledDiagnostics)", + "is_commissioning": false, + "test_plan_number": "8a" + }, + { + "description": "TH sends TestEventTrigger command to General Diagnostics Cluster on Endpoint 0 with EnableKey field set to PIXIT.EEVSE.TESTEVENT_TRIGGERKEY and EventTrigger field set to PIXIT.EEVSE.TESTEVENTTRIGGER for EVSE Diagnostics Complete Event", + "expectation": "Verify DUT responds w/ status SUCCESS(0x00)", + "is_commissioning": false, + "test_plan_number": "9" + }, + { + "description": "TH reads from the DUT the State", + "expectation": "Value has to be 0x00 (NotPluggedIn)", + "is_commissioning": false, + "test_plan_number": "9a" + }, + { + "description": "TH reads from the DUT the SupplyState", + "expectation": "Value has to be 0x00 (Disabled)", + "is_commissioning": false, + "test_plan_number": "9b" + }, + { + "description": "TH sends TestEventTrigger command to General Diagnostics Cluster on Endpoint 0 with EnableKey field set to PIXIT.EEVSE.TESTEVENT_TRIGGERKEY and EventTrigger field set to PIXIT.EEVSE.TESTEVENTTRIGGER for Basic Functionality Test Event Clear", + "expectation": "Verify DUT responds w/ status SUCCESS(0x00)", + "is_commissioning": false, + "test_plan_number": "10" + } + ] + }, + { + "class_name": "TC_EEVSE_2_6", + "desc": "5.1.6. [TC-EEVSE-2.6] Test Q quality functionality with DUT as Server", + "function": "test_TC_EEVSE_2_6", + "path": "sdk/TC_EEVSE_2_6", + "pics": [ + "EEVSE.S" + ], + "steps": [ + { + "description": "Commission DUT to TH (can be skipped if done in a preceding test)", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "1" + }, + { + "description": "TH reads from the DUT the FeatureMap", + "expectation": "Verify that the DUT response contains the FeatureMap attribute. Store the value as FeatureMap.", + "is_commissioning": false, + "test_plan_number": "2" + }, + { + "description": "Set up a subscription to all EnergyEVSE cluster events", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "3" + }, + { + "description": "TH reads TestEventTriggersEnabled attribute from General Diagnostics Cluster", + "expectation": "Value has to be 1 (True)", + "is_commissioning": false, + "test_plan_number": "4" + }, + { + "description": "Set up a subscription to the EnergyEVSE cluster, with MinIntervalFloor set to 0, MaxIntervalCeiling set to 10 and KeepSubscriptions set to True", + "expectation": "Subscription successfully established", + "is_commissioning": false, + "test_plan_number": "5" + }, + { + "description": "TH sends TestEventTrigger command to General Diagnostics Cluster on Endpoint 0 with EnableKey field set to PIXIT.EEVSE.TESTEVENT_TRIGGERKEY and EventTrigger field set to PIXIT.EEVSE.TESTEVENTTRIGGER for Basic Functionality Test Event", + "expectation": "Verify DUT responds w/ status SUCCESS(0x00)", + "is_commissioning": false, + "test_plan_number": "6" + }, + { + "description": "TH reads from the DUT the State", + "expectation": "Value has to be 0x00 (NotPluggedIn)", + "is_commissioning": false, + "test_plan_number": "6a" + }, + { + "description": "TH sends TestEventTrigger command to General Diagnostics Cluster on Endpoint 0 with EnableKey field set to PIXIT.EEVSE.TESTEVENT_TRIGGERKEY and EventTrigger field set to PIXIT.EEVSE.TESTEVENTTRIGGER for EV Plugged-in Test Event", + "expectation": "Verify DUT responds w/ status SUCCESS(0x00) and event EEVSE.S.E00(EVConnected) sent", + "is_commissioning": false, + "test_plan_number": "7" + }, + { + "description": "TH sends command EnableCharging with ChargingEnabledUntil=null, minimumChargeCurrent=6000, maximumChargeCurrent=12000", + "expectation": "Verify DUT responds w/ status SUCCESS(0x00)", + "is_commissioning": false, + "test_plan_number": "8" + }, + { + "description": "TH sends TestEventTrigger command to General Diagnostics Cluster on Endpoint 0 with EnableKey field set to PIXIT.EEVSE.TESTEVENT_TRIGGERKEY and EventTrigger field set to PIXIT.EEVSE.TESTEVENTTRIGGER for EV Charge Demand Test Event", + "expectation": "Verify DUT responds w/ status SUCCESS(0x00) and event EEVSE.S.E02(EnergyTransferStarted) sent", + "is_commissioning": false, + "test_plan_number": "9" + }, + { + "description": "TH reads from the DUT the State", + "expectation": "Value has to be 0x03 (PluggedInCharging)", + "is_commissioning": false, + "test_plan_number": "9a" + }, + { + "description": "Reset all accumulated report counts, then wait 12 seconds", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "10" + }, + { + "description": "TH counts all report transactions with an attribute report for the SessionID attribute", + "expectation": "TH verifies that numberOfReportsReceived = 0", + "is_commissioning": false, + "test_plan_number": "10a" + }, + { + "description": "TH counts all report transactions with an attribute report for the SessionDuration attribute", + "expectation": "TH verifies that numberOfReportsReceived <= 2", + "is_commissioning": false, + "test_plan_number": "10b" + }, + { + "description": "TH counts all report transactions with an attribute report for the SessionEnergyCharged attribute", + "expectation": "TH verifies that numberOfReportsReceived <= 2", + "is_commissioning": false, + "test_plan_number": "10c" + }, + { + "description": "TH counts all report transactions with an attribute report for the SessionEnergyDischarged attribute", + "expectation": "TH verifies that numberOfReportsReceived <= 2", + "is_commissioning": false, + "test_plan_number": "10d" + }, + { + "description": "Reset all accumulated report counts", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "11" + }, + { + "description": "TH sends command Disable", + "expectation": "Verify DUT responds w/ status SUCCESS(0x00) and Event EEVSE.S.E03(EnergyTransferStopped) sent with reason EvseStopped", + "is_commissioning": false, + "test_plan_number": "12" + }, + { + "description": "TH sends TestEventTrigger command to General Diagnostics Cluster on Endpoint 0 with EnableKey field set to PIXIT.EEVSE.TESTEVENT_TRIGGERKEY and EventTrigger field set to PIXIT.EEVSE.TESTEVENTTRIGGER for EV Charge Demand Test Event Clear", + "expectation": "Verify DUT responds w/ status SUCCESS(0x00)", + "is_commissioning": false, + "test_plan_number": "13" + }, + { + "description": "TH sends TestEventTrigger command to General Diagnostics Cluster on Endpoint 0 with EnableKey field set to PIXIT.EEVSE.TESTEVENT_TRIGGERKEY and EventTrigger field set to PIXIT.EEVSE.TESTEVENTTRIGGER for EV Plugged-in Test Event Clear", + "expectation": "Verify DUT responds w/ status SUCCESS(0x00) and event EEVSE.S.E01(EVNotDetected) sent", + "is_commissioning": false, + "test_plan_number": "14" + }, + { + "description": "Wait 5 seconds", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "15" + }, + { + "description": "TH counts all report transactions with an attribute report for the SessionID attribute", + "expectation": "TH verifies that numberOfReportsReceived = 0", + "is_commissioning": false, + "test_plan_number": "15a" + }, + { + "description": "TH counts all report transactions with an attribute report for the SessionDuration attribute", + "expectation": "TH verifies that numberOfReportsReceived >= 1", + "is_commissioning": false, + "test_plan_number": "15b" + }, + { + "description": "TH counts all report transactions with an attribute report for the SessionEnergyCharged attribute", + "expectation": "TH verifies that numberOfReportsReceived >= 1", + "is_commissioning": false, + "test_plan_number": "15c" + }, + { + "description": "If V2X feature is supported on the cluster, TH counts all report transactions with an attribute report for the SessionEnergyDischarged attribute", + "expectation": "TH verifies that numberOfReportsReceived >= 1", + "is_commissioning": false, + "test_plan_number": "15d" + }, + { + "description": "Reset all accumulated report counts", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "16" + }, + { + "description": "TH sends TestEventTrigger command to General Diagnostics Cluster on Endpoint 0 with EnableKey field set to PIXIT.EEVSE.TESTEVENT_TRIGGERKEY and EventTrigger field set to PIXIT.EEVSE.TESTEVENTTRIGGER for EV Plugged-in Test Event", + "expectation": "Verify DUT responds w/ status SUCCESS(0x00) and event EEVSE.S.E00(EVConnected) sent", + "is_commissioning": false, + "test_plan_number": "17" + }, + { + "description": "Wait 5 seconds", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "18" + }, + { + "description": "TH counts all report transactions with an attribute report for the SessionID attribute", + "expectation": "TH verifies that numberOfReportsReceived = 1", + "is_commissioning": false, + "test_plan_number": "18a" + }, + { + "description": "TH counts all report transactions with an attribute report for the SessionDuration attribute", + "expectation": "TH verifies that numberOfReportsReceived >= 1", + "is_commissioning": false, + "test_plan_number": "18b" + }, + { + "description": "TH counts all report transactions with an attribute report for the SessionEnergyCharged attribute", + "expectation": "TH verifies that numberOfReportsReceived >= 1", + "is_commissioning": false, + "test_plan_number": "18c" + }, + { + "description": "If V2X feature is supported on the cluster, TH counts all report transactions with an attribute report for the SessionEnergyDischarged attribute", + "expectation": "TH verifies that numberOfReportsReceived >= 1", + "is_commissioning": false, + "test_plan_number": "18d" + }, + { + "description": "TH sends TestEventTrigger command to General Diagnostics Cluster on Endpoint 0 with EnableKey field set to PIXIT.EEVSE.TESTEVENT_TRIGGERKEY and EventTrigger field set to PIXIT.EEVSE.TESTEVENTTRIGGER for EV Plugged-in Test Event Clear", + "expectation": "Verify DUT responds w/ status SUCCESS(0x00) and event EEVSE.S.E01(EVNotDetected) sent", + "is_commissioning": false, + "test_plan_number": "19" + }, + { + "description": "TH sends TestEventTrigger command to General Diagnostics Cluster on Endpoint 0 with EnableKey field set to PIXIT.EEVSE.TESTEVENT_TRIGGERKEY and EventTrigger field set to PIXIT.EEVSE.TESTEVENTTRIGGER for Basic Functionality Test Event Clear", + "expectation": "Verify DUT responds w/ status SUCCESS(0x00)", + "is_commissioning": false, + "test_plan_number": "20" + }, + { + "description": "Cancel the subscription to the Device Energy Management cluster", + "expectation": "The subscription is cancelled successfully", + "is_commissioning": false, + "test_plan_number": "21" + } + ] + }, + { + "class_name": "TC_EPM_2_1", + "desc": "5.1.2. [TC-EPM-2.1] Attributes with Server as DUT", + "function": "test_TC_EPM_2_1", + "path": "sdk/TC_EPM_2_1", + "pics": [ + "EPM.S" + ], + "steps": [ + { + "description": "Commissioning, already done", + "expectation": "", + "is_commissioning": true, + "test_plan_number": "1" + }, + { + "description": "TH reads PowerMode attribute", + "expectation": "Verify that the DUT response contains an enum8 value", + "is_commissioning": false, + "test_plan_number": "2" + }, + { + "description": "TH reads NumberOfMeasurementTypes attribute", + "expectation": "Verify that the DUT response contains an uint8 value.", + "is_commissioning": false, + "test_plan_number": "3" + }, + { + "description": "TH reads Accuracy attribute", + "expectation": "Verify that the DUT response contains a list of MeasurementAccuracyStruct entries ", + "is_commissioning": "Verify that the list has between 1 and NumberOfMeasurementTypes entries.", + "test_plan_number": "4" + }, + { + "description": "TH reads Ranges attribute", + "expectation": "Verify that the DUT response contains a list of MeasurementRangeStruct entries ", + "is_commissioning": "Verify that the list has between 0 and NumberOfMeasurementTypes entries.", + "test_plan_number": "5" + }, + { + "description": "TH reads Voltage attribute", + "expectation": "Verify that the DUT response contains either null or an int64 value. Value has to be between a range of -2^62 to 2^62.", + "is_commissioning": false, + "test_plan_number": "6" + }, + { + "description": "TH reads ActiveCurrent attribute", + "expectation": "Verify that the DUT response contains either null or an int64 value. Value has to be between a range of -2^62 to 2^62.", + "is_commissioning": false, + "test_plan_number": "7" + }, + { + "description": "TH reads ReactiveCurrent attribute", + "expectation": "Verify that the DUT response contains either null or an int64 value. Value has to be between a range of -2^62 to 2^62.", + "is_commissioning": false, + "test_plan_number": "8" + }, + { + "description": "TH reads ApparentCurrent attribute", + "expectation": "Verify that the DUT response contains either null or an int64 value. Value has to be between a range of 0 to 2^62.", + "is_commissioning": false, + "test_plan_number": "9" + }, + { + "description": "TH reads ActivePower attribute", + "expectation": "Verify that the DUT response contains either null or an int64 value. Value has to be between a range of -2^62 to 2^62.", + "is_commissioning": false, + "test_plan_number": "10" + }, + { + "description": "TH reads ReactivePower attribute", + "expectation": "Verify that the DUT response contains either null or an int64 value. Value has to be between a range of -2^62 to 2^62.", + "is_commissioning": false, + "test_plan_number": "11" + }, + { + "description": "TH reads ApparentPower attribute", + "expectation": "Verify that the DUT response contains either null or an int64 value. Value has to be between a range of -2^62 to 2^62.", + "is_commissioning": false, + "test_plan_number": "12" + }, + { + "description": "TH reads RMSVoltage attribute", + "expectation": "Verify that the DUT response contains either null or an int64 value. Value has to be between a range of -2^62 to 2^62.", + "is_commissioning": false, + "test_plan_number": "13" + }, + { + "description": "TH reads RMSCurrent attribute", + "expectation": "Verify that the DUT response contains either null or an int64 value. Value has to be between a range of -2^62 to 2^62.", + "is_commissioning": false, + "test_plan_number": "14" + }, + { + "description": "TH reads RMSPower attribute", + "expectation": "Verify that the DUT response contains either null or an int64 value. Value has to be between a range of -2^62 to 2^62.", + "is_commissioning": false, + "test_plan_number": "15" + }, + { + "description": "TH reads Frequency attribute", + "expectation": "Verify that the DUT response contains either null or an int64 value. Value has to be between a range of 0 to 1000000.", + "is_commissioning": false, + "test_plan_number": "16" + }, + { + "description": "TH reads HarmonicCurrents attribute", + "expectation": "Verify that the DUT response contains a list of HarmonicMeasurementStruct entries.", + "is_commissioning": false, + "test_plan_number": "17" + }, + { + "description": "TH reads HarmonicPhases attribute", + "expectation": "Verify that the DUT response contains a list of HarmonicMeasurementStruct entries.", + "is_commissioning": false, + "test_plan_number": "18" + }, + { + "description": "TH reads PowerFactor attribute", + "expectation": "Verify that the DUT response contains either null or an int64 value. Value has to be between a range of -10000 to 10000.", + "is_commissioning": false, + "test_plan_number": "19" + }, + { + "description": "TH reads NeutralCurrent attribute", + "expectation": "Verify that the DUT response contains either null or an int64 value. Value has to be between a range of -2^62 to 2^62.", + "is_commissioning": false, + "test_plan_number": "20" + } + ] + }, + { + "class_name": "TC_EPM_2_2", + "desc": "5.1.3. [TC-EPM-2.2] Primary functionality with DUT as Server", + "function": "test_TC_EPM_2_2", + "path": "sdk/TC_EPM_2_2", + "pics": [ + "EPM.S" + ], + "steps": [ + { + "description": "Commissioning, already done", + "expectation": "", + "is_commissioning": true, + "test_plan_number": "1" + }, + { + "description": "TH reads TestEventTriggersEnabled attribute from General Diagnostics Cluster", + "expectation": "Verify that TestEventTriggersEnabled attribute has a value of 1 (True)", + "is_commissioning": false, + "test_plan_number": "2" + }, + { + "description": "TH sends TestEventTrigger command to General Diagnostics Cluster on Endpoint 0 with EnableKey field set to PIXIT.EPM.TEST_EVENT_TRIGGER_KEY and EventTrigger field set to PIXIT.EPM.TEST_EVENT_TRIGGER for Start Fake Load Test 1kW Event", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "3" + }, + { + "description": "Wait 3 seconds", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "4" + }, + { + "description": "TH reads from the DUT the ActivePower attribute", + "expectation": "Verify the read is successful and that the value is between 980'000 and 1'020'000 mW. Note the value read.", + "is_commissioning": false, + "test_plan_number": "4a" + }, + { + "description": "TH reads from the DUT the ActiveCurrent attribute", + "expectation": "Verify the read is successful and that the value is between 3'848 and 4'848 mA. Note the value read.", + "is_commissioning": false, + "test_plan_number": "4b" + }, + { + "description": "TH reads from the DUT the Voltage attribute", + "expectation": "Verify the read is successful and that the value is between 229'000 and 231'000 mV. Note the value read.", + "is_commissioning": false, + "test_plan_number": "4c" + }, + { + "description": "Wait 3 seconds", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "5" + }, + { + "description": "TH reads from the DUT the ActivePower attribute", + "expectation": "Verify the read is successful, that the value is between '980'000 and 1'020'000 mW, and the value is different from the value read in step 4a.", + "is_commissioning": false, + "test_plan_number": "5a" + }, + { + "description": "TH reads from the DUT the ActiveCurrent attribute", + "expectation": "Verify the read is successful, that the value is between 3'848 and 4'848 mA, and the value is different from the value read in step 4b.", + "is_commissioning": false, + "test_plan_number": "5b" + }, + { + "description": "TH reads from the DUT the Voltage attribute", + "expectation": "Verify the read is successful, that the value is between 229'000 and 231'000 mV, and the value is different from the value read in step 4c.", + "is_commissioning": false, + "test_plan_number": "5c" + }, + { + "description": "TH sends TestEventTrigger command to General Diagnostics Cluster on Endpoint 0 with EnableKey field set to PIXIT.EPM.TEST_EVENT_TRIGGER_KEY and EventTrigger field set to PIXIT.EPM.TEST_EVENT_TRIGGER for Stop Fake Readings Test Event.", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "6" + } + ] + }, + { + "class_name": "TC_EWATERHTR_2_1", + "desc": "[TC-EWATERHTR-2.1] Attributes with attributes with DUT as Server\nThis test case verifies the non-global attributes of the Water Heater Management cluster server.", + "function": "test_TC_EWATERHTR_2_1", + "path": "sdk/TC_EWATERHTR_2_1", + "pics": [ + "EWATERHTR.S" + ], + "steps": [ + { + "description": "Commission DUT to TH (can be skipped if done in a preceding test).", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "1" + }, + { + "description": "TH reads from the DUT the FeatureMap attribute.", + "expectation": "Verify that the DUT response contains the FeatureMap attribute. Store the value as FeatureMap.", + "is_commissioning": false, + "test_plan_number": "2" + }, + { + "description": "TH reads from the DUT the HeaterTypes attribute.", + "expectation": "Verify that the DUT response contains a WaterHeaterTypeBitmap (enum8) greater than 0x00 (at least one type supported), and less than 0x20 (no undefined types supported)", + "is_commissioning": false, + "test_plan_number": "3" + }, + { + "description": "TH reads from the DUT the HeatDemand attribute.", + "expectation": "Verify that the DUT response contains a WaterHeaterDemandBitmap (enum8) value less than 0x20 (no undefined types supported).", + "is_commissioning": false, + "test_plan_number": "4" + }, + { + "description": "TH reads from the DUT the TankVolume attribute.", + "expectation": "Verify that the DUT response contains a uint16 value.", + "is_commissioning": false, + "test_plan_number": "5" + }, + { + "description": "TH reads from the DUT the EstimatedHeatRequired attribute.", + "expectation": "Verify that the DUT response contains an energy-mWh value that is greater or equal to 0.", + "is_commissioning": false, + "test_plan_number": "6" + }, + { + "description": "TH reads from the DUT the TankPercentage attribute.", + "expectation": "Verify that the DUT response contains a percent value that is between 0 and 100 inclusive.", + "is_commissioning": false, + "test_plan_number": "7" + }, + { + "description": "TH reads from the DUT the BoostState attribute.", + "expectation": "Verify that the DUT response contains a BoostStateEnum (enum8) value that is less than or equal to 1.", + "is_commissioning": false, + "test_plan_number": "8" + } + ] + }, + { + "class_name": "TC_EWATERHTR_2_2", + "desc": "[TC-EWATERHTR-2.2] Basic functionality with attributes with DUT as Server.This test case verifies the primary functionality of the Water Heater Management cluster server.", + "function": "test_TC_EWATERHTR_2_2", + "path": "sdk/TC_EWATERHTR_2_2", + "pics": [ + "EWATERHTR.S" + ], + "steps": [ + { + "description": "Commission DUT to TH (can be skipped if done in a preceding test)", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "1" + }, + { + "description": "Set up a subscription to all WaterHeaterManagement cluster events", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "2" + }, + { + "description": "TH reads TestEventTriggersEnabled attribute from General Diagnostics Cluster", + "expectation": "Value has to be 1 (True)", + "is_commissioning": false, + "test_plan_number": "3" + }, + { + "description": "TH sends TestEventTrigger command to General Diagnostics Cluster on Endpoint 0 with EnableKey field set to PIXIT.EWATERHTR.TESTEVENT_TRIGGERKEY and EventTrigger field set to PIXIT.EWATERHTR.TESTEVENTTRIGGER for Basic installation Test Event", + "expectation": "Verify DUT responds w/ status SUCCESS(0x00)", + "is_commissioning": false, + "test_plan_number": "4" + }, + { + "description": "TH reads from the DUT the HeatDemand", + "expectation": "Value has to be 0x00 (no demand on any source)", + "is_commissioning": false, + "test_plan_number": "4a" + }, + { + "description": "TH reads from the DUT the BoostState", + "expectation": "Value has to be 0 (Inactive)", + "is_commissioning": false, + "test_plan_number": "4b" + }, + { + "description": "TH reads from the DUT the HeaterTypes", + "expectation": "Value has to be greater than 0x00 (at least one type supported) and Store the value as HeaterTypes", + "is_commissioning": false, + "test_plan_number": "4c" + }, + { + "description": "TH sends TestEventTrigger command to General Diagnostics Cluster on Endpoint 0 with EnableKey field set to PIXIT.EWATERHTR.TESTEVENT_TRIGGERKEY and EventTrigger field set to PIXIT.EWATERHTR.TESTEVENTTRIGGER for Manual mode Test Event", + "expectation": "Verify DUT responds w/ status SUCCESS(0x00)", + "is_commissioning": false, + "test_plan_number": "5" + }, + { + "description": "TH reads from the DUT the HeatDemand", + "expectation": "Value has to be greater than 0x00 (demand on at least one source) and (HeaterDemand & (!HeaterTypes)) is zero (demand is only from declared supported types)", + "is_commissioning": false, + "test_plan_number": "5a" + }, + { + "description": "TH sends TestEventTrigger command to General Diagnostics Cluster on Endpoint 0 with EnableKey field set to PIXIT.EWATERHTR.TESTEVENT_TRIGGERKEY and EventTrigger field set to PIXIT.EWATERHTR.TESTEVENTTRIGGER for Water Temperature 61C Test Event", + "expectation": "Verify DUT responds w/ status SUCCESS(0x00)", + "is_commissioning": false, + "test_plan_number": "6" + }, + { + "description": "TH reads from the DUT the HeatDemand", + "expectation": "Value has to be 0x00 (no demand on any source)", + "is_commissioning": false, + "test_plan_number": "6a" + }, + { + "description": "TH sends TestEventTrigger command to General Diagnostics Cluster on Endpoint 0 with EnableKey field set to PIXIT.EWATERHTR.TESTEVENT_TRIGGERKEY and EventTrigger field set to PIXIT.EWATERHTR.TESTEVENTTRIGGER for Water Temperature 20C Test Event", + "expectation": "Verify DUT responds w/ status SUCCESS(0x00)", + "is_commissioning": false, + "test_plan_number": "7" + }, + { + "description": "TH reads from the DUT the HeatDemand", + "expectation": "Value has to be greater than 0x00 (demand on at least one source)", + "is_commissioning": false, + "test_plan_number": "7a" + }, + { + "description": "TH sends TestEventTrigger command to General Diagnostics Cluster on Endpoint 0 with EnableKey field set to PIXIT.EWATERHTR.TESTEVENT_TRIGGERKEY and EventTrigger field set to PIXIT.EWATERHTR.TESTEVENTTRIGGER for Off mode Test Event", + "expectation": "Verify DUT responds w/ status SUCCESS(0x00)", + "is_commissioning": false, + "test_plan_number": "8" + }, + { + "description": "TH reads from the DUT the HeatDemand", + "expectation": "Value has to be 0x00 (no demand on any source)", + "is_commissioning": false, + "test_plan_number": "8a" + }, + { + "description": "TH sends command Boost with Duration=5s,OneShot=True", + "expectation": "Verify DUT responds w/ status SUCCESS(0x00) and Event EWATERHTR.S.E00(BoostStarted) sent with Duration=5 and OneShot=True", + "is_commissioning": false, + "test_plan_number": "9" + }, + { + "description": "TH reads from the DUT the HeatDemand", + "expectation": "Value has to be greater than 0x00 (demand on at least one source) and (HeaterDemand & (!HeaterTypes)) is zero (demand is only from declared supported types)", + "is_commissioning": false, + "test_plan_number": "9a" + }, + { + "description": "TH reads from the DUT the BoostState", + "expectation": "Value has to be 1 (Active)", + "is_commissioning": false, + "test_plan_number": "9b" + }, + { + "description": "Wait 6 seconds", + "expectation": "Event EWATERHTR.S.E00(BoostEnded) sent", + "is_commissioning": false, + "test_plan_number": "10" + }, + { + "description": "TH reads from the DUT the HeatDemand", + "expectation": "Value has to be 0x00 (no demand on any source)", + "is_commissioning": false, + "test_plan_number": "10a" + }, + { + "description": "TH reads from the DUT the BoostState", + "expectation": "Value has to be 0 (Inactive)", + "is_commissioning": false, + "test_plan_number": "10b" + }, + { + "description": "TH sends command Boost with Duration=600s,OneShot=True", + "expectation": "Verify DUT responds w/ status SUCCESS(0x00) and Event EWATERHTR.S.E00(BoostStarted) sent with Duration=600 and OneShot=True", + "is_commissioning": false, + "test_plan_number": "11" + }, + { + "description": "TH reads from the DUT the HeatDemand", + "expectation": "Value has to be greater than 0x00 (demand on at least one source) and (HeaterDemand & (!HeaterTypes)) is zero (demand is only from declared supported types)", + "is_commissioning": false, + "test_plan_number": "11a" + }, + { + "description": "TH reads from the DUT the BoostState", + "expectation": "Value has to be 1 (Active)", + "is_commissioning": false, + "test_plan_number": "11b" + }, + { + "description": "TH sends TestEventTrigger command to General Diagnostics Cluster on Endpoint 0 with EnableKey field set to PIXIT.EWATERHTR.TESTEVENT_TRIGGERKEY and EventTrigger field set to PIXIT.EWATERHTR.TESTEVENTTRIGGER for Water Temperature 61C Test Event", + "expectation": "Verify DUT responds w/ status SUCCESS(0x00) and Event EWATERHTR.S.E00(BoostEnded) sent", + "is_commissioning": false, + "test_plan_number": "12" + }, + { + "description": "TH reads from the DUT the HeatDemand", + "expectation": "Value has to be 0x00 (no demand on any source)", + "is_commissioning": false, + "test_plan_number": "12a" + }, + { + "description": "TH reads from the DUT the BoostState", + "expectation": "Value has to be 0 (Inactive)", + "is_commissioning": false, + "test_plan_number": "12b" + }, + { + "description": "TH sends TestEventTrigger command to General Diagnostics Cluster on Endpoint 0 with EnableKey field set to PIXIT.EWATERHTR.TESTEVENT_TRIGGERKEY and EventTrigger field set to PIXIT.EWATERHTR.TESTEVENTTRIGGER for Water Temperature 20C Test Event", + "expectation": "Verify DUT responds w/ status SUCCESS(0x00)", + "is_commissioning": false, + "test_plan_number": "13" + }, + { + "description": "TH reads from the DUT the HeatDemand", + "expectation": "Value has to be 0x00 (no demand on any source)", + "is_commissioning": false, + "test_plan_number": "13a" + }, + { + "description": "TH sends command Boost with Duration=600s", + "expectation": "Verify DUT responds w/ status SUCCESS(0x00) and Event EWATERHTR.S.E00(BoostStarted) sent with Duration=600 and OneShot=None", + "is_commissioning": false, + "test_plan_number": "14" + }, + { + "description": "TH reads from the DUT the HeatDemand", + "expectation": "Value has to be greater than 0x00 (demand on at least one source) and (HeaterDemand & (!HeaterTypes)) is zero (demand is only from declared supported types)", + "is_commissioning": false, + "test_plan_number": "14a" + }, + { + "description": "TH reads from the DUT the BoostState", + "expectation": "Value has to be 1 (Active)", + "is_commissioning": false, + "test_plan_number": "14b" + }, + { + "description": "TH sends TestEventTrigger command to General Diagnostics Cluster on Endpoint 0 with EnableKey field set to PIXIT.EWATERHTR.TESTEVENT_TRIGGERKEY and EventTrigger field set to PIXIT.EWATERHTR.TESTEVENTTRIGGER for Water Temperature 61C Test Event", + "expectation": "Verify DUT responds w/ status SUCCESS(0x00)", + "is_commissioning": false, + "test_plan_number": "15" + }, + { + "description": "TH reads from the DUT the HeatDemand", + "expectation": "Value has to be 0x00 (no demand on any source)", + "is_commissioning": false, + "test_plan_number": "15a" + }, + { + "description": "TH reads from the DUT the BoostState", + "expectation": "Value has to be 1 (Active)", + "is_commissioning": false, + "test_plan_number": "15b" + }, + { + "description": "TH sends TestEventTrigger command to General Diagnostics Cluster on Endpoint 0 with EnableKey field set to PIXIT.EWATERHTR.TESTEVENT_TRIGGERKEY and EventTrigger field set to PIXIT.EWATERHTR.TESTEVENTTRIGGER for Water Temperature 20C Test Event", + "expectation": "Verify DUT responds w/ status SUCCESS(0x00)", + "is_commissioning": false, + "test_plan_number": "16" + }, + { + "description": "TH reads from the DUT the HeatDemand", + "expectation": "Value has to be greater than 0x00 (demand on at least one source) and (HeaterDemand & (!HeaterTypes)) is zero (demand is only from declared supported types)", + "is_commissioning": false, + "test_plan_number": "16a" + }, + { + "description": "TH reads from the DUT the BoostState", + "expectation": "Value has to be 1 (Active)", + "is_commissioning": false, + "test_plan_number": "16b" + }, + { + "description": "TH sends command CancelBoost", + "expectation": "Verify DUT responds w/ status SUCCESS(0x00) and Event EWATERHTR.S.E00(BoostEnded) sent", + "is_commissioning": false, + "test_plan_number": "17" + }, + { + "description": "TH reads from the DUT the HeatDemand", + "expectation": "Value has to be 0x00 (no demand on any source)", + "is_commissioning": false, + "test_plan_number": "17a" + }, + { + "description": "TH reads from the DUT the BoostState", + "expectation": "Value has to be 0 (Inactive)", + "is_commissioning": false, + "test_plan_number": "17b" + }, + { + "description": "TH sends command Boost with Duration=500s,TemporarySetpoint=65C", + "expectation": "Verify DUT responds w/ status SUCCESS(0x00) and Event EWATERHTR.S.E00(BoostStarted) sent with Duration=500 and TemporarySetpoint=6500", + "is_commissioning": false, + "test_plan_number": "18" + }, + { + "description": "TH reads from the DUT the HeatDemand", + "expectation": "Value has to be greater than 0x00 (demand on at least one source) and (HeaterDemand & (!HeaterTypes)) is zero (demand is only from declared supported types)", + "is_commissioning": false, + "test_plan_number": "18a" + }, + { + "description": "TH reads from the DUT the BoostState", + "expectation": "Value has to be 1 (Active)", + "is_commissioning": false, + "test_plan_number": "18b" + }, + { + "description": "TH sends TestEventTrigger command to General Diagnostics Cluster on Endpoint 0 with EnableKey field set to PIXIT.EWATERHTR.TESTEVENT_TRIGGERKEY and EventTrigger field set to PIXIT.EWATERHTR.TESTEVENTTRIGGER for Water Temperature 61C Test Event", + "expectation": "Verify DUT responds w/ status SUCCESS(0x00)", + "is_commissioning": false, + "test_plan_number": "19" + }, + { + "description": "TH reads from the DUT the HeatDemand", + "expectation": "Value has to be greater than 0x00 (demand on at least one source) and (HeaterDemand & (!HeaterTypes)) is zero (demand is only from declared supported types)", + "is_commissioning": false, + "test_plan_number": "19a" + }, + { + "description": "TH reads from the DUT the BoostState", + "expectation": "Value has to be 1 (Active)", + "is_commissioning": false, + "test_plan_number": "19b" + }, + { + "description": "TH sends TestEventTrigger command to General Diagnostics Cluster on Endpoint 0 with EnableKey field set to PIXIT.EWATERHTR.TESTEVENT_TRIGGERKEY and EventTrigger field set to PIXIT.EWATERHTR.TESTEVENTTRIGGER for Water Temperature 66C Test Event", + "expectation": "Verify DUT responds w/ status SUCCESS(0x00)", + "is_commissioning": false, + "test_plan_number": "20" + }, + { + "description": "TH reads from the DUT the HeatDemand", + "expectation": "Value has to be 0x00 (no demand on any source)", + "is_commissioning": false, + "test_plan_number": "20a" + }, + { + "description": "TH reads from the DUT the BoostState", + "expectation": "Value has to be 1 (Active)", + "is_commissioning": false, + "test_plan_number": "20b" + }, + { + "description": "TH sends command Boost with Duration=600s,TemporarySetpoint=70C", + "expectation": "Verify DUT responds w/ status SUCCESS(0x00) and Event EWATERHTR.S.E00(BoostStarted) sent with Duration=600 and TemporarySetpoint=7000", + "is_commissioning": false, + "test_plan_number": "21" + }, + { + "description": "TH reads from the DUT the HeatDemand", + "expectation": "Value has to be greater than 0x00 (demand on at least one source) and (HeaterDemand & (!HeaterTypes)) is zero (demand is only from declared supported types)", + "is_commissioning": false, + "test_plan_number": "21a" + }, + { + "description": "TH reads from the DUT the BoostState", + "expectation": "Value has to be 1 (Active)", + "is_commissioning": false, + "test_plan_number": "21b" + }, + { + "description": "TH sends command CancelBoost", + "expectation": "Verify DUT responds w/ status SUCCESS(0x00) and Event EWATERHTR.S.E00(BoostEnded) sent", + "is_commissioning": false, + "test_plan_number": "22" + }, + { + "description": "TH reads from the DUT the HeatDemand", + "expectation": "Value has to be 0x00 (no demand on any source)", + "is_commissioning": false, + "test_plan_number": "22a" + }, + { + "description": "TH reads from the DUT the BoostState", + "expectation": "Value has to be 0 (Inactive)", + "is_commissioning": false, + "test_plan_number": "22b" + }, + { + "description": "TH sends TestEventTrigger command to General Diagnostics Cluster on Endpoint 0 with EnableKey field set to PIXIT.EWATERHTR.TESTEVENT_TRIGGERKEY and EventTrigger field set to PIXIT.EWATERHTR.TESTEVENTTRIGGER for Water Temperature 20C Test Event", + "expectation": "Verify DUT responds w/ status SUCCESS(0x00)", + "is_commissioning": false, + "test_plan_number": "23" + }, + { + "description": "TH reads from the DUT the HeatDemand", + "expectation": "Value has to be 0x00 (no demand on any source)", + "is_commissioning": false, + "test_plan_number": "23a" + }, + { + "description": "TH sends command Boost with Duration=200s,EmergencyBoost=True", + "expectation": "Verify DUT responds w/ status SUCCESS(0x00) and Event EWATERHTR.S.E00(BoostStarted) sent with Duration=200, EmergencyBoost=True and TemporarySetpoint=None", + "is_commissioning": false, + "test_plan_number": "24" + }, + { + "description": "TH reads from the DUT the HeatDemand", + "expectation": "Value has to be greater than 0x00 (demand on at least one source) and (HeaterDemand & (!HeaterTypes)) is zero (demand is only from declared supported types)", + "is_commissioning": false, + "test_plan_number": "24a" + }, + { + "description": "TH reads from the DUT the BoostState", + "expectation": "Value has to be 1 (Active)", + "is_commissioning": false, + "test_plan_number": "24b" + }, + { + "description": "TH sends command CancelBoost", + "expectation": "Verify DUT responds w/ status SUCCESS(0x00) and Event EWATERHTR.S.E00(BoostEnded) sent", + "is_commissioning": false, + "test_plan_number": "25" + }, + { + "description": "TH reads from the DUT the HeatDemand", + "expectation": "Value has to be 0x00 (no demand on any source)", + "is_commissioning": false, + "test_plan_number": "25a" + }, + { + "description": "TH reads from the DUT the BoostState", + "expectation": "Value has to be 0 (Inactive)", + "is_commissioning": false, + "test_plan_number": "25b" + }, + { + "description": "TH sends command CancelBoost", + "expectation": "Verify DUT responds w/ status SUCCESS(0x00) and no event sent", + "is_commissioning": false, + "test_plan_number": "26" + }, + { + "description": "TH sends TestEventTrigger command to General Diagnostics Cluster on Endpoint 0 with EnableKey field set to PIXIT.EWATERHTR.TESTEVENT_TRIGGERKEY and EventTrigger field set to PIXIT.EWATERHTR.TESTEVENTTRIGGER for Basic installation Test Event Clear", + "expectation": "Verify DUT responds w/ status SUCCESS(0x00)", + "is_commissioning": false, + "test_plan_number": "27" + } + ] + }, + { + "class_name": "TC_EWATERHTR_2_3", + "desc": "[TC-EWATERHTR-2.3] This test case verifies the functionality of the Water Heater Management cluster server with the TankPercentage feature.", + "function": "test_TC_EWATERHTR_2_3", + "path": "sdk/TC_EWATERHTR_2_3", + "pics": [ + "EWATERHTR.S", + "EWATERHTR.S.F01" + ], + "steps": [ + { + "description": "Commission DUT to TH (can be skipped if done in a preceding test)", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "1" + }, + { + "description": "Set up a subscription to all WaterHeaterManagement cluster events", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "2" + }, + { + "description": "TH reads TestEventTriggersEnabled attribute from General Diagnostics Cluster", + "expectation": "Value has to be 1 (True)", + "is_commissioning": false, + "test_plan_number": "3" + }, + { + "description": "TH sends TestEventTrigger command to General Diagnostics Cluster on Endpoint 0 with EnableKey field set to PIXIT.EWATERHTR.TESTEVENT_TRIGGERKEY and EventTrigger field set to PIXIT.EWATERHTR.TESTEVENTTRIGGER for Basic installation Test Event", + "expectation": "Verify DUT responds w/ status SUCCESS(0x00)", + "is_commissioning": false, + "test_plan_number": "4" + }, + { + "description": "TH reads from the DUT the HeatDemand", + "expectation": "Value has to be 0x00 (no demand on any source)", + "is_commissioning": false, + "test_plan_number": "4a" + }, + { + "description": "TH reads from the DUT the BoostState", + "expectation": "Value has to be 0 (Inactive)", + "is_commissioning": false, + "test_plan_number": "4b" + }, + { + "description": "TH reads from the DUT the TankPercentage", + "expectation": "Value has to be 0%", + "is_commissioning": false, + "test_plan_number": "4c" + }, + { + "description": "TH reads from the DUT the HeaterTypes", + "expectation": "Value has to be greater than 0x00 (at least one type supported) and Store the value as HeaterTypes", + "is_commissioning": false, + "test_plan_number": "4d" + }, + { + "description": "TH sends command Boost with Duration=600s,TargetPercentage=100%", + "expectation": "Verify DUT responds w/ status SUCCESS(0x00) and Event EWATERHTR.S.E00(BoostStarted) sent with Duration=600 and TargetPercentage=100", + "is_commissioning": false, + "test_plan_number": "5" + }, + { + "description": "TH reads from the DUT the HeatDemand", + "expectation": "Value has to be greater than 0x00 (demand on at least one source) and (HeaterDemand & (!HeaterTypes)) is zero (demand is only from declared supported types)", + "is_commissioning": false, + "test_plan_number": "5a" + }, + { + "description": "TH reads from the DUT the BoostState", + "expectation": "Value has to be 1 (Active)", + "is_commissioning": false, + "test_plan_number": "5b" + }, + { + "description": "TH sends TestEventTrigger command to General Diagnostics Cluster on Endpoint 0 with EnableKey field set to PIXIT.EWATERHTR.TESTEVENT_TRIGGERKEY and EventTrigger field set to PIXIT.EWATERHTR.TESTEVENTTRIGGER for Water Temperature 61C Test Event", + "expectation": "Verify DUT responds w/ status SUCCESS(0x00)", + "is_commissioning": false, + "test_plan_number": "6" + }, + { + "description": "TH reads from the DUT the HeatDemand", + "expectation": "Value has to be 0x00 (no demand on any source)", + "is_commissioning": false, + "test_plan_number": "6a" + }, + { + "description": "TH reads from the DUT the BoostState", + "expectation": "Value has to be 1 (Active)", + "is_commissioning": false, + "test_plan_number": "6b" + }, + { + "description": "TH reads from the DUT the TankPercentage", + "expectation": "Value has to be 100%", + "is_commissioning": false, + "test_plan_number": "6c" + }, + { + "description": "TH sends TestEventTrigger command to General Diagnostics Cluster on Endpoint 0 with EnableKey field set to PIXIT.EWATERHTR.TESTEVENT_TRIGGERKEY and EventTrigger field set to PIXIT.EWATERHTR.TESTEVENTTRIGGER for Draw off hot water Test Event", + "expectation": "Verify DUT responds w/ status SUCCESS(0x00)", + "is_commissioning": false, + "test_plan_number": "7" + }, + { + "description": "TH reads from the DUT the HeatDemand", + "expectation": "Value has to be greater than 0x00 (demand on at least one source) and (HeaterDemand & (!HeaterTypes)) is zero (demand is only from declared supported types)", + "is_commissioning": false, + "test_plan_number": "7a" + }, + { + "description": "TH reads from the DUT the BoostState", + "expectation": "Value has to be 1 (Active)", + "is_commissioning": false, + "test_plan_number": "7b" + }, + { + "description": "TH reads from the DUT the TankPercentage", + "expectation": "Value has to be 76%", + "is_commissioning": false, + "test_plan_number": "7c" + }, + { + "description": "TH sends command CancelBoost", + "expectation": "Verify DUT responds w/ status SUCCESS(0x00) and Event EWATERHTR.S.E00(BoostEnded) sent", + "is_commissioning": false, + "test_plan_number": "8" + }, + { + "description": "TH reads from the DUT the HeatDemand", + "expectation": "Value has to be 0x00 (no demand on any source)", + "is_commissioning": false, + "test_plan_number": "8a" + }, + { + "description": "TH reads from the DUT the BoostState", + "expectation": "Value has to be 0 (Inactive)", + "is_commissioning": false, + "test_plan_number": "8b" + }, + { + "description": "TH reads from the DUT the TankPercentage", + "expectation": "Value has to be 76%", + "is_commissioning": false, + "test_plan_number": "8c" + }, + { + "description": "TH sends command Boost with Duration=400s,TargetPercentage=100%,TargetReheat=65%", + "expectation": "Verify DUT responds w/ status SUCCESS(0x00) and Event EWATERHTR.S.E00(BoostStarted) sent with Duration=400 and TargetPercentage=100 and TargetReheat=65", + "is_commissioning": false, + "test_plan_number": "9" + }, + { + "description": "TH reads from the DUT the HeatDemand", + "expectation": "Value has to be greater than 0x00 (demand on at least one source) and (HeaterDemand & (!HeaterTypes)) is zero (demand is only from declared supported types)", + "is_commissioning": false, + "test_plan_number": "9a" + }, + { + "description": "TH reads from the DUT the BoostState", + "expectation": "Value has to be 1 (Active)", + "is_commissioning": false, + "test_plan_number": "9b" + }, + { + "description": "TH reads from the DUT the TankPercentage", + "expectation": "Value has to be 76%", + "is_commissioning": false, + "test_plan_number": "9c" + }, + { + "description": "TH sends TestEventTrigger command to General Diagnostics Cluster on Endpoint 0 with EnableKey field set to PIXIT.EWATERHTR.TESTEVENT_TRIGGERKEY and EventTrigger field set to PIXIT.EWATERHTR.TESTEVENTTRIGGER for Water Temperature 61C Test Event", + "expectation": "Verify DUT responds w/ status SUCCESS(0x00)", + "is_commissioning": false, + "test_plan_number": "10" + }, + { + "description": "TH reads from the DUT the HeatDemand", + "expectation": "Value has to be 0x00 (no demand on any source)", + "is_commissioning": false, + "test_plan_number": "10a" + }, + { + "description": "TH reads from the DUT the BoostState", + "expectation": "Value has to be 1 (Active)", + "is_commissioning": false, + "test_plan_number": "10b" + }, + { + "description": "TH reads from the DUT the TankPercentage", + "expectation": "Value has to be 100%", + "is_commissioning": false, + "test_plan_number": "10c" + }, + { + "description": "TH sends TestEventTrigger command to General Diagnostics Cluster on Endpoint 0 with EnableKey field set to PIXIT.EWATERHTR.TESTEVENT_TRIGGERKEY and EventTrigger field set to PIXIT.EWATERHTR.TESTEVENTTRIGGER for Draw off hot water Test Event", + "expectation": "Verify DUT responds w/ status SUCCESS(0x00)", + "is_commissioning": false, + "test_plan_number": "11" + }, + { + "description": "TH reads from the DUT the HeatDemand", + "expectation": "Value has to be 0x00 (no demand on any source)", + "is_commissioning": false, + "test_plan_number": "11a" + }, + { + "description": "TH reads from the DUT the BoostState", + "expectation": "Value has to be 1 (Active)", + "is_commissioning": false, + "test_plan_number": "11b" + }, + { + "description": "TH reads from the DUT the TankPercentage", + "expectation": "Value has to be 76%", + "is_commissioning": false, + "test_plan_number": "11c" + }, + { + "description": "TH sends TestEventTrigger command to General Diagnostics Cluster on Endpoint 0 with EnableKey field set to PIXIT.EWATERHTR.TESTEVENT_TRIGGERKEY and EventTrigger field set to PIXIT.EWATERHTR.TESTEVENTTRIGGER for Draw off hot water Test Event", + "expectation": "Verify DUT responds w/ status SUCCESS(0x00)", + "is_commissioning": false, + "test_plan_number": "12" + }, + { + "description": "TH reads from the DUT the HeatDemand", + "expectation": "Value has to be greater than 0x00 (demand on at least one source) and (HeaterDemand & (!HeaterTypes)) is zero (demand is only from declared supported types)", + "is_commissioning": false, + "test_plan_number": "12a" + }, + { + "description": "TH reads from the DUT the BoostState", + "expectation": "Value has to be 1 (Active)", + "is_commissioning": false, + "test_plan_number": "12b" + }, + { + "description": "TH reads from the DUT the TankPercentage", + "expectation": "Value has to be 57%", + "is_commissioning": false, + "test_plan_number": "12c" + }, + { + "description": "TH sends command CancelBoost", + "expectation": "Verify DUT responds w/ status SUCCESS(0x00) and Event EWATERHTR.S.E00(BoostEnded) sent", + "is_commissioning": false, + "test_plan_number": "13" + }, + { + "description": "TH reads from the DUT the HeatDemand", + "expectation": "Value has to be 0x00 (no demand on any source)", + "is_commissioning": false, + "test_plan_number": "13a" + }, + { + "description": "TH reads from the DUT the BoostState", + "expectation": "Value has to be 0 (Inactive)", + "is_commissioning": false, + "test_plan_number": "13b" + }, + { + "description": "TH reads from the DUT the TankPercentage", + "expectation": "Value has to be 57%", + "is_commissioning": false, + "test_plan_number": "13c" + }, + { + "description": "TH sends TestEventTrigger command to General Diagnostics Cluster on Endpoint 0 with EnableKey field set to PIXIT.EWATERHTR.TESTEVENT_TRIGGERKEY and EventTrigger field set to PIXIT.EWATERHTR.TESTEVENTTRIGGER for Basic installation Test Event Clear", + "expectation": "Verify DUT responds w/ status SUCCESS(0x00)", + "is_commissioning": false, + "test_plan_number": "14" + } + ] + }, + { + "class_name": "TC_FAN_3_1", + "desc": "test_TC_FAN_3_1", + "function": "test_TC_FAN_3_1", + "path": "sdk/TC_FAN_3_1", + "pics": [ + "FAN.S" + ], + "steps": [ + { + "description": "Run entire test", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 1 + } + ] + }, + { + "class_name": "TC_FAN_3_2", + "desc": "test_TC_FAN_3_2", + "function": "test_TC_FAN_3_2", + "path": "sdk/TC_FAN_3_2", + "pics": [ + "FAN.S" + ], + "steps": [ + { + "description": "Run entire test", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 1 + } + ] + }, + { + "class_name": "TC_FAN_3_3", + "desc": "[TC-FAN-3.3] Optional rock functionality with DUT as Server", + "function": "test_TC_FAN_3_3", + "path": "sdk/TC_FAN_3_3", + "pics": [ + "FAN.S" + ], + "steps": [ + { + "description": "Commissioning, already done", + "expectation": "", + "is_commissioning": true, + "test_plan_number": 1 + }, + { + "description": "Read from the DUT the RockSupport attribute and store", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 2 + }, + { + "description": "RockLeftRight is supported, so write 0x01 to RockSetting", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 3 + }, + { + "description": "Read from the DUT the RockSetting attribute", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 4 + }, + { + "description": "RockLeftRight is not supported, so write 0x01 to RockSetting to check for constraint error", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 5 + }, + { + "description": "RockUpDown is supported, so write 0x02 to RockSetting", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 6 + }, + { + "description": "Read from the DUT the RockSetting attribute", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 7 + }, + { + "description": "RockUpDown is not supported, so write 0x02 to RockSetting to check for constraint error", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 8 + }, + { + "description": "RockRound is supported, so write 0x04 to RockSetting", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 9 + }, + { + "description": "Read from the DUT the RockSetting attribute", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 10 + }, + { + "description": "RockRound is not supported, so write 0x04 to RockSetting to check for constraint error", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 11 + }, + { + "description": "Write RockSetting to 0x00", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 12 + } + ] + }, + { + "class_name": "TC_FAN_3_4", + "desc": "[TC-FAN-3.4] Optional wind functionality with DUT as Server", + "function": "test_TC_FAN_3_4", + "path": "sdk/TC_FAN_3_4", + "pics": [ + "FAN.S" + ], + "steps": [ + { + "description": "Commissioning, already done", + "expectation": "", + "is_commissioning": true, + "test_plan_number": 1 + }, + { + "description": "Read from the DUT the WindSupport attribute and store", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 2 + }, + { + "description": "SleepWind is supported, so write 0x01 to WindSetting", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 3 + }, + { + "description": "Read from the DUT the WindSetting attribute", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 4 + }, + { + "description": "SleepWind is not supported, so write 0x01 to WindSetting to check for constraint error", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 5 + }, + { + "description": "NaturalWind is supported, so write 0x02 to WindSetting", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 6 + }, + { + "description": "Read from the DUT the WindSetting attribute", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 7 + }, + { + "description": "NaturalWind is not supported, so write 0x02 to WindSetting to check for constraint error", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 8 + }, + { + "description": "Write WindSetting to 0x00", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 9 + } + ] + }, + { + "class_name": "TC_FAN_3_5", + "desc": "test_TC_FAN_3_5", + "function": "test_TC_FAN_3_5", + "path": "sdk/TC_FAN_3_5", + "pics": [ + "FAN.S" + ], + "steps": [ + { + "description": "Run entire test", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 1 + } + ] + }, + { + "class_name": "TC_ICDM_2_1", + "desc": "[TC_ICDM_2_1] attributes with DUT as Server", + "function": "test_TC_ICDM_2_1", + "path": "sdk/TC_ICDM_2_1", + "pics": [ + "ICDM.S" + ], + "steps": [ + { + "description": "Commissioning, already done", + "expectation": "", + "is_commissioning": true, + "test_plan_number": "1a" + }, + { + "description": "CTH reads from the DUT the FeatureMap attribute.", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "1b" + }, + { + "description": "TH reads from the DUT the ActiveModeThreshold attribute.", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 2 + }, + { + "description": "TH reads from the DUT the ActiveModeDuration attribute.", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 3 + }, + { + "description": "TH reads from the DUT the IdleModeDuration attribute.", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 4 + }, + { + "description": "TH reads from the DUT the ClientsSupportedPerFabric attribute.", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 5 + }, + { + "description": "TH reads from the DUT the RegisteredClients attribute.", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 6 + }, + { + "description": "TH reads from the DUT the ICDCounter attribute.", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 7 + }, + { + "description": "TH reads from the DUT the UserActiveModeTriggerHint attribute.", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 8 + }, + { + "description": "TH reads from the DUT the UserActiveModeTriggerInstruction attribute", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 9 + }, + { + "description": "TH reads from the DUT the OperatingMode attribute.", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 10 + }, + { + "description": "TH reads from the DUT the MaximumCheckInBackoff attribute.", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 11 + } + ] + }, + { + "class_name": "TC_ICDM_3_1", + "desc": "[TC-ICDM-3.1] Register/Unregister Clients with DUT as Server", + "function": "test_TC_ICDM_3_1", + "path": "sdk/TC_ICDM_3_1", + "pics": [ + "ICDM.S", + "ICDM.S.F00" + ], + "steps": [ + { + "description": "Commissioning, already done", + "expectation": "", + "is_commissioning": true, + "test_plan_number": 0 + }, + { + "description": "TH reads from the DUT the RegisteredClients attribute. RegisteredClients is empty.", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "1a" + }, + { + "description": "TH reads from the DUT the ClientsSupportedPerFabric attribute.", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "1b" + }, + { + "description": "TH reads from the DUT the ICDCounter attribute.", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "1c" + }, + { + "description": "TH sends RegisterClient command.", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 2 + }, + { + "description": "TH reads from the DUT the RegisteredClients attribute.", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 3 + }, + { + "description": "If len(RegisteredClients) is less than ClientsSupportedPerFabric, TH repeats RegisterClient command with different CheckInNodeID(s) until the number of entries in RegisteredClients equals ClientsSupportedPerFabric.", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 4 + }, + { + "description": "TH reads from the DUT the RegisteredClients attribute.", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 5 + }, + { + "description": "TH sends RegisterClient command with a different CheckInNodeID.", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 6 + }, + { + "description": "TTH sends UnregisterClient command with the CheckInNodeID from Step 6.", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 7 + }, + { + "description": "TH sends UnregisterClient command with the CheckInNodeID from Step 2.", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 8 + }, + { + "description": "TH reads from the DUT the RegisteredClients attribute.", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 9 + }, + { + "description": "Repeat Step 8-9 with the rest of CheckInNodeIDs from the list of RegisteredClients from Step 4, if any.", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 10 + }, + { + "description": "TH reads from the DUT the RegisteredClients attribute.", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 11 + }, + { + "description": "TH sends UnregisterClient command with the CheckInNodeID from Step 2.", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 12 + } + ] + }, + { + "class_name": "TC_ICDM_3_2", + "desc": "[TC-ICDM-3.2] Verify RegisterClient Command with DUT as Server", + "function": "test_TC_ICDM_3_2", + "path": "sdk/TC_ICDM_3_2", + "pics": [ + "ICDM.S", + "ICDM.S.F00" + ], + "steps": [ + { + "description": "Commissioning, already done", + "expectation": "", + "is_commissioning": true, + "test_plan_number": 0 + }, + { + "description": "TH reads from the DUT the RegisteredClients attribute. RegisteredClients is empty.", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 1 + }, + { + "description": "TH sends RegisterClient command.", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "2a" + }, + { + "description": "TH reads from the DUT the RegisteredClients attribute.", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "2b" + }, + { + "description": "Power cycle DUT.", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "2c" + }, + { + "description": "TH waits for {PIXIT.WAITTIME.REBOOT}", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "2d" + }, + { + "description": "TH reads from the DUT the RegisteredClients attribute.", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "2e" + }, + { + "description": "TH sends RegisterClient command with same CheckInNodeID1 as in Step 1a and different MonitorSubID2 and Key2.", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "3a" + }, + { + "description": "TH reads from the DUT the RegisteredClients attribute.", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "3b" + }, + { + "description": "TH sends RegisterClient command with same CheckInNodeID1 as in Step 1a and different MonitorSubID3 and Key3, and an invalid VerificationKey3.", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "4a" + }, + { + "description": "TH reads from the DUT the RegisteredClients attribute.", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "4b" + }, + { + "description": "TH sends RegisterClient command with same CheckInNodeID1 as in Step 1a and different MonitorSubID4 and Key4, and a valid wrong VerificationKey4.", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "5a" + }, + { + "description": "TH reads from the DUT the RegisteredClients attribute.", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "5b" + }, + { + "description": "TH sends UnregisterClient command with CheckInNodeID1.", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "6a" + }, + { + "description": "TH reads from the DUT the RegisteredClients attribute.", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "6b" + }, + { + "description": "Set the TH to Manage privilege for ICDM cluster.", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 7 + }, + { + "description": "TH sends RegisterClient command.", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "8a" + }, + { + "description": "TH sends RegisterClient command with same CheckInNodeID5 as in Step 6a and different MonitorSubID6 and Key6, and an invalid VerificationKey6.", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "8b" + }, + { + "description": "TH sends RegisterClient command with same CheckInNodeID5 as in Step 6a and different MonitorSubID7 and Key7, and an valid wrong VerificationKey7.", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "8c" + }, + { + "description": "TH sends RegisterClient command with same CheckInNodeID5 and VerificationKey5 as in Step 6a and different MonitorSubID9 and Key9.", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "8d" + }, + { + "description": "TH sends UnregisterClient command with the CheckInNodeID5 and VerificationKey5.", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 9 + } + ] + }, + { + "class_name": "TC_ICDM_3_3", + "desc": "[TC-ICDM-3.3] Register/Unregister Clients with DUT as Server", + "function": "test_TC_ICDM_3_3", + "path": "sdk/TC_ICDM_3_3", + "pics": [ + "ICDM.S", + "ICDM.S.F00" + ], + "steps": [ + { + "description": "Commissioning, already done", + "expectation": "", + "is_commissioning": true, + "test_plan_number": 0 + }, + { + "description": "TH reads from the DUT the RegisteredClients attribute.", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "1a" + }, + { + "description": "TH sends UnregisterClient command with CheckInNodeID1, where CheckInNodeID1 can be any random node ID.", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "1b" + }, + { + "description": "TH sends RegisterClient command.", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "2a" + }, + { + "description": "TH reads from the DUT the RegisteredClients attribute.", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "2b" + }, + { + "description": "TH sends UnregisterClient command with the CheckInNodeID3.", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 3 + }, + { + "description": "TH sends UnregisterClient command with the CheckInNodeID2.", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "4a" + }, + { + "description": "TH reads from the DUT the RegisteredClients attribute.", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "4b" + }, + { + "description": "TH sends RegisterClient command.", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "5a" + }, + { + "description": "TH reads from the DUT the RegisteredClients attribute.", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "5b" + }, + { + "description": "TH sends UnregisterClient command with the CheckInNodeID4 as in Step 5a and an invalid VerificationKey5.", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "5c" + }, + { + "description": "TH reads from the DUT the RegisteredClients attribute.", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "5d" + }, + { + "description": "TH sends RegisterClient command.", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "6a" + }, + { + "description": "TH reads from the DUT the RegisteredClients attribute.", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "6b" + }, + { + "description": "TH sends UnregisterClient command with the CheckInNodeID6 as in Step 6a and a wrong VerificationKey7.", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "6c" + }, + { + "description": "TH reads from the DUT the RegisteredClients attribute.", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "6d" + }, + { + "description": "Set the TH to Manage privilege for ICDM cluster.", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 7 + }, + { + "description": "TH sends RegisterClient command.", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "8a" + }, + { + "description": "TH sends UnregisterClient command with the CheckInNodeID8 from Step 8a and an invalid VerificationKey9.", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "8b" + }, + { + "description": "TH sends UnregisterClient command with the CheckInNodeID8 from Step 8a and a valid wrong VerificationKey10.", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "8c" + }, + { + "description": "TH sends UnregisterClient command with the CheckInNodeID8 and VerificationKey8 from Step 8a.", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "8d" + } + ] + }, + { + "class_name": "TC_ICDM_3_4", + "desc": "[TC-ICDM-3.4] ICDCounter Persistence with DUT as Server", + "function": "test_TC_ICDM_3_4", + "path": "sdk/TC_ICDM_3_4", + "pics": [ + "ICDM.S", + "ICDM.S.F00" + ], + "steps": [ + { + "description": "Commissioning, already done", + "expectation": "", + "is_commissioning": true, + "test_plan_number": 0 + }, + { + "description": "TH reads from the DUT the ICDCounter attribute.", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 1 + }, + { + "description": "Power cycle DUT.", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "2a" + }, + { + "description": "TH waits for {PIXIT.WAITTIME.REBOOT}", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "2b" + }, + { + "description": "Verify that the DUT response contains value of ICDCounter and stores in IcdCounter2. IcdCounter2 is greater or equal to IcdCounter1. ICDCounter attribute can roll over. If the attribute rolls over, it will be greater or equal to 0.", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 3 + } + ] + }, + { + "class_name": "TestICDManagementCluster", + "desc": "test_active_mode_test_event_trigger", + "function": "test_active_mode_test_event_trigger", + "path": "sdk/TC_ICDManagementCluster", + "pics": [], + "steps": [ + { + "description": "Run entire test", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 1 + } + ] + }, + { + "class_name": "TC_IDM_1_2", + "desc": "test_TC_IDM_1_2", + "function": "test_TC_IDM_1_2", + "path": "sdk/TC_IDM_1_2", + "pics": [], + "steps": [ + { + "description": "Run entire test", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 1 + } + ] + }, + { + "class_name": "TC_IDM_1_4", + "desc": "test_TC_IDM_1_4", + "function": "test_TC_IDM_1_4", + "path": "sdk/TC_IDM_1_4", + "pics": [], + "steps": [ + { + "description": "Get remote node's MaxPathsPerInvoke", + "expectation": "", + "is_commissioning": true, + "test_plan_number": 1 + }, + { + "description": "Sending `MaxPathsPerInvoke + 1` InvokeRequest if it fits into single MTU", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 2 + }, + { + "description": "Sending two InvokeRequests with identical paths", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 3 + }, + { + "description": "Sending two InvokeRequests with unique paths, but identical CommandRefs", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 4 + }, + { + "description": "Verify DUT responds to InvokeRequestMessage containing two valid paths", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 5 + }, + { + "description": "Verify DUT responds to InvokeRequestMessage containing one valid paths, and one InvokeRequest to unsupported endpoint", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 6 + }, + { + "description": "Verify DUT responds to InvokeRequestMessage containing two valid paths. One of which requires timed invoke, and TimedRequest in InvokeResponseMessage set to true, but never sending preceding Timed Invoke Action", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 7 + }, + { + "description": "Verify DUT responds to InvokeRequestMessage containing two valid paths. One of which requires timed invoke, and TimedRequest in InvokeResponseMessage set to true", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 8 + }, + { + "description": "Verify DUT supports extended Data Model Testing feature in General Diagnostics Cluster", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 9 + }, + { + "description": "Verify DUT has TestEventTriggersEnabled attribute set to true in General Diagnostics Cluster", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 10 + }, + { + "description": "Verify DUT capable of responding to request with multiple InvokeResponseMessages", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 11 + } + ] + }, + { + "class_name": "TC_IDM_4_2", + "desc": "test_TC_IDM_4_2", + "function": "test_TC_IDM_4_2", + "path": "sdk/TC_IDM_4_2", + "pics": [], + "steps": [ + { + "description": "CR1 reads the ServerList attribute from the Descriptor cluster on EP0.", + "expectation": "If the ICD Management cluster ID (70,0x46) is present, set SUBSCRIPTION_MAX_INTERVAL_PUBLISHER_LIMIT_SEC = IdleModeDuration and min_interval_floor_s to 0, otherwise, set SUBSCRIPTION_MAX_INTERVAL_PUBLISHER_LIMIT_SEC = 60 mins and min_interval_floor_s to 3.", + "is_commissioning": false, + "test_plan_number": 0 + }, + { + "description": "CR1 sends a subscription message to the DUT with MaxIntervalCeiling set to a value greater than subscription_max_interval_publisher_limit_sec. DUT sends a report data action to the TH. CR1 sends a success status response to the DUT. DUT sends a Subscribe Response Message to the CR1 to activate the subscription.", + "expectation": "Verify on the CR1, a report data message is received. Verify it contains the following data Report data - data of the attribute/event requested earlier. Verify on the CR1 the Subscribe Response has the following fields, SubscriptionId - Verify it is of type uint32. MaxInterval - Verify it is of type uint32. Verify that the MaxInterval is less than or equal to MaxIntervalCeiling.", + "is_commissioning": false, + "test_plan_number": 1 + }, + { + "description": "CR1 sends a subscription message to the DUT with MaxIntervalCeiling set to a value less than subscription_max_interval_publisher_limit_sec. DUT sends a report data action to the CR1. CR1 sends a success status response to the DUT. DUT sends a Subscribe Response Message to the CR1 to activate the subscription.", + "expectation": "Verify on the CR1, a report data message is received. Verify it contains the following data: Report data - data of the attribute/event requested earlier. Verify on the CR1 the Subscribe Response has the following fields, SubscriptionId - Verify it is of type uint32. MaxInterval - Verify it is of type uint32. Verify that the MaxInterval is less than or equal to SUBSCRIPTION_MAX_INTERVAL_PUBLISHER_LIMIT.", + "is_commissioning": false, + "test_plan_number": 2 + }, + { + "description": "Setup CR2 such that it does not have access to a specific cluster. CR2 sends a subscription message to subscribe to an attribute on that cluster for which it does not have access.", + "expectation": "Verify that the DUT returns a \"INVALID_ACTION\" status response.", + "is_commissioning": false, + "test_plan_number": 3 + }, + { + "description": "Setup CR2 such that it does not have access to all attributes on a specific cluster and endpoint. CR2 sends a subscription request to subscribe to all attributes for which it does not have access.", + "expectation": "Verify that the DUT returns a \"INVALID_ACTION\" status response.", + "is_commissioning": false, + "test_plan_number": 4 + }, + { + "description": "Setup CR2 such that it does not have access to an Endpoint. CR2 sends a subscription request to subscribe to all attributes on all clusters on a specific Endpoint for which it does not have access.", + "expectation": "Verify that the DUT returns a \"INVALID_ACTION\" status response.", + "is_commissioning": false, + "test_plan_number": 5 + }, + { + "description": "Setup CR2 such that it does not have access to the Node. CR2 sends a subscription request to subscribe to all attributes on all clusters on all endpoints on a Node for which it does not have access.", + "expectation": "Verify that the DUT returns a \"INVALID_ACTION\" status response.", + "is_commissioning": false, + "test_plan_number": 6 + }, + { + "description": "CR1 sends a subscription request action for an attribute with an empty DataVersionFilters field. DUT sends a report data action with the data of the attribute along with the data version. Tear down the subscription for that attribute. Start another subscription with the DataVersionFilter field set to the data version received above.", + "expectation": "Verify that the subscription is activated between CR1 and DUT.", + "is_commissioning": false, + "test_plan_number": 7 + }, + { + "description": "CR1 sends a subscription request action for an attribute and sets the MinIntervalFloor to min_interval_floor_sec and MaxIntervalCeiling to 10. Activate the Subscription between CR1 and DUT and record the time when the priming ReportDataMessage is received as t_report_sec. Save the returned MaxInterval from the SubscribeResponseMessage as max_interval_sec.", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 8 + }, + { + "description": "CR1 modifies the attribute which has been subscribed to on the DUT and waits for an incoming ReportDataMessage", + "expectation": "Verify that t_update - t_report is greater than min_interval_floor_s and less than the ReadClient SubscriptionTimeout (calculated by the ReadClient using max_interval_s and the maximum estimated network delay based on the MRP parameters for retries with backoff)", + "is_commissioning": false, + "test_plan_number": 9 + }, + { + "description": "CR1 sends a subscription request action for an attribute and set the MinIntervalFloor value to be greater than MaxIntervalCeiling.", + "expectation": "Verify that the DUT sends an error message and the subscription is not established.", + "is_commissioning": false, + "test_plan_number": 10 + }, + { + "description": "CR1 sends a subscription request to subscribe to a specific global attribute from all clusters on all endpoints.", + "expectation": "Verify that the Subscription succeeds and the DUT sends back the attribute values for the global attribute.", + "is_commissioning": false, + "test_plan_number": 11 + }, + { + "description": "CR1 sends a subscription request to subscribe to a global attribute on an endpoint on all clusters.", + "expectation": "Verify that the Subscription succeeds and the DUT sends back the attribute values for the global attribute. Verify no data from other endpoints is sent back.", + "is_commissioning": false, + "test_plan_number": 12 + }, + { + "description": "CR1 sends a subscription request to the DUT with both AttributeRequests and EventRequests as empty.", + "expectation": "Verify that the Subscription does not succeed and the DUT sends back a Status Response Action with the INVALID_ACTION Status Code", + "is_commissioning": false, + "test_plan_number": 13 + } + ] + }, + { + "class_name": "TC_LVL_2_3", + "desc": "test_TC_LVL_2_3", + "function": "test_TC_LVL_2_3", + "path": "sdk/TC_LVL_2_3", + "pics": [], + "steps": [ + { + "description": "Commission DUT if not already done", + "expectation": "", + "is_commissioning": true, + "test_plan_number": 1 + }, + { + "description": "TH reads FeatureMap attribute and the AttributeList value", + "expectation": "Verify DUT responds w/ status SUCCESS", + "is_commissioning": false, + "test_plan_number": 2 + }, + { + "description": "If the MaxLevel attribute is in the AttributeList, TH reads MaxLevel attribute and store value as maxLevel, otherwise set maxLevel to 254", + "expectation": "Verify DUT responds w/ status SUCCESS", + "is_commissioning": false, + "test_plan_number": "3a" + }, + { + "description": "If the MinLevel attribute is in the AttributeList, TH reads MinLevel attribute and store value as minLevel, otherwise set minLevel to 0 if LT is not supported or 1 if LT is supported", + "expectation": "Verify DUT responds w/ status SUCCESS", + "is_commissioning": false, + "test_plan_number": "3b" + }, + { + "description": "TH sends the command MoveWithOnOff with MoveMode field set to Down and rate set to 254 and remaining fields set to 0", + "expectation": "Verify DUT responds w/ status SUCCESS", + "is_commissioning": false, + "test_plan_number": 4 + }, + { + "description": "TH reads CurrentLevel attribute and store value as startCurrentLevel", + "expectation": "Verify DUT responds w/ status SUCCESS", + "is_commissioning": false, + "test_plan_number": 5 + }, + { + "description": "Set up a subscription wildcard subscription for the Level Control Cluster, with MinIntervalFloor set to 0, MaxIntervalCeiling set to 30 and KeepSubscriptions set to false", + "expectation": "Subscription successfully established", + "is_commissioning": false, + "test_plan_number": 6 + }, + { + "description": "TH sends the command MoveToLevelWithOnOff with Level field set to maxLevel, TransitionTime field set to 100 (10s) and remaining fields set to 0", + "expectation": "Verify DUT responds w/ status SUCCESS", + "is_commissioning": false, + "test_plan_number": 7 + }, + { + "description": "TH stores the reported values of CurrentLevel in all incoming reports for CurrentLevel attribute, that contains data in reportedCurrentLevelValuesList, over a period of 30 seconds.", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 8 + }, + { + "description": "TH verifies that reportedCurrentLevelValuesList does not contain more than 12 entries for CurrentLevel", + "expectation": "reportedCurrentLevelValuesList has 12 or fewer entries in the list", + "is_commissioning": false, + "test_plan_number": 9 + }, + { + "description": "If reportedCurrentLevelValuesList only contain a single entry, TH verifies the value of the entry is equal to maxLevel", + "expectation": "The entry in reportedCurrentLevelValuesList is equal to maxLevel", + "is_commissioning": false, + "test_plan_number": 10 + }, + { + "description": "If reportedCurrentLevelValuesList contains two or more entries, TH verifies the value of the first entry is larger than startCurrentLevel", + "expectation": "The first entry in reportedCurrentLevelValuesList is equal to or larger than to startCurrentLevel", + "is_commissioning": false, + "test_plan_number": 11 + }, + { + "description": "If reportedCurrentLevelValuesList contains two or more entries, TH verifies the value of the last entry is equal to maxLevel", + "expectation": "The last entry in reportedCurrentLevelValuesList is equal to maxLevel", + "is_commissioning": false, + "test_plan_number": 12 + }, + { + "description": "If the LT feature is not supported, skip remaining steps and end test case", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 13 + }, + { + "description": "TH stores the reported values of RemainingTime in all incoming reports for RemainingTime attribute, that contains data in reportedRemainingTimeValuesList.", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 15 + }, + { + "description": "\tTH sends the command MoveToLevel with Level field set to startCurrentLevel, TransitionTime field set to 100 (10s) and remaining fields set to 0", + "expectation": "Verify DUT responds w/ status SUCCESS", + "is_commissioning": false, + "test_plan_number": 16 + }, + { + "description": "Wait for 5 seconds", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 17 + }, + { + "description": "TH sends the command MoveToLevel with Level field set to startCurrentLevel, TransitionTime field set to 150 (15s) and remaining fields set to 0", + "expectation": "Verify DUT responds w/ status SUCCESS", + "is_commissioning": false, + "test_plan_number": 18 + }, + { + "description": "Wait for 20 seconds", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 19 + }, + { + "description": "TH verifies reportedRemainingTimeValuesList contains three entries", + "expectation": "reportedRemainingTimeValuesList has 3 entries in the list", + "is_commissioning": false, + "test_plan_number": 20 + }, + { + "description": "TH verifies the first entry in reportedRemainingTimeValuesList is approximately 100 (10s)", + "expectation": "The first entry in reportedRemainingTimeValuesList is in the range 95 - 100", + "is_commissioning": false, + "test_plan_number": 21 + }, + { + "description": "TH verifies the second entry in reportedRemainingTimeValuesList is approximately 150", + "expectation": "The second entry in reportedRemainingTimeValuesList is in the range 145 - 150", + "is_commissioning": false, + "test_plan_number": 22 + }, + { + "description": "TH verifies the third entry in reportedRemainingTimeValuesList is 0", + "expectation": "The third entry in reportedRemainingTimeValuesList is equal to 0", + "is_commissioning": false, + "test_plan_number": 23 + } + ] + }, + { + "class_name": "TC_MCORE_FS_1_1", + "desc": "test_TC_MCORE_FS_1_1", + "function": "test_TC_MCORE_FS_1_1", + "path": "sdk/TC_MCORE_FS_1_1", + "pics": [], + "steps": [ + { + "description": "Enable Fabric Synchronization on DUT_FSA using the manufacturer specified mechanism.", + "expectation": "", + "is_commissioning": true, + "test_plan_number": 1 + }, + { + "description": "Commission DUT_FSA onto TH_FSA fabric.", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 2 + }, + { + "description": "Reverse Commision Commission TH_FSAs onto DUT_FSA fabric.", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 3 + }, + { + "description": "TH_FSA sends RequestCommissioningApproval", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "3a" + }, + { + "description": "TH_FSA sends CommissionNode", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "3b" + }, + { + "description": "DUT_FSA commissions TH_FSA", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "3c" + } + ] + }, + { + "class_name": "TC_MCORE_FS_1_2", + "desc": "test_TC_MCORE_FS_1_2", + "function": "test_TC_MCORE_FS_1_2", + "path": "sdk/TC_MCORE_FS_1_2", + "pics": [], + "steps": [ + { + "description": "TH subscribes to PartsList attribute of the Descriptor cluster of DUT_FSA endpoint 0.", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 1 + }, + { + "description": "Follow manufacturer provided instructions to have DUT_FSA commission TH_SERVER", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 2 + }, + { + "description": "TH waits up to 30 seconds for subscription report from the PartsList attribute of the Descriptor to contain new endpoint", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 3 + }, + { + "description": "TH uses DUT to open commissioning window to TH_SERVER", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 4 + }, + { + "description": "TH commissions TH_SERVER", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 5 + }, + { + "description": "TH reads all attributes in Basic Information cluster from TH_SERVER directly", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 6 + }, + { + "description": "TH reads all attributes in the Bridged Device Basic Information cluster on new endpoint identified in step 3 from the DUT_FSA", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 7 + } + ] + }, + { + "class_name": "TC_MCORE_FS_1_3", + "desc": "test_TC_MCORE_FS_1_3", + "function": "test_TC_MCORE_FS_1_3", + "path": "sdk/TC_MCORE_FS_1_3", + "pics": [], + "steps": [ + { + "description": "Commission DUT if not done", + "expectation": "", + "is_commissioning": true, + "test_plan_number": 0 + }, + { + "description": "TH commissions TH_SERVER_NO_UID to TH's fabric", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 1 + }, + { + "description": "DUT_FSA commissions TH_SERVER_NO_UID to DUT_FSA's fabric and generates a UniqueID.", + "expectation": "TH verifies a value is visible for the UniqueID from the DUT_FSA's Bridged Device Basic Information Cluster.", + "is_commissioning": false, + "test_plan_number": 2 + } + ] + }, + { + "class_name": "TC_MCORE_FS_1_4", + "desc": "test_TC_MCORE_FS_1_4", + "function": "test_TC_MCORE_FS_1_4", + "path": "sdk/TC_MCORE_FS_1_4", + "pics": [], + "steps": [ + { + "description": "Commission DUT if not done", + "expectation": "", + "is_commissioning": true, + "test_plan_number": 0 + }, + { + "description": "TH commissions TH_SERVER_NO_UID to TH's fabric.", + "expectation": "TH verifies that the TH_SERVER_NO_UID does not provide a UniqueID.", + "is_commissioning": false, + "test_plan_number": 1 + }, + { + "description": "TH instructs TH_FSA to commission TH_SERVER_NO_UID to TH_FSA's fabric.", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 2 + }, + { + "description": "TH instructs TH_FSA to open up commissioning window on it's aggregator.", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 3 + }, + { + "description": "Follow manufacturer provided instructions to have DUT_FSA commission TH_FSA's aggregator.", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 4 + }, + { + "description": "Follow manufacturer provided instructions to enable DUT_FSA to synchronize TH_SERVER_NO_UID from TH_FSA onto DUT_FSA's fabric. TH to provide endpoint saved from step 2 in user prompt.", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 5 + }, + { + "description": "DUT_FSA synchronizes TH_SERVER_NO_UID onto DUT_FSA's fabric and copies the UniqueID presented by TH_FSA's Bridged Device Basic Information Cluster.", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 6 + } + ] + }, + { + "class_name": "TC_MCORE_FS_1_5", + "desc": "test_TC_MCORE_FS_1_5", + "function": "test_TC_MCORE_FS_1_5", + "path": "sdk/TC_MCORE_FS_1_5", + "pics": [], + "steps": [ + { + "description": "TH subscribes to PartsList attribute of the Descriptor cluster of DUT_FSA endpoint 0.", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 1 + }, + { + "description": "Follow manufacturer provided instructions to have DUT_FSA commission TH_SERVER", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 2 + }, + { + "description": "TH waits up to 30 seconds for subscription report from the PartsList attribute of the Descriptor to contain new endpoint", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 3 + }, + { + "description": "TH uses DUT to open commissioning window to TH_SERVER", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 4 + }, + { + "description": "TH commissions TH_SERVER", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 5 + }, + { + "description": "TH subscribes to AdministratorCommissioning attributes on DUT_FSA for the newly added endpoint identified in step 3", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 6 + }, + { + "description": "TH opens commissioning window to TH_SERVER directly (not using DUT)", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 7 + }, + { + "description": "TH reads CurrentFabricIndex attributes on OperationalCredentials cluster from TH_SERVER directly (not using DUT_FSA)", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 8 + }, + { + "description": "TH reads AdministratorCommissioning from TH_SERVER directly (not using DUT)", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 9 + }, + { + "description": "TH waits up to 10 seconds for subscription report from the AdministratorCommissioning attribute (from step 6) to reflect values from previous step", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 10 + } + ] + }, + { + "class_name": "TC_MWOCTRL_2_1", + "desc": "[TC-MWOCTRL-2.1] Primary functionality with DUT as Server", + "function": "test_TC_MWOCTRL_2_1", + "path": "sdk/TC_MWOCTRL_2_1", + "pics": [ + "MWOCTRL.S" + ], + "steps": [ + { + "description": "Commissioning, already done", + "expectation": "", + "is_commissioning": true, + "test_plan_number": 1 + }, + { + "description": "Read the MaxCookTime attribute and check limits", + "expectation": "Verify that the DUT response contains an elapsed-s value between 1 and 86400 inclusive. Save value as MaxCookTime.", + "is_commissioning": false, + "test_plan_number": 2 + }, + { + "description": "Read the CookTime attribute and check limits", + "expectation": "Verify that the DUT response contains an elapsed-s value between 1 and MaxCookTime inclusive.", + "is_commissioning": false, + "test_plan_number": 3 + }, + { + "description": "Set the CookTime attribute to 60", + "expectation": "Verify DUT responds w/ status SUCCESS(0x00).", + "is_commissioning": false, + "test_plan_number": 4 + }, + { + "description": "Read the CookTime attribute and check for 60", + "expectation": "Verify that the DUT response contains the CookTime value 60.", + "is_commissioning": false, + "test_plan_number": 5 + }, + { + "description": "Set the CookTime attribute to 1", + "expectation": "Verify DUT responds w/ status SUCCESS(0x00)", + "is_commissioning": false, + "test_plan_number": 6 + }, + { + "description": "Read the CookTime attribute and check for 1", + "expectation": "Verify that the DUT response contains the CookTime value 1.", + "is_commissioning": false, + "test_plan_number": 7 + }, + { + "description": "Set the CookTime attribute to MaxCookTime", + "expectation": "Verify DUT responds w/ status SUCCESS(0x00)", + "is_commissioning": false, + "test_plan_number": 8 + }, + { + "description": "Read the CookTime attribute and check for MaxCookTime", + "expectation": "Verify that the DUT response contains the CookTime value MaxCookTime.", + "is_commissioning": false, + "test_plan_number": 9 + }, + { + "description": "Read the WattRating attribute, if supported", + "expectation": "Verify that the DUT response contains a uint16 value.", + "is_commissioning": false, + "test_plan_number": 10 + }, + { + "description": "Set the CookTime attribute to 0", + "expectation": "Verify DUT responds w/ status CONSTRAINT_ERROR(0x87)", + "is_commissioning": false, + "test_plan_number": 11 + }, + { + "description": "Set the CookTime attribute to MaxCookTime+1", + "expectation": "Verify DUT responds w/ status CONSTRAINT_ERROR(0x87)", + "is_commissioning": false, + "test_plan_number": 12 + } + ] + }, + { + "class_name": "TC_MWOCTRL_2_2", + "desc": "[TC-MWOCTRL-2.2] Secondary functionality with DUT as Server", + "function": "test_TC_MWOCTRL_2_2", + "path": "sdk/TC_MWOCTRL_2_2", + "pics": [ + "MWOCTRL.S", + "MWOCTRL.S.F00" + ], + "steps": [ + { + "description": "Commissioning, already done", + "expectation": "", + "is_commissioning": true, + "test_plan_number": 1 + }, + { + "description": "Set MinPowerValue variable", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 2 + }, + { + "description": "Read the MinPower attribute", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 3 + }, + { + "description": "Set the MaxPowerValue variable", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 4 + }, + { + "description": "Read the MaxPower attribute", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 5 + }, + { + "description": "Set the PowerStepValue variable", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 6 + }, + { + "description": "Read the PowerStep attribute", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 7 + }, + { + "description": "Read the PowerSetting attribute", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 8 + }, + { + "description": "Send the SetCookingParameters command", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 9 + }, + { + "description": "Read and verify the PowerSetting attribute", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 10 + }, + { + "description": "Set the PowerSetting attribute to the minimum value", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 11 + }, + { + "description": "Read and verify the PowerSetting attribute", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 12 + }, + { + "description": "Set the PowerSetting attribute to the maximum value", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 13 + }, + { + "description": "Read and verify the PowerSetting attribute", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 14 + }, + { + "description": "Set PowerSetting to an invalid value", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 15 + }, + { + "description": "If PowerStep=1, exit test case.", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 16 + }, + { + "description": "Set PowerSetting to a value that is not an integer multiple of PowerStep", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 17 + } + ] + }, + { + "class_name": "TC_MWOCTRL_2_4", + "desc": "[TC-MWOCTRL-2.4] WATTS functionality with DUT as Server", + "function": "test_TC_MWOCTRL_2_4", + "path": "sdk/TC_MWOCTRL_2_4", + "pics": [ + "MWOCTRL.S" + ], + "steps": [ + { + "description": "Commissioning, already done", + "expectation": "", + "is_commissioning": true, + "test_plan_number": 1 + }, + { + "description": "Read the SupportedWatts attribute", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 2 + }, + { + "description": "Read the SelectedWattIndex attribute", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 3 + }, + { + "description": "Send the SetCookingParameters command", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 4 + }, + { + "description": "Read and verify the SelectedWattIndex attribute", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 5 + } + ] + }, + { + "class_name": "TC_MWOM_1_2", + "desc": "[TC-MWOM-1.2] Cluster attributes with DUT as Server", + "function": "test_TC_MWOM_1_2", + "path": "sdk/TC_MWOM_1_2", + "pics": [ + "MWOM.S" + ], + "steps": [ + { + "description": "Commissioning, already done", + "expectation": "", + "is_commissioning": true, + "test_plan_number": 1 + }, + { + "description": "Read the SupportedModes attribute", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 2 + }, + { + "description": "Read the CurrentMode attribute", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 3 + } + ] + }, + { + "class_name": "TC_OCC_2_1", + "desc": "[TC-OCC-2.1] Attributes with DUT as Server", + "function": "test_TC_OCC_2_1", + "path": "sdk/TC_OCC_2_1", + "pics": [ + "OCC.S" + ], + "steps": [ + { + "description": "Commissioning, already done", + "expectation": "", + "is_commissioning": true, + "test_plan_number": 1 + }, + { + "description": "Read Occupancy attribute.", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 2 + }, + { + "description": "Read OccupancySensorType attribute.", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 3 + }, + { + "description": "Read OccupancySensorTypeBitmap attribute.", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 4 + }, + { + "description": "Read HoldTimeLimits attribute, if supported", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 5 + }, + { + "description": "Read HoldTime attribute, if supported", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 6 + }, + { + "description": "Read PIROccupiedToUnoccupiedDelay attribute, if supported", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 7 + }, + { + "description": "Read PIRUnoccupiedToOccupiedDelay attribute, if supported", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 8 + }, + { + "description": "Read PIRUnoccupiedToOccupiedThreshold attribute, if supported", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 9 + }, + { + "description": "Read UltrasonicOccupiedToUnoccupiedDelay attribute, if supported", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 10 + }, + { + "description": "Read UltrasonicUnoccupiedToOccupiedDelay attribute, if supported", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 11 + }, + { + "description": "Read UltrasonicUnoccupiedToOccupiedThreshold attribute, if supported", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 12 + }, + { + "description": "Read PhysicalContactOccupiedToUnoccupiedDelay attribute, if supported", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 13 + }, + { + "description": "Read PhysicalContactUnoccupiedToOccupiedDelay attribute, if supported", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 14 + }, + { + "description": "Read PhysicalContactUnoccupiedToOccupiedThreshold attribute, if supported", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 15 + } + ] + }, + { + "class_name": "TC_OCC_2_2", + "desc": "[TC-OCC-2.2] OccupancySensorTypeBitmap and OccupancySensorType interdependency with server as DUT", + "function": "test_TC_OCC_2_2", + "path": "sdk/TC_OCC_2_2", + "pics": [ + "OCC.S" + ], + "steps": [ + { + "description": "Commissioning, already done", + "expectation": "", + "is_commissioning": true, + "test_plan_number": 1 + }, + { + "description": "Read OccupancySensorType attribute selection based on FeatureMap Bitmap.", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 2 + }, + { + "description": "Read OccupancySensorTypeBitmap attribute selection based on FeatureMap Bitmap.", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 3 + } + ] + }, + { + "class_name": "TC_OCC_2_3", + "desc": "[TC-OCC-2.3] HoldTime Backward Compatibility Test with server as DUT", + "function": "test_TC_OCC_2_3", + "path": "sdk/TC_OCC_2_3", + "pics": [ + "OCC.S" + ], + "steps": [ + { + "description": "Commission DUT to TH", + "expectation": "", + "is_commissioning": true, + "test_plan_number": 1 + }, + { + "description": "TH reads the FeatureMap attribute on the endpoint for use in later steps.", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 2 + }, + { + "description": "TH checks DUT HoldTime attribute support in the AttributeList attribute. If DUT doesn't support HoldTime attribute, skip the rest of this test case.", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 3 + }, + { + "description": "TH writes DUT HoldTime attribute with HoldTimeMin and afterwards reads the attribute.", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 4 + }, + { + "description": "TH writes DUT HoldTime attribute with HoldTimeMax and afterwards reads the attribute.", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 5 + }, + { + "description": "If DUT FeatureMap has PIR or (!PIR & !US & !PHY), and PIROccupiedToUnoccupiedDelay is supported, then TH writes HoldTimeMin to DUT's HoldTime attribute, otherwise skip 6a, 6b.", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "6a" + }, + { + "description": "TH writes DUT's PIROccupiedToUnoccupiedDelay attribute with HoldTimeMax, then TH reads DUT's PIROccupiedToUnoccupiedDelay and HoldTime attributes.", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "6b" + }, + { + "description": "If DUT FeatureMap has US, and UltrasonicOccupiedToUnoccupiedDelay is supported, then TH writes HoldTimeMin to DUT's HoldTime attribute, otherwise skip 7a, 7b.", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "7a" + }, + { + "description": "TH writes DUT UltrasonicOccupiedToUnoccupiedDelay attribute with HoldTimeMax, then TH reads DUT UltrasonicOccupiedToUnoccupiedDelay and HoldTime attributes.", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "7b" + }, + { + "description": "If DUT FeatureMap has PHY, and PhysicalContactOccupiedToUnoccupiedDelay is supported, then TH writes HoldTimeMin to HoldTime attribute, otherwise skip 8a, 8b.", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "8a" + }, + { + "description": "TH writes DUT PhysicalContactOccupiedToUnoccupiedDelay attribute with HoldTimeMax, then TH reads DUT PhysicalContactOccupiedToUnoccupiedDelay and HoldTime attributes.", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "8b" + } + ] + }, + { + "class_name": "TC_OCC_3_1", + "desc": "[TC-OCC-3.1] Primary functionality with server as DUT", + "function": "test_TC_OCC_3_1", + "path": "sdk/TC_OCC_3_1", + "pics": [ + "OCC.S" + ], + "steps": [ + { + "description": "Commission DUT to TH.", + "expectation": "", + "is_commissioning": true, + "test_plan_number": 1 + }, + { + "description": "If HoldTime is supported, TH writes HoldTime attribute to 10 sec on DUT.", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 2 + }, + { + "description": "Prompt operator to await until DUT occupancy changes to unoccupied state.", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 3 + }, + { + "description": "TH subscribes to Occupancy sensor attributes and events.", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 4 + }, + { + "description": "Prompt operator to trigger occupancy change.", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "5a" + }, + { + "description": "TH reads Occupancy attribute from DUT. Verify occupancy changed to occupied and Occupancy attribute was reported as occupied.", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "5b" + }, + { + "description": "If supported, verify OccupancyChangedEvent was reported as occupied.", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "5c" + }, + { + "description": "If HoldTime is supported, wait for HoldTime, otherwise prompt operator to wait until no longer occupied.", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 6 + }, + { + "description": "TH reads Occupancy attribute from DUT. Verify occupancy changed to unoccupied and Occupancy attribute was reported as unoccupied.", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "7a" + }, + { + "description": "If supported, verify OccupancyChangedEvent was reported as unoccupied.", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "7b" + } + ] + }, + { + "class_name": "TC_OCC_3_2", + "desc": "[TC-OCC-3.2] Subscription Report Verification with server as DUT", + "function": "test_TC_OCC_3_2", + "path": "sdk/TC_OCC_3_2", + "pics": [ + "OCC.S" + ], + "steps": [ + { + "description": "Commission DUT to TH if not already done", + "expectation": "", + "is_commissioning": true, + "test_plan_number": 1 + }, + { + "description": "TH establishes a wildcard subscription to all attributes on Occupancy Sensing Cluster on the endpoint under test. Subscription min interval = 0 and max interval = 30 seconds.", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 2 + }, + { + "description": "Prepare DUT to be unoccupied state.", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "3a" + }, + { + "description": "TH reads DUT Occupancy attribute.", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "3b" + }, + { + "description": "Trigger DUT to change the occupancy state.", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "3c" + }, + { + "description": "TH awaits a ReportDataMessage containing an attribute report for DUT Occupancy attribute.", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "3d" + }, + { + "description": "Check if DUT supports HoldTime attribute, If not supported, then stop and skip the rest of test cases.", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "4a" + }, + { + "description": "TH writes HoldTimeMin to HoldTime attribute.", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "4b" + }, + { + "description": "TH clears its report history and writes HoldTimeMax to HoldTime attribute.", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "4c" + }, + { + "description": "TH awaits a ReportDataMessage containing an attribute report for DUT HoldTime attribute and all legacy attributes supported.", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "4d" + } + ] + }, + { + "class_name": "TC_OPCREDS_3_1", + "desc": "test_TC_OPCREDS_3_1", + "function": "test_TC_OPCREDS_3_1", + "path": "sdk/TC_OPCREDS_3_1", + "pics": [], + "steps": [ + { + "description": "Run entire test", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 1 + } + ] + }, + { + "class_name": "TC_OPCREDS_3_2", + "desc": " Attribute-CurrentFabricIndex validation [DUTServer]", + "function": "test_TC_OPCREDS_3_2", + "path": "sdk/TC_OPCREDS_3_2", + "pics": [], + "steps": [ + { + "description": "Commission DUT to CR1 if not already done", + "expectation": "", + "is_commissioning": true, + "test_plan_number": 0 + }, + { + "description": "Create a new controller on a new fabric called CR2.\nCommission the new controller from CR1 as follows:\n\n- CR1 sends an ArmFailsafe command, followed by a CSRRequest command.\n- Generate credentials on CR2 using the returned CSR.\n- Save the RCAC as `rcac_CR2. Save the ICAC as `icac_CR2`. Save the NOC as `noc_CR2`. Save the IPK as ipk_CR2.\n- CR1 sends the AddTrustedRootCertificate command with `rcac_CR2`- CR1 sends the AddNOC command with the fields set as follows:\n * NOCValue: `noc_CR2`\n * ICACValue: `icac_CR2`\n * IPKValue: `ipk_CR2`\n * CaseAdminSubject: CR2 node ID\n * AdminVendorId: CR2 vendor ID\n- CR2 connects over CASE and sends the commissioning complete command\n. Save the FabricIndex from the NOCResponse as `fabric_index_CR2`.", + "expectation": "Verify the commissioning is successful.", + "is_commissioning": false, + "test_plan_number": 1 + }, + { + "description": "Create a new controller on a new fabric called CR3.\nCommission the new controller from CR1 as follows:\n\n- CR1 sends an ArmFailsafe command, followed by a CSRRequest command.\n- Generate credentials on CR3 using the returned CSR.\n- Save the RCAC as `rcac_CR3. Save the ICAC as `icac_CR3`. Save the NOC as `noc_CR3`. Save the IPK as ipk_CR3.\n- CR1 sends the AddTrustedRootCertificate command with `rcac_CR3`- CR1 sends the AddNOC command with the fields set as follows:\n * NOCValue: `noc_CR3`\n * ICACValue: `icac_CR3`\n * IPKValue: `ipk_CR3`\n * CaseAdminSubject: CR3 node ID\n * AdminVendorId: CR3 vendor ID\n- CR3 connects over CASE and sends the commissioning complete command\n. Save the FabricIndex from the NOCResponse as `fabric_index_CR3`.", + "expectation": "Verify the commissioning is successful.", + "is_commissioning": false, + "test_plan_number": 2 + }, + { + "description": "CR2 reads the CurrentFabricIndex attribute", + "expectation": "Verify the returned value is `fabric_index_CR2`", + "is_commissioning": false, + "test_plan_number": 3 + }, + { + "description": "CR3 reads the CurrentFabricIndex attribute", + "expectation": "Verify the returned value is `fabric_index_CR3`", + "is_commissioning": false, + "test_plan_number": 4 + }, + { + "description": "CR2 reads the Fabrics attribute using a fabric-filtered read", + "expectation": "- Verify there is one entry returned. Verify FabricIndex matches `fabric_index_CR2`.\n- Verify the RootPublicKey matches the public key for rcac_CR2.\n- Verify the VendorID matches the vendor ID for CR2.\n- Verify the FabricID matches the fabricID for CR2", + "is_commissioning": false, + "test_plan_number": 5 + }, + { + "description": "CR3 reads the Fabrics attribute using a fabric-filtered read", + "expectation": "- Verify there is one entry returned. Verify FabricIndex matches `fabric_index_CR3`.\n- Verify the RootPublicKey matches the public key for rcac_CR3.\n- Verify the VendorID matches the vendor ID for CR3.\n- Verify the FabricID matches the fabricID for CR3", + "is_commissioning": false, + "test_plan_number": 6 + }, + { + "description": "CR1 sends the RemoveFabric command to the Node Operational Credentials cluster with the FabricIndex set to fabric_index_CR2.", + "expectation": "Verify DUT responds w/ status SUCCESS", + "is_commissioning": false, + "test_plan_number": 7 + }, + { + "description": "CR1 sends the RemoveFabric command to the Node Operational Credentials cluster with the FabricIndex set to fabric_index_CR3.", + "expectation": "Verify DUT responds w/ status SUCCESS", + "is_commissioning": false, + "test_plan_number": 8 + } + ] + }, + { + "class_name": "TC_OPSTATE_2_1", + "desc": "test_TC_OPSTATE_2_1", + "function": "test_TC_OPSTATE_2_1", + "path": "sdk/TC_OPSTATE_2_1", + "pics": [ + "OPSTATE.S" + ], + "steps": [ + { + "description": "Commissioning, already done", + "expectation": "", + "is_commissioning": true, + "test_plan_number": 1 + }, + { + "description": "TH reads from the DUT the PhaseList attribute", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 2 + }, + { + "description": "TH reads from the DUT the CurrentPhase attribute", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 3 + }, + { + "description": "TH reads from the DUT the CountdownTime attribute", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 4 + }, + { + "description": "TH reads from the DUT the OperationalStateList attribute", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 5 + }, + { + "description": "TH reads from the DUT the OperationalState attribute", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 6 + }, + { + "description": "Manually put the device in the Stopped(0x00) operational state", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "6a" + }, + { + "description": "TH reads from the DUT the OperationalState attribute", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "6b" + }, + { + "description": "Manually put the device in the Running(0x01) operational state", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "6c" + }, + { + "description": "TH reads from the DUT the OperationalState attribute", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "6d" + }, + { + "description": "Manually put the device in the Paused(0x02) operational state", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "6e" + }, + { + "description": "TH reads from the DUT the OperationalState attribute", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "6f" + }, + { + "description": "Manually put the device in the Error(0x03) operational state", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "6g" + }, + { + "description": "TH reads from the DUT the OperationalState attribute", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "6h" + }, + { + "description": "TH reads from the DUT the OperationalError attribute", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 7 + }, + { + "description": "Manually put the device in the NoError(0x00) error state", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "7a" + }, + { + "description": "TH reads from the DUT the OperationalError attribute", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "7b" + }, + { + "description": "Manually put the device in the UnableToStartOrResume(0x01) error state", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "7c" + }, + { + "description": "TH reads from the DUT the OperationalError attribute", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "7d" + }, + { + "description": "Manually put the device in the UnableToCompleteOperation(0x02) error state", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "7e" + }, + { + "description": "TH reads from the DUT the OperationalError attribute", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "7f" + }, + { + "description": "Manually put the device in the CommandInvalidInState(0x03) error state", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "7g" + }, + { + "description": "TH reads from the DUT the OperationalError attribute", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "7h" + } + ] + }, + { + "class_name": "TC_OPSTATE_2_2", + "desc": "test_TC_OPSTATE_2_2", + "function": "test_TC_OPSTATE_2_2", + "path": "sdk/TC_OPSTATE_2_2", + "pics": [ + "OPSTATE.S" + ], + "steps": [ + { + "description": "Commissioning, already done", + "expectation": "", + "is_commissioning": true, + "test_plan_number": 1 + }, + { + "description": "Manually put the DUT into a state wherein it can receive a Start Command", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 2 + }, + { + "description": "TH reads from the DUT the OperationalStateList attribute", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 3 + }, + { + "description": "TH sends Start command to the DUT", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 4 + }, + { + "description": "TH reads from the DUT the OperationalState attribute", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 5 + }, + { + "description": "TH reads from the DUT the OperationalError attribute", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 6 + }, + { + "description": "TH reads from the DUT the CountdownTime attribute", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 7 + }, + { + "description": "TH reads from the DUT the PhaseList attribute", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 8 + }, + { + "description": "TH reads from the DUT the CurrentPhase attribute", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 9 + }, + { + "description": "TH waits for {PIXIT.WAITTIME.COUNTDOWN}", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 10 + }, + { + "description": "TH reads from the DUT the CountdownTime attribute", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 11 + }, + { + "description": "TH sends Start command to the DUT", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 12 + }, + { + "description": "TH sends Stop command to the DUT", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 13 + }, + { + "description": "TH reads from the DUT the OperationalState attribute", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 14 + }, + { + "description": "TH sends Stop command to the DUT", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 15 + }, + { + "description": "Manually put the DUT into a state wherein it cannot receive a Start Command", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 16 + }, + { + "description": "TH sends Start command to the DUT", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 17 + } + ] + }, + { + "class_name": "TC_OPSTATE_2_3", + "desc": "test_TC_OPSTATE_2_3", + "function": "test_TC_OPSTATE_2_3", + "path": "sdk/TC_OPSTATE_2_3", + "pics": [ + "OPSTATE.S" + ], + "steps": [ + { + "description": "Commissioning, already done", + "expectation": "", + "is_commissioning": true, + "test_plan_number": 1 + }, + { + "description": "Manually put the DUT into a state wherein it can receive a Pause Command", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 2 + }, + { + "description": "TH reads from the DUT the OperationalStateList attribute", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 3 + }, + { + "description": "TH sends Pause command to the DUT", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 4 + }, + { + "description": "TH reads from the DUT the OperationalState attribute", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 5 + }, + { + "description": "TH reads from the DUT the CountdownTime attribute", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 6 + }, + { + "description": "TH waits for {PIXIT.WAITTIME.COUNTDOWN}", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 7 + }, + { + "description": "TH reads from the DUT the CountdownTime attribute", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 8 + }, + { + "description": "TH sends Pause command to the DUT", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 9 + }, + { + "description": "TH sends Resume command to the DUT", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 10 + }, + { + "description": "TH reads from the DUT the OperationalState attribute", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 11 + }, + { + "description": "TH sends Resume command to the DUT", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 12 + }, + { + "description": "Manually put the device in the Stopped(0x00) operational state", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 13 + }, + { + "description": "TH sends Pause command to the DUT", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 14 + }, + { + "description": "TH sends Resume command to the DUT", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 15 + }, + { + "description": "Manually put the device in the Error(0x03) operational state", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 16 + }, + { + "description": "TH sends Pause command to the DUT", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 17 + }, + { + "description": "TH sends Resume command to the DUT", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 18 + } + ] + }, + { + "class_name": "TC_OPSTATE_2_4", + "desc": "test_TC_OPSTATE_2_4", + "function": "test_TC_OPSTATE_2_4", + "path": "sdk/TC_OPSTATE_2_4", + "pics": [ + "OPSTATE.S" + ], + "steps": [ + { + "description": "Commissioning, already done", + "expectation": "", + "is_commissioning": true, + "test_plan_number": 1 + }, + { + "description": "Set up a subscription to the OperationalError event", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 2 + }, + { + "description": "At the DUT take the vendor defined action to generate an OperationalError event", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 3 + }, + { + "description": "TH reads from the DUT the OperationalState attribute", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 4 + } + ] + }, + { + "class_name": "TC_OPSTATE_2_5", + "desc": "test_TC_OPSTATE_2_5", + "function": "test_TC_OPSTATE_2_5", + "path": "sdk/TC_OPSTATE_2_5", + "pics": [ + "OPSTATE.S" + ], + "steps": [ + { + "description": "Commissioning, already done", + "expectation": "", + "is_commissioning": true, + "test_plan_number": 1 + }, + { + "description": "Set up a subscription to the OperationCompletion event", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 2 + }, + { + "description": "Manually put the DUT into a state wherein it can receive a Start Command", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 3 + }, + { + "description": "TH sends Start command to the DUT", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 4 + }, + { + "description": "TH reads from the DUT the CountdownTime attribute", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 5 + }, + { + "description": "TH reads from the DUT the OperationalState attribute", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 6 + }, + { + "description": "TH waits for initial-countdown-time", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 7 + }, + { + "description": "TH sends Stop command to the DUT", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 8 + }, + { + "description": "TH waits for OperationCompletion event", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 9 + }, + { + "description": "TH reads from the DUT the OperationalState attribute", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 10 + }, + { + "description": "Restart DUT", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 11 + }, + { + "description": "TH waits for {PIXIT.WAITTIME.REBOOT}", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 12 + }, + { + "description": "TH sends Start command to the DUT", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 13 + }, + { + "description": "TH reads from the DUT the OperationalState attribute", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 14 + }, + { + "description": "TH sends Pause command to the DUT", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 15 + }, + { + "description": "TH reads from the DUT the OperationalState attribute", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 16 + }, + { + "description": "TH waits for half of initial-countdown-time", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 17 + }, + { + "description": "TH sends Resume command to the DUT", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 18 + }, + { + "description": "TH reads from the DUT the OperationalState attribute", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 19 + }, + { + "description": "TH waits for initial-countdown-time", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 20 + }, + { + "description": "TH sends Stop command to the DUT", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 21 + }, + { + "description": "TH waits for OperationCompletion event", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 22 + } + ] + }, + { + "class_name": "TC_OPSTATE_2_6", + "desc": "test_TC_OPSTATE_2_6", + "function": "test_TC_OPSTATE_2_6", + "path": "sdk/TC_OPSTATE_2_6", + "pics": [ + "OPSTATE.S", + "OPSTATE.S.A0002" + ], + "steps": [ + { + "description": "Commissioning, already done", + "expectation": "", + "is_commissioning": true, + "test_plan_number": 1 + }, + { + "description": "Subscribe to CountdownTime attribute", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 2 + }, + { + "description": "Manually put the DUT into a state where it will use the CountdownTime attribute, the initial value of the CountdownTime is greater than 30, and it will begin counting down the CountdownTime attribute. Test harness reads the CountdownTime attribute.", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 3 + }, + { + "description": "Test harness reads the CountdownTime attribute.", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 4 + }, + { + "description": "Over a period of 30 seconds, TH counts all report transactions with an attribute report for the CountdownTime attribute in numberOfReportsReceived", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 5 + }, + { + "description": "Test harness reads the CountdownTime attribute.", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 6 + }, + { + "description": "Until the current operation finishes, TH counts all report transactions with an attribute report for the CountdownTime attribute in numberOfReportsReceived and saves up to 5 such reports.", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 7 + }, + { + "description": "Manually put the DUT into a state where it will use the CountdownTime attribute, the initial value of the CountdownTime is greater than 30, and it will begin counting down the CountdownTime attribute.Test harness reads the CountdownTime attribute.", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 8 + }, + { + "description": "TH reads from the DUT the OperationalState attribute", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 9 + }, + { + "description": "Test harness reads the CountdownTime attribute.", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 10 + }, + { + "description": "Manually put the device in the Paused(0x02) operational state", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 11 + } + ] + }, + { + "class_name": "TC_OVENOPSTATE_2_1", + "desc": "test_TC_OVENOPSTATE_2_1", + "function": "test_TC_OVENOPSTATE_2_1", + "path": "sdk/TC_OVENOPSTATE_2_1", + "pics": [ + "OVENOPSTATE.S" + ], + "steps": [ + { + "description": "Commissioning, already done", + "expectation": "", + "is_commissioning": true, + "test_plan_number": 1 + }, + { + "description": "TH reads from the DUT the PhaseList attribute", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 2 + }, + { + "description": "TH reads from the DUT the CurrentPhase attribute", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 3 + }, + { + "description": "TH reads from the DUT the CountdownTime attribute", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 4 + }, + { + "description": "TH reads from the DUT the OperationalStateList attribute", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 5 + }, + { + "description": "TH reads from the DUT the OperationalState attribute", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 6 + }, + { + "description": "Manually put the device in the Stopped(0x00) operational state", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "6a" + }, + { + "description": "TH reads from the DUT the OperationalState attribute", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "6b" + }, + { + "description": "Manually put the device in the Running(0x01) operational state", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "6c" + }, + { + "description": "TH reads from the DUT the OperationalState attribute", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "6d" + }, + { + "description": "Manually put the device in the Paused(0x02) operational state", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "6e" + }, + { + "description": "TH reads from the DUT the OperationalState attribute", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "6f" + }, + { + "description": "Manually put the device in the Error(0x03) operational state", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "6g" + }, + { + "description": "TH reads from the DUT the OperationalState attribute", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "6h" + }, + { + "description": "TH reads from the DUT the OperationalError attribute", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 7 + }, + { + "description": "Manually put the device in the NoError(0x00) error state", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "7a" + }, + { + "description": "TH reads from the DUT the OperationalError attribute", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "7b" + }, + { + "description": "Manually put the device in the UnableToStartOrResume(0x01) error state", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "7c" + }, + { + "description": "TH reads from the DUT the OperationalError attribute", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "7d" + }, + { + "description": "Manually put the device in the UnableToCompleteOperation(0x02) error state", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "7e" + }, + { + "description": "TH reads from the DUT the OperationalError attribute", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "7f" + }, + { + "description": "Manually put the device in the CommandInvalidInState(0x03) error state", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "7g" + }, + { + "description": "TH reads from the DUT the OperationalError attribute", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "7h" + } + ] + }, + { + "class_name": "TC_OVENOPSTATE_2_2", + "desc": "test_TC_OVENOPSTATE_2_2", + "function": "test_TC_OVENOPSTATE_2_2", + "path": "sdk/TC_OVENOPSTATE_2_2", + "pics": [ + "OVENOPSTATE.S" + ], + "steps": [ + { + "description": "Commissioning, already done", + "expectation": "", + "is_commissioning": true, + "test_plan_number": 1 + }, + { + "description": "Manually put the DUT into a state wherein it can receive a Start Command", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 2 + }, + { + "description": "TH reads from the DUT the OperationalStateList attribute", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 3 + }, + { + "description": "TH sends Start command to the DUT", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 4 + }, + { + "description": "TH reads from the DUT the OperationalState attribute", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 5 + }, + { + "description": "TH reads from the DUT the OperationalError attribute", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 6 + }, + { + "description": "TH reads from the DUT the CountdownTime attribute", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 7 + }, + { + "description": "TH reads from the DUT the PhaseList attribute", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 8 + }, + { + "description": "TH reads from the DUT the CurrentPhase attribute", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 9 + }, + { + "description": "TH waits for {PIXIT.WAITTIME.COUNTDOWN}", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 10 + }, + { + "description": "TH reads from the DUT the CountdownTime attribute", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 11 + }, + { + "description": "TH sends Start command to the DUT", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 12 + }, + { + "description": "TH sends Stop command to the DUT", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 13 + }, + { + "description": "TH reads from the DUT the OperationalState attribute", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 14 + }, + { + "description": "TH sends Stop command to the DUT", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 15 + }, + { + "description": "Manually put the DUT into a state wherein it cannot receive a Start Command", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 16 + }, + { + "description": "TH sends Start command to the DUT", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 17 + } + ] + }, + { + "class_name": "TC_OVENOPSTATE_2_3", + "desc": "test_TC_OVENOPSTATE_2_3", + "function": "test_TC_OVENOPSTATE_2_3", + "path": "sdk/TC_OVENOPSTATE_2_3", + "pics": [ + "OVENOPSTATE.S" + ], + "steps": [ + { + "description": "Commissioning, already done", + "expectation": "", + "is_commissioning": true, + "test_plan_number": 1 + }, + { + "description": "Manually put the DUT into a state wherein it can receive a Pause Command", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 2 + }, + { + "description": "TH reads from the DUT the OperationalStateList attribute", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 3 + }, + { + "description": "TH sends Pause command to the DUT", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 4 + }, + { + "description": "TH reads from the DUT the OperationalState attribute", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 5 + }, + { + "description": "TH reads from the DUT the CountdownTime attribute", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 6 + }, + { + "description": "TH waits for {PIXIT.WAITTIME.COUNTDOWN}", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 7 + }, + { + "description": "TH reads from the DUT the CountdownTime attribute", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 8 + }, + { + "description": "TH sends Pause command to the DUT", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 9 + }, + { + "description": "TH sends Resume command to the DUT", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 10 + }, + { + "description": "TH reads from the DUT the OperationalState attribute", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 11 + }, + { + "description": "TH sends Resume command to the DUT", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 12 + }, + { + "description": "Manually put the device in the Stopped(0x00) operational state", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 13 + }, + { + "description": "TH sends Pause command to the DUT", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 14 + }, + { + "description": "TH sends Resume command to the DUT", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 15 + }, + { + "description": "Manually put the device in the Error(0x03) operational state", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 16 + }, + { + "description": "TH sends Pause command to the DUT", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 17 + }, + { + "description": "TH sends Resume command to the DUT", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 18 + } + ] + }, + { + "class_name": "TC_OVENOPSTATE_2_4", + "desc": "test_TC_OVENOPSTATE_2_4", + "function": "test_TC_OVENOPSTATE_2_4", + "path": "sdk/TC_OVENOPSTATE_2_4", + "pics": [ + "OVENOPSTATE.S" + ], + "steps": [ + { + "description": "Commissioning, already done", + "expectation": "", + "is_commissioning": true, + "test_plan_number": 1 + }, + { + "description": "Set up a subscription to the OperationalError event", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 2 + }, + { + "description": "At the DUT take the vendor defined action to generate an OperationalError event", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 3 + }, + { + "description": "TH reads from the DUT the OperationalState attribute", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 4 + } + ] + }, + { + "class_name": "TC_OVENOPSTATE_2_5", + "desc": "test_TC_OVENOPSTATE_2_5", + "function": "test_TC_OVENOPSTATE_2_5", + "path": "sdk/TC_OVENOPSTATE_2_5", + "pics": [ + "OVENOPSTATE.S" + ], + "steps": [ + { + "description": "Commissioning, already done", + "expectation": "", + "is_commissioning": true, + "test_plan_number": 1 + }, + { + "description": "Set up a subscription to the OperationCompletion event", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 2 + }, + { + "description": "Manually put the DUT into a state wherein it can receive a Start Command", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 3 + }, + { + "description": "TH sends Start command to the DUT", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 4 + }, + { + "description": "TH reads from the DUT the CountdownTime attribute", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 5 + }, + { + "description": "TH reads from the DUT the OperationalState attribute", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 6 + }, + { + "description": "TH waits for initial-countdown-time", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 7 + }, + { + "description": "TH sends Stop command to the DUT", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 8 + }, + { + "description": "TH waits for OperationCompletion event", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 9 + }, + { + "description": "TH reads from the DUT the OperationalState attribute", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 10 + }, + { + "description": "Restart DUT", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 11 + }, + { + "description": "TH waits for {PIXIT.WAITTIME.REBOOT}", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 12 + }, + { + "description": "TH sends Start command to the DUT", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 13 + }, + { + "description": "TH reads from the DUT the OperationalState attribute", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 14 + }, + { + "description": "TH sends Pause command to the DUT", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 15 + }, + { + "description": "TH reads from the DUT the OperationalState attribute", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 16 + }, + { + "description": "TH waits for half of initial-countdown-time", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 17 + }, + { + "description": "TH sends Resume command to the DUT", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 18 + }, + { + "description": "TH reads from the DUT the OperationalState attribute", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 19 + }, + { + "description": "TH waits for initial-countdown-time", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 20 + }, + { + "description": "TH sends Stop command to the DUT", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 21 + }, + { + "description": "TH waits for OperationCompletion event", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 22 + } + ] + }, + { + "class_name": "TC_OVENOPSTATE_2_6", + "desc": "test_TC_OVENOPSTATE_2_6", + "function": "test_TC_OVENOPSTATE_2_6", + "path": "sdk/TC_OVENOPSTATE_2_6", + "pics": [ + "OVENOPSTATE.S", + "OVENOPSTATE.S.A0002" + ], + "steps": [ + { + "description": "Commissioning, already done", + "expectation": "", + "is_commissioning": true, + "test_plan_number": 1 + }, + { + "description": "Subscribe to CountdownTime attribute", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 2 + }, + { + "description": "Manually put the DUT into a state where it will use the CountdownTime attribute, the initial value of the CountdownTime is greater than 30, and it will begin counting down the CountdownTime attribute. Test harness reads the CountdownTime attribute.", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 3 + }, + { + "description": "Test harness reads the CountdownTime attribute.", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 4 + }, + { + "description": "Over a period of 30 seconds, TH counts all report transactions with an attribute report for the CountdownTime attribute in numberOfReportsReceived", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 5 + }, + { + "description": "Test harness reads the CountdownTime attribute.", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 6 + }, + { + "description": "Until the current operation finishes, TH counts all report transactions with an attribute report for the CountdownTime attribute in numberOfReportsReceived and saves up to 5 such reports.", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 7 + }, + { + "description": "Manually put the DUT into a state where it will use the CountdownTime attribute, the initial value of the CountdownTime is greater than 30, and it will begin counting down the CountdownTime attribute.Test harness reads the CountdownTime attribute.", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 8 + }, + { + "description": "TH reads from the DUT the OperationalState attribute", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 9 + }, + { + "description": "Test harness reads the CountdownTime attribute.", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 10 + }, + { + "description": "Manually put the device in the Paused(0x02) operational state", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 11 + } + ] + }, + { + "class_name": "TC_PS_2_3", + "desc": "test_TC_PS_2_3", + "function": "test_TC_PS_2_3", + "path": "sdk/TC_PS_2_3", + "pics": [ + "PWRTL.S" + ], + "steps": [ + { + "description": "Commission DUT to TH", + "expectation": "", + "is_commissioning": true, + "test_plan_number": 1 + }, + { + "description": "Subscribe to all attributes of the PowerSource Cluster", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 2 + }, + { + "description": "Accumulate all attribute reports on the endpoint under test for 30 seconds", + "expectation": "For each of the attributes in the set of BatTimeToFullCharge, BatPercentRemaining and BatTimeRemaining, verify that there are not more than 4 reports per attribute where the value is non-null over the period of accumulation.", + "is_commissioning": false, + "test_plan_number": 3 + } + ] + }, + { + "class_name": "TC_PWRTL_2_1", + "desc": "test_TC_PWRTL_2_1", + "function": "test_TC_PWRTL_2_1", + "path": "sdk/TC_PWRTL_2_1", + "pics": [ + "PWRTL.S" + ], + "steps": [ + { + "description": "Run entire test", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 1 + } + ] + }, + { + "class_name": "TC_RR_1_1", + "desc": "test_TC_RR_1_1", + "function": "test_TC_RR_1_1", + "path": "sdk/TC_RR_1_1", + "pics": [], + "steps": [ + { + "description": "Run entire test", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 1 + } + ] + }, + { + "class_name": "TC_RVCCLEANM_1_2", + "desc": "test_TC_RVCCLEANM_1_2", + "function": "test_TC_RVCCLEANM_1_2", + "path": "sdk/TC_RVCCLEANM_1_2", + "pics": [ + "RVCCLEANM.S" + ], + "steps": [ + { + "description": "Run entire test", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 1 + } + ] + }, + { + "class_name": "TC_RVCCLEANM_2_1", + "desc": "test_TC_RVCCLEANM_2_1", + "function": "test_TC_RVCCLEANM_2_1", + "path": "sdk/TC_RVCCLEANM_2_1", + "pics": [ + "RVCCLEANM.S" + ], + "steps": [ + { + "description": "Run entire test", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 1 + } + ] + }, + { + "class_name": "TC_RVCCLEANM_2_2", + "desc": "test_TC_RVCCLEANM_2_2", + "function": "test_TC_RVCCLEANM_2_2", + "path": "sdk/TC_RVCCLEANM_2_2", + "pics": [ + "RVCCLEANM.S" + ], + "steps": [ + { + "description": "Run entire test", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 1 + } + ] + }, + { + "class_name": "TC_RVCOPSTATE_2_1", + "desc": "test_TC_RVCOPSTATE_2_1", + "function": "test_TC_RVCOPSTATE_2_1", + "path": "sdk/TC_RVCOPSTATE_2_1", + "pics": [], + "steps": [ + { + "description": "Run entire test", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 1 + } + ] + }, + { + "class_name": "TC_RVCOPSTATE_2_3", + "desc": "test_TC_RVCOPSTATE_2_3", + "function": "test_TC_RVCOPSTATE_2_3", + "path": "sdk/TC_RVCOPSTATE_2_3", + "pics": [ + "RVCOPSTATE.S" + ], + "steps": [ + { + "description": "Run entire test", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 1 + } + ] + }, + { + "class_name": "TC_RVCOPSTATE_2_4", + "desc": "test_TC_RVCOPSTATE_2_4", + "function": "test_TC_RVCOPSTATE_2_4", + "path": "sdk/TC_RVCOPSTATE_2_4", + "pics": [ + "RVCOPSTATE.S" + ], + "steps": [ + { + "description": "Run entire test", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 1 + } + ] + }, + { + "class_name": "TC_RVCRUNM_1_2", + "desc": "test_TC_RVCRUNM_1_2", + "function": "test_TC_RVCRUNM_1_2", + "path": "sdk/TC_RVCRUNM_1_2", + "pics": [ + "RVCRUNM.S" + ], + "steps": [ + { + "description": "Run entire test", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 1 + } + ] + }, + { + "class_name": "TC_RVCRUNM_2_1", + "desc": "test_TC_RVCRUNM_2_1", + "function": "test_TC_RVCRUNM_2_1", + "path": "sdk/TC_RVCRUNM_2_1", + "pics": [ + "RVCRUNM.S" + ], + "steps": [ + { + "description": "Run entire test", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 1 + } + ] + }, + { + "class_name": "TC_RVCRUNM_2_2", + "desc": "test_TC_RVCRUNM_2_2", + "function": "test_TC_RVCRUNM_2_2", + "path": "sdk/TC_RVCRUNM_2_2", + "pics": [ + "RVCRUNM.S" + ], + "steps": [ + { + "description": "Run entire test", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 1 + } + ] + }, + { + "class_name": "TC_SC_3_6", + "desc": "test_TC_SC_3_6", + "function": "test_TC_SC_3_6", + "path": "sdk/TC_SC_3_6", + "pics": [], + "steps": [ + { + "description": "Run entire test", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 1 + } + ] + }, + { + "class_name": "TC_SC_7_1", + "desc": "test_TC_SC_7_1", + "function": "test_TC_SC_7_1", + "path": "sdk/TC_SC_7_1", + "pics": [], + "steps": [ + { + "description": "TH establishes a PASE session to DUT1 using the provided setup code and reads the TrustedRootCertificates attribute from the operational credentials cluster over PASE", + "expectation": "List should be empty as the DUT should be in factory reset ", + "is_commissioning": false, + "test_plan_number": 1 + }, + { + "description": "TH establishes a PASE session to DUT2 using the provided setup code and reads the TrustedRootCertificates attribute from the operational credentials cluster over PASE", + "expectation": "List should be empty as the DUT should be in factory reset ", + "is_commissioning": false, + "test_plan_number": 2 + }, + { + "description": "TH compares the discriminators from the provided setup codes", + "expectation": "Discriminators do not match", + "is_commissioning": false, + "test_plan_number": 3 + } + ] + }, + { + "class_name": "TC_SEAR_1_2", + "desc": "test_TC_SEAR_1_2", + "function": "test_TC_SEAR_1_2", + "path": "sdk/TC_SEAR_1_2", + "pics": [], + "steps": [ + { + "description": "Run entire test", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 1 + } + ] + }, + { + "class_name": "TC_SEAR_1_3", + "desc": "test_TC_SEAR_1_3", + "function": "test_TC_SEAR_1_3", + "path": "sdk/TC_SEAR_1_3", + "pics": [], + "steps": [ + { + "description": "Run entire test", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 1 + } + ] + }, + { + "class_name": "TC_SEAR_1_4", + "desc": "test_TC_SEAR_1_4", + "function": "test_TC_SEAR_1_4", + "path": "sdk/TC_SEAR_1_4", + "pics": [], + "steps": [ + { + "description": "Run entire test", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 1 + } + ] + }, + { + "class_name": "TC_SEAR_1_5", + "desc": "test_TC_SEAR_1_5", + "function": "test_TC_SEAR_1_5", + "path": "sdk/TC_SEAR_1_5", + "pics": [], + "steps": [ + { + "description": "Run entire test", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 1 + } + ] + }, + { + "class_name": "TC_SEAR_1_6", + "desc": "test_TC_SEAR_1_6", + "function": "test_TC_SEAR_1_6", + "path": "sdk/TC_SEAR_1_6", + "pics": [], + "steps": [ + { + "description": "Run entire test", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 1 + } + ] + }, + { + "class_name": "TC_SwitchTests", + "desc": "test_TC_SWTCH_2_2", + "function": "test_TC_SWTCH_2_2", + "path": "sdk/TC_SWTCH", + "pics": [], + "steps": [ + { + "description": "Commission DUT if not already done", + "expectation": "", + "is_commissioning": true, + "test_plan_number": 1 + }, + { + "description": "Set up subscription to all events and attributes of Switch cluster on the endpoint", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 2 + }, + { + "description": "Operator sets switch to first position on the DUT", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 3 + }, + { + "description": "TH reads the CurrentPosition attribute from the DUT.", + "expectation": "Verify that the value is 0.", + "is_commissioning": false, + "test_plan_number": 4 + }, + { + "description": "Operator sets switch to second position (one) on the DUT", + "expectation": "Verify that the TH receives SwitchLatched event with NewPosition set to 1 from the DUT.", + "is_commissioning": false, + "test_plan_number": 5 + }, + { + "description": "TH reads the CurrentPosition attribute from the DUT", + "expectation": "Verify that the value is 1, and that a subscription report was received for that change.", + "is_commissioning": false, + "test_plan_number": 6 + }, + { + "description": "If there are more than 2 positions, test subsequent positions of the DUT", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 7 + }, + { + "description": "Operator sets switch to first position on the DUT.", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 8 + }, + { + "description": "Wait 10 seconds for event reports stable.Verify that last SwitchLatched event received is for NewPosition 0.", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 9 + }, + { + "description": "TH reads the CurrentPosition attribute from the DUT", + "expectation": "Verify that the value is 0, and that a subscription report was received for that change.", + "is_commissioning": false, + "test_plan_number": 10 + } + ] + }, + { + "class_name": "TC_SwitchTests", + "desc": "test_TC_SWTCH_2_3", + "function": "test_TC_SWTCH_2_3", + "path": "sdk/TC_SWTCH", + "pics": [], + "steps": [ + { + "description": "Commission DUT if not already done", + "expectation": "", + "is_commissioning": true, + "test_plan_number": 1 + }, + { + "description": "Set up subscription to all events of Switch cluster on the endpoint", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 2 + }, + { + "description": "Operator does not operate switch on the DUT", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 3 + }, + { + "description": "TH reads the CurrentPosition attribute from the DUT", + "expectation": "Verify that the value is 0", + "is_commissioning": false, + "test_plan_number": 4 + }, + { + "description": "Operator operates switch (keep it pressed, and wait at least 5 seconds)", + "expectation": "Verify that the TH receives InitialPress event with NewPosition set to 1 on the DUT", + "is_commissioning": false, + "test_plan_number": 5 + }, + { + "description": "TH reads the CurrentPosition attribute from the DUT", + "expectation": "Verify that the value is 1", + "is_commissioning": false, + "test_plan_number": 6 + }, + { + "description": "Operator releases switch on the DUT", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 7 + }, + { + "description": "If the DUT implements the MSR feature and does not implement the MSL feature, verify that the TH receives ShortRelease event with NewPosition set to 0 on the DUT", + "expectation": "Event received", + "is_commissioning": false, + "test_plan_number": "8a" + }, + { + "description": "If the DUT implements the MSR feature and the MSL feature, verify that the TH receives LongRelease event with NewPosition set to 0 on the DUT", + "expectation": "Event received", + "is_commissioning": false, + "test_plan_number": "8b" + }, + { + "description": "If the DUT implements the AS feature, verify that the TH does not receive ShortRelease event on the DUT", + "expectation": "No event received", + "is_commissioning": false, + "test_plan_number": "8c" + }, + { + "description": "TH reads the CurrentPosition attribute from the DUT", + "expectation": "Verify that the value is 0", + "is_commissioning": false, + "test_plan_number": 9 + } + ] + }, + { + "class_name": "TC_SwitchTests", + "desc": "[TC-SWTCH-2.4] Momentary Switch Long Press Verification", + "function": "test_TC_SWTCH_2_4", + "path": "sdk/TC_SWTCH", + "pics": [], + "steps": [ + { + "description": "Commission DUT if not already done", + "expectation": "", + "is_commissioning": true, + "test_plan_number": 1 + }, + { + "description": "Set up subscription to all events and attributes of Switch cluster on the endpoint", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 2 + }, + { + "description": "Operator does not operate switch on the DUT", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 3 + }, + { + "description": "TH reads the CurrentPosition attribute from the DUT", + "expectation": "Verify that the value is 0", + "is_commissioning": false, + "test_plan_number": 4 + }, + { + "description": "Operator operates switch (keep pressed for long time, e.g. 5 seconds) on the DUT, then release it", + "expectation": "\n * TH expects receiving a subscription report of CurrentPosition 1, followed by a report of Current Position 0.\n * TH expects receiving at InitialPress event with NewPosition = 1.\n * if MSL feature is supported, TH expect receiving LongPress/LongRelease in that order.\n * if MS & (!MSL & !AS & !MSR & !MSM) features present, TH expects receiving no further events for 10 seconds after release.\n * if (MSR & !MSL) features present, TH expects receiving ShortRelease event.\n ", + "is_commissioning": false, + "test_plan_number": 5 + } + ] + }, + { + "class_name": "TC_SwitchTests", + "desc": "test_TC_SWTCH_2_5", + "function": "test_TC_SWTCH_2_5", + "path": "sdk/TC_SWTCH", + "pics": [], + "steps": [ + { + "description": "Commission DUT if not already done", + "expectation": "", + "is_commissioning": true, + "test_plan_number": 1 + }, + { + "description": "Set up a subscription to all Switch cluster events", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 2 + }, + { + "description": "Operate does not operate the switch on the DUT", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 3 + }, + { + "description": "Operator operates switch (press briefly) associated with position 1 on the DUT then release switch from DUT", + "expectation": "\n\n * Verify that the TH receives InitialPress event with NewPosition set to 1 from the DUT\n * Verify that the TH receives ShortRelease event with PreviousPosition set to 1 from the DUT\n ", + "is_commissioning": false, + "test_plan_number": "4a" + }, + { + "description": "Operator does not operate switch on the DUT", + "expectation": "TH receives MultiPressComplete event with PreviousPosition set to 1 and TotalNumberOfPressesCounted set to 1 from the DUT", + "is_commissioning": false, + "test_plan_number": "4b" + }, + { + "description": "Operator repeat step 4a 2 times quickly", + "expectation": "\n\n * Verify that the TH receives InitialPress event with NewPosition set to 1 from the DUT\n * Verify that the TH receives ShortRelease event with PreviousPosition set to 1 from the DUT\n * Verify that the TH receives InitialPress event with NewPosition set to 1 from the DUT\n * Verify that the TH receives MultiPressOngoing event with NewPosition set to 1 and CurrentNumberOfPressesCounted set to 2 from the DUT\n * Verify that the TH receives ShortRelease event with PreviousPosition set to 1 from the DUT +\n\n The events sequence SHALL follow the same sequence as above\n ", + "is_commissioning": false, + "test_plan_number": "5a" + }, + { + "description": "Operator does not operate switch on the DUT", + "expectation": "Verify that the TH receives MultiPressComplete event with PreviousPosition set to 1 and TotalNumberOfPressesCounted set to 2 from the DUT", + "is_commissioning": false, + "test_plan_number": "5b" + }, + { + "description": "If MultiPressMax == 2 (see 2c of TC-SWTCH-2.1), skip steps 6b .. 6c", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "6a" + }, + { + "description": "Operator repeat step 4a 3 times quickly", + "expectation": "\n * Verify that the TH receives InitialPress event with NewPosition set to 1 from the DUT\n * If MSR supported, Verify that the TH receives ShortRelease event with PreviousPosition set to 1 from the DUT\n * Verify that the TH receives InitialPress event with NewPosition set to 1 from the DUT\n * Verify that the TH receives MultiPressOngoing event with NewPosition set to 1 and CurrentNumberOfPressesCounted set to 2 from the DUT\n * If MSR supported, Verify that the TH receives ShortRelease event with PreviousPosition set to 1 from the DUT\n * Verify that the TH receives InitialPress event with NewPosition set to 1 from the DUT\n * Verify that the TH receives MultiPressOngoing event with NewPosition set to 1 and CurrentNumberOfPressesCounted set to 3 from the DUT\n * If MSR supported, Verify that the TH receives ShortRelease event with PreviousPosition set to 1 from the DUT +\n\n The events sequence from the subscription SHALL follow the same sequence as expressed above, in the exact order of events specified.\n ", + "is_commissioning": false, + "test_plan_number": "6b" + }, + { + "description": "Operator does not operate switch on the DUT for 5 seconds", + "expectation": "Verify that the TH receives MultiPressComplete event with PreviousPosition set to 1 and TotalNumberOfPressesCounted set to 3 from the DUT", + "is_commissioning": false, + "test_plan_number": "6c" + }, + { + "description": "Set up subscription to all Switch cluster events", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 7 + }, + { + "description": "\n Operator operates switch in below sequence:\n 1. Operator operates switch (press briefly) associated with position 1 on the DUT then release switch from DUT\n 2. Operator operates switch (keep pressed for long time, e.g. 5 seconds) on the DUT immediately after the previous step\n 3. Operator releases switch from the DUT\n ", + "expectation": "\n\n * Verify that the TH receives InitialPress event with NewPosition set to 1 from the DUT\n * If MSR supported, Verify that the TH receives ShortRelease event with PreviousPosition set to 1 from the DUT\n * Verify that the TH receives InitialPress event with NewPosition set to 1 from the DUT\n\n * Verify that the TH receives MultiPressOngoing event with NewPosition set to 1 and CurrentNumberOfPressesCounted set to 2 from the DUT\n * If MSR supported, verify that the TH receives ShortRelease event with PreviousPosition set to 1 from the DUT\n * Verify that the TH does not receive LongPress event from the DUT\n * Verify that the TH does not receive LongRelease event from the DUT\n\n The events sequence from the subscription SHALL follow the same sequence as expressed above, in the exact order of events specified.\n ", + "is_commissioning": false, + "test_plan_number": "8a" + }, + { + "description": "Operator does not operate switch on the DUT", + "expectation": "TH receives MultiPressComplete event with PreviousPosition set to 1 and TotalNumberOfPressesCounted set to 2 from the DUT", + "is_commissioning": false, + "test_plan_number": "8b" + }, + { + "description": "\n Operator operates switch in below sequence:\n 1. Operator operates switch (keep pressed for long time, e.g. 5 seconds) on the DUT\n 2. Operator releases switch from the DUT\n 3. Immediately after the previous step completes, Operator operates switch (press briefly) associated with position 1 on the DUT then release switch from DUT\n ", + "expectation": "\n\n * Verify that the TH receives InitialPress event with NewPosition set to 1 from the DUT\n * Verify that the TH receives (one, not more than one) LongPress event with NewPosition set to 1 from the DUT\n * Verify that the TH receives LongRelease event with PreviousPosition set to 1 from the DUT\n * Verify that the TH receives InitialPress event with NewPosition set to 1 from the DUT\n * If MSR supported, verify that the TH receives ShortRelease event with PreviousPosition set to 1 from the DUT\n * Verify that the TH does not receive MultiPressOngoing event from the DUT\n\n The events sequence from the subscription SHALL follow the same sequence as expressed above, in the exact order of events specified.\n ", + "is_commissioning": false, + "test_plan_number": "9a" + }, + { + "description": "Operator does not operate switch on the DUT", + "expectation": "TH receives MultiPressComplete event with PreviousPosition set to 1 and TotalNumberOfPressesCounted set to 2 from the DUT", + "is_commissioning": false, + "test_plan_number": "9b" + } + ] + }, + { + "class_name": "TC_SwitchTests", + "desc": "test_TC_SWTCH_2_6", + "function": "test_TC_SWTCH_2_6", + "path": "sdk/TC_SWTCH", + "pics": [], + "steps": [ + { + "description": "Commission DUT if not already done", + "expectation": "", + "is_commissioning": true, + "test_plan_number": 1 + }, + { + "description": "Set up subscription to all Switch cluster events", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 2 + }, + { + "description": "Operator does not operate switch on the DUT", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 3 + }, + { + "description": "Operator operates switch (press briefly) associated with position 1 on the DUT then release switch from DUT", + "expectation": "\n\n * Verify that the TH receives InitialPress event with NewPosition set to 1 from the DUT\n * Verify that the TH does not receive ShortRelease event from the DUT\n ", + "is_commissioning": false, + "test_plan_number": "4a" + }, + { + "description": "Operator does not operate switch on the DUT", + "expectation": "TH receives MultiPressComplete event with PreviousPosition set to 1 and TotalNumberOfPressesCounted set to 1 from the DUT", + "is_commissioning": false, + "test_plan_number": "4b" + }, + { + "description": "Operator repeat step 4a 2 times quickly", + "expectation": "\n\n * Verify that the TH receives InitialPress(one, not more than one) event with NewPosition set to 1 from the DUT\n * Verify that the TH does not receive ShortRelease event from the DUT\n * Verify that the TH does not receive MultiPressOngoing event from the DUT\n ", + "is_commissioning": false, + "test_plan_number": "5a" + }, + { + "description": "Operator does not operate switch on the DUT", + "expectation": "Verify that the TH receives MultiPressComplete event with PreviousPosition set to 1 and TotalNumberOfPressesCounted set to 2 from the DUT", + "is_commissioning": false, + "test_plan_number": "5b" + }, + { + "description": "Operator repeat step 4a MultiPressMax + 1(see 2c of TC-SWTCH-2.1) times quickly", + "expectation": "\n\n * Verify that the TH receives InitialPress(one, not more than one) event with NewPosition set to 1 from the DUT\n * Verify that the TH does not receive ShortRelease event from the DUT\n * Verify that the TH does not receive MultiPressOngoing event from the DUT\n ", + "is_commissioning": false, + "test_plan_number": "6a" + }, + { + "description": "Operator does not operate switch on the DUT", + "expectation": "Verify that the TH receives MultiPressComplete event with PreviousPosition set to 1 and TotalNumberOfPressesCounted set to 0 from the DUT", + "is_commissioning": false, + "test_plan_number": "6b" + }, + { + "description": "If the switch cluster does not implement the MomentarySwitchLongPress (MSL) feature, skip the remaining steps", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "7a" + }, + { + "description": "Set up subscription to all Switch cluster events", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "7b" + }, + { + "description": "\n Operator operates switch in below sequence:\n 1. Operator operates switch (press briefly) associated with position 1 on the DUT then release switch from DUT\n 2. Operator operates switch (keep pressed for long time, e.g. 5 seconds) on the DUT immediately after the previous step\n 3. Operator releases switch from the DUT\n ", + "expectation": "\n\n * Verify that the TH receives InitialPress(one, not more than one) event with NewPosition set to 1 from the DUT\n * Verify that the TH does not receive ShortRelease event from the DUT\n * Verify that the TH does not receive MultiPressOngoing event from the DUT\n * Verify that the TH does not receive LongPress event from the DUT\n * Verify that the TH does not receive LongRelease event from the DUT\n ", + "is_commissioning": false, + "test_plan_number": "8a" + }, + { + "description": "Operator does not operate switch on the DUT", + "expectation": "TH receives MultiPressComplete event with PreviousPosition set to 1 and TotalNumberOfPressesCounted set to 2 from the DUT", + "is_commissioning": false, + "test_plan_number": "8b" + }, + { + "description": "\n Operator operates switch in below sequence:\n\n 1. Operator operates switch (keep pressed for long time, e.g. 5 seconds) on the DUT\n 2. Operator releases switch from the DUT\n 3. Immediately after the previous step complete, Operator operates switch (press briefly) associated with position 1 on the DUT then release switch from DUT\n ", + "expectation": "\n\n * Verify that the TH receives InitialPress event with NewPosition set to 1 from the DUT\n * Verify that the TH receives (one, not more than one) LongPress event with NewPosition set to 1 from the DUT\n * Verify that the TH receives LongRelease event with PreviousPosition set to 1 from the DUT\n * Verify that the TH receives InitialPress event with NewPosition set to 1 from the DUT\n * Verify that the TH does not receive MultiPressOngoing event from the DUT\n * Verify that the TH does not receive ShortRelease event from the DUT\n\n The events sequence from the subscription SHALL follow the same sequence as expressed above, in the exact order of events specified.\n ", + "is_commissioning": false, + "test_plan_number": "9a" + }, + { + "description": "Operator does not operate switch on the DUTVerify that the TH receives MultiPressComplete event with PreviousPosition set to 1 and TotalNumberOfPressesCounted set to 1 from the DUT", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "9b" + } + ] + }, + { + "class_name": "TC_TIMESYNC_2_1", + "desc": "test_TC_TIMESYNC_2_1", + "function": "test_TC_TIMESYNC_2_1", + "path": "sdk/TC_TIMESYNC_2_1", + "pics": [], + "steps": [ + { + "description": "Run entire test", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 1 + } + ] + }, + { + "class_name": "TC_TIMESYNC_2_10", + "desc": "test_TC_TIMESYNC_2_10", + "function": "test_TC_TIMESYNC_2_10", + "path": "sdk/TC_TIMESYNC_2_10", + "pics": [ + "TIMESYNC.S.F00" + ], + "steps": [ + { + "description": "Run entire test", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 1 + } + ] + }, + { + "class_name": "TC_TIMESYNC_2_11", + "desc": "test_TC_TIMESYNC_2_11", + "function": "test_TC_TIMESYNC_2_11", + "path": "sdk/TC_TIMESYNC_2_11", + "pics": [ + "TIMESYNC.S.F00" + ], + "steps": [ + { + "description": "Run entire test", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 1 + } + ] + }, + { + "class_name": "TC_TIMESYNC_2_12", + "desc": "test_TC_TIMESYNC_2_12", + "function": "test_TC_TIMESYNC_2_12", + "path": "sdk/TC_TIMESYNC_2_12", + "pics": [ + "TIMESYNC.S.F00" + ], + "steps": [ + { + "description": "Run entire test", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 1 + } + ] + }, + { + "class_name": "TC_TIMESYNC_2_13", + "desc": "test_TC_TIMESYNC_2_13", + "function": "test_TC_TIMESYNC_2_13", + "path": "sdk/TC_TIMESYNC_2_13", + "pics": [ + "TIMESYNC.S.F01" + ], + "steps": [ + { + "description": "Run entire test", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 1 + } + ] + }, + { + "class_name": "TC_TIMESYNC_2_2", + "desc": "test_TC_TIMESYNC_2_2", + "function": "test_TC_TIMESYNC_2_2", + "path": "sdk/TC_TIMESYNC_2_2", + "pics": [ + "TIMESYNC.S" + ], + "steps": [ + { + "description": "Run entire test", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 1 + } + ] + }, + { + "class_name": "TC_TIMESYNC_2_4", + "desc": "test_TC_TIMESYNC_2_4", + "function": "test_TC_TIMESYNC_2_4", + "path": "sdk/TC_TIMESYNC_2_4", + "pics": [ + "TIMESYNC.S.F00" + ], + "steps": [ + { + "description": "Run entire test", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 1 + } + ] + }, + { + "class_name": "TC_TIMESYNC_2_5", + "desc": "test_TC_TIMESYNC_2_5", + "function": "test_TC_TIMESYNC_2_5", + "path": "sdk/TC_TIMESYNC_2_5", + "pics": [ + "TIMESYNC.S.F00" + ], + "steps": [ + { + "description": "Run entire test", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 1 + } + ] + }, + { + "class_name": "TC_TIMESYNC_2_6", + "desc": "test_TC_TIMESYNC_2_6", + "function": "test_TC_TIMESYNC_2_6", + "path": "sdk/TC_TIMESYNC_2_6", + "pics": [ + "TIMESYNC.S.F01" + ], + "steps": [ + { + "description": "Run entire test", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 1 + } + ] + }, + { + "class_name": "TC_TIMESYNC_2_7", + "desc": "test_TC_TIMESYNC_2_7", + "function": "test_TC_TIMESYNC_2_7", + "path": "sdk/TC_TIMESYNC_2_7", + "pics": [ + "TIMESYNC.S.F00" + ], + "steps": [ + { + "description": "Run entire test", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 1 + } + ] + }, + { + "class_name": "TC_TIMESYNC_2_8", + "desc": "test_TC_TIMESYNC_2_8", + "function": "test_TC_TIMESYNC_2_8", + "path": "sdk/TC_TIMESYNC_2_8", + "pics": [ + "TIMESYNC.S.F00" + ], + "steps": [ + { + "description": "Run entire test", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 1 + } + ] + }, + { + "class_name": "TC_TIMESYNC_2_9", + "desc": "test_TC_TIMESYNC_2_9", + "function": "test_TC_TIMESYNC_2_9", + "path": "sdk/TC_TIMESYNC_2_9", + "pics": [ + "TIMESYNC.S.F00" + ], + "steps": [ + { + "description": "Run entire test", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 1 + } + ] + }, + { + "class_name": "TC_TIMESYNC_3_1", + "desc": "test_TC_TIMESYNC_3_1", + "function": "test_TC_TIMESYNC_3_1", + "path": "sdk/TC_TIMESYNC_3_1", + "pics": [ + "TIMESYNC.S" + ], + "steps": [ + { + "description": "Run entire test", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 1 + } + ] + }, + { + "class_name": "TC_TMP_2_1", + "desc": "[TC-TMP-2.1] Attributes with Server as DUT", + "function": "test_TC_TMP_2_1", + "path": "sdk/TC_TMP_2_1", + "pics": [ + "TMP.S" + ], + "steps": [ + { + "description": "Commissioning, already done", + "expectation": "", + "is_commissioning": true, + "test_plan_number": 1 + }, + { + "description": "Set default bounds `min_bound` = -27315, `max_bound` = 32767", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 2 + }, + { + "description": "TH reads the MinMeasuredValue attribute from the DUT and saves as `min_measured_value`. If `min_measured_value` is not null, set `min_bound` to `min_measured_value`", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 3 + }, + { + "description": "TH reads the MaxMeasuredValue attribute from the DUT and saves as `max_measured_value`. If `max_measured_value` is not null, set `max_bound` to `max_measured_value", + "expectation": "Verify that `max_measured_value` is either null or an int16 where min_bound < `max_measured_value` \u2264 32767.", + "is_commissioning": false, + "test_plan_number": 4 + }, + { + "description": "If `min_measured_value` is not null, verify min measured value range", + "expectation": "Verify that -27315 \u2264 `min_measured_value` < `max_bound`", + "is_commissioning": false, + "test_plan_number": 5 + }, + { + "description": "TH reads the MeasuredValue attribute from the DUT", + "expectation": "Verify that the DUT response contains either null or a int16 where `min_bound` \u2264 MeasuredValue \u2264 `max_bound`.", + "is_commissioning": false, + "test_plan_number": 6 + }, + { + "description": "TH reads the Tolerance attribute from the DUT", + "expectation": "Verify that Tolerance is in the range of 0 to 2048", + "is_commissioning": false, + "test_plan_number": 7 + } + ] + }, + { + "class_name": "TC_TSTAT_4_2", + "desc": "3.2.4 [TC-TSTAT-4-2] Preset write and command attributes test case with server as DUT", + "function": "test_TC_TSTAT_4_2", + "path": "sdk/TC_TSTAT_4_2", + "pics": [ + "TSTAT.S" + ], + "steps": [ + { + "description": "Commissioning, already done", + "expectation": "", + "is_commissioning": true, + "test_plan_number": "1" + }, + { + "description": "TH writes to the Presets attribute without calling the AtomicRequest command", + "expectation": " Verify that the write request returns INVALID_IN_STATE error since the client didn't send a request to edit the presets by calling AtomicRequest command.", + "is_commissioning": false, + "test_plan_number": "2" + }, + { + "description": "TH writes to the Presets attribute after calling the AtomicRequest begin command but doesn't call AtomicRequest commit", + "expectation": "Verify that the Presets attribute was not updated since AtomicRequest commit command was not called.", + "is_commissioning": false, + "test_plan_number": "3" + }, + { + "description": "TH writes to the Presets attribute after calling the AtomicRequest begin command and calls AtomicRequest commit", + "expectation": "Verify that the Presets attribute was updated with new presets.", + "is_commissioning": false, + "test_plan_number": "4" + }, + { + "description": "TH writes to the Presets attribute with a built-in preset removed", + "expectation": "Verify that the AtomicRequest commit returned CONSTRAINT_ERROR (0x87).", + "is_commissioning": false, + "test_plan_number": "5" + }, + { + "description": "TH writes to the Presets attribute with a preset removed whose handle matches the value in the ActivePresetHandle attribute", + "expectation": "Verify that the AtomicRequest commit returned INVALID_IN_STATE (0xcb).", + "is_commissioning": false, + "test_plan_number": "6" + }, + { + "description": "TH writes to the Presets attribute with a built-in preset modified to be not built-in", + "expectation": "Verify that the AtomicRequest commit returned CONSTRAINT_ERROR (0x87).", + "is_commissioning": false, + "test_plan_number": "7" + }, + { + "description": "TH writes to the Presets attribute with a new preset having builtIn set to true", + "expectation": "Verify that the AtomicRequest commit returned CONSTRAINT_ERROR (0x87).", + "is_commissioning": false, + "test_plan_number": "8" + }, + { + "description": "TH writes to the Presets attribute with a new preset having a preset handle that doesn't exist in the Presets attribute", + "expectation": "Verify that the AtomicRequest commit returned NOT_FOUND (0x8b).", + "is_commissioning": false, + "test_plan_number": "9" + }, + { + "description": "TH writes to the Presets attribute with duplicate presets", + "expectation": "Verify that the AtomicRequest commit returned CONSTRAINT_ERROR (0x87).", + "is_commissioning": false, + "test_plan_number": "10" + }, + { + "description": "TH writes to the Presets attribute with a non built-in preset modified to be built-in", + "expectation": "Verify that the AtomicRequest commit returned CONSTRAINT_ERROR (0x87).", + "is_commissioning": false, + "test_plan_number": "11" + }, + { + "description": "TH writes to the Presets attribute with a preset that doesn't support names in the PresetTypeFeatures bitmap but has a name", + "expectation": "Verify that the AtomicRequest commit returned CONSTRAINT_ERROR (0x87).", + "is_commissioning": false, + "test_plan_number": "12" + }, + { + "description": "TH writes to the Presets attribute but calls the AtomicRequest rollback command to cancel the edit request", + "expectation": "Verify that the edit request was rolled back", + "is_commissioning": false, + "test_plan_number": "13" + }, + { + "description": "TH starts an atomic write, and TH2 attempts to open an atomic write before TH is complete", + "expectation": "Verify that the atomic request is rejected", + "is_commissioning": false, + "test_plan_number": "14" + }, + { + "description": "TH starts an atomic write, and TH2 attempts to write to presets", + "expectation": "Verify that the write request is rejected", + "is_commissioning": false, + "test_plan_number": "15" + }, + { + "description": "TH starts an atomic write, and before it's complete, TH2 removes TH's fabric; TH2 then opens an atomic write", + "expectation": "Verify that the atomic request is successful", + "is_commissioning": false, + "test_plan_number": "16" + }, + { + "description": "TH writes to the Presets attribute with a preset that has a presetScenario not present in PresetTypes attribute", + "expectation": "Verify that the write request returned CONSTRAINT_ERROR (0x87).", + "is_commissioning": false, + "test_plan_number": "17" + }, + { + "description": "TH writes to the Presets attribute such that the total number of presets is greater than the number of presets supported", + "expectation": "Verify that the write request returned RESOURCE_EXHAUSTED (0x89).", + "is_commissioning": false, + "test_plan_number": "18" + } + ] + }, + { + "class_name": "TestEventTrigger", + "desc": "test_all_zeros_key", + "function": "test_all_zeros_key", + "path": "sdk/TC_TestEventTrigger", + "pics": [], + "steps": [ + { + "description": "Run entire test", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 1 + } + ] + }, + { + "class_name": "TestEventTrigger", + "desc": "test_correct_key_invalid_code", + "function": "test_correct_key_invalid_code", + "path": "sdk/TC_TestEventTrigger", + "pics": [], + "steps": [ + { + "description": "Run entire test", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 1 + } + ] + }, + { + "class_name": "TestEventTrigger", + "desc": "test_correct_key_valid_code", + "function": "test_correct_key_valid_code", + "path": "sdk/TC_TestEventTrigger", + "pics": [], + "steps": [ + { + "description": "Run entire test", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 1 + } + ] + }, + { + "class_name": "TestEventTrigger", + "desc": "test_incorrect_key", + "function": "test_incorrect_key", + "path": "sdk/TC_TestEventTrigger", + "pics": [], + "steps": [ + { + "description": "Run entire test", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 1 + } + ] + }, + { + "class_name": "TestEventTrigger", + "desc": "test_multiple_command_request_feature_present_if_needed", + "function": "test_multiple_command_request_feature_present_if_needed", + "path": "sdk/TC_TestEventTrigger", + "pics": [], + "steps": [ + { + "description": "Run entire test", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 1 + } + ] + }, + { + "class_name": "TC_VALCC_2_1", + "desc": "[TC-VALCC-2.1] Attributes with DUT as Server", + "function": "test_TC_VALCC_2_1", + "path": "sdk/TC_VALCC_2_1", + "pics": [ + "VALCC.S" + ], + "steps": [ + { + "description": "Commissioning, already done", + "expectation": "", + "is_commissioning": true, + "test_plan_number": 1 + }, + { + "description": "Read attribute list to determine supported attributes", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 2 + }, + { + "description": "Read OpenDuration attribute, if supported", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 3 + }, + { + "description": "Read DefaultOpenDuration attribute, if supported", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 4 + }, + { + "description": "Read AutoCloseTime attribute, if supported", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 5 + }, + { + "description": "Read RemainingDuration attribute, if supported", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 6 + }, + { + "description": "Read CurrentState attribute, if supported", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 7 + }, + { + "description": "Read TargetState attribute, if supported", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 8 + }, + { + "description": "Read CurrentLevel attribute, if supported", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 9 + }, + { + "description": "Read TargetLevel attribute, if supported", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 10 + }, + { + "description": "Read DefaultOpenLevel attribute, if supported", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 11 + }, + { + "description": "Read ValveFault attribute, if supported", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 12 + }, + { + "description": "Read LevelStep attribute, if supported", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 13 + } + ] + }, + { + "class_name": "TC_VALCC_3_1", + "desc": "[TC-VALCC-3.1] Basic state functionality with DUT as Server", + "function": "test_TC_VALCC_3_1", + "path": "sdk/TC_VALCC_3_1", + "pics": [ + "VALCC.S" + ], + "steps": [ + { + "description": "Commissioning, already done", + "expectation": "", + "is_commissioning": true, + "test_plan_number": 1 + }, + { + "description": "Send Open command", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 2 + }, + { + "description": "Read TargetState attribute", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 3 + }, + { + "description": "Read CurrentState attribute", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 4 + }, + { + "description": "Send Close command", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 5 + }, + { + "description": "Read TargetState attribute", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 6 + }, + { + "description": "Read CurrentState attribute", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 7 + } + ] + }, + { + "class_name": "TC_VALCC_3_2", + "desc": "[TC-VALCC-3.2] Basic level functionality with DUT as Server", + "function": "test_TC_VALCC_3_2", + "path": "sdk/TC_VALCC_3_2", + "pics": [ + "VALCC.S" + ], + "steps": [ + { + "description": "Commissioning, already done", + "expectation": "", + "is_commissioning": true, + "test_plan_number": 1 + }, + { + "description": "Read FeatureMap attribute", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 2 + }, + { + "description": "Send Open command with TargetLevel set to 100", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 3 + }, + { + "description": "Read TargetLevel attribute", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 4 + }, + { + "description": "Read CurrentLevel attribute", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 5 + }, + { + "description": "Send Close command", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 6 + }, + { + "description": "Read TargetLevel attribute", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 7 + }, + { + "description": "Read CurrentLevel attribute", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 8 + } + ] + }, + { + "class_name": "TC_VALCC_3_3", + "desc": "[TC-VALCC-3.3] DefaultOpenLevel functionality with DUT as Server", + "function": "test_TC_VALCC_3_3", + "path": "sdk/TC_VALCC_3_3", + "pics": [ + "VALCC.S" + ], + "steps": [ + { + "description": "Commissioning, already done", + "expectation": "", + "is_commissioning": true, + "test_plan_number": 1 + }, + { + "description": "Read AttributeList attribute", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 2 + }, + { + "description": "Read DefaultOpenLevel attribute, if supported", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 3 + }, + { + "description": "Send Open command", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 4 + }, + { + "description": "Read TargetLevel attribute", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 5 + }, + { + "description": "Read CurrentLevel attribute", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 6 + }, + { + "description": "Send Close command", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 7 + }, + { + "description": "Read TargetLevel attribute", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 8 + }, + { + "description": "Read CurrentLevel attribute", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 9 + } + ] + }, + { + "class_name": "TC_VALCC_3_4", + "desc": "[TC-VALCC-3.4] LevelStep behavior with DUT as Server", + "function": "test_TC_VALCC_3_4", + "path": "sdk/TC_VALCC_3_4", + "pics": [ + "VALCC.S" + ], + "steps": [ + { + "description": "Commissioning, already done", + "expectation": "", + "is_commissioning": true, + "test_plan_number": 1 + }, + { + "description": "Read AttributeList attribute", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 2 + }, + { + "description": "Verify LevelStep is supported", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 3 + }, + { + "description": "Read LevelStep attribute", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 4 + }, + { + "description": "Verify the supported level values using Open Command", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 5 + }, + { + "description": "Send Close command", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 6 + } + ] + }, + { + "class_name": "TC_VALCC_4_1", + "desc": "[TC-VALCC-4.1] Duration functionality with DUT as Server", + "function": "test_TC_VALCC_4_1", + "path": "sdk/TC_VALCC_4_1", + "pics": [ + "VALCC.S" + ], + "steps": [ + { + "description": "Commissioning, already done", + "expectation": "", + "is_commissioning": true, + "test_plan_number": 1 + }, + { + "description": "Send Open command with duration set to 60", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 2 + }, + { + "description": "Read OpenDuration attribute", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 3 + }, + { + "description": "Read RemainingDuration attribute", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 4 + }, + { + "description": "Wait for 5 seconds", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 5 + }, + { + "description": "Read RemainingDuration attribute", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 6 + }, + { + "description": "Send Close command", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 7 + }, + { + "description": "Read OpenDuration attribute", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 8 + }, + { + "description": "Read RemainingDuration attribute", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 9 + } + ] + }, + { + "class_name": "TC_VALCC_4_2", + "desc": "[TC-VALCC-4.2] DefaultOpenDuration functionality with DUT as Server", + "function": "test_TC_VALCC_4_2", + "path": "sdk/TC_VALCC_4_2", + "pics": [ + "VALCC.S" + ], + "steps": [ + { + "description": "Commissioning, already done", + "expectation": "", + "is_commissioning": true, + "test_plan_number": 1 + }, + { + "description": "Read DefaultOpenDuration attribute", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "2a" + }, + { + "description": "Write DefaultOpenDuration attribute", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "2b" + }, + { + "description": "Send Open command", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 3 + }, + { + "description": "Read OpenDuration attribute", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 4 + }, + { + "description": "Read RemainingDuration attribute", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 5 + }, + { + "description": "Wait for 5 seconds", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 6 + }, + { + "description": "Read RemainingDuration attribute", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 7 + }, + { + "description": "Send Close command", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 8 + }, + { + "description": "Read OpenDuration attribute", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 9 + }, + { + "description": "Read RemainingDuration attribute", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 10 + } + ] + }, + { + "class_name": "TC_VALCC_4_3", + "desc": "[TC-VALCC-4.3] AutoCloseTime functionality with (no synchronized time) DUT as Server", + "function": "test_TC_VALCC_4_3", + "path": "sdk/TC_VALCC_4_3", + "pics": [ + "VALCC.S" + ], + "steps": [ + { + "description": "Commissioning, already done", + "expectation": "", + "is_commissioning": true, + "test_plan_number": 1 + }, + { + "description": "Read FeatureMap attribute", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "2a" + }, + { + "description": "Verify TimeSync feature is supported", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "2b" + }, + { + "description": "Read UTCTime attribute from Time Synchronization cluster", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "3a" + }, + { + "description": "Verify UTCTime is null", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "3b" + }, + { + "description": "Send Open command", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 4 + }, + { + "description": "Read AutoCloseTime attribute", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 5 + }, + { + "description": "Send Close command", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 6 + }, + { + "description": "Read AutoCloseTime attribute", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 7 + } + ] + }, + { + "class_name": "TC_VALCC_4_4", + "desc": "[TC-VALCC-4.4] AutoCloseTime functionality with (synchronized time) DUT as Server", + "function": "test_TC_VALCC_4_4", + "path": "sdk/TC_VALCC_4_4", + "pics": [ + "VALCC.S" + ], + "steps": [ + { + "description": "Commissioning, already done", + "expectation": "", + "is_commissioning": true, + "test_plan_number": 1 + }, + { + "description": "Read FeatureMap attribute", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "2a" + }, + { + "description": "Verify TimeSync feature is supported", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "2b" + }, + { + "description": "Read UTCTime attribute from Time Synchronization cluster", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "3a" + }, + { + "description": "Set UTCTime, if null", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "3b" + }, + { + "description": "Send Open command with duration set to 60", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 4 + }, + { + "description": "Read UTCTime attribute from TimeSync cluster", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 5 + }, + { + "description": "Read AutoCloseTime attribute", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 6 + }, + { + "description": "Send Close command", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 7 + }, + { + "description": "Read AutoCloseTime attribute", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 8 + }, + { + "description": "Read DefaultOpenDuration attribute", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "9a" + }, + { + "description": "Write DefaultOpenDuration attribute", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "9b" + }, + { + "description": "Send Open command", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 10 + }, + { + "description": "Read UTCTime attribute from TimeSync cluster", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 11 + }, + { + "description": "Read AutoCloseTime attribute", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 12 + }, + { + "description": "Send Close command", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 13 + }, + { + "description": "Read AutoCloseTime attribute", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 14 + } + ] + }, + { + "class_name": "TC_VALCC_4_5", + "desc": "[TC-VALCC-4.5] Auto close functionality with DUT as Server", + "function": "test_TC_VALCC_4_5", + "path": "sdk/TC_VALCC_4_5", + "pics": [ + "VALCC.S" + ], + "steps": [ + { + "description": "Commissioning, already done", + "expectation": "", + "is_commissioning": true, + "test_plan_number": 1 + }, + { + "description": "Send Open command with duration set to 5", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 2 + }, + { + "description": "Read OpenDuration attribute", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 3 + }, + { + "description": "Read RemainingDuration attribute", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 4 + }, + { + "description": "Read CurrentState attribute", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 5 + }, + { + "description": "Wait 6 seconds", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 6 + }, + { + "description": "Read OpenDuration attribute", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 7 + }, + { + "description": "Read RemainingDuration attribute", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 8 + }, + { + "description": "Read CurrentState attribute", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 9 + } + ] + }, + { + "class_name": "TC_WHM_1_2", + "desc": "[TC-WHM-1.2] Cluster attributes with DUT as Server", + "function": "test_TC_WHM_1_2", + "path": "sdk/TC_WHM_1_2", + "pics": [ + "WHM.S" + ], + "steps": [ + { + "description": "Commissioning, already done", + "expectation": "", + "is_commissioning": true, + "test_plan_number": 1 + }, + { + "description": "Read the SupportedModes attribute", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 2 + }, + { + "description": "Read the CurrentMode attribute", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 3 + } + ] + }, + { + "class_name": "TC_WHM_2_1", + "desc": "test_TC_WHM_2_1", + "function": "test_TC_WHM_2_1", + "path": "sdk/TC_WHM_2_1", + "pics": [ + "WHM.S" + ], + "steps": [ + { + "description": "Commissioning, already done", + "expectation": "", + "is_commissioning": true, + "test_plan_number": 1 + }, + { + "description": "Read the SupportedModes attribute", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 2 + }, + { + "description": "Read the CurrentMode attribute", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 3 + }, + { + "description": "Send ChangeToMode command with NewMode", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 4 + }, + { + "description": "Manually put the device in a state from which it will FAIL to transition", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 5 + }, + { + "description": "Read CurrentMode attribute", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 6 + }, + { + "description": "Send ChangeToMode command with NewMode", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 7 + }, + { + "description": "Read CurrentMode attribute", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 8 + }, + { + "description": "Manually put the device in a state from which it will SUCCESSFULLY transition", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 9 + }, + { + "description": "Read CurrentMode attribute", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 10 + }, + { + "description": "Send ChangeToMode command with NewMode", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 11 + }, + { + "description": "Read CurrentMode attribute", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 12 + }, + { + "description": "Send ChangeToMode command with NewMode set to an invalid mode", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 13 + }, + { + "description": "Read CurrentMode attribute", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 14 + } + ] + }, + { + "class_name": "TC_PICS_Checker", + "desc": "test_TC_IDM_10_4", + "function": "test_TC_IDM_10_4", + "path": "sdk/TC_pics_checker", + "pics": [], + "steps": [ + { + "description": "TH performs a wildcard read of all attributes on the endpoint under test", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 1 + }, + { + "description": "For every standard cluster: If the cluster is present on the endpoint, ensure the server-side PICS code for the cluster is present in the PICS file (e.g. OO.S for On/Off cluster).If the cluster is not present on the endpoint, ensure the cluster server PICS code is not present in the PICS file.", + "expectation": "PICS exactly match for server clusters.", + "is_commissioning": false, + "test_plan_number": 2 + }, + { + "description": "For every standard cluster, for every attribute in the cluster:If the cluster is present on the endpoint and the attribute ID is present in the AttributeList global attribute within the cluster, ensure the server-side PICS code for the attribute is present in the PICS file (e.g. OO.S.A000 for On/Off cluster\u2019s OnOff attribute).Otherwise, ensure the attribute PICS code is NOT present in the PICS file.", + "expectation": "PICS exactly match for all attributes in all clusters.", + "is_commissioning": false, + "test_plan_number": 3 + }, + { + "description": "For every cluster present in the spec, for every client \u2192 server command in the cluster: If the cluster is present on the endpoint and the command id is present in the accepted commands list, ensure the PICS code for the accepted command is present in the PICS file. Otherwise, ensure the accepted command PICS code is not present in the PICS file.", + "expectation": "PICS exactly match for all accepted commands in all clusters.", + "is_commissioning": false, + "test_plan_number": 4 + }, + { + "description": "For every cluster present in the spec, for every server \u2192 client command in the cluster: If the cluster is present on the endpoint and the command id is present in the generated commands list, ensure the PICS code for the generated command is present in the PICS file. Otherwise, ensure the generated command PICS code is not present in the PICS file.", + "expectation": "PICS exactly match for all generated commands in all clusters.", + "is_commissioning": false, + "test_plan_number": 5 + }, + { + "description": "For every cluster present in the spec, for every feature in the cluster: If the cluster is present on the endpoint and the feature is marked in the feature map, ensure the PICS code for the feature is present in the PICS file. Otherwise, ensure the feature PICS code is not present in the PICS file.", + "expectation": "PICS exactly match for all features in all clusters.", + "is_commissioning": false, + "test_plan_number": 6 + }, + { + "description": "Ensure that the PICS_SDK_CI_ONLY PICS does not appear in the PICS file", + "expectation": "CI PICS is not present", + "is_commissioning": false, + "test_plan_number": 7 + } + ] + } +] \ No newline at end of file diff --git a/test_collections/matter/sdk_tests/support/python_testing/list_python_tests_classes.py b/test_collections/matter/sdk_tests/support/python_testing/list_python_tests_classes.py new file mode 100644 index 00000000..d00bcf26 --- /dev/null +++ b/test_collections/matter/sdk_tests/support/python_testing/list_python_tests_classes.py @@ -0,0 +1,152 @@ +# +# Copyright (c) 2024 Project CHIP Authors +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +import ast +import asyncio +import json +from pathlib import Path + +from test_collections.matter.config import matter_settings +from test_collections.matter.sdk_tests.support.models.sdk_test_folder import ( + SDKTestFolder, +) +from test_collections.matter.sdk_tests.support.sdk_container import SDKContainer + +# Make these constants synced with "test_harness_client.py" +GET_TEST_INFO_ARGUMENT = "--get_test_info" +TEST_INFO_JSON_FILENAME = "test_info.json" + +SDK_TESTS_PATH = Path(__file__).parent.parent.parent +PYTHON_TESTING_PATH = SDK_TESTS_PATH / "sdk_checkout/python_testing" +JSON_OUTPUT_FILE_PATH = PYTHON_TESTING_PATH / TEST_INFO_JSON_FILENAME +COMPLETE_JSON_OUTPUT_FILE_FOLDER = SDK_TESTS_PATH +PYTHON_SCRIPTS_PATH = PYTHON_TESTING_PATH / "scripts/sdk" +PYTHON_SCRIPTS_FOLDER = SDKTestFolder(path=PYTHON_SCRIPTS_PATH, filename_pattern="TC*") + +CONTAINER_TH_CLIENT_EXEC = ( + "python3 /root/python_testing/scripts/sdk/test_harness_client.py" +) + + +def base_test_classes(module: ast.Module) -> list[ast.ClassDef]: + """Find classes that inherit from MatterBaseTest. + + Args: + module (ast.Module): Python module. + + Returns: + list[ast.ClassDef]: List of classes from the given module that inherit from + MatterBaseTest. + """ + return [ + c + for c in module.body + if isinstance(c, ast.ClassDef) + and any( + b for b in c.bases if isinstance(b, ast.Name) and b.id == "MatterBaseTest" + ) + ] + + +def get_command_list() -> list: + python_script_commands = [] + python_test_files = PYTHON_SCRIPTS_FOLDER.file_paths(extension=".py") + python_test_files.sort() + + for python_test_file in python_test_files: + parent_folder = python_test_file.parent.name + with open(python_test_file, "r") as python_file: + parsed_python_file = ast.parse(python_file.read()) + + test_classes = base_test_classes(parsed_python_file) + for test_class in test_classes: + script_command = [f"{parent_folder}/{python_test_file.stem}"] + script_command.append(f"{test_class.name}") + script_command.append(GET_TEST_INFO_ARGUMENT) + python_script_commands.append(script_command) + + return python_script_commands + + +async def proccess_commands_sdk_container(commands: list) -> None: + complete_json = [] + errors_found: list[str] = [] + test_function_count = 0 + invalid_test_function_count = 0 + + sdk_container: SDKContainer = SDKContainer() + + await sdk_container.start() + total_commands = len(commands) + for index, command in enumerate(commands): + print(f"Progress {index}/{total_commands}...") + command_string = " ".join(command) + result = sdk_container.send_command( + command_string, + prefix=CONTAINER_TH_CLIENT_EXEC, + ) + if result.exit_code != 0: + errors_found.append(f"Failed running command: {command}") + continue + + with open(JSON_OUTPUT_FILE_PATH, "r") as json_file: + json_data = json.load(json_file) + json_file.close() + for json_dict in json_data: + test_function_count += 1 + json_dict["path"] = command[0] + json_dict["class_name"] = command[1] + function = json_dict["function"] + if not function.startswith("test_TC_"): + invalid_test_function_count += 1 + complete_json.append(json_dict) + + sdk_container.destroy() + + complete_json_path = ( + COMPLETE_JSON_OUTPUT_FILE_FOLDER + / f"python_tests_{matter_settings.SDK_SHA}.json" + ) + with open(complete_json_path, "w") as json_file: + json.dump(complete_json, json_file, indent=4, sort_keys=True) + json_file.close() + + print("###########################################################################") + print("############################### REPORT ################################") + print("###########################################################################") + print(f">>>>>>>> Output JSON file: {complete_json_path}") + print(f">>>>>>>> Total of test functions: {test_function_count}") + print( + ( + ">>>>>>>> Total of test functions (doesn't start with 'test_TC_'): " + f"{invalid_test_function_count}" + ) + ) + error_count = len(errors_found) + print(f">>>>>>>> Total of scripts with error: {error_count}") + if error_count > 0: + for i, error in enumerate(errors_found): + print(f"Error {i}: {error}") + print("###########################################################################") + + +if __name__ == "__main__": + python_scripts_command_list = get_command_list() + loop = asyncio.get_event_loop() + loop.run_until_complete( + proccess_commands_sdk_container(python_scripts_command_list) + ) + loop.close() diff --git a/test_collections/matter/sdk_tests/support/python_testing/models/python_test_parser.py b/test_collections/matter/sdk_tests/support/python_testing/models/python_test_parser.py index b9f1fbf6..26f28535 100644 --- a/test_collections/matter/sdk_tests/support/python_testing/models/python_test_parser.py +++ b/test_collections/matter/sdk_tests/support/python_testing/models/python_test_parser.py @@ -14,6 +14,7 @@ # limitations under the License. # import ast +import json import re from pathlib import Path from typing import Any, List, Optional, Union @@ -58,20 +59,71 @@ def parse_python_script(path: Path) -> list[PythonTest]: Example: file TC_ACE_1_3.py has the methods test_TC_ACE_1_3, desc_TC_ACE_1_3, pics_TC_ACE_1_3 and steps_TC_ACE_1_3. """ - with open(path, "r") as python_file: - parsed_python_file = ast.parse(python_file.read()) - - test_classes = __test_classes(parsed_python_file) - - test_cases: list[PythonTest] = [] - for c in test_classes: - test_methods = __test_methods(c) - test_names = __test_case_names(test_methods) + with open(path, "r") as json_file: + parsed_scripts = json.load(json_file) + + python_tests: list[PythonTest] = [] + + for script_info in parsed_scripts: + test_function = script_info["function"] + test_name = __test_case_name(test_function) + if test_name is None: + logger.info(f"Failed to parse test name [{test_function}].") + continue + + test_description = script_info["desc"] + test_pics = script_info["pics"] + test_path = script_info["path"] + test_class_name = script_info["class_name"] + parsed_steps = script_info["steps"] + + is_commssioning = False + test_steps: list[MatterTestStep] = [] + for index, step in enumerate(parsed_steps): + step_description = step["description"] + + if index == 0: + is_commssioning = step["is_commissioning"] + + test_steps.append( + MatterTestStep( + label=step_description, + is_commissioning=is_commssioning, + ) # type: ignore + ) - for test_name in test_names: - test_cases.append(__parse_test_case(test_name, test_methods, c.name, path)) + # - PythonTestType.COMMISSIONING: test cases that have a commissioning first step + # - PythonTestType.NO_COMMISSIONING: test cases that follow the expected template + # but don't have a commissioning first step + # - PythonTestType.LEGACY: test cases that don't follow the expected template + # - PythonTestType.MANDATORY: Mandatory test cases + # We use the desc_[test_name] method as an indicator that the test case follows the + # expected template + + if test_name in mandatory_python_tcs_public_id: + python_test_type = PythonTestType.MANDATORY + elif len(test_steps) == 1 and test_steps[0].label == "Run entire test": + python_test_type = PythonTestType.LEGACY + elif is_commssioning: + python_test_type = PythonTestType.COMMISSIONING + else: + python_test_type = PythonTestType.NO_COMMISSIONING + + python_tests.append( + PythonTest( + name=test_name, + description=test_description, + steps=test_steps, + config={}, # Currently config is not configured in Python Testing + PICS=test_pics, + path=test_path, + type=MatterTestType.AUTOMATED, + class_name=test_class_name, + python_test_type=python_test_type, + ) + ) - return test_cases + return python_tests def __test_classes(module: ast.Module) -> list[ast.ClassDef]: @@ -119,24 +171,20 @@ def __test_methods(class_def: ast.ClassDef) -> list[FunctionDefType]: return all_methods -def __test_case_names(methods: list[FunctionDefType]) -> list[str]: +def __test_case_name(function_name: str) -> Optional[str]: """Extract test case names from methods that match the pattern "test_TC_[\\S]+". Args: - methods (list[FunctionDefType]): List of methods to search from. + methods (str): Function name. Returns: - list[str]: List of test case names. + str: Test case name. """ - test_names: list[str] = [] + if match := re.match(TC_TEST_FUNCTION_PATTERN, function_name): + if name := match["title"]: + return name - for m in methods: - if isinstance(m.name, str): - if match := re.match(TC_TEST_FUNCTION_PATTERN, m.name): - if name := match["title"]: - test_names.append(name) - - return test_names + return None def __parse_test_case( diff --git a/test_collections/matter/sdk_tests/support/python_testing/models/rpc_client/test_harness_client.py b/test_collections/matter/sdk_tests/support/python_testing/models/rpc_client/test_harness_client.py index 98761476..8e305455 100644 --- a/test_collections/matter/sdk_tests/support/python_testing/models/rpc_client/test_harness_client.py +++ b/test_collections/matter/sdk_tests/support/python_testing/models/rpc_client/test_harness_client.py @@ -1,23 +1,23 @@ # -# Copyright (c) 2023 Project CHIP Authors -# All rights reserved. +# Copyright (c) 2023 Project CHIP Authors +# All rights reserved. # -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at # -# http://www.apache.org/licenses/LICENSE-2.0 +# http://www.apache.org/licenses/LICENSE-2.0 # -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. # # type: ignore # flake8: noqa - import importlib +import json import sys from contextlib import redirect_stdout from multiprocessing.managers import BaseManager @@ -25,10 +25,17 @@ from matter_testing_support import ( CommissionDeviceTest, MatterTestConfig, + get_test_info, parse_matter_test_args, run_tests, ) +COMMISSION_ARGUMENT = "commission" +GET_TEST_INFO_ARGUMENT = "--get_test_info" +TEST_INFO_JSON_FILENAME = "test_info.json" +TEST_INFO_JSON_PATH = "/root/python_testing/" + TEST_INFO_JSON_FILENAME +EXECUTION_LOG_OUTPUT = "/root/python_testing/test_output.txt" + class TestRunnerHooks: pass @@ -41,15 +48,30 @@ def main() -> None: test_args = sys.argv[2:] config = parse_matter_test_args(test_args) - - # This is a temporary workaround since Python Test are generating a - # big amount of log - with open("/root/python_testing/test_output.txt", "w") as f: - with redirect_stdout(f): - if sys.argv[1] == "commission": - commission(config) - else: - run_test(script_path=sys.argv[1], class_name=sys.argv[2], config=config) + if GET_TEST_INFO_ARGUMENT in sys.argv: + info = get_test_info_support( + script_path=sys.argv[1], class_name=sys.argv[2], config=config + ) + with open(TEST_INFO_JSON_PATH, "w") as f: + json.dump(info, f, indent=4) + else: + # TODO: find a better solution. This is a temporary workaround since Python Tests + # are generating a big amount of log + with open(EXECUTION_LOG_OUTPUT, "w") as f: + with redirect_stdout(f): + if sys.argv[1] == COMMISSION_ARGUMENT: + commission(config) + else: + run_test( + script_path=sys.argv[1], class_name=sys.argv[2], config=config + ) + + +def get_test_info_support(script_path: str, class_name: str, config: MatterTestConfig): + module = importlib.import_module(script_path.replace("/", ".")) + TestClassReference = getattr(module, class_name) + test_info = get_test_info(TestClassReference, config) + return json.loads(json.dumps(test_info, default=lambda o: o.__dict__)) def run_test(script_path: str, class_name: str, config: MatterTestConfig) -> None: diff --git a/test_collections/matter/sdk_tests/support/python_testing/models/test_case.py b/test_collections/matter/sdk_tests/support/python_testing/models/test_case.py index 0863c074..d2fb4735 100644 --- a/test_collections/matter/sdk_tests/support/python_testing/models/test_case.py +++ b/test_collections/matter/sdk_tests/support/python_testing/models/test_case.py @@ -87,12 +87,6 @@ def __init__(self, test_case_execution: TestCaseExecution) -> None: # Move to the next step if the test case has additional steps apart from the 2 # deafult ones def step_over(self) -> None: - # Python tests that don't follow the template only have the default steps "Start - # Python test" and "Show test logs", but inside the file there can be more than - # one test case, so the hooks' step methods will continue to be called - if len(self.test_steps) == 2: - return - self.next_step() def start(self, count: int) -> None: @@ -131,16 +125,7 @@ def step_failure( failure_msg += f": {logs}" self.mark_step_failure(failure_msg) - - # Python tests with only 2 steps are the ones that don't follow the template. - # In the case of a test file with multiple test cases, more than one of these - # tests can fail and so this method will be called for each of them. These - # failures should be reported in the first step and moving to the logs step - # should only happen after all test cases are executed. - if len(self.test_steps) > 2: - # Python tests stop when there's a failure. We need to skip the next steps - # and execute only the last one, which shows the logs - self.skip_to_last_step() + self.skip_to_last_step() def step_unknown(self) -> None: self.__runned += 1 diff --git a/test_collections/matter/sdk_tests/support/python_testing/sdk_python_tests.py b/test_collections/matter/sdk_tests/support/python_testing/sdk_python_tests.py index 5bd9a620..2ce97388 100644 --- a/test_collections/matter/sdk_tests/support/python_testing/sdk_python_tests.py +++ b/test_collections/matter/sdk_tests/support/python_testing/sdk_python_tests.py @@ -13,12 +13,15 @@ # See the License for the specific language governing permissions and # limitations under the License. # + from pathlib import Path from typing import Optional +from test_collections.matter.config import matter_settings + from ..models.sdk_test_folder import SDKTestFolder -from ..paths import SDK_CHECKOUT_PATH -from .models.python_test_models import PythonTestType +from ..paths import SDK_CHECKOUT_PATH, SDK_TESTS_ROOT +from .models.python_test_models import PythonTest, PythonTestType from .models.python_test_parser import parse_python_script from .models.test_declarations import ( PythonCaseDeclaration, @@ -48,6 +51,10 @@ path=CUSTOM_PYTHON_TEST_PATH, filename_pattern="TC*" ) +PYTHON_TESTS_PARSED_FILE = ( + SDK_TESTS_ROOT / f"python_tests_{matter_settings.SDK_SHA}.json" +) + def _init_test_suites( python_test_version: str, @@ -78,9 +85,9 @@ def _init_test_suites( def _parse_python_script_to_test_case_declarations( - python_test_path: Path, python_test_version: str + python_test_version: str, ) -> list[PythonCaseDeclaration]: - python_tests = parse_python_script(python_test_path) + python_tests: list[PythonTest] = parse_python_script(PYTHON_TESTS_PARSED_FILE) return [ PythonCaseDeclaration( @@ -93,28 +100,26 @@ def _parse_python_script_to_test_case_declarations( def __parse_python_tests( - python_test_files: list[Path], python_test_version: str, mandatory: bool + python_test_version: str, mandatory: bool ) -> list[PythonSuiteDeclaration]: suites = _init_test_suites(python_test_version) - for python_test_file in python_test_files: - test_cases = _parse_python_script_to_test_case_declarations( - python_test_path=python_test_file, - python_test_version=python_test_version, - ) + test_cases = _parse_python_script_to_test_case_declarations( + python_test_version=python_test_version, + ) - for test_case in test_cases: - python_test_type = test_case.class_ref.python_test.python_test_type - if mandatory: - if python_test_type == PythonTestType.MANDATORY: - suites[SuiteType.MANDATORY].add_test_case(test_case) - else: - if python_test_type == PythonTestType.COMMISSIONING: - suites[SuiteType.COMMISSIONING].add_test_case(test_case) - elif python_test_type == PythonTestType.NO_COMMISSIONING: - suites[SuiteType.NO_COMMISSIONING].add_test_case(test_case) - elif python_test_type != PythonTestType.MANDATORY: - suites[SuiteType.LEGACY].add_test_case(test_case) + for test_case in test_cases: + python_test_type = test_case.class_ref.python_test.python_test_type + if mandatory: + if python_test_type == PythonTestType.MANDATORY: + suites[SuiteType.MANDATORY].add_test_case(test_case) + else: + if python_test_type == PythonTestType.COMMISSIONING: + suites[SuiteType.COMMISSIONING].add_test_case(test_case) + elif python_test_type == PythonTestType.NO_COMMISSIONING: + suites[SuiteType.NO_COMMISSIONING].add_test_case(test_case) + elif python_test_type != PythonTestType.MANDATORY: + suites[SuiteType.LEGACY].add_test_case(test_case) return [s for s in list(suites.values()) if len(s.test_cases) != 0] @@ -126,11 +131,9 @@ def __sdk_python_test_collection( name=name, folder=python_test_folder, mandatory=mandatory ) - python_test_files = python_test_folder.file_paths(extension=".py") python_test_version = python_test_folder.version suites = __parse_python_tests( - python_test_files=python_test_files, python_test_version=python_test_version, mandatory=mandatory, ) @@ -166,24 +169,23 @@ def custom_python_test_collection( python_test_folder: SDKTestFolder = CUSTOM_PYTHON_TEST_FOLDER, ) -> Optional[PythonCollectionDeclaration]: """Declare a new collection of test suites.""" - collection = PythonCollectionDeclaration( - name="Custom SDK Python Tests", folder=python_test_folder - ) - - python_test_files = python_test_folder.file_paths(extension=".py") - suites = __parse_python_tests( - python_test_files=python_test_files, - python_test_version="custom", - mandatory=False, - ) - - for suite in suites: - if not suite.test_cases: - continue - suite.sort_test_cases() - collection.add_test_suite(suite) - - if not collection.test_suites: - return None - - return collection + return None + # collection = PythonCollectionDeclaration( + # name="Custom SDK Python Tests", folder=python_test_folder + # ) + + # suites = __parse_python_tests( + # python_test_version="custom", + # mandatory=False, + # ) + + # for suite in suites: + # if not suite.test_cases: + # continue + # suite.sort_test_cases() + # collection.add_test_suite(suite) + + # if not collection.test_suites: + # return None + + # return collection