# 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.3.2. [TC-DGSW-3.2] Commands Generated [{DUT_Client}]

PICS:
    - DGSW.C

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

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

    - label: "Commission TH to DUT"
      verification: |

      disabled: true

    - label: "DUT sends ResetWatermarks to TH."
      PICS: DGSW.C.C00.Tx
      verification: |
          ./chip-tool softwarediagnostics reset-watermarks 1 0

          Verify the success response on TH(all-clusters-app) Log:

          [1666950895.120765][5367:5367] CHIP:EM: Handling via exchange: 21122r, Delegate: 0xaaaac4ce0288
          [1666950895.120930][5367:5367] CHIP:DMG: InvokeRequestMessage =
          [1666950895.121022][5367:5367] CHIP:DMG: {
          [1666950895.121081][5367:5367] CHIP:DMG:         suppressResponse = false,
          [1666950895.121148][5367:5367] CHIP:DMG:         timedRequest = false,
          [1666950895.121232][5367:5367] CHIP:DMG:         InvokeRequests =
          [1666950895.121311][5367:5367] CHIP:DMG:         [
          [1666950895.121394][5367:5367] CHIP:DMG:                 CommandDataIB =
          [1666950895.121481][5367:5367] CHIP:DMG:                 {
          [1666950895.121584][5367:5367] CHIP:DMG:                         CommandPathIB =
          [1666950895.121675][5367:5367] CHIP:DMG:                         {
          [1666950895.121777][5367:5367] CHIP:DMG:                                 EndpointId = 0x0,
          [1666950895.121870][5367:5367] CHIP:DMG:                                 ClusterId = 0x34,
          [1666950895.121985][5367:5367] CHIP:DMG:                                 CommandId = 0x0,
          [1666950895.122066][5367:5367] CHIP:DMG:                         },
          [1666950895.122174][5367:5367] CHIP:DMG:
          [1666950895.122247][5367:5367] CHIP:DMG:                         CommandFields =
          [1666950895.122356][5367:5367] CHIP:DMG:                         {
          [1666950895.122443][5367:5367] CHIP:DMG:                         },
          [1666950895.122550][5367:5367] CHIP:DMG:                 },
          [1666950895.122631][5367:5367] CHIP:DMG:
          [1666950895.122744][5367:5367] CHIP:DMG:         ],
          [1666950895.122824][5367:5367] CHIP:DMG:
          [1666950895.122913][5367:5367] CHIP:DMG:         InteractionModelRevision = 1
          [1666950895.122978][5367:5367] CHIP:DMG: },
          [1666950895.123150][5367:5367] CHIP:DMG: AccessControl: checking f=1 a=c s=0x000000000001B669 t= c=0x0000_0034 e=0 p=o
          [1666950895.123234][5367:5367] CHIP:DMG: AccessControl: allowed
          [1666950895.123326][5367:5367] CHIP:DMG: Received command for Endpoint=0 Cluster=0x0000_0034 Command=0x0000_0000
          [1666950895.123421][5367:5367] CHIP:DMG: Command handler moving to [ Preparing]
          [1666950895.123520][5367:5367] CHIP:DMG: Command handler moving to [AddingComm]
          [1666950895.123586][5367:5367] CHIP:DMG: Command handler moving to [AddedComma]
          [1666950895.123697][5367:5367] CHIP:DMG: Decreasing reference count for CommandHandler, remaining 0
          [1666950895.124253][5367:5367] CHIP:EM: <<< [E:21122r M:53749270 (Ack:215040220)] (S) Msg TX to 1:000000000001B669 [C7F7] --- Type 0001:09 (IM:InvokeCommandResponse)
          [1666950895.124353][5367:5367] CHIP:IN: (S) Sending msg 53749270 on secure session with LSID: 41627
          [1666950895.125043][5367:5367] CHIP:DMG: >> to UDP:[fe80::e65f:1ff:fe0e:be37%eth0]:43984 | 53749270 | [Interaction Model  (1) / InvokeCommandResponse (0x09) / Session = 7655 / Exchange = 21122]
          [1666950895.125300][5367:5367] CHIP:DMG: Header Flags =
          [1666950895.125360][5367:5367] CHIP:DMG: {
          [1666950895.125474][5367:5367] CHIP:DMG:     Exchange (0x06) =
          [1666950895.125533][5367:5367] CHIP:DMG:     {
          [1666950895.125592][5367:5367] CHIP:DMG:         AckMsg = 215040220
          [1666950895.125670][5367:5367] CHIP:DMG:         NeedsAck = true
          [1666950895.125728][5367:5367] CHIP:DMG:     }
          [1666950895.125801][5367:5367] CHIP:DMG: }
          [1666950895.125881][5367:5367] CHIP:DMG:
          [1666950895.125949][5367:5367] CHIP:DMG: Encrypted Payload (67 bytes) =
          [1666950895.126029][5367:5367] CHIP:DMG: {
          [1666950895.126086][5367:5367] CHIP:DMG:     data = 00e71d001626340381eb47b7c924c57eb20842e6809b145878249948f15f820ef8edeb3aab5886a560d141b458fddda64b7a1d8caec61fd9ad1f223049490f6b8d9160
          [1666950895.126144][5367:5367] CHIP:DMG:     buffer_ptr = 187650549874176
          [1666950895.126198][5367:5367] CHIP:DMG: }
          [1666950895.126251][5367:5367] CHIP:DMG:
          [1666950895.126421][5367:5367] CHIP:DMG: InvokeResponseMessage =
          [1666950895.126509][5367:5367] CHIP:DMG: {
          [1666950895.126569][5367:5367] CHIP:DMG:         suppressResponse = false,
          [1666950895.126638][5367:5367] CHIP:DMG:         InvokeResponseIBs =
          [1666950895.126768][5367:5367] CHIP:DMG:         [
          [1666950895.126840][5367:5367] CHIP:DMG:                 InvokeResponseIB =
          [1666950895.126960][5367:5367] CHIP:DMG:                 {
          [1666950895.127033][5367:5367] CHIP:DMG:                         CommandStatusIB =
          [1666950895.127147][5367:5367] CHIP:DMG:                         {
          [1666950895.127226][5367:5367] CHIP:DMG:                                 CommandPathIB =
          [1666950895.127333][5367:5367] CHIP:DMG:                                 {
          [1666950895.127429][5367:5367] CHIP:DMG:                                         EndpointId = 0x0,
          [1666950895.127715][5367:5367] CHIP:DMG:                                         ClusterId = 0x34,
          [1666950895.127833][5367:5367] CHIP:DMG:                                         CommandId = 0x0,
          [1666950895.127928][5367:5367] CHIP:DMG:                                 },
          [1666950895.128044][5367:5367] CHIP:DMG:
          [1666950895.128127][5367:5367] CHIP:DMG:                                 StatusIB =
          [1666950895.128212][5367:5367] CHIP:DMG:                                 {
          [1666950895.128331][5367:5367] CHIP:DMG:                                         status = 0x00 (SUCCESS),
          [1666950895.128449][5367:5367] CHIP:DMG:                                 },
          [1666950895.128544][5367:5367] CHIP:DMG:
          [1666950895.128644][5367:5367] CHIP:DMG:                         },
          [1666950895.128741][5367:5367] CHIP:DMG:
          [1666950895.128833][5367:5367] CHIP:DMG:                 },
          [1666950895.128918][5367:5367] CHIP:DMG:
          [1666950895.129000][5367:5367] CHIP:DMG:         ],
      disabled: true
