# 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.14. [TC-CNET-4.16] [Thread] NetworkIDNotFound returned in
    LastNetworkingStatus field validation [DUT-Server]

PICS:
    - CNET.S.F01

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

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

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

          [1650392597.976230][10152:10157] CHIP:DMG: Received Command Response Data, Endpoint=0 Cluster=0x0000_0030 Command=0x0000_0001
          [1650392597.976363][10152:10157] CHIP:TOO: Endpoint: 0 Cluster: 0x0000_0030 Command 0x0000_0001
          [1650392597.976539][10152:10157] CHIP:TOO:   ArmFailSafeResponse: {
          [1650392597.976665][10152:10157] CHIP:TOO:     errorCode: 0
          [1650392597.976729][10152:10157] CHIP:TOO:     debugText:
          [1650392597.976785][10152:10157] CHIP:TOO:    }
          [1650392597.976874][10152:10157] CHIP:DMG: ICR moving to [AwaitingDe]
          [1650392597.976987][10152:10157] CHIP:EM: Sending Standalone Ack for MessageCounter:10494017 on exchange 14665i
      disabled: true

    - label:
          "TH sends  RemoveNetwork  Command to the  DUT with  NetworkID
          field  set to the extended  PAN ID
          of  PIXIT.CNET.THRE  AD_2ND_OPERATI  ONALDATASET,  which does
          not  match the  commissioned  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 47524C50726976617465 54 0

          Verify "NetworkConfigResponse and its arguments" on the TH(Chip-tool) Log:

          [1650392982.606392][10188:10193] CHIP:DMG: Received Command Response Data, Endpoint=0 Cluster=0x0000_0031 Command=0x0000_0007
          [1650392982.606501][10188:10193] CHIP:TOO: Endpoint: 0 Cluster: 0x0000_0031 Command 0x0000_0007
          [1650392982.606653][10188:10193] CHIP:TOO:   ConnectNetworkResponse: {
          [1650392982.606753][10188:10193] CHIP:TOO:     networkingStatus: 3
          [1650392982.606815][10188:10193] CHIP:TOO:     errorValue: 0
          [1650392982.606872][10188:10193] CHIP:TOO:    }
          [1650392982.606960][10188:10193] CHIP:DMG: ICR moving to [AwaitingDe]
      disabled: true

    - label:
          "TH sends  ConnectNetwork  Command to the  DUT with  NetworkID
          value  as the extended  PAN ID
          of  PIXIT.CNET.THRE  AD_2ND_OPERATI  ONALDATASET,  which does
          not  match the  commissioned  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 47524C50726976617465 54 0

          Verify "ConnectNetworkResponse and its arguments" on the TH(Chip-tool) Log:

          [1650392982.606392][10188:10193] CHIP:DMG: Received Command Response Data, Endpoint=0 Cluster=0x0000_0031 Command=0x0000_0007
          [1650392982.606501][10188:10193] CHIP:TOO: Endpoint: 0 Cluster: 0x0000_0031 Command 0x0000_0007
          [1650392982.606653][10188:10193] CHIP:TOO:   ConnectNetworkResponse: {
          [1650392982.606753][10188:10193] CHIP:TOO:     networkingStatus: 3
          [1650392982.606815][10188:10193] CHIP:TOO:     errorValue: 0
          [1650392982.606872][10188:10193] CHIP:TOO:    }
          [1650392982.606960][10188:10193] CHIP:DMG: ICR moving to [AwaitingDe]
      disabled: true
