# 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.2.1. [TC-MOD-2.1] ChangeToMode Verification (DUT as Server)

PICS:
    - MOD.S.C00.Rsp

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

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

          Verify on TH(chip-tool),  supported modes provides a list ofmodes


          [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: "TH reads the CurrentMode attribute from the DUT"
      PICS: MOD.S.A0003
      verification: |
          ./chip-tool modeselect read current-mode 1 1

          Verify on TH(chip-tool),  current modes provides a  mode Record for usage in steps 3.

          [1649678800.298128][10854:10861] CHIP:TOO: Endpoint: 1 Cluster: 0x0000_0050 Attribute 0x0000_0003 DataVersion: 4277065073

          [1649678800.298279][10854:10861] CHIP:TOO:   CurrentMode: 0
      disabled: true

    - label:
          "TH sends a ChangeToMode command to the DUT with a integer from the
          list in step 1,but different from the integer from step 2"
      PICS: MOD.S.C00.Rsp
      verification: |
          ./chip-tool modeselect change-to-mode 4 1 1

          Verify on TH(chip-tool) log,shows successful status response


          [1649677293.280207][10810:10815] CHIP:DMG:                                 StatusIB =
          [1649677293.280283][10810:10815] CHIP:DMG:                                 {
          [1649677293.280358][10810:10815] CHIP:DMG:                                         status = 0x00 (SUCCESS),
          [1649677293.280421][10810:10815] CHIP:DMG:                                 },
      disabled: true

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

          Verify on TH(chip-tool),  current modes provides integer provided in step 3a, not the integer from step 2

          [1649678800.298128][10854:10861] CHIP:TOO: Endpoint: 1 Cluster: 0x0000_0050 Attribute 0x0000_0003 DataVersion: 4277065073

          [1649678800.298279][10854:10861] CHIP:TOO:   CurrentMode: 4
      disabled: true

    - label:
          "TH sends a Change to Mode command to the DUT with a integer that is
          not in the list in step 1."
      PICS: MOD.S.C00.Rsp
      verification: |
          ./chip-tool modeselect change-to-mode 2 1 1

          Verify on TH(chip-tool)logs , with a INVALID_COMMAND (hex value 0x85/decimal 133)

          CHIP:DMG: Received Command Response Status for Endpoint=1 Cluster=0x0000_0050 Command=0x0000_0000 Status=0x85
          CHIP:TOO: Error: IM Error 0x00000585: General error: 0x85 (INVALID_COMMAND)
      disabled: true
