# 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: 68.2.2. [TC-BOOL-2.2] Primary Functionality with Server as DUT

PICS:
    - BOOL.S

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

tests:
    - label: "Commission DUT to TH"
      verification: |
          verification step to be updated.
      disabled: true

    - label: "Bring the DUT into a state so StateValue is FALSE"
      PICS: BOOL.M.ManuallyControlled && BOOL.S.A0000
      verification: |
          Manual operation
      disabled: true

    - label: "TH reads the StateValue attribute from the DUT"
      PICS: BOOL.M.ManuallyControlled && BOOL.S.A0000
      verification: |
          ./chip-tool booleanstate read state-value 1 1

          On TH(chip-tool), verify the StateValue value as FALSE

          [1646118838.087500][3279:3284] CHIP:TOO: Endpoint: 1 Cluster: 0x0000_0045 Attribute 0x0000_0000DataVersion: 2127727071
          [1646118838.087536][3279:3284] CHIP:TOO:   StateValue: FALSE
      disabled: true

    - label: "Bring the DUT into a state so StateValue is TRUE"
      PICS: BOOL.M.ManuallyControlled && BOOL.S.A0000
      verification: |
          Manual operation
      disabled: true

    - label: "TH reads the StateValue attribute from the DUT"
      PICS: BOOL.M.ManuallyControlled && BOOL.S.A0000
      verification: |
          ./chip-tool booleanstate read state-value 1 1

          On TH(chip-tool), verify the StateValue value as TRUE

          [1646118838.087500][3279:3284] CHIP:TOO: Endpoint: 1 Cluster: 0x0000_0045 Attribute 0x0000_0000DataVersion: 2127727071
          [1646118838.087536][3279:3284] CHIP:TOO:   StateValue: TRUE
      disabled: true

    - label: "Set up subscription to StateChange event"
      PICS: BOOL.M.ManuallyControlled && BOOL.S.E00 && BOOL.S.A0000
      verification: |
          Run the below command to start interactive mode
          ./chip-tool interactive start

          Subscribe the event using below command in Interactive mode. Once the event occurs, TH(chip-tool) get the subscription message.

           booleanstate subscribe-event-by-id 0x0 1 100 2 1
      disabled: true

    - label: "Bring the DUT into a state so StateValue is FALSE"
      PICS: BOOL.M.ManuallyControlled && BOOL.S.E00 && BOOL.S.A0000
      verification: |
          On TH(chip-tool), verify the StateValue value as FALSE

          [1646119162.628169][3311:3316] CHIP:TOO: Endpoint: 1 Cluster: 0x0000_0045 Attribute 0x0000_0000DataVersion: 2127727071
          [1646119162.628207][3311:3316] CHIP:TOO:   StateValue: FALSE
      disabled: true

    - label: "TH reads the StateValue attribute from the DUT"
      PICS: BOOL.M.ManuallyControlled && BOOL.S.E00 && BOOL.S.A0000
      verification: |
          ./chip-tool booleanstate read state-value 1 1

          On TH(chip-tool), verify the StateValue value as FALSE

          [1646118838.087500][3279:3284] CHIP:TOO: Endpoint: 1 Cluster: 0x0000_0045 Attribute 0x0000_0000DataVersion: 2127727071
          [1646118838.087536][3279:3284] CHIP:TOO:   StateValue: FALSE
      disabled: true

    - label: "Bring the DUT into a state so StateValue is TRUE"
      PICS: BOOL.M.ManuallyControlled && BOOL.S.E00 && BOOL.S.A0000
      verification: |
          On TH(chip-tool), verify the StateValue value as TRUE

          [1646119162.628169][3311:3316] CHIP:TOO: Endpoint: 1 Cluster: 0x0000_0045 Attribute 0x0000_0000DataVersion: 2127727071
          [1646119162.628207][3311:3316] CHIP:TOO:   StateValue: TRUE
      disabled: true

    - label: "TH reads the StateValue attribute from the DUT"
      PICS: BOOL.M.ManuallyControlled && BOOL.S.E00 && BOOL.S.A0000
      verification: |
          ./chip-tool booleanstate read state-value 1 1

          On TH(chip-tool), verify the StateValue value as TRUE

          [1646118838.087500][3279:3284] CHIP:TOO: Endpoint: 1 Cluster: 0x0000_0045 Attribute 0x0000_0000DataVersion: 2127727071
          [1646118838.087536][3279:3284] CHIP:TOO:   StateValue: TRUE
      disabled: true
