# 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: 116.1.1. [TC-BIND-1.1] Global Attributes with DUT as Server

PICS:
    - BIND.S

config:
    nodeId: 0x12344321
    cluster: "Binding"
    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 ClusterRevision from DUT"
      PICS: BIND.S.Afffd
      command: "readAttribute"
      attribute: "ClusterRevision"
      response:
          value: 1
          constraints:
              type: int16u

    - label: "TH reads the FeatureMap from DUT"
      PICS: BIND.S.Afffc
      command: "readAttribute"
      attribute: "FeatureMap"
      response:
          value: 0
          constraints:
              type: bitmap32

    - label: "TH reads AttributeList from DUT"
      PICS: BIND.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:
          "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 binding read attribute-list 1 1

          Verify " AttributeList "should include mandatory attributes (value 0x0000)  and  global attributes  [ 65528, 65529,65530,65531,65532,65533 ] on TH(Chip-tool) Log
          Below is the example value which is observed in the RPI platform the value may be differ based on the dut implementation.

          [1676272454.138299][22525:22527] CHIP:TOO: Endpoint: 1 Cluster: 0x0000_001E Attribute 0x0000_FFFB DataVersion: 422125638
          [1676272454.138321][22525:22527] CHIP:TOO:   AttributeList: 7 entries
          [1676272454.138327][22525:22527] CHIP:TOO:     [1]: 0
          [1676272454.138332][22525:22527] CHIP:TOO:     [2]: 65528
          [1676272454.138337][22525:22527] CHIP:TOO:     [3]: 65529
          [1676272454.138341][22525:22527] CHIP:TOO:     [4]: 65530
          [1676272454.138345][22525:22527] CHIP:TOO:     [5]: 65531
          [1676272454.138350][22525:22527] CHIP:TOO:     [6]: 65532
          [1676272454.138354][22525:22527] CHIP:TOO:     [7]: 65533
      cluster: "LogCommands"
      command: "UserPrompt"
      PICS: PICS_USER_PROMPT && BIND.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 binding  read  event-list 1 1

          Verify "  EventList attribute " consists the list of supported events,  which for this cluster should be an empty list on the TH(Chip-tool) Log:

          [1676456961.540195][24182:24184] CHIP:TOO: Endpoint: 1 Cluster: 0x0000_001E Attribute 0x0000_FFFA DataVersion: 2461106731
          [1676456961.540229][24182:24184] CHIP:TOO:   EventList: 0 entries
          [1676456961.540302][24182:24184] CHIP:EM: <<< [E:6972i S:40230 M:131899248 (Ack:28190068)] (S) Msg TX to 1:0000000000000001 [110F] --- Type 0000:10 (SecureChannel:StandaloneAck)
          [1676456961.540320][24182:24184] CHIP:IN: (S) Sending msg 131899248 on secure session with LSID: 40230
      cluster: "LogCommands"
      command: "UserPrompt"
      PICS: PICS_USER_PROMPT && BIND.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 binding read accepted-command-list 1 1

          Verify "AcceptedCommandList " empty on the TH(Chip-tool) and Below is the example value which is observed in the RPI platform the value may be differ based on the dut implementation.

          [1653560851.890988][3451:3456] CHIP:TOO: Endpoint: 0 Cluster: 0x0000_001E Attribute 0x0000_FFF9 DataVersion: 2519252823
          [1653560851.891077][3451:3456] CHIP:TOO:   AcceptedCommandList: 0 entries
      cluster: "LogCommands"
      command: "UserPrompt"
      PICS: PICS_USER_PROMPT && BIND.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 binding read generated-command-list 1 1

          Verify "GeneratedCommandList " empty on  the TH(Chip-tool) Log and Below is the example value which is observed in the RPI platform the value may be differ based on the dut implementation.

          [1653560872.884952][3458:3463] CHIP:TOO: Endpoint: 0 Cluster: 0x0000_001E Attribute 0x0000_FFF8 DataVersion: 2519252823
          [1653560872.885073][3458:3463] CHIP:TOO:   GeneratedCommandList: 0 entries
      cluster: "LogCommands"
      command: "UserPrompt"
      PICS: PICS_USER_PROMPT && BIND.S.Afff8
      arguments:
          values:
              - name: "message"
                value: "Please enter 'y' for success"
              - name: "expectedValue"
                value: "y"
