# 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: 41.3.2. [TC-TSTAT-3.2] Functionality with client as DUT

PICS:
    - TSTAT.C

config:
    nodeId: 0x12344321
    cluster: "Basic"
    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:
          "DUT increases the temperature by sending a SetpointRaiseLower command
          to the Test Harness, with a valid Mode argument (0, 1 or 2) and a
          reasonable positive value that is supported by the DUT."
      PICS: TSTAT.C.C00.Tx
      verification: |
          Product maker needs to provide instructions for how to trigger the command on the DUT. For comparison, the DUT behavior for this test step can be simulated using chip-tool (when DUT is a commissioner/Client)

          ./chip-tool thermostat setpoint-raise-lower 0 10 1 1


          verify On TH(all-clusters-app) receives the right invoke Request Message for the data sent in the above command


          [1646064221.719107][33190:33190] CHIP:EM: Received message of type 0x8 with protocolId (0, 1) and MessageCounter:4540287 on exchange 31012r
          [1646064221.719148][33190:33190] CHIP:EM: Handling via exchange: 31012r, Delegate: 0xaaaace1730c8
          [1646064221.719450][33190:33190] CHIP:DMG: InvokeRequestMessage =
          [1646064221.719491][33190:33190] CHIP:DMG: {
          [1646064221.719513][33190:33190] CHIP:DMG:         suppressResponse = false,
          [1646064221.719539][33190:33190] CHIP:DMG:         timedRequest = false,
          [1646064221.719564][33190:33190] CHIP:DMG:         InvokeRequests =
          [1646064221.719595][33190:33190] CHIP:DMG:         [
          [1646064221.719619][33190:33190] CHIP:DMG:                 CommandDataIB =
          [1646064221.719650][33190:33190] CHIP:DMG:                 {
          [1646064221.719677][33190:33190] CHIP:DMG:                         CommandPathIB =
          [1646064221.719710][33190:33190] CHIP:DMG:                         {
          [1646064221.719741][33190:33190] CHIP:DMG:                                 EndpointId = 0x1,
          [1646064221.719773][33190:33190] CHIP:DMG:                                 ClusterId = 0x201,
          [1646064221.719802][33190:33190] CHIP:DMG:                                 CommandId = 0x0,
          [1646064221.719832][33190:33190] CHIP:DMG:                         },
          [1646064221.719864][33190:33190] CHIP:DMG:
          [1646064221.719891][33190:33190] CHIP:DMG:                         CommandData =
          [1646064221.719922][33190:33190] CHIP:DMG:                         {
          [1646064221.719955][33190:33190] CHIP:DMG:                                 0x0 = 0,
          [1646064221.719992][33190:33190] CHIP:DMG:                                 0x1 = 10,
          [1646064221.720023][33190:33190] CHIP:DMG:                         },
          [1646064221.720051][33190:33190] CHIP:DMG:                 },
          [1646064221.720082][33190:33190] CHIP:DMG:
          [1646064221.720107][33190:33190] CHIP:DMG:         ],
          [1646064221.720137][33190:33190] CHIP:DMG:
          [1646064221.720161][33190:33190] CHIP:DMG:         InteractionModelRevision = 1
          [1646064221.720184][33190:33190] CHIP:DMG: },
          [1646064221.720243][33190:33190] CHIP:DMG: AccessControl: checking f=1 a=c s=0x000000000001B669 t= c=0x0000_0201 e=1 p=o
          [1646064221.720285][33190:33190] CHIP:DMG: Received command for Endpoint=1 Cluster=0x0000_0201 Command=0x0000_0000
      disabled: true

    - label:
          "DUT lowers the temperature by sending a SetpointRaiseLower command to
          the Test Harness, with a valid Mode argument (0, 1 or 2) and a
          reasonable negative value that is supported by the DUT."
      PICS: TSTAT.C.C00.Tx
      verification: |
          Product maker needs to provide instructions for how to trigger the command on the DUT. For comparison, the DUT behavior for this test step can be simulated using chip-tool (when DUT is a commissioner/Client)

          ./chip-tool thermostat setpoint-raise-lower 0 -10 1 1

          verify On TH(all-clusters-app) receives the right invoke Request Message for the data sent in the above command


          [1646064525.675075][33190:33190] CHIP:EM: Received message of type 0x8 with protocolId (0, 1) and MessageCounter:16717414 on exchange 9698r
          [1646064525.675116][33190:33190] CHIP:EM: Handling via exchange: 9698r, Delegate: 0xaaaace1730c8
          [1646064525.675402][33190:33190] CHIP:DMG: InvokeRequestMessage =
          [1646064525.675444][33190:33190] CHIP:DMG: {
          [1646064525.675471][33190:33190] CHIP:DMG:         suppressResponse = false,
          [1646064525.675497][33190:33190] CHIP:DMG:         timedRequest = false,
          [1646064525.675521][33190:33190] CHIP:DMG:         InvokeRequests =
          [1646064525.675552][33190:33190] CHIP:DMG:         [
          [1646064525.675576][33190:33190] CHIP:DMG:                 CommandDataIB =
          [1646064525.675605][33190:33190] CHIP:DMG:                 {
          [1646064525.675630][33190:33190] CHIP:DMG:                         CommandPathIB =
          [1646064525.675660][33190:33190] CHIP:DMG:                         {
          [1646064525.675692][33190:33190] CHIP:DMG:                                 EndpointId = 0x1,
          [1646064525.675724][33190:33190] CHIP:DMG:                                 ClusterId = 0x201,
          [1646064525.675822][33190:33190] CHIP:DMG:                                 CommandId = 0x0,
          [1646064525.675852][33190:33190] CHIP:DMG:                         },
          [1646064525.675884][33190:33190] CHIP:DMG:
          [1646064525.675911][33190:33190] CHIP:DMG:                         CommandData =
          [1646064525.675941][33190:33190] CHIP:DMG:                         {
          [1646064525.675971][33190:33190] CHIP:DMG:                                 0x0 = 0,
          [1646064525.676005][33190:33190] CHIP:DMG:                                 0x1 = -10,
          [1646064525.676033][33190:33190] CHIP:DMG:                         },
          [1646064525.676060][33190:33190] CHIP:DMG:                 },
          [1646064525.676091][33190:33190] CHIP:DMG:
          [1646064525.676114][33190:33190] CHIP:DMG:         ],
          [1646064525.676143][33190:33190] CHIP:DMG:
          [1646064525.676167][33190:33190] CHIP:DMG:         InteractionModelRevision = 1
          [1646064525.676189][33190:33190] CHIP:DMG: },
          [1646064525.676247][33190:33190] CHIP:DMG: AccessControl: checking f=1 a=c s=0x000000000001B669 t= c=0x0000_0201 e=1 p=o
          [1646064525.676288][33190:33190] CHIP:DMG: Received command for Endpoint=1 Cluster=0x0000_0201 Command=0x0000_0000
      disabled: true

    - label: "DUT sends a GetRelayStatusLog command to the Test Harness."
      PICS: TSTAT.C.C04.Tx
      verification: |
          The GetRelayStatusLogResponse command may not supported in Matter 1.0.
      disabled: true
