# 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

PICS:
    - MCORE.ROLE.COMMISSIONER

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

tests:
    - label: "Note"
      verification: |
          Chip-tool command used below are an example to verify the  DUT as client test cases. For certification test, we expect DUT should have a capability or way to run the equivalent command.
      disabled: true

    - 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 the Read Request Message for the data sent in the above command on TH(Reference app)log

          [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 groupsettings add-group grp1 0x0001

          ./chip-tool groupsettings add-keysets 0x0042 0 0x000000000021dfe0 hex:d0d1d2d3d4d5d6d7d8d9dadbdcdddedf

          ./chip-tool groupsettings bind-keyset 0x0001 0x0042

          ./chip-tool groupsettings show-groups

          ./chip-tool identify identify 0x0078 0xffffffffffff0001 1


          Verify Destination Node ID matches the GroupID on TH(Reference app)log :

          [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

          <<< [E:15304i M:15000] (G) Msg TX to 1:FFFFFFFFFFFF0001 [D5AE] --- Type 0001:08 (IM:InvokeCommandRequest)
          [1670395515.064662][14427:14429] CHIP:IN: (G) Sending msg 15000 to Multicast IPV6 address "UDP:[ff35:40:fd00::100:1]:5540"
          [1670395515.067533][14427:14429] CHIP:IN: Interface eth0 has a link local address
      disabled: true
