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

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

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

          [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

          on TH(chip-tool),Verify that the DUT response provides a list of supported modes

          [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),Verify that the DUT response with a successful (value 0x00) status response.

          [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),Verify that the DUT response with a successful (value 0x00) status response.

          [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),Verify that the DUT response with a successful (value 0x00) status response.

          [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 the DUT response is the integer recorded in step 1.

          [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
