# 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: 19.1.3. [TC-SC-5.3] Sending a group message - DUT to TH

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

tests:
    - label: "Precondition"
      verification: |
          DUT and TH are commissioned.

          DUT and TH are part of a common group. - Run TC-SC-6.1 to establish this precondition.
      disabled: true

    - label: "TH should have the ACL entry with the AuthMode as Group by DUT"
      verification: |
          ./chip-tool accesscontrol read  acl 1 0

          verify On TH(Reference app) receives the right Read Request Message for the data sent in the above command

          [1653571830.010685][3949:3949] CHIP:IM: Received Read request
          [1653571830.010772][3949:3949] CHIP:DMG: ReadRequestMessage =
          [1653571830.010822][3949:3949] CHIP:DMG: {
          [1653571830.010863][3949:3949] CHIP:DMG:        AttributePathIBs =
          [1653571830.010911][3949:3949] CHIP:DMG:        [
          [1653571830.010957][3949:3949] CHIP:DMG:                AttributePathIB =
          [1653571830.011020][3949:3949] CHIP:DMG:                {
          [1653571830.011072][3949:3949] CHIP:DMG:                        Endpoint = 0x0,
          [1653571830.011132][3949:3949] CHIP:DMG:                        Cluster = 0x1f,
          [1653571830.011191][3949:3949] CHIP:DMG:                        Attribute = 0x0000_0000,
          [1653571830.011246][3949:3949] CHIP:DMG:                }
          [1653571830.011299][3949:3949] CHIP:DMG:
          [1653571830.011350][3949:3949] CHIP:DMG:        ],
          [1653571830.011401][3949:3949] CHIP:DMG:
          [1653571830.011451][3949:3949] CHIP:DMG:        isFabricFiltered = true,
          [1653571830.011499][3949:3949] CHIP:DMG:        InteractionModelRevision = 1
          [1653571830.011543][3949:3949] CHIP:DMG: },
          [1653571830.011711][3949:3949] CHIP:DMG: IM RH moving to [GeneratingReports]
          [1653571830.011855][3949:3949] CHIP:DMG: Building Reports for ReadHandler with LastReportGeneration = 0 DirtyGeneration = 0
          [1653571830.011907][3949:3949] CHIP:DMG: <RE:Run> Cluster 1f, Attribute 0 is dirty
          [1653571830.011947][3949:3949] CHIP:DMG: Reading attribute: Cluster=0x0000_001F Endpoint=0 AttributeId=0x0000_0000 (expanded=0)
          [1653571830.011995][3949:3949] CHIP:DMG: AccessControl: checking f=1 a=c s=0x000000000001B669 t= c=0x0000_001F e=0 p=a
          [1653571830.012053][3949:3949] CHIP:DMG: AccessControl: allowed
      disabled: true

    - label:
          "DUT operator initiates transmission of multicast message to TH (by
          interacting with DUT)."
      verification: |
          ./chip-tool identify identify 0x0078 0xffffffffffff0001 1


          verify On TH(Reference app) receives the right Read Request Message for the data sent in the above command

          [1657785422.721911][2083:2083] CHIP:EM: Received Groupcast Message with GroupId of 1
          [1657785422.721988][2083:2083] CHIP:EM: Handling via exchange: 53995r, Delegate: 0xaaaac81b1430
          [1657785422.722098][2083:2083] CHIP:DMG: InvokeRequestMessage =
          [1657785422.722161][2083:2083] CHIP:DMG: {
          [1657785422.722220][2083:2083] CHIP:DMG:        suppressResponse = false,
          [1657785422.722317][2083:2083] CHIP:DMG:        timedRequest = false,
          [1657785422.722379][2083:2083] CHIP:DMG:        InvokeRequests =
          [1657785422.722475][2083:2083] CHIP:DMG:        [
          [1657785422.722536][2083:2083] CHIP:DMG:                CommandDataIB =
          [1657785422.722636][2083:2083] CHIP:DMG:                {
          [1657785422.722726][2083:2083] CHIP:DMG:                        CommandPathIB =
          [1657785422.722834][2083:2083] CHIP:DMG:                        {
          [1657785422.722913][2083:2083] CHIP:DMG:                                ClusterId = 0x3,
          [1657785422.723011][2083:2083] CHIP:DMG:                                CommandId = 0x0,
          [1657785422.723095][2083:2083] CHIP:DMG:                        },
          [1657785422.723173][2083:2083] CHIP:DMG:
          [1657785422.723242][2083:2083] CHIP:DMG:                        CommandFields =
          [1657785422.723318][2083:2083] CHIP:DMG:                        {
          [1657785422.723395][2083:2083] CHIP:DMG:                                0x0 = 120,
          [1657785422.723483][2083:2083] CHIP:DMG:                        },
          [1657785422.723555][2083:2083] CHIP:DMG:                },
          [1657785422.723627][2083:2083] CHIP:DMG:
          [1657785422.723685][2083:2083] CHIP:DMG:        ],
          [1657785422.723756][2083:2083] CHIP:DMG:
          [1657785422.723814][2083:2083] CHIP:DMG:        InteractionModelRevision = 1
          [1657785422.723872][2083:2083] CHIP:DMG: },
          [1657785422.723988][2083:2083] CHIP:DMG: Received group command for Group=1 Cluster=0x0000_0003 Command=0x0000_0000
          [1657785422.724688][2083:2083] CHIP:DMG: Processing group command for Endpoint=1 Cluster=0x0000_0003 Command=0x0000_0000
          [1657785422.724770][2083:2083] CHIP:DMG: AccessControl: checking f=1 a=g s=0xFFFFFFFFFFFF0001 t= c=0x0000_0003 e=1 p=m
          [1657785422.724846][2083:2083] CHIP:DMG: AccessControl: allowed
          [1657785422.724929][2083:2083] CHIP:DMG: Endpoint 1, Cluster 0x0000_0003 update version to 435c9140
      disabled: true
