# 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:
    12.4.18. [TC-CNET-4.20] [Wi-Fi] Verification for commands check [DUT-Client]

PICS:
    - CNET.C.F00

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

tests:
    - label: "Note"
      verification: |
          Chip-tool command used below are an example to verify the  DUT as client test cases. For certification test, we expect DUT should have a capability or way to run the equivalent command.
      disabled: true

    - label: "Commission TH and DUT over BLE to setup the Wi-Fi"
      verification: |

      disabled: true

    - label: "DUT sends the ScanNetwork command to the TH"
      PICS: CNET.C.C00.Tx
      verification: |
          ./chip-tool networkcommissioning scan-networks 1 0 --Ssid null --Breadcrumb 1

          Verify "ScanNetworksResponse status" on the TH(all-cluster-app) Log:

          [1659616712.104331][8402:8402] CHIP:DMG: AccessControl: checking f=1 a=c s=0x000000000001B669 t= c=0x0000_0031 e=0 p=a
          [1659616712.104371][8402:8402] CHIP:DMG: AccessControl: allowed
          [1659616712.104399][8402:8402] CHIP:DMG: Received command for Endpoint=0 Cluster=0x0000_0031 Command=0x0000_0000
          [1659616712.104439][8402:8402] CHIP:EM: Sending Standalone Ack for MessageCounter:229325863 on exchange 34793r
      disabled: true

    - label: "DUT sends the ArmFailSafe command to the TH"
      verification: |
          ./chip-tool generalcommissioning arm-fail-safe 60 0 1 0

          Verify "ArmFailSafeResponse" on the TH(All-cluster-app) Log:

          [1659616767.476289][8402:8402] CHIP:DMG:         InteractionModelRevision = 1
          [1659616767.476315][8402:8402] CHIP:DMG: },
          [1659616767.476389][8402:8402] CHIP:DMG: AccessControl: checking f=1 a=c s=0x000000000001B669 t= c=0x0000_0030 e=0 p=a
          [1659616767.476429][8402:8402] CHIP:DMG: AccessControl: allowed
          [1659616767.476461][8402:8402] CHIP:DMG: Received command for Endpoint=0 Cluster=0x0000_0030 Command=0x0000_0000
          [1659616767.476498][8402:8402] CHIP:FS: GeneralCommissioning: Received ArmFailSafe (60s)
          [1659616767.476543][8402:8402] CHIP:DMG: Endpoint 0, Cluster 0x0000_0030 update version to 2dd33a83
          [1659616767.476587][8402:8402] CHIP:DMG: ICR moving to [ Preparing]
      disabled: true

    - label: "DUT sends the AddOrUpdateWiFiNetwork command to the TH"
      PICS: CNET.C.C02.Tx
      verification: |
          ./chip-tool networkcommissioning add-or-update-wi-fi-network-network hex:<your network id in hex> 1 0

          Below is an example:

          ./chip-tool networkcommissioning add-or-update-wi-fi-network hex:47524C50726976617465 grlprivatewifi092010 1 0

          Verify "AddOrUpdateWiFiNetwork Response" on the TH(All-cluster-app) Log:

          [1659616812.403722][8402:8402] CHIP:DMG:
          [1659616812.403755][8402:8402] CHIP:DMG:         InteractionModelRevision = 1
          [1659616812.403786][8402:8402] CHIP:DMG: },
          [1659616812.403872][8402:8402] CHIP:DMG: AccessControl: checking f=1 a=c s=0x000000000001B669 t= c=0x0000_0031 e=0 p=a
          [1659616812.403920][8402:8402] CHIP:DMG: AccessControl: allowed
          [1659616812.403957][8402:8402] CHIP:DMG: Received command for Endpoint=0 Cluster=0x0000_0031 Command=0x0000_0002
          [1659616812.404024][8402:8402] CHIP:DMG: ICR moving to [ Preparing]
      disabled: true

    - label: "DUT sends the ConnectNetwork command to the TH"
      PICS: CNET.C.C06.Tx
      verification: |
          ./chip-tool networkcommissioning connect-network hex:<your network id in hex> 1 0

          Below is an example:

           ./chip-tool networkcommissioning connect-network hex:47524C50726976617465 1 0

          Verify "ConnectNetworkResponse" on the TH(All-cluster-app) Log:

          [1659616840.500694][8402:8402] CHIP:DMG:         InteractionModelRevision = 1
          [1659616840.500733][8402:8402] CHIP:DMG: },
          [1659616840.500833][8402:8402] CHIP:DMG: AccessControl: checking f=1 a=c s=0x000000000001B669 t= c=0x0000_0031 e=0 p=a
          [1659616840.500889][8402:8402] CHIP:DMG: AccessControl: allowed
          [1659616840.500932][8402:8402] CHIP:DMG: Received command for Endpoint=0 Cluster=0x0000_0031 Command=0x0000_0006
          [1659616840.501003][8402:8402] CHIP:DMG: ICR moving to [ Preparing]
          [1659616840.501053][8402:8402] CHIP:DMG: ICR moving to [AddingComm]
      disabled: true

    - label: "DUT sends the ReorderNetwork command to the TH"
      PICS: CNET.C.C08.Tx
      verification: |
          ./chip-tool networkcommissioning reorder-network hex:<your network id in hex> 1 0

          Below is an example:

          ./chip-tool networkcommissioning reorder-network hex:47524C50726976617465 3 1 0

          Verify "ReorderNetworkResponse" on the TH(All-cluster-app) Log:

          [1659617048.989226][8402:8402] CHIP:DMG:         InteractionModelRevision = 1
          [1659617048.989284][8402:8402] CHIP:DMG: },
          [1659617048.989447][8402:8402] CHIP:DMG: AccessControl: checking f=1 a=c s=0x000000000001B669 t= c=0x0000_0031 e=0 p=a
          [1659617048.989554][8402:8402] CHIP:DMG: AccessControl: allowed
          [1659617048.989622][8402:8402] CHIP:DMG: Received command for Endpoint=0 Cluster=0x0000_0031 Command=0x0000_0008
          [1659617048.989747][8402:8402] CHIP:DMG: ICR moving to [ Preparing]
          [1659617048.989822][8402:8402] CHIP:DMG: ICR moving to [AddingComm]
      disabled: true

    - label: "DUT sends the RemoveNetwork command to the TH"
      PICS: CNET.C.C04.Tx
      verification: |
          ./chip-tool networkcommissioning remove-network hex:<your network id in hex> 1 0

          Below is an example:

          ./chip-tool networkcommissioning remove-network hex:47524C50726976617465 1 0

          Verify "RemoveNetworkResponse" on the TH(All-cluster-app) Log:

          [1659617136.123532][8402:8402] CHIP:DMG:
          [1659617136.123555][8402:8402] CHIP:DMG:         InteractionModelRevision = 1
          [1659617136.123578][8402:8402] CHIP:DMG: },
          [1659617136.123645][8402:8402] CHIP:DMG: AccessControl: checking f=1 a=c s=0x000000000001B669 t= c=0x0000_0031 e=0 p=a
          [1659617136.123682][8402:8402] CHIP:DMG: AccessControl: allowed
          [1659617136.123709][8402:8402] CHIP:DMG: Received command for Endpoint=0 Cluster=0x0000_0031 Command=0x0000_0004
          [1659617136.123758][8402:8402] CHIP:DMG: ICR moving to [ Preparing]
          [1659617136.123789][8402:8402] CHIP:DMG: ICR moving to [AddingComm]
      disabled: true
