From 73a13e9a33ee22648e7511270a88b549e53fbc23 Mon Sep 17 00:00:00 2001 From: Romulo Quidute Filho <116586593+rquidute@users.noreply.github.com> Date: Mon, 2 Dec 2024 11:28:02 -0300 Subject: [PATCH] Fixed some python tests not listed (#172) * Fixed some python tests not listed * code review --- .../matter/sdk_tests/python_tests_info.json | 11060 +++++++++++++--- .../list_python_tests_classes.py | 22 +- .../models/rpc_client/test_harness_client.py | 17 +- 3 files changed, 9187 insertions(+), 1912 deletions(-) diff --git a/test_collections/matter/sdk_tests/python_tests_info.json b/test_collections/matter/sdk_tests/python_tests_info.json index 31b78b8f..bdc0eff3 100644 --- a/test_collections/matter/sdk_tests/python_tests_info.json +++ b/test_collections/matter/sdk_tests/python_tests_info.json @@ -508,6 +508,65 @@ } ] }, + { + "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", @@ -1652,6 +1711,107 @@ } ] }, + { + "class_name": "TC_CADMIN_1_11", + "desc": "test_TC_CADMIN_1_11", + "function": "test_TC_CADMIN_1_11", + "path": "sdk/TC_CADMIN_1_11", + "pics": [ + "CADMIN.S" + ], + "steps": [ + { + "description": "Commissioning, already done", + "expectation": "", + "is_commissioning": true, + "test_plan_number": 1 + }, + { + "description": "TH_CR1 gets the MaxCumulativeFailsafeSeconds value from BasicCommissioningInfo attribute in GeneralCommissioning Cluster", + "expectation": "Should set the MaxCumulativeFailsafeSeconds value from BasicCommissioningInfo attribute to timeout", + "is_commissioning": false, + "test_plan_number": 2 + }, + { + "description": "TH_CR1 opens commissioning window on DUT with duration set to value for MaxCumulativeFailsafeSeconds", + "expectation": "Commissioning window should open with timeout set to MaxCumulativeFailsafeSeconds", + "is_commissioning": false, + "test_plan_number": 3 + }, + { + "description": "TH_CR2 fully commissions the DUT", + "expectation": "DUT should fully commission", + "is_commissioning": false, + "test_plan_number": 4 + }, + { + "description": "TH_CR1 opens commissioning window on DUT with duration set to value from BasicCommissioningInfo", + "expectation": "New commissioning window should open and be set to timeout", + "is_commissioning": false, + "test_plan_number": 5 + }, + { + "description": "TH_CR1 sends an OpenCommissioningWindow command to the DUT and attempts to open another commissioning window", + "expectation": "Commissioning window should fail to be opened due to being busy", + "is_commissioning": false, + "test_plan_number": 6 + }, + { + "description": "TH_CR2 sends an OpenCommissioningWindow command to the DUT and attempts to open another commissioning window", + "expectation": "Commissioning window should fail to be opened due to being busy", + "is_commissioning": false, + "test_plan_number": 7 + }, + { + "description": "TH_CR1 sends an RevokeCommissioning command to the DUT", + "expectation": "Commissioning window should be closed", + "is_commissioning": false, + "test_plan_number": 8 + }, + { + "description": "TH_CR1 reads the FeatureMap from the Administrator Commissioning Cluster to check to see if BC is supported on DUT", + "expectation": "FeatureMap should be checked to see if BC enum is available feature, if not then test steps 9a-9d will be skipped", + "is_commissioning": false, + "test_plan_number": 9 + }, + { + "description": "TH_CR1 opens commissioning window on DUT with duration set to value from BasicCommissioningInfo", + "expectation": "Opens basic commissioning window on the DUT for timeout set to value of MaxCumulativeFailsafeSeconds", + "is_commissioning": false, + "test_plan_number": "9a" + }, + { + "description": "TH_CR1 sends an OpenBasicCommissioningWindow command to the DUT and attempts to open another commissioning window", + "expectation": "Commissioning window should fail to be opened due to being busy", + "is_commissioning": false, + "test_plan_number": "9b" + }, + { + "description": "TH_CR2 sends an OpenBasicCommissioningWindow command to the DUT and attempts to open another commissioning window", + "expectation": "Commissioning window should fail to be opened due to being busy", + "is_commissioning": false, + "test_plan_number": "9c" + }, + { + "description": "TH_CR1 sends a RevokeCommissioning command to the DUT", + "expectation": "Commissioning window should be closed", + "is_commissioning": false, + "test_plan_number": "9d" + }, + { + "description": "TH_CR2 reads the CurrentFabricIndex attribute from the Operational Credentials cluster and saves as th2_idx", + "expectation": "th2_idx set to value for CurrentFabricIndex attribute from TH_CR2", + "is_commissioning": false, + "test_plan_number": 10 + }, + { + "description": "TH_CR1 sends the RemoveFabric command to the DUT with the FabricIndex set to th2_idx", + "expectation": "TH_CR1 removes TH_CR2 fabric using th2_idx", + "is_commissioning": false, + "test_plan_number": 11 + } + ] + }, { "class_name": "TC_CADMIN_1_9", "desc": "test_TC_CADMIN_1_9", @@ -2201,326 +2361,277 @@ ] }, { - "class_name": "TC_CGEN_2_4", - "desc": "test_TC_CGEN_2_4", - "function": "test_TC_CGEN_2_4", - "path": "sdk/TC_CGEN_2_4", + "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": "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", + "description": "Commission DUT if not already done", "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`", + "description": "reads the FeatureMap attribute", "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", + "description": "reads the AttributeList attribute", "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", + "description": "reads the ServerList attribute from Descriptor", "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": "", + "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": "TH reads from the DUT the General Commissioning Cluster SupportsConcurrentConnection attribute, verify that it is true", - "expectation": "", + "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 - } - ] - }, - { - "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", + "description": "If the CT feature is not supported, skip step 8 to 12", "expectation": "", - "is_commissioning": true, - "test_plan_number": "precondition" + "is_commissioning": false, + "test_plan_number": 7 }, { - "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": "", + "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": 1 + "test_plan_number": 8 }, { - "description": "TH reads from the DUT the SupportedWifiBands attribute and saves as supported_wifi_bands", - "expectation": "", + "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": 2 + "test_plan_number": 9 }, { - "description": "TH reads from the DUT the Networks attribute.", - "expectation": "", + "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": 3 + "test_plan_number": 10 }, { - "description": "TH sends ScanNetworks command to the DUT with the SSID field set to null and Breadcrumb field set to 1", + "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": 4 + "test_plan_number": 11 }, { - "description": "TH reads from the DUT the Breadcrumb attribute from the General Commissioning Cluster", - "expectation": "", + "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": 5 + "test_plan_number": 12 }, { - "description": "TH sends ScanNetworks Command to the DUT with SSID field set to known_ssid and Breadcrumb field set to 2", + "description": "If the HS feature is not supported, skip step 14 to 21", "expectation": "", "is_commissioning": false, - "test_plan_number": 6 + "test_plan_number": 13 }, { - "description": "TH reads Breadcrumb attribute from the General Commissioning Cluster", - "expectation": "", + "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": 7 + "test_plan_number": 14 }, { - "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": "", + "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": 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": [ + "test_plan_number": 15 + }, { - "description": "Commission DUT if not done", - "expectation": "", - "is_commissioning": true, - "test_plan_number": 0 + "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": "TH1 generates 32-byte AttestationNonce and saves as `nonce", + "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": 1 + "test_plan_number": 17 }, { - "description": "TH1 sends AttestationRequest Command to the DUT with AttestationNonce set to `nonce`", - "expectation": "Verify AttestationResponse is received", + "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": 2 + "test_plan_number": 18 }, { - "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", + "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": "3a" + "test_plan_number": 19 }, { - "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", + "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": "3b" + "test_plan_number": 20 }, { - "description": "TH1 Reads the VendorID attribute of the Basic Information cluster and saves it as `basic_info_vendor_id`", - "expectation": "", + "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": "4a" + "test_plan_number": 21 }, { - "description": "TH1 Reads the ProductID attribute of the Basic Information cluster and saves it as `basic_info_product_id`", + "description": "If XY feature is not supported, skip steps 23-28", "expectation": "", "is_commissioning": false, - "test_plan_number": "4b" + "test_plan_number": 22 }, { - "description": "Extract the attestation_elements_message structure fields from the AttestationResponse", + "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": 5 + "test_plan_number": 23 }, { - "description": "Verify AttestationElements field size", - "expectation": "AttestationElements field size should not be greater than RESP_MAX(900 bytes)", + "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": "5.1" + "test_plan_number": 24 }, { - "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", + "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": "5.2" + "test_plan_number": 25 }, { - "description": "Verify CD format_version", - "expectation": "format_version = 1", + "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": "6.1" + "test_plan_number": 26 }, { - "description": "Verify CD vendor_id", - "expectation": "vendor_id field matches `basic_info_vendor_id` and is in the standard vendor ID range", + "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": "6.2" + "test_plan_number": 27 }, { - "description": "Verify CD product_id_array", - "expectation": "product_id_array field contains `basic_info_product_id`", + "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": "6.3" + "test_plan_number": 28 }, { - "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", + "description": "If the EHUE feature is not supported, skip steps 30 to 32", + "expectation": "", "is_commissioning": false, - "test_plan_number": "6.6" + "test_plan_number": 29 }, { - "description": "Verify CD security_information", - "expectation": "security_information = 0", + "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": "6.7" + "test_plan_number": 30 }, { - "description": "Verify CD version_number", - "expectation": "version_number is an integer in range 0..65535", + "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": "6.8" + "test_plan_number": 31 }, { - "description": "Verify CD certification_type", - "expectation": "certification_type has a value between 1..2", + "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": "6.9" + "test_plan_number": 32 }, { - "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", + "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": "7.0" + "test_plan_number": 33 }, { - "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.", + "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": "7.1" + "test_plan_number": 34 }, { - "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", + "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": "7.2" + "test_plan_number": 35 }, { - "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", + "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": "7.3" + "test_plan_number": 36 }, { - "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", + "description": "Wait for 5 seconds", + "expectation": "", "is_commissioning": false, - "test_plan_number": 8 + "test_plan_number": 37 }, { - "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", + "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": 9 + "test_plan_number": 38 }, { - "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", + "description": "Wait for 20 seconds", + "expectation": "", "is_commissioning": false, - "test_plan_number": 10 + "test_plan_number": 39 }, { - "description": "If firmware_information is present, verify firmware information type", - "expectation": "firmware_information is an octet string", + "description": "TH verifies _reportedRemainingTimeValuesList_ contains three entries", + "expectation": "_reportedRemainingTimeValuesList_ has 3 entries in the list", "is_commissioning": false, - "test_plan_number": 11 + "test_plan_number": 40 }, { - "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", + "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": 12 + "test_plan_number": 41 }, { - "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)", + "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": 13 + "test_plan_number": 42 }, { - "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", + "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": 14 + "test_plan_number": 43 } ] }, { - "class_name": "TC_DA_1_5", - "desc": "test_TC_DA_1_5", - "function": "test_TC_DA_1_5", - "path": "sdk/TC_DA_1_5", + "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": [ { @@ -2532,2745 +2643,2395 @@ ] }, { - "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": [], + "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": "Run entire test", + "description": "TH is commissioned", "expectation": "", - "is_commissioning": false, + "is_commissioning": true, "test_plan_number": 1 - } - ] - }, - { - "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", + "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": 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": [ + "test_plan_number": 2 + }, { - "description": "Commission DUT (already done)", + "description": "If `NetworkCommissioningResponse` does not contain any entries for Network Commissioning cluster, skip remaining steps and end test case", "expectation": "", - "is_commissioning": true, - "test_plan_number": 0 + "is_commissioning": false, + "test_plan_number": 3 }, { - "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", + "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": 1 + "test_plan_number": 4 }, { - "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", + "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": 2 + "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_DGSW_2_1", - "desc": "[TC-DGSW-2.1] Attributes with Server as DUT", - "function": "test_TC_DGSW_2_1", - "path": "sdk/TC_DGSW_2_1", + "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": [ - "DGSW.S" + "CNET.S" ], "steps": [ { - "description": "Commissioning, already done", + "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": "Read the ThreadMetrics attribute", + "description": "TH reads from the DUT the SupportedWifiBands attribute and saves as supported_wifi_bands", "expectation": "", "is_commissioning": false, "test_plan_number": 2 }, { - "description": "Read the CurrentHeapFree attribute", + "description": "TH reads from the DUT the Networks attribute.", "expectation": "", "is_commissioning": false, "test_plan_number": 3 }, { - "description": "Read the CurrentHeapUsed attribute", + "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": "Read the CurrentHeapHighWatermark attribute", + "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_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" - ], + "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": "Commissoning with DUT is done", + "description": "Commission DUT if not done", "expectation": "", "is_commissioning": true, - "test_plan_number": "0" + "test_plan_number": 0 }, { - "description": "TH reads OperationalCredentials cluster's CurrentFabricIndex and save the attribute", - "expectation": "TH Reads Attribute Successfully", + "description": "TH1 generates 32-byte AttestationNonce and saves as `nonce", + "expectation": "", "is_commissioning": false, - "test_plan_number": "1a" + "test_plan_number": 1 }, { - "description": "TH sends ClearUser Command to DUT with the UserIndex as 0xFFFE to clear all the users", - "expectation": "DUT responds with Success response", + "description": "TH1 sends AttestationRequest Command to the DUT with AttestationNonce set to `nonce`", + "expectation": "Verify AttestationResponse is received", "is_commissioning": false, - "test_plan_number": "1b" + "test_plan_number": 2 }, { - "description": "TH sends ClearCredential Command to DUT to clear all the credentials", - "expectation": "Verify that the DUT sends SUCCESS response", + "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": "1c" + "test_plan_number": "3a" }, { - "description": "TH sends ClearAliroReaderConfig Command to DUT for clearing any existing Aliro Configuration", - "expectation": "Verify that the DUT sends SUCCESS response", + "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": "2a" + "test_plan_number": "3b" }, { - "description": ",TH sends SetAliroReaderConfig Command to DUT without GroupResolvingKey", - "expectation": "DUT sends success response", + "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": "2b" + "test_plan_number": "4a" }, { - "description": "TH sends SetAliroReaderConfig Command to DUT with GroupResolvingKey", - "expectation": "DUT sends success response", + "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": "2c" + "test_plan_number": "4b" }, { - "description": "TH reads AliroReaderVerificationKey attribute from DUT", - "expectation": "Verify that AliroReaderVerificationKey value is same as 'verificationkey'", + "description": "Extract the attestation_elements_message structure fields from the AttestationResponse", + "expectation": "", "is_commissioning": false, - "test_plan_number": "3" + "test_plan_number": 5 }, { - "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", + "description": "Verify AttestationElements field size", + "expectation": "AttestationElements field size should not be greater than RESP_MAX(900 bytes)", "is_commissioning": false, - "test_plan_number": "7" + "test_plan_number": "5.1" }, { - "description": "TH reads AliroReaderVerificationKey attribute from DUT", - "expectation": "Verify that AliroReaderVerificationKey value is null", + "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": "8" + "test_plan_number": "5.2" }, { - "description": "TH reads AliroReaderGroupIdentifier attribute from DUT", - "expectation": "Verify that AliroReaderGroupIdentifier value is null", + "description": "Verify CD format_version", + "expectation": "format_version = 1", "is_commissioning": false, - "test_plan_number": "9" + "test_plan_number": "6.1" }, { - "description": "TH reads AliroGroupResolvingKey attribute from DUT", - "expectation": "Verify that AliroGroupResolvingKey value is null", + "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": "10" + "test_plan_number": "6.2" }, { - "description": ",TH sends SetAliroReaderConfig Command to DUT without GroupResolvingKey", - "expectation": "DUT sends success response", + "description": "Verify CD product_id_array", + "expectation": "product_id_array field contains `basic_info_product_id`", "is_commissioning": false, - "test_plan_number": "11a" + "test_plan_number": "6.3" }, { - "description": "TH sends SetAliroReaderConfig Command to DUT with GroupResolvingKey", - "expectation": "DUT sends success response", + "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": "11b" + "test_plan_number": "6.4" }, { - "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": "", + "description": "Verify CD certificate_id", + "expectation": "certificate_id has a length of 19", "is_commissioning": false, - "test_plan_number": "12a" + "test_plan_number": "6.5" }, { - "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", + "description": "Verify CD security level", + "expectation": "security level = 0", "is_commissioning": false, - "test_plan_number": "12b" + "test_plan_number": "6.6" }, { - "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", + "description": "Verify CD security_information", + "expectation": "security_information = 0", "is_commissioning": false, - "test_plan_number": "13a" + "test_plan_number": "6.7" }, { - "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", + "description": "Verify CD version_number", + "expectation": "version_number is an integer in range 0..65535", "is_commissioning": false, - "test_plan_number": "13b" + "test_plan_number": "6.8" }, { - "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", + "description": "Verify CD certification_type", + "expectation": "certification_type has a value between 1..2", "is_commissioning": false, - "test_plan_number": "14" + "test_plan_number": "6.9" }, { - "description": "TH sends GetCredentialStatus Command with Credential as (6,1)", - "expectation": "Verify DUT responds with GetCredentialStatusResponse having CredentialExists is true and UserIndex as 1", + "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": "15" + "test_plan_number": "7.0" }, { - "description": "TH sends ClearCredential Command to DUT to clear the CredentialType of AliroCredentialIssuerKey", - "expectation": "Verify that the DUT sends SUCCESS response", + "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": "16" + "test_plan_number": "7.1" }, { - "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", + "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": "17" + "test_plan_number": "7.2" }, { - "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", + "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": "18" + "test_plan_number": "7.3" }, { - "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", + "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": "19" + "test_plan_number": 8 }, { - "description": "TH sends GetCredentialStatus Command with Credential as 7 1", - "expectation": "Verify DUT responds with GetCredentialStatusResponse having CredentialExists is true and UserIndex as 1", + "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": "20" + "test_plan_number": 9 }, { - "description": "TH sends ClearCredential Command to DUT to clear the CredentialType of AliroEvictableEndpointKey", - "expectation": "Verify that the DUT sends SUCCESS response", + "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": "21" + "test_plan_number": 10 }, { - "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", + "description": "If firmware_information is present, verify firmware information type", + "expectation": "firmware_information is an octet string", "is_commissioning": false, - "test_plan_number": "22" + "test_plan_number": 11 }, { - "description": "TH sends SetCredential Command to DUT with CredentialType as AliroNonEvictableEndpointKey ", - "expectation": "Verify that the DUT responds with SetCredentialResponse command and Status success.", + "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": "23" + "test_plan_number": 12 }, { - "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", + "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": "24" + "test_plan_number": 13 }, { - "description": "TH sends GetCredentialStatus Command with Credential as 8 1", - "expectation": "Verify DUT responds with GetCredentialStatusResponse having CredentialExists is true and UserIndex as 1", + "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": "25" - }, + "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": "TH sends ClearCredential Command to DUT to clear the CredentialType of AliroNonEvictableEndpointKey", - "expectation": "DUT sends SUCCESS response", + "description": "Run entire test", + "expectation": "", "is_commissioning": false, - "test_plan_number": "26" - }, + "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": "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", + "description": "Run entire test", + "expectation": "", "is_commissioning": false, - "test_plan_number": "27" - }, + "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": "Th Reads NumberOfCredentialsSupportedPerUser saves as numberofcredentialsupportedperuser,Read operation is successful", + "description": "Commissioning, already done", "expectation": "", - "is_commissioning": false, - "test_plan_number": "28a" + "is_commissioning": true, + "test_plan_number": "1" }, { - "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", + "description": "TH reads from the DUT FeatureMap attribute.", + "expectation": "Store the value as FeatureMap.", "is_commissioning": false, - "test_plan_number": "28b" + "test_plan_number": "2" }, { - "description": "TH sends SetUser Command to DUT to create an Aliro user", - "expectation": "DUT sends SUCCESS response", + "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": "29a" + "test_plan_number": "3" }, { - "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.", + "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": "29b" + "test_plan_number": "4" }, { - "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", + "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": "30" + "test_plan_number": "5" }, { - "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 ResourceExhausted", + "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": "31" + "test_plan_number": "6" }, { - "description": "TH sends GetCredentialStatus Command with Credential as 7 1", - "expectation": "DUT responds with GetCredentialStatusResponse Command and CredentialExists is True", + "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": "32" + "test_plan_number": "7" }, { - "description": "TH sends GetCredentialStatus Command with Credential as 8 max_aliro_keys_supported", - "expectation": "Verify DUT responds with GetCredentialStatusResponse having CredentialExists is false and UserIndex as 1", + "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": "33" + "test_plan_number": "8" }, { - "description": "TH sends ClearCredential Command to DUT to clear the ALIRO CredentialType", - "expectation": "Verify that the DUT sends SUCCESS response", + "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": "34" + "test_plan_number": "9" }, { - "description": "TH sends ClearUser Command to DUT with the UserIndex as 1", - "expectation": "Verify that the DUT sends SUCCESS response", + "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": "35" + "test_plan_number": "10" } ] }, { - "class_name": "TC_DRLK_2_5", - "desc": "test_TC_DRLK_2_5", - "function": "test_TC_DRLK_2_5", - "path": "sdk/TC_DRLK_2_5", + "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": [ - "DRLK.S", - "DRLK.S.F04" + "DEM.S" ], "steps": [ { - "description": "TH reads NumberOfWeekDaySchedulesSupportedPerUser attribute.", - "expectation": "Verify that TH is able to read the attribute successfully.", - "is_commissioning": false, + "description": "Commission DUT to TH (can be skipped if done in a preceding test)", + "expectation": "", + "is_commissioning": true, "test_plan_number": "1" }, { - "description": "TH sends SetUser Command to DUT.", - "expectation": "Verify that the DUT sends SUCCESS response.", + "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": "2a" + "test_plan_number": "2" }, { - "description": "TH sends SetWeekDaySchedule Command to DUT.", - "expectation": "Verify that the DUT sends SUCCESS response.", + "description": "TH reads TestEventTriggersEnabled attribute from General Diagnostics Cluster", + "expectation": "Value has to be 1 (True)", "is_commissioning": false, - "test_plan_number": "2b" + "test_plan_number": "3" }, { - "description": "TH sends SetWeekDaySchedule to DUT with different DaysMaskMap.", - "expectation": "Verify that the DUT sends SUCCESS response.", + "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": "2c" + "test_plan_number": "4" }, { - "description": "TH sends GetWeekDaySchedule Command to DUT.", - "expectation": "Verify that the DUT sends GetWeekDayScheduleResponse command with expected values.", + "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": "3" + "test_plan_number": "5" }, { - "description": "TH sends SetWeekDaySchedule Command to DUT.", - "expectation": "Verify that the DUT responds with INVALID_COMMAND.", + "description": "TH reads from the DUT the OptOutState", + "expectation": "Value has to be 0x00 (NoOptOut)", "is_commissioning": false, - "test_plan_number": "4" + "test_plan_number": "5a" }, { - "description": "TH sends SetWeekDaySchedule Command to DUT.", - "expectation": "Verify that the DUT responds with INVALID_COMMAND.", + "description": "If ForecastAdjustment feature is not supported on the cluster skip steps 7 to 14", + "expectation": "", "is_commissioning": false, - "test_plan_number": "5" + "test_plan_number": "6" }, { - "description": "TH sends SetWeekDaySchedule Command to DUT.", - "expectation": "Verify that the DUT responds with INVALID_COMMAND.", + "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": "6" + "test_plan_number": "7" }, { - "description": "TH sends SetWeekDaySchedule Command to DUT.", - "expectation": "Verify that the DUT responds with INVALID_COMMAND.", + "description": "TH reads from the DUT the ESAState", + "expectation": "Value has to be 0x01 (Online)", "is_commissioning": false, - "test_plan_number": "7" + "test_plan_number": "7a" }, { - "description": "TH sends GetWeekDaySchedule Command to DUT.", - "expectation": "Verify that the DUT responds with with INVALID_COMMAND.", + "description": "Reset all accumulated report counts, then wait 12 seconds", + "expectation": "", "is_commissioning": false, "test_plan_number": "8" }, { - "description": "TH sends GetWeekDaySchedule Command to DUT.", - "expectation": "Verify that the DUT responds with GetWeekDayScheduleResponse command with Status NOT_FOUND.", + "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 sends ClearWeekDaySchedule Command to DUT.", - "expectation": "Verify that the DUT sends SUCCESS response.", + "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": "10a" + "test_plan_number": "10" }, { - "description": "TH sends ClearWeekDaySchedule Command to DUT.", - "expectation": "Verify that the DUT sends INVALID_COMMAND response.", + "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": "10b" + "test_plan_number": "11" }, { - "description": "TH sends ClearWeekDaySchedule Command to DUT.", - "expectation": "Verify that the DUT sends INVALID_COMMAND response.", + "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": "10c" + "test_plan_number": "12" }, { - "description": "TH sends GetWeekDaySchedule Command to DUT.", - "expectation": "Verify that the DUT sends NOT_FOUND response.", + "description": "Wait 5 seconds", + "expectation": "", "is_commissioning": false, - "test_plan_number": "11" + "test_plan_number": "13" }, { - "description": "TH sends ClearUser Command to DUT.", - "expectation": "Verify that the DUT sends SUCCESS response.", + "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": "12" - } - ] - }, - { - "class_name": "TC_DeviceBasicComposition", - "desc": "test_TC_DESC_2_2", - "function": "test_TC_DESC_2_2", - "path": "sdk/TC_DeviceBasicComposition", - "pics": [], - "steps": [ + "test_plan_number": "13a" + }, { - "description": "Run entire test", - "expectation": "", + "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": 1 - } - ] - }, - { - "class_name": "TC_DeviceBasicComposition", - "desc": "test_TC_DT_1_1", - "function": "test_TC_DT_1_1", - "path": "sdk/TC_DeviceBasicComposition", - "pics": [], - "steps": [ + "test_plan_number": "14" + }, { - "description": "Run entire test", + "description": "If PowerAdjustment feature is not supported on the cluster skip steps 16 to 21", "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": [ + "test_plan_number": "15" + }, { - "description": "Run entire test", - "expectation": "", + "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": 1 - } - ] - }, - { - "class_name": "TC_DeviceBasicComposition", - "desc": "test_TC_IDM_11_1", - "function": "test_TC_IDM_11_1", - "path": "sdk/TC_DeviceBasicComposition", - "pics": [], - "steps": [ + "test_plan_number": "16" + }, { - "description": "Run entire test", - "expectation": "", + "description": "TH reads from the DUT the PowerAdjustmentCapability", + "expectation": "Value has to include Cause=NoAdjustment.", "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": [ + "test_plan_number": "16b" + }, { - "description": "TH performs a wildcard read of all attributes and endpoints on the device", - "expectation": "", + "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": 0 + "test_plan_number": "17" }, { - "description": "TH creates a MatterTlvJson dump of the wildcard attributes for submission to certification.", + "description": "Wait 12 seconds", "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": [ + "test_plan_number": "18" + }, { - "description": "Run entire test", - "expectation": "", + "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": 1 - } - ] - }, - { - "class_name": "TC_DeviceBasicComposition", - "desc": "test_TC_SM_1_1", - "function": "test_TC_SM_1_1", - "path": "sdk/TC_DeviceBasicComposition", - "pics": [], - "steps": [ + "test_plan_number": "18a" + }, { - "description": "Run entire test", - "expectation": "", + "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": 1 - } - ] - }, - { - "class_name": "TC_DeviceBasicComposition", - "desc": "test_TC_SM_1_2", - "function": "test_TC_SM_1_2", - "path": "sdk/TC_DeviceBasicComposition", - "pics": [], - "steps": [ + "test_plan_number": "19" + }, { - "description": "Run entire test", + "description": "Wait 5 seconds", "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": [ + "test_plan_number": "20" + }, { - "description": "Run entire test", - "expectation": "", + "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": 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": [ + "test_plan_number": "20a" + }, { - "description": "Run entire test", - "expectation": "", + "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": 1 - } - ] - }, - { - "class_name": "TC_DeviceBasicComposition", - "desc": "test_all_event_strings_valid", - "function": "test_all_event_strings_valid", - "path": "sdk/TC_DeviceBasicComposition", - "pics": [], - "steps": [ + "test_plan_number": "21" + }, { - "description": "Run entire test", - "expectation": "", + "description": "Cancel the subscription to the Device Energy Management cluster", + "expectation": "The subscription is cancelled successfully", "is_commissioning": false, - "test_plan_number": 1 + "test_plan_number": "22" } ] }, { - "class_name": "TC_DeviceBasicComposition", - "desc": "test_all_schema_mandatory_elements_present", - "function": "test_all_schema_mandatory_elements_present", - "path": "sdk/TC_DeviceBasicComposition", - "pics": [], + "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": "Run entire test", + "description": "Commission DUT to TH (can be skipped if done in a preceding test)", "expectation": "", + "is_commissioning": true, + "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": 1 - } - ] - }, - { - "class_name": "TC_DeviceBasicComposition", - "desc": "test_all_schema_scalars", - "function": "test_all_schema_scalars", - "path": "sdk/TC_DeviceBasicComposition", - "pics": [], - "steps": [ + "test_plan_number": "2" + }, { - "description": "Run entire test", + "description": "Set up a subscription to all DeviceEnergyManagement cluster events", "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": [ + "test_plan_number": "3" + }, { - "description": "Run entire test", - "expectation": "", + "description": "TH reads TestEventTriggersEnabled attribute from General Diagnostics Cluster", + "expectation": "Value has to be 1 (True)", "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": [ + "test_plan_number": "4" + }, { - "description": "Run entire test", - "expectation": "", + "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": 1 - } - ] - }, - { - "class_name": "TC_DeviceConformance", - "desc": "test_TC_IDM_10_3", - "function": "test_TC_IDM_10_3", - "path": "sdk/TC_DeviceConformance", - "pics": [], - "steps": [ + "test_plan_number": "5" + }, { - "description": "Run entire test", - "expectation": "", + "description": "TH reads from the DUT the ESAState", + "expectation": "Value has to be 0x01 (Online)", "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": [ + "test_plan_number": "5a" + }, { - "description": "Run entire test", - "expectation": "", + "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": 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": [ + "test_plan_number": "5b" + }, { - "description": "Commission DUT if not done", - "expectation": "", - "is_commissioning": true, - "test_plan_number": 0 + "description": "TH reads from the DUT the OptOutState", + "expectation": "Value has to be 0x00 (NoOptOut)", + "is_commissioning": false, + "test_plan_number": "5c" }, { - "description": "Identify endpoints with Ecosystem Information Cluster", - "expectation": "", + "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": 1 + "test_plan_number": "6" }, { - "description": "Reading DeviceDirectory Attribute", - "expectation": "", + "description": "TH reads from the DUT the ESAState", + "expectation": "Value has to be 0x04 (PowerAdjustActive)", "is_commissioning": false, - "test_plan_number": 2 + "test_plan_number": "6a" }, { - "description": "Reading LocationDirectory Attribute", - "expectation": "", + "description": "TH reads from the DUT the PowerAdjustmentCapability", + "expectation": "Value has to include Cause=LocalOptimizationAdjustment.", "is_commissioning": false, - "test_plan_number": 3 + "test_plan_number": "6b" }, { - "description": "Try Writing to DeviceDirectory Attribute", - "expectation": "", + "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": 4 + "test_plan_number": "7" }, { - "description": "Try Writing to LocationDirectory Attribute", - "expectation": "", + "description": "TH reads from the DUT the PowerAdjustmentCapability", + "expectation": "Value has to include Cause=NoAdjustment.", "is_commissioning": false, - "test_plan_number": 5 + "test_plan_number": "7a" }, { - "description": "Repeating steps 2 to 5 for each endpoint identified in step 1", - "expectation": "", + "description": "TH reads from the DUT the ESAState", + "expectation": "Value has to be 0x01 (Online)", "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": [ + "test_plan_number": "7b" + }, { - "description": "Commission DUT if not done", - "expectation": "", - "is_commissioning": true, - "test_plan_number": 0 + "description": "TH sends command CancelPowerAdjustRequest", + "expectation": "Verify DUT responds w/ status INVALID_IN_STATE(0xcb)", + "is_commissioning": false, + "test_plan_number": "8" }, { - "description": "Prepare", - "expectation": "", + "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": 1 + "test_plan_number": "9" }, { - "description": "Read root endpoint's PartsList", - "expectation": "", + "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": "1a" + "test_plan_number": "10" }, { - "description": "For each endpoint in 1a read DeviceType list confirming aggregator endpoint exists", - "expectation": "", + "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": "1b" + "test_plan_number": "11" }, { - "description": "Add a bridged device", - "expectation": "", + "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": 2 + "test_plan_number": "12" }, { - "description": "(Manual Step) Add a bridged device using method indicated by the manufacturer", - "expectation": "", + "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": "2a" + "test_plan_number": "13" }, { - "description": "Read root endpoint's PartsList, validate exactly one endpoint added", - "expectation": "", + "description": "TH reads from the DUT the PowerAdjustmentCapability", + "expectation": "Value has to include Cause=LocalOptimizationAdjustment.", "is_commissioning": false, - "test_plan_number": "2b" + "test_plan_number": "13a" }, { - "description": "On newly added endpoint detected in 2b read DeviceDirectory Ecosystem Information Attribute and validate success", - "expectation": "", + "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": "2c" + "test_plan_number": "14" }, { - "description": "On newly added endpoint detected in 2b read LocationDirectory Ecosystem Information Attribute and validate success", - "expectation": "", + "description": "TH reads from the DUT the ESAState", + "expectation": "Value has to be 0x04 (PowerAdjustActive)", "is_commissioning": false, - "test_plan_number": "2d" + "test_plan_number": "14a" }, { - "description": "Remove bridged device", - "expectation": "", + "description": "TH reads from the DUT the PowerAdjustmentCapability", + "expectation": "Value has to include Cause=GridOptimizationAdjustment.", "is_commissioning": false, - "test_plan_number": 3 + "test_plan_number": "14b" }, { - "description": "(Manual Step) Removed bridged device added in step 2a using method indicated by the manufacturer", - "expectation": "", + "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": "3a" + "test_plan_number": "15" }, { - "description": "Verify that PartsList equals what was read in 1a", - "expectation": "", + "description": "TH reads from the DUT the ESAState", + "expectation": "Value has to be 0x04 (PowerAdjustActive)", "is_commissioning": false, - "test_plan_number": "3b" + "test_plan_number": "15a" }, { - "description": "On endpoint detected in 2b, read DeviceDirectory Ecosystem Information Attribute and validate failure", - "expectation": "", + "description": "TH reads from the DUT the OptOutState", + "expectation": "Value has to be 0x02 (LocalOptOut)", "is_commissioning": false, - "test_plan_number": "3c" + "test_plan_number": "15b" }, { - "description": "On endpoint detected in 2b, read LocationDirectory Ecosystem Information Attribute and validate failure", - "expectation": "", + "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": "3d" - } - ] - }, - { - "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": [ + "test_plan_number": "16" + }, { - "description": "Run entire test", - "expectation": "", + "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": 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": [ + "test_plan_number": "17" + }, { - "description": "Run entire test", - "expectation": "", + "description": "TH reads from the DUT the ESAState", + "expectation": "Value has to be 0x01 (Online)", "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": [ + "test_plan_number": "17a" + }, { - "description": "Commissioning, already done", - "expectation": "", - "is_commissioning": true, - "test_plan_number": 1 + "description": "TH reads from the DUT the OptOutState", + "expectation": "Value has to be 0x03 (OptOut)", + "is_commissioning": false, + "test_plan_number": "17b" }, { - "description": "Read from the DUT the RockSupport attribute and store", - "expectation": "", + "description": "TH reads from the DUT the PowerAdjustmentCapability", + "expectation": "Value has to include Cause=NoAdjustment.", "is_commissioning": false, - "test_plan_number": 2 + "test_plan_number": "17c" }, { - "description": "RockLeftRight is supported, so write 0x01 to RockSetting", - "expectation": "", + "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": 3 + "test_plan_number": "18" }, { - "description": "Read from the DUT the RockSetting attribute", - "expectation": "", + "description": "TH reads from the DUT the ESAState", + "expectation": "Value has to be 0x01 (Online)", "is_commissioning": false, - "test_plan_number": 4 + "test_plan_number": "18a" }, { - "description": "RockLeftRight is not supported, so write 0x01 to RockSetting to check for constraint error", - "expectation": "", + "description": "TH reads from the DUT the OptOutState", + "expectation": "Value has to be 0x00 (NoOptOut)", "is_commissioning": false, - "test_plan_number": 5 + "test_plan_number": "18b" }, { - "description": "RockUpDown is supported, so write 0x02 to RockSetting", - "expectation": "", + "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 + "test_plan_number": "19" }, { - "description": "Read from the DUT the RockSetting attribute", - "expectation": "", + "description": "TH reads from the DUT the ESAState", + "expectation": "Value has to be 0x04 (PowerAdjustActive)", "is_commissioning": false, - "test_plan_number": 7 + "test_plan_number": "19a" }, { - "description": "RockUpDown is not supported, so write 0x02 to RockSetting to check for constraint error", - "expectation": "", + "description": "TH reads from the DUT the PowerAdjustmentCapability", + "expectation": "Value has to include Cause=LocalOptimizationAdjustment.", "is_commissioning": false, - "test_plan_number": 8 + "test_plan_number": "19b" }, { - "description": "RockRound is supported, so write 0x04 to RockSetting", - "expectation": "", + "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": 9 + "test_plan_number": "20" }, { - "description": "Read from the DUT the RockSetting attribute", - "expectation": "", + "description": "TH reads from the DUT the ESAState", + "expectation": "Value has to be 0x01 (Online)", "is_commissioning": false, - "test_plan_number": 10 + "test_plan_number": "20a" }, { - "description": "RockRound is not supported, so write 0x04 to RockSetting to check for constraint error", - "expectation": "", + "description": "TH reads from the DUT the PowerAdjustmentCapability", + "expectation": "Value has to include Cause=NoAdjustment.", "is_commissioning": false, - "test_plan_number": 11 + "test_plan_number": "20b" }, { - "description": "Write RockSetting to 0x00", - "expectation": "", + "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": 12 + "test_plan_number": "21" } ] }, { - "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", + "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": [ - "FAN.S" + "DEM.S.F03" ], "steps": [ { - "description": "Commissioning, already done", + "description": "Commission DUT to TH (can be skipped if done in a preceding test)", "expectation": "", "is_commissioning": true, - "test_plan_number": 1 + "test_plan_number": "1" }, { - "description": "Read from the DUT the WindSupport attribute and store", - "expectation": "", + "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 + "test_plan_number": "2" }, { - "description": "SleepWind is supported, so write 0x01 to WindSetting", - "expectation": "", + "description": "TH reads TestEventTriggersEnabled attribute from General Diagnostics Cluster", + "expectation": "Value has to be 1 (True)", "is_commissioning": false, - "test_plan_number": 3 + "test_plan_number": "3" }, { - "description": "Read from the DUT the WindSetting attribute", - "expectation": "", + "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 + "test_plan_number": "4" }, { - "description": "SleepWind is not supported, so write 0x01 to WindSetting to check for constraint error", - "expectation": "", + "description": "TH reads from the DUT the ESAState", + "expectation": "Value has to be 0x01 (Online)", "is_commissioning": false, - "test_plan_number": 5 + "test_plan_number": "4a" }, { - "description": "NaturalWind is supported, so write 0x02 to WindSetting", - "expectation": "", + "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": 6 + "test_plan_number": "4b" }, { - "description": "Read from the DUT the WindSetting attribute", - "expectation": "", + "description": "TH reads from the DUT the OptOutState", + "expectation": "Value has to be 0x00 (NoOptOut)", "is_commissioning": false, - "test_plan_number": 7 + "test_plan_number": "4c" }, { - "description": "NaturalWind is not supported, so write 0x02 to WindSetting to check for constraint error", - "expectation": "", + "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": 8 + "test_plan_number": "5" }, { - "description": "Write WindSetting to 0x00", - "expectation": "", + "description": "TH reads from the DUT the ESAState", + "expectation": "Value has to be 0x01 (Online)", "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": [ + "test_plan_number": "5a" + }, { - "description": "Run entire test", - "expectation": "", + "description": "TH reads from the DUT the OptOutState", + "expectation": "Value has to be 0x01 (LocalOptOut)", "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": [ + "test_plan_number": "5b" + }, { - "description": "Commissioning, already done", - "expectation": "", - "is_commissioning": true, - "test_plan_number": "1a" + "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": "CTH reads from the DUT the FeatureMap attribute.", - "expectation": "", + "description": "TH reads from the DUT the ESAState", + "expectation": "Value has to be 0x01 (Online)", "is_commissioning": false, - "test_plan_number": "1b" + "test_plan_number": "6a" }, { - "description": "TH reads from the DUT the ActiveModeThreshold attribute.", - "expectation": "", + "description": "TH reads from the DUT the Forecast", + "expectation": "Value has to be unchanged from step 3b", "is_commissioning": false, - "test_plan_number": 2 + "test_plan_number": "6b" }, { - "description": "TH reads from the DUT the ActiveModeDuration attribute.", - "expectation": "", + "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": 3 + "test_plan_number": "7" }, { - "description": "TH reads from the DUT the IdleModeDuration attribute.", - "expectation": "", + "description": "TH reads from the DUT the ESAState", + "expectation": "Value has to be 0x01 (Online)", "is_commissioning": false, - "test_plan_number": 4 + "test_plan_number": "7a" }, { - "description": "TH reads from the DUT the ClientsSupportedPerFabric attribute.", - "expectation": "", + "description": "TH reads from the DUT the OptOutState", + "expectation": "Value has to be 0x00 (NoOptOut)", "is_commissioning": false, - "test_plan_number": 5 + "test_plan_number": "7b" }, { - "description": "TH reads from the DUT the RegisteredClients attribute.", - "expectation": "", + "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": 6 + "test_plan_number": "8" }, { - "description": "TH reads from the DUT the ICDCounter attribute.", - "expectation": "", + "description": "TH reads from the DUT the ESAState", + "expectation": "Value has to be 0x01 (Online)", "is_commissioning": false, - "test_plan_number": 7 + "test_plan_number": "8a" }, { - "description": "TH reads from the DUT the UserActiveModeTriggerHint attribute.", - "expectation": "", + "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": 8 + "test_plan_number": "8b" }, { - "description": "TH reads from the DUT the UserActiveModeTriggerInstruction attribute", - "expectation": "", + "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 + "test_plan_number": "9" }, { - "description": "TH reads from the DUT the OperatingMode attribute.", - "expectation": "", + "description": "TH reads from the DUT the ESAState", + "expectation": "Value has to be 0x01 (Online)", "is_commissioning": false, - "test_plan_number": 10 + "test_plan_number": "9a" }, { - "description": "TH reads from the DUT the MaximumCheckInBackoff attribute.", - "expectation": "", + "description": "TH reads from the DUT the OptOutState", + "expectation": "Value has to be 0x01 (LocalOptOut)", "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": [ + "test_plan_number": "9b" + }, { - "description": "Commissioning, already done", - "expectation": "", - "is_commissioning": true, - "test_plan_number": 0 + "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 reads from the DUT the RegisteredClients attribute. RegisteredClients is empty.", - "expectation": "", + "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": "1a" + "test_plan_number": "10" }, { - "description": "TH reads from the DUT the ClientsSupportedPerFabric attribute.", - "expectation": "", + "description": "TH reads from the DUT the ESAState", + "expectation": "Value has to be 0x01 (Online)", "is_commissioning": false, - "test_plan_number": "1b" + "test_plan_number": "10a" }, { - "description": "TH reads from the DUT the ICDCounter attribute.", - "expectation": "", + "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": "1c" + "test_plan_number": "10b" }, { - "description": "TH sends RegisterClient command.", - "expectation": "", + "description": "TH sends command CancelRequest", + "expectation": "Verify DUT responds w/ status SUCCESS(0x00)", "is_commissioning": false, - "test_plan_number": 2 + "test_plan_number": "11" }, { - "description": "TH reads from the DUT the RegisteredClients attribute.", - "expectation": "", + "description": "TH reads from the DUT the ESAState", + "expectation": "Value has to be 0x01 (Online)", "is_commissioning": false, - "test_plan_number": 3 + "test_plan_number": "11a" }, { - "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": "", + "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": 4 + "test_plan_number": "11b" }, { - "description": "TH reads from the DUT the RegisteredClients attribute.", - "expectation": "", + "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": 5 + "test_plan_number": "12" }, { - "description": "TH sends RegisterClient command with a different CheckInNodeID.", - "expectation": "", + "description": "TH reads from the DUT the ESAState", + "expectation": "Value has to be 0x01 (Online)", "is_commissioning": false, - "test_plan_number": 6 + "test_plan_number": "12a" }, { - "description": "TTH sends UnregisterClient command with the CheckInNodeID from Step 6.", - "expectation": "", + "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": 7 + "test_plan_number": "12b" }, { - "description": "TH sends UnregisterClient command with the CheckInNodeID from Step 2.", - "expectation": "", + "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": 8 + "test_plan_number": "13" }, { - "description": "TH reads from the DUT the RegisteredClients attribute.", - "expectation": "", + "description": "TH reads from the DUT the ESAState", + "expectation": "Value has to be 0x01 (Online)", "is_commissioning": false, - "test_plan_number": 9 + "test_plan_number": "13a" }, { - "description": "Repeat Step 8-9 with the rest of CheckInNodeIDs from the list of RegisteredClients from Step 4, if any.", - "expectation": "", + "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": 10 + "test_plan_number": "13b" }, { - "description": "TH reads from the DUT the RegisteredClients attribute.", - "expectation": "", + "description": "TH sends command CancelRequest", + "expectation": "Verify DUT responds w/ status INVALID_IN_STATE(0xcb)", "is_commissioning": false, - "test_plan_number": 11 + "test_plan_number": "14" }, { - "description": "TH sends UnregisterClient command with the CheckInNodeID from Step 2.", - "expectation": "", + "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": 12 + "test_plan_number": "15" } ] }, { - "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", + "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": [ - "ICDM.S", - "ICDM.S.F00" + "DEM.S.F04" ], "steps": [ { - "description": "Commissioning, already done", + "description": "Commission DUT to TH (can be skipped if done in a preceding test)", "expectation": "", "is_commissioning": true, - "test_plan_number": 0 + "test_plan_number": "1" }, { - "description": "TH reads from the DUT the RegisteredClients attribute. RegisteredClients is empty.", - "expectation": "", + "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": 1 + "test_plan_number": "2" }, { - "description": "TH sends RegisterClient command.", + "description": "Set up a subscription to all DeviceEnergyManagement cluster events", "expectation": "", "is_commissioning": false, - "test_plan_number": "2a" + "test_plan_number": "3" }, { - "description": "TH reads from the DUT the RegisteredClients attribute.", - "expectation": "", + "description": "TH reads TestEventTriggersEnabled attribute from General Diagnostics Cluster", + "expectation": "Value has to be 1 (True)", "is_commissioning": false, - "test_plan_number": "2b" + "test_plan_number": "4" }, { - "description": "Power cycle DUT.", - "expectation": "", + "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": "2c" + "test_plan_number": "5" }, { - "description": "TH waits for {PIXIT.WAITTIME.REBOOT}", - "expectation": "", + "description": "TH reads from the DUT the ESAState", + "expectation": "Value has to be 0x01 (Online)", "is_commissioning": false, - "test_plan_number": "2d" + "test_plan_number": "5a" }, { - "description": "TH reads from the DUT the RegisteredClients attribute.", - "expectation": "", + "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": "2e" + "test_plan_number": "5b" }, { - "description": "TH sends RegisterClient command with same CheckInNodeID1 as in Step 1a and different MonitorSubID2 and Key2.", - "expectation": "", + "description": "TH reads from the DUT the OptOutState", + "expectation": "Value has to be 0x00 (NoOptOut)", "is_commissioning": false, - "test_plan_number": "3a" + "test_plan_number": "5c" }, { - "description": "TH reads from the DUT the RegisteredClients attribute.", - "expectation": "", + "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": "3b" + "test_plan_number": "6" }, { - "description": "TH sends RegisterClient command with same CheckInNodeID1 as in Step 1a and different MonitorSubID3 and Key3, and an invalid VerificationKey3.", - "expectation": "", + "description": "TH reads from the DUT the ESAState", + "expectation": "Value has to be 0x01 (Online)", "is_commissioning": false, - "test_plan_number": "4a" + "test_plan_number": "6a" }, { - "description": "TH reads from the DUT the RegisteredClients attribute.", - "expectation": "", + "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": "4b" + "test_plan_number": "7" }, { - "description": "TH sends RegisterClient command with same CheckInNodeID1 as in Step 1a and different MonitorSubID4 and Key4, and a valid wrong VerificationKey4.", - "expectation": "", + "description": "TH reads from the DUT the ESAState", + "expectation": "Value has to be 0x01 (Online)", "is_commissioning": false, - "test_plan_number": "5a" + "test_plan_number": "7a" }, { - "description": "TH reads from the DUT the RegisteredClients attribute.", - "expectation": "", + "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": "5b" + "test_plan_number": "8" }, { - "description": "TH sends UnregisterClient command with CheckInNodeID1.", - "expectation": "", + "description": "TH reads from the DUT the ESAState", + "expectation": "Value has to be 0x01 (Online)", "is_commissioning": false, - "test_plan_number": "6a" + "test_plan_number": "8a" }, { - "description": "TH reads from the DUT the RegisteredClients attribute.", - "expectation": "", + "description": "TH reads from the DUT the OptOutState", + "expectation": "Value has to be 0x02 (GridOptOut)", "is_commissioning": false, - "test_plan_number": "6b" + "test_plan_number": "8b" }, { - "description": "Set the TH to Manage privilege for ICDM cluster.", - "expectation": "", + "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": 7 + "test_plan_number": "9" }, { - "description": "TH sends RegisterClient command.", - "expectation": "", + "description": "TH reads from the DUT the ESAState", + "expectation": "Value has to be 0x01 (Online)", "is_commissioning": false, - "test_plan_number": "8a" + "test_plan_number": "9a" }, { - "description": "TH sends RegisterClient command with same CheckInNodeID5 as in Step 6a and different MonitorSubID6 and Key6, and an invalid VerificationKey6.", - "expectation": "", + "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": "8b" + "test_plan_number": "10" }, { - "description": "TH sends RegisterClient command with same CheckInNodeID5 as in Step 6a and different MonitorSubID7 and Key7, and an valid wrong VerificationKey7.", - "expectation": "", + "description": "TH reads from the DUT the ESAState", + "expectation": "Value has to be 0x05 (Paused)", "is_commissioning": false, - "test_plan_number": "8c" + "test_plan_number": "10a" }, { - "description": "TH sends RegisterClient command with same CheckInNodeID5 and VerificationKey5 as in Step 6a and different MonitorSubID9 and Key9.", - "expectation": "", + "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": "8d" + "test_plan_number": "11" }, { - "description": "TH sends UnregisterClient command with the CheckInNodeID5 and VerificationKey5.", - "expectation": "", + "description": "TH reads from the DUT the ESAState", + "expectation": "Value has to be 0x01 (Online)", "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 + "test_plan_number": "11a" }, { - "description": "TH reads from the DUT the RegisteredClients attribute.", - "expectation": "", + "description": "TH reads from the DUT the OptOutState", + "expectation": "Value has to be 0x03 (OptOut)", "is_commissioning": false, - "test_plan_number": "1a" + "test_plan_number": "11b" }, { - "description": "TH sends UnregisterClient command with CheckInNodeID1, where CheckInNodeID1 can be any random node ID.", - "expectation": "", + "description": "TH reads from the DUT the Forecast", + "expectation": "Value has to include ForecastUpdateReason=Internal Optimization", "is_commissioning": false, - "test_plan_number": "1b" + "test_plan_number": "11c" }, { - "description": "TH sends RegisterClient command.", - "expectation": "", + "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": "2a" + "test_plan_number": "12" }, { - "description": "TH reads from the DUT the RegisteredClients attribute.", - "expectation": "", + "description": "TH reads from the DUT the ESAState", + "expectation": "Value has to be 0x01 (Online)", "is_commissioning": false, - "test_plan_number": "2b" + "test_plan_number": "12a" }, { - "description": "TH sends UnregisterClient command with the CheckInNodeID3.", - "expectation": "", + "description": "TH reads from the DUT the OptOutState", + "expectation": "Value has to be 0x00 (NoOptOut)", "is_commissioning": false, - "test_plan_number": 3 + "test_plan_number": "12b" }, { - "description": "TH sends UnregisterClient command with the CheckInNodeID2.", - "expectation": "", + "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": "4a" + "test_plan_number": "13" }, { - "description": "TH reads from the DUT the RegisteredClients attribute.", - "expectation": "", + "description": "TH reads from the DUT the ESAState", + "expectation": "Value has to be 0x05 (Paused)", "is_commissioning": false, - "test_plan_number": "4b" + "test_plan_number": "13a" }, { - "description": "TH sends RegisterClient command.", - "expectation": "", + "description": "TH reads from the DUT the Forecast", + "expectation": "Value has to include ForecastUpdateReason=Local Optimization", "is_commissioning": false, - "test_plan_number": "5a" + "test_plan_number": "13b" }, { - "description": "TH reads from the DUT the RegisteredClients attribute.", - "expectation": "", + "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": "5b" + "test_plan_number": "14" }, { - "description": "TH sends UnregisterClient command with the CheckInNodeID4 as in Step 5a and an invalid VerificationKey5.", - "expectation": "", + "description": "TH reads from the DUT the ESAState", + "expectation": "Value has to be 0x01 (Online)", "is_commissioning": false, - "test_plan_number": "5c" + "test_plan_number": "14a" }, { - "description": "TH reads from the DUT the RegisteredClients attribute.", - "expectation": "", + "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": "5d" + "test_plan_number": "14b" }, { - "description": "TH sends RegisterClient command.", - "expectation": "", + "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": "6a" + "test_plan_number": "15" }, { - "description": "TH reads from the DUT the RegisteredClients attribute.", - "expectation": "", + "description": "TH reads from the DUT the ESAState", + "expectation": "Value has to be 0x05 (Paused)", "is_commissioning": false, - "test_plan_number": "6b" + "test_plan_number": "15a" }, { - "description": "TH sends UnregisterClient command with the CheckInNodeID6 as in Step 6a and a wrong VerificationKey7.", - "expectation": "", + "description": "TH reads from the DUT the Forecast", + "expectation": "Value has to include ForecastUpdateReason=Local Optimization", "is_commissioning": false, - "test_plan_number": "6c" + "test_plan_number": "15b" }, { - "description": "TH reads from the DUT the RegisteredClients attribute.", - "expectation": "", + "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": "6d" + "test_plan_number": "16" }, { - "description": "Set the TH to Manage privilege for ICDM cluster.", - "expectation": "", + "description": "TH reads from the DUT the ESAState", + "expectation": "Value has to be 0x01 (Online)", "is_commissioning": false, - "test_plan_number": 7 + "test_plan_number": "16a" }, { - "description": "TH sends RegisterClient command.", - "expectation": "", + "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": "8a" + "test_plan_number": "17" }, { - "description": "TH sends UnregisterClient command with the CheckInNodeID8 from Step 8a and an invalid VerificationKey9.", - "expectation": "", + "description": "TH reads from the DUT the ESAState", + "expectation": "Value has to be 0x05 (Paused)", "is_commissioning": false, - "test_plan_number": "8b" + "test_plan_number": "17a" }, { - "description": "TH sends UnregisterClient command with the CheckInNodeID8 from Step 8a and a valid wrong VerificationKey10.", - "expectation": "", + "description": "Wait for minPauseDuration.", + "expectation": "Event DEM.S.E03(Resumed) sent with Cause=0 (NormalCompletion)", "is_commissioning": false, - "test_plan_number": "8c" + "test_plan_number": "18" }, { - "description": "TH sends UnregisterClient command with the CheckInNodeID8 and VerificationKey8 from Step 8a.", - "expectation": "", + "description": "TH reads from the DUT the ESAState", + "expectation": "Value has to be 0x01 (Online)", "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": [ + "test_plan_number": "18a" + }, { - "description": "Commissioning, already done", - "expectation": "", - "is_commissioning": true, - "test_plan_number": 0 + "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 ICDCounter attribute.", - "expectation": "", + "description": "TH reads from the DUT the ESAState", + "expectation": "Value has to be 0x01 (Online)", "is_commissioning": false, - "test_plan_number": 1 + "test_plan_number": "19a" }, { - "description": "Power cycle DUT.", - "expectation": "", + "description": "TH reads from the DUT the Forecast", + "expectation": "Value has to include ActiveSlotNumber=1", "is_commissioning": false, - "test_plan_number": "2a" + "test_plan_number": "19b" }, { - "description": "TH waits for {PIXIT.WAITTIME.REBOOT}", - "expectation": "", + "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": "2b" + "test_plan_number": "20" }, { - "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": "", + "description": "TH reads from the DUT the ESAState", + "expectation": "Value has to be 0x01 (Online)", "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": [ + "test_plan_number": "20a" + }, { - "description": "Run entire test", - "expectation": "", + "description": "TH sends command ResumeRequest", + "expectation": "Verify DUT responds w/ status INVALID_IN_STATE(0xcb)", "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": [ + "test_plan_number": "21" + }, { - "description": "Run entire test", - "expectation": "", + "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": 1 + "test_plan_number": "22" } ] }, { - "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": [], + "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": "Get remote node's MaxPathsPerInvoke", + "description": "Commission DUT to TH (can be skipped if done in a preceding test)", "expectation": "", "is_commissioning": true, - "test_plan_number": 1 + "test_plan_number": "1" }, { - "description": "Sending `MaxPathsPerInvoke + 1` InvokeRequest if it fits into single MTU", - "expectation": "", + "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 + "test_plan_number": "2" }, { - "description": "Sending two InvokeRequests with identical paths", - "expectation": "", + "description": "TH reads TestEventTriggersEnabled attribute from General Diagnostics Cluster", + "expectation": "Value has to be 1 (True)", "is_commissioning": false, - "test_plan_number": 3 + "test_plan_number": "3" }, { - "description": "Sending two InvokeRequests with unique paths, but identical CommandRefs", - "expectation": "", + "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 + "test_plan_number": "4" }, { - "description": "Verify DUT responds to InvokeRequestMessage containing two valid paths", - "expectation": "", + "description": "TH reads from the DUT the ESAState", + "expectation": "Value has to be 0x01 (Online)", "is_commissioning": false, - "test_plan_number": 5 + "test_plan_number": "4a" }, { - "description": "Verify DUT responds to InvokeRequestMessage containing one valid paths, and one InvokeRequest to unsupported endpoint", - "expectation": "", + "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": 6 + "test_plan_number": "4b" }, { - "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": "", + "description": "TH reads from the DUT the OptOutState", + "expectation": "Value has to be 0x00 (NoOptOut)", "is_commissioning": false, - "test_plan_number": 7 + "test_plan_number": "4c" }, { - "description": "Verify DUT responds to InvokeRequestMessage containing two valid paths. One of which requires timed invoke, and TimedRequest in InvokeResponseMessage set to true", - "expectation": "", + "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": 8 + "test_plan_number": "5" }, { - "description": "Verify DUT supports extended Data Model Testing feature in General Diagnostics Cluster", - "expectation": "", + "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": 9 + "test_plan_number": "6" }, { - "description": "Verify DUT has TestEventTriggersEnabled attribute set to true in General Diagnostics Cluster", - "expectation": "", + "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": 10 + "test_plan_number": "7" }, { - "description": "Verify DUT capable of responding to request with multiple InvokeResponseMessages", - "expectation": "", + "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": 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": [ + "test_plan_number": "8" + }, { - "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.", + "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": 0 + "test_plan_number": "9" }, { - "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.", + "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": 1 + "test_plan_number": "10" }, { - "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.", + "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": 2 + "test_plan_number": "11" }, { - "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.", + "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": 3 + "test_plan_number": "12" }, { - "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.", + "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": 4 + "test_plan_number": "13" }, { - "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.", + "description": "TH reads from the DUT the ESAState", + "expectation": "Value has to be 0x01 (Online)", "is_commissioning": false, - "test_plan_number": 5 + "test_plan_number": "13a" }, { - "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.", + "description": "TH reads from the DUT the OptOutState", + "expectation": "Value has to be 0x02 (LocalOptOut)", "is_commissioning": false, - "test_plan_number": 6 + "test_plan_number": "13b" }, { - "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.", + "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": 7 + "test_plan_number": "14" }, { - "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": "", + "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": 8 + "test_plan_number": "15" }, { - "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)", + "description": "TH reads from the DUT the Forecast", + "expectation": "Value has to include ForecastUpdateReason=GridOptimization", "is_commissioning": false, - "test_plan_number": 9 + "test_plan_number": "15a" }, { - "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.", + "description": "TH sends command CancelRequest", + "expectation": "Verify DUT responds w/ status SUCCESS(0x00)", "is_commissioning": false, - "test_plan_number": 10 + "test_plan_number": "16" }, { - "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.", + "description": "TH reads from the DUT the Forecast", + "expectation": "Value has to include ForecastUpdateReason=InternalOptimization", "is_commissioning": false, - "test_plan_number": 11 + "test_plan_number": "16a" }, { - "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.", + "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": 12 + "test_plan_number": "17" }, { - "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", + "description": "TH reads from the DUT the Forecast", + "expectation": "Value has to include ForecastUpdateReason=GridOptimization", "is_commissioning": false, - "test_plan_number": 13 - } - ] - }, - { - "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 + "test_plan_number": "17a" }, { - "description": "Commission DUT_FSA onto TH_FSA fabric.", - "expectation": "", + "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": 2 + "test_plan_number": "18" }, { - "description": "Reverse Commission TH_FSAs onto DUT_FSA fabric.", - "expectation": "", + "description": "TH reads from the DUT the OptOutState", + "expectation": "Value has to be 0x03 (OptOut)", "is_commissioning": false, - "test_plan_number": 3 + "test_plan_number": "18a" }, { - "description": "TH_FSA sends RequestCommissioningApproval", - "expectation": "", + "description": "TH reads from the DUT the Forecast", + "expectation": "Value has to include ForecastUpdateReason=Internal Optimization", "is_commissioning": false, - "test_plan_number": "3a" + "test_plan_number": "18b" }, { - "description": "TH_FSA sends CommissionNode", - "expectation": "", + "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": "3b" + "test_plan_number": "19" }, { - "description": "DUT_FSA commissions TH_FSA", - "expectation": "", + "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": "3c" - } - ] - }, - { - "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 + "test_plan_number": "20" }, { - "description": "TH commissions TH_SERVER_NO_UID to TH's fabric", - "expectation": "", + "description": "TH reads from the DUT the OptOutState", + "expectation": "Value has to be 0x00 (NoOptOut)", "is_commissioning": false, - "test_plan_number": 1 + "test_plan_number": "20a" }, { - "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.", + "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": 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": [ + "test_plan_number": "21" + }, { - "description": "Commission DUT if not done", - "expectation": "", - "is_commissioning": true, - "test_plan_number": 0 + "description": "TH reads from the DUT the Forecast", + "expectation": "Value has to include ForecastUpdateReason=LocalOptimization", + "is_commissioning": false, + "test_plan_number": "21a" }, { - "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.", + "description": "TH sends command CancelRequest", + "expectation": "Verify DUT responds w/ status SUCCESS(0x00)", "is_commissioning": false, - "test_plan_number": 1 + "test_plan_number": "22" }, { - "description": "TH instructs TH_FSA to commission TH_SERVER_NO_UID to TH_FSA's fabric.", - "expectation": "", + "description": "TH reads from the DUT the Forecast", + "expectation": "Value has to include ForecastUpdateReason=InternalOptimization", "is_commissioning": false, - "test_plan_number": 2 + "test_plan_number": "22a" }, { - "description": "TH instructs TH_FSA to open up commissioning window on it's aggregator.", - "expectation": "", + "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": 3 + "test_plan_number": "23" }, { - "description": "Follow manufacturer provided instructions to have DUT_FSA commission TH_FSA's aggregator.", - "expectation": "", + "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": 4 + "test_plan_number": "24" }, { - "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": "", + "description": "TH sends command CancelRequest", + "expectation": "Verify DUT responds w/ status INVALID_IN_STATE(0xcb)", "is_commissioning": false, - "test_plan_number": 5 + "test_plan_number": "25" }, { - "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": "", + "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": 6 + "test_plan_number": "26" } ] }, { - "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", + "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": [ - "MWOCTRL.S" + "DEM.S.F05", + "DEM.S.F02" ], "steps": [ { - "description": "Commissioning, already done", + "description": "Commission DUT to TH (can be skipped if done in a preceding test)", "expectation": "", "is_commissioning": true, - "test_plan_number": 1 + "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.", + "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 + "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.", + "description": "TH reads TestEventTriggersEnabled attribute from General Diagnostics Cluster", + "expectation": "Value has to be 1 (True)", "is_commissioning": false, - "test_plan_number": 3 + "test_plan_number": "3" }, { - "description": "Set the CookTime attribute to 60", - "expectation": "Verify DUT responds w/ status SUCCESS(0x00).", + "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 + "test_plan_number": "4" }, { - "description": "Read the CookTime attribute and check for 60", - "expectation": "Verify that the DUT response contains the CookTime value 60.", + "description": "TH reads from the DUT the ESAState", + "expectation": "Value has to be 0x01 (Online)", "is_commissioning": false, - "test_plan_number": 5 + "test_plan_number": "4a" }, { - "description": "Set the CookTime attribute to 1", - "expectation": "Verify DUT responds w/ status SUCCESS(0x00)", + "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": 6 + "test_plan_number": "4b" }, { - "description": "Read the CookTime attribute and check for 1", - "expectation": "Verify that the DUT response contains the CookTime value 1.", + "description": "TH reads from the DUT the OptOutState", + "expectation": "Value has to be 0x00 (NoOptOut)", "is_commissioning": false, - "test_plan_number": 7 + "test_plan_number": "4c" }, { - "description": "Set the CookTime attribute to MaxCookTime", - "expectation": "Verify DUT responds w/ status SUCCESS(0x00)", + "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": 8 + "test_plan_number": "5" }, { - "description": "Read the CookTime attribute and check for MaxCookTime", - "expectation": "Verify that the DUT response contains the CookTime value MaxCookTime.", + "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": 9 + "test_plan_number": "6" }, { - "description": "Read the WattRating attribute, if supported", - "expectation": "Verify that the DUT response contains a uint16 value.", + "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": 10 + "test_plan_number": "7" }, { - "description": "Set the CookTime attribute to 0", + "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": 11 + "test_plan_number": "8" }, { - "description": "Set the CookTime attribute to MaxCookTime+1", - "expectation": "Verify DUT responds w/ status CONSTRAINT_ERROR(0x87)", + "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": 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 + "test_plan_number": "9" }, { - "description": "Set MinPowerValue variable", - "expectation": "", + "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": 2 + "test_plan_number": "10" }, { - "description": "Read the MinPower attribute", - "expectation": "", + "description": "TH reads from the DUT the ESAState", + "expectation": "Value has to be 0x01 (Online)", "is_commissioning": false, - "test_plan_number": 3 + "test_plan_number": "10a" }, { - "description": "Set the MaxPowerValue variable", - "expectation": "", + "description": "TH reads from the DUT the OptOutState", + "expectation": "Value has to be 0x02 (LocalOptOut)", "is_commissioning": false, - "test_plan_number": 4 + "test_plan_number": "10b" }, { - "description": "Read the MaxPower attribute", - "expectation": "", + "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": 5 + "test_plan_number": "11" }, { - "description": "Set the PowerStepValue variable", - "expectation": "", + "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": 6 + "test_plan_number": "12" }, { - "description": "Read the PowerStep attribute", - "expectation": "", + "description": "TH reads from the DUT the Forecast", + "expectation": "Value has to include ForecastUpdateReason=GridOptimization", "is_commissioning": false, - "test_plan_number": 7 + "test_plan_number": "12a" }, { - "description": "Read the PowerSetting attribute", - "expectation": "", + "description": "TH sends command CancelRequest", + "expectation": "Verify DUT responds w/ status SUCCESS(0x00)", "is_commissioning": false, - "test_plan_number": 8 + "test_plan_number": "13" }, { - "description": "Send the SetCookingParameters command", - "expectation": "", + "description": "TH reads from the DUT the Forecast", + "expectation": "Value has to include ForecastUpdateReason=InternalOptimization", "is_commissioning": false, - "test_plan_number": 9 + "test_plan_number": "13a" }, { - "description": "Read and verify the PowerSetting attribute", - "expectation": "", + "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": 10 + "test_plan_number": "14" }, { - "description": "Set the PowerSetting attribute to the minimum value", - "expectation": "", + "description": "TH reads from the DUT the Forecast", + "expectation": "Value has to include ForecastUpdateReason=GridOptimization", "is_commissioning": false, - "test_plan_number": 11 + "test_plan_number": "14a" }, { - "description": "Read and verify the PowerSetting attribute", - "expectation": "", + "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": 12 + "test_plan_number": "15" }, { - "description": "Set the PowerSetting attribute to the maximum value", - "expectation": "", + "description": "TH reads from the DUT the OptOutState", + "expectation": "Value has to be 0x03 (OptOut)", "is_commissioning": false, - "test_plan_number": 13 + "test_plan_number": "15a" }, { - "description": "Read and verify the PowerSetting attribute", - "expectation": "", + "description": "TH reads from the DUT the Forecast", + "expectation": "Value has to include ForecastUpdateReason=Internal Optimization", "is_commissioning": false, - "test_plan_number": 14 + "test_plan_number": "15b" }, { - "description": "Set PowerSetting to an invalid value", - "expectation": "", + "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": 15 + "test_plan_number": "16" }, { - "description": "If PowerStep=1, exit test case.", - "expectation": "", + "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": 16 + "test_plan_number": "17" }, { - "description": "Set PowerSetting to a value that is not an integer multiple of PowerStep", - "expectation": "", + "description": "TH reads from the DUT the OptOutState", + "expectation": "Value has to be 0x00 (NoOptOut)", "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": [ + "test_plan_number": "17a" + }, { - "description": "Commissioning, already done", - "expectation": "", - "is_commissioning": true, - "test_plan_number": 1 + "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": "Read the SupportedWatts attribute", - "expectation": "", + "description": "TH reads from the DUT the Forecast", + "expectation": "Value has to include ForecastUpdateReason=LocalOptimization", "is_commissioning": false, - "test_plan_number": 2 + "test_plan_number": "18a" }, { - "description": "Read the SelectedWattIndex attribute", - "expectation": "", + "description": "TH sends command CancelRequest", + "expectation": "Verify DUT responds w/ status SUCCESS(0x00)", "is_commissioning": false, - "test_plan_number": 3 + "test_plan_number": "19" }, { - "description": "Send the SetCookingParameters command", - "expectation": "", + "description": "TH reads from the DUT the Forecast", + "expectation": "Value has to include ForecastUpdateReason=InternalOptimization", "is_commissioning": false, - "test_plan_number": 4 + "test_plan_number": "19a" }, { - "description": "Read and verify the SelectedWattIndex attribute", - "expectation": "", + "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": 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": [ + "test_plan_number": "20" + }, { - "description": "Commissioning, already done", - "expectation": "", - "is_commissioning": true, - "test_plan_number": 1 + "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": "Read the SupportedModes attribute", - "expectation": "", + "description": "TH sends command CancelRequest", + "expectation": "Verify DUT responds w/ status INVALID_IN_STATE(0xcb)", "is_commissioning": false, - "test_plan_number": 2 + "test_plan_number": "22" }, { - "description": "Read the CurrentMode attribute", - "expectation": "", + "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": 3 + "test_plan_number": "23" } ] }, { - "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", + "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": [ - "OCC.S" + "DEM.S.F06", + "DEM.S.F01" ], "steps": [ { - "description": "Commissioning, already done", + "description": "Commission DUT to TH (can be skipped if done in a preceding test)", "expectation": "", "is_commissioning": true, - "test_plan_number": 1 + "test_plan_number": "1" }, { - "description": "Read Occupancy attribute.", - "expectation": "", + "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 + "test_plan_number": "2" }, { - "description": "Read OccupancySensorType attribute.", - "expectation": "", + "description": "TH reads TestEventTriggersEnabled attribute from General Diagnostics Cluster", + "expectation": "Value has to be 1 (True)", "is_commissioning": false, - "test_plan_number": 3 + "test_plan_number": "3" }, { - "description": "Read OccupancySensorTypeBitmap attribute.", - "expectation": "", + "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 + "test_plan_number": "4" }, { - "description": "Read HoldTimeLimits attribute, if supported", - "expectation": "", + "description": "TH reads from the DUT the ESAState", + "expectation": "Value has to be 0x01 (Online)", "is_commissioning": false, - "test_plan_number": 5 + "test_plan_number": "4a" }, { - "description": "Read HoldTime attribute, if supported", - "expectation": "", + "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": 6 + "test_plan_number": "4b" }, { - "description": "Read PIROccupiedToUnoccupiedDelay attribute, if supported", - "expectation": "", + "description": "TH reads from the DUT the OptOutState", + "expectation": "Value has to be 0x00 (NoOptOut)", "is_commissioning": false, - "test_plan_number": 7 + "test_plan_number": "4c" }, { - "description": "Read PIRUnoccupiedToOccupiedDelay attribute, if supported", - "expectation": "", + "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": 8 + "test_plan_number": "5" }, { - "description": "Read PIRUnoccupiedToOccupiedThreshold attribute, if supported", - "expectation": "", + "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": 9 + "test_plan_number": "6" }, { - "description": "Read UltrasonicOccupiedToUnoccupiedDelay attribute, if supported", - "expectation": "", + "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": 10 + "test_plan_number": "7" }, { - "description": "Read UltrasonicUnoccupiedToOccupiedDelay attribute, if supported", - "expectation": "", + "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": 11 + "test_plan_number": "8" }, { - "description": "Read UltrasonicUnoccupiedToOccupiedThreshold attribute, if supported", - "expectation": "", + "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": 12 + "test_plan_number": "9" }, { - "description": "Read PhysicalContactOccupiedToUnoccupiedDelay attribute, if supported", - "expectation": "", + "description": "TH reads from the DUT the AbsMaxPower attribute.", + "expectation": "Save the value", "is_commissioning": false, - "test_plan_number": 13 + "test_plan_number": "10" }, { - "description": "Read PhysicalContactUnoccupiedToOccupiedDelay attribute, if supported", - "expectation": "", + "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": 14 + "test_plan_number": "10a" }, { - "description": "Read PhysicalContactUnoccupiedToOccupiedThreshold attribute, if supported", - "expectation": "", + "description": "TH reads from the DUT the AbsMinPower attribute.", + "expectation": "Save the value", "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": [ + "test_plan_number": "11" + }, { - "description": "Commissioning, already done", - "expectation": "", - "is_commissioning": true, - "test_plan_number": 1 + "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": "Read OccupancySensorType attribute selection based on FeatureMap Bitmap.", - "expectation": "", + "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": 2 + "test_plan_number": "12" }, { - "description": "Read OccupancySensorTypeBitmap attribute selection based on FeatureMap Bitmap.", - "expectation": "", + "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": 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": [ + "test_plan_number": "13" + }, { - "description": "Commission DUT to TH", - "expectation": "", - "is_commissioning": true, - "test_plan_number": 1 + "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 the FeatureMap attribute on the endpoint for use in later steps.", - "expectation": "", + "description": "TH reads from the DUT the ESAState", + "expectation": "Value has to be 0x01 (Online)", "is_commissioning": false, - "test_plan_number": 2 + "test_plan_number": "14a" }, { - "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": "", + "description": "TH reads from the DUT the OptOutState", + "expectation": "Value has to be 0x02 (LocalOptOut)", "is_commissioning": false, - "test_plan_number": 3 + "test_plan_number": "14b" }, { - "description": "TH writes DUT HoldTime attribute with HoldTimeMin and afterwards reads the attribute.", - "expectation": "", + "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": 4 + "test_plan_number": "15" }, { - "description": "TH writes DUT HoldTime attribute with HoldTimeMax and afterwards reads the attribute.", - "expectation": "", + "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": 5 + "test_plan_number": "16" }, { - "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": "", + "description": "TH reads from the DUT the Forecast", + "expectation": "Value has to include ForecastUpdateReason=GridOptimization", "is_commissioning": false, - "test_plan_number": "6a" + "test_plan_number": "16a" }, { - "description": "TH writes DUT's PIROccupiedToUnoccupiedDelay attribute with HoldTimeMax, then TH reads DUT's PIROccupiedToUnoccupiedDelay and HoldTime attributes.", - "expectation": "", + "description": "TH sends command CancelRequest", + "expectation": "Verify DUT responds w/ status SUCCESS(0x00)", "is_commissioning": false, - "test_plan_number": "6b" + "test_plan_number": "17" }, { - "description": "If DUT FeatureMap has US, and UltrasonicOccupiedToUnoccupiedDelay is supported, then TH writes HoldTimeMin to DUT's HoldTime attribute, otherwise skip 7a, 7b.", - "expectation": "", + "description": "TH reads from the DUT the Forecast", + "expectation": "Value has to include ForecastUpdateReason=InternalOptimization", "is_commissioning": false, - "test_plan_number": "7a" + "test_plan_number": "17a" }, { - "description": "TH writes DUT UltrasonicOccupiedToUnoccupiedDelay attribute with HoldTimeMax, then TH reads DUT UltrasonicOccupiedToUnoccupiedDelay and HoldTime attributes.", - "expectation": "", + "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": "7b" + "test_plan_number": "18" }, { - "description": "If DUT FeatureMap has PHY, and PhysicalContactOccupiedToUnoccupiedDelay is supported, then TH writes HoldTimeMin to HoldTime attribute, otherwise skip 8a, 8b.", - "expectation": "", + "description": "TH reads from the DUT the Forecast", + "expectation": "Value has to include ForecastUpdateReason=GridOptimization", "is_commissioning": false, - "test_plan_number": "8a" + "test_plan_number": "18a" }, { - "description": "TH writes DUT PhysicalContactOccupiedToUnoccupiedDelay attribute with HoldTimeMax, then TH reads DUT PhysicalContactOccupiedToUnoccupiedDelay and HoldTime attributes.", - "expectation": "", + "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": "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": [ + "test_plan_number": "19" + }, { - "description": "Commission DUT to TH.", - "expectation": "", - "is_commissioning": true, - "test_plan_number": 1 + "description": "TH reads from the DUT the OptOutState", + "expectation": "Value has to be 0x03 (OptOut)", + "is_commissioning": false, + "test_plan_number": "19a" }, { - "description": "If HoldTime is supported, TH writes HoldTime attribute to 10 sec on DUT.", - "expectation": "", + "description": "TH reads from the DUT the Forecast", + "expectation": "Value has to include ForecastUpdateReason=InternalOptimization", "is_commissioning": false, - "test_plan_number": 2 + "test_plan_number": "19b" }, { - "description": "Prompt operator to await until DUT occupancy changes to unoccupied state.", - "expectation": "", + "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": 3 + "test_plan_number": "20" }, { - "description": "TH subscribes to Occupancy sensor attributes and events.", - "expectation": "", + "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": 4 + "test_plan_number": "21" }, { - "description": "Prompt operator to trigger occupancy change.", - "expectation": "", + "description": "TH reads from the DUT the OptOutState", + "expectation": "Value has to be 0x00 (NoOptOut)", "is_commissioning": false, - "test_plan_number": "5a" + "test_plan_number": "21a" }, { - "description": "TH reads Occupancy attribute from DUT. Verify occupancy changed to occupied and Occupancy attribute was reported as occupied.", - "expectation": "", + "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": "5b" + "test_plan_number": "22" }, { - "description": "If supported, verify OccupancyChangedEvent was reported as occupied.", - "expectation": "", + "description": "TH reads from the DUT the Forecast", + "expectation": "Value has to include ForecastUpdateReason=LocalOptimization", "is_commissioning": false, - "test_plan_number": "5c" + "test_plan_number": "22a" }, { - "description": "If HoldTime is supported, wait for HoldTime, otherwise prompt operator to wait until no longer occupied.", - "expectation": "", + "description": "TH sends command CancelRequest", + "expectation": "Verify DUT responds w/ status SUCCESS(0x00)", "is_commissioning": false, - "test_plan_number": 6 + "test_plan_number": "23" }, { - "description": "TH reads Occupancy attribute from DUT. Verify occupancy changed to unoccupied and Occupancy attribute was reported as unoccupied.", - "expectation": "", + "description": "TH reads from the DUT the Forecast", + "expectation": "Value has to include ForecastUpdateReason=InternalOptimization", "is_commissioning": false, - "test_plan_number": "7a" + "test_plan_number": "23a" }, { - "description": "If supported, verify OccupancyChangedEvent was reported as unoccupied.", - "expectation": "", + "description": "TH sends command CancelRequest", + "expectation": "Verify DUT responds w/ status INVALID_IN_STATE(0xcb)", "is_commissioning": false, - "test_plan_number": "7b" + "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_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", + "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": [ - "OCC.S" + "DEM.S.F06", + "DEM.S.F02" ], "steps": [ { - "description": "Commission DUT to TH if not already done", + "description": "Commission DUT to TH (can be skipped if done in a preceding test)", "expectation": "", "is_commissioning": true, - "test_plan_number": 1 + "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": "", + "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 + "test_plan_number": "2" }, { - "description": "Prepare DUT to be unoccupied state.", - "expectation": "", + "description": "TH reads TestEventTriggersEnabled attribute from General Diagnostics Cluster", + "expectation": "Value has to be 1 (True)", "is_commissioning": false, - "test_plan_number": "3a" + "test_plan_number": "3" }, { - "description": "TH reads DUT Occupancy attribute.", - "expectation": "", + "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": "3b" + "test_plan_number": "4" }, { - "description": "Trigger DUT to change the occupancy state.", - "expectation": "", + "description": "TH reads from the DUT the ESAState", + "expectation": "Value has to be 0x01 (Online)", "is_commissioning": false, - "test_plan_number": "3c" + "test_plan_number": "4a" }, { - "description": "TH awaits a ReportDataMessage containing an attribute report for DUT Occupancy attribute.", - "expectation": "", + "description": "TH reads from the DUT the Forecast", + "expectation": "Value has to include valid slots[0].ManufacturerESAState", "is_commissioning": false, - "test_plan_number": "3d" + "test_plan_number": "4b" }, { - "description": "Check if DUT supports HoldTime attribute, If not supported, then stop and skip the rest of test cases.", - "expectation": "", + "description": "TH reads from the DUT the OptOutState", + "expectation": "Value has to be 0x00 (NoOptOut)", "is_commissioning": false, - "test_plan_number": "4a" + "test_plan_number": "4c" }, { - "description": "TH writes HoldTimeMin to HoldTime attribute.", - "expectation": "", + "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": "4b" + "test_plan_number": "5" }, { - "description": "TH clears its report history and writes HoldTimeMax to HoldTime attribute.", - "expectation": "", + "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": "4c" + "test_plan_number": "6" }, { - "description": "TH awaits a ReportDataMessage containing an attribute report for DUT HoldTime attribute and all legacy attributes supported.", - "expectation": "", + "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": "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": [ + "test_plan_number": "7" + }, { - "description": "Run entire test", - "expectation": "", + "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": 1 - } - ] - }, - { - "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": [ + "test_plan_number": "8" + }, { - "description": "Commission DUT to TH", - "expectation": "", - "is_commissioning": true, - "test_plan_number": 1 + "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": "Subscribe to all attributes of the PowerSource Cluster", - "expectation": "", + "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": 2 + "test_plan_number": "10" }, { - "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.", + "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": 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": [ + "test_plan_number": "11" + }, { - "description": "Run entire test", - "expectation": "", + "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": 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": [ + "test_plan_number": "12" + }, { - "description": "Run entire test", - "expectation": "", + "description": "TH reads from the DUT the ESAState", + "expectation": "Value has to be 0x01 (Online)", "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": [ + "test_plan_number": "12a" + }, { - "description": "Run entire test", - "expectation": "", + "description": "TH reads from the DUT the OptOutState", + "expectation": "Value has to be 0x02 (LocalOptOut)", "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": [ + "test_plan_number": "12b" + }, { - "description": "Run entire test", - "expectation": "", + "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": 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": [ + "test_plan_number": "13" + }, { - "description": "Run entire test", - "expectation": "", + "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": 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": [ + "test_plan_number": "14" + }, { - "description": "Run entire test", - "expectation": "", + "description": "TH reads from the DUT the Forecast", + "expectation": "Value has to include ForecastUpdateReason=GridOptimization", "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": [ + "test_plan_number": "14a" + }, { - "description": "Run entire test", - "expectation": "", + "description": "TH sends command CancelRequest", + "expectation": "Verify DUT responds w/ status SUCCESS(0x00)", "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": [ + "test_plan_number": "15" + }, { - "description": "Run entire test", - "expectation": "", + "description": "TH reads from the DUT the Forecast", + "expectation": "Value has to include ForecastUpdateReason=InternalOptimization", "is_commissioning": false, - "test_plan_number": 1 + "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_RVCRUNM_2_1", - "desc": "test_TC_RVCRUNM_2_1", - "function": "test_TC_RVCRUNM_2_1", - "path": "sdk/TC_RVCRUNM_2_1", + "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": [ - "RVCRUNM.S" + "DEM.S.F01", + "DEM.S.F02" ], "steps": [ { - "description": "Run entire test", + "description": "Commission DUT to TH (can be skipped if done in a preceding test)", "expectation": "", + "is_commissioning": true, + "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": 1 + "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_RVCRUNM_2_2", - "desc": "test_TC_RVCRUNM_2_2", - "function": "test_TC_RVCRUNM_2_2", - "path": "sdk/TC_RVCRUNM_2_2", - "pics": [ - "RVCRUNM.S" - ], + "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", @@ -5281,83 +5042,7191 @@ ] }, { - "class_name": "TC_SC_3_6", - "desc": "test_TC_SC_3_6", - "function": "test_TC_SC_3_6", - "path": "sdk/TC_SC_3_6", + "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": "Run entire test", + "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_SC_7_1", - "desc": "test_TC_SC_7_1", - "function": "test_TC_SC_7_1", - "path": "sdk/TC_SC_7_1", - "pics": [], + "class_name": "TC_DGSW_2_1", + "desc": "[TC-DGSW-2.1] Attributes with Server as DUT", + "function": "test_TC_DGSW_2_1", + "path": "sdk/TC_DGSW_2_1", + "pics": [ + "DGSW.S" + ], "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, + "description": "Commissioning, already done", + "expectation": "", + "is_commissioning": true, "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 ", + "description": "Read the ThreadMetrics attribute", + "expectation": "", "is_commissioning": false, "test_plan_number": 2 }, { - "description": "TH compares the discriminators from the provided setup codes", - "expectation": "Discriminators do not match", + "description": "Read the CurrentHeapFree attribute", + "expectation": "", "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", + "description": "Read the CurrentHeapUsed attribute", "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": [ + "test_plan_number": 4 + }, { - "description": "Run entire test", + "description": "Read the CurrentHeapHighWatermark attribute", "expectation": "", "is_commissioning": false, - "test_plan_number": 1 + "test_plan_number": 5 } ] }, { - "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": [], + "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": "Commissoning with DUT is done", + "expectation": "", + "is_commissioning": true, + "test_plan_number": "0" + }, + { + "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 ResourceExhausted", + "is_commissioning": false, + "test_plan_number": "31" + }, + { + "description": "TH sends GetCredentialStatus Command with Credential as 7 1", + "expectation": "DUT responds with GetCredentialStatusResponse Command and CredentialExists is True", + "is_commissioning": false, + "test_plan_number": "32" + }, + { + "description": "TH sends GetCredentialStatus Command with Credential as 8 max_aliro_keys_supported", + "expectation": "Verify DUT responds with GetCredentialStatusResponse having CredentialExists is false 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_DRLK_2_5", + "desc": "test_TC_DRLK_2_5", + "function": "test_TC_DRLK_2_5", + "path": "sdk/TC_DRLK_2_5", + "pics": [ + "DRLK.S", + "DRLK.S.F04" + ], + "steps": [ + { + "description": "TH reads NumberOfWeekDaySchedulesSupportedPerUser attribute.", + "expectation": "Verify that TH is able to read the attribute successfully.", + "is_commissioning": false, + "test_plan_number": "1" + }, + { + "description": "TH sends SetUser Command to DUT.", + "expectation": "Verify that the DUT sends SUCCESS response.", + "is_commissioning": false, + "test_plan_number": "2a" + }, + { + "description": "TH sends SetWeekDaySchedule Command to DUT.", + "expectation": "Verify that the DUT sends SUCCESS response.", + "is_commissioning": false, + "test_plan_number": "2b" + }, + { + "description": "TH sends SetWeekDaySchedule to DUT with different DaysMaskMap.", + "expectation": "Verify that the DUT sends SUCCESS response.", + "is_commissioning": false, + "test_plan_number": "2c" + }, + { + "description": "TH sends GetWeekDaySchedule Command to DUT.", + "expectation": "Verify that the DUT sends GetWeekDayScheduleResponse command with expected values.", + "is_commissioning": false, + "test_plan_number": "3" + }, + { + "description": "TH sends SetWeekDaySchedule Command to DUT.", + "expectation": "Verify that the DUT responds with INVALID_COMMAND.", + "is_commissioning": false, + "test_plan_number": "4" + }, + { + "description": "TH sends SetWeekDaySchedule Command to DUT.", + "expectation": "Verify that the DUT responds with INVALID_COMMAND.", + "is_commissioning": false, + "test_plan_number": "5" + }, + { + "description": "TH sends SetWeekDaySchedule Command to DUT.", + "expectation": "Verify that the DUT responds with INVALID_COMMAND.", + "is_commissioning": false, + "test_plan_number": "6" + }, + { + "description": "TH sends SetWeekDaySchedule Command to DUT.", + "expectation": "Verify that the DUT responds with INVALID_COMMAND.", + "is_commissioning": false, + "test_plan_number": "7" + }, + { + "description": "TH sends GetWeekDaySchedule Command to DUT.", + "expectation": "Verify that the DUT responds with with INVALID_COMMAND.", + "is_commissioning": false, + "test_plan_number": "8" + }, + { + "description": "TH sends GetWeekDaySchedule Command to DUT.", + "expectation": "Verify that the DUT responds with GetWeekDayScheduleResponse command with Status NOT_FOUND.", + "is_commissioning": false, + "test_plan_number": "9" + }, + { + "description": "TH sends ClearWeekDaySchedule Command to DUT.", + "expectation": "Verify that the DUT sends SUCCESS response.", + "is_commissioning": false, + "test_plan_number": "10a" + }, + { + "description": "TH sends ClearWeekDaySchedule Command to DUT.", + "expectation": "Verify that the DUT sends INVALID_COMMAND response.", + "is_commissioning": false, + "test_plan_number": "10b" + }, + { + "description": "TH sends ClearWeekDaySchedule Command to DUT.", + "expectation": "Verify that the DUT sends INVALID_COMMAND response.", + "is_commissioning": false, + "test_plan_number": "10c" + }, + { + "description": "TH sends GetWeekDaySchedule Command to DUT.", + "expectation": "Verify that the DUT sends NOT_FOUND response.", + "is_commissioning": false, + "test_plan_number": "11" + }, + { + "description": "TH sends ClearUser Command to DUT.", + "expectation": "Verify that the DUT sends SUCCESS response.", + "is_commissioning": false, + "test_plan_number": "12" + } + ] + }, + { + "class_name": "TC_DRLK_2_9", + "desc": "test_TC_DRLK_2_9", + "function": "test_TC_DRLK_2_9", + "path": "sdk/TC_DRLK_2_9", + "pics": [ + "DRLK.S" + ], + "steps": [ + { + "description": "TH reads NumberOfTotalUsersSupported attribute.", + "expectation": "Verify that TH is able to read the attribute successfully.", + "is_commissioning": false, + "test_plan_number": "1" + }, + { + "description": "TH sends SetUser Command to DUT.", + "expectation": "Verify that the DUT sends SUCCESS response", + "is_commissioning": false, + "test_plan_number": "2a" + }, + { + "description": "TH reads MinPINCodeLength attribute .", + "expectation": "Verify that TH is able to read the attribute successfully and value is within range.", + "is_commissioning": false, + "test_plan_number": "2b" + }, + { + "description": "TH reads MaxPINCodeLength attribute.", + "expectation": "Verify that TH is able to read the attribute successfully and value is within range.", + "is_commissioning": false, + "test_plan_number": "2c" + }, + { + "description": "TH reads MinRFIDCodeLength attribute.", + "expectation": "Verify that TH is able to read the attribute successfully.", + "is_commissioning": false, + "test_plan_number": "2d" + }, + { + "description": "TH reads MaxRFIDCodeLength attribute.", + "expectation": "Verify that TH is able to read the attribute successfully and value is within range.", + "is_commissioning": false, + "test_plan_number": "2e" + }, + { + "description": "TH sends SetCredential Command to DUT.", + "expectation": "Verify that the DUT responds with SetCredentialResponse command with Status SUCCESS.", + "is_commissioning": false, + "test_plan_number": "2f" + }, + { + "description": "TH sends GetCredentialStatus Command .", + "expectation": "Verify that the DUT responds with GetCredentialStatusResponse Command .", + "is_commissioning": false, + "test_plan_number": "3" + }, + { + "description": "TH sends SetCredential Command to DUT.", + "expectation": "Verify that the DUT responds with SetCredentialResponse command with Status INVALID_COMMAND.", + "is_commissioning": false, + "test_plan_number": "4" + }, + { + "description": "TH sends SetCredential Command to DUT.", + "expectation": "Verify that the DUT responds with SetCredentialResponse command with Status DUPLICATE.", + "is_commissioning": false, + "test_plan_number": "5" + }, + { + "description": "TH sends SetCredential Command to DUT.", + "expectation": "Verify that the DUT responds with SetCredentialResponse command with Status DUPLICATE or OCCUPIED.", + "is_commissioning": false, + "test_plan_number": "6a" + }, + { + "description": "TH sends SetCredential Command to DUT.", + "expectation": "Verify that the DUT responds with SetCredentialResponse command with Status DUPLICATE or OCCUPIED.", + "is_commissioning": false, + "test_plan_number": "6b" + }, + { + "description": "TH sends SetCredential Command to DUT.", + "expectation": "Verify that the DUT responds with SetCredentialResponse command with Status INVALID_COMMAND.", + "is_commissioning": false, + "test_plan_number": "7" + }, + { + "description": "TH sends ClearCredential Command to DUT.", + "expectation": "Verify that the DUT sends SUCCESS response.", + "is_commissioning": false, + "test_plan_number": "8" + }, + { + "description": "TH sends GetCredentialStatus command to DUT ", + "expectation": "Verify that the DUT responds with GetCredentialStatusResponse Command.", + "is_commissioning": false, + "test_plan_number": "9a" + }, + { + "description": "TH sends ClearUser Command to DUT.", + "expectation": "Verify that the DUT sends SUCCESS response", + "is_commissioning": false, + "test_plan_number": "9b" + }, + { + "description": "TH sends SetUser Command to DUT.", + "expectation": "Verify that the DUT sends SUCCESS response.", + "is_commissioning": false, + "test_plan_number": "10" + }, + { + "description": "TH sends SetCredential Command to DUT.", + "expectation": "Verify that the DUT responds with SetCredentialResponse command with Status SUCCESS.", + "is_commissioning": false, + "test_plan_number": "11" + }, + { + "description": "TH sends ClearCredential Command to DUT.", + "expectation": " Verify that the DUT sends SUCCESS response.", + "is_commissioning": false, + "test_plan_number": "12a" + }, + { + "description": " TH sends GetCredentialStatus Command.", + "expectation": "Verify that the DUT responds with GetCredentialStatusResponse Command with credentialExists=FALSE.", + "is_commissioning": false, + "test_plan_number": "13" + }, + { + "description": "TH sends ClearCredential Command to DUT", + "expectation": "if {PICS_SF_ALIRO} verify that the DUT sends a SUCCESS response else DUT sends an INVALID_COMMAND response.", + "is_commissioning": false, + "test_plan_number": "14a" + }, + { + "description": "TH sends ClearCredential Command to DUT with Invalid Credential Type.", + "expectation": "Verify that the DUT sends an INVALID_COMMAND.", + "is_commissioning": false, + "test_plan_number": "14b" + }, + { + "description": "TH sends ClearUser Command to DUT to clear all the users.", + "expectation": "Verify that the DUT sends SUCCESS response.", + "is_commissioning": false, + "test_plan_number": "14c" + }, + { + "description": "TH reads NumberOfPINUsersSupported attribute.", + "expectation": "Verify that TH is able to read the attribute successfully and value is within range.", + "is_commissioning": false, + "test_plan_number": "14d" + }, + { + "description": "TH reads NumberOfCredentialsSupportedPerUser attribute from DUT.", + "expectation": "Verify that TH is able to read the attribute successfully and value is within range.", + "is_commissioning": false, + "test_plan_number": "15a" + }, + { + "description": "TH sends SetUser Command to DUT.", + "expectation": "Verify that the DUT sends SUCCESS response.", + "is_commissioning": false, + "test_plan_number": "15b" + }, + { + "description": "TH sends SetCredential Command to DUT.", + "expectation": "Verify that the DUT sends SetCredentialResponse command with Status SUCCESS.", + "is_commissioning": false, + "test_plan_number": "15c" + }, + { + "description": " TH sends SetCredential Command with CredentialIndex as 'max-num-credential-user'.", + "expectation": "Verify that the DUT sends SetCredentialResponse command with Status RESOURCE_EXHAUSTION.", + "is_commissioning": false, + "test_plan_number": "15d" + }, + { + "description": "TH sends ClearCredential Command to DUT to clear all the credentials of PIN type.", + "expectation": "Verify that the DUT sends SUCCESS response.", + "is_commissioning": false, + "test_plan_number": "15e" + }, + { + "description": "TH sends ClearUser Command to DUT with UserIndex as 0xFFFE to clear all the users.", + "expectation": "Verify that the DUT sends SUCCESS response.", + "is_commissioning": false, + "test_plan_number": "15f" + }, + { + "description": " TH sends SetUser Command to DUT.", + "expectation": "Verify that the DUT sends SUCCESS response", + "is_commissioning": false, + "test_plan_number": "16" + }, + { + "description": "TH sends SetCredential Command to DUT with CredentialType.RFID.", + "expectation": "Verify that the DUT sends SetCredentialResponse command with Status SUCCESS.", + "is_commissioning": false, + "test_plan_number": "17" + }, + { + "description": "TH sends SetCredential Command to DUT with CredentialType.PIN.", + "expectation": "Verify that the DUT sends SetCredentialResponse command with Status SUCCESS.", + "is_commissioning": false, + "test_plan_number": "18" + }, + { + "description": "TH sends GetUser Command to DUT.", + "expectation": "Verify that the DUT responds with GetUserResponse Command.", + "is_commissioning": false, + "test_plan_number": "19" + }, + { + "description": "TH sends SetCredential Command to DUT to modify the CredentialData.", + "expectation": "Verify that the DUT sends SetCredentialResponse command with Status SUCCESS.", + "is_commissioning": false, + "test_plan_number": "20" + }, + { + "description": "TH sends GetUser Command to DUT.", + "expectation": "Verify that the DUT responds with GetUserResponse Command.", + "is_commissioning": false, + "test_plan_number": "21" + }, + { + "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": "22" + }, + { + "description": "TH sends ClearUser Command to DUT to clear all the users.", + "expectation": "Verify that the DUT sends SUCCESS response.", + "is_commissioning": false, + "test_plan_number": "23" + }, + { + "description": "TH sends SetUser Command to DUT.", + "expectation": "Verify that the DUT sends SUCCESS response.", + "is_commissioning": false, + "test_plan_number": "24" + }, + { + "description": "TH sends ClearAliroReaderConfig Command to DUT.", + "expectation": "Verify that the DUT sends SUCCESS response.", + "is_commissioning": false, + "test_plan_number": "25" + }, + { + "description": ",TH sends SetAliroReaderConfig Command to DUT without GroupResolvingKey.", + "expectation": "Verify that DUT sends success response.", + "is_commissioning": false, + "test_plan_number": "26" + }, + { + "description": ",TH sends SetAliroReaderConfig Command to DUT with GroupResolvingKey.", + "expectation": "Verify that DUT sends success response.", + "is_commissioning": false, + "test_plan_number": "27" + }, + { + "description": "TH sends SetCredential Command CredentialType as AliroEvictableEndpointKey.", + "expectation": "Verify that the DUT responds with SetCredentialResponse commad with status success ", + "is_commissioning": false, + "test_plan_number": "28" + }, + { + "description": "TH sends SetCredential Command to DUT with CredentialType.PIN.", + "expectation": "Verify that the DUT sends SetCredentialResponse command with Status SUCCESS.", + "is_commissioning": false, + "test_plan_number": "29" + }, + { + "description": "TH sends GetUser Command to DUT.", + "expectation": "Verify that the DUT sends SUCCESS response.", + "is_commissioning": false, + "test_plan_number": "30" + }, + { + "description": "TH sends SetCredential Command to modify PIN CredentialType", + "expectation": "Verify that the DUT responds with SetCredentialResponse command with status success ", + "is_commissioning": false, + "test_plan_number": "31" + }, + { + "description": "TH sends GetUser Command to DUT.", + "expectation": "Verify that the DUT sends SUCCESS response.", + "is_commissioning": false, + "test_plan_number": "32" + }, + { + "description": "TH sends SetCredential Command to modify AliroEvictableEndpointKey CredentialType", + "expectation": "Verify that the DUT responds with SetCredentialResponse command with status success ", + "is_commissioning": false, + "test_plan_number": "33" + }, + { + "description": "TH sends GetUser Command to DUT.", + "expectation": "Verify that the DUT sends SUCCESS response.", + "is_commissioning": false, + "test_plan_number": "34" + }, + { + "description": "TH sends ClearUser Command to DUT.", + "expectation": "Verify that the DUT sends SUCCESS response.", + "is_commissioning": false, + "test_plan_number": "35" + }, + { + "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": "36" + }, + { + "description": "TH sends ClearAliroReaderConfig Command to DUT.", + "expectation": "Verify that the DUT sends SUCCESS response.", + "is_commissioning": false, + "test_plan_number": "37" + } + ] + }, + { + "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": "Commission DUT if not done", + "expectation": "", + "is_commissioning": true, + "test_plan_number": 0 + }, + { + "description": "Identify endpoints with Ecosystem Information Cluster", + "expectation": "", + "is_commissioning": false, + "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": "Commission DUT if not done", + "expectation": "", + "is_commissioning": true, + "test_plan_number": 0 + }, + { + "description": "Prepare", + "expectation": "", + "is_commissioning": false, + "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": true, + "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": true, + "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": true, + "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": true, + "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": true, + "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": true, + "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": true, + "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": true, + "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": "TC_ICDM_5_1", + "desc": "[TC-ICDM-5.1] Operating Mode with DUT as Server", + "function": "test_TC_ICDM_5_1", + "path": "sdk/TC_ICDM_5_1", + "pics": [ + "ICDM.S", + "ICDM.S.F02" + ], + "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": 1 + }, + { + "description": "TH reads from the DUT the OperatingMode attribute.", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "2a" + }, + { + "description": "Verify that the ICD DNS-SD TXT key is present.", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "2b" + }, + { + "description": "TH sends RegisterClient command.", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "3a" + }, + { + "description": "TH reads from the DUT the OperatingMode attribute.", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "3b" + }, + { + "description": "Verify that mDNS is advertising ICD key.", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "3c" + }, + { + "description": "TH sends UnregisterClient command with CheckInNodeID1.", + "expectation": "", + "is_commissioning": false, + "test_plan_number": 4 + }, + { + "description": "TH reads from the DUT the OperatingMode attribute.", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "5a" + }, + { + "description": "Verify that the ICD DNS-SD TXT key is present.", + "expectation": "", + "is_commissioning": false, + "test_plan_number": "5b" + } + ] + }, + { + "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 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", @@ -5375,25 +12244,406 @@ "pics": [], "steps": [ { - "description": "Run entire test", + "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_SEAR_1_6", - "desc": "test_TC_SEAR_1_6", - "function": "test_TC_SEAR_1_6", - "path": "sdk/TC_SEAR_1_6", + "class_name": "TC_SwitchTests", + "desc": "test_TC_SWTCH_2_5", + "function": "test_TC_SWTCH_2_5", + "path": "sdk/TC_SWTCH", "pics": [], "steps": [ { - "description": "Run entire test", + "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" } ] }, 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 index 32c4b8e4..30a4414d 100644 --- 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 @@ -95,6 +95,7 @@ async def proccess_commands_sdk_container( ) -> None: complete_json = [] errors_found: list[str] = [] + warnings_found: list[str] = [] test_function_count = 0 invalid_test_function_count = 0 @@ -110,8 +111,16 @@ async def proccess_commands_sdk_container( prefix=CONTAINER_TH_CLIENT_EXEC, ) if result.exit_code != 0: - errors_found.append(f"Failed running command: {command}") - continue + try: + with open(JSON_OUTPUT_FILE_PATH, "r") as json_file: + json_data = json.load(json_file) + + errors_found.append( + f"Failed running command: {command}.\n" + f"Error message: {json_data['detail']}" + ) + finally: + continue with open(JSON_OUTPUT_FILE_PATH, "r") as json_file: json_data = json.load(json_file) @@ -123,6 +132,11 @@ async def proccess_commands_sdk_container( function = json_dict["function"] if not function.startswith("test_TC_"): invalid_test_function_count += 1 + warnings_found.append( + f"Warning: File path: {json_dict['path']} " + f"Class: {json_dict['class_name']}. " + f"Invalid test function: {function}" + ) complete_json.append(json_dict) sdk_container.destroy() @@ -146,11 +160,13 @@ async def proccess_commands_sdk_container( f"{invalid_test_function_count}" ) ) + if len(warnings_found) > 0: + print(*warnings_found, sep="\n") 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(f"Error {i+1}: {error}") print("###########################################################################") 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 8634c006..d3249e1c 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 @@ -73,6 +73,7 @@ def main() -> None: # Load python_testing/scripts as a module. This folder is where all python scripts # are located sys.path.append("/root/python_testing/scripts") + sys.path.append("/root/python_testing/scripts/sdk") test_args1 = sys.argv[2:] @@ -82,13 +83,21 @@ def main() -> None: config = parse_matter_test_args(test_args) 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 - ) + try: + info = get_test_info_support( + script_path=sys.argv[1], class_name=sys.argv[2], config=config + ) + except Exception as e: + error_msg = {"detail": f"{str(e)}"} + with open(TEST_INFO_JSON_PATH, "w") as f: + json.dump(error_msg, f, indent=4) + raise e + 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 + # 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):