# 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: "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.C03.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
