# 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.13. [TC-CNET-4.15] [Wi-Fi] NetworkIDNotFound returned in
    LastNetworkingStatus field validation [DUT-Server]

PICS:
    - CNET.S.F00

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

tests:
    - label: "Factory Reset the DUT"
      verification: |

      disabled: true

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

      disabled: true

    - label:
          "The cluster Identifier 49 (0x0031) is present in the ServerList
          attribute"
      verification: |

      disabled: true

    - label: "The FeatureMap attribute value is 1"
      verification: |

      disabled: true

    - label:
          "MaxNetworks attribute value is at least 1 which is saved as
          MaxNetworksValue for future use"
      verification: |

      disabled: true

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

          Verify "ArmFailSafeResponse" on the TH(Chip-tool) Log:

          [1650383264.543046][44233:44238] CHIP:DMG: Received Command Response Data, Endpoint=0 Cluster=0x0000_0030 Command=0x0000_0001
          [1650383264.543109][44233:44238] CHIP:TOO: Endpoint: 0 Cluster: 0x0000_0030 Command 0x0000_0001
          [1650383264.543212][44233:44238] CHIP:TOO:   ArmFailSafeResponse: {
          [1650383264.543275][44233:44238] CHIP:TOO:     errorCode: 0
          [1650383264.543313][44233:44238] CHIP:TOO:     debugText:
          [1650383264.543348][44233:44238] CHIP:TOO:    }
          [1650383264.543402][44233:44238] CHIP:DMG: ICR moving to [AwaitingDe]
          [1650383264.543470][44233:44238] CHIP:EM: Sending Standalone Ack for MessageCounter:6293749 on exchange 65264i
      disabled: true

    - label:
          "TH sends  RemoveNetwork  Command to the  DUT with  NetworkID
          field  set to  PIXIT.CNET.WIFI_  2ND_ACCESSPOIN  T_SSID, which  does
          not match  the provisioned  network, and  Breadcrumb field  set to 1"
      PICS: CNET.S.C04.Rsp && CNET.S.C05.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 "NetworkConfigResponse and its arguments" on the TH(Chip-tool) Log:

          [1650383270.888700][44239:44244] CHIP:DMG: Received Command Response Data, Endpoint=0 Cluster=0x0000_0031 Command=0x0000_0005
          [1650383270.888774][44239:44244] CHIP:TOO: Endpoint: 0 Cluster: 0x0000_0031 Command 0x0000_0005
          [1650383270.888876][44239:44244] CHIP:TOO:   NetworkConfigResponse: {
          [1650383270.888952][44239:44244] CHIP:TOO:     networkingStatus: 3
          [1650383270.888992][44239:44244] CHIP:TOO:    }
          [1650383270.889044][44239:44244] CHIP:DMG: ICR moving to [AwaitingDe]
          [1650383270.889125][44239:44244] CHIP:EM: Sending Standalone Ack for MessageCounter:4715093 on exchange 59014i
      disabled: true

    - label:
          "TH sends connectNetwork Command to the DUT with NetworkID field set
          to PIXIT.CNET.WIFI_ 2ND_ACCESSPOIN T_SSID, which does not match the
          provisioned network, and Breadcrumb field set to 1"
      PICS: CNET.S.C06.Rsp && CNET.S.C07.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 and its arguments" on the TH(Chip-tool) Log:

          [1650383278.349428][44245:44250] CHIP:DMG: Received Command Response Data, Endpoint=0 Cluster=0x0000_0031 Command=0x0000_0007
          [1650383278.349490][44245:44250] CHIP:TOO: Endpoint: 0 Cluster: 0x0000_0031 Command 0x0000_0007
          [1650383278.349592][44245:44250] CHIP:TOO:   ConnectNetworkResponse: {
          [1650383278.349656][44245:44250] CHIP:TOO:     networkingStatus: 3
          [1650383278.349693][44245:44250] CHIP:TOO:     errorValue: 0
          [1650383278.349727][44245:44250] CHIP:TOO:    }
          [1650383278.349782][44245:44250] CHIP:DMG: ICR moving to [AwaitingDe]
          [1650383278.349847][44245:44250] CHIP:EM: Sending Standalone Ack for MessageCounter:11070796 on exchange 31080i
      disabled: true
