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

          ./chip-tool onoff on 1 20

          On TH(chip-tool), verify DUT responsds 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.

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

          On TH(chip-tool), verify DUT responsds 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.

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

          On TH(chip-tool), verify DUT responsds 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.


          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
          On TH(chip-tool), verify DUT  responsds 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.


          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  responsds 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.
          sudo ./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.


          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 identify cluster(3), So except identify 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  responsds 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: |
          As in the previous step, we enabled accesscontrol to a specific cluster, we need to remove the accesscontrol using below command.
          As the EP used here is an example, user needs to provide the endpoint id, which they use.



          The cluster used in the below command is an example, User can use any supported chip cluster.

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

          On TH(chip-tool),  verify DUT responsds 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
