# 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:
          "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
