# 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.

name: 95.1.1. [TC-ULABEL-1.1] Global Attributes with DUT as Server

PICS:
    - ULABEL.S

config:
    nodeId: 0x12344321
    cluster: "User Label"
    endpoint: 1

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: ULABEL.S.Afffd
      command: "readAttribute"
      attribute: "ClusterRevision"
      response:
          value: 1
          constraints:
              type: int16u

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

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

    #List values range check support https://github.com/project-chip/connectedhomeip/issues/26570
    - label:
          "Read the global attribute: AttributeList. 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 userlabel read attribute-list 1 0

          Verify "AttributeList"  contains a list of mandatory attributes (value 0) and  global attributes (65528, 65529, 65530, 65531, 65532, 65533) on the TH(Chip-tool) Log:

          [1676293294.573680][3554:3556] CHIP:TOO: Endpoint: 0 Cluster: 0x0000_0041 Attribute 0x0000_FFFB DataVersion: 3959145955
          [1676293294.573778][3554:3556] CHIP:TOO:   AttributeList: 7 entries
          [1676293294.573809][3554:3556] CHIP:TOO:     [1]: 0
          [1676293294.573834][3554:3556] CHIP:TOO:     [2]: 65528
          [1676293294.573859][3554:3556] CHIP:TOO:     [3]: 65529
          [1676293294.573889][3554:3556] CHIP:TOO:     [4]: 65530
          [1676293294.573940][3554:3556] CHIP:TOO:     [5]: 65531
          [1676293294.573965][3554:3556] CHIP:TOO:     [6]: 65532
          [1676293294.573994][3554:3556] CHIP:TOO:     [7]: 65533
          [1676293294.574170][3554:3556] CHIP:EM: <<< [E:29683i M:71170844 (Ack:159730489)] (S) Msg TX to 1:0000000
      cluster: "LogCommands"
      command: "UserPrompt"
      PICS: PICS_USER_PROMPT && ULABEL.S.Afffb
      arguments:
          values:
              - name: "message"
                value: "Please enter 'y' for success"
              - name: "expectedValue"
                value: "y"

    - label:
          "Read the global attribute: EventList. 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 userlabel read event-list 1 0

          Verify "EventList" contains a list of supported events,  for this cluster the list SHALL be empty(0 entries) on the TH(Chip-tool) Log:

          1676373264.278073][11583:11585] CHIP:DMG: }
          [1676373264.278133][11583:11585] CHIP:TOO: Endpoint: 0 Cluster: 0x0000_0041 Attribute 0x0000_FFFA DataVersion: 916074662
          [1676373264.278155][11583:11585] CHIP:TOO:   EventList: 0 entries
      cluster: "LogCommands"
      command: "UserPrompt"
      PICS: PICS_USER_PROMPT && ULABEL.S.Afffa
      arguments:
          values:
              - name: "message"
                value: "Please enter 'y' for success"
              - name: "expectedValue"
                value: "y"

    - label:
          "Read the global attribute: AcceptedCommandList. 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 userlabel read accepted-command-list 1 0

          Verify "AcceptedCommandList" contains a list of supported commands, Also verify that the DUT response with an empty list (0 entries) if there is no accepted command on the TH(Chip-tool) Log:

          [1652851830.120011][2420:2425] CHIP:TOO: Endpoint: 0 Cluster: 0x0000_0041 Attribute 0x0000_FFF9 DataVersion: 3783457095
          [1652851830.120100][2420:2425] CHIP:TOO:   AcceptedCommandList: 0 entries
          [1652851830.120217][2420:2425] CHIP:EM: Sending Standalone Ack for MessageCounter:11833674 on exchange 50545i
      cluster: "LogCommands"
      command: "UserPrompt"
      PICS: PICS_USER_PROMPT && ULABEL.S.Afff9
      arguments:
          values:
              - name: "message"
                value: "Please enter 'y' for success"
              - name: "expectedValue"
                value: "y"

    - label:
          "Read the global attribute: GeneratedCommandList. 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 userlabel read generated-command-list 1 0

          Verify "GeneratedCommandList" contains a list of supported commands, Also verify that the DUT response with an empty list (0 entries) if there is no generated command on the TH(Chip-tool) Log:

          [1652851867.076694][2427:2432] CHIP:TOO: Endpoint: 0 Cluster: 0x0000_0041 Attribute 0x0000_FFF8 DataVersion: 3783457095
          [1652851867.076783][2427:2432] CHIP:TOO:   GeneratedCommandList: 0 entries
          [1652851867.076907][2427:2432] CHIP:EM: Sending Standalone Ack for MessageCounter:16707612 on exchange 9749i
      cluster: "LogCommands"
      command: "UserPrompt"
      PICS: PICS_USER_PROMPT && ULABEL.S.Afff8
      arguments:
          values:
              - name: "message"
                value: "Please enter 'y' for success"
              - name: "expectedValue"
                value: "y"
