# 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: 3.1.2. [TC-IDM-1.2] Invoke Response Action from DUT to TH - [{DUT_Server}]

PICS:
    - MCORE.IDM.S

config:
    nodeId: 0x12344321
    cluster: "Basic Information"
    endpoint: 0

tests:
    - label:
          "TH sends the Invoke Request Message to the DUT with the path that
          indicates a specific endpoint that is unsupported."
      verification: |
          The cluster used in the below command is an example, User can use any supported chip cluster/attribute/command.

          ./chip-tool onoff on 1 20

          On TH(chip-tool), verify DUT responds as unsuppported endpoint  for the data sent in the above command

          [1655718065.882392][4587:4592] CHIP:DMG: Received Command Response Status for Endpoint=20 Cluster=0x0000_0006 Command=0x0000_0001 Status=0x7f
          [1655718065.882440][4587:4592] CHIP:TOO: Error: IM Error 0x0000057F: General error: 0x7f (UNSUPPORTED_ENDPOINT)
          [1655718065.882491][4587:4592] CHIP:DMG: ICR moving to [AwaitingDe]
      disabled: true

    - label:
          "TH sends the Invoke Request Message to the DUT with the path that
          indicates a specific cluster that is unsupported."
      verification: |
          The cluster used in the below command is an example, User can use any supported chip cluster/attribute/command.
          ./chip-tool any command-by-id 0x0003 0 1 1 2

          On TH(chip-tool), verify DUT responds as unsuppported cluster for the data sent in the above command

          [1655718144.692503][4602:4607] CHIP:DMG: Received Command Response Status for Endpoint=2 Cluster=0x0000_0003 Command=0x0000_0000 Status=0xc3
          [1655718144.692570][4602:4607] CHIP:TOO: Error: IM Error 0x000005C3: General error: 0xc3 (UNSUPPORTED_CLUSTER)
          [1655718144.692627][4602:4607] CHIP:DMG: ICR moving to [AwaitingDe]
      disabled: true

    - label:
          "TH sends the Invoke Request Message to the DUT with the path that
          indicates a specific command that is unsupported."
      verification: |
          The cluster used in the below command is an example, User can use any supported chip cluster/attribute/command.

           ./chip-tool any command-by-id 0x0003 3 1 1 0

          On TH(chip-tool), verify DUT responds as unsuppported command  for the data sent in the above command

          [1654076838.936184][13752:13757] CHIP:DMG: Received Command Response Status for Endpoint=0 Cluster=0x0000_0003 Command=0x0000_0003 Status=0x81
          [1654076838.936215][13752:13757] CHIP:TOO: Error: IM Error 0x00000581: General error: 0x81 (UNSUPPORTED_COMMAND)
          [1654076838.936258][13752:13757] CHIP:DMG: ICR moving to [AwaitingDe]
      disabled: true

    - label:
          "Setup the TH such that it should not have the privilege for the
          cluster in the path. TH sends the Invoke Request Message to the DUT
          with a valid CommandDataIB"
      verification: |
          The cluster used in the below command is an example, User can use any supported chip cluster/attribute/command.

          To Setup the TH(chip-tool) such that it should not have the privilege for the cluster in the path. , 1st we need to send below mentioned ACL command. Here by sending below mentioned ACL command giving only access for ACL cluster(31), So except ACL cluster command if user try to send any other command will get status as unsupported access

          ./chip-tool accesscontrol write acl '[{"fabricIndex": 1, "privilege": 5, "authMode": 2, "subjects":[1,112233], "targets": [{ "cluster":31, "endpoint":0, "deviceType":null }]}]' 1 0

          [1659419722.669629][1915:1920] CHIP:DMG: WriteResponseMessage =
          [1659419722.669657][1915:1920] CHIP:DMG: {
          [1659419722.669687][1915:1920] CHIP:DMG:         AttributeStatusIBs =
          [1659419722.669727][1915:1920] CHIP:DMG:         [
          [1659419722.669758][1915:1920] CHIP:DMG:                 AttributeStatusIB =
          [1659419722.669796][1915:1920] CHIP:DMG:                 {
          [1659419722.669833][1915:1920] CHIP:DMG:                         AttributePathIB =
          [1659419722.669871][1915:1920] CHIP:DMG:                         {
          [1659419722.669912][1915:1920] CHIP:DMG:                                 Endpoint = 0x0,
          [1659419722.669953][1915:1920] CHIP:DMG:                                 Cluster = 0x1f,
          [1659419722.669993][1915:1920] CHIP:DMG:                                 Attribute = 0x0000_0000,
          [1659419722.670034][1915:1920] CHIP:DMG:                         }
          [1659419722.670077][1915:1920] CHIP:DMG:
          [1659419722.670114][1915:1920] CHIP:DMG:                         StatusIB =
          [1659419722.670153][1915:1920] CHIP:DMG:                         {
          [1659419722.670191][1915:1920] CHIP:DMG:                                 status = 0x00 (SUCCESS),
          [1659419722.670229][1915:1920] CHIP:DMG:                         },
          [1659419722.670266][1915:1920] CHIP:DMG:
          [1659419722.670300][1915:1920] CHIP:DMG:                 },
          [1659419722.670343][1915:1920] CHIP:DMG:
          [1659419722.670373][1915:1920] CHIP:DMG:                 AttributeStatusIB =
          [1659419722.670405][1915:1920] CHIP:DMG:                 {
          [1659419722.670436][1915:1920] CHIP:DMG:                         AttributePathIB =
          [1659419722.670471][1915:1920] CHIP:DMG:                         {
          [1659419722.670510][1915:1920] CHIP:DMG:                                 Endpoint = 0x0,
          [1659419722.670550][1915:1920] CHIP:DMG:                                 Cluster = 0x1f,
          [1659419722.670590][1915:1920] CHIP:DMG:                                 Attribute = 0x0000_0000,
          [1659419722.670661][1915:1920] CHIP:DMG:                                 ListIndex = Null,
          [1659419722.670700][1915:1920] CHIP:DMG:                         }
          [1659419722.670740][1915:1920] CHIP:DMG:
          [1659419722.670776][1915:1920] CHIP:DMG:                         StatusIB =
          [1659419722.670813][1915:1920] CHIP:DMG:                         {
          [1659419722.670851][1915:1920] CHIP:DMG:                                 status = 0x00 (SUCCESS),
          [1659419722.670888][1915:1920] CHIP:DMG:                         },
          [1659419722.670925][1915:1920] CHIP:DMG:
          [1659419722.670958][1915:1920] CHIP:DMG:                 },
          [1659419722.670994][1915:1920] CHIP:DMG:
          [1659419722.671022][1915:1920] CHIP:DMG:         ],
          [1659419722.671062][1915:1920] CHIP:DMG:
          [1659419722.671092][1915:1920] CHIP:DMG:         InteractionModelRevision = 1
          [1659419722.671120][1915:1920] CHIP:DMG: }
          [1659419722.671244][1915:1920] CHIP:DMG: WriteClient moving to [AwaitingDe]
          [1659419722.671314][1915:1920] CHIP:EM: Sending Standalone Ack for MessageCounter:153124628 on



          ./chip-tool onoff on 1 1

          On TH(chip-tool), verify DUT  responds as UNSUPPORTED_ACCESS  for the data sent in the above command
          [1657869005.834700][2816:2821] CHIP:DMG: },
          [1657869005.834790][2816:2821] CHIP:DMG: Received Command Response Status for Endpoint=1 Cluster=0x0000_0006 Command=0x0000_0001 Status=0x7e
          [1657869005.834841][2816:2821] CHIP:TOO: Error: IM Error 0x0000057E: General error: 0x7e (UNSUPPORTED_ACCESS)
          [1657869005.834899][2816:2821] CHIP:DMG: ICR moving to [AwaitingDe]

          With the above command, we are overwriting the default privilege that chip-tool has as an admin. After this test step you need to  send below mentioned command to Grant access to all clusters again.

          ./chip-tool accesscontrol write acl '[{"fabricIndex": 1, "privilege": 5, "authMode":2, "subjects":[112233], "targets":null}]' 1 0
      disabled: true

    - label:
          "Setup the TH such that there is no accessing fabric TH sends the
          Invoke Request Message to the DUT with a valid and fabric-scoped
          CommandDataIB"
      verification: |
          The cluster used in the below command is an example, User can use any supported chip cluster/attribute/command.


          To Setup the TH(chip-tool) such that it should not have the privilege for the cluster in the path. , 1st we need to send below mentioned ACL command. Here by sending below mentioned ACL command giving only access for ACL cluster(31), So except ACL cluster command if try to send any other command will get status as unsupported access

          ./chip-tool accesscontrol write acl '[{"fabricIndex": 1, "privilege": 5, "authMode": 2, "subjects":[1,112233], "targets": [{ "cluster":31, "endpoint":0, "deviceType":null }]}]' 1 0

          [1659419722.669629][1915:1920] CHIP:DMG: WriteResponseMessage =
          [1659419722.669657][1915:1920] CHIP:DMG: {
          [1659419722.669687][1915:1920] CHIP:DMG:         AttributeStatusIBs =
          [1659419722.669727][1915:1920] CHIP:DMG:         [
          [1659419722.669758][1915:1920] CHIP:DMG:                 AttributeStatusIB =
          [1659419722.669796][1915:1920] CHIP:DMG:                 {
          [1659419722.669833][1915:1920] CHIP:DMG:                         AttributePathIB =
          [1659419722.669871][1915:1920] CHIP:DMG:                         {
          [1659419722.669912][1915:1920] CHIP:DMG:                                 Endpoint = 0x0,
          [1659419722.669953][1915:1920] CHIP:DMG:                                 Cluster = 0x1f,
          [1659419722.669993][1915:1920] CHIP:DMG:                                 Attribute = 0x0000_0000,
          [1659419722.670034][1915:1920] CHIP:DMG:                         }
          [1659419722.670077][1915:1920] CHIP:DMG:
          [1659419722.670114][1915:1920] CHIP:DMG:                         StatusIB =
          [1659419722.670153][1915:1920] CHIP:DMG:                         {
          [1659419722.670191][1915:1920] CHIP:DMG:                                 status = 0x00 (SUCCESS),
          [1659419722.670229][1915:1920] CHIP:DMG:                         },
          [1659419722.670266][1915:1920] CHIP:DMG:
          [1659419722.670300][1915:1920] CHIP:DMG:                 },
          [1659419722.670343][1915:1920] CHIP:DMG:
          [1659419722.670373][1915:1920] CHIP:DMG:                 AttributeStatusIB =
          [1659419722.670405][1915:1920] CHIP:DMG:                 {
          [1659419722.670436][1915:1920] CHIP:DMG:                         AttributePathIB =
          [1659419722.670471][1915:1920] CHIP:DMG:                         {
          [1659419722.670510][1915:1920] CHIP:DMG:                                 Endpoint = 0x0,
          [1659419722.670550][1915:1920] CHIP:DMG:                                 Cluster = 0x1f,
          [1659419722.670590][1915:1920] CHIP:DMG:                                 Attribute = 0x0000_0000,
          [1659419722.670661][1915:1920] CHIP:DMG:                                 ListIndex = Null,
          [1659419722.670700][1915:1920] CHIP:DMG:                         }
          [1659419722.670740][1915:1920] CHIP:DMG:
          [1659419722.670776][1915:1920] CHIP:DMG:                         StatusIB =
          [1659419722.670813][1915:1920] CHIP:DMG:                         {
          [1659419722.670851][1915:1920] CHIP:DMG:                                 status = 0x00 (SUCCESS),
          [1659419722.670888][1915:1920] CHIP:DMG:                         },
          [1659419722.670925][1915:1920] CHIP:DMG:
          [1659419722.670958][1915:1920] CHIP:DMG:                 },
          [1659419722.670994][1915:1920] CHIP:DMG:
          [1659419722.671022][1915:1920] CHIP:DMG:         ],
          [1659419722.671062][1915:1920] CHIP:DMG:
          [1659419722.671092][1915:1920] CHIP:DMG:         InteractionModelRevision = 1
          [1659419722.671120][1915:1920] CHIP:DMG: }
          [1659419722.671244][1915:1920] CHIP:DMG: WriteClient moving to [AwaitingDe]
          [1659419722.671314][1915:1920] CHIP:EM: Sending Standalone Ack for MessageCounter:153124628 on


           ./chip-tool  generalcommissioning commissioning-complete  1 0

          On TH(chip-tool), verify DUT  responds as UNSUPPORTED_ACCESS  for the data sent in the above command

          [1659420197.313287][1960:1965] CHIP:DMG: },
          [1659420197.313357][1960:1965] CHIP:DMG: Received Command Response Status for Endpoint=0 Cluster=0x0000_0030 Command=0x0000_0004 Status=0x7e
          [1659420197.313397][1960:1965] CHIP:TOO: Error: IM Error 0x0000057E: General error: 0x7e (UNSUPPORTED_ACCESS)
          [1659420197.313441][1960:1965] CHIP:DMG: ICR moving to [AwaitingDe]
          [1659420197.313505][1960:1965] CHIP:EM: Sending Standalone Ack for MessageCounter:66191391 on exchange 52639i


          With the above command, we are overwriting the default privilege that chip-tool has as an admin. After this test step you need to  send below mentioned command to Grant access to all clusters again.

          ./chip-tool accesscontrol write acl '[{"fabricIndex": 1, "privilege": 5, "authMode":2, "subjects":[112233], "targets":null}]' 1 0
      disabled: true

    - label:
          "(OPTIONAL) TH sends the Invoke Request Message to the DUT with the
          command which requires a data response to be sent back."
      verification: |
          The cluster used in the below command is an example, User can use any supported chip cluster/attribute/command.

           ./chip-tool generalcommissioning arm-fail-safe  1000 1  1 0

          On TH(chip-tool),  Verify  DUT generates an InvokeResponseIB with a valid CommandDataIB and
          sends it to the TH for the data sent in the above command

          [1657091692.258118][5248:5253] CHIP:DMG: InvokeResponseMessage =
          [1657091692.258154][5248:5253] CHIP:DMG: {
          [1657091692.258189][5248:5253] CHIP:DMG:         suppressResponse = false,
          [1657091692.258233][5248:5253] CHIP:DMG:         InvokeResponseIBs =
          [1657091692.258280][5248:5253] CHIP:DMG:         [
          [1657091692.258315][5248:5253] CHIP:DMG:                 InvokeResponseIB =
          [1657091692.258362][5248:5253] CHIP:DMG:                 {
          [1657091692.258400][5248:5253] CHIP:DMG:                         CommandDataIB =
          [1657091692.258448][5248:5253] CHIP:DMG:                         {
          [1657091692.258492][5248:5253] CHIP:DMG:                                 CommandPathIB =
          [1657091692.258540][5248:5253] CHIP:DMG:                                 {
          [1657091692.258589][5248:5253] CHIP:DMG:                                         EndpointId = 0x0,
          [1657091692.258641][5248:5253] CHIP:DMG:                                         ClusterId = 0x30,
          [1657091692.258692][5248:5253] CHIP:DMG:                                         CommandId = 0x1,
          [1657091692.258739][5248:5253] CHIP:DMG:                                 },
          [1657091692.258790][5248:5253] CHIP:DMG:
          [1657091692.258834][5248:5253] CHIP:DMG:                                 CommandFields =
          [1657091692.258886][5248:5253] CHIP:DMG:                                 {
          [1657091692.258958][5248:5253] CHIP:DMG:                                         0x0 = 0,
          [1657091692.259011][5248:5253] CHIP:DMG:                                         0x1 = "",
          [1657091692.259061][5248:5253] CHIP:DMG:                                 },
          [1657091692.259107][5248:5253] CHIP:DMG:                         },
          [1657091692.259162][5248:5253] CHIP:DMG:
          [1657091692.259202][5248:5253] CHIP:DMG:                 },
          [1657091692.259246][5248:5253] CHIP:DMG:
          [1657091692.259280][5248:5253] CHIP:DMG:         ],
          [1657091692.259323][5248:5253] CHIP:DMG:
          [1657091692.259358][5248:5253] CHIP:DMG:         InteractionModelRevision = 1
          [1657091692.259392][5248:5253] CHIP:DMG: },
          [1657091692.259477][5248:5253] CHIP:DMG: Received Command Response Data, Endpoint=0 Cluster=0x0000_0030 Command=0x0000_0001
          [1657091692.259539][5248:5253] CHIP:TOO: Endpoint: 0 Cluster: 0x0000_0030 Command 0x0000_0001
          [1657091692.259610][5248:5253] CHIP:TOO:   ArmFailSafeResponse: {
          [1657091692.259656][5248:5253] CHIP:TOO:     errorCode: 0
          [1657091692.259690][5248:5253] CHIP:TOO:     debugText:
          [1657091692.259722][5248:5253] CHIP:TOO:    }
          [1657091692.259775][5248:5253] CHIP:DMG: ICR moving to [AwaitingDe]
          [1657091692.259841][5248:5253] CHIP:EM: Sending Standalone Ack for MessageCounter:215437814 on exchange 22331i
      disabled: true

    - label:
          "TH sends the Invoke Request Message to the DUT with a valid
          CommandDataIB and SuppressResponse set to True"
      verification: |
          Out of Scope for V1.0
          https://github.com/project-chip/connectedhomeip/issues/8043
      disabled: true

    - label:
          "TH sends a Invoke Request Message to the DUT with the TimedRequest
          set as TRUE.(There should be no previous Timed Invoke action.)"
      verification: |
          The cluster used in the below command is an example, User can use any supported chip cluster/attribute/command.


          To Setup the TH(chip-tool) such that it should not have the privilege for the cluster in the path. , 1st we need to send below mentioned ACL command. Here by sending below mentioned ACL command giving only access for ACL cluster(31), So except ACL cluster command if try to send any other command will get status as unsupported access

          ./chip-tool accesscontrol write acl '[{"fabricIndex": 1, "privilege": 5, "authMode": 2, "subjects":[1,112233], "targets": [{ "cluster":31, "endpoint":0, "deviceType":null }]}]' 1 0

          [1659419722.669629][1915:1920] CHIP:DMG: WriteResponseMessage =
          [1659419722.669657][1915:1920] CHIP:DMG: {
          [1659419722.669687][1915:1920] CHIP:DMG:         AttributeStatusIBs =
          [1659419722.669727][1915:1920] CHIP:DMG:         [
          [1659419722.669758][1915:1920] CHIP:DMG:                 AttributeStatusIB =
          [1659419722.669796][1915:1920] CHIP:DMG:                 {
          [1659419722.669833][1915:1920] CHIP:DMG:                         AttributePathIB =
          [1659419722.669871][1915:1920] CHIP:DMG:                         {
          [1659419722.669912][1915:1920] CHIP:DMG:                                 Endpoint = 0x0,
          [1659419722.669953][1915:1920] CHIP:DMG:                                 Cluster = 0x1f,
          [1659419722.669993][1915:1920] CHIP:DMG:                                 Attribute = 0x0000_0000,
          [1659419722.670034][1915:1920] CHIP:DMG:                         }
          [1659419722.670077][1915:1920] CHIP:DMG:
          [1659419722.670114][1915:1920] CHIP:DMG:                         StatusIB =
          [1659419722.670153][1915:1920] CHIP:DMG:                         {
          [1659419722.670191][1915:1920] CHIP:DMG:                                 status = 0x00 (SUCCESS),
          [1659419722.670229][1915:1920] CHIP:DMG:                         },
          [1659419722.670266][1915:1920] CHIP:DMG:
          [1659419722.670300][1915:1920] CHIP:DMG:                 },
          [1659419722.670343][1915:1920] CHIP:DMG:
          [1659419722.670373][1915:1920] CHIP:DMG:                 AttributeStatusIB =
          [1659419722.670405][1915:1920] CHIP:DMG:                 {
          [1659419722.670436][1915:1920] CHIP:DMG:                         AttributePathIB =
          [1659419722.670471][1915:1920] CHIP:DMG:                         {
          [1659419722.670510][1915:1920] CHIP:DMG:                                 Endpoint = 0x0,
          [1659419722.670550][1915:1920] CHIP:DMG:                                 Cluster = 0x1f,
          [1659419722.670590][1915:1920] CHIP:DMG:                                 Attribute = 0x0000_0000,
          [1659419722.670661][1915:1920] CHIP:DMG:                                 ListIndex = Null,
          [1659419722.670700][1915:1920] CHIP:DMG:                         }
          [1659419722.670740][1915:1920] CHIP:DMG:
          [1659419722.670776][1915:1920] CHIP:DMG:                         StatusIB =
          [1659419722.670813][1915:1920] CHIP:DMG:                         {
          [1659419722.670851][1915:1920] CHIP:DMG:                                 status = 0x00 (SUCCESS),
          [1659419722.670888][1915:1920] CHIP:DMG:                         },
          [1659419722.670925][1915:1920] CHIP:DMG:
          [1659419722.670958][1915:1920] CHIP:DMG:                 },
          [1659419722.670994][1915:1920] CHIP:DMG:
          [1659419722.671022][1915:1920] CHIP:DMG:         ],
          [1659419722.671062][1915:1920] CHIP:DMG:
          [1659419722.671092][1915:1920] CHIP:DMG:         InteractionModelRevision = 1
          [1659419722.671120][1915:1920] CHIP:DMG: }
          [1659419722.671244][1915:1920] CHIP:DMG: WriteClient moving to [AwaitingDe]
          [1659419722.671314][1915:1920] CHIP:EM: Sending Standalone Ack for MessageCounter:153124628 on


           ./chip-tool onoff on 1 1 --timedInteractionTimeoutMs 100

          On TH(chip-tool), verify DUT  responds as UNSUPPORTED_ACCESS  for the data sent in the above command

          [1659422136.353455][2014:2019] CHIP:DMG:
          [1659422136.353482][2014:2019] CHIP:DMG:         InteractionModelRevision = 1
          [1659422136.353510][2014:2019] CHIP:DMG: },
          [1659422136.353575][2014:2019] CHIP:DMG: Received Command Response Status for Endpoint=1 Cluster=0x0000_0006 Command=0x0000_0001 Status=0x7e
          [1659422136.353612][2014:2019] CHIP:TOO: Error: IM Error 0x0000057E: General error: 0x7e (UNSUPPORTED_ACCESS)
          [1659422136.353653][2014:2019] CHIP:DMG: ICR moving to [AwaitingDe]
          [1659422136.353715][2014:2019] CHIP:EM: Sending Standalone Ack for MessageCounter:11493125 on exchange 55447i



          With the above command, we are overwriting the default privilege that chip-tool has as an admin. After this test step you need to  send below mentioned command to Grant access to all clusters again.

          ./chip-tool accesscontrol write acl '[{"fabricIndex": 1, "privilege": 5, "authMode":2, "subjects":[112233], "targets":null}]' 1 0
      disabled: true

    - label:
          "TH sends Invoke Request Message to the DUT with the command in the
          path that requires a Timed Invoke transaction to invoke and this
          action is not part of a Timed Invoke transaction"
      verification: |
          The cluster used in the below command is an example, User can use any supported chip cluster/attribute/command.

          ./chip-tool administratorcommissioning open-basic-commissioning-window 500 1 0

          On TH(chip-tool),  verify DUT responds as NEEDS_TIMED_INTERACTION for the data sent in the above command

          [1654077001.606235][13788:13793] CHIP:DMG: Received Command Response Status for Endpoint=0 Cluster=0x0000_003C Command=0x0000_0001 Status=0xc6
          [1654077001.606268][13788:13793] CHIP:TOO: Error: IM Error 0x000005C6: General error: 0xc6 (NEEDS_TIMED_INTERACTION)
          [1654077001.606311][13788:13793] CHIP:DMG: ICR moving to [AwaitingDe]
      disabled: true
