# 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 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 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 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
