# Copyright (c) 2021 Project CHIP Authors
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
# Auto-generated scripts for harness use only, please review before automation. The endpoints and cluster names are currently set to default

name: 84.1.1. [TC-DESC-1.1] Global Attributes with DUT as Server

PICS:
    - DESC.S

config:
    nodeId: 0x12344321
    cluster: "Descriptor"
    endpoint: 0

tests:
    - label: "Wait for the commissioned device to be retrieved"
      cluster: "DelayCommands"
      command: "WaitForCommissionee"
      arguments:
          values:
              - name: "nodeId"
                value: nodeId

    - label: "Read the global attribute: ClusterRevision"
      PICS: DESC.S.Afffd
      command: "readAttribute"
      attribute: "ClusterRevision"
      response:
          value: 1
          constraints:
              type: int16u

    - label: "Read the global attribute: FeatureMap"
      PICS: DESC.S.Afffc
      command: "readAttribute"
      attribute: "FeatureMap"
      response:
          value: 0
          constraints:
              type: bitmap32

    - label: "Read the global attribute: AttributeList"
      PICS: DESC.S.Afffb
      command: "readAttribute"
      attribute: "AttributeList"
      response:
          constraints:
              type: list
              contains: [0, 1, 2, 3, 65528, 65529, 65530, 65531, 65532, 65533]

    #List values range check support https://github.com/project-chip/connectedhomeip/issues/26570
    - label:
          "TH reads AttributeList attribute from DUT. 1.The list SHALL NOT
          contain any additional values in the standard or scoped range:
          (0x0000_0000 - 0x0000_4FFF) and (0x0000_F000 - 0x0000_FFFE). 2.The
          list MAY contain values in the Manufacturer Extensible Identifier
          (MEI) range: (0xXXXX_0000 - 0xXXXX_4FFF), where XXXX is the allowed
          MEI range (0x0001 - 0xFFF1), these values SHALL be ignored. 3.The list
          SHALL NOT contain any values in the Test Vendor or invalid range:
          (0x0000_5000 - 0x0000_EFFF and 0x0000_FFFF), (0xXXXX_5000 -
          0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where XXXX is the
          allowed MEI range (0x0001 - 0xFFF1)"
      verification: |
          ./chip-tool descriptor read attribute-list 1 0

          Verify " AttributeList "contains  all mandatory attributes (values 0x0000,0x0001,0x0002,0x0003) and global attributes values (65528, 65529, 65530, 65531, 65532, 65533) on  the TH(Chip-tool) and below is the example log provided for raspi platform:

          [1676280023.477099][3892:3894] CHIP:TOO: Endpoint: 0 Cluster: 0x0000_001D Attribute 0x0000_FFFB DataVersion: 1306886868
          [1676280023.477181][3892:3894] CHIP:TOO:   AttributeList: 10 entries
          [1676280023.477223][3892:3894] CHIP:TOO:     [1]: 0
          [1676280023.477251][3892:3894] CHIP:TOO:     [2]: 1
          [1676280023.477269][3892:3894] CHIP:TOO:     [3]: 2
          [1676280023.477284][3892:3894] CHIP:TOO:     [4]: 3
          [1676280023.477298][3892:3894] CHIP:TOO:     [5]: 65528
          [1676280023.477313][3892:3894] CHIP:TOO:     [6]: 65529
          [1676280023.477327][3892:3894] CHIP:TOO:     [7]: 65530
          [1676280023.477342][3892:3894] CHIP:TOO:     [8]: 65531
          [1676280023.477356][3892:3894] CHIP:TOO:     [9]: 65532
          [1676280023.477370][3892:3894] CHIP:TOO:     [10]: 65533
      cluster: "LogCommands"
      command: "UserPrompt"
      PICS: PICS_USER_PROMPT && DESC.S.Afffb
      arguments:
          values:
              - name: "message"
                value: "Please enter 'y' for success"
              - name: "expectedValue"
                value: "y"

    - label:
          "TH reads EventList attribute from DUT. 1.The list MAY contain values
          in the Manufacturer Extensible Identifier (MEI) range: (0xXXXX_0000 -
          0xXXXX_00FF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1),
          these values SHALL be ignored. 2.The list SHALL NOT contain any values
          in the Test Vendor or invalid range: (0x0000_0100 - 0x0000_FFFF),
          (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 - 0xFFFF_FFFF), where
          XXXX is the allowed MEI range (0x0001 - 0xFFF1)"
      verification: |
          ./chip-tool descriptor read event-list 1 0

          Verify "EventList"  is empty on  the TH(Chip-tool) and below is the example log provided for raspi platform:
          [1676366852.531123][9747:9749] CHIP:DMG: }
          [1676366852.531291][9747:9749] CHIP:TOO: Endpoint: 0 Cluster: 0x0000_001D Attribute 0x0000_FFFA DataVersion: 2384113486
          [1676366852.531334][9747:9749] CHIP:TOO:   EventList: 0 entries
      cluster: "LogCommands"
      command: "UserPrompt"
      PICS: PICS_USER_PROMPT && DESC.S.Afffa
      arguments:
          values:
              - name: "message"
                value: "Please enter 'y' for success"
              - name: "expectedValue"
                value: "y"

    - label:
          "TH reads AcceptedCommandList attribute from DUT. 1.The list MAY
          contain values in the Manufacturer Extensible Identifier (MEI) range:
          (0xXXXX_0000 - 0xXXXX_00FF), where XXXX is the allowed MEI range
          (0x0001 - 0xFFF1), these values SHALL be ignored. 2.The list SHALL NOT
          contain any values in the Test Vendor or invalid range: (0x0000_0100 -
          0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 -
          0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)"
      verification: |
          ./chip-tool descriptor read accepted-command-list 1 0

          Verify "AcceptedCommandList" is empty on  the TH(Chip-tool) and below is the example log provided for raspi platform:


          [1649425400.031333][3493:3498] CHIP:TOO: Endpoint: 0 Cluster: 0x0000_001D Attribute 0x0000_FFF9 DataVersion: 3183189461
          [1649425400.031430][3493:3498] CHIP:TOO:   AcceptedCommandList: 0 entries
      cluster: "LogCommands"
      command: "UserPrompt"
      PICS: PICS_USER_PROMPT && DESC.S.Afff9
      arguments:
          values:
              - name: "message"
                value: "Please enter 'y' for success"
              - name: "expectedValue"
                value: "y"

    - label:
          "TH reads GeneratedCommandList attribute from DUT. 1.The list MAY
          contain values in the Manufacturer Extensible Identifier (MEI) range:
          (0xXXXX_0000 - 0xXXXX_00FF), where XXXX is the allowed MEI range
          (0x0001 - 0xFFF1), these values SHALL be ignored. 2.The list SHALL NOT
          contain any values in the Test Vendor or invalid range: (0x0000_0100 -
          0x0000_FFFF), (0xXXXX_0100 - 0xXXXX_FFFF) and (0xFFF1_0000 -
          0xFFFF_FFFF), where XXXX is the allowed MEI range (0x0001 - 0xFFF1)"
      verification: |
          ./chip-tool descriptor read generated-command-list 1 0

          Verify "GeneratedCommandList"  is empty on  the TH(Chip-tool) and below is the example log provided for raspi platform:


          [1649425614.161996][3509:3514] CHIP:TOO: Endpoint: 0 Cluster: 0x0000_001D Attribute 0x0000_FFF8 DataVersion: 3183189461
          [1649425614.162088][3509:3514] CHIP:TOO:   GeneratedCommandList: 0 entries
      cluster: "LogCommands"
      command: "UserPrompt"
      PICS: PICS_USER_PROMPT && DESC.S.Afff8
      arguments:
          values:
              - name: "message"
                value: "Please enter 'y' for success"
              - name: "expectedValue"
                value: "y"
