Test Added Nov 30 (#23831)
* Added test
TC-ACL-2.3
TC-ALOGIN-12.1
TC-BRBINFO-1.1
TC-BRBINFO-2.1
TC-CNET-1.3
TC-DRLK-2.6
TC-WAKEONLAN-4.1
* Auto generated files
* Restyled by whitespace
* Restyled by prettier-yaml
* Modified DGTHREAD PICS
* Auto generated files
* Modifed WakeOnLan script
* Auto generated files
* Removed BRBINFO -2.1 test from Darwin Json file
* Auto generated files
Co-authored-by: Restyled.io <commits@restyled.io>
diff --git a/examples/darwin-framework-tool/templates/tests/ciTests.json b/examples/darwin-framework-tool/templates/tests/ciTests.json
index 50f8ce2..fa2baf9 100644
--- a/examples/darwin-framework-tool/templates/tests/ciTests.json
+++ b/examples/darwin-framework-tool/templates/tests/ciTests.json
@@ -6,6 +6,7 @@
"TestEvents",
"TestDiscovery",
"TestGroupMessaging",
+ "Test_TC_BRBINFO_2_1",
"Test_TC_DGTHREAD_2_1",
"Test_TC_DGTHREAD_2_2",
"Test_TC_DGTHREAD_2_3",
diff --git a/src/app/tests/suites/certification/PICS.yaml b/src/app/tests/suites/certification/PICS.yaml
index ddcda6e..cffcba6 100644
--- a/src/app/tests/suites/certification/PICS.yaml
+++ b/src/app/tests/suites/certification/PICS.yaml
@@ -3714,10 +3714,10 @@
id: DGTHREAD.S.A0039
- label: "Does the DUT-server support the Delay attribute?"
- id: DGTHREAD.S.A003A
+ id: DGTHREAD.S.A003a
- label: "Does the DUT-server support the SecurityPolicy attribute?"
- id: DGTHREAD.S.A003B
+ id: DGTHREAD.S.A003b
- label: "Does the DUT-server support the ChannelPage0Mask attribute?"
id: DGTHREAD.S.A003c
@@ -4589,6 +4589,16 @@
- label: "Does the DUT(server) support the ReachableChanged event?"
id: BINFO.S.E03
+ #Features
+ - label: "Does the device implement the Wi-Fi related features ?"
+ id: CNET.S.F00
+
+ - label: "Does the device implement the Thread related features"
+ id: CNET.S.F01
+
+ - label: "Does the device implement the Ethernet related features ?"
+ id: CNET.S.F02
+
#Client Attributes
- label: "Does the DUT(Client) support the DataModelRevision attribute?"
id: BINFO.C.A0000
diff --git a/src/app/tests/suites/certification/Test_TC_ACL_2_3.yaml b/src/app/tests/suites/certification/Test_TC_ACL_2_3.yaml
index ee68e0c..7ef1ba4 100644
--- a/src/app/tests/suites/certification/Test_TC_ACL_2_3.yaml
+++ b/src/app/tests/suites/certification/Test_TC_ACL_2_3.yaml
@@ -20,158 +20,82 @@
config:
nodeId: 0x12344321
- cluster: "Basic"
+ cluster: "Access Control"
endpoint: 0
+ D_OK_EMPTY:
+ type: octet_string
+ defaultValue: "hex:1718"
+ D_OK_SINGLE:
+ type: octet_string
+ defaultValue: "hex:17D00000F1FF01003D48656C6C6F20576F726C642E205468697320697320612073696E676C6520656C656D656E74206C6976696E6720617320612063686172737472696E670018"
+ D_OK_FULL:
+ type: octet_string
+ defaultValue: "hex:17D00000F1FF01003D48656C6C6F20576F726C642E205468697320697320612073696E676C6520656C656D656E74206C6976696E6720617320612063686172737472696E6700D00000F1FF02003148656C6C6F20576F726C642E205468697320697320612073696E676C6520656C656D656E7420616761696E2E2E2E2E2E0018"
+ D_BAD_LENGTH:
+ type: octet_string
+ defaultValue: "hex:17D00000F1FF01003D48656C6C6F20576F726C642E205468697320697320612073696E676C6520656C656D656E74206C6976696E6720617320612063686172737472696E6700D00000F1FF02003248656C6C6F20576F726C642E205468697320697320612073696E676C6520656C656D656E7420616761696E2E2E2E2E2E2E0018"
+ D_BAD_STRUCT:
+ type: octet_string
+ defaultValue: "hex:1518"
+ D_BAD_LIST:
+ type: octet_string
+ defaultValue: "hex:3701D00000F1FF01003D48656C6C6F20576F726C642E205468697320697320612073696E676C6520656C656D656E74206C6976696E6720617320612063686172737472696E670018"
+ D_BAD_ELEM:
+ type: octet_string
+ defaultValue: "hex:17103D48656C6C6F20576F726C642E205468697320697320612073696E676C6520656C656D656E74206C6976696E6720617320612063686172737472696E670018"
+ D_BAD_OVERFLOW:
+ type: octet_string
+ defaultValue: "hex:17D00000F1FF01003D48656C6C6F20576F726C642E205468697320697320612073696E676C6520656C656D656E74206C6976696E6720617320612063686172737472696E670018FF"
+ D_BAD_UNDERFLOW:
+ type: octet_string
+ defaultValue: "hex:17D00000F1FF01003D48656C6C6F20576F726C642E205468697320697320612073696E676C6520656C656D656E74206C6976696E6720617320612063686172737472696E6700"
+ D_BAD_NONE:
+ type: octet_string
+ defaultValue: ""
tests:
- - label: "Pre-Conditions"
- verification: |
- Notes
-
- 1.N1 is the node ID of TH1
-
- 2.D_OK_EMPTY:"1718" which is an octstr of length 2 containing valid TLV:
-
- - top-level anonymous list (empty)
-
- 3.D_OK_SINGLE:"17D00000F1FF01003D48656C6C6F20576F726C642E205468697320697320612073696E676C6520656C656D656E74206C6976696E6720617320612063686172737472696E670018" which is an octstr of length 50-100 containing valid TLV:
-
- - top-level anonymous list, containing - one element with profile-specific tag in fully-qualified form
-
- 4.D_OK_FULL:"17D00000F1FF01003D48656C6C6F20576F726C642E205468697320697320612073696E676C6520656C656D656E74206C6976696E6720617320612063686172737472696E6700D00000F1FF02003148656C6C6F20576F726C642E205468697320697320612073696E676C6520656C656D656E7420616761696E2E2E2E2E2E0018" which is an octstr of length 128 containing valid TLV:
-
- - top-level anonymous list, containing - two elements with profile-specific tag in fully-qualified form
-
- 5.D_BAD_LENGTH:"17D00000F1FF01003D48656C6C6F20576F726C642E205468697320697320612073696E676C6520656C656D656E74206C6976696E6720617320612063686172737472696E6700D00000F1FF02003248656C6C6F20576F726C642E205468697320697320612073696E676C6520656C656D656E7420616761696E2E2E2E2E2E2E0018" which is an octstr of length 129 containing valid TLV:
-
- - top-level anonymous list, containing - one element with profile-specific tag in fully-qualified form
-
- 6 .D_BAD_STRUCT: "1518" which is an octstr of length 2 containing valid TLV:
-
- - top-level anonymous struct, empty
-
- 7.D_BAD_LIST:"3701D00000F1FF01003D48656C6C6F20576F726C642E205468697320697320612073696E676C6520656C656D656E74206C6976696E6720617320612063686172737472696E670018" which is an octstr of length 50-100 containing valid TLV:
-
- - top-level list with context-specific tag, containing - one element with profile-specific tag in fully-qualified form
-
- 8.D_BAD_ELEM:"17103D48656C6C6F20576F726C642E205468697320697320612073696E676C6520656C656D656E74206C6976696E6720617320612063686172737472696E670018" which is an octstr of length 50-100 containing valid TLV:
-
- - top-level anonymous list, containing - one element with anonymous tag
-
- 9 .D_BAD_OVERFLOW: "17D00000F1FF01003D48656C6C6F20576F726C642E205468697320697320612073696E676C6520656C656D656E74206C6976696E6720617320612063686172737472696E670018FF" which is an octstr of length 50-100 containing valid TLV:
-
- - top-level anonymous list, containing - one element with profile-specific tag in fully-qualified form - but having extra bytes after the top level list end-of-container
-
- 10.D_BAD_UNDERFLOW:"17D00000F1FF01003D48656C6C6F20576F726C642E205468697320697320612073696E676C6520656C656D656E74206C6976696E6720617320612063686172737472696E6700" which is an octstr of length 50-100 containing invalid TLV:
-
- - top-level anonymous list, containing - one element with profile-specific tag in fully-qualified form - but lacking the top-level list end-of-container
-
- 11.D_BAD_NONE: "" which is an octstr of length 0
- disabled: true
-
- - label: "TH1 commissions DUT using admin node ID N1"
- verification: |
- DUT
- sudo ./chip-all-clusters-app --wifi
-
- TH1
- ./chip-tool pairing ble-wifi 1 zigbee-thread matter123 20202021 3841
- disabled: true
+ - label: "Wait for the commissioned device to be retrieved"
+ cluster: "DelayCommands"
+ command: "WaitForCommissionee"
+ arguments:
+ values:
+ - name: "nodeId"
+ value: nodeId
- label:
"TH1 reads DUT Endpoint 0 OperationalCredentials cluster
CurrentFabricIndex attribute"
- verification: |
- ./chip-tool operationalcredentials read current-fabric-index 1 0
-
- On TH1(Chiptool), verify the CurrentFabricIndex attribute of operationalCredential cluster as 1
-
- [1658323393.451141][2316:2321] CHIP:TOO: Endpoint: 0 Cluster: 0x0000_003E Attribute 0x0000_0005 DataVersion: 3882577299
- [1658323393.465921][2316:2321] CHIP:TOO: CurrentFabricIndex: 1
- disabled: true
+ cluster: "Operational Credentials"
+ command: "readAttribute"
+ attribute: "CurrentFabricIndex"
+ response:
+ saveAs: CurrentFabricIndex
- label:
"TH1 reads DUT Endpoint 0 AccessControl cluster Extension attribute"
PICS: ACL.S.A0001
- verification: |
- ./chip-tool accesscontrol read extension 1 0
-
- On TH1(Chiptool) , Verify the extension attribute contains an empty list
-
- [1657116435.352869][2667:2672] CHIP:DMG: SuppressResponse = true,
- [1657116435.352904][2667:2672] CHIP:DMG: InteractionModelRevision = 1
- [1657116435.352935][2667:2672] CHIP:DMG: }
- [1657116435.353245][2667:2672] CHIP:TOO: Endpoint: 0 Cluster: 0x0000_001F Attribute 0x0000_0001 DataVersion: 368386360
- [1657116435.353328][2667:2672] CHIP:TOO: Extension: 0 entries
- [1657116435.353439][2667:2672] CHIP:EM: Sending Standalone Ack for MessageCounter:265691167 on exchange 19854i
- disabled: true
+ command: "readAttribute"
+ attribute: "Extension"
+ response:
+ value: []
- label:
"TH1 writes DUT Endpoint 0 AccessControl cluster Extension attribute,
value is list of AccessControlExtensionStruct containing 1 element 1.
struct: Data field: D_OK_EMPTY : 1718"
PICS: ACL.S.A0001
- verification: |
- ./chip-tool accesscontrol write extension '[{"data":"1718"}]' 1 0
-
- On TH1(Chiptool) , Verify that the status is Success when writing the AccessControl cluster Extension attribute
-
- [1656416335.284463][3747:3752] CHIP:DMG: WriteResponseMessage =
- [1656416335.284498][3747:3752] CHIP:DMG: {
- [1656416335.284539][3747:3752] CHIP:DMG: AttributeStatusIBs =
- [1656416335.284581][3747:3752] CHIP:DMG: [
- [1656416335.284626][3747:3752] CHIP:DMG: AttributeStatusIB =
- [1656416335.284663][3747:3752] CHIP:DMG: {
- [1656416335.284709][3747:3752] CHIP:DMG: AttributePathIB =
- [1656416335.284763][3747:3752] CHIP:DMG: {
- [1656416335.284807][3747:3752] CHIP:DMG: Endpoint = 0x0,
- [1656416335.284861][3747:3752] CHIP:DMG: Cluster = 0x1f,
- [1656416335.284907][3747:3752] CHIP:DMG: Attribute = 0x0000_0001,
- [1656416335.284961][3747:3752] CHIP:DMG: }
- [1656416335.285018][3747:3752] CHIP:DMG:
- [1656416335.285058][3747:3752] CHIP:DMG: StatusIB =
- [1656416335.285109][3747:3752] CHIP:DMG: {
- [1656416335.285150][3747:3752] CHIP:DMG: status = 0x00 (SUCCESS),
- [1656416335.285203][3747:3752] CHIP:DMG: },
- [1656416335.285255][3747:3752] CHIP:DMG:
- [1656416335.285290][3747:3752] CHIP:DMG: },
- [1656416335.285349][3747:3752] CHIP:DMG:
- [1656416335.285382][3747:3752] CHIP:DMG: AttributeStatusIB =
- [1656416335.285432][3747:3752] CHIP:DMG: {
- [1656416335.285466][3747:3752] CHIP:DMG: AttributePathIB =
- [1656416335.285516][3747:3752] CHIP:DMG: {
- [1656416335.285557][3747:3752] CHIP:DMG: Endpoint = 0x0,
- [1656416335.285617][3747:3752] CHIP:DMG: Cluster = 0x1f,
- [1656416335.285662][3747:3752] CHIP:DMG: Attribute = 0x0000_0001,
- [1656416335.285705][3747:3752] CHIP:DMG: ListIndex = Null,
- [1656416335.285746][3747:3752] CHIP:DMG: }
- [1656416335.285790][3747:3752] CHIP:DMG:
- [1656416335.285829][3747:3752] CHIP:DMG: StatusIB =
- [1656416335.285867][3747:3752] CHIP:DMG: {
- [1656416335.285907][3747:3752] CHIP:DMG: status = 0x00 (SUCCESS),
- [1656416335.285948][3747:3752] CHIP:DMG: },
- [1656416335.285988][3747:3752] CHIP:DMG:
- [1656416335.286021][3747:3752] CHIP:DMG: },
- disabled: true
+ command: "writeAttribute"
+ attribute: "Extension"
+ arguments:
+ value: [{ Data: D_OK_EMPTY, FabricIndex: CurrentFabricIndex }]
- label:
"TH1 reads DUT Endpoint 0 AccessControl cluster Extension attribute"
PICS: ACL.S.A0001
- verification: |
- ./chip-tool accesscontrol read extension 1 0
-
- On TH1(Chiptool) , Verify value is list of AccessControlExtensionStruct containing 1 element . Data field: D_OK_EMPTY : "1718" and
- FabricIndex field: F1
-
-
- [1657278638.723927][9030:9035] CHIP:TOO: Endpoint: 0 Cluster: 0x0000_001F Attribute 0x0000_0001 DataVersion: 525362695
- [1657278638.724004][9030:9035] CHIP:TOO: Extension: 1 entries
- [1657278638.724072][9030:9035] CHIP:TOO: [1]: {
- [1657278638.724106][9030:9035] CHIP:TOO: Data: 1718
- [1657278638.724151][9030:9035] CHIP:TOO: FabricIndex: 1
- [1657278638.724180][9030:9035] CHIP:TOO: }
- [1657278638.724307][9030:9035] CHIP:EM: Sending Standalone Ack for MessageCounter:131793781 on exchange 9203i
- disabled: true
+ command: "readAttribute"
+ attribute: "Extension"
+ response:
+ value: [{ Data: D_OK_EMPTY, FabricIndex: CurrentFabricIndex }]
- label:
"TH1 writes DUT Endpoint 0 AccessControl cluster Extension attribute,
@@ -179,246 +103,37 @@
1.struct Data field: D_OK_SINGLE
:17D00000F1FF01003D48656C6C6F20576F726C642E205468697320697320612073696E676C6520656C656D656E74206C6976696E6720617320612063686172737472696E670018"
PICS: ACL.S.A0001
- verification: |
- ./chip-tool accesscontrol write extension '[{"data":"17D00000F1FF01003D48656C6C6F20576F726C642E205468697320697320612073696E676C6520656C656D656E74206C6976696E6720617320612063686172737472696E670018"}]' 1 0
-
- On TH1(Chiptool) , Verify that the status is success when writing the AccessControl cluster Extension attribute.
-
-
- [1656416899.781899][3814:3819] CHIP:DMG: WriteResponseMessage =
-
- [1656416899.781952][3814:3819] CHIP:DMG: {
- [1656416899.781998][3814:3819] CHIP:DMG: AttributeStatusIBs =
- [1656416899.782062][3814:3819] CHIP:DMG: [
- [1656416899.782114][3814:3819] CHIP:DMG: AttributeStatusIB =
- [1656416899.782181][3814:3819] CHIP:DMG: {
- [1656416899.782236][3814:3819] CHIP:DMG: AttributePathIB =
- [1656416899.782301][3814:3819] CHIP:DMG: {
- [1656416899.782369][3814:3819] CHIP:DMG: Endpoint = 0x0,
- [1656416899.782442][3814:3819] CHIP:DMG: Cluster = 0x1f,
- [1656416899.782512][3814:3819] CHIP:DMG: Attribute = 0x0000_0001,
- [1656416899.782583][3814:3819] CHIP:DMG: }
- [1656416899.782656][3814:3819] CHIP:DMG:
- [1656416899.782718][3814:3819] CHIP:DMG: StatusIB =
- [1656416899.782782][3814:3819] CHIP:DMG: {
- [1656416899.782850][3814:3819] CHIP:DMG: status = 0x00 (SUCCESS),
- [1656416899.782916][3814:3819] CHIP:DMG: },
- [1656416899.782981][3814:3819] CHIP:DMG:
- [1656416899.783035][3814:3819] CHIP:DMG: },
- [1656416899.783107][3814:3819] CHIP:DMG:
- [1656416899.783159][3814:3819] CHIP:DMG: AttributeStatusIB =
- [1656416899.783215][3814:3819] CHIP:DMG: {
- [1656416899.783269][3814:3819] CHIP:DMG: AttributePathIB =
- [1656416899.783331][3814:3819] CHIP:DMG: {
- [1656416899.783396][3814:3819] CHIP:DMG: Endpoint = 0x0,
- [1656416899.783466][3814:3819] CHIP:DMG: Cluster = 0x1f,
- [1656416899.783536][3814:3819] CHIP:DMG: Attribute = 0x0000_0001,
- [1656416899.783603][3814:3819] CHIP:DMG: ListIndex = Null,
- [1656416899.783669][3814:3819] CHIP:DMG: }
- [1656416899.783740][3814:3819] CHIP:DMG:
- [1656416899.783802][3814:3819] CHIP:DMG: StatusIB =
- [1656416899.783864][3814:3819] CHIP:DMG: {
- [1656416899.783928][3814:3819] CHIP:DMG: status = 0x00 (SUCCESS),
- [1656416899.784031][3814:3819] CHIP:DMG: },
- [1656416899.784099][3814:3819] CHIP:DMG:
- [1656416899.784152][3814:3819] CHIP:DMG: },
- [1656416899.784215][3814:3819] CHIP:DMG:
- [1656416899.784265][3814:3819] CHIP:DMG: ],
- [1656416899.784333][3814:3819] CHIP:DMG:
- [1656416899.784384][3814:3819] CHIP:DMG: InteractionModelRevision = 1
- [1656416899.784434][3814:3819] CHIP:DMG: }
- [1656416899.784620][3814:3819] CHIP:DMG: WriteClient moving to [AwaitingDe]
- [1656416899.784719][3814:3819] CHIP:EM: Sending Standalone Ack for MessageCounter:116771897 on exchange 19604i
- disabled: true
+ command: "writeAttribute"
+ attribute: "Extension"
+ arguments:
+ value: [{ Data: D_OK_SINGLE, FabricIndex: CurrentFabricIndex }]
- label:
"TH1 reads DUT Endpoint 0 AccessControl cluster Extension attribute"
PICS: ACL.S.A0001
- verification: |
- ./chip-tool accesscontrol read extension 1 0
-
- On TH1(Chiptool) , Verify the AccessControlExtensionStruct containing 1 element
- Data field: D_OK_SINGLE :"17D00000F1FF01003D48656C6C6F20576F726C642E205468697320697320612073696E676C6520656C656D656E74206C6976696E6720617320612063686172737472696E670018" and FabricIndex field : F1
-
- [1657278788.400832][9048:9053] CHIP:DMG: ReportDataMessage =
- [1657278788.400863][9048:9053] CHIP:DMG: {
- [1657278788.400887][9048:9053] CHIP:DMG: AttributeReportIBs =
- [1657278788.400920][9048:9053] CHIP:DMG: [
- [1657278788.400947][9048:9053] CHIP:DMG: AttributeReportIB =
- [1657278788.400985][9048:9053] CHIP:DMG: {
- [1657278788.401039][9048:9053] CHIP:DMG: AttributeDataIB =
- [1657278788.401090][9048:9053] CHIP:DMG: {
- [1657278788.401136][9048:9053] CHIP:DMG: DataVersion = 0x1f506609,
- [1657278788.401181][9048:9053] CHIP:DMG: AttributePathIB =
- [1657278788.401242][9048:9053] CHIP:DMG: {
- [1657278788.401299][9048:9053] CHIP:DMG: Endpoint = 0x0,
- [1657278788.401348][9048:9053] CHIP:DMG: Cluster = 0x1f,
- [1657278788.401406][9048:9053] CHIP:DMG: Attribute = 0x0000_0001,
- [1657278788.401462][9048:9053] CHIP:DMG: }
- [1657278788.401527][9048:9053] CHIP:DMG:
- [1657278788.401587][9048:9053] CHIP:DMG: Data = [
- [1657278788.401646][9048:9053] CHIP:DMG:
- [1657278788.401707][9048:9053] CHIP:DMG: ],
- [1657278788.401765][9048:9053] CHIP:DMG: },
- [1657278788.401821][9048:9053] CHIP:DMG:
- [1657278788.401867][9048:9053] CHIP:DMG: },
- [1657278788.401911][9048:9053] CHIP:DMG:
- [1657278788.401945][9048:9053] CHIP:DMG: AttributeReportIB =
- [1657278788.402001][9048:9053] CHIP:DMG: {
- [1657278788.402031][9048:9053] CHIP:DMG: AttributeDataIB =
- [1657278788.402082][9048:9053] CHIP:DMG: {
- [1657278788.402119][9048:9053] CHIP:DMG: DataVersion = 0x1f506609,
- [1657278788.402163][9048:9053] CHIP:DMG: AttributePathIB =
- [1657278788.402200][9048:9053] CHIP:DMG: {
- [1657278788.402247][9048:9053] CHIP:DMG: Endpoint = 0x0,
- [1657278788.402295][9048:9053] CHIP:DMG: Cluster = 0x1f,
- [1657278788.402334][9048:9053] CHIP:DMG: Attribute = 0x0000_0001,
- [1657278788.402371][9048:9053] CHIP:DMG: ListIndex = Null,
- [1657278788.402407][9048:9053] CHIP:DMG: }
- [1657278788.402446][9048:9053] CHIP:DMG:
- [1657278788.402481][9048:9053] CHIP:DMG: Data =
- [1657278788.402514][9048:9053] CHIP:DMG: {
- [1657278788.402574][9048:9053] CHIP:DMG: 0x1 = [
- [1657278788.402634][9048:9053] CHIP:DMG: 0x17, 0xd0, 0x0, 0x0, 0xf1, 0xff, 0x1, 0x0, 0x3d, 0x48, 0x65, 0x6c, 0x6c, 0x6f, 0x20, 0x57, 0x6f, 0x72, 0x6c, 0x64, 0x2e, 0x20, 0x54, 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x20, 0x61, 0x20, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x20, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x6c, 0x69, 0x76, 0x69, 0x6e, 0x67, 0x20, 0x61, 0x73, 0x20, 0x61, 0x20, 0x63, 0x68, 0x61, 0x72, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x0, 0x18,
- [1657278788.402678][9048:9053] CHIP:DMG: ]
- [1657278788.402716][9048:9053] CHIP:DMG: 0xfe = 1,
- [1657278788.402755][9048:9053] CHIP:DMG: },
- [1657278788.402785][9048:9053] CHIP:DMG: },
- [1657278788.402824][9048:9053] CHIP:DMG:
- [1657278788.402851][9048:9053] CHIP:DMG: },
- [1657278788.402886][9048:9053] CHIP:DMG:
- [1657278788.402910][9048:9053] CHIP:DMG: ],
- [1657278788.402946][9048:9053] CHIP:DMG:
- [1657278788.402972][9048:9053] CHIP:DMG: SuppressResponse = true,
- [1657278788.402996][9048:9053] CHIP:DMG: InteractionModelRevision = 1
- [1657278788.403019][9048:9053] CHIP:DMG: }
- [1657278788.403304][9048:9053] CHIP:TOO: Endpoint: 0 Cluster: 0x0000_001F Attribute 0x0000_0001 DataVersion: 525362697
- [1657278788.403374][9048:9053] CHIP:TOO: Extension: 1 entries
- [1657278788.403426][9048:9053] CHIP:TOO: [1]: {
- [1657278788.403457][9048:9053] CHIP:TOO: Data: 17D00000F1FF01003D48656C6C6F20576F726C642E205468697320697320612073696E676C6520656C656D656E74206C6976696E6720617320612063686172737472696E670018
- [1657278788.403509][9048:9053] CHIP:TOO: FabricIndex: 1
- [1657278788.403543][9048:9053] CHIP:TOO: }
- [1657278788.403642][9048:9053] CHIP:EM: Sending Standalone Ack for MessageCounter:90870339 on exchange 24533i
- disabled: true
+ command: "readAttribute"
+ attribute: "Extension"
+ response:
+ value: [{ Data: D_OK_SINGLE, FabricIndex: CurrentFabricIndex }]
- label:
"TH1 writes DUT Endpoint 0 AccessControl cluster Extension attribute,
value is list of AccessControlExtensionStruct containing 1 element
1.struct Data field: D_OK_FULL
- :17D00000F1FF01003D48656C6C6F20576F726C642E205468697320697320612073696E676C6520656C656D656E74206C6976696E6720617320612063686172737472696E6700D00000F1FF02003148656C6C6F20576F726C642E205468697320697320612073696E676C6520656C656D656E7420616761696E2E2E2E2E2E0018
- which is an octstr of length 128 containing valid TLV:"
+ :17D00000F1FF01003D48656C6C6F20576F726C642E205468697320697320612073696E676C6520656C656D656E74206C6976696E6720617320612063686172737472696E6700D00000F1FF02003148656C6C6F20576F726C642E205468697320697320612073696E676C6520656C656D656E7420616761696E2E2E2E2E2E0018"
PICS: ACL.S.A0001
- verification: |
- ./chip-tool accesscontrol write extension '[{"data":"17D00000F1FF01003D48656C6C6F20576F726C642E205468697320697320612073696E676C6520656C656D656E74206C6976696E6720617320612063686172737472696E6700D00000F1FF02003148656C6C6F20576F726C642E205468697320697320612073696E676C6520656C656D656E7420616761696E2E2E2E2E2E0018"}]' 1 0
-
- On TH1(Chiptool) , Verify that the status is success when writing the AccessControl cluster Extension attribute
- [1656417544.279572][3888:3893] CHIP:DMG: WriteResponseMessage =
- [1656417544.279598][3888:3893] CHIP:DMG: {
- [1656417544.279620][3888:3893] CHIP:DMG: AttributeStatusIBs =
- [1656417544.279651][3888:3893] CHIP:DMG: [
- [1656417544.279676][3888:3893] CHIP:DMG: AttributeStatusIB =
- [1656417544.279710][3888:3893] CHIP:DMG: {
- [1656417544.279739][3888:3893] CHIP:DMG: AttributePathIB =
- [1656417544.279773][3888:3893] CHIP:DMG: {
- [1656417544.279808][3888:3893] CHIP:DMG: Endpoint = 0x0,
- [1656417544.279842][3888:3893] CHIP:DMG: Cluster = 0x1f,
- [1656417544.279877][3888:3893] CHIP:DMG: Attribute = 0x0000_0001,
- [1656417544.279908][3888:3893] CHIP:DMG: }
- [1656417544.279944][3888:3893] CHIP:DMG:
- [1656417544.279985][3888:3893] CHIP:DMG: StatusIB =
- [1656417544.280012][3888:3893] CHIP:DMG: {
- [1656417544.280041][3888:3893] CHIP:DMG: status = 0x00 (SUCCESS),
- [1656417544.280072][3888:3893] CHIP:DMG: },
- [1656417544.280104][3888:3893] CHIP:DMG:
- [1656417544.280130][3888:3893] CHIP:DMG: },
- [1656417544.280165][3888:3893] CHIP:DMG:
- [1656417544.280189][3888:3893] CHIP:DMG: AttributeStatusIB =
- [1656417544.280216][3888:3893] CHIP:DMG: {
- [1656417544.280242][3888:3893] CHIP:DMG: AttributePathIB =
- [1656417544.280272][3888:3893] CHIP:DMG: {
- [1656417544.280304][3888:3893] CHIP:DMG: Endpoint = 0x0,
- [1656417544.280337][3888:3893] CHIP:DMG: Cluster = 0x1f,
- [1656417544.280371][3888:3893] CHIP:DMG: Attribute = 0x0000_0001,
- [1656417544.280404][3888:3893] CHIP:DMG: ListIndex = Null,
- [1656417544.280435][3888:3893] CHIP:DMG: }
- [1656417544.280470][3888:3893] CHIP:DMG:
- [1656417544.280500][3888:3893] CHIP:DMG: StatusIB =
- [1656417544.280530][3888:3893] CHIP:DMG: {
- [1656417544.280562][3888:3893] CHIP:DMG: status = 0x00 (SUCCESS),
- [1656417544.280593][3888:3893] CHIP:DMG: },
- [1656417544.280624][3888:3893] CHIP:DMG:
- disabled: true
+ command: "writeAttribute"
+ attribute: "Extension"
+ arguments:
+ value: [{ Data: D_OK_FULL, FabricIndex: CurrentFabricIndex }]
- label:
"TH1 reads DUT Endpoint 0 AccessControl cluster Extension attribute"
PICS: ACL.S.A0001
- verification: |
- ./chip-tool accesscontrol read extension 1 0
- On TH1(Chiptool) , Verify AccessControlExtensionStructcontaining 1 element
- Data field:
- D_OK_FULL :"17D00000F1FF01003D48656C6C6F20576F726C642E205468697320697320612073696E676C6520656C656D656E74206C6976696E6720617320612063686172737472696E6700D00000F1FF02003148656C6C6F20576F726C642E205468697320697320612073696E676C6520656C656D656E7420616761696E2E2E2E2E2E0018" and FabricIndex field : F1
-
-
- 1657278905.391846][9065:9070] CHIP:DMG: ReportDataMessage =
- [1657278905.391878][9065:9070] CHIP:DMG: {
- [1657278905.391906][9065:9070] CHIP:DMG: AttributeReportIBs =
- [1657278905.391951][9065:9070] CHIP:DMG: [
- [1657278905.391986][9065:9070] CHIP:DMG: AttributeReportIB =
- [1657278905.392036][9065:9070] CHIP:DMG: {
- [1657278905.392068][9065:9070] CHIP:DMG: AttributeDataIB =
- [1657278905.392108][9065:9070] CHIP:DMG: {
- [1657278905.392153][9065:9070] CHIP:DMG: DataVersion = 0x1f50660b,
- [1657278905.392198][9065:9070] CHIP:DMG: AttributePathIB =
- [1657278905.392279][9065:9070] CHIP:DMG: {
- [1657278905.392328][9065:9070] CHIP:DMG: Endpoint = 0x0,
- [1657278905.392381][9065:9070] CHIP:DMG: Cluster = 0x1f,
- [1657278905.392430][9065:9070] CHIP:DMG: Attribute = 0x0000_0001,
- [1657278905.392470][9065:9070] CHIP:DMG: }
- [1657278905.392517][9065:9070] CHIP:DMG:
- [1657278905.392561][9065:9070] CHIP:DMG: Data = [
- [1657278905.392604][9065:9070] CHIP:DMG:
- [1657278905.392650][9065:9070] CHIP:DMG: ],
- [1657278905.392693][9065:9070] CHIP:DMG: },
- [1657278905.392739][9065:9070] CHIP:DMG:
- [1657278905.392773][9065:9070] CHIP:DMG: },
- [1657278905.392823][9065:9070] CHIP:DMG:
- [1657278905.392857][9065:9070] CHIP:DMG: AttributeReportIB =
- [1657278905.392901][9065:9070] CHIP:DMG: {
- [1657278905.392936][9065:9070] CHIP:DMG: AttributeDataIB =
- [1657278905.392976][9065:9070] CHIP:DMG: {
- [1657278905.393016][9065:9070] CHIP:DMG: DataVersion = 0x1f50660b,
- [1657278905.393060][9065:9070] CHIP:DMG: AttributePathIB =
- [1657278905.393100][9065:9070] CHIP:DMG: {
- [1657278905.393135][9065:9070] CHIP:DMG: Endpoint = 0x0,
- [1657278905.393170][9065:9070] CHIP:DMG: Cluster = 0x1f,
- [1657278905.393207][9065:9070] CHIP:DMG: Attribute = 0x0000_0001,
- [1657278905.393252][9065:9070] CHIP:DMG: ListIndex = Null,
- [1657278905.393296][9065:9070] CHIP:DMG: }
- [1657278905.393343][9065:9070] CHIP:DMG:
- [1657278905.393385][9065:9070] CHIP:DMG: Data =
- [1657278905.393429][9065:9070] CHIP:DMG: {
- [1657278905.393505][9065:9070] CHIP:DMG: 0x1 = [
- [1657278905.393605][9065:9070] CHIP:DMG: 0x17, 0xd0, 0x0, 0x0, 0xf1, 0xff, 0x1, 0x0, 0x3d, 0x48, 0x65, 0x6c, 0x6c, 0x6f, 0x20, 0x57, 0x6f, 0x72, 0x6c, 0x64, 0x2e, 0x20, 0x54, 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x20, 0x61, 0x20, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x20, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x6c, 0x69, 0x76, 0x69, 0x6e, 0x67, 0x20, 0x61, 0x73, 0x20, 0x61, 0x20, 0x63, 0x68, 0x61, 0x72, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x0, 0xd0, 0x0, 0x0, 0xf1, 0xff, 0x2, 0x0, 0x31, 0x48, 0x65, 0x6c, 0x6c, 0x6f, 0x20, 0x57, 0x6f, 0x72, 0x6c, 0x64, 0x2e, 0x20, 0x54, 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x20, 0x61, 0x20, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x20, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x61, 0x67, 0x61, 0x69, 0x6e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x0, 0x18,
- [1657278905.393670][9065:9070] CHIP:DMG: ]
- [1657278905.393718][9065:9070] CHIP:DMG: 0xfe = 1,
- [1657278905.393765][9065:9070] CHIP:DMG: },
- [1657278905.393810][9065:9070] CHIP:DMG: },
- [1657278905.393862][9065:9070] CHIP:DMG:
- [1657278905.393899][9065:9070] CHIP:DMG: },
- [1657278905.393942][9065:9070] CHIP:DMG:
- [1657278905.393974][9065:9070] CHIP:DMG: ],
- [1657278905.394023][9065:9070] CHIP:DMG:
- [1657278905.394058][9065:9070] CHIP:DMG: SuppressResponse = true,
- [1657278905.394091][9065:9070] CHIP:DMG: InteractionModelRevision = 1
- [1657278905.394122][9065:9070] CHIP:DMG: }
- [1657278905.394435][9065:9070] CHIP:TOO: Endpoint: 0 Cluster: 0x0000_001F Attribute 0x0000_0001 DataVersion: 525362699
- [1657278905.394508][9065:9070] CHIP:TOO: Extension: 1 entries
- [1657278905.394573][9065:9070] CHIP:TOO: [1]: {
- [1657278905.394618][9065:9070] CHIP:TOO: Data: 17D00000F1FF01003D48656C6C6F20576F726C642E205468697320697320612073696E676C6520656C656D656E74206C6976696E6720617320612063686172737472696E6700D00000F1FF02003148656C6C6F20576F726C642E205468697320697320612073696E676C6520656C656D656E7420616761696E2E2E2E2E2E0018
- [1657278905.394671][9065:9070] CHIP:TOO: FabricIndex: 1
- [1657278905.394703][9065:9070] CHIP:TOO: }
- [1657278905.394800][9065:9070] CHIP:EM: Sending Standalone Ack for MessageCounter:35167907 on exchange 47841i
- disabled: true
+ command: "readAttribute"
+ attribute: "Extension"
+ response:
+ value: [{ Data: D_OK_FULL, FabricIndex: CurrentFabricIndex }]
- label:
"TH1 writes DUT Endpoint 0 AccessControl cluster Extension attribute,
@@ -426,53 +141,24 @@
.struct Data field: D_BAD_LENGTH
:17D00000F1FF01003D48656C6C6F20576F726C642E205468697320697320612073696E676C6520656C656D656E74206C6976696E6720617320612063686172737472696E6700D00000F1FF02003248656C6C6F20576F726C642E205468697320697320612073696E676C6520656C656D656E7420616761696E2E2E2E2E2E2E0018"
PICS: ACL.S.A0001
- verification: |
- ./chip-tool accesscontrol write extension '[{"data":"17D00000F1FF01003D48656C6C6F20576F726C642E205468697320697320612073696E676C6520656C656D656E74206C6976696E6720617320612063686172737472696E6700D00000F1FF02003248656C6C6F20576F726C642E205468697320697320612073696E676C6520656C656D656E7420616761696E2E2E2E2E2E2E0018"}]' 1 0
- On TH1(Chiptool) , Verify that the status is CONSTRAINT_ERROR (0x87) when writing the AccessControl cluster Extension attribute
-
- [1657279033.591694][9081:9086] CHIP:DMG: StatusIB =
- [1657279033.591739][9081:9086] CHIP:DMG: {
- [1657279033.591784][9081:9086] CHIP:DMG: status = 0x87 (CONSTRAINT_ERROR),
- [1657279033.591830][9081:9086] CHIP:DMG: },
- [1657279033.591876][9081:9086] CHIP:DMG:
- [1657279033.591915][9081:9086] CHIP:DMG: },
- [1657279033.591961][9081:9086] CHIP:DMG:
- [1657279033.591998][9081:9086] CHIP:DMG: ],
- [1657279033.592046][9081:9086] CHIP:DMG:
- [1657279033.592081][9081:9086] CHIP:DMG: InteractionModelRevision = 1
- [1657279033.592115][9081:9086] CHIP:DMG: }
- [1657279033.592290][9081:9086] CHIP:DMG: WriteClient moving to [AwaitingDe]
- [1657279033.592341][9081:9086] CHIP:TOO: Response Failure: IM Error 0x00000587: General error: 0x87 (CONSTRAINT_ERROR)
- [1657279033.592418][9081:9086] CHIP:EM: Sending Standalone Ack for MessageCounter:30643689 on exchange 27853i
- [1657279033.592517][9081:9086] CHIP:IN: Prepared secure message 0xffff8efdd9d8 to 0x0000000000000001 (1) of type 0x10 and protocolId (0, 0) on exchange 27853i with MessageCounter:149398748.
- [1657279033.592572][9081:9086] CHIP:IN: Sending encrypted msg 0xffff8efdd9d8 with MessageCounter:149398748 to 0x0000000000000001 (1) at monotonic time: 000000000083ABDC msec
- [1657279033.592744][9081:9086] CHIP:EM: Flushed pending ack for MessageCounter:30643689 on exchange 27853i
- disabled: true
+ command: "writeAttribute"
+ attribute: "Extension"
+ arguments:
+ value: [{ Data: D_BAD_LENGTH, FabricIndex: CurrentFabricIndex }]
+ response:
+ error: CONSTRAINT_ERROR
- label:
"TH1 writes DUT Endpoint 0 AccessControl cluster Extension attribute,
value is list of AccessControlExtensionStruct containing 1 element 1.
struct Data field: D_BAD_STRUCT : 1518"
PICS: ACL.S.A0001
- verification: |
- ./chip-tool accesscontrol write extension '[{"data":"1518"}]' 1 0
-
- On TH1(Chiptool) , Verify that the status is CONSTRAINT_ERROR (0x87) when writing the AccessControl cluster Extension attribute
-
- [1657609094.515713][8195:8200] CHIP:DMG: StatusIB =
- [1657609094.515754][8195:8200] CHIP:DMG: {
- [1657609094.515797][8195:8200] CHIP:DMG: status = 0x87 (CONSTRAINT_ERROR),
- [1657609094.515840][8195:8200] CHIP:DMG: },
- [1657609094.515882][8195:8200] CHIP:DMG:
- [1657609094.515919][8195:8200] CHIP:DMG: },
- [1657609094.515970][8195:8200] CHIP:DMG:
- [1657609094.516004][8195:8200] CHIP:DMG: ],
- [1657609094.516051][8195:8200] CHIP:DMG:
- [1657609094.516086][8195:8200] CHIP:DMG: InteractionModelRevision = 1
- [1657609094.516121][8195:8200] CHIP:DMG: }
- [1657609094.516266][8195:8200] CHIP:DMG: WriteClient moving to [AwaitingDe]
- [1657609094.516312][8195:8200] CHIP:TOO: Response Failure: IM Error 0x00000587: General error: 0x87 (CONSTRAINT_ERROR)
- disabled: true
+ command: "writeAttribute"
+ attribute: "Extension"
+ arguments:
+ value: [{ Data: D_BAD_STRUCT, FabricIndex: CurrentFabricIndex }]
+ response:
+ error: CONSTRAINT_ERROR
- label:
"TH1 writes DUT Endpoint 0 AccessControl cluster Extension attribute,
@@ -480,25 +166,12 @@
struct Data field: D_BAD_LIST
:3701D00000F1FF01003D48656C6C6F20576F726C642E205468697320697320612073696E676C6520656C656D656E74206C6976696E6720617320612063686172737472696E670018"
PICS: ACL.S.A0001
- verification: |
- ./chip-tool accesscontrol write extension '[{"data":"3701D00000F1FF01003D48656C6C6F20576F726C642E205468697320697320612073696E676C6520656C656D656E74206C6976696E6720617320612063686172737472696E670018"}]' 1 0
-
- On TH1(Chiptool) , Verify that the status is CONSTRAINT_ERROR (0x87) when writing the AccessControl cluster Extension attribute
-
- [1657609434.915033][8206:8211] CHIP:DMG: StatusIB =
- [1657609434.915073][8206:8211] CHIP:DMG: {
- [1657609434.915115][8206:8211] CHIP:DMG: status = 0x87 (CONSTRAINT_ERROR),
- [1657609434.915152][8206:8211] CHIP:DMG: },
- [1657609434.915193][8206:8211] CHIP:DMG:
- [1657609434.915226][8206:8211] CHIP:DMG: },
- [1657609434.915264][8206:8211] CHIP:DMG:
- [1657609434.915293][8206:8211] CHIP:DMG: ],
- [1657609434.915333][8206:8211] CHIP:DMG:
- [1657609434.915362][8206:8211] CHIP:DMG: InteractionModelRevision = 1
- [1657609434.915391][8206:8211] CHIP:DMG: }
- [1657609434.915511][8206:8211] CHIP:DMG: WriteClient moving to [AwaitingDe]
- [1657609434.915549][8206:8211] CHIP:TOO: Response Failure: IM Error 0x00000587: General error: 0x87 (CONSTRAINT_ERROR)
- disabled: true
+ command: "writeAttribute"
+ attribute: "Extension"
+ arguments:
+ value: [{ Data: D_BAD_LIST, FabricIndex: CurrentFabricIndex }]
+ response:
+ error: CONSTRAINT_ERROR
- label:
"TH1 writes DUT Endpoint 0 AccessControl cluster Extension attribute,
@@ -506,27 +179,12 @@
struct Data field: D_BAD_ELEM
:17103D48656C6C6F20576F726C642E205468697320697320612073696E676C6520656C656D656E74206C6976696E6720617320612063686172737472696E670018"
PICS: ACL.S.A0001
- verification: |
- ./chip-tool accesscontrol write extension '[{"data":"17103D48656C6C6F20576F726C642E205468697320697320612073696E676C6520656C656D656E74206C6976696E6720617320612063686172737472696E670018"}]' 1 0
-
- On TH1(Chiptool) , Verify that the status is CONSTRAINT_ERROR (0x87) when writing the AccessControl cluster Extension attribute
-
-
- [1657609579.494576][8215:8220] CHIP:DMG:
- [1657609579.494615][8215:8220] CHIP:DMG: StatusIB =
- [1657609579.494656][8215:8220] CHIP:DMG: {
- [1657609579.494697][8215:8220] CHIP:DMG: status = 0x87 (CONSTRAINT_ERROR),
- [1657609579.494735][8215:8220] CHIP:DMG: },
- [1657609579.494772][8215:8220] CHIP:DMG:
- [1657609579.494803][8215:8220] CHIP:DMG: },
- [1657609579.494838][8215:8220] CHIP:DMG:
- [1657609579.494867][8215:8220] CHIP:DMG: ],
- [1657609579.494906][8215:8220] CHIP:DMG:
- [1657609579.494935][8215:8220] CHIP:DMG: InteractionModelRevision = 1
- [1657609579.494963][8215:8220] CHIP:DMG: }
- [1657609579.495080][8215:8220] CHIP:DMG: WriteClient moving to [AwaitingDe]
- [1657609579.495119][8215:8220] CHIP:TOO: Response Failure: IM Error 0x00000587: General error: 0x87 (CONSTRAINT_ERROR)
- disabled: true
+ command: "writeAttribute"
+ attribute: "Extension"
+ arguments:
+ value: [{ Data: D_BAD_ELEM, FabricIndex: CurrentFabricIndex }]
+ response:
+ error: CONSTRAINT_ERROR
- label:
"TH1 writes DUT Endpoint 0 AccessControl cluster Extension attribute,
@@ -534,26 +192,12 @@
.struct Data field: D_BAD_OVERFLOW :
17D00000F1FF01003D48656C6C6F20576F726C642E205468697320697320612073696E676C6520656C656D656E74206C6976696E6720617320612063686172737472696E670018FF"
PICS: ACL.S.A0001
- verification: |
- ./chip-tool accesscontrol write extension '[{"data":"17D00000F1FF01003D48656C6C6F20576F726C642E205468697320697320612073696E676C6520656C656D656E74206C6976696E6720617320612063686172737472696E670018FF"}]' 1 0
-
- On TH1(Chiptool) , Verify that the status is CONSTRAINT_ERROR (0x87) when writing the AccessControl cluster Extension attribute
-
- [1657609625.259137][8223:8228] CHIP:DMG:
- [1657609625.259168][8223:8228] CHIP:DMG: StatusIB =
- [1657609625.259200][8223:8228] CHIP:DMG: {
- [1657609625.259233][8223:8228] CHIP:DMG: status = 0x87 (CONSTRAINT_ERROR),
- [1657609625.259268][8223:8228] CHIP:DMG: },
- [1657609625.259301][8223:8228] CHIP:DMG:
- [1657609625.259329][8223:8228] CHIP:DMG: },
- [1657609625.259361][8223:8228] CHIP:DMG:
- [1657609625.259386][8223:8228] CHIP:DMG: ],
- [1657609625.259420][8223:8228] CHIP:DMG:
- [1657609625.259445][8223:8228] CHIP:DMG: InteractionModelRevision = 1
- [1657609625.259471][8223:8228] CHIP:DMG: }
- [1657609625.259571][8223:8228] CHIP:DMG: WriteClient moving to [AwaitingDe]
- [1657609625.259605][8223:8228] CHIP:TOO: Response Failure: IM Error 0x00000587: General error: 0x87 (CONSTRAINT_ERROR)
- disabled: true
+ command: "writeAttribute"
+ attribute: "Extension"
+ arguments:
+ value: [{ Data: D_BAD_OVERFLOW, FabricIndex: CurrentFabricIndex }]
+ response:
+ error: CONSTRAINT_ERROR
- label:
"TH1 writes DUT Endpoint 0 AccessControl cluster Extension attribute,
@@ -561,52 +205,24 @@
struct Data field: D_BAD_UNDERFLOW
:17D00000F1FF01003D48656C6C6F20576F726C642E205468697320697320612073696E676C6520656C656D656E74206C6976696E6720617320612063686172737472696E6700"
PICS: ACL.S.A0001
- verification: |
- ./chip-tool accesscontrol write extension '[{"data":"17D00000F1FF01003D48656C6C6F20576F726C642E205468697320697320612073696E676C6520656C656D656E74206C6976696E6720617320612063686172737472696E6700"}]' 1 0
-
- On TH1(Chiptool) , Verify that the status is CONSTRAINT_ERROR (0x87) when writing the AccessControl cluster Extension attribute
-
- [1657609654.299668][8229:8234] CHIP:DMG: StatusIB =
- [1657609654.299712][8229:8234] CHIP:DMG: {
- [1657609654.299758][8229:8234] CHIP:DMG: status = 0x87 (CONSTRAINT_ERROR),
- [1657609654.299808][8229:8234] CHIP:DMG: },
- [1657609654.299852][8229:8234] CHIP:DMG:
- [1657609654.299892][8229:8234] CHIP:DMG: },
- [1657609654.299935][8229:8234] CHIP:DMG:
- [1657609654.299969][8229:8234] CHIP:DMG: ],
- [1657609654.300017][8229:8234] CHIP:DMG:
- [1657609654.300053][8229:8234] CHIP:DMG: InteractionModelRevision = 1
- [1657609654.300088][8229:8234] CHIP:DMG: }
- [1657609654.300230][8229:8234] CHIP:DMG: WriteClient moving to [AwaitingDe]
- [1657609654.300275][8229:8234] CHIP:TOO: Response Failure: IM Error 0x00000587: General error: 0x87 (CONSTRAINT_ERROR)
- disabled: true
+ command: "writeAttribute"
+ attribute: "Extension"
+ arguments:
+ value: [{ Data: D_BAD_UNDERFLOW, FabricIndex: CurrentFabricIndex }]
+ response:
+ error: CONSTRAINT_ERROR
- label:
"TH1 writes DUT Endpoint 0 AccessControl cluster Extension attribute,
value is list of AccessControlExtensionStruct containing 1 element
1.struct Data field: D_BAD_NONE"
PICS: ACL.S.A0001
- verification: |
- ./chip-tool accesscontrol write extension '[{"data":""}]' 1 0
-
- On TH1(Chiptool) , Verify that the status is CONSTRAINT_ERROR (0x87) when writing the AccessControl cluster Extension attribute
-
-
- [1657609694.046042][8236:8241] CHIP:DMG:
- [1657609694.046078][8236:8241] CHIP:DMG: StatusIB =
- [1657609694.046115][8236:8241] CHIP:DMG: {
- [1657609694.046154][8236:8241] CHIP:DMG: status = 0x87 (CONSTRAINT_ERROR),
- [1657609694.046192][8236:8241] CHIP:DMG: },
- [1657609694.046229][8236:8241] CHIP:DMG:
- [1657609694.046260][8236:8241] CHIP:DMG: },
- [1657609694.046296][8236:8241] CHIP:DMG:
- [1657609694.046325][8236:8241] CHIP:DMG: ],
- [1657609694.046390][8236:8241] CHIP:DMG:
- [1657609694.046423][8236:8241] CHIP:DMG: InteractionModelRevision = 1
- [1657609694.046452][8236:8241] CHIP:DMG: }
- [1657609694.046574][8236:8241] CHIP:DMG: WriteClient moving to [AwaitingDe]
- [1657609694.046614][8236:8241] CHIP:TOO: Response Failure: IM Error 0x00000587: General error: 0x87 (CONSTRAINT_ERROR)
- disabled: true
+ command: "writeAttribute"
+ attribute: "Extension"
+ arguments:
+ value: [{ Data: D_BAD_NONE, FabricIndex: CurrentFabricIndex }]
+ response:
+ error: CONSTRAINT_ERROR
- label:
"TH1 writes DUT Endpoint 0 AccessControl cluster Extension attribute,
@@ -616,123 +232,38 @@
contains Data field: D_OK_SINGLE
17D00000F1FF01003D48656C6C6F20576F726C642E205468697320697320612073696E676C6520656C656D656E74206C6976696E6720617320612063686172737472696E670018"
PICS: ACL.S.A0001
- verification: |
- ./chip-tool accesscontrol write extension '[{"data":"1718"},{"data":"17D00000F1FF01003D48656C6C6F20576F726C642E205468697320697320612073696E676C6520656C656D656E74206C6976696E6720617320612063686172737472696E670018"}]' 1 0
-
- On TH1(Chiptool) , Verify that the status is success for first element and CONSTRAINT_ERROR (0x87) for second element when writing the AccessControl cluster Extension attribute
-
- [1657609694.044950][8236:8241] CHIP:DMG: WriteResponseMessage =
- [1657609694.044980][8236:8241] CHIP:DMG: {
- [1657609694.045008][8236:8241] CHIP:DMG: AttributeStatusIBs =
- [1657609694.045049][8236:8241] CHIP:DMG: [
- [1657609694.045080][8236:8241] CHIP:DMG: AttributeStatusIB =
- [1657609694.045117][8236:8241] CHIP:DMG: {
- [1657609694.045149][8236:8241] CHIP:DMG: AttributePathIB =
- [1657609694.045187][8236:8241] CHIP:DMG: {
- [1657609694.045232][8236:8241] CHIP:DMG: Endpoint = 0x0,
- [1657609694.045277][8236:8241] CHIP:DMG: Cluster = 0x1f,
- [1657609694.045318][8236:8241] CHIP:DMG: Attribute = 0x0000_0001,
- [1657609694.045355][8236:8241] CHIP:DMG: }
- [1657609694.045397][8236:8241] CHIP:DMG:
- [1657609694.045434][8236:8241] CHIP:DMG: StatusIB =
- [1657609694.045472][8236:8241] CHIP:DMG: {
- [1657609694.045513][8236:8241] CHIP:DMG: status = 0x00 (SUCCESS),
- [1657609694.045552][8236:8241] CHIP:DMG: },
- [1657609694.045594][8236:8241] CHIP:DMG:
- [1657609694.045627][8236:8241] CHIP:DMG: },
- [1657609694.045670][8236:8241] CHIP:DMG:
- [1657609694.045701][8236:8241] CHIP:DMG: AttributeStatusIB =
- [1657609694.045733][8236:8241] CHIP:DMG: {
- [1657609694.045765][8236:8241] CHIP:DMG: AttributePathIB =
- [1657609694.045801][8236:8241] CHIP:DMG: {
- [1657609694.045840][8236:8241] CHIP:DMG: Endpoint = 0x0,
- [1657609694.045880][8236:8241] CHIP:DMG: Cluster = 0x1f,
- [1657609694.045922][8236:8241] CHIP:DMG: Attribute = 0x0000_0001,
- [1657609694.045962][8236:8241] CHIP:DMG: ListIndex = Null,
- [1657609694.046000][8236:8241] CHIP:DMG: }
- [1657279798.809590][9208:9213] CHIP:DMG:
- [1657279798.809629][9208:9213] CHIP:DMG: StatusIB =
- [1657279798.809666][9208:9213] CHIP:DMG: {
- [1657279798.809702][9208:9213] CHIP:DMG: status = 0x87 (CONSTRAINT_ERROR),
- [1657279798.809740][9208:9213] CHIP:DMG: },
- [1657279798.809778][9208:9213] CHIP:DMG:
- [1657279798.809808][9208:9213] CHIP:DMG: },
- [1657279798.809843][9208:9213] CHIP:DMG:
- [1657279798.809873][9208:9213] CHIP:DMG: ],
- [1657279798.809917][9208:9213] CHIP:DMG:
- [1657279798.809946][9208:9213] CHIP:DMG: InteractionModelRevision = 1
- [1657279798.809974][9208:9213] CHIP:DMG: }
- [1657279798.810132][9208:9213] CHIP:DMG: WriteClient moving to [AwaitingDe]
- [1657279798.810171][9208:9213] CHIP:TOO: Response Failure: IM Error 0x00000587: General error: 0x87 (CONSTRAINT_ERROR)
- [1657279798.810454][9208:9213] CHIP:EM: Sending Standalone Ack for MessageCounter:192339176 on exchange 15705i
- disabled: true
+ command: "writeAttribute"
+ attribute: "Extension"
+ arguments:
+ value:
+ [
+ { Data: D_OK_EMPTY, FabricIndex: CurrentFabricIndex },
+ { Data: D_OK_SINGLE, FabricIndex: CurrentFabricIndex },
+ ]
+ response:
+ error: CONSTRAINT_ERROR
- label:
"TH1 reads DUT Endpoint 0 AccessControl cluster Extension attribute"
PICS: ACL.S.A0001
- verification: |
- ./chip-tool accesscontrol read extension 1 0
-
- On TH1(Chiptool) , Verify Successfully the list of AccessControlExtensionStruct containing Data field: D_OK_EMPTY :"1718" and
- FabricIndex field: F1.
-
-
- [1657279968.698117][9221:9226] CHIP:DMG:
- [1657279968.698149][9221:9226] CHIP:DMG: SuppressResponse = true,
- [1657279968.698193][9221:9226] CHIP:DMG: InteractionModelRevision = 1
- [1657279968.698224][9221:9226] CHIP:DMG: }
- [1657279968.698540][9221:9226] CHIP:TOO: Endpoint: 0 Cluster: 0x0000_001F Attribute 0x0000_0001 DataVersion: 525362718
- [1657279968.698608][9221:9226] CHIP:TOO: Extension: 1 entries
- [1657279968.698668][9221:9226] CHIP:TOO: [1]: {
- [1657279968.698715][9221:9226] CHIP:TOO: Data: 1718
- [1657279968.698761][9221:9226] CHIP:TOO: FabricIndex: 1
- [1657279968.698804][9221:9226] CHIP:TOO: }
- [1657279968.698905][9221:9226] CHIP:EM: Sending Standalone Ack for MessageCounter:261322624 on exchange 15524i
- disabled: true
+ command: "readAttribute"
+ attribute: "Extension"
+ response:
+ value: [{ Data: D_OK_EMPTY, FabricIndex: CurrentFabricIndex }]
- label:
"TH1 writes DUT Endpoint 0 AccessControl cluster Extension attribute,
value is an empty list"
PICS: ACL.S.A0001
- verification: |
- ./chip-tool accesscontrol write extension '[]' 1 0
-
- On TH1(Chiptool) , Verify that the status is success when writing the AccessControl cluster Extension attribute
-
- 7625][1521:1526] CHIP:DMG: AttributeStatusIB =
- [1657692723.227673][1521:1526] CHIP:DMG: {
- [1657692723.227725][1521:1526] CHIP:DMG: AttributePathIB =
- [1657692723.227780][1521:1526] CHIP:DMG: {
- [1657692723.227834][1521:1526] CHIP:DMG: Endpoint = 0x0,
- [1657692723.227897][1521:1526] CHIP:DMG: Cluster = 0x1f,
- [1657692723.227956][1521:1526] CHIP:DMG: Attribute = 0x0000_0001,
- [1657692723.228012][1521:1526] CHIP:DMG: }
- [1657692723.228073][1521:1526] CHIP:DMG:
- [1657692723.228125][1521:1526] CHIP:DMG: StatusIB =
- [1657692723.228182][1521:1526] CHIP:DMG: {
- [1657692723.228238][1521:1526] CHIP:DMG: status = 0x00 (SUCCESS),
- [1657692723.228294][1521:1526] CHIP:DMG: },
- [1657692723.228349][1521:1526] CHIP:DMG:
- [1657692723.228397][1521:1526] CHIP:DMG: },
- [1657692723.228449][1521:1526] CHIP:DMG:
- [1657692723.228492][1521:1526] CHIP:DMG: ],
- [1657692723.228551][1521:1526] CHIP:DMG:
- [1657692723.228582][1521:1526] CHIP:DMG: InteractionModelRevision = 1
- [1657692723.228608][1521:1526] CHIP:DMG: }
- [1657692723.228738][1521:1526] CHIP:DMG: WriteClient moving to [AwaitingDe]
- [1657692723.228802][1521:1526] CHIP:EM: Sending Standalone Ack for MessageCounter:57305662 on exchange 27543i
- [1657692723.228869][1521:1526] CHIP:IN: Prepared secure message 0xffff9fffd9d8 to 0x0000000000000001 (1) of type 0x10 and protocolId (0, 0) on exchange 27543i with MessageCounter:9219504.
- [1657692723.228909][1521:1526]
- disabled: true
+ command: "writeAttribute"
+ attribute: "Extension"
+ arguments:
+ value: []
- label:
"TH1 reads DUT Endpoint 0 AccessControl cluster Extension attribute"
PICS: ACL.S.A0001
- verification: |
- ./chip-tool accesscontrol read extension 1 0
-
- On TH1(Chiptool) , Verify AccessControl cluster Extension attribute, value is an empty list
-
- [1660223145.427219][80697:80702] CHIP:TOO: Endpoint: 0 Cluster: 0x0000_001F Attribute 0x0000_0001 DataVersion: 2385810240
- [1660223145.427227][80697:80702] CHIP:TOO: Extension: 0 entries
- disabled: true
+ command: "readAttribute"
+ attribute: "Extension"
+ response:
+ value: []
diff --git a/src/app/tests/suites/certification/Test_TC_ALOGIN_12_1.yaml b/src/app/tests/suites/certification/Test_TC_ALOGIN_12_1.yaml
index a00d3e2..a480adf 100644
--- a/src/app/tests/suites/certification/Test_TC_ALOGIN_12_1.yaml
+++ b/src/app/tests/suites/certification/Test_TC_ALOGIN_12_1.yaml
@@ -20,74 +20,77 @@
config:
nodeId: 0x12344321
- cluster: "Basic"
- endpoint: 0
+ cluster: "Account Login"
+ endpoint: 3
+ TempAccountIdentifier:
+ type: char_string
+ defaultValue: "1111"
+ catalogVendorId:
+ type: int16u
+ defaultValue: 123
+ applicationId:
+ type: char_string
+ defaultValue: "exampleid"
tests:
- - label: "Precondition"
- verification: |
- Test Setup: Commission DUT to TH, if not done so already. In some cases, such as with a Casting Video Player, the DUT commissions the TH (eg. tv-casting-app).
- disabled: true
+ - label: "Wait for the commissioned device to be retrieved"
+ cluster: "DelayCommands"
+ command: "WaitForCommissionee"
+ arguments:
+ values:
+ - name: "nodeId"
+ value: nodeId
- - label:
- "Make sure there is a Content App endpoint implementing the Account
- Login cluster. Product maker may provide pre-setup steps"
- verification: |
- The TH commands for this test step can be invoked using chip-tool (when DUT is a commissionee) or tv-casting-app (when DUT is a commissioner).
-
- The following command on the example tv-app will launch a content app on endpoint 4:
- ./chip-tool applicationlauncher launch-app "{"catalogVendorId": 123, "applicationId": "exampleid"}" 1 1
- ./chip-tv-casting-app applicationlauncher launch-app "{"catalogVendorId": 123, "applicationId": "exampleid"}" 1 1
-
- Verify in TH Log:
- [1654004240716] [9799:7814889] CHIP: [DMG] Received Command Response Data, Endpoint=1 Cluster=0x0000_050C Command=0x0000_0003
- [1654004240717] [9799:7814889] CHIP: [TOO] Endpoint: 1 Cluster: 0x0000_050C Command 0x0000_0003
- [1654004240717] [9799:7814889] CHIP: [TOO] LauncherResponse: {
- [1654004240717] [9799:7814889] CHIP: [TOO] status: 0
- [1654004240717] [9799:7814889] CHIP: [TOO] data: 64617461
- [1654004240717] [9799:7814889] CHIP: [TOO] }
- disabled: true
+ - label: "Launch an app with the provided a application ID"
+ PICS: APPLAUNCHER.S.C00.Rsp
+ cluster: "Application Launcher"
+ command: "LaunchApp"
+ arguments:
+ values:
+ - name: "Data"
+ value: "Hello World"
+ - name: "application"
+ value:
+ {
+ catalogVendorId: catalogVendorId,
+ applicationId: applicationId,
+ }
+ response:
+ values:
+ - name: "status"
+ value: 0
- label:
"TH sends a GetSetupPIN command to the DUT with test values provided
by the product maker."
PICS: ALOGIN.S.C00.Rsp
- verification: |
- The TH commands for this test step can be invoked using chip-tool (when DUT is a commissionee) or tv-casting-app (when DUT is a commissioner):
- ./chip-tool accountlogin get-setup-pin 1111 1 4 --timedInteractionTimeoutMs 1000
- ./chip-tv-casting-app accountlogin get-setup-pin 1111 1 4 --timedInteractionTimeoutMs 1000
-
- On TH Verify that the DUT responds with a valid GetSetupPINResponse.
- [1654004273684] [9851:7821178] CHIP: [DMG] Received Command Response Data, Endpoint=4 Cluster=0x0000_050E Command=0x0000_0001
- [1654004273684] [9851:7821178] CHIP: [TOO] Endpoint: 6 Cluster: 0x0000_050E Command 0x0000_0001
- [1654004273684] [9851:7821178] CHIP: [TOO] GetSetupPINResponse: {
- [1654004273684] [9851:7821178] CHIP: [TOO] setupPIN: 34567890
- [1654004273684] [9851:7821178] CHIP: [TOO] }
- disabled: true
+ command: "GetSetupPIN"
+ timedInteractionTimeoutMs: 10000
+ arguments:
+ values:
+ - name: "TempAccountIdentifier"
+ value: TempAccountIdentifier
+ response:
+ values:
+ - name: "setupPIN"
+ saveAs: setupPIN
- label:
"TH sends a Login command to the DUT with test values provided by the
product maker."
PICS: ALOGIN.S.C02.Rsp
- verification: |
- The TH commands for this test step can be invoked using chip-tool (when DUT is a commissionee) or tv-casting-app (when DUT is a commissioner):
- ./chip-tool accountlogin login 11111 34567890 1 4 --timedInteractionTimeoutMs 1000
- ./chip-tv-casting-app accountlogin login 11111 34567890 1 4 --timedInteractionTimeoutMs 1000
-
- On TH Verify that the DUT responds with a standard command response.
- [1654004350009] [9951:7836487] CHIP: [DMG] Received Command Response Status for Endpoint=4 Cluster=0x0000_050E Command=0x0000_0002 Status=0x0
- disabled: true
+ command: "Login"
+ timedInteractionTimeoutMs: 10000
+ arguments:
+ values:
+ - name: "tempAccountIdentifier"
+ value: TempAccountIdentifier
+ - name: "setupPIN"
+ value: setupPIN
- label:
"TH sends a Logout command to the DUT with test values provided by the
product maker."
PICS: ALOGIN.S.C03.Rsp
- verification: |
- The TH commands for this test step can be invoked using chip-tool (when DUT is a commissionee) or tv-casting-app (when DUT is a commissioner):
- ./chip-tool accountlogin logout 1 4 --timedInteractionTimeoutMs 1000
- ./chip-tv-casting-app accountlogin logout 1 4 --timedInteractionTimeoutMs 1000
-
- On TH Verify that the DUT responds with a standard command response.
-
- [1654004400892] [9988:7841997] CHIP: [DMG] Received Command Response Status for Endpoint=4 Cluster=0x0000_050E Command=0x0000_0003 Status=0x0
- disabled: true
+ command: "Logout"
+ timedInteractionTimeoutMs: 10000
diff --git a/src/app/tests/suites/certification/Test_TC_BRBINFO_1_1.yaml b/src/app/tests/suites/certification/Test_TC_BRBINFO_1_1.yaml
index f4eebc4..44705b9 100644
--- a/src/app/tests/suites/certification/Test_TC_BRBINFO_1_1.yaml
+++ b/src/app/tests/suites/certification/Test_TC_BRBINFO_1_1.yaml
@@ -14,96 +14,202 @@
# Auto-generated scripts for harness use only, please review before automation. The endpoints and cluster names are currently set to default
name:
- 3.1.1. [TC-BRBINFO-1.1] Global Attributes for Bridged Device Basic
+ 130.1.1. [TC-BRBINFO-1.1] Global Attributes for Bridged Device Basic
Information Cluster Cluster [DUT-Server]
config:
nodeId: 0x12344321
- cluster: "Basic"
- endpoint: 0
+ cluster: "Bridged Device Basic"
+ endpoint: 3
tests:
- - label: ""
- verification: |
- Validate these PICS items of attributes which are not allowed in this server cluster implementation - these PICS items should all be FALSE, if any of them is TRUE then FAIL the test
-
- BRBINFO.S.A0000(DataModelRevision)
-
- BRBINFO.S.A0004(ProductID)
-
- BRBINFO.S.A0006(Location)
-
- BRBINFO.S.A0010(LocalConfigDisabled)
-
- BRBINFO.S.A0013(CapabilityMinima)
- disabled: true
-
- - label: "Commission DUT to TH (if not already done)"
- verification: |
-
- disabled: true
+ - label: "Wait for the commissioned device to be retrieved"
+ cluster: "DelayCommands"
+ command: "WaitForCommissionee"
+ arguments:
+ values:
+ - name: "nodeId"
+ value: nodeId
- label: "TH reads the ClusterRevision from DUT"
- verification: |
- ./chip-tool bridgeddevicebasic read cluster-revision 1 3
-
- On TH(chip-tool), verify DUT responsds ClusterRevision attribute has value 1
-
- [1657695910.794487][15411:15416] CHIP:TOO: Endpoint: 3 Cluster: 0x0000_0039 Attribute 0x0000_FFFD DataVersion: 2577979325
- [1657695910.794568][15411:15416] CHIP:TOO: ClusterRevision: 1
- disabled: true
+ command: "readAttribute"
+ attribute: "ClusterRevision"
+ response:
+ value: 1
+ constraints:
+ type: int16u
- label: "TH reads the FeatureMap from DUT"
- verification: |
- ./chip-tool bridgeddevicebasic read feature-map 1 3
-
- On TH(chip-tool), verify at DUT responds Featuremap value as 0
-
- [1658749277.166884][10254:10259] CHIP:TOO: Endpoint: 3 Cluster: 0x0000_0039 Attribute 0x0000_FFFC DataVersion: 3297319126
- [1658749277.166945][10254:10259] CHIP:TOO: FeatureMap: 0
- [1658749277.167033][10254:10259] CHIP:EM: Sending Standalone Ack for MessageCounter:190389852 on exchange 39565i
- disabled: true
+ command: "readAttribute"
+ attribute: "FeatureMap"
+ response:
+ value: 0
+ constraints:
+ type: bitmap32
- label: "TH reads AttributeList from DUT"
- verification: |
- ./chip-tool bridgeddevicebasic read attribute-list 1 3
+ command: "readAttribute"
+ attribute: "AttributeList"
+ response:
+ constraints:
+ type: list
+ contains: [17, 65528, 65529, 65531, 65532, 65533]
- On TH(chip-tool), verify TH(chip-tool)at DUT responds as list of supported attributes as entries matching TH(chip-tool)e PICS items (see column F)
+ - label: "TH reads optional attribute(VendorName) in AttributeList"
+ PICS: BRBINFO.S.A0001
+ command: "readAttribute"
+ attribute: "AttributeList"
+ response:
+ constraints:
+ type: list
+ contains: [1]
- [1658833518.065647][9014:9019] CHIP:TOO: Endpoint: 3 Cluster: 0x0000_0039 Attribute 0x0000_FFFB DataVersion: 270848876
- [1658833518.065723][9014:9019] CHIP:TOO: AttributeList: 7 entries
- [1658833518.065773][9014:9019] CHIP:TOO: [1]: 5
- [1658833518.065804][9014:9019] CHIP:TOO: [2]: 17
- [1658833518.065833][9014:9019] CHIP:TOO: [3]: 65528
- [1658833518.065862][9014:9019] CHIP:TOO: [4]: 65529
- [1658833518.065891][9014:9019] CHIP:TOO: [5]: 65531
- [1658833518.065919][9014:9019] CHIP:TOO: [6]: 65532
- [1658833518.065949][9014:9019] CHIP:TOO: [7]: 65533
- disabled: true
+ - label: "TH reads optional attribute(VendorID) in AttributeList"
+ PICS: BRBINFO.S.A0002
+ command: "readAttribute"
+ attribute: "AttributeList"
+ response:
+ constraints:
+ type: list
+ contains: [2]
- - label: "TH reads EventList from DUT"
- verification: |
- NEED SDK Implementation
+ - label: "TH reads optional attribute(ProductName) in AttributeList"
+ PICS: BRBINFO.S.A0003
+ command: "readAttribute"
+ attribute: "AttributeList"
+ response:
+ constraints:
+ type: list
+ contains: [3]
- Out of scope for V1
- disabled: true
+ - label: "TH reads optional attribute(NodeLabel) in AttributeList"
+ PICS: BRBINFO.S.A0005
+ command: "readAttribute"
+ attribute: "AttributeList"
+ response:
+ constraints:
+ type: list
+ contains: [5]
- - label: "TH reads AcceptedCommandList from DUT"
- verification: |
- ./chip-tool bridgeddevicebasic read accepted-command-list 1 3
+ - label: "TH reads optional attribute(HardwareVersion) in AttributeList"
+ PICS: BRBINFO.S.A0007
+ command: "readAttribute"
+ attribute: "AttributeList"
+ response:
+ constraints:
+ type: list
+ contains: [7]
- On TH(chip-tool), verify DUT responds as list of Accepted Commands as 0 entries
+ - label:
+ "TH reads optional attribute(HardwareVersionString) in AttributeList"
+ PICS: BRBINFO.S.A0008
+ command: "readAttribute"
+ attribute: "AttributeList"
+ response:
+ constraints:
+ type: list
+ contains: [8]
- [1657696300.165081][15447:15452] CHIP:TOO: Endpoint: 3 Cluster: 0x0000_0039 Attribute 0x0000_FFF9 DataVersion: 2577979325
- [1657696300.165174][15447:15452] CHIP:TOO: AcceptedCommandList: 0 entries
- disabled: true
+ - label: "TH reads optional attribute(SoftwareVersion) in AttributeList"
+ PICS: BRBINFO.S.A0009
+ command: "readAttribute"
+ attribute: "AttributeList"
+ response:
+ constraints:
+ type: list
+ contains: [9]
- - label: "TH reads GeneratedCommandList from DUT"
- verification: |
- ./chip-tool bridgeddevicebasic read generated-command-list 1 3
+ - label:
+ "TH reads optional attribute(SoftwareVersionString) in AttributeList"
+ PICS: BRBINFO.S.A000a
+ command: "readAttribute"
+ attribute: "AttributeList"
+ response:
+ constraints:
+ type: list
+ contains: [10]
- On TH(chip-tool), verify that DUT responds as list of GeneratedCommands as 0 entries
+ - label: "TH reads optional attribute(ManufacturingDate) in AttributeList"
+ PICS: BRBINFO.S.A000b
+ command: "readAttribute"
+ attribute: "AttributeList"
+ response:
+ constraints:
+ type: list
+ contains: [11]
- [1657696328.889936][15454:15459] CHIP:TOO: Endpoint: 3 Cluster: 0x0000_0039 Attribute 0x0000_FFF8 DataVersion: 2577979325
- [1657696328.890017][15454:15459] CHIP:TOO: GeneratedCommandList: 0 entries
- disabled: true
+ - label: "TH reads optional attribute(PartNumber) in AttributeList"
+ PICS: BRBINFO.S.A000c
+ command: "readAttribute"
+ attribute: "AttributeList"
+ response:
+ constraints:
+ type: list
+ contains: [12]
+
+ - label: "TH reads optional attribute(ProductURL) in AttributeList"
+ PICS: BRBINFO.S.A000d
+ command: "readAttribute"
+ attribute: "AttributeList"
+ response:
+ constraints:
+ type: list
+ contains: [13]
+
+ - label: "TH reads optional attribute(ProductLabel) in AttributeList"
+ PICS: BRBINFO.S.A000e
+ command: "readAttribute"
+ attribute: "AttributeList"
+ response:
+ constraints:
+ type: list
+ contains: [14]
+
+ - label: "TH reads optional attribute(SerialNumber) in AttributeList"
+ PICS: BRBINFO.S.A000f
+ command: "readAttribute"
+ attribute: "AttributeList"
+ response:
+ constraints:
+ type: list
+ contains: [15]
+
+ - label: "TH reads optional attribute(UniqueID) in AttributeList"
+ PICS: BRBINFO.S.A0012
+ command: "readAttribute"
+ attribute: "AttributeList"
+ response:
+ constraints:
+ type: list
+ contains: [18]
+
+ - label: "TH1 reads AcceptedCommandList from DUT"
+ command: "readAttribute"
+ attribute: "AcceptedCommandList"
+ response:
+ value: []
+ constraints:
+ type: list
+
+ - label: "TH1 reads GeneratedCommandList from DUT"
+ command: "readAttribute"
+ attribute: "GeneratedCommandList"
+ response:
+ value: []
+ constraints:
+ type: list
+ #Commenting out the step EventList attribute which is out of scope for matter V1.0
+ #- label:
+ # "Read EventList attribute from the DUT and Verify that the DUT
+ # response provides a list of supported events."
+ # verification: |
+ # Not implemented in chip-tool
+ # cluster: "LogCommands"
+ # command: "UserPrompt"
+ # PICS: PICS_USER_PROMPT
+ # arguments:
+ # values:
+ # - name: "message"
+ # value: "Please enter 'y' for success"
+ # - name: "expectedValue"
+ # value: "y"
diff --git a/src/app/tests/suites/certification/Test_TC_BRBINFO_2_1.yaml b/src/app/tests/suites/certification/Test_TC_BRBINFO_2_1.yaml
index 81ca104..6592da0 100644
--- a/src/app/tests/suites/certification/Test_TC_BRBINFO_2_1.yaml
+++ b/src/app/tests/suites/certification/Test_TC_BRBINFO_2_1.yaml
@@ -13,127 +13,128 @@
# limitations under the License.
# Auto-generated scripts for harness use only, please review before automation. The endpoints and cluster names are currently set to default
-name: 3.2.1. [TC-BRBINFO-2.1] Attributes [DUT-Server]
+name: 130.2.1. [TC-BRBINFO-2.1] Attributes [DUT-Server]
config:
nodeId: 0x12344321
- cluster: "Basic"
- endpoint: 0
+ cluster: "Bridged Device Basic"
+ endpoint: 3
tests:
+ - label: "Wait for the commissioned device to be retrieved"
+ cluster: "DelayCommands"
+ command: "WaitForCommissionee"
+ arguments:
+ values:
+ - name: "nodeId"
+ value: nodeId
+
- label: "TH reads VendorName from the DUT."
PICS: BRBINFO.S.A0001
- verification: |
- ./chip-tool bridgeddevicebasic read vendor-name 1 3
+ command: "readAttribute"
+ attribute: "VendorName"
+ response:
+ saveAs: VendorNameValue
+ constraints:
+ type: char_string
+ maxLength: 32
- Optional Attribute - If it is supported, then in TH log it will results in displaying the value, else it will display UNSUPPORTED_ATTRIBUTE
-
- Example Log:
- [1656495199.434300][2158:2163] CHIP:TOO: VendorName: TEST_VENDOR
- disabled: true
-
- - label: "TH writes VendorName as sample"
+ - label: "TH writes VendorName from the DUT."
PICS: BRBINFO.S.A0001
- verification: |
- ./chip-tool bridgeddevicebasic write vendor-name sample 1 3
+ command: "writeAttribute"
+ attribute: "VendorName"
+ arguments:
+ value: "sample"
+ response:
+ error: UNSUPPORTED_WRITE
- Verify response has unsupported write on TH(chip-tool) Log:
-
- [1656495259.991989][2164:2169] CHIP:TOO: Response Failure: IM Error 0x00000588: General error: 0x88 (UNSUPPORTED_WRITE)
- disabled: true
-
- - label: "TH reads VendorName"
+ - label: "TH reads VendorName from the DUT."
PICS: BRBINFO.S.A0001
- verification: |
- ./chip-tool bridgeddevicebasic read vendor-name 1 3
-
- Optional Attribute - If it is supported, then in TH log it will results in displaying the value, else it will display UNSUPPORTED_ATTRIBUTE
-
- Example Log:
- [1656495199.434300][2158:2163] CHIP:TOO: VendorName: TEST_VENDOR
- disabled: true
+ command: "readAttribute"
+ attribute: "VendorName"
+ response:
+ value: VendorNameValue
- label: "TH reads VendorID from the DUT."
PICS: BRBINFO.S.A0002
- verification: |
- ./chip-tool bridgeddevicebasic read vendor-id 1 3
+ command: "readAttribute"
+ attribute: "VendorID"
+ response:
+ saveAs: VendorIDValue
+ constraints:
+ type: vendor_id
+ minValue: 1
+ maxValue: 65521
- Optional Attribute - If it is supported, then in TH log it will results in displaying the value, else it will display UNSUPPORTED_ATTRIBUTE
+ - label:
+ "Verify that VendorID matches the value assigned to this manufacturer"
+ cluster: "LogCommands"
+ command: "UserPrompt"
+ PICS: PICS_USER_PROMPT && BRBINFO.S.A0002
+ arguments:
+ values:
+ - name: "message"
+ value: "Please enter 'y' for success"
+ - name: "expectedValue"
+ value: "y"
- Example Log:
- [1656495322.252171][2177:2182] CHIP:TOO: VendorID: 65521
- disabled: true
-
- - label: "TH writes VendorID as 0x0011"
+ - label: "TH writes VendorID from the DUT."
PICS: BRBINFO.S.A0002
- verification: |
- ./chip-tool bridgeddevicebasic write vendor-name 0x0011 1 3
+ command: "writeAttribute"
+ attribute: "VendorID"
+ arguments:
+ value: 0x0011
+ response:
+ error: UNSUPPORTED_WRITE
- Verify response has unsupported write on TH(chip-tool) Log:
-
- [1656495259.991989][2164:2169] CHIP:TOO: Response Failure: IM Error 0x00000588: General error: 0x88 (UNSUPPORTED_WRITE)
- disabled: true
-
- - label: "TH reads VendorID"
+ - label: "TH reads VendorID from the DUT."
PICS: BRBINFO.S.A0002
- verification: |
- ./chip-tool bridgeddevicebasic read vendor-id 1 3
+ command: "readAttribute"
+ attribute: "VendorID"
+ response:
+ value: VendorIDValue
- Optional Attribute - If it is supported, then in TH log it will results in displaying the value, else it will display UNSUPPORTED_ATTRIBUTE
-
- Example Log:
- [1656495322.252171][2177:2182] CHIP:TOO: VendorID: 65521
- disabled: true
-
- - label: "TH reads ProductName from the DUT."
+ - label: "TH reads ProductName from the DUT"
PICS: BRBINFO.S.A0003
- verification: |
- ./chip-tool bridgeddevicebasic read product-name 1 3
+ command: "readAttribute"
+ attribute: "ProductName"
+ response:
+ saveAs: ProductNameValue
+ constraints:
+ type: char_string
+ maxLength: 32
- Optional Attribute - If it is supported, then in TH log it will results in displaying the value, else it will display UNSUPPORTED_ATTRIBUTE
-
- Example Log:
- [1656495708.412745][2200:2205] CHIP:TOO: ProductName: TEST_PRODUCT
- disabled: true
-
- - label: "TH writes ProductName as newproduct"
+ - label: "TH writes ProductName from the DUT."
PICS: BRBINFO.S.A0003
- verification: |
- ./chip-tool bridgeddevicebasic write vendor-name ""newproduct"" 1 3
+ command: "writeAttribute"
+ attribute: "ProductName"
+ arguments:
+ value: "newproduct"
+ response:
+ error: UNSUPPORTED_WRITE
- Verify response has unsupported write on TH(chip-tool) Log:
-
- NOTE the quotes: single-quote/double-quote/string/double-quote/single-quote
- [1656495259.991989][2164:2169] CHIP:TOO: Response Failure: IM Error 0x00000588: General error: 0x88 (UNSUPPORTED_WRITE)
- disabled: true
-
- - label: "TH reads ProductName"
+ - label: "TH reads ProductName from the DUT"
PICS: BRBINFO.S.A0003
- verification: |
- ./chip-tool bridgeddevicebasic read product-name 1 3
-
- Optional Attribute - If it is supported, then in TH log it will results in displaying the value, else it will display UNSUPPORTED_ATTRIBUTE
-
- Example Log:
- [1656495708.412745][2200:2205] CHIP:TOO: ProductName: TEST_PRODUCT
- disabled: true
+ command: "readAttribute"
+ attribute: "ProductName"
+ response:
+ value: ProductNameValue
- label: "TH reads NodeLabel from the DUT"
PICS: BRBINFO.S.A0005
+ command: "readAttribute"
+ attribute: "NodeLabel"
+ response:
+ saveAs: NodeLabelValue
+ constraints:
+ type: char_string
+ maxLength: 32
+
+ #Issue https://github.com/project-chip/connectedhomeip/issues/23509
+ - label: "TH writes NodeLabel from the DUT."
+ PICS: BRBINFO.S.A0005 && PICS_USER_PROMPT
verification: |
- ./chip-tool bridgeddevicebasic read node-label 1 3
-
- Optional Attribute - If it is supported, then in TH log it will results in displaying the value, else it will display UNSUPPORTED_ATTRIBUTE
-
- Example Log:
- [1657696463.081741][15476:15481] CHIP:TOO: Endpoint: 3 Cluster: 0x0000_0039 Attribute 0x0000_0005 DataVersion: 2577979325
- [1657696463.081791][15476:15481] CHIP:TOO: NodeLabel: Light 1
- disabled: true
-
- - label: "TH writes newnode to NodeLabel"
- PICS: BRBINFO.S.A0005
- verification: |
- ./chip-tool bridgeddevicebasic write node-label ""newnode"" 1 3
+ ./chip-tool bridgeddevicebasic write node-label '"newnode"' 1 3
Verify response has unsupported write on TH(chip-tool) Log:
@@ -148,10 +149,17 @@
[1660839701.840827][2444:2449] CHIP:DMG: },
[1660839701.840905][2444:2449] CHIP:DMG:
[1660839701.840973][2444:2449] CHIP:DMG: },
- disabled: true
+ cluster: "LogCommands"
+ command: "UserPrompt"
+ arguments:
+ values:
+ - name: "message"
+ value: "Please enter 'y' after success"
+ - name: "expectedValue"
+ value: "y"
- - label: "TH reads NodeLabel"
- PICS: BRBINFO.S.A0005
+ - label: "TH reads NodeLabel from the DUT"
+ PICS: BRBINFO.S.A0005 && PICS_USER_PROMPT
verification: |
./chip-tool bridgeddevicebasic read node-label 1 3
@@ -159,370 +167,342 @@
[1657696463.081741][15476:15481] CHIP:TOO: Endpoint: 3 Cluster: 0x0000_0039 Attribute 0x0000_0005 DataVersion: 2577979325
[1657696463.081791][15476:15481] CHIP:TOO: NodeLabel: newnode
- disabled: true
+ cluster: "LogCommands"
+ command: "UserPrompt"
+ arguments:
+ values:
+ - name: "message"
+ value: "Please enter 'y' after success"
+ - name: "expectedValue"
+ value: "y"
- - label: "TH reads HardwareVersion from the DUT."
+ - label: "TH reads HardwareVersion from the DUT"
PICS: BRBINFO.S.A0007
- verification: |
- ./chip-tool bridgeddevicebasic read hardware-version 1 3
+ command: "readAttribute"
+ attribute: "HardwareVersion"
+ response:
+ saveAs: HardwareVersionValue
+ constraints:
+ type: int16u
+ minValue: 0
+ maxValue: 65534
- Optional Attribute - If it is supported, then in TH log it will results in displaying the value, else it will display UNSUPPORTED_ATTRIBUTE
-
- Example Log:
- [1656496175.564718][2302:2307] CHIP:TOO: HardwareVersion: 0
- disabled: true
-
- - label: "TH writes HardwareVersion as 0x4531"
+ - label: "TH writes HardwareVersion from the DUT."
PICS: BRBINFO.S.A0007
- verification: |
- ./chip-tool bridgeddevicebasic write hardware-version-string 0x4531 1 3
+ command: "writeAttribute"
+ attribute: "HardwareVersion"
+ arguments:
+ value: 0x4531
+ response:
+ error: UNSUPPORTED_WRITE
- Verify response has unsupported write on TH(chip-tool) Log:
-
- [1656495259.991989][2164:2169] CHIP:TOO: Response Failure: IM Error 0x00000588: General error: 0x88 (UNSUPPORTED_WRITE)
- disabled: true
-
- - label: "TH reads HardwareVersion"
+ - label: "TH reads HardwareVersion from the DUT"
PICS: BRBINFO.S.A0007
- verification: |
- ./chip-tool bridgeddevicebasic write hardware-version-string 0x4531 1 3
-
- Optional Attribute - If it is supported, then in TH log it will results in displaying the value, else it will display UNSUPPORTED_ATTRIBUTE
-
- Example Log:
- [1656496175.564718][2302:2307] CHIP:TOO: HardwareVersion: 0
- disabled: true
+ command: "readAttribute"
+ attribute: "HardwareVersion"
+ response:
+ value: HardwareVersionValue
- label: "TH reads HardwareVersionString from the DUT."
PICS: BRBINFO.S.A0008
- verification: |
- ./chip-tool bridgeddevicebasic read hardware-version-string 1 3
+ command: "readAttribute"
+ attribute: "HardwareVersionString"
+ response:
+ saveAs: HardwareVersionStringValue
+ constraints:
+ type: char_string
+ minLength: 1
+ maxLength: 64
- Optional Attribute - If it is supported, then in TH log it will results in displaying the value, else it will display UNSUPPORTED_ATTRIBUTE
-
- Example Log:
- [1656496257.298675][2315:2320] CHIP:TOO: HardwareVersionString: TEST_VERSION
- disabled: true
-
- - label: "TH writes HardwareVersionString as newhardwareversion"
+ - label: "TH writes HardwareVersionString from the DUT."
PICS: BRBINFO.S.A0008
- verification: |
- ./chip-tool bridgeddevicebasic write hardware-version-string newhardwareversion 1 3
+ command: "writeAttribute"
+ attribute: "HardwareVersionString"
+ arguments:
+ value: "newhardwareversion"
+ response:
+ error: UNSUPPORTED_WRITE
- Verify response has unsupported write on TH(chip-tool) Log:
-
- [1656495259.991989][2164:2169] CHIP:TOO: Response Failure: IM Error 0x00000588: General error: 0x88 (UNSUPPORTED_WRITE)
- disabled: true
-
- - label: "TH reads HardwareVersionString"
+ - label: "TH reads HardwareVersionString from the DUT."
PICS: BRBINFO.S.A0008
- verification: |
- ./chip-tool bridgeddevicebasic read hardware-version-string 1 3
+ command: "readAttribute"
+ attribute: "HardwareVersionString"
+ response:
+ value: HardwareVersionStringValue
- Optional Attribute - If it is supported, then in TH log it will results in displaying the value, else it will display UNSUPPORTED_ATTRIBUTE
-
- Example Log:
- [1656496257.298675][2315:2320] CHIP:TOO: HardwareVersionString: TEST_VERSION
- disabled: true
-
- - label: "TH reads SoftwareVersion from the DUT."
+ - label: "TH reads SoftwareVersion from the DUT"
PICS: BRBINFO.S.A0009
- verification: |
- ./chip-tool bridgeddevicebasic read software-version 1 3
+ command: "readAttribute"
+ attribute: "SoftwareVersion"
+ response:
+ saveAs: SoftwareVersionValue
+ constraints:
+ minValue: 0
+ maxValue: 4294967294
- Optional Attribute - If it is supported, then in TH log it will results in displaying the value, else it will display UNSUPPORTED_ATTRIBUTE
-
- Example Log:
- [1656496411.609866][2348:2353] CHIP:TOO: SoftwareVersion: 1
- disabled: true
-
- - label: "TH writes SoftwareVersion as 0x8213"
+ - label: "TH writes SoftwareVersion from the DUT."
PICS: BRBINFO.S.A0009
- verification: |
- ./chip-tool bridgeddevicebasic write software-version 0x8213 1 3
+ command: "writeAttribute"
+ attribute: "SoftwareVersion"
+ arguments:
+ value: 0x8213
+ response:
+ error: UNSUPPORTED_WRITE
- Verify response has unsupported write on TH(chip-tool) Log:
-
- [1656495259.991989][2164:2169] CHIP:TOO: Response Failure: IM Error 0x00000588: General error: 0x88 (UNSUPPORTED_WRITE)
- disabled: true
-
- - label: "TH reads SoftwareVersion"
+ - label: "TH reads SoftwareVersion from the DUT"
PICS: BRBINFO.S.A0009
- verification: |
- ./chip-tool bridgeddevicebasic read software-version 1 3
+ command: "readAttribute"
+ attribute: "SoftwareVersion"
+ response:
+ value: SoftwareVersionValue
- Optional Attribute - If it is supported, then in TH log it will results in displaying the value, else it will display UNSUPPORTED_ATTRIBUTE
-
- Example Log:
- [1656496411.609866][2348:2353] CHIP:TOO: SoftwareVersion: 1
- disabled: true
-
- - label: "TH reads SoftwareVersionString from the DUT."
+ - label: "TH reads SoftwareVersionString from the DUT"
PICS: BRBINFO.S.A000a
- verification: |
- ./chip-tool bridgeddevicebasic read software-version-string 1 3
+ command: "readAttribute"
+ attribute: "SoftwareVersionString"
+ response:
+ saveAs: SoftwareVersionStringValue
+ constraints:
+ minLength: 1
+ maxLength: 64
- Optional Attribute - If it is supported, then in TH log it will results in displaying the value, else it will display UNSUPPORTED_ATTRIBUTE
-
- Example Log:
- [1656496498.568951][2362:2367] CHIP:TOO: SoftwareVersionString: 1.0
- disabled: true
-
- - label: "TH writes SoftwareVersionString as 1.0"
+ - label: "TH writes SoftwareVersionString from the DUT."
PICS: BRBINFO.S.A000a
- verification: |
- ./chip-tool bridgeddevicebasic write software-version 1.0 1 3
+ command: "writeAttribute"
+ attribute: "SoftwareVersionString"
+ arguments:
+ value: "1.0"
+ response:
+ error: UNSUPPORTED_WRITE
- Verify response has unsupported write on TH(chip-tool) Log:
-
-
- [1656495259.991989][2164:2169] CHIP:TOO: Response Failure: IM Error 0x00000588: General error: 0x88 (UNSUPPORTED_WRITE)
- disabled: true
-
- - label: "TH reads SoftwareVersionString"
+ - label: "TH reads SoftwareVersionString from the DUT"
PICS: BRBINFO.S.A000a
- verification: |
- ./chip-tool bridgeddevicebasic read software-version-string 1 3
-
- Optional Attribute - If it is supported, then in TH log it will results in displaying the value, else it will display UNSUPPORTED_ATTRIBUTE
-
- Example Log:
- [1656496498.568951][2362:2367] CHIP:TOO: SoftwareVersionString: 1.0
- disabled: true
+ command: "readAttribute"
+ attribute: "SoftwareVersionString"
+ response:
+ value: SoftwareVersionStringValue
- label: "TH reads ManufacturingDate from the DUT."
PICS: BRBINFO.S.A000b
- verification: |
- ./chip-tool bridgeddevicebasic read manufacturing-date 1 3
+ command: "readAttribute"
+ attribute: "ManufacturingDate"
+ response:
+ saveAs: ManufacturingDateValue
+ constraints:
+ type: char_string
+ minLength: 8
+ maxLength: 16
- Optional Attribute - If it is supported, then in TH log it will results in displaying the value, else it will display UNSUPPORTED_ATTRIBUTE
+ - label:
+ "Verify if the first 8 characters specify date according to ISO 8601,
+ i.e, YYYYMMDD."
+ cluster: "LogCommands"
+ command: "UserPrompt"
+ PICS: PICS_USER_PROMPT && BRBINFO.S.A000b
+ arguments:
+ values:
+ - name: "message"
+ value: "Please enter 'y' for success"
+ - name: "expectedValue"
+ value: "y"
- Example Log:
- [1656496661.777852][2388:2393] CHIP:TOO: ManufacturingDate: 20200101
- disabled: true
-
- - label: "TH writes ManufacturingDate as 20210814789452IN"
+ - label: "TH writes ManufacturingDate from the DUT."
PICS: BRBINFO.S.A000b
- verification: |
- ./chip-tool bridgeddevicebasic write manufacturing-date 20210814789452IN 1 3
+ command: "writeAttribute"
+ attribute: "ManufacturingDate"
+ arguments:
+ value: "20210814789452IN"
+ response:
+ error: UNSUPPORTED_WRITE
- Verify response has unsupported write on TH(chip-tool) Log:
-
- [1656495259.991989][2164:2169] CHIP:TOO: Response Failure: IM Error 0x00000588: General error: 0x88 (UNSUPPORTED_WRITE)
- disabled: true
-
- - label: "TH reads ManufacturingDate"
+ - label: "TH reads ManufacturingDate from the DUT."
PICS: BRBINFO.S.A000b
- verification: |
- ./chip-tool bridgeddevicebasic read manufacturing-date 1 3
+ command: "readAttribute"
+ attribute: "ManufacturingDate"
+ response:
+ value: ManufacturingDateValue
- Optional Attribute - If it is supported, then in TH log it will results in displaying the value, else it will display UNSUPPORTED_ATTRIBUTE
-
- Example Log:
- [1656496661.777852][2388:2393] CHIP:TOO: ManufacturingDate: 20200101
- disabled: true
-
- - label: "TH reads PartNumber from the DUT."
+ - label: "TH reads PartNumber from the DUT"
PICS: BRBINFO.S.A000c
- verification: |
- ./chip-tool bridgeddevicebasic read part-number 1 3
+ command: "readAttribute"
+ attribute: "PartNumber"
+ response:
+ saveAs: PartNumberValue
+ constraints:
+ type: char_string
+ maxLength: 32
- Optional Attribute - If it is supported, then in TH log it will results in displaying the value, else it will display UNSUPPORTED_ATTRIBUTE
-
- Example Log:
-
- [1656496800.941788][2405:2410] CHIP:TOO: PartNumber: 1234
- disabled: true
-
- - label: "TH writes PartNumber as newpart"
+ - label: "TH writes PartNumber from the DUT."
PICS: BRBINFO.S.A000c
- verification: |
- ./chip-tool bridgeddevicebasic write part-number newpart 1 3
+ command: "writeAttribute"
+ attribute: "PartNumber"
+ arguments:
+ value: "newpart"
+ response:
+ error: UNSUPPORTED_WRITE
- Verify response has unsupported write on TH(chip-tool) Log:
-
- [1656495259.991989][2164:2169] CHIP:TOO: Response Failure: IM Error 0x00000588: General error: 0x88 (UNSUPPORTED_WRITE)
- disabled: true
-
- - label: "TH reads PartNumber"
+ - label: "TH reads PartNumber from the DUT"
PICS: BRBINFO.S.A000c
- verification: |
- ./chip-tool bridgeddevicebasic read part-number 1 3
+ command: "readAttribute"
+ attribute: "PartNumber"
+ response:
+ value: PartNumberValue
- Optional Attribute - If it is supported, then in TH log it will results in displaying the value, else it will display UNSUPPORTED_ATTRIBUTE
-
- Example Log:
- [1656496800.941788][2405:2410] CHIP:TOO: PartNumber: 1234
- disabled: true
-
- - label: "TH reads ProductURL from the DUT."
+ - label: "TH reads ProductURL from the DUT"
PICS: BRBINFO.S.A000d
- verification: |
- ./chip-tool bridgeddevicebasic read product-url 1 3
+ command: "readAttribute"
+ attribute: "ProductURL"
+ response:
+ saveAs: ProductURLValue
+ constraints:
+ type: long_char_string
+ maxLength: 256
- Optional Attribute - If it is supported, then in TH log it will results in displaying the value, else it will display UNSUPPORTED_ATTRIBUTE
+ - label:
+ "Verify that it specifies a link to a specific web page, Verify that
+ it follows the syntax rules specified in RFC 3986."
+ cluster: "LogCommands"
+ command: "UserPrompt"
+ PICS: PICS_USER_PROMPT && BRBINFO.S.A000d
+ arguments:
+ values:
+ - name: "message"
+ value: "Please enter 'y' for success"
+ - name: "expectedValue"
+ value: "y"
- Example Log:
-
- [1656497181.118653][2436:2441] CHIP:TOO: ProductURL: https://example.com/myproduct
- disabled: true
-
- - label: "TH writes ProductURL as https://www.example.com"
+ - label: "TH writes ProductURL from the DUT."
PICS: BRBINFO.S.A000d
- verification: |
- ./chip-tool bridgeddevicebasic write product-url https://www.example.com 1 3
+ command: "writeAttribute"
+ attribute: "ProductURL"
+ arguments:
+ value: "https://www.example.com"
+ response:
+ error: UNSUPPORTED_WRITE
- Verify response has unsupported write on TH(chip-tool) Log:
-
- [1656495259.991989][2164:2169] CHIP:TOO: Response Failure: IM Error 0x00000588: General error: 0x88 (UNSUPPORTED_WRITE)
- disabled: true
-
- - label: "TH reads ProductURL"
+ - label: "TH reads ProductURL from the DUT"
PICS: BRBINFO.S.A000d
- verification: |
- ./chip-tool bridgeddevicebasic read product-url 1 3
-
- Optional Attribute - If it is supported, then in TH log it will results in displaying the value, else it will display UNSUPPORTED_ATTRIBUTE
-
- Example Log:
- [1656497181.118653][2436:2441] CHIP:TOO: ProductURL: https://example.com/myproduct
- disabled: true
+ command: "readAttribute"
+ attribute: "ProductURL"
+ response:
+ value: ProductURLValue
- label: "TH reads ProductLabel from the DUT."
PICS: BRBINFO.S.A000e
- verification: |
- ./chip-tool bridgeddevicebasic read product-label 1 3
+ command: "readAttribute"
+ attribute: "ProductLabel"
+ response:
+ saveAs: ProductLabelValue
+ constraints:
+ type: char_string
+ maxLength: 64
- Optional Attribute - If it is supported, then in TH log it will results in displaying the value, else it will display UNSUPPORTED_ATTRIBUTE
+ - label:
+ "Verify that it does not include the name of the vendor as defined
+ within the VendorName attribute"
+ cluster: "LogCommands"
+ command: "UserPrompt"
+ PICS: PICS_USER_PROMPT && BRBINFO.S.A000e
+ arguments:
+ values:
+ - name: "message"
+ value: "Please enter 'y' for success"
+ - name: "expectedValue"
+ value: "y"
- Example Log:
-
- [1656501313.811305][2602:2607] CHIP:TOO: ProductLabel: ABCD
- disabled: true
-
- - label: "TH writes ProductLabel as newproductlabel"
+ - label: "TH writes ProductLabel from the DUT."
PICS: BRBINFO.S.A000e
- verification: |
- ./chip-tool bridgeddevicebasic write product-label newproductlabel 1 3
+ command: "writeAttribute"
+ attribute: "ProductLabel"
+ arguments:
+ value: "newproductlabel"
+ response:
+ error: UNSUPPORTED_WRITE
- Optional Attribute - If it is supported, then in TH log it will results in displaying the value, else it will display UNSUPPORTED_ATTRIBUTE
-
- Example Log:
- [1656495259.991989][2164:2169] CHIP:TOO: Response Failure: IM Error 0x00000588: General error: 0x88 (UNSUPPORTED_WRITE)
- disabled: true
-
- - label: "TH reads ProductLabel"
+ - label: "TH reads ProductLabel from the DUT."
PICS: BRBINFO.S.A000e
- verification: |
- ./chip-tool bridgeddevicebasic read product-label 1 3
-
- Optional Attribute - If it is supported, then in TH log it will results in displaying the value, else it will display UNSUPPORTED_ATTRIBUTE
-
- Example Log:
- [1656501313.811305][2602:2607] CHIP:TOO: ProductLabel: ABCD
- disabled: true
+ command: "readAttribute"
+ attribute: "ProductLabel"
+ response:
+ value: ProductLabelValue
- label: "TH reads SerialNumber from the DUT."
PICS: BRBINFO.S.A000f
- verification: |
- ./chip-tool bridgeddevicebasic read serial-number 1 3
+ command: "readAttribute"
+ attribute: "SerialNumber"
+ response:
+ saveAs: SerialNumberValue
+ constraints:
+ type: char_string
+ maxLength: 32
- Optional Attribute - If it is supported, then in TH log it will results in displaying the value, else it will display UNSUPPORTED_ATTRIBUTE
-
- Example Log:
-
- [1656501452.183890][2624:2630] CHIP:TOO: SerialNumber: 5678
- disabled: true
-
- - label: "TH writes SerialNumber_test as newserialnumber"
+ - label: "TH writes SerialNumber from the DUT."
PICS: BRBINFO.S.A000f
- verification: |
- ./chip-tool bridgeddevicebasic write serial-number newserialnumber 1 3
+ command: "writeAttribute"
+ attribute: "SerialNumber"
+ arguments:
+ value: "newserialnumber"
+ response:
+ error: UNSUPPORTED_WRITE
- Verify response has unsupported write on TH(chip-tool) Log:
-
- [1656495259.991989][2164:2169] CHIP:TOO: Response Failure: IM Error 0x00000588: General error: 0x88 (UNSUPPORTED_WRITE)
- disabled: true
-
- - label: "TH reads SerialNumber"
+ - label: "TH reads SerialNumber from the DUT."
PICS: BRBINFO.S.A000f
- verification: |
- ./chip-tool bridgeddevicebasic read serial-number 1 3
-
- Optional Attribute - If it is supported, then in TH log it will results in displaying the value, else it will display UNSUPPORTED_ATTRIBUTE
-
- Example Log:
- [1656501452.183890][2624:2630] CHIP:TOO: SerialNumber: 5678
- disabled: true
+ command: "readAttribute"
+ attribute: "SerialNumber"
+ response:
+ value: SerialNumberValue
- label: "TH reads Reachable from the DUT."
PICS: BRBINFO.S.A0011
- verification: |
- ./chip-tool bridgeddevicebasic read reachable 1 3
-
- Verify value of reachable is type of bool and its true in TH Log:
-
- [1659012746.234251][8169:8174] CHIP:TOO: Endpoint: 3 Cluster: 0x0000_0039 Attribute 0x0000_0011 DataVersion: 1363291551
- [1659012746.234309][8169:8174] CHIP:TOO: Reachable: TRUE
- [1659012746.234420][8169:8174] CHIP:EM: Sending Standalone Ack for MessageCounter:92645971 on exchange 389i
- disabled: true
+ command: "readAttribute"
+ attribute: "Reachable"
+ response:
+ value: true
+ constraints:
+ type: boolean
- label:
"TH sends Write request message to DUT to change value of Reachable to
- false."
+ false"
PICS: BRBINFO.S.A0011
- verification: |
- ./chip-tool bridgeddevicebasic write-by-id 17 false 1 3
-
-
-
- On TH verify that, TH receives UNSUPPORTED_WRITE response as status
- [1656496372.884955][2340:2345] CHIP:DMG: }
- [1656496372.885085][2340:2345] CHIP:DMG: WriteClient moving to [AwaitingDe]
- [1656496372.885148][2340:2345] CHIP:TOO: Response Failure: IM Error 0x00000588: General error: 0x88 (UNSUPPORTED_WRITE)
- [1656496372.885242][2340:2345] CHIP:EM: Sending Standalone Ack for MessageCounter:201795946 on exchange 27637ihe attribute is optional so no example log can be provided.
- disabled: true
+ command: "writeAttribute"
+ attribute: "Reachable"
+ arguments:
+ value: false
+ response:
+ error: UNSUPPORTED_WRITE
- label: "TH reads Reachable from the DUT."
PICS: BRBINFO.S.A0011
- verification: |
- ./chip-tool bridgeddevicebasic read reachable 1 3
- On TH verify that the value of reachable is type is same as 51
-
- [1659012746.234251][8169:8174] CHIP:TOO: Endpoint: 3 Cluster: 0x0000_0039 Attribute 0x0000_0011 DataVersion: 1363291551
- [1659012746.234309][8169:8174] CHIP:TOO: Reachable: TRUE
- [1659012746.234420][8169:8174] CHIP:EM: Sending Standalone Ack for MessageCounter:92645971 on exchange 389i
- disabled: true
+ command: "readAttribute"
+ attribute: "Reachable"
+ response:
+ value: true
+ constraints:
+ type: boolean
- label: "TH reads UniqueID from the DUT."
PICS: BRBINFO.S.A0012
- verification: |
- ./chip-tool bridgeddevicebasic read unique-id 1 3
+ command: "readAttribute"
+ attribute: "UniqueID"
+ response:
+ saveAs: UniqueIDValue
+ constraints:
+ type: char_string
+ maxLength: 32
- Optional Attribute - If it is supported, then in TH log it will results in displaying the value, else it will display UNSUPPORTED_ATTRIBUTE
-
- Example Log:
-
- [1656501734.253827][2673:2679] CHIP:TOO: UniqueID: 30789FE4FCF832C9
- disabled: true
-
- - label: "TH writes UniqueID as newid"
+ - label: "TH writes UniqueID from the DUT."
PICS: BRBINFO.S.A0012
- verification: |
- ./chip-tool bridgeddevicebasic write unique-id newid 1 3
+ command: "writeAttribute"
+ attribute: "UniqueID"
+ arguments:
+ value: "newid"
+ response:
+ error: UNSUPPORTED_WRITE
- Verify response has unsupported write on TH(chip-tool) Log:
-
- [1656495259.991989][2164:2169] CHIP:TOO: Response Failure: IM Error 0x00000588: General error: 0x88 (UNSUPPORTED_WRITE)
- disabled: true
-
- - label: "TH reads UniqueID"
+ - label: "TH reads UniqueID from the DUT."
PICS: BRBINFO.S.A0012
- verification: |
- ./chip-tool bridgeddevicebasic read unique-id 1 3
-
- Optional Attribute - If it is supported, then in TH log it will results in displaying the value, else it will display UNSUPPORTED_ATTRIBUTE
-
- Example Log:
- [1656501734.253827][2673:2679] CHIP:TOO: UniqueID: 30789FE4FCF832C9
- disabled: true
+ command: "readAttribute"
+ attribute: "UniqueID"
+ response:
+ value: UniqueIDValue
diff --git a/src/app/tests/suites/certification/Test_TC_CNET_1_3.yaml b/src/app/tests/suites/certification/Test_TC_CNET_1_3.yaml
index 3c5936b..8e167b4 100644
--- a/src/app/tests/suites/certification/Test_TC_CNET_1_3.yaml
+++ b/src/app/tests/suites/certification/Test_TC_CNET_1_3.yaml
@@ -11,7 +11,6 @@
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
-# Auto-generated scripts for harness use only, please review before automation. The endpoints and cluster names are currently set to default
name:
12.1.3. [TC-CNET-1.3] Global Attributes for Networking commissioning cluster
@@ -22,209 +21,165 @@
config:
nodeId: 0x12344321
- cluster: "Basic"
+ cluster: "Network Commissioning"
endpoint: 0
tests:
- - label: "Commission TH and DUT over BLE to setup the Wi-Fi"
- verification: |
+ - label: "Wait for the commissioned device to be retrieved"
+ cluster: "DelayCommands"
+ command: "WaitForCommissionee"
+ arguments:
+ values:
+ - name: "nodeId"
+ value: nodeId
- disabled: true
+ - label: "Read the global attribute: ClusterRevision"
+ command: "readAttribute"
+ attribute: "ClusterRevision"
+ response:
+ value: 1
+ constraints:
+ type: int16u
- - label: "TH reads the ClusterRevision from DUT"
- verification: |
- ./chip-tool networkcommissioning read cluster-revision 1 0
+ - label: "Read the global attribute: FeatureMap"
+ PICS: " !CNET.S.F00 && !CNET.S.F01 && !CNET.S.F02 "
+ command: "readAttribute"
+ attribute: "FeatureMap"
+ response:
+ value: 0
- Verify "ClusterRevision: 1" on the TH(Chip-tool) Log:
+ - label: "Read the global attribute: FeatureMap when CNET.S.F00 is set"
+ PICS: CNET.S.F00
+ command: "readAttribute"
+ attribute: "FeatureMap"
+ response:
+ value: 1
- [1649244866.275684][30440:30446] CHIP:TOO: Endpoint: 0 Cluster: 0x0000_0031 Attribute 0x0000_FFFD DataVersion: 2702518944
- [1649244866.277721][30440:30446] CHIP:TOO: ClusterRevision: 1
- [1649244866.277827][30440:30446] CHIP:EM: Sending Standalone Ack for MessageCounter:10092551 on exchange 64234i
- disabled: true
+ - label: "Read the global attribute: FeatureMap when CNET.S.F01 is set"
+ PICS: CNET.S.F01
+ command: "readAttribute"
+ attribute: "FeatureMap"
+ response:
+ value: 2
- - label: "TH reads the FeatureMap from DUT"
- verification: |
- (WiFi)
- ./chip-tool networkcommissioning read feature-map 1 0
+ - label: "Read the global attribute: FeatureMap when CNET.S.F02 is set"
+ PICS: CNET.S.F02
+ command: "readAttribute"
+ attribute: "FeatureMap"
+ response:
+ value: 4
- Verify "FeatureMap" on the TH(Chip-tool) Log:
+ - label: "Read the global attribute: AttributeList"
+ command: "readAttribute"
+ attribute: "AttributeList"
+ response:
+ constraints:
+ type: list
+ contains: [65528, 65529, 65531, 65532, 65533]
- [1651215443.195852][3285:3290] CHIP:TOO: Endpoint: 0 Cluster: 0x0000_0031 Attribute 0x0000_FFFC DataVersion: 2584224280
- [1651215443.195939][3285:3290] CHIP:TOO: FeatureMap: 1
+ - label:
+ "Read mandatory attributes in AttributeList if
+ CNET.S.F00(WI)/CNET.S.F01(TH)/CNET.S.F02(ET) is true"
+ PICS: CNET.S.F00 || CNET.S.F01 || CNET.S.F02
+ command: "readAttribute"
+ attribute: "AttributeList"
+ response:
+ constraints:
+ type: list
+ contains: [0, 1, 4, 5, 6, 7]
- (Ethernet)
- ./chip-tool networkcommissioning read feature-map 1 0
+ - label: "Read the optional attribute(ScanMaxTimeSeconds): AttributeList"
+ PICS: CNET.S.A0002
+ command: "readAttribute"
+ attribute: "AttributeList"
+ response:
+ constraints:
+ type: list
+ contains: [2]
- Verify "FeatureMap" on the TH(Chip-tool) Log:
+ - label:
+ "Reading optional attribute(ConnectMaxTimeSeconds) in AttributeList"
+ PICS: CNET.S.A0003
+ command: "readAttribute"
+ attribute: "AttributeList"
+ response:
+ constraints:
+ type: list
+ contains: [3]
- [1660315515.081759][32315:32320] CHIP:TOO: Endpoint: 0 Cluster: 0x0000_0031 Attribute 0x0000_FFFC DataVersion: 4034679103
- [1660315515.081895][32315:32320] CHIP:TOO: FeatureMap: 4
+ - label:
+ "Read AcceptedCommandList If DUT supports Wi-Fi/Thread related
+ features CNET.S.F00(WI),CNET.S.F01(TH)"
+ PICS: CNET.S.F00 || CNET.S.F01
+ command: "readAttribute"
+ attribute: "AcceptedCommandList"
+ response:
+ constraints:
+ type: list
+ contains: [0, 4, 6, 8]
- (Thread)
- ./chip-tool networkcommissioning read feature-map 1 0
+ - label:
+ "Read AcceptedCommandList If DUT supports Wi-Fi related features
+ (CNET.S.F00(WI) is true)"
+ PICS: CNET.S.F00
+ command: "readAttribute"
+ attribute: "AcceptedCommandList"
+ response:
+ constraints:
+ type: list
+ contains: [2]
- Verify "FeatureMap" on the TH(Chip-tool) Log:
+ - label:
+ "Read AcceptedCommandList If DUT supports Thread related
+ features(CNET.S.F01(TH) is true)"
+ PICS: CNET.S.F01
+ command: "readAttribute"
+ attribute: "AcceptedCommandList"
+ response:
+ constraints:
+ type: list
+ contains: [3]
- [1660315948.250922][3101:3106] CHIP:TOO: Endpoint: 0 Cluster: 0x0000_0031 Attribute 0x0000_FFFC DataVersion: 1122474754
- [1660315948.261520][3101:3106] CHIP:TOO: FeatureMap: 2
- disabled: true
+ - label:
+ "Read AcceptedCommandList If DUT supports Ethernet related
+ features(CNET.S.F02(TH) is true)"
+ PICS: CNET.S.F02
+ command: "readAttribute"
+ attribute: "AcceptedCommandList"
+ response:
+ value: []
- - label: "TH reads AttributeList from DUT"
- verification: |
- (WiFi)
- ./chip-tool networkcommissioning read attribute-list 1 0
+ - label:
+ "Read the GeneratedCommandList If DUT supports Wi-Fi/Thread related
+ features(CNET.S.F00(WI) or CNET.S.F01(TH) is true)"
+ PICS: CNET.S.F00 || CNET.S.F01
+ command: "readAttribute"
+ attribute: "GeneratedCommandList"
+ response:
+ constraints:
+ type: list
+ contains: [1, 5, 7]
- Verify "AttributeList" on the TH(Chip-tool) Log:
-
- [1651215479.539148][3293:3298] CHIP:TOO: Endpoint: 0 Cluster: 0x0000_0031 Attribute 0x0000_FFFB DataVersion: 2584224280
- [1651215479.539230][3293:3298] CHIP:TOO: AttributeList: 13 entries
- [1651215479.539262][3293:3298] CHIP:TOO: [1]: 0
- [1651215479.539288][3293:3298] CHIP:TOO: [2]: 1
- [1651215479.539323][3293:3298] CHIP:TOO: [3]: 2
- [1651215479.539348][3293:3298] CHIP:TOO: [4]: 3
- [1651215479.539373][3293:3298] CHIP:TOO: [5]: 4
- [1651215479.539397][3293:3298] CHIP:TOO: [6]: 5
- [1651215479.539420][3293:3298] CHIP:TOO: [7]: 6
- [1651215479.539444][3293:3298] CHIP:TOO: [8]: 7
- [1651215479.539468][3293:3298] CHIP:TOO: [9]: 65528
- [1651215479.539493][3293:3298] CHIP:TOO: [10]: 65529
- [1651215479.539517][3293:3298] CHIP:TOO: [11]: 65531
- [1651215479.539541][3293:3298] CHIP:TOO: [12]: 65532
- [1651215479.539564][3293:3298] CHIP:TOO: [13]: 65533
-
-
- (Ethernet)
-
- ./chip-tool networkcommissioning read attribute-list 1 0
-
- Verify "AttributeList" on the TH(Chip-tool) Log:
-
- [1660315522.163640][32321:32326] CHIP:TOO: Endpoint: 0 Cluster: 0x0000_0031 Attribute 0x0000_FFFB DataVersion: 4034679103
- [1660315522.163797][32321:32326] CHIP:TOO: AttributeList: 13 entries
- [1660315522.163880][32321:32326] CHIP:TOO: [1]: 0
- [1660315522.163945][32321:32326] CHIP:TOO: [2]: 1
- [1660315522.164009][32321:32326] CHIP:TOO: [3]: 2
- [1660315522.164106][32321:32326] CHIP:TOO: [4]: 3
- [1660315522.164174][32321:32326] CHIP:TOO: [5]: 4
- [1660315522.164260][32321:32326] CHIP:TOO: [6]: 5
- [1660315522.164328][32321:32326] CHIP:TOO: [7]: 6
- [1660315522.164393][32321:32326] CHIP:TOO: [8]: 7
- [1660315522.164482][32321:32326] CHIP:TOO: [9]: 65528
- [1660315522.164549][32321:32326] CHIP:TOO: [10]: 65529
- [1660315522.164636][32321:32326] CHIP:TOO: [11]: 65531
- [1660315522.164708][32321:32326] CHIP:TOO: [12]: 65532
- [1660315522.164778][32321:32326] CHIP:TOO: [13]: 65533
-
- (Thread)
-
- ./chip-tool networkcommissioning read attribute-list 1 0
-
- Verify "AttributeList" on the TH(Chip-tool) Log:
-
- [1660316011.016650][3112:3117] CHIP:TOO: AttributeList: 13 entries
- [1660316011.016678][3112:3117] CHIP:TOO: [1]: 0
- [1660316011.016700][3112:3117] CHIP:TOO: [2]: 1
- [1660316011.016721][3112:3117] CHIP:TOO: [3]: 2
- [1660316011.016741][3112:3117] CHIP:TOO: [4]: 3
- [1660316011.016762][3112:3117] CHIP:TOO: [5]: 4
- [1660316011.016782][3112:3117] CHIP:TOO: [6]: 5
- [1660316011.016803][3112:3117] CHIP:TOO: [7]: 6
- [1660316011.016823][3112:3117] CHIP:TOO: [8]: 7
- [1660316011.016844][3112:3117] CHIP:TOO: [9]: 65528
- [1660316011.016865][3112:3117] CHIP:TOO: [10]: 65529
- [1660316011.016887][3112:3117] CHIP:TOO: [11]: 65531
- [1660316011.016908][3112:3117] CHIP:TOO: [12]: 65532
- [1660316011.016929][3112:3117] CHIP:TOO: [13]: 65533
- [1660316011.017068][3112:3117] CHIP:EM: Sending Standalone Ack for MessageCounter:239150268 on exchange 45209i
- disabled: true
-
- - label: "TH reads EventList from the DUT"
- verification: |
- out of scope for V1.0
- disabled: true
-
- - label: "TH reads AcceptedCommandList from DUT"
- verification: |
- (WiFi)
- ./chip-tool networkcommissioning read accepted-command-list 1 0
-
- Verify "AcceptedCommandList" on the TH(Chip-tool) Log:
-
- [1653909914.972854][3424:3429] CHIP:TOO: Endpoint: 0 Cluster: 0x0000_0031 Attribute 0x0000_FFF9 DataVersion: 880539056
- [1653909914.973027][3424:3429] CHIP:TOO: AcceptedCommandList: 5 entries
- [1653909914.973102][3424:3429] CHIP:TOO: [1]: 0
- [1653909914.973166][3424:3429] CHIP:TOO: [2]: 2
- [1653909914.973228][3424:3429] CHIP:TOO: [3]: 4
- [1653909914.973289][3424:3429] CHIP:TOO: [4]: 6
- [1653909914.973350][3424:3429] CHIP:TOO: [5]: 8
- [1653909914.973574][3424:3429] CHIP:EM: Sending Standalone Ack for MessageCounter:4589161 on exchange 55554i
-
-
- (Ethernet)
- ./chip-tool networkcommissioning read accepted-command-list 1 0
-
- Verify "AcceptedCommandList" on the TH(Chip-tool) Log:
-
- [1660315536.068512][32327:32332] CHIP:TOO: Endpoint: 0 Cluster: 0x0000_0031 Attribute 0x0000_FFF9 DataVersion: 4034679103
- [1660315536.068654][32327:32332] CHIP:TOO: AcceptedCommandList: 0 entries
-
- (Thread)
- ./chip-tool networkcommissioning read accepted-command-list 1 0
-
- Verify "AcceptedCommandList" on the TH(Chip-tool) Log:
-
- [1660316038.564553][3121:3126] CHIP:TOO: Endpoint: 0 Cluster: 0x0000_0031 Attribute 0x0000_FFF9 DataVersion: 1122474754
- [1660316038.564671][3121:3126] CHIP:TOO: AcceptedCommandList: 5 entries
- [1660316038.564702][3121:3126] CHIP:TOO: [1]: 0
- [1660316038.564725][3121:3126] CHIP:TOO: [2]: 3
- [1660316038.564747][3121:3126] CHIP:TOO: [3]: 4
- [1660316038.564769][3121:3126] CHIP:TOO: [4]: 6
- [1660316038.564853][3121:3126] CHIP:TOO: [5]: 8
- [1660316038.564991][3121:3126] CHIP:EM: Sending Standalone Ack for MessageCounter:232731891 on exchange 30329i
- disabled: true
-
- - label: "TH reads GeneratedCommandList from DUT"
- verification: |
- ( WiFi)
- ./chip-tool networkcommissioning read generated-command-list 1 0
-
-
- Verify "GeneratedCommandList" on the TH(Chip-tool) Log:
-
- [1650370123.417759][42418:42423] CHIP:TOO: Endpoint: 0 Cluster: 0x0000_0031 Attribute 0x0000_FFF8 DataVersion: 3182776035
- [1650370123.417866][42418:42423] CHIP:TOO: GeneratedCommandList: 3 entries
- [1650370123.417938][42418:42423] CHIP:TOO: [1]: 1
- [1650370123.417977][42418:42423] CHIP:TOO: [2]: 5
- [1650370123.418013][42418:42423] CHIP:TOO: [3]: 7
- [1650370123.418143][42418:42423] CHIP:EM: Sending Standalone Ack for MessageCounter:759910 on exchange 25409i
-
-
-
- (Ethernet)
- ./chip-tool networkcommissioning read generated-command-list 1 0
-
- Verify "GeneratedCommandList" on the TH(Chip-tool) Log:
-
- [1660315548.937195][32333:32338] CHIP:TOO: Endpoint: 0 Cluster: 0x0000_0031 Attribute 0x0000_FFF8 DataVersion: 4034679103
- [1660315548.937327][32333:32338] CHIP:TOO: GeneratedCommandList: 0 entries
-
-
- ( Thread )
- ./chip-tool networkcommissioning read generated-command-list 51 0
-
-
- Verify "GeneratedCommandList" on the TH(Chip-tool) Log:
-
- [1650370342.693373][7450:7455] CHIP:TOO: Endpoint: 0 Cluster: 0x0000_0031 Attribute 0x0000_FFF8 DataVersion: 1032683896
- [1650370342.693536][7450:7455] CHIP:TOO: GeneratedCommandList: 2 entries
- 1650370123.417938][42418:42423] CHIP:TOO: [1]: 1
- [1650370123.417977][42418:42423] CHIP:TOO: [2]: 5
- [1650370123.418013][42418:42423] CHIP:TOO: [3]: 7
- [1650370342.693995][7450:7455] CHIP:EM: Sending Standalone Ack for MessageCounter:2345375 on exchange 25146i
- disabled: true
-
- - label: "NOTE"
- verification: |
- Repeat the test case by Commission DUT to TH on the Thread and
- Ethernet setups
- disabled: true
+ - label:
+ "Read the GeneratedCommandList If DUT supports Ethernet related
+ features(CNET.S.F02(ET) must be true)"
+ PICS: CNET.S.F02
+ command: "readAttribute"
+ attribute: "GeneratedCommandList"
+ response:
+ value: []
+ #Commenting out the step EventList attribute which is out of scope for matter V1.0
+ #- label:
+ # "Read EventList attribute from the DUT and Verify that the DUT
+ # response provides a list of supported events."
+ # verification: |
+ # Not implemented in chip-tool
+ # cluster: "LogCommands"
+ # command: "UserPrompt"
+ # PICS: PICS_USER_PROMPT
+ # arguments:
+ # values:
+ # - name: "message"
+ # value: "Please enter 'y' for success"
+ # - name: "expectedValue"
+ # value: "y"
diff --git a/src/app/tests/suites/certification/Test_TC_DGTHREAD_1_1.yaml b/src/app/tests/suites/certification/Test_TC_DGTHREAD_1_1.yaml
index 8f86d07..e6d2e2a 100644
--- a/src/app/tests/suites/certification/Test_TC_DGTHREAD_1_1.yaml
+++ b/src/app/tests/suites/certification/Test_TC_DGTHREAD_1_1.yaml
@@ -536,7 +536,7 @@
contains: [55]
- label: "Read the optional attribute (ActiveTimestamp) in AttributeList"
- PICS: DGTHREAD.S.A0039
+ PICS: DGTHREAD.S.A0038
command: "readAttribute"
attribute: "AttributeList"
response:
@@ -545,7 +545,7 @@
contains: [56]
- label: "Read the optional attribute (PendingTimestamp) in AttributeList"
- PICS: DGTHREAD.S.A003A
+ PICS: DGTHREAD.S.A0039
command: "readAttribute"
attribute: "AttributeList"
response:
@@ -554,7 +554,7 @@
contains: [57]
- label: "Read the optional attribute (Delay) in AttributeList"
- PICS: DGTHREAD.S.A003B
+ PICS: DGTHREAD.S.A003a
command: "readAttribute"
attribute: "AttributeList"
response:
diff --git a/src/app/tests/suites/certification/Test_TC_DGTHREAD_2_1.yaml b/src/app/tests/suites/certification/Test_TC_DGTHREAD_2_1.yaml
index a204f2a..2696772 100644
--- a/src/app/tests/suites/certification/Test_TC_DGTHREAD_2_1.yaml
+++ b/src/app/tests/suites/certification/Test_TC_DGTHREAD_2_1.yaml
@@ -414,7 +414,7 @@
type: int64u
- label: "TH reads Delay attribute value from DUT"
- PICS: DGTHREAD.S.A003A
+ PICS: DGTHREAD.S.A003a
command: "readAttribute"
attribute: "Delay"
response:
@@ -441,7 +441,7 @@
[1649825860.867921][3472:3477] CHIP:TOO: }
cluster: "LogCommands"
command: "UserPrompt"
- PICS: PICS_USER_PROMPT && DGTHREAD.S.A003B
+ PICS: PICS_USER_PROMPT && DGTHREAD.S.A003b
arguments:
values:
- name: "message"
diff --git a/src/app/tests/suites/certification/Test_TC_DRLK_2_6.yaml b/src/app/tests/suites/certification/Test_TC_DRLK_2_6.yaml
index bffd1db..1761022 100644
--- a/src/app/tests/suites/certification/Test_TC_DRLK_2_6.yaml
+++ b/src/app/tests/suites/certification/Test_TC_DRLK_2_6.yaml
@@ -11,196 +11,146 @@
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
-# Auto-generated scripts for harness use only, please review before automation. The endpoints and cluster names are currently set to default
name:
- 116.2.6. [TC-DRLK-2.6] Verification for the following Commands - Set Holiday
- Schedule, Get Holiday Schedule, Get Holiday Schedule Response , Clear
- Holiday Schedule [DUT-Server]
+ 111.2.7. [TC-DRLK-2.6] Verification for the following Commands - Set Year
+ Schedule, Get Year Schedule, Get Year Day Schedule Response and Clear Year
+ Day Schedule[DUT-Server]
PICS:
- DRLK.S
config:
nodeId: 0x12344321
- cluster: "Basic"
- endpoint: 0
+ cluster: "Door Lock"
+ endpoint: 1
tests:
- - label: "Pre-Conditions"
- verification: |
- DUT as server
- disabled: true
+ - label: "Wait for commissionee"
+ cluster: "DelayCommands"
+ command: "WaitForCommissionee"
+ arguments:
+ values:
+ - name: "nodeId"
+ value: nodeId
- label:
"TH reads NumberOfHoliday SchedulesSupported and saves for future use."
PICS: DRLK.S.F0b && DRLK.S.A0016
- verification: |
- ./chip-tool doorlock read number-of-holiday-schedules-supported 1 1
- Verify " NumberOfHoliDay SchedulesSuppored" on the TH(Chip-tool) Log:
+ command: "readAttribute"
+ attribute: "NumberOfHolidaySchedulesSupported"
+ response:
+ saveAs: NumberOfHolidaySchedulesSupported
+ constraints:
+ minValue: 0
+ maxValue: 255
- [1654691068.446440][4655:4660] CHIP:DMG:
- [1654691068.446465][4655:4660] CHIP:DMG: SuppressResponse = true,
- [1654691068.446492][4655:4660] CHIP:DMG: InteractionModelRevision = 1
- [1654691068.446515][4655:4660] CHIP:DMG: }
- [1654691068.446648][4655:4660] CHIP:TOO: Endpoint: 1 Cluster: 0x0000_0101 Attribute 0x0000_0016 DataVersion: 1413324060
- [1654691068.446726][4655:4660] CHIP:TOO: NumberOfHolidaySchedulesSupported: 10
- disabled: true
-
- - label:
- "TH sends Set Holiday Schedule Command to DUT with the following
- values: HolidayIndex as 1 LocalStartTime as 20 Seconds LocalEndTime as
- 30 Seconds OperatingMode as 0"
+ - label: "Create Holiday schedule with 1 index"
PICS: DRLK.S.F0b && DRLK.S.C11.Rsp
- verification: |
- ./chip-tool doorlock set-holiday-schedule 1 20 30 0 1 1
- Verify " DUT send SUCCESS response." on the TH(Chip-tool) Log:
+ command: "SetHolidaySchedule"
+ arguments:
+ values:
+ - name: "holidayIndex"
+ value: 1
+ - name: "localStartTime"
+ value: 20
+ - name: "localEndTime"
+ value: 30
+ - name: "operatingMode"
+ value: 0
- [1654691200.905091][4669:4674] CHIP:DMG: StatusIB =
- [1654691200.905122][4669:4674] CHIP:DMG: {
- [1654691200.905162][4669:4674] CHIP:DMG: status = 0x00 (SUCCESS),
- [1654691200.905198][4669:4674] CHIP:DMG: },
- [1654691200.905236][4669:4674] CHIP:DMG:
- [1654691200.905266][4669:4674] CHIP:DMG: },
- [1654691200.905301][4669:4674] CHIP:DMG:
- [1654691200.905326][4669:4674] CHIP:DMG: },
- [1654691200.905356][4669:4674] CHIP:DMG:
- [1654691200.905380][4669:4674] CHIP:DMG: ],
- [1654691200.905410][4669:4674] CHIP:DMG:
- [1654691200.905434][4669:4674] CHIP:DMG: InteractionModelRevision = 1
- [1654691200.905463][4669:4674] CHIP:DMG: },
- disabled: true
-
- - label:
- "TH sends Get Holiday Schedule Command to DUT with HolidayIndex as 1"
+ - label: "Get Holiday Schedule with HolidayIndex as 1"
PICS: DRLK.S.F0b && DRLK.S.C12.Rsp && DRLK.S.C12.Tx
- verification: |
- ./chip-tool doorlock get-holiday-schedule 1 1 1
- Verify " DUT responds with Get Holiday Schedule Response" on the TH(Chip-tool) Log:
+ command: "GetHolidaySchedule"
+ arguments:
+ values:
+ - name: "holidayIndex"
+ value: 1
+ response:
+ values:
+ - name: "holidayIndex"
+ value: 1
+ - name: "status"
+ value: 0x0
+ - name: "localStartTime"
+ value: 20
+ - name: "localEndTime"
+ value: 30
+ constraints:
+ minValue: 21
+ - name: "operatingMode"
+ value: 0
- [1654691299.545647][4678:4683] CHIP:DMG: Received Command Response Data, Endpoint=1 Cluster=0x0000_0101 Command=0x0000_0012
- [1654691299.545701][4678:4683] CHIP:TOO: Endpoint: 1 Cluster: 0x0000_0101 Command 0x0000_0012
- [1654691299.545769][4678:4683] CHIP:TOO: GetHolidayScheduleResponse: {
- [1654691299.545807][4678:4683] CHIP:TOO: holidayIndex: 1
- [1654691299.545830][4678:4683] CHIP:TOO: status: 0
- [1654691299.545853][4678:4683] CHIP:TOO: localStartTime: 20
- [1654691299.545876][4678:4683] CHIP:TOO: localEndTime: 30
- [1654691299.545898][4678:4683] CHIP:TOO: operatingMode: 0
- [1654691299.545922][4678:4683] CHIP:TOO: }
- disabled: true
-
- - label:
- "TH sends Set Holiday Schedule Command to DUT with the following
- values: HolidayIndex as 1 LocalStartTime as 20 LocalEndTime as 30
- OperatingMode as 5(Invalid value)"
+ - label: "Create Holiday schedule with invalid operating mode"
PICS: DRLK.S.C11.Rsp
- verification: |
- ./chip-tool doorlock set-holiday-schedule 1 20 30 5 1 1
- Verify " DUT sends INVALID_COMMAND response" on the TH(Chip-tool) Log:
+ command: "SetHolidaySchedule"
+ arguments:
+ values:
+ - name: "holidayIndex"
+ value: 1
+ - name: "localStartTime"
+ value: 20
+ - name: "localEndTime"
+ value: 30
+ - name: "operatingMode"
+ value: 5
+ response:
+ error: INVALID_COMMAND
- [1655373066.616542][2571:2576] CHIP:DMG: {
- [1655373066.616583][2571:2576] CHIP:DMG: suppressResponse = false,
- [1655373066.616624][2571:2576] CHIP:DMG: InvokeResponseIBs =
- [1655373066.616692][2571:2576] CHIP:DMG: [
- [1655373066.616732][2571:2576] CHIP:DMG: InvokeResponseIB =
- [1655373066.616799][2571:2576] CHIP:DMG: {
- [1655373066.616854][2571:2576] CHIP:DMG: CommandStatusIB =
- [1655373066.616913][2571:2576] CHIP:DMG: {
- [1655373066.616981][2571:2576] CHIP:DMG: CommandPathIB =
- [1655373066.617046][2571:2576] CHIP:DMG: {
- [1655373066.617118][2571:2576] CHIP:DMG: EndpointId = 0x1,
- [1655373066.617200][2571:2576] CHIP:DMG: ClusterId = 0x101,
- [1655373066.617264][2571:2576] CHIP:DMG: CommandId = 0x11,
- [1655373066.617338][2571:2576] CHIP:DMG: },
- [1655373066.617412][2571:2576] CHIP:DMG:
- [1655373066.617463][2571:2576] CHIP:DMG: StatusIB =
- [1655373066.617538][2571:2576] CHIP:DMG: {
- [1655373066.617612][2571:2576] CHIP:DMG: status = 0x85 (INVALID_COMMAND),
- [1655373066.617672][2571:2576] CHIP:DMG: },
- [1655373066.617745][2571:2576] CHIP:DMG:
- [1655373066.617806][2571:2576] CHIP:DMG: },
- [1655373066.617863][2571:2576] CHIP:DMG:
- [1655373066.617921][2571:2576] CHIP:DMG: },
- [1655373066.617970][2571:2576] CHIP:DMG:
- [1655373066.618024][2571:2576] CHIP:DMG: ],
- [1655373066.618073][2571:2576] CHIP:DMG:
- [1655373066.618127][2571:2576] CHIP:DMG: InteractionModelRevision = 1
- [1655373066.618166][2571:2576] CHIP:DMG: },
- disabled: true
-
- - label:
- "TH sends Get Holiday Schedule Command to DUT with Invalid
- HolidayIndex as 15."
+ - label: "Get Holiday Schedule with Invalid HolidayIndex 15."
PICS: DRLK.S.F0b && DRLK.S.C12.Rsp && DRLK.S.C12.Tx
- verification: |
- ./chip-tool doorlock get-holiday-schedule 15 1 1
- Verify " DUT sends INVALID_COMMAND response" on the TH(Chip-tool) Log:
+ command: "GetHolidaySchedule"
+ arguments:
+ values:
+ - name: "holidayIndex"
+ value: 15
+ response:
+ values:
+ - name: "holidayIndex"
+ value: 15
+ - name: "status"
+ value: 133
- [1654691634.513667][4728:4733] CHIP:DMG: },
- [1654691634.513979][4728:4733] CHIP:DMG: Received Command Response Data, Endpoint=1 Cluster=0x0000_0101 Command=0x0000_0012
- [1654691634.514168][4728:4733] CHIP:TOO: Endpoint: 1 Cluster: 0x0000_0101 Command 0x0000_0012
- [1658471936.478043][2537:2542] CHIP:DMG: },
- [1658471936.478124][2537:2542] CHIP:DMG: Received Command Response Data, Endpoint=1 Cluster=0x0000_0101 Command=0x0000_0012
- [1658471936.478183][2537:2542] CHIP:TOO: Endpoint: 1 Cluster: 0x0000_0101 Command 0x0000_0012
- [1658471936.478270][2537:2542] CHIP:TOO: GetHolidayScheduleResponse: {
- [1658471936.478316][2537:2542] CHIP:TOO: holidayIndex: 15
- [1658471936.478363][2537:2542] CHIP:TOO: status: 133
- [1658471936.478395][2537:2542] CHIP:TOO: }
- [1654691634.514670][4728:4733] CHIP:TOO: }
- disabled: true
-
- - label:
- "TH sends Get Holiday Schedule Command to DUT with the HolidayIndex as
- 10 (value is in the the range of step 1 but Holiday Schedule entry not
- available)"
+ - label: "Get Holiday Schedule with the Non-scheduled HolidayIndex"
PICS: DRLK.S.F0b && DRLK.S.C12.Rsp && DRLK.S.C12.Tx
- verification: |
- ./chip-tool doorlock get-holiday-schedule 10 1 1
- Verify " DUT sends a NOT_FOUND status" on the TH(Chip-tool) Log:
+ command: "GetHolidaySchedule"
+ arguments:
+ values:
+ - name: "holidayIndex"
+ value: 10
+ response:
+ values:
+ - name: "holidayIndex"
+ value: 10
+ - name: "status"
+ value: 139
- [1654691928.900652][4772:4777] CHIP:DMG: },
- [1654691928.900762][4772:4777] CHIP:DMG: Received Command Response Data, Endpoint=1 Cluster=0x0000_0101 Command=0x0000_0012
- [1654691928.900844][4772:4777] CHIP:TOO: Endpoint: 1 Cluster: 0x0000_0101 Command 0x0000_0012
- [1654691928.900944][4772:4777] CHIP:TOO: GetHolidayScheduleResponse: {
- [1654691928.901003][4772:4777] CHIP:TOO: holidayIndex: 10
- [1654691928.901047][4772:4777] CHIP:TOO: status: 139
- [1654691928.901093][4772:4777] CHIP:TOO: }
- disabled: true
-
- - label:
- "TH send Clear Holiday Schedule Command to DUT with HolidayIndex as 1"
+ - label: "Clear Holiday schedule with 1 index"
PICS: DRLK.S.F0b && DRLK.S.C13.Rsp
- verification: |
- ./chip-tool doorlock clear-holiday-schedule 1 1 1
- Verify " DUT sends SUCCESS response" on the TH(Chip-tool) Log:
+ command: "ClearHolidaySchedule"
+ arguments:
+ values:
+ - name: "holidayIndex"
+ value: 1
- [1654692125.827938][4791:4796] CHIP:DMG: StatusIB =
- [1654692125.828009][4791:4796] CHIP:DMG: {
- [1654692125.828080][4791:4796] CHIP:DMG: status = 0x00 (SUCCESS),
- [1654692125.828156][4791:4796] CHIP:DMG: },
- [1654692125.828233][4791:4796] CHIP:DMG:
- [1654692125.828296][4791:4796] CHIP:DMG: },
- [1654692125.828367][4791:4796] CHIP:DMG:
- [1654692125.828424][4791:4796] CHIP:DMG: },
- [1654692125.828488][4791:4796] CHIP:DMG:
- [1654692125.828538][4791:4796] CHIP:DMG: ],
- [1654692125.828601][4791:4796] CHIP:DMG:
- [1654692125.828652][4791:4796] CHIP:DMG: InteractionModelRevision = 1
- [1654692125.828701][4791:4796] CHIP:DMG: },
- disabled: true
-
- - label:
- "TH sends Get Holiday Schedule Command to DUT with HolidayIndex as 1."
+ - label: "Make sure that holiday schedule was deleted"
PICS: DRLK.S.F0b && DRLK.S.C12.Rsp && DRLK.S.C12.Tx
- verification: |
- ./chip-tool doorlock get-holiday-schedule 1 1 1
- Verify " DUT sends a NOT_FOUND status" on the TH(Chip-tool) Log:
+ command: "GetHolidaySchedule"
+ arguments:
+ values:
+ - name: "holidayIndex"
+ value: 1
+ response:
+ values:
+ - name: "holidayIndex"
+ value: 1
+ - name: "status"
+ value: 139
- [1658472025.923305][2560:2565] CHIP:DMG: },
- [1658472025.923366][2560:2565] CHIP:DMG: Received Command Response Data, Endpoint=1 Cluster=0x0000_0101 Command=0x0000_0012
- [1658472025.923417][2560:2565] CHIP:TOO: Endpoint: 1 Cluster: 0x0000_0101 Command 0x0000_0012
- [1658472025.923491][2560:2565] CHIP:TOO: GetHolidayScheduleResponse: {
- [1658472025.923528][2560:2565] CHIP:TOO: holidayIndex: 1
- [1658472025.923565][2560:2565] CHIP:TOO: status: 139
- [1658472025.923590][2560:2565] CHIP:TOO: }
- disabled: true
+ - label: "Cleanup the created user"
+ command: "ClearUser"
+ timedInteractionTimeoutMs: 10000
+ arguments:
+ values:
+ - name: "userIndex"
+ value: 1
diff --git a/src/app/tests/suites/certification/Test_TC_WAKEONLAN_4_1.yaml b/src/app/tests/suites/certification/Test_TC_WAKEONLAN_4_1.yaml
index 3ad64ba..ade30fa 100644
--- a/src/app/tests/suites/certification/Test_TC_WAKEONLAN_4_1.yaml
+++ b/src/app/tests/suites/certification/Test_TC_WAKEONLAN_4_1.yaml
@@ -20,62 +20,32 @@
config:
nodeId: 0x12344321
- cluster: "Basic"
- endpoint: 0
+ cluster: "Wake on LAN"
+ endpoint: 1
tests:
+ - label: "Wait for the commissioned device to be retrieved"
+ cluster: "DelayCommands"
+ command: "WaitForCommissionee"
+ arguments:
+ values:
+ - name: "nodeId"
+ value: nodeId
+
- label: "TH reads the MACAddress attribute from the DUT"
PICS: WAKEONLAN.S.A0000
- verification: |
- The TH commands for this test step can be invoked using chip-tool (when DUT is a commissionee) or tv-casting-app (when DUT is a commissioner):
- ./chip-tool wakeonlan read macaddress 1 1
- ./chip-tv-casting-app wakeonlan read macaddress 1 1
-
- On TH Verify that the response contains a 48-bit MAC Address. Record the MAC address.
- [1654248817.394846][3637:3643] CHIP:TOO: Endpoint: 1 Cluster: 0x0000_0503 Attribute 0x0000_0000 DataVersion: 3900236652
- [1654248817.394895][3637:3643] CHIP:TOO: MACAddress: e4:5f:01:69:61:b1
- [1654248817.394982][3637:3643] CHIP:EM: Sending Standalone Ack for MessageCounter:15292555 on exchange 12123i
- disabled: true
+ command: "readAttribute"
+ attribute: "MACAddress"
+ response:
+ constraints:
+ minLength: 12
- label: "TH sends a Sleep command to DUT"
PICS: LOWPOWER.S.C00.Rsp
- verification: |
- The TH commands for this test step can be invoked using chip-tool (when DUT is a commissionee) or tv-casting-app (when DUT is a commissioner):
- ./chip-tool lowpower sleep 1 1
- ./chip-tv-casting-app lowpower sleep 1 1
-
- On TH verify the success response received from DUT
- [1646101689.826629][3009:3014] CHIP:DMG: InvokeResponseMessage =
- [1646101689.826665][3009:3014] CHIP:DMG: {
- [1646101689.826697][3009:3014] CHIP:DMG: suppressResponse = false,
- [1646101689.826727][3009:3014] CHIP:DMG: InvokeResponseIBs =
- [1646101689.826769][3009:3014] CHIP:DMG: [
- [1646101689.826804][3009:3014] CHIP:DMG: InvokeResponseIB =
- [1646101689.826848][3009:3014] CHIP:DMG: {
- [1646101689.826882][3009:3014] CHIP:DMG: CommandStatusIB =
- [1646101689.826922][3009:3014] CHIP:DMG: {
- [1646101689.826954][3009:3014] CHIP:DMG: CommandPathIB =
- [1646101689.826989][3009:3014] CHIP:DMG: {
- [1646101689.827031][3009:3014] CHIP:DMG: EndpointId = 0x1,
- [1646101689.827082][3009:3014] CHIP:DMG: ClusterId = 0x508,
- [1646101689.827127][3009:3014] CHIP:DMG: CommandId = 0x0,
- [1646101689.827172][3009:3014] CHIP:DMG: },
- [1646101689.827223][3009:3014] CHIP:DMG:
- [1646101689.827260][3009:3014] CHIP:DMG: StatusIB =
- [1646101689.827311][3009:3014] CHIP:DMG: {
- [1646101689.827360][3009:3014] CHIP:DMG: status = 0x0,
- [1646101689.827411][3009:3014] CHIP:DMG: },
- [1646101689.827457][3009:3014] CHIP:DMG:
- [1646101689.827498][3009:3014] CHIP:DMG: },
- [1646101689.827540][3009:3014] CHIP:DMG:
- [1646101689.827607][3009:3014] CHIP:DMG: },
- [1646101689.827658][3009:3014] CHIP:DMG:
- [1646101689.827689][3009:3014] CHIP:DMG: ],
- [1646101689.827730][3009:3014] CHIP:DMG:
- [1646101689.827761][3009:3014] CHIP:DMG: InteractionModelRevision = 1
- [1646101689.827792][3009:3014] CHIP:DMG: },
- [1646101689.827875][3009:3014] CHIP:DMG: Received Command Response Status for Endpoint=1 Cluster=0x0000_0508 Command=0x0000_0000 Status=0x0
- disabled: true
+ cluster: "Low Power"
+ command: "Sleep"
+ response:
+ error: 0
- label:
"TH sends a Wake-On LAN magic packet containing the MAC address from
@@ -90,4 +60,12 @@
[1654248854.491994][3652:3657] CHIP:TOO: AcceptedCommandList: 1 entries
[1654248854.492040][3652:3657] CHIP:TOO: [1]: 0
[1654248854.492157][3652:3657] CHIP:EM: Sending Standalone Ack for MessageCounter:15063522 on exchange 51389i
- disabled: true
+ cluster: "LogCommands"
+ command: "UserPrompt"
+ PICS: PICS_USER_PROMPT
+ arguments:
+ values:
+ - name: "message"
+ value: "Please enter 'y' after success"
+ - name: "expectedValue"
+ value: "y"
diff --git a/src/app/tests/suites/certification/ci-pics-values b/src/app/tests/suites/certification/ci-pics-values
index f7ea6ee..5c616c5 100644
--- a/src/app/tests/suites/certification/ci-pics-values
+++ b/src/app/tests/suites/certification/ci-pics-values
@@ -1033,8 +1033,8 @@
DGTHREAD.S.A0037=1
DGTHREAD.S.A0038=1
DGTHREAD.S.A0039=1
-DGTHREAD.S.A003A=1
-DGTHREAD.S.A003B=1
+DGTHREAD.S.A003a=1
+DGTHREAD.S.A003b=1
DGTHREAD.S.A003c=1
DGTHREAD.S.A003d=1
DGTHREAD.S.A003e=1
@@ -1358,6 +1358,11 @@
CNET.S.A0006=1
CNET.S.A0007=1
+#Features
+CNET.S.F00=0
+CNET.S.F01=0
+CNET.S.F02=1
+
#Server Commands
CNET.S.C00.Rsp=1
CNET.S.C01.Tx=1
@@ -1573,26 +1578,26 @@
#Bridged Device Basic Information
#server
-BRBINFO.S.A0000=1
-BRBINFO.S.A0001=1
-BRBINFO.S.A0002=1
-BRBINFO.S.A0003=1
-BRBINFO.S.A0004=1
+BRBINFO.S.A0000=0
+BRBINFO.S.A0001=0
+BRBINFO.S.A0002=0
+BRBINFO.S.A0003=0
+BRBINFO.S.A0004=0
BRBINFO.S.A0005=1
-BRBINFO.S.A0006=1
-BRBINFO.S.A0007=1
-BRBINFO.S.A0008=1
-BRBINFO.S.A0009=1
-BRBINFO.S.A000a=1
-BRBINFO.S.A000b=1
-BRBINFO.S.A000c=1
-BRBINFO.S.A000d=1
-BRBINFO.S.A000e=1
-BRBINFO.S.A000f=1
-BRBINFO.S.A0010=1
+BRBINFO.S.A0006=0
+BRBINFO.S.A0007=0
+BRBINFO.S.A0008=0
+BRBINFO.S.A0009=0
+BRBINFO.S.A000a=0
+BRBINFO.S.A000b=0
+BRBINFO.S.A000c=0
+BRBINFO.S.A000d=0
+BRBINFO.S.A000e=0
+BRBINFO.S.A000f=0
+BRBINFO.S.A0010=0
BRBINFO.S.A0011=1
-BRBINFO.S.A0012=1
-BRBINFO.S.A0013=1
+BRBINFO.S.A0012=0
+BRBINFO.S.A0013=0
#Events
BRBINFO.S.E00=1
diff --git a/src/app/tests/suites/ciTests.json b/src/app/tests/suites/ciTests.json
index 58a3bd5..8e02636 100644
--- a/src/app/tests/suites/ciTests.json
+++ b/src/app/tests/suites/ciTests.json
@@ -3,10 +3,15 @@
"TestAccessControlCluster",
"Test_TC_ACL_1_1",
"Test_TC_ACL_2_1",
- "Test_TC_ACL_2_2"
+ "Test_TC_ACL_2_2",
+ "Test_TC_ACL_2_3"
],
"BooleanState": ["Test_TC_BOOL_1_1", "Test_TC_BOOL_2_1"],
"Binding": ["Test_TC_BIND_1_1"],
+ "BridgedDeviceBasicInformation": [
+ "Test_TC_BRBINFO_1_1",
+ "Test_TC_BRBINFO_2_1"
+ ],
"Actions": ["Test_TC_ACT_1_1"],
"ColorControl": [
"Test_TC_CC_1_1",
@@ -90,6 +95,7 @@
"Test_TC_APBSC_1_10",
"Test_TC_CONTENTLAUNCHER_1_11",
"Test_TC_ALOGIN_1_12",
+ "Test_TC_ALOGIN_12_1",
"Test_TC_LOWPOWER_2_1",
"Test_TC_KEYPADINPUT_3_2",
"Test_TC_KEYPADINPUT_3_3",
@@ -102,6 +108,7 @@
"Test_TC_MEDIAINPUT_3_11",
"Test_TC_MEDIAINPUT_3_12",
"Test_TC_MEDIAINPUT_3_13",
+ "Test_TC_WAKEONLAN_4_1",
"Test_TC_CHANNEL_5_1",
"Test_TC_CHANNEL_5_2",
"Test_TC_CHANNEL_5_3",
@@ -240,6 +247,7 @@
"Test_TC_DRLK_2_3",
"Test_TC_DRLK_2_4",
"Test_TC_DRLK_2_5",
+ "Test_TC_DRLK_2_6",
"Test_TC_DRLK_2_7",
"Test_TC_DRLK_2_9"
],
@@ -253,6 +261,7 @@
"collection": [
"AccessControl",
"BooleanState",
+ "BridgedDeviceBasicInformation",
"Actions",
"Binding",
"ColorControl",
diff --git a/src/app/tests/suites/manualTests.json b/src/app/tests/suites/manualTests.json
index fb755f1..1835bb8 100644
--- a/src/app/tests/suites/manualTests.json
+++ b/src/app/tests/suites/manualTests.json
@@ -137,7 +137,6 @@
"Test_TC_MEDIAINPUT_3_15",
"Test_TC_MEDIAINPUT_3_16",
"Test_TC_MEDIAINPUT_3_17",
- "Test_TC_WAKEONLAN_4_1",
"Test_TC_CHANNEL_5_4",
"Test_TC_CHANNEL_5_5",
"Test_TC_CHANNEL_5_6",
@@ -152,7 +151,6 @@
"Test_TC_CONTENTLAUNCHER_10_7",
"Test_TC_MC_11_1",
"Test_TC_MC_11_2",
- "Test_TC_ALOGIN_12_1",
"Test_TC_ALOGIN_12_2"
],
"MultipleFabrics": [
@@ -277,7 +275,6 @@
],
"DoorLock": [
"Test_TC_DRLK_2_1",
- "Test_TC_DRLK_2_6",
"Test_TC_DRLK_2_8",
"Test_TC_DRLK_2_10",
"Test_TC_DRLK_3_1",
@@ -327,7 +324,6 @@
],
"PumpConfigurationControl": ["Test_TC_PCC_3_1"],
"AccessControl": [
- "Test_TC_ACL_2_3",
"Test_TC_ACL_2_4",
"Test_TC_ACL_2_5",
"Test_TC_ACL_2_6",
@@ -338,8 +334,6 @@
],
"UserLabel": ["Test_TC_ULABEL_3_1"],
"BridgedDeviceBasicInformation": [
- "Test_TC_BRBINFO_1_1",
- "Test_TC_BRBINFO_2_1",
"Test_TC_BRBINFO_2_2",
"Test_TC_BRBINFO_2_3"
],
diff --git a/zzz_generated/chip-tool/zap-generated/test/Commands.h b/zzz_generated/chip-tool/zap-generated/test/Commands.h
index 796a968..c3d4aa0 100644
--- a/zzz_generated/chip-tool/zap-generated/test/Commands.h
+++ b/zzz_generated/chip-tool/zap-generated/test/Commands.h
@@ -39,8 +39,11 @@
printf("Test_TC_ACL_1_1\n");
printf("Test_TC_ACL_2_1\n");
printf("Test_TC_ACL_2_2\n");
+ printf("Test_TC_ACL_2_3\n");
printf("Test_TC_BOOL_1_1\n");
printf("Test_TC_BOOL_2_1\n");
+ printf("Test_TC_BRBINFO_1_1\n");
+ printf("Test_TC_BRBINFO_2_1\n");
printf("Test_TC_ACT_1_1\n");
printf("Test_TC_BIND_1_1\n");
printf("Test_TC_CC_1_1\n");
@@ -108,6 +111,7 @@
printf("Test_TC_APBSC_1_10\n");
printf("Test_TC_CONTENTLAUNCHER_1_11\n");
printf("Test_TC_ALOGIN_1_12\n");
+ printf("Test_TC_ALOGIN_12_1\n");
printf("Test_TC_LOWPOWER_2_1\n");
printf("Test_TC_KEYPADINPUT_3_2\n");
printf("Test_TC_KEYPADINPUT_3_3\n");
@@ -120,6 +124,7 @@
printf("Test_TC_MEDIAINPUT_3_11\n");
printf("Test_TC_MEDIAINPUT_3_12\n");
printf("Test_TC_MEDIAINPUT_3_13\n");
+ printf("Test_TC_WAKEONLAN_4_1\n");
printf("Test_TC_CHANNEL_5_1\n");
printf("Test_TC_CHANNEL_5_2\n");
printf("Test_TC_CHANNEL_5_3\n");
@@ -244,6 +249,7 @@
printf("Test_TC_DRLK_2_3\n");
printf("Test_TC_DRLK_2_4\n");
printf("Test_TC_DRLK_2_5\n");
+ printf("Test_TC_DRLK_2_6\n");
printf("Test_TC_DRLK_2_7\n");
printf("Test_TC_DRLK_2_9\n");
printf("TestGroupMessaging\n");
@@ -390,7 +396,6 @@
printf("Test_TC_MEDIAINPUT_3_15\n");
printf("Test_TC_MEDIAINPUT_3_16\n");
printf("Test_TC_MEDIAINPUT_3_17\n");
- printf("Test_TC_WAKEONLAN_4_1\n");
printf("Test_TC_CHANNEL_5_4\n");
printf("Test_TC_CHANNEL_5_5\n");
printf("Test_TC_CHANNEL_5_6\n");
@@ -405,7 +410,6 @@
printf("Test_TC_CONTENTLAUNCHER_10_7\n");
printf("Test_TC_MC_11_1\n");
printf("Test_TC_MC_11_2\n");
- printf("Test_TC_ALOGIN_12_1\n");
printf("Test_TC_ALOGIN_12_2\n");
printf("Test_TC_CADMIN_1_1\n");
printf("Test_TC_CADMIN_1_2\n");
@@ -517,7 +521,6 @@
printf("Test_TC_CC_9_2\n");
printf("Test_TC_CC_9_3\n");
printf("Test_TC_DRLK_2_1\n");
- printf("Test_TC_DRLK_2_6\n");
printf("Test_TC_DRLK_2_8\n");
printf("Test_TC_DRLK_2_10\n");
printf("Test_TC_DRLK_3_1\n");
@@ -567,7 +570,6 @@
printf("Test_TC_S_2_3\n");
printf("Test_TC_S_3_1\n");
printf("Test_TC_PCC_3_1\n");
- printf("Test_TC_ACL_2_3\n");
printf("Test_TC_ACL_2_4\n");
printf("Test_TC_ACL_2_5\n");
printf("Test_TC_ACL_2_6\n");
@@ -576,8 +578,6 @@
printf("Test_TC_ACL_2_9\n");
printf("Test_TC_ACL_2_10\n");
printf("Test_TC_ULABEL_3_1\n");
- printf("Test_TC_BRBINFO_1_1\n");
- printf("Test_TC_BRBINFO_2_1\n");
printf("Test_TC_BRBINFO_2_2\n");
printf("Test_TC_BRBINFO_2_3\n");
printf("Test_TC_ACE_1_1\n");
@@ -2264,6 +2264,616 @@
}
};
+class Test_TC_ACL_2_3Suite : public TestCommand
+{
+public:
+ Test_TC_ACL_2_3Suite(CredentialIssuerCommands * credsIssuerConfig) : TestCommand("Test_TC_ACL_2_3", 20, credsIssuerConfig)
+ {
+ AddArgument("nodeId", 0, UINT64_MAX, &mNodeId);
+ AddArgument("cluster", &mCluster);
+ AddArgument("endpoint", 0, UINT16_MAX, &mEndpoint);
+ AddArgument("D_OK_EMPTY", &mDOkEmpty);
+ AddArgument("D_OK_SINGLE", &mDOkSingle);
+ AddArgument("D_OK_FULL", &mDOkFull);
+ AddArgument("D_BAD_LENGTH", &mDBadLength);
+ AddArgument("D_BAD_STRUCT", &mDBadStruct);
+ AddArgument("D_BAD_LIST", &mDBadList);
+ AddArgument("D_BAD_ELEM", &mDBadElem);
+ AddArgument("D_BAD_OVERFLOW", &mDBadOverflow);
+ AddArgument("D_BAD_UNDERFLOW", &mDBadUnderflow);
+ AddArgument("D_BAD_NONE", &mDBadNone);
+ AddArgument("timeout", 0, UINT16_MAX, &mTimeout);
+ }
+
+ ~Test_TC_ACL_2_3Suite() {}
+
+ chip::System::Clock::Timeout GetWaitDuration() const override
+ {
+ return chip::System::Clock::Seconds16(mTimeout.ValueOr(kTimeoutInSeconds));
+ }
+
+private:
+ chip::Optional<chip::NodeId> mNodeId;
+ chip::Optional<chip::CharSpan> mCluster;
+ chip::Optional<chip::EndpointId> mEndpoint;
+ chip::Optional<chip::ByteSpan> mDOkEmpty;
+ chip::Optional<chip::ByteSpan> mDOkSingle;
+ chip::Optional<chip::ByteSpan> mDOkFull;
+ chip::Optional<chip::ByteSpan> mDBadLength;
+ chip::Optional<chip::ByteSpan> mDBadStruct;
+ chip::Optional<chip::ByteSpan> mDBadList;
+ chip::Optional<chip::ByteSpan> mDBadElem;
+ chip::Optional<chip::ByteSpan> mDBadOverflow;
+ chip::Optional<chip::ByteSpan> mDBadUnderflow;
+ chip::Optional<chip::ByteSpan> mDBadNone;
+ chip::Optional<uint16_t> mTimeout;
+
+ uint8_t CurrentFabricIndex;
+
+ chip::EndpointId GetEndpoint(chip::EndpointId endpoint) { return mEndpoint.HasValue() ? mEndpoint.Value() : endpoint; }
+
+ //
+ // Tests methods
+ //
+
+ void OnResponse(const chip::app::StatusIB & status, chip::TLV::TLVReader * data) override
+ {
+ bool shouldContinue = false;
+
+ switch (mTestIndex - 1)
+ {
+ case 0:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ shouldContinue = true;
+ break;
+ case 1:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ uint8_t value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ CurrentFabricIndex = value;
+ }
+ break;
+ case 2:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::app::DataModel::DecodableList<chip::app::Clusters::AccessControl::Structs::ExtensionEntry::DecodableType>
+ value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ {
+ auto iter_0 = value.begin();
+ VerifyOrReturn(CheckNoMoreListItems<decltype(value)>("extension", iter_0, 0));
+ }
+ }
+ break;
+ case 3:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ break;
+ case 4:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::app::DataModel::DecodableList<chip::app::Clusters::AccessControl::Structs::ExtensionEntry::DecodableType>
+ value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ {
+ auto iter_0 = value.begin();
+ VerifyOrReturn(CheckNextListItemDecodes<decltype(value)>("extension", iter_0, 0));
+ VerifyOrReturn(CheckValueAsString(
+ "extension[0].data", iter_0.GetValue().data,
+ mDOkEmpty.HasValue() ? mDOkEmpty.Value() : chip::ByteSpan(chip::Uint8::from_const_char("\x17\x18"), 2)));
+ VerifyOrReturn(CheckValue("extension[0].fabricIndex", iter_0.GetValue().fabricIndex, CurrentFabricIndex));
+ VerifyOrReturn(CheckNoMoreListItems<decltype(value)>("extension", iter_0, 1));
+ }
+ }
+ break;
+ case 5:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ break;
+ case 6:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::app::DataModel::DecodableList<chip::app::Clusters::AccessControl::Structs::ExtensionEntry::DecodableType>
+ value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ {
+ auto iter_0 = value.begin();
+ VerifyOrReturn(CheckNextListItemDecodes<decltype(value)>("extension", iter_0, 0));
+ VerifyOrReturn(CheckValueAsString(
+ "extension[0].data", iter_0.GetValue().data,
+ mDOkSingle.HasValue()
+ ? mDOkSingle.Value()
+ : chip::ByteSpan(chip::Uint8::from_const_char(
+ "\x17\xD0\x00\x00\xF1\xFF\x01\x00\x3D\x48\x65\x6C\x6C\x6F\x20\x57\x6F\x72\x6C\x64"
+ "\x2E\x20\x54\x68\x69\x73\x20\x69\x73\x20\x61\x20\x73\x69\x6E\x67\x6C\x65\x20\x65"
+ "\x6C\x65\x6D\x65\x6E\x74\x20\x6C\x69\x76\x69\x6E\x67\x20\x61\x73\x20\x61\x20\x63"
+ "\x68\x61\x72\x73\x74\x72\x69\x6E\x67\x00\x18"),
+ 71)));
+ VerifyOrReturn(CheckValue("extension[0].fabricIndex", iter_0.GetValue().fabricIndex, CurrentFabricIndex));
+ VerifyOrReturn(CheckNoMoreListItems<decltype(value)>("extension", iter_0, 1));
+ }
+ }
+ break;
+ case 7:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ break;
+ case 8:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::app::DataModel::DecodableList<chip::app::Clusters::AccessControl::Structs::ExtensionEntry::DecodableType>
+ value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ {
+ auto iter_0 = value.begin();
+ VerifyOrReturn(CheckNextListItemDecodes<decltype(value)>("extension", iter_0, 0));
+ VerifyOrReturn(CheckValueAsString(
+ "extension[0].data", iter_0.GetValue().data,
+ mDOkFull.HasValue()
+ ? mDOkFull.Value()
+ : chip::ByteSpan(
+ chip::Uint8::from_const_char(
+ "\x17\xD0\x00\x00\xF1\xFF\x01\x00\x3D\x48\x65\x6C\x6C\x6F\x20\x57\x6F\x72\x6C\x64\x2E\x20\x54"
+ "\x68\x69\x73\x20\x69\x73\x20\x61\x20\x73\x69\x6E\x67\x6C\x65\x20\x65\x6C\x65\x6D\x65\x6E\x74"
+ "\x20\x6C\x69\x76\x69\x6E\x67\x20\x61\x73\x20\x61\x20\x63\x68\x61\x72\x73\x74\x72\x69\x6E\x67"
+ "\x00\xD0\x00\x00\xF1\xFF\x02\x00\x31\x48\x65\x6C\x6C\x6F\x20\x57\x6F\x72\x6C\x64\x2E\x20\x54"
+ "\x68\x69\x73\x20\x69\x73\x20\x61\x20\x73\x69\x6E\x67\x6C\x65\x20\x65\x6C\x65\x6D\x65\x6E\x74"
+ "\x20\x61\x67\x61\x69\x6E\x2E\x2E\x2E\x2E\x2E\x00\x18"),
+ 128)));
+ VerifyOrReturn(CheckValue("extension[0].fabricIndex", iter_0.GetValue().fabricIndex, CurrentFabricIndex));
+ VerifyOrReturn(CheckNoMoreListItems<decltype(value)>("extension", iter_0, 1));
+ }
+ }
+ break;
+ case 9:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), EMBER_ZCL_STATUS_CONSTRAINT_ERROR));
+ break;
+ case 10:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), EMBER_ZCL_STATUS_CONSTRAINT_ERROR));
+ break;
+ case 11:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), EMBER_ZCL_STATUS_CONSTRAINT_ERROR));
+ break;
+ case 12:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), EMBER_ZCL_STATUS_CONSTRAINT_ERROR));
+ break;
+ case 13:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), EMBER_ZCL_STATUS_CONSTRAINT_ERROR));
+ break;
+ case 14:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), EMBER_ZCL_STATUS_CONSTRAINT_ERROR));
+ break;
+ case 15:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), EMBER_ZCL_STATUS_CONSTRAINT_ERROR));
+ break;
+ case 16:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), EMBER_ZCL_STATUS_CONSTRAINT_ERROR));
+ break;
+ case 17:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::app::DataModel::DecodableList<chip::app::Clusters::AccessControl::Structs::ExtensionEntry::DecodableType>
+ value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ {
+ auto iter_0 = value.begin();
+ VerifyOrReturn(CheckNextListItemDecodes<decltype(value)>("extension", iter_0, 0));
+ VerifyOrReturn(CheckValueAsString(
+ "extension[0].data", iter_0.GetValue().data,
+ mDOkEmpty.HasValue() ? mDOkEmpty.Value() : chip::ByteSpan(chip::Uint8::from_const_char("\x17\x18"), 2)));
+ VerifyOrReturn(CheckValue("extension[0].fabricIndex", iter_0.GetValue().fabricIndex, CurrentFabricIndex));
+ VerifyOrReturn(CheckNoMoreListItems<decltype(value)>("extension", iter_0, 1));
+ }
+ }
+ break;
+ case 18:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ break;
+ case 19:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::app::DataModel::DecodableList<chip::app::Clusters::AccessControl::Structs::ExtensionEntry::DecodableType>
+ value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ {
+ auto iter_0 = value.begin();
+ VerifyOrReturn(CheckNoMoreListItems<decltype(value)>("extension", iter_0, 0));
+ }
+ }
+ break;
+ default:
+ LogErrorOnFailure(ContinueOnChipMainThread(CHIP_ERROR_INVALID_ARGUMENT));
+ }
+
+ if (shouldContinue)
+ {
+ ContinueOnChipMainThread(CHIP_NO_ERROR);
+ }
+ }
+
+ CHIP_ERROR DoTestStep(uint16_t testIndex) override
+ {
+ using namespace chip::app::Clusters;
+ switch (testIndex)
+ {
+ case 0: {
+ LogStep(0, "Wait for the commissioned device to be retrieved");
+ ListFreer listFreer;
+ chip::app::Clusters::DelayCommands::Commands::WaitForCommissionee::Type value;
+ value.nodeId = mNodeId.HasValue() ? mNodeId.Value() : 305414945ULL;
+ return WaitForCommissionee(kIdentityAlpha, value);
+ }
+ case 1: {
+ LogStep(1, "TH1 reads DUT Endpoint 0 OperationalCredentials cluster CurrentFabricIndex attribute");
+ return ReadAttribute(kIdentityAlpha, GetEndpoint(0), OperationalCredentials::Id,
+ OperationalCredentials::Attributes::CurrentFabricIndex::Id, true, chip::NullOptional);
+ }
+ case 2: {
+ LogStep(2, "TH1 reads DUT Endpoint 0 AccessControl cluster Extension attribute");
+ VerifyOrDo(!ShouldSkip("ACL.S.A0001"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return ReadAttribute(kIdentityAlpha, GetEndpoint(0), AccessControl::Id, AccessControl::Attributes::Extension::Id, true,
+ chip::NullOptional);
+ }
+ case 3: {
+ LogStep(3,
+ "TH1 writes DUT Endpoint 0 AccessControl cluster Extension attribute, value is list of "
+ "AccessControlExtensionStruct containing 1 element 1. struct: Data field: D_OK_EMPTY : 1718");
+ VerifyOrDo(!ShouldSkip("ACL.S.A0001"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ ListFreer listFreer;
+ chip::app::DataModel::List<const chip::app::Clusters::AccessControl::Structs::ExtensionEntry::Type> value;
+
+ {
+ auto * listHolder_0 = new ListHolder<chip::app::Clusters::AccessControl::Structs::ExtensionEntry::Type>(1);
+ listFreer.add(listHolder_0);
+
+ listHolder_0->mList[0].data =
+ mDOkEmpty.HasValue() ? mDOkEmpty.Value() : chip::ByteSpan(chip::Uint8::from_const_char("\x17\x18"), 2);
+ listHolder_0->mList[0].fabricIndex = CurrentFabricIndex;
+
+ value = chip::app::DataModel::List<chip::app::Clusters::AccessControl::Structs::ExtensionEntry::Type>(
+ listHolder_0->mList, 1);
+ }
+ return WriteAttribute(kIdentityAlpha, GetEndpoint(0), AccessControl::Id, AccessControl::Attributes::Extension::Id,
+ value, chip::NullOptional, chip::NullOptional);
+ }
+ case 4: {
+ LogStep(4, "TH1 reads DUT Endpoint 0 AccessControl cluster Extension attribute");
+ VerifyOrDo(!ShouldSkip("ACL.S.A0001"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return ReadAttribute(kIdentityAlpha, GetEndpoint(0), AccessControl::Id, AccessControl::Attributes::Extension::Id, true,
+ chip::NullOptional);
+ }
+ case 5: {
+ LogStep(5,
+ "TH1 writes DUT Endpoint 0 AccessControl cluster Extension attribute, value is list of "
+ "AccessControlExtensionStruct containing 1 element 1.struct Data field: D_OK_SINGLE "
+ ":17D00000F1FF01003D48656C6C6F20576F726C642E205468697320697320612073696E676C6520656C656D656E74206C6976696E67206"
+ "17320612063686172737472696E670018");
+ VerifyOrDo(!ShouldSkip("ACL.S.A0001"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ ListFreer listFreer;
+ chip::app::DataModel::List<const chip::app::Clusters::AccessControl::Structs::ExtensionEntry::Type> value;
+
+ {
+ auto * listHolder_0 = new ListHolder<chip::app::Clusters::AccessControl::Structs::ExtensionEntry::Type>(1);
+ listFreer.add(listHolder_0);
+
+ listHolder_0->mList[0].data = mDOkSingle.HasValue()
+ ? mDOkSingle.Value()
+ : chip::ByteSpan(
+ chip::Uint8::from_const_char(
+ "\x17\xD0\x00\x00\xF1\xFF\x01\x00\x3D\x48\x65\x6C\x6C\x6F\x20\x57\x6F\x72\x6C\x64\x2E\x20\x54\x68\x69"
+ "\x73\x20\x69\x73\x20\x61\x20\x73\x69\x6E\x67\x6C\x65\x20\x65\x6C\x65\x6D\x65\x6E\x74\x20\x6C\x69\x76"
+ "\x69\x6E\x67\x20\x61\x73\x20\x61\x20\x63\x68\x61\x72\x73\x74\x72\x69\x6E\x67\x00\x18"),
+ 71);
+ listHolder_0->mList[0].fabricIndex = CurrentFabricIndex;
+
+ value = chip::app::DataModel::List<chip::app::Clusters::AccessControl::Structs::ExtensionEntry::Type>(
+ listHolder_0->mList, 1);
+ }
+ return WriteAttribute(kIdentityAlpha, GetEndpoint(0), AccessControl::Id, AccessControl::Attributes::Extension::Id,
+ value, chip::NullOptional, chip::NullOptional);
+ }
+ case 6: {
+ LogStep(6, "TH1 reads DUT Endpoint 0 AccessControl cluster Extension attribute");
+ VerifyOrDo(!ShouldSkip("ACL.S.A0001"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return ReadAttribute(kIdentityAlpha, GetEndpoint(0), AccessControl::Id, AccessControl::Attributes::Extension::Id, true,
+ chip::NullOptional);
+ }
+ case 7: {
+ LogStep(7,
+ "TH1 writes DUT Endpoint 0 AccessControl cluster Extension attribute, value is list of "
+ "AccessControlExtensionStruct containing 1 element 1.struct Data field: D_OK_FULL "
+ ":17D00000F1FF01003D48656C6C6F20576F726C642E205468697320697320612073696E676C6520656C656D656E74206C6976696E67206"
+ "17320612063686172737472696E6700D00000F1FF02003148656C6C6F20576F726C642E205468697320697320612073696E676C6520656"
+ "C656D656E7420616761696E2E2E2E2E2E0018");
+ VerifyOrDo(!ShouldSkip("ACL.S.A0001"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ ListFreer listFreer;
+ chip::app::DataModel::List<const chip::app::Clusters::AccessControl::Structs::ExtensionEntry::Type> value;
+
+ {
+ auto * listHolder_0 = new ListHolder<chip::app::Clusters::AccessControl::Structs::ExtensionEntry::Type>(1);
+ listFreer.add(listHolder_0);
+
+ listHolder_0->mList[0].data = mDOkFull.HasValue()
+ ? mDOkFull.Value()
+ : chip::ByteSpan(chip::Uint8::from_const_char(
+ "\x17\xD0\x00\x00\xF1\xFF\x01\x00\x3D\x48\x65\x6C\x6C\x6F\x20\x57\x6F\x72\x6C\x64\x2E\x20"
+ "\x54\x68\x69\x73\x20\x69\x73\x20\x61\x20\x73\x69\x6E\x67\x6C\x65\x20\x65\x6C\x65\x6D\x65"
+ "\x6E\x74\x20\x6C\x69\x76\x69\x6E\x67\x20\x61\x73\x20\x61\x20\x63\x68\x61\x72\x73\x74\x72"
+ "\x69\x6E\x67\x00\xD0\x00\x00\xF1\xFF\x02\x00\x31\x48\x65\x6C\x6C\x6F\x20\x57\x6F\x72\x6C"
+ "\x64\x2E\x20\x54\x68\x69\x73\x20\x69\x73\x20\x61\x20\x73\x69\x6E\x67\x6C\x65\x20\x65\x6C"
+ "\x65\x6D\x65\x6E\x74\x20\x61\x67\x61\x69\x6E\x2E\x2E\x2E\x2E\x2E\x00\x18"),
+ 128);
+ listHolder_0->mList[0].fabricIndex = CurrentFabricIndex;
+
+ value = chip::app::DataModel::List<chip::app::Clusters::AccessControl::Structs::ExtensionEntry::Type>(
+ listHolder_0->mList, 1);
+ }
+ return WriteAttribute(kIdentityAlpha, GetEndpoint(0), AccessControl::Id, AccessControl::Attributes::Extension::Id,
+ value, chip::NullOptional, chip::NullOptional);
+ }
+ case 8: {
+ LogStep(8, "TH1 reads DUT Endpoint 0 AccessControl cluster Extension attribute");
+ VerifyOrDo(!ShouldSkip("ACL.S.A0001"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return ReadAttribute(kIdentityAlpha, GetEndpoint(0), AccessControl::Id, AccessControl::Attributes::Extension::Id, true,
+ chip::NullOptional);
+ }
+ case 9: {
+ LogStep(9,
+ "TH1 writes DUT Endpoint 0 AccessControl cluster Extension attribute, value is list of "
+ "AccessControlExtensionStruct containing 1 element 1 .struct Data field: D_BAD_LENGTH "
+ ":17D00000F1FF01003D48656C6C6F20576F726C642E205468697320697320612073696E676C6520656C656D656E74206C6976696E67206"
+ "17320612063686172737472696E6700D00000F1FF02003248656C6C6F20576F726C642E205468697320697320612073696E676C6520656"
+ "C656D656E7420616761696E2E2E2E2E2E2E0018");
+ VerifyOrDo(!ShouldSkip("ACL.S.A0001"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ ListFreer listFreer;
+ chip::app::DataModel::List<const chip::app::Clusters::AccessControl::Structs::ExtensionEntry::Type> value;
+
+ {
+ auto * listHolder_0 = new ListHolder<chip::app::Clusters::AccessControl::Structs::ExtensionEntry::Type>(1);
+ listFreer.add(listHolder_0);
+
+ listHolder_0->mList[0].data = mDBadLength.HasValue()
+ ? mDBadLength.Value()
+ : chip::ByteSpan(chip::Uint8::from_const_char(
+ "\x17\xD0\x00\x00\xF1\xFF\x01\x00\x3D\x48\x65\x6C\x6C\x6F\x20\x57\x6F\x72\x6C\x64\x2E\x20"
+ "\x54\x68\x69\x73\x20\x69\x73\x20\x61\x20\x73\x69\x6E\x67\x6C\x65\x20\x65\x6C\x65\x6D\x65"
+ "\x6E\x74\x20\x6C\x69\x76\x69\x6E\x67\x20\x61\x73\x20\x61\x20\x63\x68\x61\x72\x73\x74\x72"
+ "\x69\x6E\x67\x00\xD0\x00\x00\xF1\xFF\x02\x00\x32\x48\x65\x6C\x6C\x6F\x20\x57\x6F\x72\x6C"
+ "\x64\x2E\x20\x54\x68\x69\x73\x20\x69\x73\x20\x61\x20\x73\x69\x6E\x67\x6C\x65\x20\x65\x6C"
+ "\x65\x6D\x65\x6E\x74\x20\x61\x67\x61\x69\x6E\x2E\x2E\x2E\x2E\x2E\x2E\x00\x18"),
+ 129);
+ listHolder_0->mList[0].fabricIndex = CurrentFabricIndex;
+
+ value = chip::app::DataModel::List<chip::app::Clusters::AccessControl::Structs::ExtensionEntry::Type>(
+ listHolder_0->mList, 1);
+ }
+ return WriteAttribute(kIdentityAlpha, GetEndpoint(0), AccessControl::Id, AccessControl::Attributes::Extension::Id,
+ value, chip::NullOptional, chip::NullOptional);
+ }
+ case 10: {
+ LogStep(10,
+ "TH1 writes DUT Endpoint 0 AccessControl cluster Extension attribute, value is list of "
+ "AccessControlExtensionStruct containing 1 element 1. struct Data field: D_BAD_STRUCT : 1518");
+ VerifyOrDo(!ShouldSkip("ACL.S.A0001"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ ListFreer listFreer;
+ chip::app::DataModel::List<const chip::app::Clusters::AccessControl::Structs::ExtensionEntry::Type> value;
+
+ {
+ auto * listHolder_0 = new ListHolder<chip::app::Clusters::AccessControl::Structs::ExtensionEntry::Type>(1);
+ listFreer.add(listHolder_0);
+
+ listHolder_0->mList[0].data =
+ mDBadStruct.HasValue() ? mDBadStruct.Value() : chip::ByteSpan(chip::Uint8::from_const_char("\x15\x18"), 2);
+ listHolder_0->mList[0].fabricIndex = CurrentFabricIndex;
+
+ value = chip::app::DataModel::List<chip::app::Clusters::AccessControl::Structs::ExtensionEntry::Type>(
+ listHolder_0->mList, 1);
+ }
+ return WriteAttribute(kIdentityAlpha, GetEndpoint(0), AccessControl::Id, AccessControl::Attributes::Extension::Id,
+ value, chip::NullOptional, chip::NullOptional);
+ }
+ case 11: {
+ LogStep(11,
+ "TH1 writes DUT Endpoint 0 AccessControl cluster Extension attribute, value is list of "
+ "AccessControlExtensionStruct containing 1 element 1. struct Data field: D_BAD_LIST "
+ ":3701D00000F1FF01003D48656C6C6F20576F726C642E205468697320697320612073696E676C6520656C656D656E74206C6976696E672"
+ "0617320612063686172737472696E670018");
+ VerifyOrDo(!ShouldSkip("ACL.S.A0001"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ ListFreer listFreer;
+ chip::app::DataModel::List<const chip::app::Clusters::AccessControl::Structs::ExtensionEntry::Type> value;
+
+ {
+ auto * listHolder_0 = new ListHolder<chip::app::Clusters::AccessControl::Structs::ExtensionEntry::Type>(1);
+ listFreer.add(listHolder_0);
+
+ listHolder_0->mList[0].data = mDBadList.HasValue()
+ ? mDBadList.Value()
+ : chip::ByteSpan(
+ chip::Uint8::from_const_char(
+ "\x37\x01\xD0\x00\x00\xF1\xFF\x01\x00\x3D\x48\x65\x6C\x6C\x6F\x20\x57\x6F\x72\x6C\x64\x2E\x20\x54\x68"
+ "\x69\x73\x20\x69\x73\x20\x61\x20\x73\x69\x6E\x67\x6C\x65\x20\x65\x6C\x65\x6D\x65\x6E\x74\x20\x6C\x69"
+ "\x76\x69\x6E\x67\x20\x61\x73\x20\x61\x20\x63\x68\x61\x72\x73\x74\x72\x69\x6E\x67\x00\x18"),
+ 72);
+ listHolder_0->mList[0].fabricIndex = CurrentFabricIndex;
+
+ value = chip::app::DataModel::List<chip::app::Clusters::AccessControl::Structs::ExtensionEntry::Type>(
+ listHolder_0->mList, 1);
+ }
+ return WriteAttribute(kIdentityAlpha, GetEndpoint(0), AccessControl::Id, AccessControl::Attributes::Extension::Id,
+ value, chip::NullOptional, chip::NullOptional);
+ }
+ case 12: {
+ LogStep(12,
+ "TH1 writes DUT Endpoint 0 AccessControl cluster Extension attribute, value is list of "
+ "AccessControlExtensionStruct containing 1 element 1. struct Data field: D_BAD_ELEM "
+ ":17103D48656C6C6F20576F726C642E205468697320697320612073696E676C6520656C656D656E74206C6976696E67206173206120636"
+ "86172737472696E670018");
+ VerifyOrDo(!ShouldSkip("ACL.S.A0001"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ ListFreer listFreer;
+ chip::app::DataModel::List<const chip::app::Clusters::AccessControl::Structs::ExtensionEntry::Type> value;
+
+ {
+ auto * listHolder_0 = new ListHolder<chip::app::Clusters::AccessControl::Structs::ExtensionEntry::Type>(1);
+ listFreer.add(listHolder_0);
+
+ listHolder_0->mList[0].data = mDBadElem.HasValue()
+ ? mDBadElem.Value()
+ : chip::ByteSpan(chip::Uint8::from_const_char(
+ "\x17\x10\x3D\x48\x65\x6C\x6C\x6F\x20\x57\x6F\x72\x6C\x64\x2E\x20\x54\x68\x69\x73\x20\x69"
+ "\x73\x20\x61\x20\x73\x69\x6E\x67\x6C\x65\x20\x65\x6C\x65\x6D\x65\x6E\x74\x20\x6C\x69\x76"
+ "\x69\x6E\x67\x20\x61\x73\x20\x61\x20\x63\x68\x61\x72\x73\x74\x72\x69\x6E\x67\x00\x18"),
+ 65);
+ listHolder_0->mList[0].fabricIndex = CurrentFabricIndex;
+
+ value = chip::app::DataModel::List<chip::app::Clusters::AccessControl::Structs::ExtensionEntry::Type>(
+ listHolder_0->mList, 1);
+ }
+ return WriteAttribute(kIdentityAlpha, GetEndpoint(0), AccessControl::Id, AccessControl::Attributes::Extension::Id,
+ value, chip::NullOptional, chip::NullOptional);
+ }
+ case 13: {
+ LogStep(13,
+ "TH1 writes DUT Endpoint 0 AccessControl cluster Extension attribute, value is list of "
+ "AccessControlExtensionStruct containing 1 element 1 .struct Data field: D_BAD_OVERFLOW : "
+ "17D00000F1FF01003D48656C6C6F20576F726C642E205468697320697320612073696E676C6520656C656D656E74206C6976696E672061"
+ "7320612063686172737472696E670018FF");
+ VerifyOrDo(!ShouldSkip("ACL.S.A0001"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ ListFreer listFreer;
+ chip::app::DataModel::List<const chip::app::Clusters::AccessControl::Structs::ExtensionEntry::Type> value;
+
+ {
+ auto * listHolder_0 = new ListHolder<chip::app::Clusters::AccessControl::Structs::ExtensionEntry::Type>(1);
+ listFreer.add(listHolder_0);
+
+ listHolder_0->mList[0].data = mDBadOverflow.HasValue()
+ ? mDBadOverflow.Value()
+ : chip::ByteSpan(
+ chip::Uint8::from_const_char(
+ "\x17\xD0\x00\x00\xF1\xFF\x01\x00\x3D\x48\x65\x6C\x6C\x6F\x20\x57\x6F\x72\x6C\x64\x2E\x20\x54\x68\x69"
+ "\x73\x20\x69\x73\x20\x61\x20\x73\x69\x6E\x67\x6C\x65\x20\x65\x6C\x65\x6D\x65\x6E\x74\x20\x6C\x69\x76"
+ "\x69\x6E\x67\x20\x61\x73\x20\x61\x20\x63\x68\x61\x72\x73\x74\x72\x69\x6E\x67\x00\x18\xFF"),
+ 72);
+ listHolder_0->mList[0].fabricIndex = CurrentFabricIndex;
+
+ value = chip::app::DataModel::List<chip::app::Clusters::AccessControl::Structs::ExtensionEntry::Type>(
+ listHolder_0->mList, 1);
+ }
+ return WriteAttribute(kIdentityAlpha, GetEndpoint(0), AccessControl::Id, AccessControl::Attributes::Extension::Id,
+ value, chip::NullOptional, chip::NullOptional);
+ }
+ case 14: {
+ LogStep(14,
+ "TH1 writes DUT Endpoint 0 AccessControl cluster Extension attribute, value is list of "
+ "AccessControlExtensionStruct containing 1 element 1. struct Data field: D_BAD_UNDERFLOW "
+ ":17D00000F1FF01003D48656C6C6F20576F726C642E205468697320697320612073696E676C6520656C656D656E74206C6976696E67206"
+ "17320612063686172737472696E6700");
+ VerifyOrDo(!ShouldSkip("ACL.S.A0001"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ ListFreer listFreer;
+ chip::app::DataModel::List<const chip::app::Clusters::AccessControl::Structs::ExtensionEntry::Type> value;
+
+ {
+ auto * listHolder_0 = new ListHolder<chip::app::Clusters::AccessControl::Structs::ExtensionEntry::Type>(1);
+ listFreer.add(listHolder_0);
+
+ listHolder_0->mList[0].data = mDBadUnderflow.HasValue()
+ ? mDBadUnderflow.Value()
+ : chip::ByteSpan(
+ chip::Uint8::from_const_char(
+ "\x17\xD0\x00\x00\xF1\xFF\x01\x00\x3D\x48\x65\x6C\x6C\x6F\x20\x57\x6F\x72\x6C\x64\x2E\x20\x54\x68\x69"
+ "\x73\x20\x69\x73\x20\x61\x20\x73\x69\x6E\x67\x6C\x65\x20\x65\x6C\x65\x6D\x65\x6E\x74\x20\x6C\x69\x76"
+ "\x69\x6E\x67\x20\x61\x73\x20\x61\x20\x63\x68\x61\x72\x73\x74\x72\x69\x6E\x67\x00"),
+ 70);
+ listHolder_0->mList[0].fabricIndex = CurrentFabricIndex;
+
+ value = chip::app::DataModel::List<chip::app::Clusters::AccessControl::Structs::ExtensionEntry::Type>(
+ listHolder_0->mList, 1);
+ }
+ return WriteAttribute(kIdentityAlpha, GetEndpoint(0), AccessControl::Id, AccessControl::Attributes::Extension::Id,
+ value, chip::NullOptional, chip::NullOptional);
+ }
+ case 15: {
+ LogStep(15,
+ "TH1 writes DUT Endpoint 0 AccessControl cluster Extension attribute, value is list of "
+ "AccessControlExtensionStruct containing 1 element 1.struct Data field: D_BAD_NONE");
+ VerifyOrDo(!ShouldSkip("ACL.S.A0001"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ ListFreer listFreer;
+ chip::app::DataModel::List<const chip::app::Clusters::AccessControl::Structs::ExtensionEntry::Type> value;
+
+ {
+ auto * listHolder_0 = new ListHolder<chip::app::Clusters::AccessControl::Structs::ExtensionEntry::Type>(1);
+ listFreer.add(listHolder_0);
+
+ listHolder_0->mList[0].data =
+ mDBadNone.HasValue() ? mDBadNone.Value() : chip::ByteSpan(chip::Uint8::from_const_char(""), 0);
+ listHolder_0->mList[0].fabricIndex = CurrentFabricIndex;
+
+ value = chip::app::DataModel::List<chip::app::Clusters::AccessControl::Structs::ExtensionEntry::Type>(
+ listHolder_0->mList, 1);
+ }
+ return WriteAttribute(kIdentityAlpha, GetEndpoint(0), AccessControl::Id, AccessControl::Attributes::Extension::Id,
+ value, chip::NullOptional, chip::NullOptional);
+ }
+ case 16: {
+ LogStep(
+ 16,
+ "TH1 writes DUT Endpoint 0 AccessControl cluster Extension attribute, value is list of "
+ "AccessControlExtensionStruct containing 2 elements . value is list of AccessControlExtensionStruct containing 2 "
+ "elements . first element contains Data field: D_OK_EMPTY 1718 . second element contains Data field: D_OK_SINGLE "
+ "17D00000F1FF01003D48656C6C6F20576F726C642E205468697320697320612073696E676C6520656C656D656E74206C6976696E6720617320"
+ "612063686172737472696E670018");
+ VerifyOrDo(!ShouldSkip("ACL.S.A0001"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ ListFreer listFreer;
+ chip::app::DataModel::List<const chip::app::Clusters::AccessControl::Structs::ExtensionEntry::Type> value;
+
+ {
+ auto * listHolder_0 = new ListHolder<chip::app::Clusters::AccessControl::Structs::ExtensionEntry::Type>(2);
+ listFreer.add(listHolder_0);
+
+ listHolder_0->mList[0].data =
+ mDOkEmpty.HasValue() ? mDOkEmpty.Value() : chip::ByteSpan(chip::Uint8::from_const_char("\x17\x18"), 2);
+ listHolder_0->mList[0].fabricIndex = CurrentFabricIndex;
+
+ listHolder_0->mList[1].data = mDOkSingle.HasValue()
+ ? mDOkSingle.Value()
+ : chip::ByteSpan(
+ chip::Uint8::from_const_char(
+ "\x17\xD0\x00\x00\xF1\xFF\x01\x00\x3D\x48\x65\x6C\x6C\x6F\x20\x57\x6F\x72\x6C\x64\x2E\x20\x54\x68\x69"
+ "\x73\x20\x69\x73\x20\x61\x20\x73\x69\x6E\x67\x6C\x65\x20\x65\x6C\x65\x6D\x65\x6E\x74\x20\x6C\x69\x76"
+ "\x69\x6E\x67\x20\x61\x73\x20\x61\x20\x63\x68\x61\x72\x73\x74\x72\x69\x6E\x67\x00\x18"),
+ 71);
+ listHolder_0->mList[1].fabricIndex = CurrentFabricIndex;
+
+ value = chip::app::DataModel::List<chip::app::Clusters::AccessControl::Structs::ExtensionEntry::Type>(
+ listHolder_0->mList, 2);
+ }
+ return WriteAttribute(kIdentityAlpha, GetEndpoint(0), AccessControl::Id, AccessControl::Attributes::Extension::Id,
+ value, chip::NullOptional, chip::NullOptional);
+ }
+ case 17: {
+ LogStep(17, "TH1 reads DUT Endpoint 0 AccessControl cluster Extension attribute");
+ VerifyOrDo(!ShouldSkip("ACL.S.A0001"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return ReadAttribute(kIdentityAlpha, GetEndpoint(0), AccessControl::Id, AccessControl::Attributes::Extension::Id, true,
+ chip::NullOptional);
+ }
+ case 18: {
+ LogStep(18, "TH1 writes DUT Endpoint 0 AccessControl cluster Extension attribute, value is an empty list");
+ VerifyOrDo(!ShouldSkip("ACL.S.A0001"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ ListFreer listFreer;
+ chip::app::DataModel::List<const chip::app::Clusters::AccessControl::Structs::ExtensionEntry::Type> value;
+
+ value = chip::app::DataModel::List<chip::app::Clusters::AccessControl::Structs::ExtensionEntry::Type>();
+ return WriteAttribute(kIdentityAlpha, GetEndpoint(0), AccessControl::Id, AccessControl::Attributes::Extension::Id,
+ value, chip::NullOptional, chip::NullOptional);
+ }
+ case 19: {
+ LogStep(19, "TH1 reads DUT Endpoint 0 AccessControl cluster Extension attribute");
+ VerifyOrDo(!ShouldSkip("ACL.S.A0001"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return ReadAttribute(kIdentityAlpha, GetEndpoint(0), AccessControl::Id, AccessControl::Attributes::Extension::Id, true,
+ chip::NullOptional);
+ }
+ }
+ return CHIP_NO_ERROR;
+ }
+};
+
class Test_TC_BOOL_1_1Suite : public TestCommand
{
public:
@@ -2493,6 +3103,1281 @@
}
};
+class Test_TC_BRBINFO_1_1Suite : public TestCommand
+{
+public:
+ Test_TC_BRBINFO_1_1Suite(CredentialIssuerCommands * credsIssuerConfig) :
+ TestCommand("Test_TC_BRBINFO_1_1", 20, credsIssuerConfig)
+ {
+ AddArgument("nodeId", 0, UINT64_MAX, &mNodeId);
+ AddArgument("cluster", &mCluster);
+ AddArgument("endpoint", 0, UINT16_MAX, &mEndpoint);
+ AddArgument("timeout", 0, UINT16_MAX, &mTimeout);
+ }
+
+ ~Test_TC_BRBINFO_1_1Suite() {}
+
+ chip::System::Clock::Timeout GetWaitDuration() const override
+ {
+ return chip::System::Clock::Seconds16(mTimeout.ValueOr(kTimeoutInSeconds));
+ }
+
+private:
+ chip::Optional<chip::NodeId> mNodeId;
+ chip::Optional<chip::CharSpan> mCluster;
+ chip::Optional<chip::EndpointId> mEndpoint;
+ chip::Optional<uint16_t> mTimeout;
+
+ chip::EndpointId GetEndpoint(chip::EndpointId endpoint) { return mEndpoint.HasValue() ? mEndpoint.Value() : endpoint; }
+
+ //
+ // Tests methods
+ //
+
+ void OnResponse(const chip::app::StatusIB & status, chip::TLV::TLVReader * data) override
+ {
+ bool shouldContinue = false;
+
+ switch (mTestIndex - 1)
+ {
+ case 0:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ shouldContinue = true;
+ break;
+ case 1:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ uint16_t value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckValue("clusterRevision", value, 1U));
+ VerifyOrReturn(CheckConstraintType("value", "int16u", "int16u"));
+ }
+ break;
+ case 2:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ uint32_t value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckValue("featureMap", value, 0UL));
+ VerifyOrReturn(CheckConstraintType("value", "bitmap32", "bitmap32"));
+ }
+ break;
+ case 3:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::app::DataModel::DecodableList<chip::AttributeId> value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckConstraintType("value", "list", "list"));
+ VerifyOrReturn(CheckConstraintContains("value", value, 17UL));
+ VerifyOrReturn(CheckConstraintContains("value", value, 65528UL));
+ VerifyOrReturn(CheckConstraintContains("value", value, 65529UL));
+ VerifyOrReturn(CheckConstraintContains("value", value, 65531UL));
+ VerifyOrReturn(CheckConstraintContains("value", value, 65532UL));
+ VerifyOrReturn(CheckConstraintContains("value", value, 65533UL));
+ }
+ break;
+ case 4:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::app::DataModel::DecodableList<chip::AttributeId> value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckConstraintType("value", "list", "list"));
+ VerifyOrReturn(CheckConstraintContains("value", value, 1UL));
+ }
+ break;
+ case 5:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::app::DataModel::DecodableList<chip::AttributeId> value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckConstraintType("value", "list", "list"));
+ VerifyOrReturn(CheckConstraintContains("value", value, 2UL));
+ }
+ break;
+ case 6:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::app::DataModel::DecodableList<chip::AttributeId> value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckConstraintType("value", "list", "list"));
+ VerifyOrReturn(CheckConstraintContains("value", value, 3UL));
+ }
+ break;
+ case 7:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::app::DataModel::DecodableList<chip::AttributeId> value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckConstraintType("value", "list", "list"));
+ VerifyOrReturn(CheckConstraintContains("value", value, 5UL));
+ }
+ break;
+ case 8:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::app::DataModel::DecodableList<chip::AttributeId> value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckConstraintType("value", "list", "list"));
+ VerifyOrReturn(CheckConstraintContains("value", value, 7UL));
+ }
+ break;
+ case 9:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::app::DataModel::DecodableList<chip::AttributeId> value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckConstraintType("value", "list", "list"));
+ VerifyOrReturn(CheckConstraintContains("value", value, 8UL));
+ }
+ break;
+ case 10:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::app::DataModel::DecodableList<chip::AttributeId> value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckConstraintType("value", "list", "list"));
+ VerifyOrReturn(CheckConstraintContains("value", value, 9UL));
+ }
+ break;
+ case 11:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::app::DataModel::DecodableList<chip::AttributeId> value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckConstraintType("value", "list", "list"));
+ VerifyOrReturn(CheckConstraintContains("value", value, 10UL));
+ }
+ break;
+ case 12:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::app::DataModel::DecodableList<chip::AttributeId> value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckConstraintType("value", "list", "list"));
+ VerifyOrReturn(CheckConstraintContains("value", value, 11UL));
+ }
+ break;
+ case 13:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::app::DataModel::DecodableList<chip::AttributeId> value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckConstraintType("value", "list", "list"));
+ VerifyOrReturn(CheckConstraintContains("value", value, 12UL));
+ }
+ break;
+ case 14:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::app::DataModel::DecodableList<chip::AttributeId> value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckConstraintType("value", "list", "list"));
+ VerifyOrReturn(CheckConstraintContains("value", value, 13UL));
+ }
+ break;
+ case 15:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::app::DataModel::DecodableList<chip::AttributeId> value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckConstraintType("value", "list", "list"));
+ VerifyOrReturn(CheckConstraintContains("value", value, 14UL));
+ }
+ break;
+ case 16:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::app::DataModel::DecodableList<chip::AttributeId> value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckConstraintType("value", "list", "list"));
+ VerifyOrReturn(CheckConstraintContains("value", value, 15UL));
+ }
+ break;
+ case 17:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::app::DataModel::DecodableList<chip::AttributeId> value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckConstraintType("value", "list", "list"));
+ VerifyOrReturn(CheckConstraintContains("value", value, 18UL));
+ }
+ break;
+ case 18:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::app::DataModel::DecodableList<chip::CommandId> value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ {
+ auto iter_0 = value.begin();
+ VerifyOrReturn(CheckNoMoreListItems<decltype(value)>("acceptedCommandList", iter_0, 0));
+ }
+ VerifyOrReturn(CheckConstraintType("value", "list", "list"));
+ }
+ break;
+ case 19:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::app::DataModel::DecodableList<chip::CommandId> value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ {
+ auto iter_0 = value.begin();
+ VerifyOrReturn(CheckNoMoreListItems<decltype(value)>("generatedCommandList", iter_0, 0));
+ }
+ VerifyOrReturn(CheckConstraintType("value", "list", "list"));
+ }
+ break;
+ default:
+ LogErrorOnFailure(ContinueOnChipMainThread(CHIP_ERROR_INVALID_ARGUMENT));
+ }
+
+ if (shouldContinue)
+ {
+ ContinueOnChipMainThread(CHIP_NO_ERROR);
+ }
+ }
+
+ CHIP_ERROR DoTestStep(uint16_t testIndex) override
+ {
+ using namespace chip::app::Clusters;
+ switch (testIndex)
+ {
+ case 0: {
+ LogStep(0, "Wait for the commissioned device to be retrieved");
+ ListFreer listFreer;
+ chip::app::Clusters::DelayCommands::Commands::WaitForCommissionee::Type value;
+ value.nodeId = mNodeId.HasValue() ? mNodeId.Value() : 305414945ULL;
+ return WaitForCommissionee(kIdentityAlpha, value);
+ }
+ case 1: {
+ LogStep(1, "TH reads the ClusterRevision from DUT");
+ return ReadAttribute(kIdentityAlpha, GetEndpoint(3), BridgedDeviceBasic::Id,
+ BridgedDeviceBasic::Attributes::ClusterRevision::Id, true, chip::NullOptional);
+ }
+ case 2: {
+ LogStep(2, "TH reads the FeatureMap from DUT");
+ return ReadAttribute(kIdentityAlpha, GetEndpoint(3), BridgedDeviceBasic::Id,
+ BridgedDeviceBasic::Attributes::FeatureMap::Id, true, chip::NullOptional);
+ }
+ case 3: {
+ LogStep(3, "TH reads AttributeList from DUT");
+ return ReadAttribute(kIdentityAlpha, GetEndpoint(3), BridgedDeviceBasic::Id,
+ BridgedDeviceBasic::Attributes::AttributeList::Id, true, chip::NullOptional);
+ }
+ case 4: {
+ LogStep(4, "TH reads optional attribute(VendorName) in AttributeList");
+ VerifyOrDo(!ShouldSkip("BRBINFO.S.A0001"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return ReadAttribute(kIdentityAlpha, GetEndpoint(3), BridgedDeviceBasic::Id,
+ BridgedDeviceBasic::Attributes::AttributeList::Id, true, chip::NullOptional);
+ }
+ case 5: {
+ LogStep(5, "TH reads optional attribute(VendorID) in AttributeList");
+ VerifyOrDo(!ShouldSkip("BRBINFO.S.A0002"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return ReadAttribute(kIdentityAlpha, GetEndpoint(3), BridgedDeviceBasic::Id,
+ BridgedDeviceBasic::Attributes::AttributeList::Id, true, chip::NullOptional);
+ }
+ case 6: {
+ LogStep(6, "TH reads optional attribute(ProductName) in AttributeList");
+ VerifyOrDo(!ShouldSkip("BRBINFO.S.A0003"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return ReadAttribute(kIdentityAlpha, GetEndpoint(3), BridgedDeviceBasic::Id,
+ BridgedDeviceBasic::Attributes::AttributeList::Id, true, chip::NullOptional);
+ }
+ case 7: {
+ LogStep(7, "TH reads optional attribute(NodeLabel) in AttributeList");
+ VerifyOrDo(!ShouldSkip("BRBINFO.S.A0005"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return ReadAttribute(kIdentityAlpha, GetEndpoint(3), BridgedDeviceBasic::Id,
+ BridgedDeviceBasic::Attributes::AttributeList::Id, true, chip::NullOptional);
+ }
+ case 8: {
+ LogStep(8, "TH reads optional attribute(HardwareVersion) in AttributeList");
+ VerifyOrDo(!ShouldSkip("BRBINFO.S.A0007"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return ReadAttribute(kIdentityAlpha, GetEndpoint(3), BridgedDeviceBasic::Id,
+ BridgedDeviceBasic::Attributes::AttributeList::Id, true, chip::NullOptional);
+ }
+ case 9: {
+ LogStep(9, "TH reads optional attribute(HardwareVersionString) in AttributeList");
+ VerifyOrDo(!ShouldSkip("BRBINFO.S.A0008"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return ReadAttribute(kIdentityAlpha, GetEndpoint(3), BridgedDeviceBasic::Id,
+ BridgedDeviceBasic::Attributes::AttributeList::Id, true, chip::NullOptional);
+ }
+ case 10: {
+ LogStep(10, "TH reads optional attribute(SoftwareVersion) in AttributeList");
+ VerifyOrDo(!ShouldSkip("BRBINFO.S.A0009"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return ReadAttribute(kIdentityAlpha, GetEndpoint(3), BridgedDeviceBasic::Id,
+ BridgedDeviceBasic::Attributes::AttributeList::Id, true, chip::NullOptional);
+ }
+ case 11: {
+ LogStep(11, "TH reads optional attribute(SoftwareVersionString) in AttributeList");
+ VerifyOrDo(!ShouldSkip("BRBINFO.S.A000a"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return ReadAttribute(kIdentityAlpha, GetEndpoint(3), BridgedDeviceBasic::Id,
+ BridgedDeviceBasic::Attributes::AttributeList::Id, true, chip::NullOptional);
+ }
+ case 12: {
+ LogStep(12, "TH reads optional attribute(ManufacturingDate) in AttributeList");
+ VerifyOrDo(!ShouldSkip("BRBINFO.S.A000b"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return ReadAttribute(kIdentityAlpha, GetEndpoint(3), BridgedDeviceBasic::Id,
+ BridgedDeviceBasic::Attributes::AttributeList::Id, true, chip::NullOptional);
+ }
+ case 13: {
+ LogStep(13, "TH reads optional attribute(PartNumber) in AttributeList");
+ VerifyOrDo(!ShouldSkip("BRBINFO.S.A000c"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return ReadAttribute(kIdentityAlpha, GetEndpoint(3), BridgedDeviceBasic::Id,
+ BridgedDeviceBasic::Attributes::AttributeList::Id, true, chip::NullOptional);
+ }
+ case 14: {
+ LogStep(14, "TH reads optional attribute(ProductURL) in AttributeList");
+ VerifyOrDo(!ShouldSkip("BRBINFO.S.A000d"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return ReadAttribute(kIdentityAlpha, GetEndpoint(3), BridgedDeviceBasic::Id,
+ BridgedDeviceBasic::Attributes::AttributeList::Id, true, chip::NullOptional);
+ }
+ case 15: {
+ LogStep(15, "TH reads optional attribute(ProductLabel) in AttributeList");
+ VerifyOrDo(!ShouldSkip("BRBINFO.S.A000e"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return ReadAttribute(kIdentityAlpha, GetEndpoint(3), BridgedDeviceBasic::Id,
+ BridgedDeviceBasic::Attributes::AttributeList::Id, true, chip::NullOptional);
+ }
+ case 16: {
+ LogStep(16, "TH reads optional attribute(SerialNumber) in AttributeList");
+ VerifyOrDo(!ShouldSkip("BRBINFO.S.A000f"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return ReadAttribute(kIdentityAlpha, GetEndpoint(3), BridgedDeviceBasic::Id,
+ BridgedDeviceBasic::Attributes::AttributeList::Id, true, chip::NullOptional);
+ }
+ case 17: {
+ LogStep(17, "TH reads optional attribute(UniqueID) in AttributeList");
+ VerifyOrDo(!ShouldSkip("BRBINFO.S.A0012"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return ReadAttribute(kIdentityAlpha, GetEndpoint(3), BridgedDeviceBasic::Id,
+ BridgedDeviceBasic::Attributes::AttributeList::Id, true, chip::NullOptional);
+ }
+ case 18: {
+ LogStep(18, "TH1 reads AcceptedCommandList from DUT");
+ return ReadAttribute(kIdentityAlpha, GetEndpoint(3), BridgedDeviceBasic::Id,
+ BridgedDeviceBasic::Attributes::AcceptedCommandList::Id, true, chip::NullOptional);
+ }
+ case 19: {
+ LogStep(19, "TH1 reads GeneratedCommandList from DUT");
+ return ReadAttribute(kIdentityAlpha, GetEndpoint(3), BridgedDeviceBasic::Id,
+ BridgedDeviceBasic::Attributes::GeneratedCommandList::Id, true, chip::NullOptional);
+ }
+ }
+ return CHIP_NO_ERROR;
+ }
+};
+
+class Test_TC_BRBINFO_2_1Suite : public TestCommand
+{
+public:
+ Test_TC_BRBINFO_2_1Suite(CredentialIssuerCommands * credsIssuerConfig) :
+ TestCommand("Test_TC_BRBINFO_2_1", 50, credsIssuerConfig)
+ {
+ AddArgument("nodeId", 0, UINT64_MAX, &mNodeId);
+ AddArgument("cluster", &mCluster);
+ AddArgument("endpoint", 0, UINT16_MAX, &mEndpoint);
+ AddArgument("timeout", 0, UINT16_MAX, &mTimeout);
+ }
+
+ ~Test_TC_BRBINFO_2_1Suite()
+ {
+ if (VendorNameValueBuffer != nullptr)
+ {
+ chip::Platform::MemoryFree(VendorNameValueBuffer);
+ VendorNameValueBuffer = nullptr;
+ }
+ if (ProductNameValueBuffer != nullptr)
+ {
+ chip::Platform::MemoryFree(ProductNameValueBuffer);
+ ProductNameValueBuffer = nullptr;
+ }
+ if (NodeLabelValueBuffer != nullptr)
+ {
+ chip::Platform::MemoryFree(NodeLabelValueBuffer);
+ NodeLabelValueBuffer = nullptr;
+ }
+ if (HardwareVersionStringValueBuffer != nullptr)
+ {
+ chip::Platform::MemoryFree(HardwareVersionStringValueBuffer);
+ HardwareVersionStringValueBuffer = nullptr;
+ }
+ if (SoftwareVersionStringValueBuffer != nullptr)
+ {
+ chip::Platform::MemoryFree(SoftwareVersionStringValueBuffer);
+ SoftwareVersionStringValueBuffer = nullptr;
+ }
+ if (ManufacturingDateValueBuffer != nullptr)
+ {
+ chip::Platform::MemoryFree(ManufacturingDateValueBuffer);
+ ManufacturingDateValueBuffer = nullptr;
+ }
+ if (PartNumberValueBuffer != nullptr)
+ {
+ chip::Platform::MemoryFree(PartNumberValueBuffer);
+ PartNumberValueBuffer = nullptr;
+ }
+ if (ProductURLValueBuffer != nullptr)
+ {
+ chip::Platform::MemoryFree(ProductURLValueBuffer);
+ ProductURLValueBuffer = nullptr;
+ }
+ if (ProductLabelValueBuffer != nullptr)
+ {
+ chip::Platform::MemoryFree(ProductLabelValueBuffer);
+ ProductLabelValueBuffer = nullptr;
+ }
+ if (SerialNumberValueBuffer != nullptr)
+ {
+ chip::Platform::MemoryFree(SerialNumberValueBuffer);
+ SerialNumberValueBuffer = nullptr;
+ }
+ if (UniqueIDValueBuffer != nullptr)
+ {
+ chip::Platform::MemoryFree(UniqueIDValueBuffer);
+ UniqueIDValueBuffer = nullptr;
+ }
+ }
+
+ chip::System::Clock::Timeout GetWaitDuration() const override
+ {
+ return chip::System::Clock::Seconds16(mTimeout.ValueOr(kTimeoutInSeconds));
+ }
+
+private:
+ chip::Optional<chip::NodeId> mNodeId;
+ chip::Optional<chip::CharSpan> mCluster;
+ chip::Optional<chip::EndpointId> mEndpoint;
+ chip::Optional<uint16_t> mTimeout;
+
+ char * VendorNameValueBuffer = nullptr;
+ chip::CharSpan VendorNameValue;
+ chip::VendorId VendorIDValue;
+ char * ProductNameValueBuffer = nullptr;
+ chip::CharSpan ProductNameValue;
+ char * NodeLabelValueBuffer = nullptr;
+ chip::CharSpan NodeLabelValue;
+ uint16_t HardwareVersionValue;
+ char * HardwareVersionStringValueBuffer = nullptr;
+ chip::CharSpan HardwareVersionStringValue;
+ uint32_t SoftwareVersionValue;
+ char * SoftwareVersionStringValueBuffer = nullptr;
+ chip::CharSpan SoftwareVersionStringValue;
+ char * ManufacturingDateValueBuffer = nullptr;
+ chip::CharSpan ManufacturingDateValue;
+ char * PartNumberValueBuffer = nullptr;
+ chip::CharSpan PartNumberValue;
+ char * ProductURLValueBuffer = nullptr;
+ chip::CharSpan ProductURLValue;
+ char * ProductLabelValueBuffer = nullptr;
+ chip::CharSpan ProductLabelValue;
+ char * SerialNumberValueBuffer = nullptr;
+ chip::CharSpan SerialNumberValue;
+ char * UniqueIDValueBuffer = nullptr;
+ chip::CharSpan UniqueIDValue;
+
+ chip::EndpointId GetEndpoint(chip::EndpointId endpoint) { return mEndpoint.HasValue() ? mEndpoint.Value() : endpoint; }
+
+ //
+ // Tests methods
+ //
+
+ void OnResponse(const chip::app::StatusIB & status, chip::TLV::TLVReader * data) override
+ {
+ bool shouldContinue = false;
+
+ switch (mTestIndex - 1)
+ {
+ case 0:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ shouldContinue = true;
+ break;
+ case 1:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::CharSpan value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckConstraintType("value", "char_string", "char_string"));
+ VerifyOrReturn(CheckConstraintMaxLength("value", value, 32));
+ if (VendorNameValueBuffer != nullptr)
+ {
+ chip::Platform::MemoryFree(VendorNameValueBuffer);
+ }
+ VendorNameValueBuffer = static_cast<char *>(chip::Platform::MemoryAlloc(value.size()));
+ memcpy(VendorNameValueBuffer, value.data(), value.size());
+ VendorNameValue = chip::CharSpan(VendorNameValueBuffer, value.size());
+ }
+ break;
+ case 2:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), EMBER_ZCL_STATUS_UNSUPPORTED_WRITE));
+ break;
+ case 3:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::CharSpan value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckValueAsString("vendorName", value, VendorNameValue));
+ }
+ break;
+ case 4:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::VendorId value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckConstraintType("value", "vendor_id", "vendor_id"));
+ VerifyOrReturn(CheckConstraintMinValue("value", value, 1U));
+ VerifyOrReturn(CheckConstraintMaxValue("value", value, 65521U));
+ VendorIDValue = value;
+ }
+ break;
+ case 5:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ shouldContinue = true;
+ break;
+ case 6:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), EMBER_ZCL_STATUS_UNSUPPORTED_WRITE));
+ break;
+ case 7:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::VendorId value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckValue("vendorID", value, VendorIDValue));
+ }
+ break;
+ case 8:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::CharSpan value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckConstraintType("value", "char_string", "char_string"));
+ VerifyOrReturn(CheckConstraintMaxLength("value", value, 32));
+ if (ProductNameValueBuffer != nullptr)
+ {
+ chip::Platform::MemoryFree(ProductNameValueBuffer);
+ }
+ ProductNameValueBuffer = static_cast<char *>(chip::Platform::MemoryAlloc(value.size()));
+ memcpy(ProductNameValueBuffer, value.data(), value.size());
+ ProductNameValue = chip::CharSpan(ProductNameValueBuffer, value.size());
+ }
+ break;
+ case 9:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), EMBER_ZCL_STATUS_UNSUPPORTED_WRITE));
+ break;
+ case 10:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::CharSpan value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckValueAsString("productName", value, ProductNameValue));
+ }
+ break;
+ case 11:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::CharSpan value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckConstraintType("value", "char_string", "char_string"));
+ VerifyOrReturn(CheckConstraintMaxLength("value", value, 32));
+ if (NodeLabelValueBuffer != nullptr)
+ {
+ chip::Platform::MemoryFree(NodeLabelValueBuffer);
+ }
+ NodeLabelValueBuffer = static_cast<char *>(chip::Platform::MemoryAlloc(value.size()));
+ memcpy(NodeLabelValueBuffer, value.data(), value.size());
+ NodeLabelValue = chip::CharSpan(NodeLabelValueBuffer, value.size());
+ }
+ break;
+ case 12:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ shouldContinue = true;
+ break;
+ case 13:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ shouldContinue = true;
+ break;
+ case 14:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ uint16_t value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckConstraintType("value", "int16u", "int16u"));
+ VerifyOrReturn(CheckConstraintMinValue("value", value, 0U));
+ VerifyOrReturn(CheckConstraintMaxValue("value", value, 65534U));
+ HardwareVersionValue = value;
+ }
+ break;
+ case 15:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), EMBER_ZCL_STATUS_UNSUPPORTED_WRITE));
+ break;
+ case 16:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ uint16_t value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckValue("hardwareVersion", value, HardwareVersionValue));
+ }
+ break;
+ case 17:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::CharSpan value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckConstraintType("value", "char_string", "char_string"));
+ VerifyOrReturn(CheckConstraintMinLength("value", value, 1));
+ VerifyOrReturn(CheckConstraintMaxLength("value", value, 64));
+ if (HardwareVersionStringValueBuffer != nullptr)
+ {
+ chip::Platform::MemoryFree(HardwareVersionStringValueBuffer);
+ }
+ HardwareVersionStringValueBuffer = static_cast<char *>(chip::Platform::MemoryAlloc(value.size()));
+ memcpy(HardwareVersionStringValueBuffer, value.data(), value.size());
+ HardwareVersionStringValue = chip::CharSpan(HardwareVersionStringValueBuffer, value.size());
+ }
+ break;
+ case 18:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), EMBER_ZCL_STATUS_UNSUPPORTED_WRITE));
+ break;
+ case 19:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::CharSpan value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckValueAsString("hardwareVersionString", value, HardwareVersionStringValue));
+ }
+ break;
+ case 20:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ uint32_t value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckConstraintMinValue("value", value, 0UL));
+ VerifyOrReturn(CheckConstraintMaxValue("value", value, 4294967294UL));
+ SoftwareVersionValue = value;
+ }
+ break;
+ case 21:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), EMBER_ZCL_STATUS_UNSUPPORTED_WRITE));
+ break;
+ case 22:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ uint32_t value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckValue("softwareVersion", value, SoftwareVersionValue));
+ }
+ break;
+ case 23:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::CharSpan value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckConstraintMinLength("value", value, 1));
+ VerifyOrReturn(CheckConstraintMaxLength("value", value, 64));
+ if (SoftwareVersionStringValueBuffer != nullptr)
+ {
+ chip::Platform::MemoryFree(SoftwareVersionStringValueBuffer);
+ }
+ SoftwareVersionStringValueBuffer = static_cast<char *>(chip::Platform::MemoryAlloc(value.size()));
+ memcpy(SoftwareVersionStringValueBuffer, value.data(), value.size());
+ SoftwareVersionStringValue = chip::CharSpan(SoftwareVersionStringValueBuffer, value.size());
+ }
+ break;
+ case 24:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), EMBER_ZCL_STATUS_UNSUPPORTED_WRITE));
+ break;
+ case 25:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::CharSpan value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckValueAsString("softwareVersionString", value, SoftwareVersionStringValue));
+ }
+ break;
+ case 26:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::CharSpan value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckConstraintType("value", "char_string", "char_string"));
+ VerifyOrReturn(CheckConstraintMinLength("value", value, 8));
+ VerifyOrReturn(CheckConstraintMaxLength("value", value, 16));
+ if (ManufacturingDateValueBuffer != nullptr)
+ {
+ chip::Platform::MemoryFree(ManufacturingDateValueBuffer);
+ }
+ ManufacturingDateValueBuffer = static_cast<char *>(chip::Platform::MemoryAlloc(value.size()));
+ memcpy(ManufacturingDateValueBuffer, value.data(), value.size());
+ ManufacturingDateValue = chip::CharSpan(ManufacturingDateValueBuffer, value.size());
+ }
+ break;
+ case 27:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ shouldContinue = true;
+ break;
+ case 28:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), EMBER_ZCL_STATUS_UNSUPPORTED_WRITE));
+ break;
+ case 29:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::CharSpan value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckValueAsString("manufacturingDate", value, ManufacturingDateValue));
+ }
+ break;
+ case 30:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::CharSpan value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckConstraintType("value", "char_string", "char_string"));
+ VerifyOrReturn(CheckConstraintMaxLength("value", value, 32));
+ if (PartNumberValueBuffer != nullptr)
+ {
+ chip::Platform::MemoryFree(PartNumberValueBuffer);
+ }
+ PartNumberValueBuffer = static_cast<char *>(chip::Platform::MemoryAlloc(value.size()));
+ memcpy(PartNumberValueBuffer, value.data(), value.size());
+ PartNumberValue = chip::CharSpan(PartNumberValueBuffer, value.size());
+ }
+ break;
+ case 31:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), EMBER_ZCL_STATUS_UNSUPPORTED_WRITE));
+ break;
+ case 32:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::CharSpan value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckValueAsString("partNumber", value, PartNumberValue));
+ }
+ break;
+ case 33:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::CharSpan value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckConstraintType("value", "long_char_string", "long_char_string"));
+ VerifyOrReturn(CheckConstraintMaxLength("value", value, 256));
+ if (ProductURLValueBuffer != nullptr)
+ {
+ chip::Platform::MemoryFree(ProductURLValueBuffer);
+ }
+ ProductURLValueBuffer = static_cast<char *>(chip::Platform::MemoryAlloc(value.size()));
+ memcpy(ProductURLValueBuffer, value.data(), value.size());
+ ProductURLValue = chip::CharSpan(ProductURLValueBuffer, value.size());
+ }
+ break;
+ case 34:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ shouldContinue = true;
+ break;
+ case 35:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), EMBER_ZCL_STATUS_UNSUPPORTED_WRITE));
+ break;
+ case 36:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::CharSpan value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckValueAsString("productURL", value, ProductURLValue));
+ }
+ break;
+ case 37:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::CharSpan value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckConstraintType("value", "char_string", "char_string"));
+ VerifyOrReturn(CheckConstraintMaxLength("value", value, 64));
+ if (ProductLabelValueBuffer != nullptr)
+ {
+ chip::Platform::MemoryFree(ProductLabelValueBuffer);
+ }
+ ProductLabelValueBuffer = static_cast<char *>(chip::Platform::MemoryAlloc(value.size()));
+ memcpy(ProductLabelValueBuffer, value.data(), value.size());
+ ProductLabelValue = chip::CharSpan(ProductLabelValueBuffer, value.size());
+ }
+ break;
+ case 38:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ shouldContinue = true;
+ break;
+ case 39:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), EMBER_ZCL_STATUS_UNSUPPORTED_WRITE));
+ break;
+ case 40:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::CharSpan value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckValueAsString("productLabel", value, ProductLabelValue));
+ }
+ break;
+ case 41:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::CharSpan value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckConstraintType("value", "char_string", "char_string"));
+ VerifyOrReturn(CheckConstraintMaxLength("value", value, 32));
+ if (SerialNumberValueBuffer != nullptr)
+ {
+ chip::Platform::MemoryFree(SerialNumberValueBuffer);
+ }
+ SerialNumberValueBuffer = static_cast<char *>(chip::Platform::MemoryAlloc(value.size()));
+ memcpy(SerialNumberValueBuffer, value.data(), value.size());
+ SerialNumberValue = chip::CharSpan(SerialNumberValueBuffer, value.size());
+ }
+ break;
+ case 42:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), EMBER_ZCL_STATUS_UNSUPPORTED_WRITE));
+ break;
+ case 43:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::CharSpan value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckValueAsString("serialNumber", value, SerialNumberValue));
+ }
+ break;
+ case 44:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ bool value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckValue("reachable", value, true));
+ VerifyOrReturn(CheckConstraintType("value", "boolean", "boolean"));
+ }
+ break;
+ case 45:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), EMBER_ZCL_STATUS_UNSUPPORTED_WRITE));
+ break;
+ case 46:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ bool value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckValue("reachable", value, true));
+ VerifyOrReturn(CheckConstraintType("value", "boolean", "boolean"));
+ }
+ break;
+ case 47:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::CharSpan value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckConstraintType("value", "char_string", "char_string"));
+ VerifyOrReturn(CheckConstraintMaxLength("value", value, 32));
+ if (UniqueIDValueBuffer != nullptr)
+ {
+ chip::Platform::MemoryFree(UniqueIDValueBuffer);
+ }
+ UniqueIDValueBuffer = static_cast<char *>(chip::Platform::MemoryAlloc(value.size()));
+ memcpy(UniqueIDValueBuffer, value.data(), value.size());
+ UniqueIDValue = chip::CharSpan(UniqueIDValueBuffer, value.size());
+ }
+ break;
+ case 48:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), EMBER_ZCL_STATUS_UNSUPPORTED_WRITE));
+ break;
+ case 49:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::CharSpan value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckValueAsString("uniqueID", value, UniqueIDValue));
+ }
+ break;
+ default:
+ LogErrorOnFailure(ContinueOnChipMainThread(CHIP_ERROR_INVALID_ARGUMENT));
+ }
+
+ if (shouldContinue)
+ {
+ ContinueOnChipMainThread(CHIP_NO_ERROR);
+ }
+ }
+
+ CHIP_ERROR DoTestStep(uint16_t testIndex) override
+ {
+ using namespace chip::app::Clusters;
+ switch (testIndex)
+ {
+ case 0: {
+ LogStep(0, "Wait for the commissioned device to be retrieved");
+ ListFreer listFreer;
+ chip::app::Clusters::DelayCommands::Commands::WaitForCommissionee::Type value;
+ value.nodeId = mNodeId.HasValue() ? mNodeId.Value() : 305414945ULL;
+ return WaitForCommissionee(kIdentityAlpha, value);
+ }
+ case 1: {
+ LogStep(1, "TH reads VendorName from the DUT.");
+ VerifyOrDo(!ShouldSkip("BRBINFO.S.A0001"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return ReadAttribute(kIdentityAlpha, GetEndpoint(3), BridgedDeviceBasic::Id,
+ BridgedDeviceBasic::Attributes::VendorName::Id, true, chip::NullOptional);
+ }
+ case 2: {
+ LogStep(2, "TH writes VendorName from the DUT.");
+ VerifyOrDo(!ShouldSkip("BRBINFO.S.A0001"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ ListFreer listFreer;
+ chip::CharSpan value;
+ value = chip::Span<const char>("samplegarbage: not in length on purpose", 6);
+ return WriteAttribute(kIdentityAlpha, GetEndpoint(3), BridgedDeviceBasic::Id,
+ BridgedDeviceBasic::Attributes::VendorName::Id, value, chip::NullOptional, chip::NullOptional);
+ }
+ case 3: {
+ LogStep(3, "TH reads VendorName from the DUT.");
+ VerifyOrDo(!ShouldSkip("BRBINFO.S.A0001"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return ReadAttribute(kIdentityAlpha, GetEndpoint(3), BridgedDeviceBasic::Id,
+ BridgedDeviceBasic::Attributes::VendorName::Id, true, chip::NullOptional);
+ }
+ case 4: {
+ LogStep(4, "TH reads VendorID from the DUT.");
+ VerifyOrDo(!ShouldSkip("BRBINFO.S.A0002"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return ReadAttribute(kIdentityAlpha, GetEndpoint(3), BridgedDeviceBasic::Id,
+ BridgedDeviceBasic::Attributes::VendorID::Id, true, chip::NullOptional);
+ }
+ case 5: {
+ LogStep(5, "Verify that VendorID matches the value assigned to this manufacturer");
+ VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT && BRBINFO.S.A0002"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ ListFreer listFreer;
+ chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value;
+ value.message = chip::Span<const char>("Please enter 'y' for successgarbage: not in length on purpose", 28);
+ value.expectedValue.Emplace();
+ value.expectedValue.Value() = chip::Span<const char>("ygarbage: not in length on purpose", 1);
+ return UserPrompt(kIdentityAlpha, value);
+ }
+ case 6: {
+ LogStep(6, "TH writes VendorID from the DUT.");
+ VerifyOrDo(!ShouldSkip("BRBINFO.S.A0002"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ ListFreer listFreer;
+ chip::VendorId value;
+ value = static_cast<chip::VendorId>(17);
+ return WriteAttribute(kIdentityAlpha, GetEndpoint(3), BridgedDeviceBasic::Id,
+ BridgedDeviceBasic::Attributes::VendorID::Id, value, chip::NullOptional, chip::NullOptional);
+ }
+ case 7: {
+ LogStep(7, "TH reads VendorID from the DUT.");
+ VerifyOrDo(!ShouldSkip("BRBINFO.S.A0002"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return ReadAttribute(kIdentityAlpha, GetEndpoint(3), BridgedDeviceBasic::Id,
+ BridgedDeviceBasic::Attributes::VendorID::Id, true, chip::NullOptional);
+ }
+ case 8: {
+ LogStep(8, "TH reads ProductName from the DUT");
+ VerifyOrDo(!ShouldSkip("BRBINFO.S.A0003"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return ReadAttribute(kIdentityAlpha, GetEndpoint(3), BridgedDeviceBasic::Id,
+ BridgedDeviceBasic::Attributes::ProductName::Id, true, chip::NullOptional);
+ }
+ case 9: {
+ LogStep(9, "TH writes ProductName from the DUT.");
+ VerifyOrDo(!ShouldSkip("BRBINFO.S.A0003"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ ListFreer listFreer;
+ chip::CharSpan value;
+ value = chip::Span<const char>("newproductgarbage: not in length on purpose", 10);
+ return WriteAttribute(kIdentityAlpha, GetEndpoint(3), BridgedDeviceBasic::Id,
+ BridgedDeviceBasic::Attributes::ProductName::Id, value, chip::NullOptional, chip::NullOptional);
+ }
+ case 10: {
+ LogStep(10, "TH reads ProductName from the DUT");
+ VerifyOrDo(!ShouldSkip("BRBINFO.S.A0003"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return ReadAttribute(kIdentityAlpha, GetEndpoint(3), BridgedDeviceBasic::Id,
+ BridgedDeviceBasic::Attributes::ProductName::Id, true, chip::NullOptional);
+ }
+ case 11: {
+ LogStep(11, "TH reads NodeLabel from the DUT");
+ VerifyOrDo(!ShouldSkip("BRBINFO.S.A0005"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return ReadAttribute(kIdentityAlpha, GetEndpoint(3), BridgedDeviceBasic::Id,
+ BridgedDeviceBasic::Attributes::NodeLabel::Id, true, chip::NullOptional);
+ }
+ case 12: {
+ LogStep(12, "TH writes NodeLabel from the DUT.");
+ VerifyOrDo(!ShouldSkip("BRBINFO.S.A0005 && PICS_USER_PROMPT"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ ListFreer listFreer;
+ chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value;
+ value.message = chip::Span<const char>("Please enter 'y' after successgarbage: not in length on purpose", 30);
+ value.expectedValue.Emplace();
+ value.expectedValue.Value() = chip::Span<const char>("ygarbage: not in length on purpose", 1);
+ return UserPrompt(kIdentityAlpha, value);
+ }
+ case 13: {
+ LogStep(13, "TH reads NodeLabel from the DUT");
+ VerifyOrDo(!ShouldSkip("BRBINFO.S.A0005 && PICS_USER_PROMPT"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ ListFreer listFreer;
+ chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value;
+ value.message = chip::Span<const char>("Please enter 'y' after successgarbage: not in length on purpose", 30);
+ value.expectedValue.Emplace();
+ value.expectedValue.Value() = chip::Span<const char>("ygarbage: not in length on purpose", 1);
+ return UserPrompt(kIdentityAlpha, value);
+ }
+ case 14: {
+ LogStep(14, "TH reads HardwareVersion from the DUT");
+ VerifyOrDo(!ShouldSkip("BRBINFO.S.A0007"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return ReadAttribute(kIdentityAlpha, GetEndpoint(3), BridgedDeviceBasic::Id,
+ BridgedDeviceBasic::Attributes::HardwareVersion::Id, true, chip::NullOptional);
+ }
+ case 15: {
+ LogStep(15, "TH writes HardwareVersion from the DUT.");
+ VerifyOrDo(!ShouldSkip("BRBINFO.S.A0007"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ ListFreer listFreer;
+ uint16_t value;
+ value = 17713U;
+ return WriteAttribute(kIdentityAlpha, GetEndpoint(3), BridgedDeviceBasic::Id,
+ BridgedDeviceBasic::Attributes::HardwareVersion::Id, value, chip::NullOptional,
+ chip::NullOptional);
+ }
+ case 16: {
+ LogStep(16, "TH reads HardwareVersion from the DUT");
+ VerifyOrDo(!ShouldSkip("BRBINFO.S.A0007"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return ReadAttribute(kIdentityAlpha, GetEndpoint(3), BridgedDeviceBasic::Id,
+ BridgedDeviceBasic::Attributes::HardwareVersion::Id, true, chip::NullOptional);
+ }
+ case 17: {
+ LogStep(17, "TH reads HardwareVersionString from the DUT.");
+ VerifyOrDo(!ShouldSkip("BRBINFO.S.A0008"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return ReadAttribute(kIdentityAlpha, GetEndpoint(3), BridgedDeviceBasic::Id,
+ BridgedDeviceBasic::Attributes::HardwareVersionString::Id, true, chip::NullOptional);
+ }
+ case 18: {
+ LogStep(18, "TH writes HardwareVersionString from the DUT.");
+ VerifyOrDo(!ShouldSkip("BRBINFO.S.A0008"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ ListFreer listFreer;
+ chip::CharSpan value;
+ value = chip::Span<const char>("newhardwareversiongarbage: not in length on purpose", 18);
+ return WriteAttribute(kIdentityAlpha, GetEndpoint(3), BridgedDeviceBasic::Id,
+ BridgedDeviceBasic::Attributes::HardwareVersionString::Id, value, chip::NullOptional,
+ chip::NullOptional);
+ }
+ case 19: {
+ LogStep(19, "TH reads HardwareVersionString from the DUT.");
+ VerifyOrDo(!ShouldSkip("BRBINFO.S.A0008"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return ReadAttribute(kIdentityAlpha, GetEndpoint(3), BridgedDeviceBasic::Id,
+ BridgedDeviceBasic::Attributes::HardwareVersionString::Id, true, chip::NullOptional);
+ }
+ case 20: {
+ LogStep(20, "TH reads SoftwareVersion from the DUT");
+ VerifyOrDo(!ShouldSkip("BRBINFO.S.A0009"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return ReadAttribute(kIdentityAlpha, GetEndpoint(3), BridgedDeviceBasic::Id,
+ BridgedDeviceBasic::Attributes::SoftwareVersion::Id, true, chip::NullOptional);
+ }
+ case 21: {
+ LogStep(21, "TH writes SoftwareVersion from the DUT.");
+ VerifyOrDo(!ShouldSkip("BRBINFO.S.A0009"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ ListFreer listFreer;
+ uint32_t value;
+ value = 33299UL;
+ return WriteAttribute(kIdentityAlpha, GetEndpoint(3), BridgedDeviceBasic::Id,
+ BridgedDeviceBasic::Attributes::SoftwareVersion::Id, value, chip::NullOptional,
+ chip::NullOptional);
+ }
+ case 22: {
+ LogStep(22, "TH reads SoftwareVersion from the DUT");
+ VerifyOrDo(!ShouldSkip("BRBINFO.S.A0009"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return ReadAttribute(kIdentityAlpha, GetEndpoint(3), BridgedDeviceBasic::Id,
+ BridgedDeviceBasic::Attributes::SoftwareVersion::Id, true, chip::NullOptional);
+ }
+ case 23: {
+ LogStep(23, "TH reads SoftwareVersionString from the DUT");
+ VerifyOrDo(!ShouldSkip("BRBINFO.S.A000a"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return ReadAttribute(kIdentityAlpha, GetEndpoint(3), BridgedDeviceBasic::Id,
+ BridgedDeviceBasic::Attributes::SoftwareVersionString::Id, true, chip::NullOptional);
+ }
+ case 24: {
+ LogStep(24, "TH writes SoftwareVersionString from the DUT.");
+ VerifyOrDo(!ShouldSkip("BRBINFO.S.A000a"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ ListFreer listFreer;
+ chip::CharSpan value;
+ value = chip::Span<const char>("1.0garbage: not in length on purpose", 3);
+ return WriteAttribute(kIdentityAlpha, GetEndpoint(3), BridgedDeviceBasic::Id,
+ BridgedDeviceBasic::Attributes::SoftwareVersionString::Id, value, chip::NullOptional,
+ chip::NullOptional);
+ }
+ case 25: {
+ LogStep(25, "TH reads SoftwareVersionString from the DUT");
+ VerifyOrDo(!ShouldSkip("BRBINFO.S.A000a"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return ReadAttribute(kIdentityAlpha, GetEndpoint(3), BridgedDeviceBasic::Id,
+ BridgedDeviceBasic::Attributes::SoftwareVersionString::Id, true, chip::NullOptional);
+ }
+ case 26: {
+ LogStep(26, "TH reads ManufacturingDate from the DUT.");
+ VerifyOrDo(!ShouldSkip("BRBINFO.S.A000b"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return ReadAttribute(kIdentityAlpha, GetEndpoint(3), BridgedDeviceBasic::Id,
+ BridgedDeviceBasic::Attributes::ManufacturingDate::Id, true, chip::NullOptional);
+ }
+ case 27: {
+ LogStep(27, "Verify if the first 8 characters specify date according to ISO 8601, i.e, YYYYMMDD.");
+ VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT && BRBINFO.S.A000b"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ ListFreer listFreer;
+ chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value;
+ value.message = chip::Span<const char>("Please enter 'y' for successgarbage: not in length on purpose", 28);
+ value.expectedValue.Emplace();
+ value.expectedValue.Value() = chip::Span<const char>("ygarbage: not in length on purpose", 1);
+ return UserPrompt(kIdentityAlpha, value);
+ }
+ case 28: {
+ LogStep(28, "TH writes ManufacturingDate from the DUT.");
+ VerifyOrDo(!ShouldSkip("BRBINFO.S.A000b"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ ListFreer listFreer;
+ chip::CharSpan value;
+ value = chip::Span<const char>("20210814789452INgarbage: not in length on purpose", 16);
+ return WriteAttribute(kIdentityAlpha, GetEndpoint(3), BridgedDeviceBasic::Id,
+ BridgedDeviceBasic::Attributes::ManufacturingDate::Id, value, chip::NullOptional,
+ chip::NullOptional);
+ }
+ case 29: {
+ LogStep(29, "TH reads ManufacturingDate from the DUT.");
+ VerifyOrDo(!ShouldSkip("BRBINFO.S.A000b"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return ReadAttribute(kIdentityAlpha, GetEndpoint(3), BridgedDeviceBasic::Id,
+ BridgedDeviceBasic::Attributes::ManufacturingDate::Id, true, chip::NullOptional);
+ }
+ case 30: {
+ LogStep(30, "TH reads PartNumber from the DUT");
+ VerifyOrDo(!ShouldSkip("BRBINFO.S.A000c"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return ReadAttribute(kIdentityAlpha, GetEndpoint(3), BridgedDeviceBasic::Id,
+ BridgedDeviceBasic::Attributes::PartNumber::Id, true, chip::NullOptional);
+ }
+ case 31: {
+ LogStep(31, "TH writes PartNumber from the DUT.");
+ VerifyOrDo(!ShouldSkip("BRBINFO.S.A000c"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ ListFreer listFreer;
+ chip::CharSpan value;
+ value = chip::Span<const char>("newpartgarbage: not in length on purpose", 7);
+ return WriteAttribute(kIdentityAlpha, GetEndpoint(3), BridgedDeviceBasic::Id,
+ BridgedDeviceBasic::Attributes::PartNumber::Id, value, chip::NullOptional, chip::NullOptional);
+ }
+ case 32: {
+ LogStep(32, "TH reads PartNumber from the DUT");
+ VerifyOrDo(!ShouldSkip("BRBINFO.S.A000c"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return ReadAttribute(kIdentityAlpha, GetEndpoint(3), BridgedDeviceBasic::Id,
+ BridgedDeviceBasic::Attributes::PartNumber::Id, true, chip::NullOptional);
+ }
+ case 33: {
+ LogStep(33, "TH reads ProductURL from the DUT");
+ VerifyOrDo(!ShouldSkip("BRBINFO.S.A000d"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return ReadAttribute(kIdentityAlpha, GetEndpoint(3), BridgedDeviceBasic::Id,
+ BridgedDeviceBasic::Attributes::ProductURL::Id, true, chip::NullOptional);
+ }
+ case 34: {
+ LogStep(34,
+ "Verify that it specifies a link to a specific web page, Verify that it follows the syntax rules specified in "
+ "RFC 3986.");
+ VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT && BRBINFO.S.A000d"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ ListFreer listFreer;
+ chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value;
+ value.message = chip::Span<const char>("Please enter 'y' for successgarbage: not in length on purpose", 28);
+ value.expectedValue.Emplace();
+ value.expectedValue.Value() = chip::Span<const char>("ygarbage: not in length on purpose", 1);
+ return UserPrompt(kIdentityAlpha, value);
+ }
+ case 35: {
+ LogStep(35, "TH writes ProductURL from the DUT.");
+ VerifyOrDo(!ShouldSkip("BRBINFO.S.A000d"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ ListFreer listFreer;
+ chip::CharSpan value;
+ value = chip::Span<const char>("https://www.example.comgarbage: not in length on purpose", 23);
+ return WriteAttribute(kIdentityAlpha, GetEndpoint(3), BridgedDeviceBasic::Id,
+ BridgedDeviceBasic::Attributes::ProductURL::Id, value, chip::NullOptional, chip::NullOptional);
+ }
+ case 36: {
+ LogStep(36, "TH reads ProductURL from the DUT");
+ VerifyOrDo(!ShouldSkip("BRBINFO.S.A000d"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return ReadAttribute(kIdentityAlpha, GetEndpoint(3), BridgedDeviceBasic::Id,
+ BridgedDeviceBasic::Attributes::ProductURL::Id, true, chip::NullOptional);
+ }
+ case 37: {
+ LogStep(37, "TH reads ProductLabel from the DUT.");
+ VerifyOrDo(!ShouldSkip("BRBINFO.S.A000e"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return ReadAttribute(kIdentityAlpha, GetEndpoint(3), BridgedDeviceBasic::Id,
+ BridgedDeviceBasic::Attributes::ProductLabel::Id, true, chip::NullOptional);
+ }
+ case 38: {
+ LogStep(38, "Verify that it does not include the name of the vendor as defined within the VendorName attribute");
+ VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT && BRBINFO.S.A000e"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ ListFreer listFreer;
+ chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value;
+ value.message = chip::Span<const char>("Please enter 'y' for successgarbage: not in length on purpose", 28);
+ value.expectedValue.Emplace();
+ value.expectedValue.Value() = chip::Span<const char>("ygarbage: not in length on purpose", 1);
+ return UserPrompt(kIdentityAlpha, value);
+ }
+ case 39: {
+ LogStep(39, "TH writes ProductLabel from the DUT.");
+ VerifyOrDo(!ShouldSkip("BRBINFO.S.A000e"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ ListFreer listFreer;
+ chip::CharSpan value;
+ value = chip::Span<const char>("newproductlabelgarbage: not in length on purpose", 15);
+ return WriteAttribute(kIdentityAlpha, GetEndpoint(3), BridgedDeviceBasic::Id,
+ BridgedDeviceBasic::Attributes::ProductLabel::Id, value, chip::NullOptional, chip::NullOptional);
+ }
+ case 40: {
+ LogStep(40, "TH reads ProductLabel from the DUT.");
+ VerifyOrDo(!ShouldSkip("BRBINFO.S.A000e"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return ReadAttribute(kIdentityAlpha, GetEndpoint(3), BridgedDeviceBasic::Id,
+ BridgedDeviceBasic::Attributes::ProductLabel::Id, true, chip::NullOptional);
+ }
+ case 41: {
+ LogStep(41, "TH reads SerialNumber from the DUT.");
+ VerifyOrDo(!ShouldSkip("BRBINFO.S.A000f"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return ReadAttribute(kIdentityAlpha, GetEndpoint(3), BridgedDeviceBasic::Id,
+ BridgedDeviceBasic::Attributes::SerialNumber::Id, true, chip::NullOptional);
+ }
+ case 42: {
+ LogStep(42, "TH writes SerialNumber from the DUT.");
+ VerifyOrDo(!ShouldSkip("BRBINFO.S.A000f"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ ListFreer listFreer;
+ chip::CharSpan value;
+ value = chip::Span<const char>("newserialnumbergarbage: not in length on purpose", 15);
+ return WriteAttribute(kIdentityAlpha, GetEndpoint(3), BridgedDeviceBasic::Id,
+ BridgedDeviceBasic::Attributes::SerialNumber::Id, value, chip::NullOptional, chip::NullOptional);
+ }
+ case 43: {
+ LogStep(43, "TH reads SerialNumber from the DUT.");
+ VerifyOrDo(!ShouldSkip("BRBINFO.S.A000f"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return ReadAttribute(kIdentityAlpha, GetEndpoint(3), BridgedDeviceBasic::Id,
+ BridgedDeviceBasic::Attributes::SerialNumber::Id, true, chip::NullOptional);
+ }
+ case 44: {
+ LogStep(44, "TH reads Reachable from the DUT.");
+ VerifyOrDo(!ShouldSkip("BRBINFO.S.A0011"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return ReadAttribute(kIdentityAlpha, GetEndpoint(3), BridgedDeviceBasic::Id,
+ BridgedDeviceBasic::Attributes::Reachable::Id, true, chip::NullOptional);
+ }
+ case 45: {
+ LogStep(45, "TH sends Write request message to DUT to change value of Reachable to false");
+ VerifyOrDo(!ShouldSkip("BRBINFO.S.A0011"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ ListFreer listFreer;
+ bool value;
+ value = false;
+ return WriteAttribute(kIdentityAlpha, GetEndpoint(3), BridgedDeviceBasic::Id,
+ BridgedDeviceBasic::Attributes::Reachable::Id, value, chip::NullOptional, chip::NullOptional);
+ }
+ case 46: {
+ LogStep(46, "TH reads Reachable from the DUT.");
+ VerifyOrDo(!ShouldSkip("BRBINFO.S.A0011"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return ReadAttribute(kIdentityAlpha, GetEndpoint(3), BridgedDeviceBasic::Id,
+ BridgedDeviceBasic::Attributes::Reachable::Id, true, chip::NullOptional);
+ }
+ case 47: {
+ LogStep(47, "TH reads UniqueID from the DUT.");
+ VerifyOrDo(!ShouldSkip("BRBINFO.S.A0012"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return ReadAttribute(kIdentityAlpha, GetEndpoint(3), BridgedDeviceBasic::Id,
+ BridgedDeviceBasic::Attributes::UniqueID::Id, true, chip::NullOptional);
+ }
+ case 48: {
+ LogStep(48, "TH writes UniqueID from the DUT.");
+ VerifyOrDo(!ShouldSkip("BRBINFO.S.A0012"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ ListFreer listFreer;
+ chip::CharSpan value;
+ value = chip::Span<const char>("newidgarbage: not in length on purpose", 5);
+ return WriteAttribute(kIdentityAlpha, GetEndpoint(3), BridgedDeviceBasic::Id,
+ BridgedDeviceBasic::Attributes::UniqueID::Id, value, chip::NullOptional, chip::NullOptional);
+ }
+ case 49: {
+ LogStep(49, "TH reads UniqueID from the DUT.");
+ VerifyOrDo(!ShouldSkip("BRBINFO.S.A0012"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return ReadAttribute(kIdentityAlpha, GetEndpoint(3), BridgedDeviceBasic::Id,
+ BridgedDeviceBasic::Attributes::UniqueID::Id, true, chip::NullOptional);
+ }
+ }
+ return CHIP_NO_ERROR;
+ }
+};
+
class Test_TC_ACT_1_1Suite : public TestCommand
{
public:
@@ -13446,7 +15331,7 @@
class Test_TC_CNET_1_3Suite : public TestCommand
{
public:
- Test_TC_CNET_1_3Suite(CredentialIssuerCommands * credsIssuerConfig) : TestCommand("Test_TC_CNET_1_3", 0, credsIssuerConfig)
+ Test_TC_CNET_1_3Suite(CredentialIssuerCommands * credsIssuerConfig) : TestCommand("Test_TC_CNET_1_3", 16, credsIssuerConfig)
{
AddArgument("nodeId", 0, UINT64_MAX, &mNodeId);
AddArgument("cluster", &mCluster);
@@ -13479,6 +15364,159 @@
switch (mTestIndex - 1)
{
+ case 0:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ shouldContinue = true;
+ break;
+ case 1:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ uint16_t value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckValue("clusterRevision", value, 1U));
+ VerifyOrReturn(CheckConstraintType("value", "int16u", "int16u"));
+ }
+ break;
+ case 2:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ uint32_t value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckValue("featureMap", value, 0UL));
+ }
+ break;
+ case 3:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ uint32_t value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckValue("featureMap", value, 1UL));
+ }
+ break;
+ case 4:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ uint32_t value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckValue("featureMap", value, 2UL));
+ }
+ break;
+ case 5:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ uint32_t value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckValue("featureMap", value, 4UL));
+ }
+ break;
+ case 6:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::app::DataModel::DecodableList<chip::AttributeId> value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckConstraintType("value", "list", "list"));
+ VerifyOrReturn(CheckConstraintContains("value", value, 65528UL));
+ VerifyOrReturn(CheckConstraintContains("value", value, 65529UL));
+ VerifyOrReturn(CheckConstraintContains("value", value, 65531UL));
+ VerifyOrReturn(CheckConstraintContains("value", value, 65532UL));
+ VerifyOrReturn(CheckConstraintContains("value", value, 65533UL));
+ }
+ break;
+ case 7:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::app::DataModel::DecodableList<chip::AttributeId> value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckConstraintType("value", "list", "list"));
+ VerifyOrReturn(CheckConstraintContains("value", value, 0UL));
+ VerifyOrReturn(CheckConstraintContains("value", value, 1UL));
+ VerifyOrReturn(CheckConstraintContains("value", value, 4UL));
+ VerifyOrReturn(CheckConstraintContains("value", value, 5UL));
+ VerifyOrReturn(CheckConstraintContains("value", value, 6UL));
+ VerifyOrReturn(CheckConstraintContains("value", value, 7UL));
+ }
+ break;
+ case 8:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::app::DataModel::DecodableList<chip::AttributeId> value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckConstraintType("value", "list", "list"));
+ VerifyOrReturn(CheckConstraintContains("value", value, 2UL));
+ }
+ break;
+ case 9:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::app::DataModel::DecodableList<chip::AttributeId> value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckConstraintType("value", "list", "list"));
+ VerifyOrReturn(CheckConstraintContains("value", value, 3UL));
+ }
+ break;
+ case 10:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::app::DataModel::DecodableList<chip::CommandId> value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckConstraintType("value", "list", "list"));
+ VerifyOrReturn(CheckConstraintContains("value", value, 0UL));
+ VerifyOrReturn(CheckConstraintContains("value", value, 4UL));
+ VerifyOrReturn(CheckConstraintContains("value", value, 6UL));
+ VerifyOrReturn(CheckConstraintContains("value", value, 8UL));
+ }
+ break;
+ case 11:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::app::DataModel::DecodableList<chip::CommandId> value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckConstraintType("value", "list", "list"));
+ VerifyOrReturn(CheckConstraintContains("value", value, 2UL));
+ }
+ break;
+ case 12:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::app::DataModel::DecodableList<chip::CommandId> value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckConstraintType("value", "list", "list"));
+ VerifyOrReturn(CheckConstraintContains("value", value, 3UL));
+ }
+ break;
+ case 13:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::app::DataModel::DecodableList<chip::CommandId> value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ {
+ auto iter_0 = value.begin();
+ VerifyOrReturn(CheckNoMoreListItems<decltype(value)>("acceptedCommandList", iter_0, 0));
+ }
+ }
+ break;
+ case 14:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::app::DataModel::DecodableList<chip::CommandId> value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckConstraintType("value", "list", "list"));
+ VerifyOrReturn(CheckConstraintContains("value", value, 1UL));
+ VerifyOrReturn(CheckConstraintContains("value", value, 5UL));
+ VerifyOrReturn(CheckConstraintContains("value", value, 7UL));
+ }
+ break;
+ case 15:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::app::DataModel::DecodableList<chip::CommandId> value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ {
+ auto iter_0 = value.begin();
+ VerifyOrReturn(CheckNoMoreListItems<decltype(value)>("generatedCommandList", iter_0, 0));
+ }
+ }
+ break;
default:
LogErrorOnFailure(ContinueOnChipMainThread(CHIP_ERROR_INVALID_ARGUMENT));
}
@@ -13494,6 +15532,103 @@
using namespace chip::app::Clusters;
switch (testIndex)
{
+ case 0: {
+ LogStep(0, "Wait for the commissioned device to be retrieved");
+ ListFreer listFreer;
+ chip::app::Clusters::DelayCommands::Commands::WaitForCommissionee::Type value;
+ value.nodeId = mNodeId.HasValue() ? mNodeId.Value() : 305414945ULL;
+ return WaitForCommissionee(kIdentityAlpha, value);
+ }
+ case 1: {
+ LogStep(1, "Read the global attribute: ClusterRevision");
+ return ReadAttribute(kIdentityAlpha, GetEndpoint(0), NetworkCommissioning::Id,
+ NetworkCommissioning::Attributes::ClusterRevision::Id, true, chip::NullOptional);
+ }
+ case 2: {
+ LogStep(2, "Read the global attribute: FeatureMap");
+ VerifyOrDo(!ShouldSkip(" !CNET.S.F00 && !CNET.S.F01 && !CNET.S.F02 "), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return ReadAttribute(kIdentityAlpha, GetEndpoint(0), NetworkCommissioning::Id,
+ NetworkCommissioning::Attributes::FeatureMap::Id, true, chip::NullOptional);
+ }
+ case 3: {
+ LogStep(3, "Read the global attribute: FeatureMap when CNET.S.F00 is set");
+ VerifyOrDo(!ShouldSkip("CNET.S.F00"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return ReadAttribute(kIdentityAlpha, GetEndpoint(0), NetworkCommissioning::Id,
+ NetworkCommissioning::Attributes::FeatureMap::Id, true, chip::NullOptional);
+ }
+ case 4: {
+ LogStep(4, "Read the global attribute: FeatureMap when CNET.S.F01 is set");
+ VerifyOrDo(!ShouldSkip("CNET.S.F01"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return ReadAttribute(kIdentityAlpha, GetEndpoint(0), NetworkCommissioning::Id,
+ NetworkCommissioning::Attributes::FeatureMap::Id, true, chip::NullOptional);
+ }
+ case 5: {
+ LogStep(5, "Read the global attribute: FeatureMap when CNET.S.F02 is set");
+ VerifyOrDo(!ShouldSkip("CNET.S.F02"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return ReadAttribute(kIdentityAlpha, GetEndpoint(0), NetworkCommissioning::Id,
+ NetworkCommissioning::Attributes::FeatureMap::Id, true, chip::NullOptional);
+ }
+ case 6: {
+ LogStep(6, "Read the global attribute: AttributeList");
+ return ReadAttribute(kIdentityAlpha, GetEndpoint(0), NetworkCommissioning::Id,
+ NetworkCommissioning::Attributes::AttributeList::Id, true, chip::NullOptional);
+ }
+ case 7: {
+ LogStep(7, "Read mandatory attributes in AttributeList if CNET.S.F00(WI)/CNET.S.F01(TH)/CNET.S.F02(ET) is true");
+ VerifyOrDo(!ShouldSkip("CNET.S.F00 || CNET.S.F01 || CNET.S.F02"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return ReadAttribute(kIdentityAlpha, GetEndpoint(0), NetworkCommissioning::Id,
+ NetworkCommissioning::Attributes::AttributeList::Id, true, chip::NullOptional);
+ }
+ case 8: {
+ LogStep(8, "Read the optional attribute(ScanMaxTimeSeconds): AttributeList");
+ VerifyOrDo(!ShouldSkip("CNET.S.A0002"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return ReadAttribute(kIdentityAlpha, GetEndpoint(0), NetworkCommissioning::Id,
+ NetworkCommissioning::Attributes::AttributeList::Id, true, chip::NullOptional);
+ }
+ case 9: {
+ LogStep(9, "Reading optional attribute(ConnectMaxTimeSeconds) in AttributeList");
+ VerifyOrDo(!ShouldSkip("CNET.S.A0003"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return ReadAttribute(kIdentityAlpha, GetEndpoint(0), NetworkCommissioning::Id,
+ NetworkCommissioning::Attributes::AttributeList::Id, true, chip::NullOptional);
+ }
+ case 10: {
+ LogStep(10, "Read AcceptedCommandList If DUT supports Wi-Fi/Thread related features CNET.S.F00(WI),CNET.S.F01(TH)");
+ VerifyOrDo(!ShouldSkip("CNET.S.F00 || CNET.S.F01"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return ReadAttribute(kIdentityAlpha, GetEndpoint(0), NetworkCommissioning::Id,
+ NetworkCommissioning::Attributes::AcceptedCommandList::Id, true, chip::NullOptional);
+ }
+ case 11: {
+ LogStep(11, "Read AcceptedCommandList If DUT supports Wi-Fi related features (CNET.S.F00(WI) is true)");
+ VerifyOrDo(!ShouldSkip("CNET.S.F00"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return ReadAttribute(kIdentityAlpha, GetEndpoint(0), NetworkCommissioning::Id,
+ NetworkCommissioning::Attributes::AcceptedCommandList::Id, true, chip::NullOptional);
+ }
+ case 12: {
+ LogStep(12, "Read AcceptedCommandList If DUT supports Thread related features(CNET.S.F01(TH) is true)");
+ VerifyOrDo(!ShouldSkip("CNET.S.F01"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return ReadAttribute(kIdentityAlpha, GetEndpoint(0), NetworkCommissioning::Id,
+ NetworkCommissioning::Attributes::AcceptedCommandList::Id, true, chip::NullOptional);
+ }
+ case 13: {
+ LogStep(13, "Read AcceptedCommandList If DUT supports Ethernet related features(CNET.S.F02(TH) is true)");
+ VerifyOrDo(!ShouldSkip("CNET.S.F02"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return ReadAttribute(kIdentityAlpha, GetEndpoint(0), NetworkCommissioning::Id,
+ NetworkCommissioning::Attributes::AcceptedCommandList::Id, true, chip::NullOptional);
+ }
+ case 14: {
+ LogStep(14,
+ "Read the GeneratedCommandList If DUT supports Wi-Fi/Thread related features(CNET.S.F00(WI) or CNET.S.F01(TH) "
+ "is true)");
+ VerifyOrDo(!ShouldSkip("CNET.S.F00 || CNET.S.F01"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return ReadAttribute(kIdentityAlpha, GetEndpoint(0), NetworkCommissioning::Id,
+ NetworkCommissioning::Attributes::GeneratedCommandList::Id, true, chip::NullOptional);
+ }
+ case 15: {
+ LogStep(15, "Read the GeneratedCommandList If DUT supports Ethernet related features(CNET.S.F02(ET) must be true)");
+ VerifyOrDo(!ShouldSkip("CNET.S.F02"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return ReadAttribute(kIdentityAlpha, GetEndpoint(0), NetworkCommissioning::Id,
+ NetworkCommissioning::Attributes::GeneratedCommandList::Id, true, chip::NullOptional);
+ }
}
return CHIP_NO_ERROR;
}
@@ -23513,6 +25648,170 @@
}
};
+class Test_TC_ALOGIN_12_1Suite : public TestCommand
+{
+public:
+ Test_TC_ALOGIN_12_1Suite(CredentialIssuerCommands * credsIssuerConfig) :
+ TestCommand("Test_TC_ALOGIN_12_1", 5, credsIssuerConfig)
+ {
+ AddArgument("nodeId", 0, UINT64_MAX, &mNodeId);
+ AddArgument("cluster", &mCluster);
+ AddArgument("endpoint", 0, UINT16_MAX, &mEndpoint);
+ AddArgument("TempAccountIdentifier", &mTempAccountIdentifier);
+ AddArgument("catalogVendorId", 0, UINT16_MAX, &mCatalogVendorId);
+ AddArgument("applicationId", &mApplicationId);
+ AddArgument("timeout", 0, UINT16_MAX, &mTimeout);
+ }
+
+ ~Test_TC_ALOGIN_12_1Suite()
+ {
+ if (setupPINBuffer != nullptr)
+ {
+ chip::Platform::MemoryFree(setupPINBuffer);
+ setupPINBuffer = nullptr;
+ }
+ }
+
+ chip::System::Clock::Timeout GetWaitDuration() const override
+ {
+ return chip::System::Clock::Seconds16(mTimeout.ValueOr(kTimeoutInSeconds));
+ }
+
+private:
+ chip::Optional<chip::NodeId> mNodeId;
+ chip::Optional<chip::CharSpan> mCluster;
+ chip::Optional<chip::EndpointId> mEndpoint;
+ chip::Optional<chip::CharSpan> mTempAccountIdentifier;
+ chip::Optional<uint16_t> mCatalogVendorId;
+ chip::Optional<chip::CharSpan> mApplicationId;
+ chip::Optional<uint16_t> mTimeout;
+
+ char * setupPINBuffer = nullptr;
+ chip::CharSpan setupPIN;
+
+ chip::EndpointId GetEndpoint(chip::EndpointId endpoint) { return mEndpoint.HasValue() ? mEndpoint.Value() : endpoint; }
+
+ //
+ // Tests methods
+ //
+
+ void OnResponse(const chip::app::StatusIB & status, chip::TLV::TLVReader * data) override
+ {
+ bool shouldContinue = false;
+
+ switch (mTestIndex - 1)
+ {
+ case 0:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ shouldContinue = true;
+ break;
+ case 1:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::app::Clusters::ApplicationLauncher::Commands::LauncherResponse::DecodableType value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckValue("status", value.status, 0U));
+ }
+ break;
+ case 2:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::app::Clusters::AccountLogin::Commands::GetSetupPINResponse::DecodableType value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ if (setupPINBuffer != nullptr)
+ {
+ chip::Platform::MemoryFree(setupPINBuffer);
+ }
+ setupPINBuffer = static_cast<char *>(chip::Platform::MemoryAlloc(value.setupPIN.size()));
+ memcpy(setupPINBuffer, value.setupPIN.data(), value.setupPIN.size());
+ setupPIN = chip::CharSpan(setupPINBuffer, value.setupPIN.size());
+ }
+ break;
+ case 3:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ break;
+ case 4:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ break;
+ default:
+ LogErrorOnFailure(ContinueOnChipMainThread(CHIP_ERROR_INVALID_ARGUMENT));
+ }
+
+ if (shouldContinue)
+ {
+ ContinueOnChipMainThread(CHIP_NO_ERROR);
+ }
+ }
+
+ CHIP_ERROR DoTestStep(uint16_t testIndex) override
+ {
+ using namespace chip::app::Clusters;
+ switch (testIndex)
+ {
+ case 0: {
+ LogStep(0, "Wait for the commissioned device to be retrieved");
+ ListFreer listFreer;
+ chip::app::Clusters::DelayCommands::Commands::WaitForCommissionee::Type value;
+ value.nodeId = mNodeId.HasValue() ? mNodeId.Value() : 305414945ULL;
+ return WaitForCommissionee(kIdentityAlpha, value);
+ }
+ case 1: {
+ LogStep(1, "Launch an app with the provided a application ID");
+ VerifyOrDo(!ShouldSkip("APPLAUNCHER.S.C00.Rsp"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ ListFreer listFreer;
+ chip::app::Clusters::ApplicationLauncher::Commands::LaunchApp::Type value;
+
+ value.application.catalogVendorId = mCatalogVendorId.HasValue() ? mCatalogVendorId.Value() : 123U;
+ value.application.applicationId =
+ mApplicationId.HasValue() ? mApplicationId.Value() : chip::Span<const char>("exampleid", 9);
+
+ value.data.Emplace();
+ value.data.Value() = chip::ByteSpan(chip::Uint8::from_const_char("Hello Worldgarbage: not in length on purpose"), 11);
+ return SendCommand(kIdentityAlpha, GetEndpoint(3), ApplicationLauncher::Id,
+ ApplicationLauncher::Commands::LaunchApp::Id, value, chip::NullOptional
+
+ );
+ }
+ case 2: {
+ LogStep(2, "TH sends a GetSetupPIN command to the DUT with test values provided by the product maker.");
+ VerifyOrDo(!ShouldSkip("ALOGIN.S.C00.Rsp"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ ListFreer listFreer;
+ chip::app::Clusters::AccountLogin::Commands::GetSetupPIN::Type value;
+ value.tempAccountIdentifier =
+ mTempAccountIdentifier.HasValue() ? mTempAccountIdentifier.Value() : chip::Span<const char>("1111", 4);
+ return SendCommand(kIdentityAlpha, GetEndpoint(3), AccountLogin::Id, AccountLogin::Commands::GetSetupPIN::Id, value,
+ chip::Optional<uint16_t>(10000), chip::NullOptional
+
+ );
+ }
+ case 3: {
+ LogStep(3, "TH sends a Login command to the DUT with test values provided by the product maker.");
+ VerifyOrDo(!ShouldSkip("ALOGIN.S.C02.Rsp"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ ListFreer listFreer;
+ chip::app::Clusters::AccountLogin::Commands::Login::Type value;
+ value.tempAccountIdentifier =
+ mTempAccountIdentifier.HasValue() ? mTempAccountIdentifier.Value() : chip::Span<const char>("1111", 4);
+ value.setupPIN = setupPIN;
+ return SendCommand(kIdentityAlpha, GetEndpoint(3), AccountLogin::Id, AccountLogin::Commands::Login::Id, value,
+ chip::Optional<uint16_t>(10000), chip::NullOptional
+
+ );
+ }
+ case 4: {
+ LogStep(4, "TH sends a Logout command to the DUT with test values provided by the product maker.");
+ VerifyOrDo(!ShouldSkip("ALOGIN.S.C03.Rsp"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ ListFreer listFreer;
+ chip::app::Clusters::AccountLogin::Commands::Logout::Type value;
+ return SendCommand(kIdentityAlpha, GetEndpoint(3), AccountLogin::Id, AccountLogin::Commands::Logout::Id, value,
+ chip::Optional<uint16_t>(10000), chip::NullOptional
+
+ );
+ }
+ }
+ return CHIP_NO_ERROR;
+ }
+};
+
class Test_TC_LOWPOWER_2_1Suite : public TestCommand
{
public:
@@ -24862,6 +27161,115 @@
}
};
+class Test_TC_WAKEONLAN_4_1Suite : public TestCommand
+{
+public:
+ Test_TC_WAKEONLAN_4_1Suite(CredentialIssuerCommands * credsIssuerConfig) :
+ TestCommand("Test_TC_WAKEONLAN_4_1", 4, credsIssuerConfig)
+ {
+ AddArgument("nodeId", 0, UINT64_MAX, &mNodeId);
+ AddArgument("cluster", &mCluster);
+ AddArgument("endpoint", 0, UINT16_MAX, &mEndpoint);
+ AddArgument("timeout", 0, UINT16_MAX, &mTimeout);
+ }
+
+ ~Test_TC_WAKEONLAN_4_1Suite() {}
+
+ chip::System::Clock::Timeout GetWaitDuration() const override
+ {
+ return chip::System::Clock::Seconds16(mTimeout.ValueOr(kTimeoutInSeconds));
+ }
+
+private:
+ chip::Optional<chip::NodeId> mNodeId;
+ chip::Optional<chip::CharSpan> mCluster;
+ chip::Optional<chip::EndpointId> mEndpoint;
+ chip::Optional<uint16_t> mTimeout;
+
+ chip::EndpointId GetEndpoint(chip::EndpointId endpoint) { return mEndpoint.HasValue() ? mEndpoint.Value() : endpoint; }
+
+ //
+ // Tests methods
+ //
+
+ void OnResponse(const chip::app::StatusIB & status, chip::TLV::TLVReader * data) override
+ {
+ bool shouldContinue = false;
+
+ switch (mTestIndex - 1)
+ {
+ case 0:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ shouldContinue = true;
+ break;
+ case 1:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::CharSpan value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckConstraintMinLength("value", value, 12));
+ }
+ break;
+ case 2:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ break;
+ case 3:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ shouldContinue = true;
+ break;
+ default:
+ LogErrorOnFailure(ContinueOnChipMainThread(CHIP_ERROR_INVALID_ARGUMENT));
+ }
+
+ if (shouldContinue)
+ {
+ ContinueOnChipMainThread(CHIP_NO_ERROR);
+ }
+ }
+
+ CHIP_ERROR DoTestStep(uint16_t testIndex) override
+ {
+ using namespace chip::app::Clusters;
+ switch (testIndex)
+ {
+ case 0: {
+ LogStep(0, "Wait for the commissioned device to be retrieved");
+ ListFreer listFreer;
+ chip::app::Clusters::DelayCommands::Commands::WaitForCommissionee::Type value;
+ value.nodeId = mNodeId.HasValue() ? mNodeId.Value() : 305414945ULL;
+ return WaitForCommissionee(kIdentityAlpha, value);
+ }
+ case 1: {
+ LogStep(1, "TH reads the MACAddress attribute from the DUT");
+ VerifyOrDo(!ShouldSkip("WAKEONLAN.S.A0000"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return ReadAttribute(kIdentityAlpha, GetEndpoint(1), WakeOnLan::Id, WakeOnLan::Attributes::MACAddress::Id, true,
+ chip::NullOptional);
+ }
+ case 2: {
+ LogStep(2, "TH sends a Sleep command to DUT");
+ VerifyOrDo(!ShouldSkip("LOWPOWER.S.C00.Rsp"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ ListFreer listFreer;
+ chip::app::Clusters::LowPower::Commands::Sleep::Type value;
+ return SendCommand(kIdentityAlpha, GetEndpoint(1), LowPower::Id, LowPower::Commands::Sleep::Id, value,
+ chip::NullOptional
+
+ );
+ }
+ case 3: {
+ LogStep(3, "TH sends a Wake-On LAN magic packet containing the MAC address from step 1");
+ VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ ListFreer listFreer;
+ chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value;
+ value.message = chip::Span<const char>("Please enter 'y' after successgarbage: not in length on purpose", 30);
+ value.expectedValue.Emplace();
+ value.expectedValue.Value() = chip::Span<const char>("ygarbage: not in length on purpose", 1);
+ return UserPrompt(kIdentityAlpha, value);
+ }
+ }
+ return CHIP_NO_ERROR;
+ }
+};
+
class Test_TC_CHANNEL_5_1Suite : public TestCommand
{
public:
@@ -38799,19 +41207,19 @@
}
case 51: {
LogStep(51, "Read the optional attribute (ActiveTimestamp) in AttributeList");
- VerifyOrDo(!ShouldSkip("DGTHREAD.S.A0039"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ VerifyOrDo(!ShouldSkip("DGTHREAD.S.A0038"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
return ReadAttribute(kIdentityAlpha, GetEndpoint(0), ThreadNetworkDiagnostics::Id,
ThreadNetworkDiagnostics::Attributes::AttributeList::Id, true, chip::NullOptional);
}
case 52: {
LogStep(52, "Read the optional attribute (PendingTimestamp) in AttributeList");
- VerifyOrDo(!ShouldSkip("DGTHREAD.S.A003A"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ VerifyOrDo(!ShouldSkip("DGTHREAD.S.A0039"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
return ReadAttribute(kIdentityAlpha, GetEndpoint(0), ThreadNetworkDiagnostics::Id,
ThreadNetworkDiagnostics::Attributes::AttributeList::Id, true, chip::NullOptional);
}
case 53: {
LogStep(53, "Read the optional attribute (Delay) in AttributeList");
- VerifyOrDo(!ShouldSkip("DGTHREAD.S.A003B"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ VerifyOrDo(!ShouldSkip("DGTHREAD.S.A003a"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
return ReadAttribute(kIdentityAlpha, GetEndpoint(0), ThreadNetworkDiagnostics::Id,
ThreadNetworkDiagnostics::Attributes::AttributeList::Id, true, chip::NullOptional);
}
@@ -39366,13 +41774,13 @@
}
case 29: {
LogStep(29, "TH reads Delay attribute value from DUT");
- VerifyOrDo(!ShouldSkip("DGTHREAD.S.A003A"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ VerifyOrDo(!ShouldSkip("DGTHREAD.S.A003a"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
return ReadAttribute(kIdentityAlpha, GetEndpoint(0), ThreadNetworkDiagnostics::Id,
ThreadNetworkDiagnostics::Attributes::Delay::Id, true, chip::NullOptional);
}
case 30: {
LogStep(30, "Read SecurityPolicy struct attribute from DUT and Verify the each field");
- VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT && DGTHREAD.S.A003B"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT && DGTHREAD.S.A003b"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
ListFreer listFreer;
chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value;
value.message = chip::Span<const char>("Please enter 'y' for successgarbage: not in length on purpose", 28);
@@ -73467,6 +75875,246 @@
}
};
+class Test_TC_DRLK_2_6Suite : public TestCommand
+{
+public:
+ Test_TC_DRLK_2_6Suite(CredentialIssuerCommands * credsIssuerConfig) : TestCommand("Test_TC_DRLK_2_6", 10, credsIssuerConfig)
+ {
+ AddArgument("nodeId", 0, UINT64_MAX, &mNodeId);
+ AddArgument("cluster", &mCluster);
+ AddArgument("endpoint", 0, UINT16_MAX, &mEndpoint);
+ AddArgument("timeout", 0, UINT16_MAX, &mTimeout);
+ }
+
+ ~Test_TC_DRLK_2_6Suite() {}
+
+ chip::System::Clock::Timeout GetWaitDuration() const override
+ {
+ return chip::System::Clock::Seconds16(mTimeout.ValueOr(kTimeoutInSeconds));
+ }
+
+private:
+ chip::Optional<chip::NodeId> mNodeId;
+ chip::Optional<chip::CharSpan> mCluster;
+ chip::Optional<chip::EndpointId> mEndpoint;
+ chip::Optional<uint16_t> mTimeout;
+
+ uint8_t NumberOfHolidaySchedulesSupported;
+
+ chip::EndpointId GetEndpoint(chip::EndpointId endpoint) { return mEndpoint.HasValue() ? mEndpoint.Value() : endpoint; }
+
+ //
+ // Tests methods
+ //
+
+ void OnResponse(const chip::app::StatusIB & status, chip::TLV::TLVReader * data) override
+ {
+ bool shouldContinue = false;
+
+ switch (mTestIndex - 1)
+ {
+ case 0:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ shouldContinue = true;
+ break;
+ case 1:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ uint8_t value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckConstraintMinValue("value", value, 0U));
+ VerifyOrReturn(CheckConstraintMaxValue("value", value, 255U));
+ NumberOfHolidaySchedulesSupported = value;
+ }
+ break;
+ case 2:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ break;
+ case 3:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::app::Clusters::DoorLock::Commands::GetHolidayScheduleResponse::DecodableType value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckValue("holidayIndex", value.holidayIndex, 1U));
+ VerifyOrReturn(CheckValue("status", value.status, 0U));
+ VerifyOrReturn(CheckValuePresent("localStartTime", value.localStartTime));
+ VerifyOrReturn(CheckValue("localStartTime.Value()", value.localStartTime.Value(), 20UL));
+ VerifyOrReturn(CheckValuePresent("localEndTime", value.localEndTime));
+ VerifyOrReturn(CheckValue("localEndTime.Value()", value.localEndTime.Value(), 30UL));
+ if (value.localEndTime.HasValue())
+ {
+ VerifyOrReturn(CheckConstraintMinValue("value.localEndTime.Value()", value.localEndTime.Value(), 21UL));
+ }
+ VerifyOrReturn(CheckValuePresent("operatingMode", value.operatingMode));
+ VerifyOrReturn(CheckValue("operatingMode.Value()", value.operatingMode.Value(), 0U));
+ }
+ break;
+ case 4:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), EMBER_ZCL_STATUS_INVALID_COMMAND));
+ break;
+ case 5:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::app::Clusters::DoorLock::Commands::GetHolidayScheduleResponse::DecodableType value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckValue("holidayIndex", value.holidayIndex, 15U));
+ VerifyOrReturn(CheckValue("status", value.status, 133U));
+ }
+ break;
+ case 6:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::app::Clusters::DoorLock::Commands::GetHolidayScheduleResponse::DecodableType value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckValue("holidayIndex", value.holidayIndex, 10U));
+ VerifyOrReturn(CheckValue("status", value.status, 139U));
+ }
+ break;
+ case 7:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ break;
+ case 8:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ {
+ chip::app::Clusters::DoorLock::Commands::GetHolidayScheduleResponse::DecodableType value;
+ VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
+ VerifyOrReturn(CheckValue("holidayIndex", value.holidayIndex, 1U));
+ VerifyOrReturn(CheckValue("status", value.status, 139U));
+ }
+ break;
+ case 9:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ break;
+ default:
+ LogErrorOnFailure(ContinueOnChipMainThread(CHIP_ERROR_INVALID_ARGUMENT));
+ }
+
+ if (shouldContinue)
+ {
+ ContinueOnChipMainThread(CHIP_NO_ERROR);
+ }
+ }
+
+ CHIP_ERROR DoTestStep(uint16_t testIndex) override
+ {
+ using namespace chip::app::Clusters;
+ switch (testIndex)
+ {
+ case 0: {
+ LogStep(0, "Wait for commissionee");
+ ListFreer listFreer;
+ chip::app::Clusters::DelayCommands::Commands::WaitForCommissionee::Type value;
+ value.nodeId = mNodeId.HasValue() ? mNodeId.Value() : 305414945ULL;
+ return WaitForCommissionee(kIdentityAlpha, value);
+ }
+ case 1: {
+ LogStep(1, "TH reads NumberOfHoliday SchedulesSupported and saves for future use.");
+ VerifyOrDo(!ShouldSkip("DRLK.S.F0b && DRLK.S.A0016"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ return ReadAttribute(kIdentityAlpha, GetEndpoint(1), DoorLock::Id,
+ DoorLock::Attributes::NumberOfHolidaySchedulesSupported::Id, true, chip::NullOptional);
+ }
+ case 2: {
+ LogStep(2, "Create Holiday schedule with 1 index");
+ VerifyOrDo(!ShouldSkip("DRLK.S.F0b && DRLK.S.C11.Rsp"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ ListFreer listFreer;
+ chip::app::Clusters::DoorLock::Commands::SetHolidaySchedule::Type value;
+ value.holidayIndex = 1U;
+ value.localStartTime = 20UL;
+ value.localEndTime = 30UL;
+ value.operatingMode = static_cast<chip::app::Clusters::DoorLock::DlOperatingMode>(0);
+ return SendCommand(kIdentityAlpha, GetEndpoint(1), DoorLock::Id, DoorLock::Commands::SetHolidaySchedule::Id, value,
+ chip::NullOptional
+
+ );
+ }
+ case 3: {
+ LogStep(3, "Get Holiday Schedule with HolidayIndex as 1");
+ VerifyOrDo(!ShouldSkip("DRLK.S.F0b && DRLK.S.C12.Rsp && DRLK.S.C12.Tx"),
+ return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ ListFreer listFreer;
+ chip::app::Clusters::DoorLock::Commands::GetHolidaySchedule::Type value;
+ value.holidayIndex = 1U;
+ return SendCommand(kIdentityAlpha, GetEndpoint(1), DoorLock::Id, DoorLock::Commands::GetHolidaySchedule::Id, value,
+ chip::NullOptional
+
+ );
+ }
+ case 4: {
+ LogStep(4, "Create Holiday schedule with invalid operating mode");
+ VerifyOrDo(!ShouldSkip("DRLK.S.C11.Rsp"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ ListFreer listFreer;
+ chip::app::Clusters::DoorLock::Commands::SetHolidaySchedule::Type value;
+ value.holidayIndex = 1U;
+ value.localStartTime = 20UL;
+ value.localEndTime = 30UL;
+ value.operatingMode = static_cast<chip::app::Clusters::DoorLock::DlOperatingMode>(5);
+ return SendCommand(kIdentityAlpha, GetEndpoint(1), DoorLock::Id, DoorLock::Commands::SetHolidaySchedule::Id, value,
+ chip::NullOptional
+
+ );
+ }
+ case 5: {
+ LogStep(5, "Get Holiday Schedule with Invalid HolidayIndex 15.");
+ VerifyOrDo(!ShouldSkip("DRLK.S.F0b && DRLK.S.C12.Rsp && DRLK.S.C12.Tx"),
+ return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ ListFreer listFreer;
+ chip::app::Clusters::DoorLock::Commands::GetHolidaySchedule::Type value;
+ value.holidayIndex = 15U;
+ return SendCommand(kIdentityAlpha, GetEndpoint(1), DoorLock::Id, DoorLock::Commands::GetHolidaySchedule::Id, value,
+ chip::NullOptional
+
+ );
+ }
+ case 6: {
+ LogStep(6, "Get Holiday Schedule with the Non-scheduled HolidayIndex");
+ VerifyOrDo(!ShouldSkip("DRLK.S.F0b && DRLK.S.C12.Rsp && DRLK.S.C12.Tx"),
+ return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ ListFreer listFreer;
+ chip::app::Clusters::DoorLock::Commands::GetHolidaySchedule::Type value;
+ value.holidayIndex = 10U;
+ return SendCommand(kIdentityAlpha, GetEndpoint(1), DoorLock::Id, DoorLock::Commands::GetHolidaySchedule::Id, value,
+ chip::NullOptional
+
+ );
+ }
+ case 7: {
+ LogStep(7, "Clear Holiday schedule with 1 index");
+ VerifyOrDo(!ShouldSkip("DRLK.S.F0b && DRLK.S.C13.Rsp"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ ListFreer listFreer;
+ chip::app::Clusters::DoorLock::Commands::ClearHolidaySchedule::Type value;
+ value.holidayIndex = 1U;
+ return SendCommand(kIdentityAlpha, GetEndpoint(1), DoorLock::Id, DoorLock::Commands::ClearHolidaySchedule::Id, value,
+ chip::NullOptional
+
+ );
+ }
+ case 8: {
+ LogStep(8, "Make sure that holiday schedule was deleted");
+ VerifyOrDo(!ShouldSkip("DRLK.S.F0b && DRLK.S.C12.Rsp && DRLK.S.C12.Tx"),
+ return ContinueOnChipMainThread(CHIP_NO_ERROR));
+ ListFreer listFreer;
+ chip::app::Clusters::DoorLock::Commands::GetHolidaySchedule::Type value;
+ value.holidayIndex = 1U;
+ return SendCommand(kIdentityAlpha, GetEndpoint(1), DoorLock::Id, DoorLock::Commands::GetHolidaySchedule::Id, value,
+ chip::NullOptional
+
+ );
+ }
+ case 9: {
+ LogStep(9, "Cleanup the created user");
+ ListFreer listFreer;
+ chip::app::Clusters::DoorLock::Commands::ClearUser::Type value;
+ value.userIndex = 1U;
+ return SendCommand(kIdentityAlpha, GetEndpoint(1), DoorLock::Id, DoorLock::Commands::ClearUser::Id, value,
+ chip::Optional<uint16_t>(10000), chip::NullOptional
+
+ );
+ }
+ }
+ return CHIP_NO_ERROR;
+ }
+};
+
class Test_TC_DRLK_2_7Suite : public TestCommand
{
public:
@@ -84192,63 +86840,6 @@
}
};
-class Test_TC_WAKEONLAN_4_1Suite : public TestCommand
-{
-public:
- Test_TC_WAKEONLAN_4_1Suite(CredentialIssuerCommands * credsIssuerConfig) :
- TestCommand("Test_TC_WAKEONLAN_4_1", 0, credsIssuerConfig)
- {
- AddArgument("nodeId", 0, UINT64_MAX, &mNodeId);
- AddArgument("cluster", &mCluster);
- AddArgument("endpoint", 0, UINT16_MAX, &mEndpoint);
- AddArgument("timeout", 0, UINT16_MAX, &mTimeout);
- }
-
- ~Test_TC_WAKEONLAN_4_1Suite() {}
-
- chip::System::Clock::Timeout GetWaitDuration() const override
- {
- return chip::System::Clock::Seconds16(mTimeout.ValueOr(kTimeoutInSeconds));
- }
-
-private:
- chip::Optional<chip::NodeId> mNodeId;
- chip::Optional<chip::CharSpan> mCluster;
- chip::Optional<chip::EndpointId> mEndpoint;
- chip::Optional<uint16_t> mTimeout;
-
- chip::EndpointId GetEndpoint(chip::EndpointId endpoint) { return mEndpoint.HasValue() ? mEndpoint.Value() : endpoint; }
-
- //
- // Tests methods
- //
-
- void OnResponse(const chip::app::StatusIB & status, chip::TLV::TLVReader * data) override
- {
- bool shouldContinue = false;
-
- switch (mTestIndex - 1)
- {
- default:
- LogErrorOnFailure(ContinueOnChipMainThread(CHIP_ERROR_INVALID_ARGUMENT));
- }
-
- if (shouldContinue)
- {
- ContinueOnChipMainThread(CHIP_NO_ERROR);
- }
- }
-
- CHIP_ERROR DoTestStep(uint16_t testIndex) override
- {
- using namespace chip::app::Clusters;
- switch (testIndex)
- {
- }
- return CHIP_NO_ERROR;
- }
-};
-
class Test_TC_CHANNEL_5_4Suite : public TestCommand
{
public:
@@ -85045,63 +87636,6 @@
}
};
-class Test_TC_ALOGIN_12_1Suite : public TestCommand
-{
-public:
- Test_TC_ALOGIN_12_1Suite(CredentialIssuerCommands * credsIssuerConfig) :
- TestCommand("Test_TC_ALOGIN_12_1", 0, credsIssuerConfig)
- {
- AddArgument("nodeId", 0, UINT64_MAX, &mNodeId);
- AddArgument("cluster", &mCluster);
- AddArgument("endpoint", 0, UINT16_MAX, &mEndpoint);
- AddArgument("timeout", 0, UINT16_MAX, &mTimeout);
- }
-
- ~Test_TC_ALOGIN_12_1Suite() {}
-
- chip::System::Clock::Timeout GetWaitDuration() const override
- {
- return chip::System::Clock::Seconds16(mTimeout.ValueOr(kTimeoutInSeconds));
- }
-
-private:
- chip::Optional<chip::NodeId> mNodeId;
- chip::Optional<chip::CharSpan> mCluster;
- chip::Optional<chip::EndpointId> mEndpoint;
- chip::Optional<uint16_t> mTimeout;
-
- chip::EndpointId GetEndpoint(chip::EndpointId endpoint) { return mEndpoint.HasValue() ? mEndpoint.Value() : endpoint; }
-
- //
- // Tests methods
- //
-
- void OnResponse(const chip::app::StatusIB & status, chip::TLV::TLVReader * data) override
- {
- bool shouldContinue = false;
-
- switch (mTestIndex - 1)
- {
- default:
- LogErrorOnFailure(ContinueOnChipMainThread(CHIP_ERROR_INVALID_ARGUMENT));
- }
-
- if (shouldContinue)
- {
- ContinueOnChipMainThread(CHIP_NO_ERROR);
- }
- }
-
- CHIP_ERROR DoTestStep(uint16_t testIndex) override
- {
- using namespace chip::app::Clusters;
- switch (testIndex)
- {
- }
- return CHIP_NO_ERROR;
- }
-};
-
class Test_TC_ALOGIN_12_2Suite : public TestCommand
{
public:
@@ -98997,62 +101531,6 @@
}
};
-class Test_TC_DRLK_2_6Suite : public TestCommand
-{
-public:
- Test_TC_DRLK_2_6Suite(CredentialIssuerCommands * credsIssuerConfig) : TestCommand("Test_TC_DRLK_2_6", 0, credsIssuerConfig)
- {
- AddArgument("nodeId", 0, UINT64_MAX, &mNodeId);
- AddArgument("cluster", &mCluster);
- AddArgument("endpoint", 0, UINT16_MAX, &mEndpoint);
- AddArgument("timeout", 0, UINT16_MAX, &mTimeout);
- }
-
- ~Test_TC_DRLK_2_6Suite() {}
-
- chip::System::Clock::Timeout GetWaitDuration() const override
- {
- return chip::System::Clock::Seconds16(mTimeout.ValueOr(kTimeoutInSeconds));
- }
-
-private:
- chip::Optional<chip::NodeId> mNodeId;
- chip::Optional<chip::CharSpan> mCluster;
- chip::Optional<chip::EndpointId> mEndpoint;
- chip::Optional<uint16_t> mTimeout;
-
- chip::EndpointId GetEndpoint(chip::EndpointId endpoint) { return mEndpoint.HasValue() ? mEndpoint.Value() : endpoint; }
-
- //
- // Tests methods
- //
-
- void OnResponse(const chip::app::StatusIB & status, chip::TLV::TLVReader * data) override
- {
- bool shouldContinue = false;
-
- switch (mTestIndex - 1)
- {
- default:
- LogErrorOnFailure(ContinueOnChipMainThread(CHIP_ERROR_INVALID_ARGUMENT));
- }
-
- if (shouldContinue)
- {
- ContinueOnChipMainThread(CHIP_NO_ERROR);
- }
- }
-
- CHIP_ERROR DoTestStep(uint16_t testIndex) override
- {
- using namespace chip::app::Clusters;
- switch (testIndex)
- {
- }
- return CHIP_NO_ERROR;
- }
-};
-
class Test_TC_DRLK_2_8Suite : public TestCommand
{
public:
@@ -103877,62 +106355,6 @@
}
};
-class Test_TC_ACL_2_3Suite : public TestCommand
-{
-public:
- Test_TC_ACL_2_3Suite(CredentialIssuerCommands * credsIssuerConfig) : TestCommand("Test_TC_ACL_2_3", 0, credsIssuerConfig)
- {
- AddArgument("nodeId", 0, UINT64_MAX, &mNodeId);
- AddArgument("cluster", &mCluster);
- AddArgument("endpoint", 0, UINT16_MAX, &mEndpoint);
- AddArgument("timeout", 0, UINT16_MAX, &mTimeout);
- }
-
- ~Test_TC_ACL_2_3Suite() {}
-
- chip::System::Clock::Timeout GetWaitDuration() const override
- {
- return chip::System::Clock::Seconds16(mTimeout.ValueOr(kTimeoutInSeconds));
- }
-
-private:
- chip::Optional<chip::NodeId> mNodeId;
- chip::Optional<chip::CharSpan> mCluster;
- chip::Optional<chip::EndpointId> mEndpoint;
- chip::Optional<uint16_t> mTimeout;
-
- chip::EndpointId GetEndpoint(chip::EndpointId endpoint) { return mEndpoint.HasValue() ? mEndpoint.Value() : endpoint; }
-
- //
- // Tests methods
- //
-
- void OnResponse(const chip::app::StatusIB & status, chip::TLV::TLVReader * data) override
- {
- bool shouldContinue = false;
-
- switch (mTestIndex - 1)
- {
- default:
- LogErrorOnFailure(ContinueOnChipMainThread(CHIP_ERROR_INVALID_ARGUMENT));
- }
-
- if (shouldContinue)
- {
- ContinueOnChipMainThread(CHIP_NO_ERROR);
- }
- }
-
- CHIP_ERROR DoTestStep(uint16_t testIndex) override
- {
- using namespace chip::app::Clusters;
- switch (testIndex)
- {
- }
- return CHIP_NO_ERROR;
- }
-};
-
class Test_TC_ACL_2_4Suite : public TestCommand
{
public:
@@ -104381,120 +106803,6 @@
}
};
-class Test_TC_BRBINFO_1_1Suite : public TestCommand
-{
-public:
- Test_TC_BRBINFO_1_1Suite(CredentialIssuerCommands * credsIssuerConfig) :
- TestCommand("Test_TC_BRBINFO_1_1", 0, credsIssuerConfig)
- {
- AddArgument("nodeId", 0, UINT64_MAX, &mNodeId);
- AddArgument("cluster", &mCluster);
- AddArgument("endpoint", 0, UINT16_MAX, &mEndpoint);
- AddArgument("timeout", 0, UINT16_MAX, &mTimeout);
- }
-
- ~Test_TC_BRBINFO_1_1Suite() {}
-
- chip::System::Clock::Timeout GetWaitDuration() const override
- {
- return chip::System::Clock::Seconds16(mTimeout.ValueOr(kTimeoutInSeconds));
- }
-
-private:
- chip::Optional<chip::NodeId> mNodeId;
- chip::Optional<chip::CharSpan> mCluster;
- chip::Optional<chip::EndpointId> mEndpoint;
- chip::Optional<uint16_t> mTimeout;
-
- chip::EndpointId GetEndpoint(chip::EndpointId endpoint) { return mEndpoint.HasValue() ? mEndpoint.Value() : endpoint; }
-
- //
- // Tests methods
- //
-
- void OnResponse(const chip::app::StatusIB & status, chip::TLV::TLVReader * data) override
- {
- bool shouldContinue = false;
-
- switch (mTestIndex - 1)
- {
- default:
- LogErrorOnFailure(ContinueOnChipMainThread(CHIP_ERROR_INVALID_ARGUMENT));
- }
-
- if (shouldContinue)
- {
- ContinueOnChipMainThread(CHIP_NO_ERROR);
- }
- }
-
- CHIP_ERROR DoTestStep(uint16_t testIndex) override
- {
- using namespace chip::app::Clusters;
- switch (testIndex)
- {
- }
- return CHIP_NO_ERROR;
- }
-};
-
-class Test_TC_BRBINFO_2_1Suite : public TestCommand
-{
-public:
- Test_TC_BRBINFO_2_1Suite(CredentialIssuerCommands * credsIssuerConfig) :
- TestCommand("Test_TC_BRBINFO_2_1", 0, credsIssuerConfig)
- {
- AddArgument("nodeId", 0, UINT64_MAX, &mNodeId);
- AddArgument("cluster", &mCluster);
- AddArgument("endpoint", 0, UINT16_MAX, &mEndpoint);
- AddArgument("timeout", 0, UINT16_MAX, &mTimeout);
- }
-
- ~Test_TC_BRBINFO_2_1Suite() {}
-
- chip::System::Clock::Timeout GetWaitDuration() const override
- {
- return chip::System::Clock::Seconds16(mTimeout.ValueOr(kTimeoutInSeconds));
- }
-
-private:
- chip::Optional<chip::NodeId> mNodeId;
- chip::Optional<chip::CharSpan> mCluster;
- chip::Optional<chip::EndpointId> mEndpoint;
- chip::Optional<uint16_t> mTimeout;
-
- chip::EndpointId GetEndpoint(chip::EndpointId endpoint) { return mEndpoint.HasValue() ? mEndpoint.Value() : endpoint; }
-
- //
- // Tests methods
- //
-
- void OnResponse(const chip::app::StatusIB & status, chip::TLV::TLVReader * data) override
- {
- bool shouldContinue = false;
-
- switch (mTestIndex - 1)
- {
- default:
- LogErrorOnFailure(ContinueOnChipMainThread(CHIP_ERROR_INVALID_ARGUMENT));
- }
-
- if (shouldContinue)
- {
- ContinueOnChipMainThread(CHIP_NO_ERROR);
- }
- }
-
- CHIP_ERROR DoTestStep(uint16_t testIndex) override
- {
- using namespace chip::app::Clusters;
- switch (testIndex)
- {
- }
- return CHIP_NO_ERROR;
- }
-};
-
class Test_TC_BRBINFO_2_2Suite : public TestCommand
{
public:
@@ -104735,8 +107043,11 @@
make_unique<Test_TC_ACL_1_1Suite>(credsIssuerConfig),
make_unique<Test_TC_ACL_2_1Suite>(credsIssuerConfig),
make_unique<Test_TC_ACL_2_2Suite>(credsIssuerConfig),
+ make_unique<Test_TC_ACL_2_3Suite>(credsIssuerConfig),
make_unique<Test_TC_BOOL_1_1Suite>(credsIssuerConfig),
make_unique<Test_TC_BOOL_2_1Suite>(credsIssuerConfig),
+ make_unique<Test_TC_BRBINFO_1_1Suite>(credsIssuerConfig),
+ make_unique<Test_TC_BRBINFO_2_1Suite>(credsIssuerConfig),
make_unique<Test_TC_ACT_1_1Suite>(credsIssuerConfig),
make_unique<Test_TC_BIND_1_1Suite>(credsIssuerConfig),
make_unique<Test_TC_CC_1_1Suite>(credsIssuerConfig),
@@ -104804,6 +107115,7 @@
make_unique<Test_TC_APBSC_1_10Suite>(credsIssuerConfig),
make_unique<Test_TC_CONTENTLAUNCHER_1_11Suite>(credsIssuerConfig),
make_unique<Test_TC_ALOGIN_1_12Suite>(credsIssuerConfig),
+ make_unique<Test_TC_ALOGIN_12_1Suite>(credsIssuerConfig),
make_unique<Test_TC_LOWPOWER_2_1Suite>(credsIssuerConfig),
make_unique<Test_TC_KEYPADINPUT_3_2Suite>(credsIssuerConfig),
make_unique<Test_TC_KEYPADINPUT_3_3Suite>(credsIssuerConfig),
@@ -104816,6 +107128,7 @@
make_unique<Test_TC_MEDIAINPUT_3_11Suite>(credsIssuerConfig),
make_unique<Test_TC_MEDIAINPUT_3_12Suite>(credsIssuerConfig),
make_unique<Test_TC_MEDIAINPUT_3_13Suite>(credsIssuerConfig),
+ make_unique<Test_TC_WAKEONLAN_4_1Suite>(credsIssuerConfig),
make_unique<Test_TC_CHANNEL_5_1Suite>(credsIssuerConfig),
make_unique<Test_TC_CHANNEL_5_2Suite>(credsIssuerConfig),
make_unique<Test_TC_CHANNEL_5_3Suite>(credsIssuerConfig),
@@ -104940,6 +107253,7 @@
make_unique<Test_TC_DRLK_2_3Suite>(credsIssuerConfig),
make_unique<Test_TC_DRLK_2_4Suite>(credsIssuerConfig),
make_unique<Test_TC_DRLK_2_5Suite>(credsIssuerConfig),
+ make_unique<Test_TC_DRLK_2_6Suite>(credsIssuerConfig),
make_unique<Test_TC_DRLK_2_7Suite>(credsIssuerConfig),
make_unique<Test_TC_DRLK_2_9Suite>(credsIssuerConfig),
make_unique<TestGroupMessagingSuite>(credsIssuerConfig),
@@ -105075,7 +107389,6 @@
make_unique<Test_TC_MEDIAINPUT_3_15Suite>(credsIssuerConfig),
make_unique<Test_TC_MEDIAINPUT_3_16Suite>(credsIssuerConfig),
make_unique<Test_TC_MEDIAINPUT_3_17Suite>(credsIssuerConfig),
- make_unique<Test_TC_WAKEONLAN_4_1Suite>(credsIssuerConfig),
make_unique<Test_TC_CHANNEL_5_4Suite>(credsIssuerConfig),
make_unique<Test_TC_CHANNEL_5_5Suite>(credsIssuerConfig),
make_unique<Test_TC_CHANNEL_5_6Suite>(credsIssuerConfig),
@@ -105090,7 +107403,6 @@
make_unique<Test_TC_CONTENTLAUNCHER_10_7Suite>(credsIssuerConfig),
make_unique<Test_TC_MC_11_1Suite>(credsIssuerConfig),
make_unique<Test_TC_MC_11_2Suite>(credsIssuerConfig),
- make_unique<Test_TC_ALOGIN_12_1Suite>(credsIssuerConfig),
make_unique<Test_TC_ALOGIN_12_2Suite>(credsIssuerConfig),
make_unique<Test_TC_CADMIN_1_1Suite>(credsIssuerConfig),
make_unique<Test_TC_CADMIN_1_2Suite>(credsIssuerConfig),
@@ -105202,7 +107514,6 @@
make_unique<Test_TC_CC_9_2Suite>(credsIssuerConfig),
make_unique<Test_TC_CC_9_3Suite>(credsIssuerConfig),
make_unique<Test_TC_DRLK_2_1Suite>(credsIssuerConfig),
- make_unique<Test_TC_DRLK_2_6Suite>(credsIssuerConfig),
make_unique<Test_TC_DRLK_2_8Suite>(credsIssuerConfig),
make_unique<Test_TC_DRLK_2_10Suite>(credsIssuerConfig),
make_unique<Test_TC_DRLK_3_1Suite>(credsIssuerConfig),
@@ -105252,7 +107563,6 @@
make_unique<Test_TC_S_2_3Suite>(credsIssuerConfig),
make_unique<Test_TC_S_3_1Suite>(credsIssuerConfig),
make_unique<Test_TC_PCC_3_1Suite>(credsIssuerConfig),
- make_unique<Test_TC_ACL_2_3Suite>(credsIssuerConfig),
make_unique<Test_TC_ACL_2_4Suite>(credsIssuerConfig),
make_unique<Test_TC_ACL_2_5Suite>(credsIssuerConfig),
make_unique<Test_TC_ACL_2_6Suite>(credsIssuerConfig),
@@ -105261,8 +107571,6 @@
make_unique<Test_TC_ACL_2_9Suite>(credsIssuerConfig),
make_unique<Test_TC_ACL_2_10Suite>(credsIssuerConfig),
make_unique<Test_TC_ULABEL_3_1Suite>(credsIssuerConfig),
- make_unique<Test_TC_BRBINFO_1_1Suite>(credsIssuerConfig),
- make_unique<Test_TC_BRBINFO_2_1Suite>(credsIssuerConfig),
make_unique<Test_TC_BRBINFO_2_2Suite>(credsIssuerConfig),
make_unique<Test_TC_BRBINFO_2_3Suite>(credsIssuerConfig),
make_unique<Test_TC_ACE_1_1Suite>(credsIssuerConfig),
diff --git a/zzz_generated/darwin-framework-tool/zap-generated/test/Commands.h b/zzz_generated/darwin-framework-tool/zap-generated/test/Commands.h
index 8bc08e4..560a723 100644
--- a/zzz_generated/darwin-framework-tool/zap-generated/test/Commands.h
+++ b/zzz_generated/darwin-framework-tool/zap-generated/test/Commands.h
@@ -39,8 +39,10 @@
printf("Test_TC_ACL_1_1\n");
printf("Test_TC_ACL_2_1\n");
printf("Test_TC_ACL_2_2\n");
+ printf("Test_TC_ACL_2_3\n");
printf("Test_TC_BOOL_1_1\n");
printf("Test_TC_BOOL_2_1\n");
+ printf("Test_TC_BRBINFO_1_1\n");
printf("Test_TC_ACT_1_1\n");
printf("Test_TC_BIND_1_1\n");
printf("Test_TC_CC_1_1\n");
@@ -102,6 +104,7 @@
printf("Test_TC_APBSC_1_10\n");
printf("Test_TC_CONTENTLAUNCHER_1_11\n");
printf("Test_TC_ALOGIN_1_12\n");
+ printf("Test_TC_ALOGIN_12_1\n");
printf("Test_TC_LOWPOWER_2_1\n");
printf("Test_TC_KEYPADINPUT_3_2\n");
printf("Test_TC_KEYPADINPUT_3_3\n");
@@ -111,6 +114,7 @@
printf("Test_TC_MEDIAINPUT_3_11\n");
printf("Test_TC_MEDIAINPUT_3_12\n");
printf("Test_TC_MEDIAINPUT_3_13\n");
+ printf("Test_TC_WAKEONLAN_4_1\n");
printf("Test_TC_CHANNEL_5_1\n");
printf("Test_TC_CHANNEL_5_2\n");
printf("Test_TC_CHANNEL_5_3\n");
@@ -225,6 +229,7 @@
printf("Test_TC_DRLK_2_3\n");
printf("Test_TC_DRLK_2_4\n");
printf("Test_TC_DRLK_2_5\n");
+ printf("Test_TC_DRLK_2_6\n");
printf("Test_TC_DRLK_2_7\n");
printf("Test_TC_DRLK_2_9\n");
printf("TestGroupsCluster\n");
@@ -2752,6 +2757,1102 @@
}
};
+class Test_TC_ACL_2_3 : public TestCommandBridge {
+public:
+ // NOLINTBEGIN(clang-analyzer-nullability.NullPassedToNonnull): Test constructor nullability not enforced
+ Test_TC_ACL_2_3()
+ : TestCommandBridge("Test_TC_ACL_2_3")
+ , mTestIndex(0)
+ {
+ AddArgument("nodeId", 0, UINT64_MAX, &mNodeId);
+ AddArgument("cluster", &mCluster);
+ AddArgument("endpoint", 0, UINT16_MAX, &mEndpoint);
+ AddArgument("D_OK_EMPTY", &mDOkEmpty);
+ AddArgument("D_OK_SINGLE", &mDOkSingle);
+ AddArgument("D_OK_FULL", &mDOkFull);
+ AddArgument("D_BAD_LENGTH", &mDBadLength);
+ AddArgument("D_BAD_STRUCT", &mDBadStruct);
+ AddArgument("D_BAD_LIST", &mDBadList);
+ AddArgument("D_BAD_ELEM", &mDBadElem);
+ AddArgument("D_BAD_OVERFLOW", &mDBadOverflow);
+ AddArgument("D_BAD_UNDERFLOW", &mDBadUnderflow);
+ AddArgument("D_BAD_NONE", &mDBadNone);
+ AddArgument("timeout", 0, UINT16_MAX, &mTimeout);
+ }
+ // NOLINTEND(clang-analyzer-nullability.NullPassedToNonnull)
+
+ ~Test_TC_ACL_2_3() {}
+
+ /////////// TestCommand Interface /////////
+ void NextTest() override
+ {
+ CHIP_ERROR err = CHIP_NO_ERROR;
+
+ if (0 == mTestIndex) {
+ ChipLogProgress(chipTool, " **** Test Start: Test_TC_ACL_2_3\n");
+ }
+
+ if (mTestCount == mTestIndex) {
+ ChipLogProgress(chipTool, " **** Test Complete: Test_TC_ACL_2_3\n");
+ SetCommandExitStatus(CHIP_NO_ERROR);
+ return;
+ }
+
+ Wait();
+
+ // Ensure we increment mTestIndex before we start running the relevant
+ // command. That way if we lose the timeslice after we send the message
+ // but before our function call returns, we won't end up with an
+ // incorrect mTestIndex value observed when we get the response.
+ switch (mTestIndex++) {
+ case 0:
+ ChipLogProgress(chipTool, " ***** Test Step 0 : Wait for the commissioned device to be retrieved\n");
+ err = TestWaitForTheCommissionedDeviceToBeRetrieved_0();
+ break;
+ case 1:
+ ChipLogProgress(chipTool,
+ " ***** Test Step 1 : TH1 reads DUT Endpoint 0 OperationalCredentials cluster CurrentFabricIndex attribute\n");
+ err = TestTh1ReadsDutEndpoint0OperationalCredentialsClusterCurrentFabricIndexAttribute_1();
+ break;
+ case 2:
+ ChipLogProgress(chipTool, " ***** Test Step 2 : TH1 reads DUT Endpoint 0 AccessControl cluster Extension attribute\n");
+ if (ShouldSkip("ACL.S.A0001")) {
+ NextTest();
+ return;
+ }
+ err = TestTh1ReadsDutEndpoint0AccessControlClusterExtensionAttribute_2();
+ break;
+ case 3:
+ ChipLogProgress(chipTool,
+ " ***** Test Step 3 : TH1 writes DUT Endpoint 0 AccessControl cluster Extension attribute, value is list of "
+ "AccessControlExtensionStruct containing 1 element 1. struct: Data field: D_OK_EMPTY : 1718\n");
+ if (ShouldSkip("ACL.S.A0001")) {
+ NextTest();
+ return;
+ }
+ err = TestTh1WritesDutEndpoint0AccessControlClusterExtensionAttributeValueIsListOfAccessControlExtensionStructContaining1Element1StructDataFieldDOkEmpty1718_3();
+ break;
+ case 4:
+ ChipLogProgress(chipTool, " ***** Test Step 4 : TH1 reads DUT Endpoint 0 AccessControl cluster Extension attribute\n");
+ if (ShouldSkip("ACL.S.A0001")) {
+ NextTest();
+ return;
+ }
+ err = TestTh1ReadsDutEndpoint0AccessControlClusterExtensionAttribute_4();
+ break;
+ case 5:
+ ChipLogProgress(chipTool,
+ " ***** Test Step 5 : TH1 writes DUT Endpoint 0 AccessControl cluster Extension attribute, value is list of "
+ "AccessControlExtensionStruct containing 1 element 1.struct Data field: D_OK_SINGLE "
+ ":17D00000F1FF01003D48656C6C6F20576F726C642E205468697320697320612073696E676C6520656C656D656E74206C6976696E672061732"
+ "0612063686172737472696E670018\n");
+ if (ShouldSkip("ACL.S.A0001")) {
+ NextTest();
+ return;
+ }
+ err = TestTh1WritesDutEndpoint0AccessControlClusterExtensionAttributeValueIsListOfAccessControlExtensionStructContaining1Element1structDataFieldDOkSingle17d00000f1ff01003d48656c6c6f20576f726c642e205468697320697320612073696e676c6520656c656d656e74206c6976696e6720617320612063686172737472696e670018_5();
+ break;
+ case 6:
+ ChipLogProgress(chipTool, " ***** Test Step 6 : TH1 reads DUT Endpoint 0 AccessControl cluster Extension attribute\n");
+ if (ShouldSkip("ACL.S.A0001")) {
+ NextTest();
+ return;
+ }
+ err = TestTh1ReadsDutEndpoint0AccessControlClusterExtensionAttribute_6();
+ break;
+ case 7:
+ ChipLogProgress(chipTool,
+ " ***** Test Step 7 : TH1 writes DUT Endpoint 0 AccessControl cluster Extension attribute, value is list of "
+ "AccessControlExtensionStruct containing 1 element 1.struct Data field: D_OK_FULL "
+ ":17D00000F1FF01003D48656C6C6F20576F726C642E205468697320697320612073696E676C6520656C656D656E74206C6976696E672061732"
+ "0612063686172737472696E6700D00000F1FF02003148656C6C6F20576F726C642E205468697320697320612073696E676C6520656C656D656"
+ "E7420616761696E2E2E2E2E2E0018\n");
+ if (ShouldSkip("ACL.S.A0001")) {
+ NextTest();
+ return;
+ }
+ err = TestTh1WritesDutEndpoint0AccessControlClusterExtensionAttributeValueIsListOfAccessControlExtensionStructContaining1Element1structDataFieldDOkFull17d00000f1ff01003d48656c6c6f20576f726c642e205468697320697320612073696e676c6520656c656d656e74206c6976696e6720617320612063686172737472696e6700d00000f1ff02003148656c6c6f20576f726c642e205468697320697320612073696e676c6520656c656d656e7420616761696e2e2e2e2e2e0018_7();
+ break;
+ case 8:
+ ChipLogProgress(chipTool, " ***** Test Step 8 : TH1 reads DUT Endpoint 0 AccessControl cluster Extension attribute\n");
+ if (ShouldSkip("ACL.S.A0001")) {
+ NextTest();
+ return;
+ }
+ err = TestTh1ReadsDutEndpoint0AccessControlClusterExtensionAttribute_8();
+ break;
+ case 9:
+ ChipLogProgress(chipTool,
+ " ***** Test Step 9 : TH1 writes DUT Endpoint 0 AccessControl cluster Extension attribute, value is list of "
+ "AccessControlExtensionStruct containing 1 element 1 .struct Data field: D_BAD_LENGTH "
+ ":17D00000F1FF01003D48656C6C6F20576F726C642E205468697320697320612073696E676C6520656C656D656E74206C6976696E672061732"
+ "0612063686172737472696E6700D00000F1FF02003248656C6C6F20576F726C642E205468697320697320612073696E676C6520656C656D656"
+ "E7420616761696E2E2E2E2E2E2E0018\n");
+ if (ShouldSkip("ACL.S.A0001")) {
+ NextTest();
+ return;
+ }
+ err = TestTh1WritesDutEndpoint0AccessControlClusterExtensionAttributeValueIsListOfAccessControlExtensionStructContaining1Element1structDataFieldDBadLength17d00000f1ff01003d48656c6c6f20576f726c642e205468697320697320612073696e676c6520656c656d656e74206c6976696e6720617320612063686172737472696e6700d00000f1ff02003248656c6c6f20576f726c642e205468697320697320612073696e676c6520656c656d656e7420616761696e2e2e2e2e2e2e0018_9();
+ break;
+ case 10:
+ ChipLogProgress(chipTool,
+ " ***** Test Step 10 : TH1 writes DUT Endpoint 0 AccessControl cluster Extension attribute, value is list of "
+ "AccessControlExtensionStruct containing 1 element 1. struct Data field: D_BAD_STRUCT : 1518\n");
+ if (ShouldSkip("ACL.S.A0001")) {
+ NextTest();
+ return;
+ }
+ err = TestTh1WritesDutEndpoint0AccessControlClusterExtensionAttributeValueIsListOfAccessControlExtensionStructContaining1Element1StructDataFieldDBadStruct1518_10();
+ break;
+ case 11:
+ ChipLogProgress(chipTool,
+ " ***** Test Step 11 : TH1 writes DUT Endpoint 0 AccessControl cluster Extension attribute, value is list of "
+ "AccessControlExtensionStruct containing 1 element 1. struct Data field: D_BAD_LIST "
+ ":3701D00000F1FF01003D48656C6C6F20576F726C642E205468697320697320612073696E676C6520656C656D656E74206C6976696E6720617"
+ "320612063686172737472696E670018\n");
+ if (ShouldSkip("ACL.S.A0001")) {
+ NextTest();
+ return;
+ }
+ err = TestTh1WritesDutEndpoint0AccessControlClusterExtensionAttributeValueIsListOfAccessControlExtensionStructContaining1Element1StructDataFieldDBadList3701d00000f1ff01003d48656c6c6f20576f726c642e205468697320697320612073696e676c6520656c656d656e74206c6976696e6720617320612063686172737472696e670018_11();
+ break;
+ case 12:
+ ChipLogProgress(chipTool,
+ " ***** Test Step 12 : TH1 writes DUT Endpoint 0 AccessControl cluster Extension attribute, value is list of "
+ "AccessControlExtensionStruct containing 1 element 1. struct Data field: D_BAD_ELEM "
+ ":17103D48656C6C6F20576F726C642E205468697320697320612073696E676C6520656C656D656E74206C6976696E672061732061206368617"
+ "2737472696E670018\n");
+ if (ShouldSkip("ACL.S.A0001")) {
+ NextTest();
+ return;
+ }
+ err = TestTh1WritesDutEndpoint0AccessControlClusterExtensionAttributeValueIsListOfAccessControlExtensionStructContaining1Element1StructDataFieldDBadElem17103d48656c6c6f20576f726c642e205468697320697320612073696e676c6520656c656d656e74206c6976696e6720617320612063686172737472696e670018_12();
+ break;
+ case 13:
+ ChipLogProgress(chipTool,
+ " ***** Test Step 13 : TH1 writes DUT Endpoint 0 AccessControl cluster Extension attribute, value is list of "
+ "AccessControlExtensionStruct containing 1 element 1 .struct Data field: D_BAD_OVERFLOW : "
+ "17D00000F1FF01003D48656C6C6F20576F726C642E205468697320697320612073696E676C6520656C656D656E74206C6976696E6720617320"
+ "612063686172737472696E670018FF\n");
+ if (ShouldSkip("ACL.S.A0001")) {
+ NextTest();
+ return;
+ }
+ err = TestTh1WritesDutEndpoint0AccessControlClusterExtensionAttributeValueIsListOfAccessControlExtensionStructContaining1Element1structDataFieldDBadOverflow17d00000f1ff01003d48656c6c6f20576f726c642e205468697320697320612073696e676c6520656c656d656e74206c6976696e6720617320612063686172737472696e670018ff_13();
+ break;
+ case 14:
+ ChipLogProgress(chipTool,
+ " ***** Test Step 14 : TH1 writes DUT Endpoint 0 AccessControl cluster Extension attribute, value is list of "
+ "AccessControlExtensionStruct containing 1 element 1. struct Data field: D_BAD_UNDERFLOW "
+ ":17D00000F1FF01003D48656C6C6F20576F726C642E205468697320697320612073696E676C6520656C656D656E74206C6976696E672061732"
+ "0612063686172737472696E6700\n");
+ if (ShouldSkip("ACL.S.A0001")) {
+ NextTest();
+ return;
+ }
+ err = TestTh1WritesDutEndpoint0AccessControlClusterExtensionAttributeValueIsListOfAccessControlExtensionStructContaining1Element1StructDataFieldDBadUnderflow17d00000f1ff01003d48656c6c6f20576f726c642e205468697320697320612073696e676c6520656c656d656e74206c6976696e6720617320612063686172737472696e6700_14();
+ break;
+ case 15:
+ ChipLogProgress(chipTool,
+ " ***** Test Step 15 : TH1 writes DUT Endpoint 0 AccessControl cluster Extension attribute, value is list of "
+ "AccessControlExtensionStruct containing 1 element 1.struct Data field: D_BAD_NONE\n");
+ if (ShouldSkip("ACL.S.A0001")) {
+ NextTest();
+ return;
+ }
+ err = TestTh1WritesDutEndpoint0AccessControlClusterExtensionAttributeValueIsListOfAccessControlExtensionStructContaining1Element1structDataFieldDBadNone_15();
+ break;
+ case 16:
+ ChipLogProgress(chipTool,
+ " ***** Test Step 16 : TH1 writes DUT Endpoint 0 AccessControl cluster Extension attribute, value is list of "
+ "AccessControlExtensionStruct containing 2 elements . value is list of AccessControlExtensionStruct containing 2 "
+ "elements . first element contains Data field: D_OK_EMPTY 1718 . second element contains Data field: D_OK_SINGLE "
+ "17D00000F1FF01003D48656C6C6F20576F726C642E205468697320697320612073696E676C6520656C656D656E74206C6976696E6720617320"
+ "612063686172737472696E670018\n");
+ if (ShouldSkip("ACL.S.A0001")) {
+ NextTest();
+ return;
+ }
+ err = TestTh1WritesDutEndpoint0AccessControlClusterExtensionAttributeValueIsListOfAccessControlExtensionStructContaining2ElementsValueIsListOfAccessControlExtensionStructContaining2ElementsFirstElementContainsDataFieldDOkEmpty1718SecondElementContainsDataFieldDOkSingle17d00000f1ff01003d48656c6c6f20576f726c642e205468697320697320612073696e676c6520656c656d656e74206c6976696e6720617320612063686172737472696e670018_16();
+ break;
+ case 17:
+ ChipLogProgress(chipTool, " ***** Test Step 17 : TH1 reads DUT Endpoint 0 AccessControl cluster Extension attribute\n");
+ if (ShouldSkip("ACL.S.A0001")) {
+ NextTest();
+ return;
+ }
+ err = TestTh1ReadsDutEndpoint0AccessControlClusterExtensionAttribute_17();
+ break;
+ case 18:
+ ChipLogProgress(chipTool,
+ " ***** Test Step 18 : TH1 writes DUT Endpoint 0 AccessControl cluster Extension attribute, value is an empty "
+ "list\n");
+ if (ShouldSkip("ACL.S.A0001")) {
+ NextTest();
+ return;
+ }
+ err = TestTh1WritesDutEndpoint0AccessControlClusterExtensionAttributeValueIsAnEmptyList_18();
+ break;
+ case 19:
+ ChipLogProgress(chipTool, " ***** Test Step 19 : TH1 reads DUT Endpoint 0 AccessControl cluster Extension attribute\n");
+ if (ShouldSkip("ACL.S.A0001")) {
+ NextTest();
+ return;
+ }
+ err = TestTh1ReadsDutEndpoint0AccessControlClusterExtensionAttribute_19();
+ break;
+ }
+
+ if (CHIP_NO_ERROR != err) {
+ ChipLogError(chipTool, " ***** Test Failure: %s\n", chip::ErrorStr(err));
+ SetCommandExitStatus(err);
+ }
+ }
+
+ void OnStatusUpdate(const chip::app::StatusIB & status) override
+ {
+ switch (mTestIndex - 1) {
+ case 0:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ break;
+ case 1:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ break;
+ case 2:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ break;
+ case 3:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ break;
+ case 4:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ break;
+ case 5:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ break;
+ case 6:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ break;
+ case 7:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ break;
+ case 8:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ break;
+ case 9:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), EMBER_ZCL_STATUS_CONSTRAINT_ERROR));
+ break;
+ case 10:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), EMBER_ZCL_STATUS_CONSTRAINT_ERROR));
+ break;
+ case 11:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), EMBER_ZCL_STATUS_CONSTRAINT_ERROR));
+ break;
+ case 12:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), EMBER_ZCL_STATUS_CONSTRAINT_ERROR));
+ break;
+ case 13:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), EMBER_ZCL_STATUS_CONSTRAINT_ERROR));
+ break;
+ case 14:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), EMBER_ZCL_STATUS_CONSTRAINT_ERROR));
+ break;
+ case 15:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), EMBER_ZCL_STATUS_CONSTRAINT_ERROR));
+ break;
+ case 16:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), EMBER_ZCL_STATUS_CONSTRAINT_ERROR));
+ break;
+ case 17:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ break;
+ case 18:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ break;
+ case 19:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ break;
+ }
+
+ // Go on to the next test.
+ ContinueOnChipMainThread(CHIP_NO_ERROR);
+ }
+
+ chip::System::Clock::Timeout GetWaitDuration() const override
+ {
+ return chip::System::Clock::Seconds16(mTimeout.ValueOr(kTimeoutInSeconds));
+ }
+
+private:
+ std::atomic_uint16_t mTestIndex;
+ const uint16_t mTestCount = 20;
+
+ chip::Optional<chip::NodeId> mNodeId;
+ chip::Optional<chip::CharSpan> mCluster;
+ chip::Optional<chip::EndpointId> mEndpoint;
+ chip::Optional<chip::ByteSpan> mDOkEmpty;
+ chip::Optional<chip::ByteSpan> mDOkSingle;
+ chip::Optional<chip::ByteSpan> mDOkFull;
+ chip::Optional<chip::ByteSpan> mDBadLength;
+ chip::Optional<chip::ByteSpan> mDBadStruct;
+ chip::Optional<chip::ByteSpan> mDBadList;
+ chip::Optional<chip::ByteSpan> mDBadElem;
+ chip::Optional<chip::ByteSpan> mDBadOverflow;
+ chip::Optional<chip::ByteSpan> mDBadUnderflow;
+ chip::Optional<chip::ByteSpan> mDBadNone;
+ chip::Optional<uint16_t> mTimeout;
+
+ CHIP_ERROR TestWaitForTheCommissionedDeviceToBeRetrieved_0()
+ {
+
+ chip::app::Clusters::DelayCommands::Commands::WaitForCommissionee::Type value;
+ value.nodeId = mNodeId.HasValue() ? mNodeId.Value() : 305414945ULL;
+ return WaitForCommissionee("alpha", value);
+ }
+ NSNumber * _Nonnull CurrentFabricIndex;
+
+ CHIP_ERROR TestTh1ReadsDutEndpoint0OperationalCredentialsClusterCurrentFabricIndexAttribute_1()
+ {
+
+ MTRBaseDevice * device = GetDevice("alpha");
+ __auto_type * cluster = [[MTRBaseClusterOperationalCredentials alloc] initWithDevice:device
+ endpointID:@(0)
+ queue:mCallbackQueue];
+ VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE);
+
+ [cluster readAttributeCurrentFabricIndexWithCompletion:^(NSNumber * _Nullable value, NSError * _Nullable err) {
+ NSLog(@"TH1 reads DUT Endpoint 0 OperationalCredentials cluster CurrentFabricIndex attribute Error: %@", err);
+
+ VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
+
+ {
+ CurrentFabricIndex = value;
+ }
+
+ NextTest();
+ }];
+
+ return CHIP_NO_ERROR;
+ }
+
+ CHIP_ERROR TestTh1ReadsDutEndpoint0AccessControlClusterExtensionAttribute_2()
+ {
+
+ MTRBaseDevice * device = GetDevice("alpha");
+ __auto_type * cluster = [[MTRBaseClusterAccessControl alloc] initWithDevice:device endpointID:@(0) queue:mCallbackQueue];
+ VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE);
+
+ __auto_type * params = [[MTRReadParams alloc] init];
+ params.filterByFabric = true;
+ [cluster
+ readAttributeExtensionWithParams:params
+ completion:^(NSArray * _Nullable value, NSError * _Nullable err) {
+ NSLog(@"TH1 reads DUT Endpoint 0 AccessControl cluster Extension attribute Error: %@", err);
+
+ VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
+
+ {
+ id actualValue = value;
+ VerifyOrReturn(CheckValue("Extension", [actualValue count], static_cast<uint32_t>(0)));
+ }
+
+ NextTest();
+ }];
+
+ return CHIP_NO_ERROR;
+ }
+
+ CHIP_ERROR
+ TestTh1WritesDutEndpoint0AccessControlClusterExtensionAttributeValueIsListOfAccessControlExtensionStructContaining1Element1StructDataFieldDOkEmpty1718_3()
+ {
+
+ MTRBaseDevice * device = GetDevice("alpha");
+ __auto_type * cluster = [[MTRBaseClusterAccessControl alloc] initWithDevice:device endpointID:@(0) queue:mCallbackQueue];
+ VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE);
+
+ id extensionArgument;
+ {
+ NSMutableArray * temp_0 = [[NSMutableArray alloc] init];
+ temp_0[0] = [[MTRAccessControlClusterExtensionEntry alloc] init];
+ ((MTRAccessControlClusterExtensionEntry *) temp_0[0]).data = mDOkEmpty.HasValue()
+ ? [NSData dataWithBytes:mDOkEmpty.Value().data() length:mDOkEmpty.Value().size()]
+ : [[NSData alloc] initWithBytes:"\x17\x18" length:2];
+ ((MTRAccessControlClusterExtensionEntry *) temp_0[0]).fabricIndex = [CurrentFabricIndex copy];
+
+ extensionArgument = temp_0;
+ }
+ [cluster writeAttributeExtensionWithValue:extensionArgument
+ completion:^(NSError * _Nullable err) {
+ NSLog(@"TH1 writes DUT Endpoint 0 AccessControl cluster Extension attribute, value is "
+ @"list of AccessControlExtensionStruct containing 1 element 1. struct: Data "
+ @"field: D_OK_EMPTY : 1718 Error: %@",
+ err);
+
+ VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
+
+ NextTest();
+ }];
+
+ return CHIP_NO_ERROR;
+ }
+
+ CHIP_ERROR TestTh1ReadsDutEndpoint0AccessControlClusterExtensionAttribute_4()
+ {
+
+ MTRBaseDevice * device = GetDevice("alpha");
+ __auto_type * cluster = [[MTRBaseClusterAccessControl alloc] initWithDevice:device endpointID:@(0) queue:mCallbackQueue];
+ VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE);
+
+ __auto_type * params = [[MTRReadParams alloc] init];
+ params.filterByFabric = true;
+ [cluster
+ readAttributeExtensionWithParams:params
+ completion:^(NSArray * _Nullable value, NSError * _Nullable err) {
+ NSLog(@"TH1 reads DUT Endpoint 0 AccessControl cluster Extension attribute Error: %@", err);
+
+ VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
+
+ {
+ id actualValue = value;
+ VerifyOrReturn(CheckValue("Extension", [actualValue count], static_cast<uint32_t>(1)));
+ VerifyOrReturn(CheckValueAsString(
+ "Data", ((MTRAccessControlClusterExtensionEntry *) actualValue[0]).data,
+ mDOkEmpty.HasValue() ? [NSData dataWithBytes:mDOkEmpty.Value().data()
+ length:mDOkEmpty.Value().size()]
+ : [[NSData alloc] initWithBytes:"\x17\x18" length:2]
+
+ ));
+ VerifyOrReturn(CheckValue("FabricIndex",
+ ((MTRAccessControlClusterExtensionEntry *) actualValue[0]).fabricIndex,
+ CurrentFabricIndex));
+ }
+
+ NextTest();
+ }];
+
+ return CHIP_NO_ERROR;
+ }
+
+ CHIP_ERROR
+ TestTh1WritesDutEndpoint0AccessControlClusterExtensionAttributeValueIsListOfAccessControlExtensionStructContaining1Element1structDataFieldDOkSingle17d00000f1ff01003d48656c6c6f20576f726c642e205468697320697320612073696e676c6520656c656d656e74206c6976696e6720617320612063686172737472696e670018_5()
+ {
+
+ MTRBaseDevice * device = GetDevice("alpha");
+ __auto_type * cluster = [[MTRBaseClusterAccessControl alloc] initWithDevice:device endpointID:@(0) queue:mCallbackQueue];
+ VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE);
+
+ id extensionArgument;
+ {
+ NSMutableArray * temp_0 = [[NSMutableArray alloc] init];
+ temp_0[0] = [[MTRAccessControlClusterExtensionEntry alloc] init];
+ ((MTRAccessControlClusterExtensionEntry *) temp_0[0]).data = mDOkSingle.HasValue()
+ ? [NSData dataWithBytes:mDOkSingle.Value().data() length:mDOkSingle.Value().size()]
+ : [[NSData alloc]
+ initWithBytes:"\x17\xD0\x00\x00\xF1\xFF\x01\x00\x3D\x48\x65\x6C\x6C\x6F\x20\x57\x6F\x72\x6C\x64\x2E\x20\x54\x68"
+ "\x69\x73\x20\x69\x73\x20\x61\x20\x73\x69\x6E\x67\x6C\x65\x20\x65\x6C\x65\x6D\x65\x6E\x74\x20\x6C"
+ "\x69\x76\x69\x6E\x67\x20\x61\x73\x20\x61\x20\x63\x68\x61\x72\x73\x74\x72\x69\x6E\x67\x00\x18"
+ length:71];
+ ((MTRAccessControlClusterExtensionEntry *) temp_0[0]).fabricIndex = [CurrentFabricIndex copy];
+
+ extensionArgument = temp_0;
+ }
+ [cluster
+ writeAttributeExtensionWithValue:extensionArgument
+ completion:^(NSError * _Nullable err) {
+ NSLog(
+ @"TH1 writes DUT Endpoint 0 AccessControl cluster Extension attribute, value is list of "
+ @"AccessControlExtensionStruct containing 1 element 1.struct Data field: D_OK_SINGLE "
+ @":17D00000F1FF01003D48656C6C6F20576F726C642E205468697320697320612073696E676C6520656C656D"
+ @"656E74206C6976696E6720617320612063686172737472696E670018 Error: %@",
+ err);
+
+ VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
+
+ NextTest();
+ }];
+
+ return CHIP_NO_ERROR;
+ }
+
+ CHIP_ERROR TestTh1ReadsDutEndpoint0AccessControlClusterExtensionAttribute_6()
+ {
+
+ MTRBaseDevice * device = GetDevice("alpha");
+ __auto_type * cluster = [[MTRBaseClusterAccessControl alloc] initWithDevice:device endpointID:@(0) queue:mCallbackQueue];
+ VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE);
+
+ __auto_type * params = [[MTRReadParams alloc] init];
+ params.filterByFabric = true;
+ [cluster
+ readAttributeExtensionWithParams:params
+ completion:^(NSArray * _Nullable value, NSError * _Nullable err) {
+ NSLog(@"TH1 reads DUT Endpoint 0 AccessControl cluster Extension attribute Error: %@", err);
+
+ VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
+
+ {
+ id actualValue = value;
+ VerifyOrReturn(CheckValue("Extension", [actualValue count], static_cast<uint32_t>(1)));
+ VerifyOrReturn(CheckValueAsString(
+ "Data", ((MTRAccessControlClusterExtensionEntry *) actualValue[0]).data,
+ mDOkSingle.HasValue()
+ ? [NSData dataWithBytes:mDOkSingle.Value().data()
+ length:mDOkSingle.Value().size()]
+ : [[NSData alloc]
+ initWithBytes:
+ "\x17\xD0\x00\x00\xF1\xFF\x01\x00\x3D\x48\x65\x6C\x6C\x6F\x20\x57\x6F\x72"
+ "\x6C\x64\x2E\x20\x54\x68\x69\x73\x20\x69\x73\x20\x61\x20\x73\x69\x6E\x67"
+ "\x6C\x65\x20\x65\x6C\x65\x6D\x65\x6E\x74\x20\x6C\x69\x76\x69\x6E\x67\x20"
+ "\x61\x73\x20\x61\x20\x63\x68\x61\x72\x73\x74\x72\x69\x6E\x67\x00\x18"
+ length:71]
+
+ ));
+ VerifyOrReturn(CheckValue("FabricIndex",
+ ((MTRAccessControlClusterExtensionEntry *) actualValue[0]).fabricIndex,
+ CurrentFabricIndex));
+ }
+
+ NextTest();
+ }];
+
+ return CHIP_NO_ERROR;
+ }
+
+ CHIP_ERROR
+ TestTh1WritesDutEndpoint0AccessControlClusterExtensionAttributeValueIsListOfAccessControlExtensionStructContaining1Element1structDataFieldDOkFull17d00000f1ff01003d48656c6c6f20576f726c642e205468697320697320612073696e676c6520656c656d656e74206c6976696e6720617320612063686172737472696e6700d00000f1ff02003148656c6c6f20576f726c642e205468697320697320612073696e676c6520656c656d656e7420616761696e2e2e2e2e2e0018_7()
+ {
+
+ MTRBaseDevice * device = GetDevice("alpha");
+ __auto_type * cluster = [[MTRBaseClusterAccessControl alloc] initWithDevice:device endpointID:@(0) queue:mCallbackQueue];
+ VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE);
+
+ id extensionArgument;
+ {
+ NSMutableArray * temp_0 = [[NSMutableArray alloc] init];
+ temp_0[0] = [[MTRAccessControlClusterExtensionEntry alloc] init];
+ ((MTRAccessControlClusterExtensionEntry *) temp_0[0]).data = mDOkFull.HasValue()
+ ? [NSData dataWithBytes:mDOkFull.Value().data() length:mDOkFull.Value().size()]
+ : [[NSData alloc]
+ initWithBytes:
+ "\x17\xD0\x00\x00\xF1\xFF\x01\x00\x3D\x48\x65\x6C\x6C\x6F\x20\x57\x6F\x72\x6C\x64\x2E\x20\x54\x68\x69\x73"
+ "\x20\x69\x73\x20\x61\x20\x73\x69\x6E\x67\x6C\x65\x20\x65\x6C\x65\x6D\x65\x6E\x74\x20\x6C\x69\x76\x69\x6E"
+ "\x67\x20\x61\x73\x20\x61\x20\x63\x68\x61\x72\x73\x74\x72\x69\x6E\x67\x00\xD0\x00\x00\xF1\xFF\x02\x00\x31"
+ "\x48\x65\x6C\x6C\x6F\x20\x57\x6F\x72\x6C\x64\x2E\x20\x54\x68\x69\x73\x20\x69\x73\x20\x61\x20\x73\x69\x6E"
+ "\x67\x6C\x65\x20\x65\x6C\x65\x6D\x65\x6E\x74\x20\x61\x67\x61\x69\x6E\x2E\x2E\x2E\x2E\x2E\x00\x18"
+ length:128];
+ ((MTRAccessControlClusterExtensionEntry *) temp_0[0]).fabricIndex = [CurrentFabricIndex copy];
+
+ extensionArgument = temp_0;
+ }
+ [cluster
+ writeAttributeExtensionWithValue:extensionArgument
+ completion:^(NSError * _Nullable err) {
+ NSLog(@"TH1 writes DUT Endpoint 0 AccessControl cluster Extension attribute, value is list "
+ @"of AccessControlExtensionStruct containing 1 element 1.struct Data field: D_OK_FULL "
+ @":17D00000F1FF01003D48656C6C6F20576F726C642E205468697320697320612073696E676C6520656C65"
+ @"6D656E74206C6976696E6720617320612063686172737472696E6700D00000F1FF02003148656C6C6F205"
+ @"76F726C642E205468697320697320612073696E676C6520656C656D656E7420616761696E2E2E2E2E2E00"
+ @"18 Error: %@",
+ err);
+
+ VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
+
+ NextTest();
+ }];
+
+ return CHIP_NO_ERROR;
+ }
+
+ CHIP_ERROR TestTh1ReadsDutEndpoint0AccessControlClusterExtensionAttribute_8()
+ {
+
+ MTRBaseDevice * device = GetDevice("alpha");
+ __auto_type * cluster = [[MTRBaseClusterAccessControl alloc] initWithDevice:device endpointID:@(0) queue:mCallbackQueue];
+ VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE);
+
+ __auto_type * params = [[MTRReadParams alloc] init];
+ params.filterByFabric = true;
+ [cluster
+ readAttributeExtensionWithParams:params
+ completion:^(NSArray * _Nullable value, NSError * _Nullable err) {
+ NSLog(@"TH1 reads DUT Endpoint 0 AccessControl cluster Extension attribute Error: %@", err);
+
+ VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
+
+ {
+ id actualValue = value;
+ VerifyOrReturn(CheckValue("Extension", [actualValue count], static_cast<uint32_t>(1)));
+ VerifyOrReturn(CheckValueAsString(
+ "Data", ((MTRAccessControlClusterExtensionEntry *) actualValue[0]).data,
+ mDOkFull.HasValue()
+ ? [NSData dataWithBytes:mDOkFull.Value().data() length:mDOkFull.Value().size()]
+ : [[NSData alloc]
+ initWithBytes:
+ "\x17\xD0\x00\x00\xF1\xFF\x01\x00\x3D\x48\x65\x6C\x6C\x6F\x20\x57\x6F\x72"
+ "\x6C\x64\x2E\x20\x54\x68\x69\x73\x20\x69\x73\x20\x61\x20\x73\x69\x6E\x67"
+ "\x6C\x65\x20\x65\x6C\x65\x6D\x65\x6E\x74\x20\x6C\x69\x76\x69\x6E\x67\x20"
+ "\x61\x73\x20\x61\x20\x63\x68\x61\x72\x73\x74\x72\x69\x6E\x67\x00\xD0\x00"
+ "\x00\xF1\xFF\x02\x00\x31\x48\x65\x6C\x6C\x6F\x20\x57\x6F\x72\x6C\x64\x2E"
+ "\x20\x54\x68\x69\x73\x20\x69\x73\x20\x61\x20\x73\x69\x6E\x67\x6C\x65\x20"
+ "\x65\x6C\x65\x6D\x65\x6E\x74\x20\x61\x67\x61\x69\x6E\x2E\x2E\x2E\x2E\x2E"
+ "\x00\x18"
+ length:128]
+
+ ));
+ VerifyOrReturn(CheckValue("FabricIndex",
+ ((MTRAccessControlClusterExtensionEntry *) actualValue[0]).fabricIndex,
+ CurrentFabricIndex));
+ }
+
+ NextTest();
+ }];
+
+ return CHIP_NO_ERROR;
+ }
+
+ CHIP_ERROR
+ TestTh1WritesDutEndpoint0AccessControlClusterExtensionAttributeValueIsListOfAccessControlExtensionStructContaining1Element1structDataFieldDBadLength17d00000f1ff01003d48656c6c6f20576f726c642e205468697320697320612073696e676c6520656c656d656e74206c6976696e6720617320612063686172737472696e6700d00000f1ff02003248656c6c6f20576f726c642e205468697320697320612073696e676c6520656c656d656e7420616761696e2e2e2e2e2e2e0018_9()
+ {
+
+ MTRBaseDevice * device = GetDevice("alpha");
+ __auto_type * cluster = [[MTRBaseClusterAccessControl alloc] initWithDevice:device endpointID:@(0) queue:mCallbackQueue];
+ VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE);
+
+ id extensionArgument;
+ {
+ NSMutableArray * temp_0 = [[NSMutableArray alloc] init];
+ temp_0[0] = [[MTRAccessControlClusterExtensionEntry alloc] init];
+ ((MTRAccessControlClusterExtensionEntry *) temp_0[0]).data = mDBadLength.HasValue()
+ ? [NSData dataWithBytes:mDBadLength.Value().data() length:mDBadLength.Value().size()]
+ : [[NSData alloc]
+ initWithBytes:
+ "\x17\xD0\x00\x00\xF1\xFF\x01\x00\x3D\x48\x65\x6C\x6C\x6F\x20\x57\x6F\x72\x6C\x64\x2E\x20\x54\x68\x69\x73"
+ "\x20\x69\x73\x20\x61\x20\x73\x69\x6E\x67\x6C\x65\x20\x65\x6C\x65\x6D\x65\x6E\x74\x20\x6C\x69\x76\x69\x6E"
+ "\x67\x20\x61\x73\x20\x61\x20\x63\x68\x61\x72\x73\x74\x72\x69\x6E\x67\x00\xD0\x00\x00\xF1\xFF\x02\x00\x32"
+ "\x48\x65\x6C\x6C\x6F\x20\x57\x6F\x72\x6C\x64\x2E\x20\x54\x68\x69\x73\x20\x69\x73\x20\x61\x20\x73\x69\x6E"
+ "\x67\x6C\x65\x20\x65\x6C\x65\x6D\x65\x6E\x74\x20\x61\x67\x61\x69\x6E\x2E\x2E\x2E\x2E\x2E\x2E\x00\x18"
+ length:129];
+ ((MTRAccessControlClusterExtensionEntry *) temp_0[0]).fabricIndex = [CurrentFabricIndex copy];
+
+ extensionArgument = temp_0;
+ }
+ [cluster
+ writeAttributeExtensionWithValue:extensionArgument
+ completion:^(NSError * _Nullable err) {
+ NSLog(
+ @"TH1 writes DUT Endpoint 0 AccessControl cluster Extension attribute, value is list of "
+ @"AccessControlExtensionStruct containing 1 element 1 .struct Data field: D_BAD_LENGTH "
+ @":17D00000F1FF01003D48656C6C6F20576F726C642E205468697320697320612073696E676C6520656C656D"
+ @"656E74206C6976696E6720617320612063686172737472696E6700D00000F1FF02003248656C6C6F20576F7"
+ @"26C642E205468697320697320612073696E676C6520656C656D656E7420616761696E2E2E2E2E2E2E0018 "
+ @"Error: %@",
+ err);
+
+ VerifyOrReturn(CheckValue("status",
+ err ? ([err.domain isEqualToString:MTRInteractionErrorDomain] ? err.code
+ : EMBER_ZCL_STATUS_FAILURE)
+ : 0,
+ EMBER_ZCL_STATUS_CONSTRAINT_ERROR));
+ NextTest();
+ }];
+
+ return CHIP_NO_ERROR;
+ }
+
+ CHIP_ERROR
+ TestTh1WritesDutEndpoint0AccessControlClusterExtensionAttributeValueIsListOfAccessControlExtensionStructContaining1Element1StructDataFieldDBadStruct1518_10()
+ {
+
+ MTRBaseDevice * device = GetDevice("alpha");
+ __auto_type * cluster = [[MTRBaseClusterAccessControl alloc] initWithDevice:device endpointID:@(0) queue:mCallbackQueue];
+ VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE);
+
+ id extensionArgument;
+ {
+ NSMutableArray * temp_0 = [[NSMutableArray alloc] init];
+ temp_0[0] = [[MTRAccessControlClusterExtensionEntry alloc] init];
+ ((MTRAccessControlClusterExtensionEntry *) temp_0[0]).data = mDBadStruct.HasValue()
+ ? [NSData dataWithBytes:mDBadStruct.Value().data() length:mDBadStruct.Value().size()]
+ : [[NSData alloc] initWithBytes:"\x15\x18" length:2];
+ ((MTRAccessControlClusterExtensionEntry *) temp_0[0]).fabricIndex = [CurrentFabricIndex copy];
+
+ extensionArgument = temp_0;
+ }
+ [cluster
+ writeAttributeExtensionWithValue:extensionArgument
+ completion:^(NSError * _Nullable err) {
+ NSLog(@"TH1 writes DUT Endpoint 0 AccessControl cluster Extension attribute, value is list "
+ @"of AccessControlExtensionStruct containing 1 element 1. struct Data field: "
+ @"D_BAD_STRUCT : 1518 Error: %@",
+ err);
+
+ VerifyOrReturn(CheckValue("status",
+ err ? ([err.domain isEqualToString:MTRInteractionErrorDomain] ? err.code
+ : EMBER_ZCL_STATUS_FAILURE)
+ : 0,
+ EMBER_ZCL_STATUS_CONSTRAINT_ERROR));
+ NextTest();
+ }];
+
+ return CHIP_NO_ERROR;
+ }
+
+ CHIP_ERROR
+ TestTh1WritesDutEndpoint0AccessControlClusterExtensionAttributeValueIsListOfAccessControlExtensionStructContaining1Element1StructDataFieldDBadList3701d00000f1ff01003d48656c6c6f20576f726c642e205468697320697320612073696e676c6520656c656d656e74206c6976696e6720617320612063686172737472696e670018_11()
+ {
+
+ MTRBaseDevice * device = GetDevice("alpha");
+ __auto_type * cluster = [[MTRBaseClusterAccessControl alloc] initWithDevice:device endpointID:@(0) queue:mCallbackQueue];
+ VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE);
+
+ id extensionArgument;
+ {
+ NSMutableArray * temp_0 = [[NSMutableArray alloc] init];
+ temp_0[0] = [[MTRAccessControlClusterExtensionEntry alloc] init];
+ ((MTRAccessControlClusterExtensionEntry *) temp_0[0]).data = mDBadList.HasValue()
+ ? [NSData dataWithBytes:mDBadList.Value().data() length:mDBadList.Value().size()]
+ : [[NSData alloc]
+ initWithBytes:"\x37\x01\xD0\x00\x00\xF1\xFF\x01\x00\x3D\x48\x65\x6C\x6C\x6F\x20\x57\x6F\x72\x6C\x64\x2E\x20\x54"
+ "\x68\x69\x73\x20\x69\x73\x20\x61\x20\x73\x69\x6E\x67\x6C\x65\x20\x65\x6C\x65\x6D\x65\x6E\x74\x20"
+ "\x6C\x69\x76\x69\x6E\x67\x20\x61\x73\x20\x61\x20\x63\x68\x61\x72\x73\x74\x72\x69\x6E\x67\x00\x18"
+ length:72];
+ ((MTRAccessControlClusterExtensionEntry *) temp_0[0]).fabricIndex = [CurrentFabricIndex copy];
+
+ extensionArgument = temp_0;
+ }
+ [cluster
+ writeAttributeExtensionWithValue:extensionArgument
+ completion:^(NSError * _Nullable err) {
+ NSLog(
+ @"TH1 writes DUT Endpoint 0 AccessControl cluster Extension attribute, value is list of "
+ @"AccessControlExtensionStruct containing 1 element 1. struct Data field: D_BAD_LIST "
+ @":3701D00000F1FF01003D48656C6C6F20576F726C642E205468697320697320612073696E676C6520656C65"
+ @"6D656E74206C6976696E6720617320612063686172737472696E670018 Error: %@",
+ err);
+
+ VerifyOrReturn(CheckValue("status",
+ err ? ([err.domain isEqualToString:MTRInteractionErrorDomain] ? err.code
+ : EMBER_ZCL_STATUS_FAILURE)
+ : 0,
+ EMBER_ZCL_STATUS_CONSTRAINT_ERROR));
+ NextTest();
+ }];
+
+ return CHIP_NO_ERROR;
+ }
+
+ CHIP_ERROR
+ TestTh1WritesDutEndpoint0AccessControlClusterExtensionAttributeValueIsListOfAccessControlExtensionStructContaining1Element1StructDataFieldDBadElem17103d48656c6c6f20576f726c642e205468697320697320612073696e676c6520656c656d656e74206c6976696e6720617320612063686172737472696e670018_12()
+ {
+
+ MTRBaseDevice * device = GetDevice("alpha");
+ __auto_type * cluster = [[MTRBaseClusterAccessControl alloc] initWithDevice:device endpointID:@(0) queue:mCallbackQueue];
+ VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE);
+
+ id extensionArgument;
+ {
+ NSMutableArray * temp_0 = [[NSMutableArray alloc] init];
+ temp_0[0] = [[MTRAccessControlClusterExtensionEntry alloc] init];
+ ((MTRAccessControlClusterExtensionEntry *) temp_0[0]).data = mDBadElem.HasValue()
+ ? [NSData dataWithBytes:mDBadElem.Value().data() length:mDBadElem.Value().size()]
+ : [[NSData alloc]
+ initWithBytes:"\x17\x10\x3D\x48\x65\x6C\x6C\x6F\x20\x57\x6F\x72\x6C\x64\x2E\x20\x54\x68\x69\x73\x20\x69\x73\x20"
+ "\x61\x20\x73\x69\x6E\x67\x6C\x65\x20\x65\x6C\x65\x6D\x65\x6E\x74\x20\x6C\x69\x76\x69\x6E\x67\x20"
+ "\x61\x73\x20\x61\x20\x63\x68\x61\x72\x73\x74\x72\x69\x6E\x67\x00\x18"
+ length:65];
+ ((MTRAccessControlClusterExtensionEntry *) temp_0[0]).fabricIndex = [CurrentFabricIndex copy];
+
+ extensionArgument = temp_0;
+ }
+ [cluster
+ writeAttributeExtensionWithValue:extensionArgument
+ completion:^(NSError * _Nullable err) {
+ NSLog(
+ @"TH1 writes DUT Endpoint 0 AccessControl cluster Extension attribute, value is list of "
+ @"AccessControlExtensionStruct containing 1 element 1. struct Data field: D_BAD_ELEM "
+ @":17103D48656C6C6F20576F726C642E205468697320697320612073696E676C6520656C656D656E74206C69"
+ @"76696E6720617320612063686172737472696E670018 Error: %@",
+ err);
+
+ VerifyOrReturn(CheckValue("status",
+ err ? ([err.domain isEqualToString:MTRInteractionErrorDomain] ? err.code
+ : EMBER_ZCL_STATUS_FAILURE)
+ : 0,
+ EMBER_ZCL_STATUS_CONSTRAINT_ERROR));
+ NextTest();
+ }];
+
+ return CHIP_NO_ERROR;
+ }
+
+ CHIP_ERROR
+ TestTh1WritesDutEndpoint0AccessControlClusterExtensionAttributeValueIsListOfAccessControlExtensionStructContaining1Element1structDataFieldDBadOverflow17d00000f1ff01003d48656c6c6f20576f726c642e205468697320697320612073696e676c6520656c656d656e74206c6976696e6720617320612063686172737472696e670018ff_13()
+ {
+
+ MTRBaseDevice * device = GetDevice("alpha");
+ __auto_type * cluster = [[MTRBaseClusterAccessControl alloc] initWithDevice:device endpointID:@(0) queue:mCallbackQueue];
+ VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE);
+
+ id extensionArgument;
+ {
+ NSMutableArray * temp_0 = [[NSMutableArray alloc] init];
+ temp_0[0] = [[MTRAccessControlClusterExtensionEntry alloc] init];
+ ((MTRAccessControlClusterExtensionEntry *) temp_0[0]).data = mDBadOverflow.HasValue()
+ ? [NSData dataWithBytes:mDBadOverflow.Value().data() length:mDBadOverflow.Value().size()]
+ : [[NSData alloc]
+ initWithBytes:"\x17\xD0\x00\x00\xF1\xFF\x01\x00\x3D\x48\x65\x6C\x6C\x6F\x20\x57\x6F\x72\x6C\x64\x2E\x20\x54\x68"
+ "\x69\x73\x20\x69\x73\x20\x61\x20\x73\x69\x6E\x67\x6C\x65\x20\x65\x6C\x65\x6D\x65\x6E\x74\x20\x6C"
+ "\x69\x76\x69\x6E\x67\x20\x61\x73\x20\x61\x20\x63\x68\x61\x72\x73\x74\x72\x69\x6E\x67\x00\x18\xFF"
+ length:72];
+ ((MTRAccessControlClusterExtensionEntry *) temp_0[0]).fabricIndex = [CurrentFabricIndex copy];
+
+ extensionArgument = temp_0;
+ }
+ [cluster
+ writeAttributeExtensionWithValue:extensionArgument
+ completion:^(NSError * _Nullable err) {
+ NSLog(@"TH1 writes DUT Endpoint 0 AccessControl cluster Extension attribute, value is list "
+ @"of AccessControlExtensionStruct containing 1 element 1 .struct Data field: "
+ @"D_BAD_OVERFLOW : "
+ @"17D00000F1FF01003D48656C6C6F20576F726C642E205468697320697320612073696E676C6520656C656"
+ @"D656E74206C6976696E6720617320612063686172737472696E670018FF Error: %@",
+ err);
+
+ VerifyOrReturn(CheckValue("status",
+ err ? ([err.domain isEqualToString:MTRInteractionErrorDomain] ? err.code
+ : EMBER_ZCL_STATUS_FAILURE)
+ : 0,
+ EMBER_ZCL_STATUS_CONSTRAINT_ERROR));
+ NextTest();
+ }];
+
+ return CHIP_NO_ERROR;
+ }
+
+ CHIP_ERROR
+ TestTh1WritesDutEndpoint0AccessControlClusterExtensionAttributeValueIsListOfAccessControlExtensionStructContaining1Element1StructDataFieldDBadUnderflow17d00000f1ff01003d48656c6c6f20576f726c642e205468697320697320612073696e676c6520656c656d656e74206c6976696e6720617320612063686172737472696e6700_14()
+ {
+
+ MTRBaseDevice * device = GetDevice("alpha");
+ __auto_type * cluster = [[MTRBaseClusterAccessControl alloc] initWithDevice:device endpointID:@(0) queue:mCallbackQueue];
+ VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE);
+
+ id extensionArgument;
+ {
+ NSMutableArray * temp_0 = [[NSMutableArray alloc] init];
+ temp_0[0] = [[MTRAccessControlClusterExtensionEntry alloc] init];
+ ((MTRAccessControlClusterExtensionEntry *) temp_0[0]).data = mDBadUnderflow.HasValue()
+ ? [NSData dataWithBytes:mDBadUnderflow.Value().data() length:mDBadUnderflow.Value().size()]
+ : [[NSData alloc]
+ initWithBytes:"\x17\xD0\x00\x00\xF1\xFF\x01\x00\x3D\x48\x65\x6C\x6C\x6F\x20\x57\x6F\x72\x6C\x64\x2E\x20\x54\x68"
+ "\x69\x73\x20\x69\x73\x20\x61\x20\x73\x69\x6E\x67\x6C\x65\x20\x65\x6C\x65\x6D\x65\x6E\x74\x20\x6C"
+ "\x69\x76\x69\x6E\x67\x20\x61\x73\x20\x61\x20\x63\x68\x61\x72\x73\x74\x72\x69\x6E\x67\x00"
+ length:70];
+ ((MTRAccessControlClusterExtensionEntry *) temp_0[0]).fabricIndex = [CurrentFabricIndex copy];
+
+ extensionArgument = temp_0;
+ }
+ [cluster
+ writeAttributeExtensionWithValue:extensionArgument
+ completion:^(NSError * _Nullable err) {
+ NSLog(@"TH1 writes DUT Endpoint 0 AccessControl cluster Extension attribute, value is list "
+ @"of AccessControlExtensionStruct containing 1 element 1. struct Data field: "
+ @"D_BAD_UNDERFLOW "
+ @":17D00000F1FF01003D48656C6C6F20576F726C642E205468697320697320612073696E676C6520656C65"
+ @"6D656E74206C6976696E6720617320612063686172737472696E6700 Error: %@",
+ err);
+
+ VerifyOrReturn(CheckValue("status",
+ err ? ([err.domain isEqualToString:MTRInteractionErrorDomain] ? err.code
+ : EMBER_ZCL_STATUS_FAILURE)
+ : 0,
+ EMBER_ZCL_STATUS_CONSTRAINT_ERROR));
+ NextTest();
+ }];
+
+ return CHIP_NO_ERROR;
+ }
+
+ CHIP_ERROR
+ TestTh1WritesDutEndpoint0AccessControlClusterExtensionAttributeValueIsListOfAccessControlExtensionStructContaining1Element1structDataFieldDBadNone_15()
+ {
+
+ MTRBaseDevice * device = GetDevice("alpha");
+ __auto_type * cluster = [[MTRBaseClusterAccessControl alloc] initWithDevice:device endpointID:@(0) queue:mCallbackQueue];
+ VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE);
+
+ id extensionArgument;
+ {
+ NSMutableArray * temp_0 = [[NSMutableArray alloc] init];
+ temp_0[0] = [[MTRAccessControlClusterExtensionEntry alloc] init];
+ ((MTRAccessControlClusterExtensionEntry *) temp_0[0]).data = mDBadNone.HasValue()
+ ? [NSData dataWithBytes:mDBadNone.Value().data() length:mDBadNone.Value().size()]
+ : [[NSData alloc] initWithBytes:"" length:0];
+ ((MTRAccessControlClusterExtensionEntry *) temp_0[0]).fabricIndex = [CurrentFabricIndex copy];
+
+ extensionArgument = temp_0;
+ }
+ [cluster
+ writeAttributeExtensionWithValue:extensionArgument
+ completion:^(NSError * _Nullable err) {
+ NSLog(@"TH1 writes DUT Endpoint 0 AccessControl cluster Extension attribute, value is list "
+ @"of AccessControlExtensionStruct containing 1 element 1.struct Data field: D_BAD_NONE "
+ @"Error: %@",
+ err);
+
+ VerifyOrReturn(CheckValue("status",
+ err ? ([err.domain isEqualToString:MTRInteractionErrorDomain] ? err.code
+ : EMBER_ZCL_STATUS_FAILURE)
+ : 0,
+ EMBER_ZCL_STATUS_CONSTRAINT_ERROR));
+ NextTest();
+ }];
+
+ return CHIP_NO_ERROR;
+ }
+
+ CHIP_ERROR
+ TestTh1WritesDutEndpoint0AccessControlClusterExtensionAttributeValueIsListOfAccessControlExtensionStructContaining2ElementsValueIsListOfAccessControlExtensionStructContaining2ElementsFirstElementContainsDataFieldDOkEmpty1718SecondElementContainsDataFieldDOkSingle17d00000f1ff01003d48656c6c6f20576f726c642e205468697320697320612073696e676c6520656c656d656e74206c6976696e6720617320612063686172737472696e670018_16()
+ {
+
+ MTRBaseDevice * device = GetDevice("alpha");
+ __auto_type * cluster = [[MTRBaseClusterAccessControl alloc] initWithDevice:device endpointID:@(0) queue:mCallbackQueue];
+ VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE);
+
+ id extensionArgument;
+ {
+ NSMutableArray * temp_0 = [[NSMutableArray alloc] init];
+ temp_0[0] = [[MTRAccessControlClusterExtensionEntry alloc] init];
+ ((MTRAccessControlClusterExtensionEntry *) temp_0[0]).data = mDOkEmpty.HasValue()
+ ? [NSData dataWithBytes:mDOkEmpty.Value().data() length:mDOkEmpty.Value().size()]
+ : [[NSData alloc] initWithBytes:"\x17\x18" length:2];
+ ((MTRAccessControlClusterExtensionEntry *) temp_0[0]).fabricIndex = [CurrentFabricIndex copy];
+
+ temp_0[1] = [[MTRAccessControlClusterExtensionEntry alloc] init];
+ ((MTRAccessControlClusterExtensionEntry *) temp_0[1]).data = mDOkSingle.HasValue()
+ ? [NSData dataWithBytes:mDOkSingle.Value().data() length:mDOkSingle.Value().size()]
+ : [[NSData alloc]
+ initWithBytes:"\x17\xD0\x00\x00\xF1\xFF\x01\x00\x3D\x48\x65\x6C\x6C\x6F\x20\x57\x6F\x72\x6C\x64\x2E\x20\x54\x68"
+ "\x69\x73\x20\x69\x73\x20\x61\x20\x73\x69\x6E\x67\x6C\x65\x20\x65\x6C\x65\x6D\x65\x6E\x74\x20\x6C"
+ "\x69\x76\x69\x6E\x67\x20\x61\x73\x20\x61\x20\x63\x68\x61\x72\x73\x74\x72\x69\x6E\x67\x00\x18"
+ length:71];
+ ((MTRAccessControlClusterExtensionEntry *) temp_0[1]).fabricIndex = [CurrentFabricIndex copy];
+
+ extensionArgument = temp_0;
+ }
+ [cluster
+ writeAttributeExtensionWithValue:extensionArgument
+ completion:^(NSError * _Nullable err) {
+ NSLog(@"TH1 writes DUT Endpoint 0 AccessControl cluster Extension attribute, value is list "
+ @"of AccessControlExtensionStruct containing 2 elements . value is list of "
+ @"AccessControlExtensionStruct containing 2 elements . first element contains Data "
+ @"field: D_OK_EMPTY 1718 . second element contains Data field: D_OK_SINGLE "
+ @"17D00000F1FF01003D48656C6C6F20576F726C642E205468697320697320612073696E676C6520656C656"
+ @"D656E74206C6976696E6720617320612063686172737472696E670018 Error: %@",
+ err);
+
+ VerifyOrReturn(CheckValue("status",
+ err ? ([err.domain isEqualToString:MTRInteractionErrorDomain] ? err.code
+ : EMBER_ZCL_STATUS_FAILURE)
+ : 0,
+ EMBER_ZCL_STATUS_CONSTRAINT_ERROR));
+ NextTest();
+ }];
+
+ return CHIP_NO_ERROR;
+ }
+
+ CHIP_ERROR TestTh1ReadsDutEndpoint0AccessControlClusterExtensionAttribute_17()
+ {
+
+ MTRBaseDevice * device = GetDevice("alpha");
+ __auto_type * cluster = [[MTRBaseClusterAccessControl alloc] initWithDevice:device endpointID:@(0) queue:mCallbackQueue];
+ VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE);
+
+ __auto_type * params = [[MTRReadParams alloc] init];
+ params.filterByFabric = true;
+ [cluster
+ readAttributeExtensionWithParams:params
+ completion:^(NSArray * _Nullable value, NSError * _Nullable err) {
+ NSLog(@"TH1 reads DUT Endpoint 0 AccessControl cluster Extension attribute Error: %@", err);
+
+ VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
+
+ {
+ id actualValue = value;
+ VerifyOrReturn(CheckValue("Extension", [actualValue count], static_cast<uint32_t>(1)));
+ VerifyOrReturn(CheckValueAsString(
+ "Data", ((MTRAccessControlClusterExtensionEntry *) actualValue[0]).data,
+ mDOkEmpty.HasValue() ? [NSData dataWithBytes:mDOkEmpty.Value().data()
+ length:mDOkEmpty.Value().size()]
+ : [[NSData alloc] initWithBytes:"\x17\x18" length:2]
+
+ ));
+ VerifyOrReturn(CheckValue("FabricIndex",
+ ((MTRAccessControlClusterExtensionEntry *) actualValue[0]).fabricIndex,
+ CurrentFabricIndex));
+ }
+
+ NextTest();
+ }];
+
+ return CHIP_NO_ERROR;
+ }
+
+ CHIP_ERROR TestTh1WritesDutEndpoint0AccessControlClusterExtensionAttributeValueIsAnEmptyList_18()
+ {
+
+ MTRBaseDevice * device = GetDevice("alpha");
+ __auto_type * cluster = [[MTRBaseClusterAccessControl alloc] initWithDevice:device endpointID:@(0) queue:mCallbackQueue];
+ VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE);
+
+ id extensionArgument;
+ {
+ NSMutableArray * temp_0 = [[NSMutableArray alloc] init];
+ extensionArgument = temp_0;
+ }
+ [cluster writeAttributeExtensionWithValue:extensionArgument
+ completion:^(NSError * _Nullable err) {
+ NSLog(@"TH1 writes DUT Endpoint 0 AccessControl cluster Extension attribute, value is "
+ @"an empty list Error: %@",
+ err);
+
+ VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
+
+ NextTest();
+ }];
+
+ return CHIP_NO_ERROR;
+ }
+
+ CHIP_ERROR TestTh1ReadsDutEndpoint0AccessControlClusterExtensionAttribute_19()
+ {
+
+ MTRBaseDevice * device = GetDevice("alpha");
+ __auto_type * cluster = [[MTRBaseClusterAccessControl alloc] initWithDevice:device endpointID:@(0) queue:mCallbackQueue];
+ VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE);
+
+ __auto_type * params = [[MTRReadParams alloc] init];
+ params.filterByFabric = true;
+ [cluster
+ readAttributeExtensionWithParams:params
+ completion:^(NSArray * _Nullable value, NSError * _Nullable err) {
+ NSLog(@"TH1 reads DUT Endpoint 0 AccessControl cluster Extension attribute Error: %@", err);
+
+ VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
+
+ {
+ id actualValue = value;
+ VerifyOrReturn(CheckValue("Extension", [actualValue count], static_cast<uint32_t>(0)));
+ }
+
+ NextTest();
+ }];
+
+ return CHIP_NO_ERROR;
+ }
+};
+
class Test_TC_BOOL_1_1 : public TestCommandBridge {
public:
// NOLINTBEGIN(clang-analyzer-nullability.NullPassedToNonnull): Test constructor nullability not enforced
@@ -3109,6 +4210,735 @@
}
};
+class Test_TC_BRBINFO_1_1 : public TestCommandBridge {
+public:
+ // NOLINTBEGIN(clang-analyzer-nullability.NullPassedToNonnull): Test constructor nullability not enforced
+ Test_TC_BRBINFO_1_1()
+ : TestCommandBridge("Test_TC_BRBINFO_1_1")
+ , mTestIndex(0)
+ {
+ AddArgument("nodeId", 0, UINT64_MAX, &mNodeId);
+ AddArgument("cluster", &mCluster);
+ AddArgument("endpoint", 0, UINT16_MAX, &mEndpoint);
+ AddArgument("timeout", 0, UINT16_MAX, &mTimeout);
+ }
+ // NOLINTEND(clang-analyzer-nullability.NullPassedToNonnull)
+
+ ~Test_TC_BRBINFO_1_1() {}
+
+ /////////// TestCommand Interface /////////
+ void NextTest() override
+ {
+ CHIP_ERROR err = CHIP_NO_ERROR;
+
+ if (0 == mTestIndex) {
+ ChipLogProgress(chipTool, " **** Test Start: Test_TC_BRBINFO_1_1\n");
+ }
+
+ if (mTestCount == mTestIndex) {
+ ChipLogProgress(chipTool, " **** Test Complete: Test_TC_BRBINFO_1_1\n");
+ SetCommandExitStatus(CHIP_NO_ERROR);
+ return;
+ }
+
+ Wait();
+
+ // Ensure we increment mTestIndex before we start running the relevant
+ // command. That way if we lose the timeslice after we send the message
+ // but before our function call returns, we won't end up with an
+ // incorrect mTestIndex value observed when we get the response.
+ switch (mTestIndex++) {
+ case 0:
+ ChipLogProgress(chipTool, " ***** Test Step 0 : Wait for the commissioned device to be retrieved\n");
+ err = TestWaitForTheCommissionedDeviceToBeRetrieved_0();
+ break;
+ case 1:
+ ChipLogProgress(chipTool, " ***** Test Step 1 : TH reads the ClusterRevision from DUT\n");
+ err = TestThReadsTheClusterRevisionFromDut_1();
+ break;
+ case 2:
+ ChipLogProgress(chipTool, " ***** Test Step 2 : TH reads the FeatureMap from DUT\n");
+ err = TestThReadsTheFeatureMapFromDut_2();
+ break;
+ case 3:
+ ChipLogProgress(chipTool, " ***** Test Step 3 : TH reads AttributeList from DUT\n");
+ err = TestThReadsAttributeListFromDut_3();
+ break;
+ case 4:
+ ChipLogProgress(chipTool, " ***** Test Step 4 : TH reads optional attribute(VendorName) in AttributeList\n");
+ if (ShouldSkip("BRBINFO.S.A0001")) {
+ NextTest();
+ return;
+ }
+ err = TestThReadsOptionalAttributeVendorNameInAttributeList_4();
+ break;
+ case 5:
+ ChipLogProgress(chipTool, " ***** Test Step 5 : TH reads optional attribute(VendorID) in AttributeList\n");
+ if (ShouldSkip("BRBINFO.S.A0002")) {
+ NextTest();
+ return;
+ }
+ err = TestThReadsOptionalAttributeVendorIDInAttributeList_5();
+ break;
+ case 6:
+ ChipLogProgress(chipTool, " ***** Test Step 6 : TH reads optional attribute(ProductName) in AttributeList\n");
+ if (ShouldSkip("BRBINFO.S.A0003")) {
+ NextTest();
+ return;
+ }
+ err = TestThReadsOptionalAttributeProductNameInAttributeList_6();
+ break;
+ case 7:
+ ChipLogProgress(chipTool, " ***** Test Step 7 : TH reads optional attribute(NodeLabel) in AttributeList\n");
+ if (ShouldSkip("BRBINFO.S.A0005")) {
+ NextTest();
+ return;
+ }
+ err = TestThReadsOptionalAttributeNodeLabelInAttributeList_7();
+ break;
+ case 8:
+ ChipLogProgress(chipTool, " ***** Test Step 8 : TH reads optional attribute(HardwareVersion) in AttributeList\n");
+ if (ShouldSkip("BRBINFO.S.A0007")) {
+ NextTest();
+ return;
+ }
+ err = TestThReadsOptionalAttributeHardwareVersionInAttributeList_8();
+ break;
+ case 9:
+ ChipLogProgress(chipTool, " ***** Test Step 9 : TH reads optional attribute(HardwareVersionString) in AttributeList\n");
+ if (ShouldSkip("BRBINFO.S.A0008")) {
+ NextTest();
+ return;
+ }
+ err = TestThReadsOptionalAttributeHardwareVersionStringInAttributeList_9();
+ break;
+ case 10:
+ ChipLogProgress(chipTool, " ***** Test Step 10 : TH reads optional attribute(SoftwareVersion) in AttributeList\n");
+ if (ShouldSkip("BRBINFO.S.A0009")) {
+ NextTest();
+ return;
+ }
+ err = TestThReadsOptionalAttributeSoftwareVersionInAttributeList_10();
+ break;
+ case 11:
+ ChipLogProgress(
+ chipTool, " ***** Test Step 11 : TH reads optional attribute(SoftwareVersionString) in AttributeList\n");
+ if (ShouldSkip("BRBINFO.S.A000a")) {
+ NextTest();
+ return;
+ }
+ err = TestThReadsOptionalAttributeSoftwareVersionStringInAttributeList_11();
+ break;
+ case 12:
+ ChipLogProgress(chipTool, " ***** Test Step 12 : TH reads optional attribute(ManufacturingDate) in AttributeList\n");
+ if (ShouldSkip("BRBINFO.S.A000b")) {
+ NextTest();
+ return;
+ }
+ err = TestThReadsOptionalAttributeManufacturingDateInAttributeList_12();
+ break;
+ case 13:
+ ChipLogProgress(chipTool, " ***** Test Step 13 : TH reads optional attribute(PartNumber) in AttributeList\n");
+ if (ShouldSkip("BRBINFO.S.A000c")) {
+ NextTest();
+ return;
+ }
+ err = TestThReadsOptionalAttributePartNumberInAttributeList_13();
+ break;
+ case 14:
+ ChipLogProgress(chipTool, " ***** Test Step 14 : TH reads optional attribute(ProductURL) in AttributeList\n");
+ if (ShouldSkip("BRBINFO.S.A000d")) {
+ NextTest();
+ return;
+ }
+ err = TestThReadsOptionalAttributeProductURLInAttributeList_14();
+ break;
+ case 15:
+ ChipLogProgress(chipTool, " ***** Test Step 15 : TH reads optional attribute(ProductLabel) in AttributeList\n");
+ if (ShouldSkip("BRBINFO.S.A000e")) {
+ NextTest();
+ return;
+ }
+ err = TestThReadsOptionalAttributeProductLabelInAttributeList_15();
+ break;
+ case 16:
+ ChipLogProgress(chipTool, " ***** Test Step 16 : TH reads optional attribute(SerialNumber) in AttributeList\n");
+ if (ShouldSkip("BRBINFO.S.A000f")) {
+ NextTest();
+ return;
+ }
+ err = TestThReadsOptionalAttributeSerialNumberInAttributeList_16();
+ break;
+ case 17:
+ ChipLogProgress(chipTool, " ***** Test Step 17 : TH reads optional attribute(UniqueID) in AttributeList\n");
+ if (ShouldSkip("BRBINFO.S.A0012")) {
+ NextTest();
+ return;
+ }
+ err = TestThReadsOptionalAttributeUniqueIDInAttributeList_17();
+ break;
+ case 18:
+ ChipLogProgress(chipTool, " ***** Test Step 18 : TH1 reads AcceptedCommandList from DUT\n");
+ err = TestTh1ReadsAcceptedCommandListFromDut_18();
+ break;
+ case 19:
+ ChipLogProgress(chipTool, " ***** Test Step 19 : TH1 reads GeneratedCommandList from DUT\n");
+ err = TestTh1ReadsGeneratedCommandListFromDut_19();
+ break;
+ }
+
+ if (CHIP_NO_ERROR != err) {
+ ChipLogError(chipTool, " ***** Test Failure: %s\n", chip::ErrorStr(err));
+ SetCommandExitStatus(err);
+ }
+ }
+
+ void OnStatusUpdate(const chip::app::StatusIB & status) override
+ {
+ switch (mTestIndex - 1) {
+ case 0:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ break;
+ case 1:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ break;
+ case 2:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ break;
+ case 3:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ break;
+ case 4:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ break;
+ case 5:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ break;
+ case 6:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ break;
+ case 7:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ break;
+ case 8:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ break;
+ case 9:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ break;
+ case 10:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ break;
+ case 11:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ break;
+ case 12:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ break;
+ case 13:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ break;
+ case 14:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ break;
+ case 15:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ break;
+ case 16:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ break;
+ case 17:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ break;
+ case 18:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ break;
+ case 19:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ break;
+ }
+
+ // Go on to the next test.
+ ContinueOnChipMainThread(CHIP_NO_ERROR);
+ }
+
+ chip::System::Clock::Timeout GetWaitDuration() const override
+ {
+ return chip::System::Clock::Seconds16(mTimeout.ValueOr(kTimeoutInSeconds));
+ }
+
+private:
+ std::atomic_uint16_t mTestIndex;
+ const uint16_t mTestCount = 20;
+
+ chip::Optional<chip::NodeId> mNodeId;
+ chip::Optional<chip::CharSpan> mCluster;
+ chip::Optional<chip::EndpointId> mEndpoint;
+ chip::Optional<uint16_t> mTimeout;
+
+ CHIP_ERROR TestWaitForTheCommissionedDeviceToBeRetrieved_0()
+ {
+
+ chip::app::Clusters::DelayCommands::Commands::WaitForCommissionee::Type value;
+ value.nodeId = mNodeId.HasValue() ? mNodeId.Value() : 305414945ULL;
+ return WaitForCommissionee("alpha", value);
+ }
+
+ CHIP_ERROR TestThReadsTheClusterRevisionFromDut_1()
+ {
+
+ MTRBaseDevice * device = GetDevice("alpha");
+ __auto_type * cluster = [[MTRBaseClusterBridgedDeviceBasic alloc] initWithDevice:device
+ endpointID:@(3)
+ queue:mCallbackQueue];
+ VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE);
+
+ [cluster readAttributeClusterRevisionWithCompletion:^(NSNumber * _Nullable value, NSError * _Nullable err) {
+ NSLog(@"TH reads the ClusterRevision from DUT Error: %@", err);
+
+ VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
+
+ {
+ id actualValue = value;
+ VerifyOrReturn(CheckValue("ClusterRevision", actualValue, 1U));
+ }
+
+ VerifyOrReturn(CheckConstraintType("clusterRevision", "int16u", "int16u"));
+ NextTest();
+ }];
+
+ return CHIP_NO_ERROR;
+ }
+
+ CHIP_ERROR TestThReadsTheFeatureMapFromDut_2()
+ {
+
+ MTRBaseDevice * device = GetDevice("alpha");
+ __auto_type * cluster = [[MTRBaseClusterBridgedDeviceBasic alloc] initWithDevice:device
+ endpointID:@(3)
+ queue:mCallbackQueue];
+ VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE);
+
+ [cluster readAttributeFeatureMapWithCompletion:^(NSNumber * _Nullable value, NSError * _Nullable err) {
+ NSLog(@"TH reads the FeatureMap from DUT Error: %@", err);
+
+ VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
+
+ {
+ id actualValue = value;
+ VerifyOrReturn(CheckValue("FeatureMap", actualValue, 0UL));
+ }
+
+ VerifyOrReturn(CheckConstraintType("featureMap", "bitmap32", "bitmap32"));
+ NextTest();
+ }];
+
+ return CHIP_NO_ERROR;
+ }
+
+ CHIP_ERROR TestThReadsAttributeListFromDut_3()
+ {
+
+ MTRBaseDevice * device = GetDevice("alpha");
+ __auto_type * cluster = [[MTRBaseClusterBridgedDeviceBasic alloc] initWithDevice:device
+ endpointID:@(3)
+ queue:mCallbackQueue];
+ VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE);
+
+ [cluster readAttributeAttributeListWithCompletion:^(NSArray * _Nullable value, NSError * _Nullable err) {
+ NSLog(@"TH reads AttributeList from DUT Error: %@", err);
+
+ VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
+
+ VerifyOrReturn(CheckConstraintType("attributeList", "list", "list"));
+ VerifyOrReturn(CheckConstraintContains("attributeList", value, 17UL));
+ VerifyOrReturn(CheckConstraintContains("attributeList", value, 65528UL));
+ VerifyOrReturn(CheckConstraintContains("attributeList", value, 65529UL));
+ VerifyOrReturn(CheckConstraintContains("attributeList", value, 65531UL));
+ VerifyOrReturn(CheckConstraintContains("attributeList", value, 65532UL));
+ VerifyOrReturn(CheckConstraintContains("attributeList", value, 65533UL));
+
+ NextTest();
+ }];
+
+ return CHIP_NO_ERROR;
+ }
+
+ CHIP_ERROR TestThReadsOptionalAttributeVendorNameInAttributeList_4()
+ {
+
+ MTRBaseDevice * device = GetDevice("alpha");
+ __auto_type * cluster = [[MTRBaseClusterBridgedDeviceBasic alloc] initWithDevice:device
+ endpointID:@(3)
+ queue:mCallbackQueue];
+ VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE);
+
+ [cluster readAttributeAttributeListWithCompletion:^(NSArray * _Nullable value, NSError * _Nullable err) {
+ NSLog(@"TH reads optional attribute(VendorName) in AttributeList Error: %@", err);
+
+ VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
+
+ VerifyOrReturn(CheckConstraintType("attributeList", "list", "list"));
+ VerifyOrReturn(CheckConstraintContains("attributeList", value, 1UL));
+
+ NextTest();
+ }];
+
+ return CHIP_NO_ERROR;
+ }
+
+ CHIP_ERROR TestThReadsOptionalAttributeVendorIDInAttributeList_5()
+ {
+
+ MTRBaseDevice * device = GetDevice("alpha");
+ __auto_type * cluster = [[MTRBaseClusterBridgedDeviceBasic alloc] initWithDevice:device
+ endpointID:@(3)
+ queue:mCallbackQueue];
+ VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE);
+
+ [cluster readAttributeAttributeListWithCompletion:^(NSArray * _Nullable value, NSError * _Nullable err) {
+ NSLog(@"TH reads optional attribute(VendorID) in AttributeList Error: %@", err);
+
+ VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
+
+ VerifyOrReturn(CheckConstraintType("attributeList", "list", "list"));
+ VerifyOrReturn(CheckConstraintContains("attributeList", value, 2UL));
+
+ NextTest();
+ }];
+
+ return CHIP_NO_ERROR;
+ }
+
+ CHIP_ERROR TestThReadsOptionalAttributeProductNameInAttributeList_6()
+ {
+
+ MTRBaseDevice * device = GetDevice("alpha");
+ __auto_type * cluster = [[MTRBaseClusterBridgedDeviceBasic alloc] initWithDevice:device
+ endpointID:@(3)
+ queue:mCallbackQueue];
+ VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE);
+
+ [cluster readAttributeAttributeListWithCompletion:^(NSArray * _Nullable value, NSError * _Nullable err) {
+ NSLog(@"TH reads optional attribute(ProductName) in AttributeList Error: %@", err);
+
+ VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
+
+ VerifyOrReturn(CheckConstraintType("attributeList", "list", "list"));
+ VerifyOrReturn(CheckConstraintContains("attributeList", value, 3UL));
+
+ NextTest();
+ }];
+
+ return CHIP_NO_ERROR;
+ }
+
+ CHIP_ERROR TestThReadsOptionalAttributeNodeLabelInAttributeList_7()
+ {
+
+ MTRBaseDevice * device = GetDevice("alpha");
+ __auto_type * cluster = [[MTRBaseClusterBridgedDeviceBasic alloc] initWithDevice:device
+ endpointID:@(3)
+ queue:mCallbackQueue];
+ VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE);
+
+ [cluster readAttributeAttributeListWithCompletion:^(NSArray * _Nullable value, NSError * _Nullable err) {
+ NSLog(@"TH reads optional attribute(NodeLabel) in AttributeList Error: %@", err);
+
+ VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
+
+ VerifyOrReturn(CheckConstraintType("attributeList", "list", "list"));
+ VerifyOrReturn(CheckConstraintContains("attributeList", value, 5UL));
+
+ NextTest();
+ }];
+
+ return CHIP_NO_ERROR;
+ }
+
+ CHIP_ERROR TestThReadsOptionalAttributeHardwareVersionInAttributeList_8()
+ {
+
+ MTRBaseDevice * device = GetDevice("alpha");
+ __auto_type * cluster = [[MTRBaseClusterBridgedDeviceBasic alloc] initWithDevice:device
+ endpointID:@(3)
+ queue:mCallbackQueue];
+ VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE);
+
+ [cluster readAttributeAttributeListWithCompletion:^(NSArray * _Nullable value, NSError * _Nullable err) {
+ NSLog(@"TH reads optional attribute(HardwareVersion) in AttributeList Error: %@", err);
+
+ VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
+
+ VerifyOrReturn(CheckConstraintType("attributeList", "list", "list"));
+ VerifyOrReturn(CheckConstraintContains("attributeList", value, 7UL));
+
+ NextTest();
+ }];
+
+ return CHIP_NO_ERROR;
+ }
+
+ CHIP_ERROR TestThReadsOptionalAttributeHardwareVersionStringInAttributeList_9()
+ {
+
+ MTRBaseDevice * device = GetDevice("alpha");
+ __auto_type * cluster = [[MTRBaseClusterBridgedDeviceBasic alloc] initWithDevice:device
+ endpointID:@(3)
+ queue:mCallbackQueue];
+ VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE);
+
+ [cluster readAttributeAttributeListWithCompletion:^(NSArray * _Nullable value, NSError * _Nullable err) {
+ NSLog(@"TH reads optional attribute(HardwareVersionString) in AttributeList Error: %@", err);
+
+ VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
+
+ VerifyOrReturn(CheckConstraintType("attributeList", "list", "list"));
+ VerifyOrReturn(CheckConstraintContains("attributeList", value, 8UL));
+
+ NextTest();
+ }];
+
+ return CHIP_NO_ERROR;
+ }
+
+ CHIP_ERROR TestThReadsOptionalAttributeSoftwareVersionInAttributeList_10()
+ {
+
+ MTRBaseDevice * device = GetDevice("alpha");
+ __auto_type * cluster = [[MTRBaseClusterBridgedDeviceBasic alloc] initWithDevice:device
+ endpointID:@(3)
+ queue:mCallbackQueue];
+ VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE);
+
+ [cluster readAttributeAttributeListWithCompletion:^(NSArray * _Nullable value, NSError * _Nullable err) {
+ NSLog(@"TH reads optional attribute(SoftwareVersion) in AttributeList Error: %@", err);
+
+ VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
+
+ VerifyOrReturn(CheckConstraintType("attributeList", "list", "list"));
+ VerifyOrReturn(CheckConstraintContains("attributeList", value, 9UL));
+
+ NextTest();
+ }];
+
+ return CHIP_NO_ERROR;
+ }
+
+ CHIP_ERROR TestThReadsOptionalAttributeSoftwareVersionStringInAttributeList_11()
+ {
+
+ MTRBaseDevice * device = GetDevice("alpha");
+ __auto_type * cluster = [[MTRBaseClusterBridgedDeviceBasic alloc] initWithDevice:device
+ endpointID:@(3)
+ queue:mCallbackQueue];
+ VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE);
+
+ [cluster readAttributeAttributeListWithCompletion:^(NSArray * _Nullable value, NSError * _Nullable err) {
+ NSLog(@"TH reads optional attribute(SoftwareVersionString) in AttributeList Error: %@", err);
+
+ VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
+
+ VerifyOrReturn(CheckConstraintType("attributeList", "list", "list"));
+ VerifyOrReturn(CheckConstraintContains("attributeList", value, 10UL));
+
+ NextTest();
+ }];
+
+ return CHIP_NO_ERROR;
+ }
+
+ CHIP_ERROR TestThReadsOptionalAttributeManufacturingDateInAttributeList_12()
+ {
+
+ MTRBaseDevice * device = GetDevice("alpha");
+ __auto_type * cluster = [[MTRBaseClusterBridgedDeviceBasic alloc] initWithDevice:device
+ endpointID:@(3)
+ queue:mCallbackQueue];
+ VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE);
+
+ [cluster readAttributeAttributeListWithCompletion:^(NSArray * _Nullable value, NSError * _Nullable err) {
+ NSLog(@"TH reads optional attribute(ManufacturingDate) in AttributeList Error: %@", err);
+
+ VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
+
+ VerifyOrReturn(CheckConstraintType("attributeList", "list", "list"));
+ VerifyOrReturn(CheckConstraintContains("attributeList", value, 11UL));
+
+ NextTest();
+ }];
+
+ return CHIP_NO_ERROR;
+ }
+
+ CHIP_ERROR TestThReadsOptionalAttributePartNumberInAttributeList_13()
+ {
+
+ MTRBaseDevice * device = GetDevice("alpha");
+ __auto_type * cluster = [[MTRBaseClusterBridgedDeviceBasic alloc] initWithDevice:device
+ endpointID:@(3)
+ queue:mCallbackQueue];
+ VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE);
+
+ [cluster readAttributeAttributeListWithCompletion:^(NSArray * _Nullable value, NSError * _Nullable err) {
+ NSLog(@"TH reads optional attribute(PartNumber) in AttributeList Error: %@", err);
+
+ VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
+
+ VerifyOrReturn(CheckConstraintType("attributeList", "list", "list"));
+ VerifyOrReturn(CheckConstraintContains("attributeList", value, 12UL));
+
+ NextTest();
+ }];
+
+ return CHIP_NO_ERROR;
+ }
+
+ CHIP_ERROR TestThReadsOptionalAttributeProductURLInAttributeList_14()
+ {
+
+ MTRBaseDevice * device = GetDevice("alpha");
+ __auto_type * cluster = [[MTRBaseClusterBridgedDeviceBasic alloc] initWithDevice:device
+ endpointID:@(3)
+ queue:mCallbackQueue];
+ VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE);
+
+ [cluster readAttributeAttributeListWithCompletion:^(NSArray * _Nullable value, NSError * _Nullable err) {
+ NSLog(@"TH reads optional attribute(ProductURL) in AttributeList Error: %@", err);
+
+ VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
+
+ VerifyOrReturn(CheckConstraintType("attributeList", "list", "list"));
+ VerifyOrReturn(CheckConstraintContains("attributeList", value, 13UL));
+
+ NextTest();
+ }];
+
+ return CHIP_NO_ERROR;
+ }
+
+ CHIP_ERROR TestThReadsOptionalAttributeProductLabelInAttributeList_15()
+ {
+
+ MTRBaseDevice * device = GetDevice("alpha");
+ __auto_type * cluster = [[MTRBaseClusterBridgedDeviceBasic alloc] initWithDevice:device
+ endpointID:@(3)
+ queue:mCallbackQueue];
+ VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE);
+
+ [cluster readAttributeAttributeListWithCompletion:^(NSArray * _Nullable value, NSError * _Nullable err) {
+ NSLog(@"TH reads optional attribute(ProductLabel) in AttributeList Error: %@", err);
+
+ VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
+
+ VerifyOrReturn(CheckConstraintType("attributeList", "list", "list"));
+ VerifyOrReturn(CheckConstraintContains("attributeList", value, 14UL));
+
+ NextTest();
+ }];
+
+ return CHIP_NO_ERROR;
+ }
+
+ CHIP_ERROR TestThReadsOptionalAttributeSerialNumberInAttributeList_16()
+ {
+
+ MTRBaseDevice * device = GetDevice("alpha");
+ __auto_type * cluster = [[MTRBaseClusterBridgedDeviceBasic alloc] initWithDevice:device
+ endpointID:@(3)
+ queue:mCallbackQueue];
+ VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE);
+
+ [cluster readAttributeAttributeListWithCompletion:^(NSArray * _Nullable value, NSError * _Nullable err) {
+ NSLog(@"TH reads optional attribute(SerialNumber) in AttributeList Error: %@", err);
+
+ VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
+
+ VerifyOrReturn(CheckConstraintType("attributeList", "list", "list"));
+ VerifyOrReturn(CheckConstraintContains("attributeList", value, 15UL));
+
+ NextTest();
+ }];
+
+ return CHIP_NO_ERROR;
+ }
+
+ CHIP_ERROR TestThReadsOptionalAttributeUniqueIDInAttributeList_17()
+ {
+
+ MTRBaseDevice * device = GetDevice("alpha");
+ __auto_type * cluster = [[MTRBaseClusterBridgedDeviceBasic alloc] initWithDevice:device
+ endpointID:@(3)
+ queue:mCallbackQueue];
+ VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE);
+
+ [cluster readAttributeAttributeListWithCompletion:^(NSArray * _Nullable value, NSError * _Nullable err) {
+ NSLog(@"TH reads optional attribute(UniqueID) in AttributeList Error: %@", err);
+
+ VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
+
+ VerifyOrReturn(CheckConstraintType("attributeList", "list", "list"));
+ VerifyOrReturn(CheckConstraintContains("attributeList", value, 18UL));
+
+ NextTest();
+ }];
+
+ return CHIP_NO_ERROR;
+ }
+
+ CHIP_ERROR TestTh1ReadsAcceptedCommandListFromDut_18()
+ {
+
+ MTRBaseDevice * device = GetDevice("alpha");
+ __auto_type * cluster = [[MTRBaseClusterBridgedDeviceBasic alloc] initWithDevice:device
+ endpointID:@(3)
+ queue:mCallbackQueue];
+ VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE);
+
+ [cluster readAttributeAcceptedCommandListWithCompletion:^(NSArray * _Nullable value, NSError * _Nullable err) {
+ NSLog(@"TH1 reads AcceptedCommandList from DUT Error: %@", err);
+
+ VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
+
+ {
+ id actualValue = value;
+ VerifyOrReturn(CheckValue("AcceptedCommandList", [actualValue count], static_cast<uint32_t>(0)));
+ }
+
+ VerifyOrReturn(CheckConstraintType("acceptedCommandList", "list", "list"));
+ NextTest();
+ }];
+
+ return CHIP_NO_ERROR;
+ }
+
+ CHIP_ERROR TestTh1ReadsGeneratedCommandListFromDut_19()
+ {
+
+ MTRBaseDevice * device = GetDevice("alpha");
+ __auto_type * cluster = [[MTRBaseClusterBridgedDeviceBasic alloc] initWithDevice:device
+ endpointID:@(3)
+ queue:mCallbackQueue];
+ VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE);
+
+ [cluster readAttributeGeneratedCommandListWithCompletion:^(NSArray * _Nullable value, NSError * _Nullable err) {
+ NSLog(@"TH1 reads GeneratedCommandList from DUT Error: %@", err);
+
+ VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
+
+ {
+ id actualValue = value;
+ VerifyOrReturn(CheckValue("GeneratedCommandList", [actualValue count], static_cast<uint32_t>(0)));
+ }
+
+ VerifyOrReturn(CheckConstraintType("generatedCommandList", "list", "list"));
+ NextTest();
+ }];
+
+ return CHIP_NO_ERROR;
+ }
+};
+
class Test_TC_ACT_1_1 : public TestCommandBridge {
public:
// NOLINTBEGIN(clang-analyzer-nullability.NullPassedToNonnull): Test constructor nullability not enforced
@@ -17904,6 +19734,134 @@
// but before our function call returns, we won't end up with an
// incorrect mTestIndex value observed when we get the response.
switch (mTestIndex++) {
+ case 0:
+ ChipLogProgress(chipTool, " ***** Test Step 0 : Wait for the commissioned device to be retrieved\n");
+ err = TestWaitForTheCommissionedDeviceToBeRetrieved_0();
+ break;
+ case 1:
+ ChipLogProgress(chipTool, " ***** Test Step 1 : Read the global attribute: ClusterRevision\n");
+ err = TestReadTheGlobalAttributeClusterRevision_1();
+ break;
+ case 2:
+ ChipLogProgress(chipTool, " ***** Test Step 2 : Read the global attribute: FeatureMap\n");
+ if (ShouldSkip(" !CNET.S.F00 && !CNET.S.F01 && !CNET.S.F02 ")) {
+ NextTest();
+ return;
+ }
+ err = TestReadTheGlobalAttributeFeatureMap_2();
+ break;
+ case 3:
+ ChipLogProgress(chipTool, " ***** Test Step 3 : Read the global attribute: FeatureMap when CNET.S.F00 is set\n");
+ if (ShouldSkip("CNET.S.F00")) {
+ NextTest();
+ return;
+ }
+ err = TestReadTheGlobalAttributeFeatureMapWhenCnetsf00IsSet_3();
+ break;
+ case 4:
+ ChipLogProgress(chipTool, " ***** Test Step 4 : Read the global attribute: FeatureMap when CNET.S.F01 is set\n");
+ if (ShouldSkip("CNET.S.F01")) {
+ NextTest();
+ return;
+ }
+ err = TestReadTheGlobalAttributeFeatureMapWhenCnetsf01IsSet_4();
+ break;
+ case 5:
+ ChipLogProgress(chipTool, " ***** Test Step 5 : Read the global attribute: FeatureMap when CNET.S.F02 is set\n");
+ if (ShouldSkip("CNET.S.F02")) {
+ NextTest();
+ return;
+ }
+ err = TestReadTheGlobalAttributeFeatureMapWhenCnetsf02IsSet_5();
+ break;
+ case 6:
+ ChipLogProgress(chipTool, " ***** Test Step 6 : Read the global attribute: AttributeList\n");
+ err = TestReadTheGlobalAttributeAttributeList_6();
+ break;
+ case 7:
+ ChipLogProgress(chipTool,
+ " ***** Test Step 7 : Read mandatory attributes in AttributeList if CNET.S.F00(WI)/CNET.S.F01(TH)/CNET.S.F02(ET) "
+ "is true\n");
+ if (ShouldSkip("CNET.S.F00 || CNET.S.F01 || CNET.S.F02")) {
+ NextTest();
+ return;
+ }
+ err = TestReadMandatoryAttributesInAttributeListIfCnetsf00wiCnetsf01thCnetsf02etIsTrue_7();
+ break;
+ case 8:
+ ChipLogProgress(chipTool, " ***** Test Step 8 : Read the optional attribute(ScanMaxTimeSeconds): AttributeList\n");
+ if (ShouldSkip("CNET.S.A0002")) {
+ NextTest();
+ return;
+ }
+ err = TestReadTheOptionalAttributeScanMaxTimeSecondsAttributeList_8();
+ break;
+ case 9:
+ ChipLogProgress(chipTool, " ***** Test Step 9 : Reading optional attribute(ConnectMaxTimeSeconds) in AttributeList\n");
+ if (ShouldSkip("CNET.S.A0003")) {
+ NextTest();
+ return;
+ }
+ err = TestReadingOptionalAttributeConnectMaxTimeSecondsInAttributeList_9();
+ break;
+ case 10:
+ ChipLogProgress(chipTool,
+ " ***** Test Step 10 : Read AcceptedCommandList If DUT supports Wi-Fi/Thread related features "
+ "CNET.S.F00(WI),CNET.S.F01(TH)\n");
+ if (ShouldSkip("CNET.S.F00 || CNET.S.F01")) {
+ NextTest();
+ return;
+ }
+ err = TestReadAcceptedCommandListIfDutSupportsWiFiThreadRelatedFeaturesCnetsf00wicnetsf01th_10();
+ break;
+ case 11:
+ ChipLogProgress(chipTool,
+ " ***** Test Step 11 : Read AcceptedCommandList If DUT supports Wi-Fi related features (CNET.S.F00(WI) is true)\n");
+ if (ShouldSkip("CNET.S.F00")) {
+ NextTest();
+ return;
+ }
+ err = TestReadAcceptedCommandListIfDutSupportsWiFiRelatedFeaturesCnetsf00wiIsTrue_11();
+ break;
+ case 12:
+ ChipLogProgress(chipTool,
+ " ***** Test Step 12 : Read AcceptedCommandList If DUT supports Thread related features(CNET.S.F01(TH) is true)\n");
+ if (ShouldSkip("CNET.S.F01")) {
+ NextTest();
+ return;
+ }
+ err = TestReadAcceptedCommandListIfDutSupportsThreadRelatedFeaturesCNETSF01THIsTrue_12();
+ break;
+ case 13:
+ ChipLogProgress(chipTool,
+ " ***** Test Step 13 : Read AcceptedCommandList If DUT supports Ethernet related features(CNET.S.F02(TH) is "
+ "true)\n");
+ if (ShouldSkip("CNET.S.F02")) {
+ NextTest();
+ return;
+ }
+ err = TestReadAcceptedCommandListIfDutSupportsEthernetRelatedFeaturesCNETSF02THIsTrue_13();
+ break;
+ case 14:
+ ChipLogProgress(chipTool,
+ " ***** Test Step 14 : Read the GeneratedCommandList If DUT supports Wi-Fi/Thread related features(CNET.S.F00(WI) "
+ "or CNET.S.F01(TH) is true)\n");
+ if (ShouldSkip("CNET.S.F00 || CNET.S.F01")) {
+ NextTest();
+ return;
+ }
+ err = TestReadTheGeneratedCommandListIfDutSupportsWiFiThreadRelatedFeaturesCNETSF00WIOrCnetsf01thIsTrue_14();
+ break;
+ case 15:
+ ChipLogProgress(chipTool,
+ " ***** Test Step 15 : Read the GeneratedCommandList If DUT supports Ethernet related features(CNET.S.F02(ET) must "
+ "be true)\n");
+ if (ShouldSkip("CNET.S.F02")) {
+ NextTest();
+ return;
+ }
+ err = TestReadTheGeneratedCommandListIfDutSupportsEthernetRelatedFeaturesCNETSF02ETMustBeTrue_15();
+ break;
}
if (CHIP_NO_ERROR != err) {
@@ -17915,6 +19873,54 @@
void OnStatusUpdate(const chip::app::StatusIB & status) override
{
switch (mTestIndex - 1) {
+ case 0:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ break;
+ case 1:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ break;
+ case 2:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ break;
+ case 3:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ break;
+ case 4:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ break;
+ case 5:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ break;
+ case 6:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ break;
+ case 7:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ break;
+ case 8:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ break;
+ case 9:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ break;
+ case 10:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ break;
+ case 11:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ break;
+ case 12:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ break;
+ case 13:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ break;
+ case 14:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ break;
+ case 15:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ break;
}
// Go on to the next test.
@@ -17928,12 +19934,399 @@
private:
std::atomic_uint16_t mTestIndex;
- const uint16_t mTestCount = 0;
+ const uint16_t mTestCount = 16;
chip::Optional<chip::NodeId> mNodeId;
chip::Optional<chip::CharSpan> mCluster;
chip::Optional<chip::EndpointId> mEndpoint;
chip::Optional<uint16_t> mTimeout;
+
+ CHIP_ERROR TestWaitForTheCommissionedDeviceToBeRetrieved_0()
+ {
+
+ chip::app::Clusters::DelayCommands::Commands::WaitForCommissionee::Type value;
+ value.nodeId = mNodeId.HasValue() ? mNodeId.Value() : 305414945ULL;
+ return WaitForCommissionee("alpha", value);
+ }
+
+ CHIP_ERROR TestReadTheGlobalAttributeClusterRevision_1()
+ {
+
+ MTRBaseDevice * device = GetDevice("alpha");
+ __auto_type * cluster = [[MTRBaseClusterNetworkCommissioning alloc] initWithDevice:device
+ endpointID:@(0)
+ queue:mCallbackQueue];
+ VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE);
+
+ [cluster readAttributeClusterRevisionWithCompletion:^(NSNumber * _Nullable value, NSError * _Nullable err) {
+ NSLog(@"Read the global attribute: ClusterRevision Error: %@", err);
+
+ VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
+
+ {
+ id actualValue = value;
+ VerifyOrReturn(CheckValue("ClusterRevision", actualValue, 1U));
+ }
+
+ VerifyOrReturn(CheckConstraintType("clusterRevision", "int16u", "int16u"));
+ NextTest();
+ }];
+
+ return CHIP_NO_ERROR;
+ }
+
+ CHIP_ERROR TestReadTheGlobalAttributeFeatureMap_2()
+ {
+
+ MTRBaseDevice * device = GetDevice("alpha");
+ __auto_type * cluster = [[MTRBaseClusterNetworkCommissioning alloc] initWithDevice:device
+ endpointID:@(0)
+ queue:mCallbackQueue];
+ VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE);
+
+ [cluster readAttributeFeatureMapWithCompletion:^(NSNumber * _Nullable value, NSError * _Nullable err) {
+ NSLog(@"Read the global attribute: FeatureMap Error: %@", err);
+
+ VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
+
+ {
+ id actualValue = value;
+ VerifyOrReturn(CheckValue("FeatureMap", actualValue, 0UL));
+ }
+
+ NextTest();
+ }];
+
+ return CHIP_NO_ERROR;
+ }
+
+ CHIP_ERROR TestReadTheGlobalAttributeFeatureMapWhenCnetsf00IsSet_3()
+ {
+
+ MTRBaseDevice * device = GetDevice("alpha");
+ __auto_type * cluster = [[MTRBaseClusterNetworkCommissioning alloc] initWithDevice:device
+ endpointID:@(0)
+ queue:mCallbackQueue];
+ VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE);
+
+ [cluster readAttributeFeatureMapWithCompletion:^(NSNumber * _Nullable value, NSError * _Nullable err) {
+ NSLog(@"Read the global attribute: FeatureMap when CNET.S.F00 is set Error: %@", err);
+
+ VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
+
+ {
+ id actualValue = value;
+ VerifyOrReturn(CheckValue("FeatureMap", actualValue, 1UL));
+ }
+
+ NextTest();
+ }];
+
+ return CHIP_NO_ERROR;
+ }
+
+ CHIP_ERROR TestReadTheGlobalAttributeFeatureMapWhenCnetsf01IsSet_4()
+ {
+
+ MTRBaseDevice * device = GetDevice("alpha");
+ __auto_type * cluster = [[MTRBaseClusterNetworkCommissioning alloc] initWithDevice:device
+ endpointID:@(0)
+ queue:mCallbackQueue];
+ VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE);
+
+ [cluster readAttributeFeatureMapWithCompletion:^(NSNumber * _Nullable value, NSError * _Nullable err) {
+ NSLog(@"Read the global attribute: FeatureMap when CNET.S.F01 is set Error: %@", err);
+
+ VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
+
+ {
+ id actualValue = value;
+ VerifyOrReturn(CheckValue("FeatureMap", actualValue, 2UL));
+ }
+
+ NextTest();
+ }];
+
+ return CHIP_NO_ERROR;
+ }
+
+ CHIP_ERROR TestReadTheGlobalAttributeFeatureMapWhenCnetsf02IsSet_5()
+ {
+
+ MTRBaseDevice * device = GetDevice("alpha");
+ __auto_type * cluster = [[MTRBaseClusterNetworkCommissioning alloc] initWithDevice:device
+ endpointID:@(0)
+ queue:mCallbackQueue];
+ VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE);
+
+ [cluster readAttributeFeatureMapWithCompletion:^(NSNumber * _Nullable value, NSError * _Nullable err) {
+ NSLog(@"Read the global attribute: FeatureMap when CNET.S.F02 is set Error: %@", err);
+
+ VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
+
+ {
+ id actualValue = value;
+ VerifyOrReturn(CheckValue("FeatureMap", actualValue, 4UL));
+ }
+
+ NextTest();
+ }];
+
+ return CHIP_NO_ERROR;
+ }
+
+ CHIP_ERROR TestReadTheGlobalAttributeAttributeList_6()
+ {
+
+ MTRBaseDevice * device = GetDevice("alpha");
+ __auto_type * cluster = [[MTRBaseClusterNetworkCommissioning alloc] initWithDevice:device
+ endpointID:@(0)
+ queue:mCallbackQueue];
+ VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE);
+
+ [cluster readAttributeAttributeListWithCompletion:^(NSArray * _Nullable value, NSError * _Nullable err) {
+ NSLog(@"Read the global attribute: AttributeList Error: %@", err);
+
+ VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
+
+ VerifyOrReturn(CheckConstraintType("attributeList", "list", "list"));
+ VerifyOrReturn(CheckConstraintContains("attributeList", value, 65528UL));
+ VerifyOrReturn(CheckConstraintContains("attributeList", value, 65529UL));
+ VerifyOrReturn(CheckConstraintContains("attributeList", value, 65531UL));
+ VerifyOrReturn(CheckConstraintContains("attributeList", value, 65532UL));
+ VerifyOrReturn(CheckConstraintContains("attributeList", value, 65533UL));
+
+ NextTest();
+ }];
+
+ return CHIP_NO_ERROR;
+ }
+
+ CHIP_ERROR TestReadMandatoryAttributesInAttributeListIfCnetsf00wiCnetsf01thCnetsf02etIsTrue_7()
+ {
+
+ MTRBaseDevice * device = GetDevice("alpha");
+ __auto_type * cluster = [[MTRBaseClusterNetworkCommissioning alloc] initWithDevice:device
+ endpointID:@(0)
+ queue:mCallbackQueue];
+ VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE);
+
+ [cluster readAttributeAttributeListWithCompletion:^(NSArray * _Nullable value, NSError * _Nullable err) {
+ NSLog(@"Read mandatory attributes in AttributeList if CNET.S.F00(WI)/CNET.S.F01(TH)/CNET.S.F02(ET) is true Error: %@",
+ err);
+
+ VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
+
+ VerifyOrReturn(CheckConstraintType("attributeList", "list", "list"));
+ VerifyOrReturn(CheckConstraintContains("attributeList", value, 0UL));
+ VerifyOrReturn(CheckConstraintContains("attributeList", value, 1UL));
+ VerifyOrReturn(CheckConstraintContains("attributeList", value, 4UL));
+ VerifyOrReturn(CheckConstraintContains("attributeList", value, 5UL));
+ VerifyOrReturn(CheckConstraintContains("attributeList", value, 6UL));
+ VerifyOrReturn(CheckConstraintContains("attributeList", value, 7UL));
+
+ NextTest();
+ }];
+
+ return CHIP_NO_ERROR;
+ }
+
+ CHIP_ERROR TestReadTheOptionalAttributeScanMaxTimeSecondsAttributeList_8()
+ {
+
+ MTRBaseDevice * device = GetDevice("alpha");
+ __auto_type * cluster = [[MTRBaseClusterNetworkCommissioning alloc] initWithDevice:device
+ endpointID:@(0)
+ queue:mCallbackQueue];
+ VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE);
+
+ [cluster readAttributeAttributeListWithCompletion:^(NSArray * _Nullable value, NSError * _Nullable err) {
+ NSLog(@"Read the optional attribute(ScanMaxTimeSeconds): AttributeList Error: %@", err);
+
+ VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
+
+ VerifyOrReturn(CheckConstraintType("attributeList", "list", "list"));
+ VerifyOrReturn(CheckConstraintContains("attributeList", value, 2UL));
+
+ NextTest();
+ }];
+
+ return CHIP_NO_ERROR;
+ }
+
+ CHIP_ERROR TestReadingOptionalAttributeConnectMaxTimeSecondsInAttributeList_9()
+ {
+
+ MTRBaseDevice * device = GetDevice("alpha");
+ __auto_type * cluster = [[MTRBaseClusterNetworkCommissioning alloc] initWithDevice:device
+ endpointID:@(0)
+ queue:mCallbackQueue];
+ VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE);
+
+ [cluster readAttributeAttributeListWithCompletion:^(NSArray * _Nullable value, NSError * _Nullable err) {
+ NSLog(@"Reading optional attribute(ConnectMaxTimeSeconds) in AttributeList Error: %@", err);
+
+ VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
+
+ VerifyOrReturn(CheckConstraintType("attributeList", "list", "list"));
+ VerifyOrReturn(CheckConstraintContains("attributeList", value, 3UL));
+
+ NextTest();
+ }];
+
+ return CHIP_NO_ERROR;
+ }
+
+ CHIP_ERROR TestReadAcceptedCommandListIfDutSupportsWiFiThreadRelatedFeaturesCnetsf00wicnetsf01th_10()
+ {
+
+ MTRBaseDevice * device = GetDevice("alpha");
+ __auto_type * cluster = [[MTRBaseClusterNetworkCommissioning alloc] initWithDevice:device
+ endpointID:@(0)
+ queue:mCallbackQueue];
+ VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE);
+
+ [cluster readAttributeAcceptedCommandListWithCompletion:^(NSArray * _Nullable value, NSError * _Nullable err) {
+ NSLog(@"Read AcceptedCommandList If DUT supports Wi-Fi/Thread related features CNET.S.F00(WI),CNET.S.F01(TH) Error: %@",
+ err);
+
+ VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
+
+ VerifyOrReturn(CheckConstraintType("acceptedCommandList", "list", "list"));
+ VerifyOrReturn(CheckConstraintContains("acceptedCommandList", value, 0UL));
+ VerifyOrReturn(CheckConstraintContains("acceptedCommandList", value, 4UL));
+ VerifyOrReturn(CheckConstraintContains("acceptedCommandList", value, 6UL));
+ VerifyOrReturn(CheckConstraintContains("acceptedCommandList", value, 8UL));
+
+ NextTest();
+ }];
+
+ return CHIP_NO_ERROR;
+ }
+
+ CHIP_ERROR TestReadAcceptedCommandListIfDutSupportsWiFiRelatedFeaturesCnetsf00wiIsTrue_11()
+ {
+
+ MTRBaseDevice * device = GetDevice("alpha");
+ __auto_type * cluster = [[MTRBaseClusterNetworkCommissioning alloc] initWithDevice:device
+ endpointID:@(0)
+ queue:mCallbackQueue];
+ VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE);
+
+ [cluster readAttributeAcceptedCommandListWithCompletion:^(NSArray * _Nullable value, NSError * _Nullable err) {
+ NSLog(@"Read AcceptedCommandList If DUT supports Wi-Fi related features (CNET.S.F00(WI) is true) Error: %@", err);
+
+ VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
+
+ VerifyOrReturn(CheckConstraintType("acceptedCommandList", "list", "list"));
+ VerifyOrReturn(CheckConstraintContains("acceptedCommandList", value, 2UL));
+
+ NextTest();
+ }];
+
+ return CHIP_NO_ERROR;
+ }
+
+ CHIP_ERROR TestReadAcceptedCommandListIfDutSupportsThreadRelatedFeaturesCNETSF01THIsTrue_12()
+ {
+
+ MTRBaseDevice * device = GetDevice("alpha");
+ __auto_type * cluster = [[MTRBaseClusterNetworkCommissioning alloc] initWithDevice:device
+ endpointID:@(0)
+ queue:mCallbackQueue];
+ VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE);
+
+ [cluster readAttributeAcceptedCommandListWithCompletion:^(NSArray * _Nullable value, NSError * _Nullable err) {
+ NSLog(@"Read AcceptedCommandList If DUT supports Thread related features(CNET.S.F01(TH) is true) Error: %@", err);
+
+ VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
+
+ VerifyOrReturn(CheckConstraintType("acceptedCommandList", "list", "list"));
+ VerifyOrReturn(CheckConstraintContains("acceptedCommandList", value, 3UL));
+
+ NextTest();
+ }];
+
+ return CHIP_NO_ERROR;
+ }
+
+ CHIP_ERROR TestReadAcceptedCommandListIfDutSupportsEthernetRelatedFeaturesCNETSF02THIsTrue_13()
+ {
+
+ MTRBaseDevice * device = GetDevice("alpha");
+ __auto_type * cluster = [[MTRBaseClusterNetworkCommissioning alloc] initWithDevice:device
+ endpointID:@(0)
+ queue:mCallbackQueue];
+ VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE);
+
+ [cluster readAttributeAcceptedCommandListWithCompletion:^(NSArray * _Nullable value, NSError * _Nullable err) {
+ NSLog(@"Read AcceptedCommandList If DUT supports Ethernet related features(CNET.S.F02(TH) is true) Error: %@", err);
+
+ VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
+
+ {
+ id actualValue = value;
+ VerifyOrReturn(CheckValue("AcceptedCommandList", [actualValue count], static_cast<uint32_t>(0)));
+ }
+
+ NextTest();
+ }];
+
+ return CHIP_NO_ERROR;
+ }
+
+ CHIP_ERROR TestReadTheGeneratedCommandListIfDutSupportsWiFiThreadRelatedFeaturesCNETSF00WIOrCnetsf01thIsTrue_14()
+ {
+
+ MTRBaseDevice * device = GetDevice("alpha");
+ __auto_type * cluster = [[MTRBaseClusterNetworkCommissioning alloc] initWithDevice:device
+ endpointID:@(0)
+ queue:mCallbackQueue];
+ VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE);
+
+ [cluster readAttributeGeneratedCommandListWithCompletion:^(NSArray * _Nullable value, NSError * _Nullable err) {
+ NSLog(@"Read the GeneratedCommandList If DUT supports Wi-Fi/Thread related features(CNET.S.F00(WI) or CNET.S.F01(TH) "
+ @"is true) Error: %@",
+ err);
+
+ VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
+
+ VerifyOrReturn(CheckConstraintType("generatedCommandList", "list", "list"));
+ VerifyOrReturn(CheckConstraintContains("generatedCommandList", value, 1UL));
+ VerifyOrReturn(CheckConstraintContains("generatedCommandList", value, 5UL));
+ VerifyOrReturn(CheckConstraintContains("generatedCommandList", value, 7UL));
+
+ NextTest();
+ }];
+
+ return CHIP_NO_ERROR;
+ }
+
+ CHIP_ERROR TestReadTheGeneratedCommandListIfDutSupportsEthernetRelatedFeaturesCNETSF02ETMustBeTrue_15()
+ {
+
+ MTRBaseDevice * device = GetDevice("alpha");
+ __auto_type * cluster = [[MTRBaseClusterNetworkCommissioning alloc] initWithDevice:device
+ endpointID:@(0)
+ queue:mCallbackQueue];
+ VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE);
+
+ [cluster readAttributeGeneratedCommandListWithCompletion:^(NSArray * _Nullable value, NSError * _Nullable err) {
+ NSLog(@"Read the GeneratedCommandList If DUT supports Ethernet related features(CNET.S.F02(ET) must be true) Error: %@",
+ err);
+
+ VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
+
+ {
+ id actualValue = value;
+ VerifyOrReturn(CheckValue("GeneratedCommandList", [actualValue count], static_cast<uint32_t>(0)));
+ }
+
+ NextTest();
+ }];
+
+ return CHIP_NO_ERROR;
+ }
};
class Test_TC_DESC_1_1 : public TestCommandBridge {
@@ -36408,6 +38801,261 @@
}
};
+class Test_TC_ALOGIN_12_1 : public TestCommandBridge {
+public:
+ // NOLINTBEGIN(clang-analyzer-nullability.NullPassedToNonnull): Test constructor nullability not enforced
+ Test_TC_ALOGIN_12_1()
+ : TestCommandBridge("Test_TC_ALOGIN_12_1")
+ , mTestIndex(0)
+ {
+ AddArgument("nodeId", 0, UINT64_MAX, &mNodeId);
+ AddArgument("cluster", &mCluster);
+ AddArgument("endpoint", 0, UINT16_MAX, &mEndpoint);
+ AddArgument("TempAccountIdentifier", &mTempAccountIdentifier);
+ AddArgument("catalogVendorId", 0, UINT16_MAX, &mCatalogVendorId);
+ AddArgument("applicationId", &mApplicationId);
+ AddArgument("timeout", 0, UINT16_MAX, &mTimeout);
+ }
+ // NOLINTEND(clang-analyzer-nullability.NullPassedToNonnull)
+
+ ~Test_TC_ALOGIN_12_1() {}
+
+ /////////// TestCommand Interface /////////
+ void NextTest() override
+ {
+ CHIP_ERROR err = CHIP_NO_ERROR;
+
+ if (0 == mTestIndex) {
+ ChipLogProgress(chipTool, " **** Test Start: Test_TC_ALOGIN_12_1\n");
+ }
+
+ if (mTestCount == mTestIndex) {
+ ChipLogProgress(chipTool, " **** Test Complete: Test_TC_ALOGIN_12_1\n");
+ SetCommandExitStatus(CHIP_NO_ERROR);
+ return;
+ }
+
+ Wait();
+
+ // Ensure we increment mTestIndex before we start running the relevant
+ // command. That way if we lose the timeslice after we send the message
+ // but before our function call returns, we won't end up with an
+ // incorrect mTestIndex value observed when we get the response.
+ switch (mTestIndex++) {
+ case 0:
+ ChipLogProgress(chipTool, " ***** Test Step 0 : Wait for the commissioned device to be retrieved\n");
+ err = TestWaitForTheCommissionedDeviceToBeRetrieved_0();
+ break;
+ case 1:
+ ChipLogProgress(chipTool, " ***** Test Step 1 : Launch an app with the provided a application ID\n");
+ if (ShouldSkip("APPLAUNCHER.S.C00.Rsp")) {
+ NextTest();
+ return;
+ }
+ err = TestLaunchAnAppWithTheProvidedAApplicationId_1();
+ break;
+ case 2:
+ ChipLogProgress(chipTool,
+ " ***** Test Step 2 : TH sends a GetSetupPIN command to the DUT with test values provided by the product maker.\n");
+ if (ShouldSkip("ALOGIN.S.C00.Rsp")) {
+ NextTest();
+ return;
+ }
+ err = TestThSendsAGetSetupPINCommandToTheDutWithTestValuesProvidedByTheProductMaker_2();
+ break;
+ case 3:
+ ChipLogProgress(chipTool,
+ " ***** Test Step 3 : TH sends a Login command to the DUT with test values provided by the product maker.\n");
+ if (ShouldSkip("ALOGIN.S.C02.Rsp")) {
+ NextTest();
+ return;
+ }
+ err = TestThSendsALoginCommandToTheDutWithTestValuesProvidedByTheProductMaker_3();
+ break;
+ case 4:
+ ChipLogProgress(chipTool,
+ " ***** Test Step 4 : TH sends a Logout command to the DUT with test values provided by the product maker.\n");
+ if (ShouldSkip("ALOGIN.S.C03.Rsp")) {
+ NextTest();
+ return;
+ }
+ err = TestThSendsALogoutCommandToTheDutWithTestValuesProvidedByTheProductMaker_4();
+ break;
+ }
+
+ if (CHIP_NO_ERROR != err) {
+ ChipLogError(chipTool, " ***** Test Failure: %s\n", chip::ErrorStr(err));
+ SetCommandExitStatus(err);
+ }
+ }
+
+ void OnStatusUpdate(const chip::app::StatusIB & status) override
+ {
+ switch (mTestIndex - 1) {
+ case 0:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ break;
+ case 1:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ break;
+ case 2:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ break;
+ case 3:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ break;
+ case 4:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ break;
+ }
+
+ // Go on to the next test.
+ ContinueOnChipMainThread(CHIP_NO_ERROR);
+ }
+
+ chip::System::Clock::Timeout GetWaitDuration() const override
+ {
+ return chip::System::Clock::Seconds16(mTimeout.ValueOr(kTimeoutInSeconds));
+ }
+
+private:
+ std::atomic_uint16_t mTestIndex;
+ const uint16_t mTestCount = 5;
+
+ chip::Optional<chip::NodeId> mNodeId;
+ chip::Optional<chip::CharSpan> mCluster;
+ chip::Optional<chip::EndpointId> mEndpoint;
+ chip::Optional<chip::CharSpan> mTempAccountIdentifier;
+ chip::Optional<uint16_t> mCatalogVendorId;
+ chip::Optional<chip::CharSpan> mApplicationId;
+ chip::Optional<uint16_t> mTimeout;
+
+ CHIP_ERROR TestWaitForTheCommissionedDeviceToBeRetrieved_0()
+ {
+
+ chip::app::Clusters::DelayCommands::Commands::WaitForCommissionee::Type value;
+ value.nodeId = mNodeId.HasValue() ? mNodeId.Value() : 305414945ULL;
+ return WaitForCommissionee("alpha", value);
+ }
+
+ CHIP_ERROR TestLaunchAnAppWithTheProvidedAApplicationId_1()
+ {
+
+ MTRBaseDevice * device = GetDevice("alpha");
+ __auto_type * cluster = [[MTRBaseClusterApplicationLauncher alloc] initWithDevice:device
+ endpointID:@(3)
+ queue:mCallbackQueue];
+ VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE);
+
+ __auto_type * params = [[MTRApplicationLauncherClusterLaunchAppParams alloc] init];
+ params.application = [[MTRApplicationLauncherClusterApplication alloc] init];
+ ((MTRApplicationLauncherClusterApplication *) params.application).catalogVendorId = mCatalogVendorId.HasValue()
+ ? [NSNumber numberWithUnsignedShort:mCatalogVendorId.Value()]
+ : [NSNumber numberWithUnsignedShort:123U];
+ ((MTRApplicationLauncherClusterApplication *) params.application).applicationId = mApplicationId.HasValue()
+ ? [[NSString alloc] initWithBytes:mApplicationId.Value().data()
+ length:mApplicationId.Value().size()
+ encoding:NSUTF8StringEncoding]
+ : @"exampleid";
+
+ params.data = [[NSData alloc] initWithBytes:"Hello World" length:11];
+ [cluster
+ launchAppWithParams:params
+ completion:^(MTRApplicationLauncherClusterLauncherResponseParams * _Nullable values, NSError * _Nullable err) {
+ NSLog(@"Launch an app with the provided a application ID Error: %@", err);
+
+ VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
+
+ {
+ id actualValue = values.status;
+ VerifyOrReturn(CheckValue("status", actualValue, 0U));
+ }
+
+ NextTest();
+ }];
+
+ return CHIP_NO_ERROR;
+ }
+ NSString * _Nonnull setupPIN;
+
+ CHIP_ERROR TestThSendsAGetSetupPINCommandToTheDutWithTestValuesProvidedByTheProductMaker_2()
+ {
+
+ MTRBaseDevice * device = GetDevice("alpha");
+ __auto_type * cluster = [[MTRBaseClusterAccountLogin alloc] initWithDevice:device endpointID:@(3) queue:mCallbackQueue];
+ VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE);
+
+ __auto_type * params = [[MTRAccountLoginClusterGetSetupPINParams alloc] init];
+ params.tempAccountIdentifier = mTempAccountIdentifier.HasValue()
+ ? [[NSString alloc] initWithBytes:mTempAccountIdentifier.Value().data()
+ length:mTempAccountIdentifier.Value().size()
+ encoding:NSUTF8StringEncoding]
+ : @"1111";
+ [cluster
+ getSetupPINWithParams:params
+ completion:^(MTRAccountLoginClusterGetSetupPINResponseParams * _Nullable values, NSError * _Nullable err) {
+ NSLog(@"TH sends a GetSetupPIN command to the DUT with test values provided by the product maker. "
+ @"Error: %@",
+ err);
+
+ VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
+
+ {
+ setupPIN = values.setupPIN;
+ }
+
+ NextTest();
+ }];
+
+ return CHIP_NO_ERROR;
+ }
+
+ CHIP_ERROR TestThSendsALoginCommandToTheDutWithTestValuesProvidedByTheProductMaker_3()
+ {
+
+ MTRBaseDevice * device = GetDevice("alpha");
+ __auto_type * cluster = [[MTRBaseClusterAccountLogin alloc] initWithDevice:device endpointID:@(3) queue:mCallbackQueue];
+ VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE);
+
+ __auto_type * params = [[MTRAccountLoginClusterLoginParams alloc] init];
+ params.tempAccountIdentifier = mTempAccountIdentifier.HasValue()
+ ? [[NSString alloc] initWithBytes:mTempAccountIdentifier.Value().data()
+ length:mTempAccountIdentifier.Value().size()
+ encoding:NSUTF8StringEncoding]
+ : @"1111";
+ params.setupPIN = [setupPIN copy];
+ [cluster
+ loginWithParams:params
+ completion:^(NSError * _Nullable err) {
+ NSLog(@"TH sends a Login command to the DUT with test values provided by the product maker. Error: %@", err);
+
+ VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
+
+ NextTest();
+ }];
+
+ return CHIP_NO_ERROR;
+ }
+
+ CHIP_ERROR TestThSendsALogoutCommandToTheDutWithTestValuesProvidedByTheProductMaker_4()
+ {
+
+ MTRBaseDevice * device = GetDevice("alpha");
+ __auto_type * cluster = [[MTRBaseClusterAccountLogin alloc] initWithDevice:device endpointID:@(3) queue:mCallbackQueue];
+ VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE);
+
+ [cluster logoutWithCompletion:^(NSError * _Nullable err) {
+ NSLog(@"TH sends a Logout command to the DUT with test values provided by the product maker. Error: %@", err);
+
+ VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
+
+ NextTest();
+ }];
+
+ return CHIP_NO_ERROR;
+ }
+};
+
class Test_TC_LOWPOWER_2_1 : public TestCommandBridge {
public:
// NOLINTBEGIN(clang-analyzer-nullability.NullPassedToNonnull): Test constructor nullability not enforced
@@ -38001,6 +40649,172 @@
}
};
+class Test_TC_WAKEONLAN_4_1 : public TestCommandBridge {
+public:
+ // NOLINTBEGIN(clang-analyzer-nullability.NullPassedToNonnull): Test constructor nullability not enforced
+ Test_TC_WAKEONLAN_4_1()
+ : TestCommandBridge("Test_TC_WAKEONLAN_4_1")
+ , mTestIndex(0)
+ {
+ AddArgument("nodeId", 0, UINT64_MAX, &mNodeId);
+ AddArgument("cluster", &mCluster);
+ AddArgument("endpoint", 0, UINT16_MAX, &mEndpoint);
+ AddArgument("timeout", 0, UINT16_MAX, &mTimeout);
+ }
+ // NOLINTEND(clang-analyzer-nullability.NullPassedToNonnull)
+
+ ~Test_TC_WAKEONLAN_4_1() {}
+
+ /////////// TestCommand Interface /////////
+ void NextTest() override
+ {
+ CHIP_ERROR err = CHIP_NO_ERROR;
+
+ if (0 == mTestIndex) {
+ ChipLogProgress(chipTool, " **** Test Start: Test_TC_WAKEONLAN_4_1\n");
+ }
+
+ if (mTestCount == mTestIndex) {
+ ChipLogProgress(chipTool, " **** Test Complete: Test_TC_WAKEONLAN_4_1\n");
+ SetCommandExitStatus(CHIP_NO_ERROR);
+ return;
+ }
+
+ Wait();
+
+ // Ensure we increment mTestIndex before we start running the relevant
+ // command. That way if we lose the timeslice after we send the message
+ // but before our function call returns, we won't end up with an
+ // incorrect mTestIndex value observed when we get the response.
+ switch (mTestIndex++) {
+ case 0:
+ ChipLogProgress(chipTool, " ***** Test Step 0 : Wait for the commissioned device to be retrieved\n");
+ err = TestWaitForTheCommissionedDeviceToBeRetrieved_0();
+ break;
+ case 1:
+ ChipLogProgress(chipTool, " ***** Test Step 1 : TH reads the MACAddress attribute from the DUT\n");
+ if (ShouldSkip("WAKEONLAN.S.A0000")) {
+ NextTest();
+ return;
+ }
+ err = TestThReadsTheMACAddressAttributeFromTheDut_1();
+ break;
+ case 2:
+ ChipLogProgress(chipTool, " ***** Test Step 2 : TH sends a Sleep command to DUT\n");
+ if (ShouldSkip("LOWPOWER.S.C00.Rsp")) {
+ NextTest();
+ return;
+ }
+ err = TestThSendsASleepCommandToDut_2();
+ break;
+ case 3:
+ ChipLogProgress(
+ chipTool, " ***** Test Step 3 : TH sends a Wake-On LAN magic packet containing the MAC address from step 1\n");
+ if (ShouldSkip("PICS_USER_PROMPT")) {
+ NextTest();
+ return;
+ }
+ err = TestThSendsAWakeOnLanMagicPacketContainingTheMacAddressFromStep1_3();
+ break;
+ }
+
+ if (CHIP_NO_ERROR != err) {
+ ChipLogError(chipTool, " ***** Test Failure: %s\n", chip::ErrorStr(err));
+ SetCommandExitStatus(err);
+ }
+ }
+
+ void OnStatusUpdate(const chip::app::StatusIB & status) override
+ {
+ switch (mTestIndex - 1) {
+ case 0:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ break;
+ case 1:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ break;
+ case 2:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ break;
+ case 3:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ break;
+ }
+
+ // Go on to the next test.
+ ContinueOnChipMainThread(CHIP_NO_ERROR);
+ }
+
+ chip::System::Clock::Timeout GetWaitDuration() const override
+ {
+ return chip::System::Clock::Seconds16(mTimeout.ValueOr(kTimeoutInSeconds));
+ }
+
+private:
+ std::atomic_uint16_t mTestIndex;
+ const uint16_t mTestCount = 4;
+
+ chip::Optional<chip::NodeId> mNodeId;
+ chip::Optional<chip::CharSpan> mCluster;
+ chip::Optional<chip::EndpointId> mEndpoint;
+ chip::Optional<uint16_t> mTimeout;
+
+ CHIP_ERROR TestWaitForTheCommissionedDeviceToBeRetrieved_0()
+ {
+
+ chip::app::Clusters::DelayCommands::Commands::WaitForCommissionee::Type value;
+ value.nodeId = mNodeId.HasValue() ? mNodeId.Value() : 305414945ULL;
+ return WaitForCommissionee("alpha", value);
+ }
+
+ CHIP_ERROR TestThReadsTheMACAddressAttributeFromTheDut_1()
+ {
+
+ MTRBaseDevice * device = GetDevice("alpha");
+ __auto_type * cluster = [[MTRBaseClusterWakeOnLAN alloc] initWithDevice:device endpointID:@(1) queue:mCallbackQueue];
+ VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE);
+
+ [cluster readAttributeMACAddressWithCompletion:^(NSString * _Nullable value, NSError * _Nullable err) {
+ NSLog(@"TH reads the MACAddress attribute from the DUT Error: %@", err);
+
+ VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
+
+ VerifyOrReturn(CheckConstraintMinLength("MACAddress", value, 12));
+ NextTest();
+ }];
+
+ return CHIP_NO_ERROR;
+ }
+
+ CHIP_ERROR TestThSendsASleepCommandToDut_2()
+ {
+
+ MTRBaseDevice * device = GetDevice("alpha");
+ __auto_type * cluster = [[MTRBaseClusterLowPower alloc] initWithDevice:device endpointID:@(1) queue:mCallbackQueue];
+ VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE);
+
+ [cluster sleepWithCompletion:^(NSError * _Nullable err) {
+ NSLog(@"TH sends a Sleep command to DUT Error: %@", err);
+
+ VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
+
+ NextTest();
+ }];
+
+ return CHIP_NO_ERROR;
+ }
+
+ CHIP_ERROR TestThSendsAWakeOnLanMagicPacketContainingTheMacAddressFromStep1_3()
+ {
+
+ chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value;
+ value.message = chip::Span<const char>("Please enter 'y' after successgarbage: not in length on purpose", 30);
+ value.expectedValue.Emplace();
+ value.expectedValue.Value() = chip::Span<const char>("ygarbage: not in length on purpose", 1);
+ return UserPrompt("alpha", value);
+ }
+};
+
class Test_TC_CHANNEL_5_1 : public TestCommandBridge {
public:
// NOLINTBEGIN(clang-analyzer-nullability.NullPassedToNonnull): Test constructor nullability not enforced
@@ -56030,7 +58844,7 @@
break;
case 51:
ChipLogProgress(chipTool, " ***** Test Step 51 : Read the optional attribute (ActiveTimestamp) in AttributeList\n");
- if (ShouldSkip("DGTHREAD.S.A0039")) {
+ if (ShouldSkip("DGTHREAD.S.A0038")) {
NextTest();
return;
}
@@ -56038,7 +58852,7 @@
break;
case 52:
ChipLogProgress(chipTool, " ***** Test Step 52 : Read the optional attribute (PendingTimestamp) in AttributeList\n");
- if (ShouldSkip("DGTHREAD.S.A003A")) {
+ if (ShouldSkip("DGTHREAD.S.A0039")) {
NextTest();
return;
}
@@ -56046,7 +58860,7 @@
break;
case 53:
ChipLogProgress(chipTool, " ***** Test Step 53 : Read the optional attribute (Delay) in AttributeList\n");
- if (ShouldSkip("DGTHREAD.S.A003B")) {
+ if (ShouldSkip("DGTHREAD.S.A003a")) {
NextTest();
return;
}
@@ -121276,6 +124090,455 @@
}
};
+class Test_TC_DRLK_2_6 : public TestCommandBridge {
+public:
+ // NOLINTBEGIN(clang-analyzer-nullability.NullPassedToNonnull): Test constructor nullability not enforced
+ Test_TC_DRLK_2_6()
+ : TestCommandBridge("Test_TC_DRLK_2_6")
+ , mTestIndex(0)
+ {
+ AddArgument("nodeId", 0, UINT64_MAX, &mNodeId);
+ AddArgument("cluster", &mCluster);
+ AddArgument("endpoint", 0, UINT16_MAX, &mEndpoint);
+ AddArgument("timeout", 0, UINT16_MAX, &mTimeout);
+ }
+ // NOLINTEND(clang-analyzer-nullability.NullPassedToNonnull)
+
+ ~Test_TC_DRLK_2_6() {}
+
+ /////////// TestCommand Interface /////////
+ void NextTest() override
+ {
+ CHIP_ERROR err = CHIP_NO_ERROR;
+
+ if (0 == mTestIndex) {
+ ChipLogProgress(chipTool, " **** Test Start: Test_TC_DRLK_2_6\n");
+ }
+
+ if (mTestCount == mTestIndex) {
+ ChipLogProgress(chipTool, " **** Test Complete: Test_TC_DRLK_2_6\n");
+ SetCommandExitStatus(CHIP_NO_ERROR);
+ return;
+ }
+
+ Wait();
+
+ // Ensure we increment mTestIndex before we start running the relevant
+ // command. That way if we lose the timeslice after we send the message
+ // but before our function call returns, we won't end up with an
+ // incorrect mTestIndex value observed when we get the response.
+ switch (mTestIndex++) {
+ case 0:
+ ChipLogProgress(chipTool, " ***** Test Step 0 : Wait for commissionee\n");
+ err = TestWaitForCommissionee_0();
+ break;
+ case 1:
+ ChipLogProgress(
+ chipTool, " ***** Test Step 1 : TH reads NumberOfHoliday SchedulesSupported and saves for future use.\n");
+ if (ShouldSkip("DRLK.S.F0b && DRLK.S.A0016")) {
+ NextTest();
+ return;
+ }
+ err = TestThReadsNumberOfHolidaySchedulesSupportedAndSavesForFutureUse_1();
+ break;
+ case 2:
+ ChipLogProgress(chipTool, " ***** Test Step 2 : Create Holiday schedule with 1 index\n");
+ if (ShouldSkip("DRLK.S.F0b && DRLK.S.C11.Rsp")) {
+ NextTest();
+ return;
+ }
+ err = TestCreateHolidayScheduleWith1Index_2();
+ break;
+ case 3:
+ ChipLogProgress(chipTool, " ***** Test Step 3 : Get Holiday Schedule with HolidayIndex as 1\n");
+ if (ShouldSkip("DRLK.S.F0b && DRLK.S.C12.Rsp && DRLK.S.C12.Tx")) {
+ NextTest();
+ return;
+ }
+ err = TestGetHolidayScheduleWithHolidayIndexAs1_3();
+ break;
+ case 4:
+ ChipLogProgress(chipTool, " ***** Test Step 4 : Create Holiday schedule with invalid operating mode\n");
+ if (ShouldSkip("DRLK.S.C11.Rsp")) {
+ NextTest();
+ return;
+ }
+ err = TestCreateHolidayScheduleWithInvalidOperatingMode_4();
+ break;
+ case 5:
+ ChipLogProgress(chipTool, " ***** Test Step 5 : Get Holiday Schedule with Invalid HolidayIndex 15.\n");
+ if (ShouldSkip("DRLK.S.F0b && DRLK.S.C12.Rsp && DRLK.S.C12.Tx")) {
+ NextTest();
+ return;
+ }
+ err = TestGetHolidayScheduleWithInvalidHolidayIndex15_5();
+ break;
+ case 6:
+ ChipLogProgress(chipTool, " ***** Test Step 6 : Get Holiday Schedule with the Non-scheduled HolidayIndex\n");
+ if (ShouldSkip("DRLK.S.F0b && DRLK.S.C12.Rsp && DRLK.S.C12.Tx")) {
+ NextTest();
+ return;
+ }
+ err = TestGetHolidayScheduleWithTheNonScheduledHolidayIndex_6();
+ break;
+ case 7:
+ ChipLogProgress(chipTool, " ***** Test Step 7 : Clear Holiday schedule with 1 index\n");
+ if (ShouldSkip("DRLK.S.F0b && DRLK.S.C13.Rsp")) {
+ NextTest();
+ return;
+ }
+ err = TestClearHolidayScheduleWith1Index_7();
+ break;
+ case 8:
+ ChipLogProgress(chipTool, " ***** Test Step 8 : Make sure that holiday schedule was deleted\n");
+ if (ShouldSkip("DRLK.S.F0b && DRLK.S.C12.Rsp && DRLK.S.C12.Tx")) {
+ NextTest();
+ return;
+ }
+ err = TestMakeSureThatHolidayScheduleWasDeleted_8();
+ break;
+ case 9:
+ ChipLogProgress(chipTool, " ***** Test Step 9 : Cleanup the created user\n");
+ err = TestCleanupTheCreatedUser_9();
+ break;
+ }
+
+ if (CHIP_NO_ERROR != err) {
+ ChipLogError(chipTool, " ***** Test Failure: %s\n", chip::ErrorStr(err));
+ SetCommandExitStatus(err);
+ }
+ }
+
+ void OnStatusUpdate(const chip::app::StatusIB & status) override
+ {
+ switch (mTestIndex - 1) {
+ case 0:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ break;
+ case 1:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ break;
+ case 2:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ break;
+ case 3:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ break;
+ case 4:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), EMBER_ZCL_STATUS_INVALID_COMMAND));
+ break;
+ case 5:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ break;
+ case 6:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ break;
+ case 7:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ break;
+ case 8:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ break;
+ case 9:
+ VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
+ break;
+ }
+
+ // Go on to the next test.
+ ContinueOnChipMainThread(CHIP_NO_ERROR);
+ }
+
+ chip::System::Clock::Timeout GetWaitDuration() const override
+ {
+ return chip::System::Clock::Seconds16(mTimeout.ValueOr(kTimeoutInSeconds));
+ }
+
+private:
+ std::atomic_uint16_t mTestIndex;
+ const uint16_t mTestCount = 10;
+
+ chip::Optional<chip::NodeId> mNodeId;
+ chip::Optional<chip::CharSpan> mCluster;
+ chip::Optional<chip::EndpointId> mEndpoint;
+ chip::Optional<uint16_t> mTimeout;
+
+ CHIP_ERROR TestWaitForCommissionee_0()
+ {
+
+ chip::app::Clusters::DelayCommands::Commands::WaitForCommissionee::Type value;
+ value.nodeId = mNodeId.HasValue() ? mNodeId.Value() : 305414945ULL;
+ return WaitForCommissionee("alpha", value);
+ }
+ NSNumber * _Nonnull NumberOfHolidaySchedulesSupported;
+
+ CHIP_ERROR TestThReadsNumberOfHolidaySchedulesSupportedAndSavesForFutureUse_1()
+ {
+
+ MTRBaseDevice * device = GetDevice("alpha");
+ __auto_type * cluster = [[MTRBaseClusterDoorLock alloc] initWithDevice:device endpointID:@(1) queue:mCallbackQueue];
+ VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE);
+
+ [cluster readAttributeNumberOfHolidaySchedulesSupportedWithCompletion:^(
+ NSNumber * _Nullable value, NSError * _Nullable err) {
+ NSLog(@"TH reads NumberOfHoliday SchedulesSupported and saves for future use. Error: %@", err);
+
+ VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
+
+ VerifyOrReturn(CheckConstraintMinValue<uint8_t>("numberOfHolidaySchedulesSupported", [value unsignedCharValue], 0U));
+ VerifyOrReturn(CheckConstraintMaxValue<uint8_t>("numberOfHolidaySchedulesSupported", [value unsignedCharValue], 255U));
+ {
+ NumberOfHolidaySchedulesSupported = value;
+ }
+
+ NextTest();
+ }];
+
+ return CHIP_NO_ERROR;
+ }
+
+ CHIP_ERROR TestCreateHolidayScheduleWith1Index_2()
+ {
+
+ MTRBaseDevice * device = GetDevice("alpha");
+ __auto_type * cluster = [[MTRBaseClusterDoorLock alloc] initWithDevice:device endpointID:@(1) queue:mCallbackQueue];
+ VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE);
+
+ __auto_type * params = [[MTRDoorLockClusterSetHolidayScheduleParams alloc] init];
+ params.holidayIndex = [NSNumber numberWithUnsignedChar:1U];
+ params.localStartTime = [NSNumber numberWithUnsignedInt:20UL];
+ params.localEndTime = [NSNumber numberWithUnsignedInt:30UL];
+ params.operatingMode = [NSNumber numberWithUnsignedChar:0U];
+ [cluster setHolidayScheduleWithParams:params
+ completion:^(NSError * _Nullable err) {
+ NSLog(@"Create Holiday schedule with 1 index Error: %@", err);
+
+ VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
+
+ NextTest();
+ }];
+
+ return CHIP_NO_ERROR;
+ }
+
+ CHIP_ERROR TestGetHolidayScheduleWithHolidayIndexAs1_3()
+ {
+
+ MTRBaseDevice * device = GetDevice("alpha");
+ __auto_type * cluster = [[MTRBaseClusterDoorLock alloc] initWithDevice:device endpointID:@(1) queue:mCallbackQueue];
+ VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE);
+
+ __auto_type * params = [[MTRDoorLockClusterGetHolidayScheduleParams alloc] init];
+ params.holidayIndex = [NSNumber numberWithUnsignedChar:1U];
+ [cluster getHolidayScheduleWithParams:params
+ completion:^(MTRDoorLockClusterGetHolidayScheduleResponseParams * _Nullable values,
+ NSError * _Nullable err) {
+ NSLog(@"Get Holiday Schedule with HolidayIndex as 1 Error: %@", err);
+
+ VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
+
+ {
+ id actualValue = values.holidayIndex;
+ VerifyOrReturn(CheckValue("holidayIndex", actualValue, 1U));
+ }
+
+ {
+ id actualValue = values.status;
+ VerifyOrReturn(CheckValue("status", actualValue, 0U));
+ }
+
+ {
+ id actualValue = values.localStartTime;
+ VerifyOrReturn(CheckValue("localStartTime", actualValue, 20UL));
+ }
+
+ {
+ id actualValue = values.localEndTime;
+ VerifyOrReturn(CheckValue("localEndTime", actualValue, 30UL));
+ }
+
+ if (values.localEndTime != nil) {
+
+ VerifyOrReturn(CheckConstraintMinValue<uint32_t>(
+ "localEndTime", [values.localEndTime unsignedIntValue], 21UL));
+ }
+
+ {
+ id actualValue = values.operatingMode;
+ VerifyOrReturn(CheckValue("operatingMode", actualValue, 0U));
+ }
+
+ NextTest();
+ }];
+
+ return CHIP_NO_ERROR;
+ }
+
+ CHIP_ERROR TestCreateHolidayScheduleWithInvalidOperatingMode_4()
+ {
+
+ MTRBaseDevice * device = GetDevice("alpha");
+ __auto_type * cluster = [[MTRBaseClusterDoorLock alloc] initWithDevice:device endpointID:@(1) queue:mCallbackQueue];
+ VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE);
+
+ __auto_type * params = [[MTRDoorLockClusterSetHolidayScheduleParams alloc] init];
+ params.holidayIndex = [NSNumber numberWithUnsignedChar:1U];
+ params.localStartTime = [NSNumber numberWithUnsignedInt:20UL];
+ params.localEndTime = [NSNumber numberWithUnsignedInt:30UL];
+ params.operatingMode = [NSNumber numberWithUnsignedChar:5U];
+ [cluster setHolidayScheduleWithParams:params
+ completion:^(NSError * _Nullable err) {
+ NSLog(@"Create Holiday schedule with invalid operating mode Error: %@", err);
+
+ VerifyOrReturn(CheckValue("status",
+ err ? ([err.domain isEqualToString:MTRInteractionErrorDomain] ? err.code
+ : EMBER_ZCL_STATUS_FAILURE)
+ : 0,
+ EMBER_ZCL_STATUS_INVALID_COMMAND));
+ NextTest();
+ }];
+
+ return CHIP_NO_ERROR;
+ }
+
+ CHIP_ERROR TestGetHolidayScheduleWithInvalidHolidayIndex15_5()
+ {
+
+ MTRBaseDevice * device = GetDevice("alpha");
+ __auto_type * cluster = [[MTRBaseClusterDoorLock alloc] initWithDevice:device endpointID:@(1) queue:mCallbackQueue];
+ VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE);
+
+ __auto_type * params = [[MTRDoorLockClusterGetHolidayScheduleParams alloc] init];
+ params.holidayIndex = [NSNumber numberWithUnsignedChar:15U];
+ [cluster getHolidayScheduleWithParams:params
+ completion:^(MTRDoorLockClusterGetHolidayScheduleResponseParams * _Nullable values,
+ NSError * _Nullable err) {
+ NSLog(@"Get Holiday Schedule with Invalid HolidayIndex 15. Error: %@", err);
+
+ VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
+
+ {
+ id actualValue = values.holidayIndex;
+ VerifyOrReturn(CheckValue("holidayIndex", actualValue, 15U));
+ }
+
+ {
+ id actualValue = values.status;
+ VerifyOrReturn(CheckValue("status", actualValue, 133U));
+ }
+
+ NextTest();
+ }];
+
+ return CHIP_NO_ERROR;
+ }
+
+ CHIP_ERROR TestGetHolidayScheduleWithTheNonScheduledHolidayIndex_6()
+ {
+
+ MTRBaseDevice * device = GetDevice("alpha");
+ __auto_type * cluster = [[MTRBaseClusterDoorLock alloc] initWithDevice:device endpointID:@(1) queue:mCallbackQueue];
+ VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE);
+
+ __auto_type * params = [[MTRDoorLockClusterGetHolidayScheduleParams alloc] init];
+ params.holidayIndex = [NSNumber numberWithUnsignedChar:10U];
+ [cluster getHolidayScheduleWithParams:params
+ completion:^(MTRDoorLockClusterGetHolidayScheduleResponseParams * _Nullable values,
+ NSError * _Nullable err) {
+ NSLog(@"Get Holiday Schedule with the Non-scheduled HolidayIndex Error: %@", err);
+
+ VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
+
+ {
+ id actualValue = values.holidayIndex;
+ VerifyOrReturn(CheckValue("holidayIndex", actualValue, 10U));
+ }
+
+ {
+ id actualValue = values.status;
+ VerifyOrReturn(CheckValue("status", actualValue, 139U));
+ }
+
+ NextTest();
+ }];
+
+ return CHIP_NO_ERROR;
+ }
+
+ CHIP_ERROR TestClearHolidayScheduleWith1Index_7()
+ {
+
+ MTRBaseDevice * device = GetDevice("alpha");
+ __auto_type * cluster = [[MTRBaseClusterDoorLock alloc] initWithDevice:device endpointID:@(1) queue:mCallbackQueue];
+ VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE);
+
+ __auto_type * params = [[MTRDoorLockClusterClearHolidayScheduleParams alloc] init];
+ params.holidayIndex = [NSNumber numberWithUnsignedChar:1U];
+ [cluster clearHolidayScheduleWithParams:params
+ completion:^(NSError * _Nullable err) {
+ NSLog(@"Clear Holiday schedule with 1 index Error: %@", err);
+
+ VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
+
+ NextTest();
+ }];
+
+ return CHIP_NO_ERROR;
+ }
+
+ CHIP_ERROR TestMakeSureThatHolidayScheduleWasDeleted_8()
+ {
+
+ MTRBaseDevice * device = GetDevice("alpha");
+ __auto_type * cluster = [[MTRBaseClusterDoorLock alloc] initWithDevice:device endpointID:@(1) queue:mCallbackQueue];
+ VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE);
+
+ __auto_type * params = [[MTRDoorLockClusterGetHolidayScheduleParams alloc] init];
+ params.holidayIndex = [NSNumber numberWithUnsignedChar:1U];
+ [cluster getHolidayScheduleWithParams:params
+ completion:^(MTRDoorLockClusterGetHolidayScheduleResponseParams * _Nullable values,
+ NSError * _Nullable err) {
+ NSLog(@"Make sure that holiday schedule was deleted Error: %@", err);
+
+ VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
+
+ {
+ id actualValue = values.holidayIndex;
+ VerifyOrReturn(CheckValue("holidayIndex", actualValue, 1U));
+ }
+
+ {
+ id actualValue = values.status;
+ VerifyOrReturn(CheckValue("status", actualValue, 139U));
+ }
+
+ NextTest();
+ }];
+
+ return CHIP_NO_ERROR;
+ }
+
+ CHIP_ERROR TestCleanupTheCreatedUser_9()
+ {
+
+ MTRBaseDevice * device = GetDevice("alpha");
+ __auto_type * cluster = [[MTRBaseClusterDoorLock alloc] initWithDevice:device endpointID:@(1) queue:mCallbackQueue];
+ VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE);
+
+ __auto_type * params = [[MTRDoorLockClusterClearUserParams alloc] init];
+ params.userIndex = [NSNumber numberWithUnsignedShort:1U];
+ [cluster clearUserWithParams:params
+ completion:^(NSError * _Nullable err) {
+ NSLog(@"Cleanup the created user Error: %@", err);
+
+ VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
+
+ NextTest();
+ }];
+
+ return CHIP_NO_ERROR;
+ }
+};
+
class Test_TC_DRLK_2_7 : public TestCommandBridge {
public:
// NOLINTBEGIN(clang-analyzer-nullability.NullPassedToNonnull): Test constructor nullability not enforced
@@ -125503,8 +128766,10 @@
make_unique<Test_TC_ACL_1_1>(),
make_unique<Test_TC_ACL_2_1>(),
make_unique<Test_TC_ACL_2_2>(),
+ make_unique<Test_TC_ACL_2_3>(),
make_unique<Test_TC_BOOL_1_1>(),
make_unique<Test_TC_BOOL_2_1>(),
+ make_unique<Test_TC_BRBINFO_1_1>(),
make_unique<Test_TC_ACT_1_1>(),
make_unique<Test_TC_BIND_1_1>(),
make_unique<Test_TC_CC_1_1>(),
@@ -125566,6 +128831,7 @@
make_unique<Test_TC_APBSC_1_10>(),
make_unique<Test_TC_CONTENTLAUNCHER_1_11>(),
make_unique<Test_TC_ALOGIN_1_12>(),
+ make_unique<Test_TC_ALOGIN_12_1>(),
make_unique<Test_TC_LOWPOWER_2_1>(),
make_unique<Test_TC_KEYPADINPUT_3_2>(),
make_unique<Test_TC_KEYPADINPUT_3_3>(),
@@ -125575,6 +128841,7 @@
make_unique<Test_TC_MEDIAINPUT_3_11>(),
make_unique<Test_TC_MEDIAINPUT_3_12>(),
make_unique<Test_TC_MEDIAINPUT_3_13>(),
+ make_unique<Test_TC_WAKEONLAN_4_1>(),
make_unique<Test_TC_CHANNEL_5_1>(),
make_unique<Test_TC_CHANNEL_5_2>(),
make_unique<Test_TC_CHANNEL_5_3>(),
@@ -125689,6 +128956,7 @@
make_unique<Test_TC_DRLK_2_3>(),
make_unique<Test_TC_DRLK_2_4>(),
make_unique<Test_TC_DRLK_2_5>(),
+ make_unique<Test_TC_DRLK_2_6>(),
make_unique<Test_TC_DRLK_2_7>(),
make_unique<Test_TC_DRLK_2_9>(),
make_unique<TestGroupsCluster>(),