# 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


          Verify the Multicast address follows the format "FF35:0040:FD<Fabric ID>00:<Group ID> and UDP port is 5540   on DUT(chip-tool)log

          <<< [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
