# 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: 3.2.2. [TC-DGGEN-2.2] Event functionality test with server as DUT

PICS:
    - DGGEN.S

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

tests:
    - label: "Note"
      verification: |
          "https://github.com/project-chip/connectedhomeip/tree/master/examples/all-clusters-app/linux#readme
           Events to be executed as following
           1. Compile app using below command in connectedhomeip folder
           a. ./scripts/run_in_build_env.sh "./scripts/build/build_examples.py --target linux-arm64-all-clusters-no-ble-asan-clang build"
           2. Build respective app (all-clusters-app)
           3. Commission DUT to TH
           4. Open 2nd terminal of DUT and provide the below command to obtain PID of DUT
           ps  -aef|grep all-clusters-app
           5. Follow the Verification step below to generate the event in 2nd terminal of DUT "
      disabled: true

    - label: "Commission DUT to TH"
      verification: |

      disabled: true

    - label:
          "Induce a DUT hardware failure two times as addressed in HardwareFault
          ENUM table 11.11.6.1. (Ex. Pull the DUT power plug off causing power
          source failure, and rejoin DUT back to previous TH fabric. Next,
          repeat power plug off and rejoining DUT back to previous TH fabric one
          more time.)"
      PICS: DGGEN.S.E00
      verification: |
          Optional attribute so its not compulsory to get the expected outcome

          On Raspi platform the event is triggered with below command, Pls use equivalent command on the respective DUT
          echo '{"Name":"HardwareFaultChange"}' > /tmp/chip_all_clusters_fifo_<PID>  (PID of all-clusters-app)

          ./chip-tool generaldiagnostics read-event hardware-fault-change 1 0

          Verify that HardwareFaultChange Event SHALL indicate a change in the set of hardware faults currently
          detected by the Node. The current and previous field SHALL represent the set of faults as per Section 11.11.6.1,
          “HardwareFault enum”, On TH(chip-tool)

          [1659530031.316459][4951:4956] CHIP:TOO: Endpoint: 0 Cluster: 0x0000_0033 Event 0x0000_0000
          [1659530031.316486][4951:4956] CHIP:TOO:   Event number: 6
          [1659530031.316505][4951:4956] CHIP:TOO:   Priority: Critical
          [1659530031.316524][4951:4956] CHIP:TOO:   Timestamp: 32093879
          [1659530031.316629][4951:4956] CHIP:TOO:   HardwareFaultChange: {
          [1659530031.316697][4951:4956] CHIP:TOO:     Current: 0 entries
          [1659530031.316752][4951:4956] CHIP:TOO:     Previous: 0 entries
          [1659530031.316778][4951:4956] CHIP:TOO:    }
      disabled: true

    - label:
          "Induce a DUT radio failure two times as addressed in RadioFault ENUM
          table 11.11.6.2. (Ex. Put the DUT under metallic cover causing WiFi
          failure. Uncover DUT and make DUT rejoining DUT back to previous TH
          fabric. Repeat the radio failure one more time and rejoin DUT back to
          previous TH fabric."
      PICS: DGGEN.S.E01
      verification: |
          Optional attribute so its not compulsory to get the expected outcome

          On Raspi platform the event is triggered with below command, Pls use equivalent command on the respective DUT
          echo '{"Name":"RadioFaultChange"}' > /tmp/chip_all_clusters_fifo_<PID>   (PID of all-clusters-app)

          ./chip-tool generaldiagnostics read-event radio-fault-change 1 0

          Verify that RadioFaultChange Event SHALL indicate a change in the set of radio faults currently detected
          by the Node.TH receives RadioFaultChange event with current and previous data specified by RadioFault ENUM table 11.11.6.2 according to two repeated failures On TH(chip-tool)

          [1659530181.319598][4969:4975] CHIP:TOO: Endpoint: 0 Cluster: 0x0000_0033 Event 0x0000_0001
          [1659530181.319628][4969:4975] CHIP:TOO:   Event number: 7
          [1659530181.319652][4969:4975] CHIP:TOO:   Priority: Critical
          [1659530181.319675][4969:4975] CHIP:TOO:   Timestamp: 32245892
          [1659530181.319768][4969:4975] CHIP:TOO:   RadioFaultChange: {
          [1659530181.319814][4969:4975] CHIP:TOO:     Current: 0 entries
          [1659530181.319848][4969:4975] CHIP:TOO:     Previous: 0 entries
          [1659530181.319878][4969:4975] CHIP:TOO:    }
      disabled: true

    - label:
          "Induce a DUT radio failure two times as addressed in NetworkFault
          ENUM table 11.11.6.3. (Ex. Put the DUT under metallic cover causing
          network failure. Uncover DUT and rejoin DUT back to previous TH
          fabric. Pull the DUT power plug off causing power source failure.
          rejoining DUT back to previous TH fabric.)"
      PICS: DGGEN.S.E02
      verification: |
          On Raspi platform the event is triggered with below command, Pls use equivalent command on the respective DUT
          echo '{"Name":"NetworkFaultChange"}' > /tmp/chip_all_clusters_fifo_<PID>   (PID of all-clusters-app)

           ./chip-tool generaldiagnostics read-event network-fault-change 1 0

          Verify that NetworkFaultChange Event SHALL indicate a change in the set of network faults currently
          TH receives NetworkFaultChange event with current and previous data specified by NetworkFault ENUM table 11.11.2.3 according to two failure causes, On TH(chip-tool)

          [1659530237.352498][4985:4990] CHIP:TOO: Endpoint: 0 Cluster: 0x0000_0033 Event 0x0000_0002
          [1659530237.352541][4985:4990] CHIP:TOO:   Event number: 8
          [1659530237.352573][4985:4990] CHIP:TOO:   Priority: Critical
          [1659530237.352604][4985:4990] CHIP:TOO:   Timestamp: 32301872
          [1659530237.352728][4985:4990] CHIP:TOO:   NetworkFaultChange: {
          [1659530237.352786][4985:4990] CHIP:TOO:     Current: 0 entries
          [1659530237.352831][4985:4990] CHIP:TOO:     Previous: 0 entries
          [1659530237.352874][4985:4990] CHIP:TOO:    }
      disabled: true

    - label:
          "Reboot DUT with a normal reboot process. Rejoin DUT back to previous
          TH fabric."
      PICS: DGGEN.S.E03
      verification: |
          Optional attribute so its not compulsory to get the expected outcome

          On Raspi platform the event is triggered with below command, Pls use equivalent command on the respective DUT
          echo '{"Name":"<BootReason>"}' > /tmp/chip_all_clusters_fifo_<PID>  (PID of all-clusters-app)

          ./chip-tool generaldiagnostics read-event boot-reason 1 0

          Read the event data of BootReason specified by Table 103 BootReason ENUM table On TH(chip-tool)

          [1659530352.583608][4993:4998] CHIP:TOO: Endpoint: 0 Cluster: 0x0000_0033 Event 0x0000_0003
          [1659530352.583636][4993:4998] CHIP:TOO:   Event number: 0
          [1659530352.583656][4993:4998] CHIP:TOO:   Priority: Critical
          [1659530352.583675][4993:4998] CHIP:TOO:   Timestamp: 29669541
          [1659530352.583750][4993:4998] CHIP:TOO:   BootReason: {
          [1659530352.583789][4993:4998] CHIP:TOO:     BootReason: 0
          [1659530352.583813][4993:4998] CHIP:TOO:    }
      disabled: true
