# 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: 80.3.1. [TC-MOD-3.1] OnMode Verification (DUT as Server)

PICS:
    - MOD.S.A0005

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

tests:
    - label: "Note"
      verification: |
          To execute this test case set onmode to any integer value because as default it value has null.

          ./chip-tool modeselect write on-mode 0 1 1
      disabled: true

    - label: "Precondition"
      verification: |
          This test case is verified after the device is provisioned. Pls provision device first, Pass appropriate nodeID in the below command
      disabled: true

    - label: "TH reads the OnMode attribute from the DUT"
      PICS: MOD.S.A0005 && MOD.S.F00
      verification: |
          ./chip-tool modeselect read on-mode 1 1

          On TH(chip-tool),Verify that the DUT response is an integer. Record this value for usage in steps 2b and below is the sample log provided for the raspi platform:

          [1649678983.679893][10871:10876] CHIP:TOO: Endpoint: 1 Cluster: 0x0000_0050 Attribute 0x0000_0005 DataVersion: 4277065073
          [1649678983.680002][10871:10876] CHIP:TOO:   OnMode: 0
      disabled: true

    - label: "TH reads the CurrentMode attribute from the DUT"
      PICS: MOD.S.A0003 && MOD.S.F00
      verification: |
          ./chip-tool modeselect read current-mode 1 1

          On TH(chip-tool),Verify that the DUT response is an integer. Record this value for usage in steps 2b and below is the sample log provided for the raspi platform:

          [1649679034.895848][10879:10884] CHIP:TOO: Endpoint: 1 Cluster: 0x0000_0050 Attribute 0x0000_0003 DataVersion: 4277065073
          [1649679034.895972][10879:10884] CHIP:TOO:   CurrentMode: 0
      disabled: true

    - label:
          "If the OnMode and CurrentMode attributes have the same value, proceed
          to step 2c, Otherwise proceed to step 3a."
      PICS: MOD.S.A0003 && MOD.S.A0005 && MOD.S.F00
      verification: |
          NOTE:
          If the OnMode and CurrentMode attributes have the same value, proceed to step 2c, Otherwise proceed to step 3a.
      disabled: true

    - label: "TH reads the SupportedModes attribute from the DUT"
      PICS: MOD.S.A0002 && MOD.S.F00
      verification: |
          ./chip-tool modeselect read supported-modes 1 1

          Verify on TH(chip-tool) logs Supported modes provides a list of mode, each mode should be a struct containing a label and all of these values should be no larger than 16 bits  for usage in step 2d and below is the sample log provided for the raspi platform:

          [1654595268.854568][14400:14405] CHIP:TOO: Endpoint: 1 Cluster: 0x0000_0050 Attribute 0x0000_0002 DataVersion: 366231602
          [1654595268.854678][14400:14405] CHIP:TOO:   SupportedModes: 3 entries
          [1654595268.854743][14400:14405] CHIP:TOO:     [1]: {
          [1654595268.854772][14400:14405] CHIP:TOO:       Label: Black
          [1654595268.854811][14400:14405] CHIP:TOO:       Mode: 0
          [1654595268.854843][14400:14405] CHIP:TOO:       SemanticTags: 1 entries
          [1654595268.854891][14400:14405] CHIP:TOO:         [1]: {
          [1654595268.854918][14400:14405] CHIP:TOO:           MfgCode: 0
          [1654595268.854945][14400:14405] CHIP:TOO:           Value: 0
          [1654595268.854971][14400:14405] CHIP:TOO:          }
          [1654595268.855000][14400:14405] CHIP:TOO:      }
          [1654595268.855038][14400:14405] CHIP:TOO:     [2]: {
          [1654595268.855064][14400:14405] CHIP:TOO:       Label: Cappuccino
          [1654595268.855089][14400:14405] CHIP:TOO:       Mode: 4
          [1654595268.855117][14400:14405] CHIP:TOO:       SemanticTags: 1 entries
          [1654595268.855149][14400:14405] CHIP:TOO:         [1]: {
          [1654595268.855175][14400:14405] CHIP:TOO:           MfgCode: 0
          [1654595268.855199][14400:14405] CHIP:TOO:           Value: 0
          [1654595268.855223][14400:14405] CHIP:TOO:          }
          [1654595268.855249][14400:14405] CHIP:TOO:      }
          [1654595268.855284][14400:14405] CHIP:TOO:     [3]: {
          [1654595268.855310][14400:14405] CHIP:TOO:       Label: Espresso
          [1654595268.855332][14400:14405] CHIP:TOO:       Mode: 7
          [1654595268.855360][14400:14405] CHIP:TOO:       SemanticTags: 1 entries
          [1654595268.855390][14400:14405] CHIP:TOO:         [1]: {
          [1654595268.855416][14400:14405] CHIP:TOO:           MfgCode: 0
          [1654595268.855440][14400:14405] CHIP:TOO:           Value: 0
          [1654595268.855464][14400:14405] CHIP:TOO:          }
          [1654595268.855490][14400:14405] CHIP:TOO:      }
          [1649677252.376226][10804:10809] CHIP:TOO:       SemanticTag: 0
          [1649677252.376252][10804:10809] CHIP:TOO:      }
      disabled: true

    - label:
          "Select a value from the list in step 2c with a different value than
          the onMode value read in step 1. TH sends a ChangeToMode command to
          the TH with the selected value."
      PICS: MOD.S.A0002 && MOD.S.C00.Rsp && MOD.S.F00
      verification: |
          ./chip-tool modeselect change-to-mode 7 1 1

          On TH(chip-tool) log verify that  status has a value  0x00 (success)  and below is the sample log provided for the raspi platform:

          [1645777419.711572][4798:4803] CHIP:DMG: Received Command Response Status for Endpoint=1 Cluster=0x0000_0050 Command=0x0000_0000 Status=0x0
      disabled: true

    - label: "TH sends an Off command to the DUT"
      PICS: OO.S.C00.Rsp && MOD.S.F00
      verification: |
          ./chip-tool onoff off 1 1


          On TH(chip-tool) log verify that  status has a value  0x00 (success)  and below is the sample log provided for the raspi platform:
          [1649679101.658594][10886:10891] CHIP:DMG: Received Command Response Status for Endpoint=1 Cluster=0x0000_0006 Command=0x0000_0000 Status=0x0
      disabled: true

    - label: "TH sends an On command to the DUT"
      PICS: OO.S.C01.Rsp && MOD.S.F00
      verification: |
          ./chip-tool onoff on 1 1

          On TH(chip-tool) log verify that  status has a value  0x00 (success)  and below is the sample log provided for the raspi platform:

          [1649679156.146015][10893:10898] CHIP:DMG: Received Command Response Status for Endpoint=1 Cluster=0x0000_0006 Command=0x0000_0001 Status=0x0
      disabled: true

    - label: "TH reads the CurrentMode attribute from the DUT"
      PICS: MOD.S.A0003 && MOD.S.F00
      verification: |
          ./chip-tool modeselect read current-mode 1 1

          On TH(chip-tool),verify that CurrentMode has the same value recorded in step 1 and below is the sample log provided for the raspi platform:

          [1649679202.069163][10899:10904] CHIP:TOO: Endpoint: 1 Cluster: 0x0000_0050 Attribute 0x0000_0003 DataVersion: 4277065073
          [1649679202.069278][10899:10904] CHIP:TOO:   CurrentMode: 0
      disabled: true
