# 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:
    4.1.20. [TC-CADMIN-1.20] max number of Commissioned Fabrics and
    SupportedFabrics rollover using    BCM [DUT - Commissionee]

PICS:
    - CADMIN.S

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

tests:
    - label: "Precondition: Reset DUT_CE to factory defaults"
      verification: |
          verification step to be updated.
      disabled: true

    - label: "TH_CR1 starts a commissioning process with DUT_CE"
      PICS: CADMIN.S
      verification: |
          "1. Provision the device using 1st controller chip tool(use above instructions) ,
          "
      disabled: true

    - label:
          "TH_CR1 opens a commissioning window on DUT_CE using a commissioning
          timeout of PIXIT.CADMIN.CwDuration seconds using BCM"
      PICS: CADMIN.S.C01.Rsp
      verification: |
          On 1st controller chip tool, open commissioning window

          Below is the example when using chip tool as controller

          ./chip-tool administratorcommissioning open-basic-commissioning-window 500 1 0  --timedInteractionTimeoutMs 1000

          CHIP:DMG: InvokeResponseMessage =
          [1649756654.928453][3385:3390] CHIP:DMG: {
          [1649756654.928511][3385:3390] CHIP:DMG:         suppressResponse = false,
          [1649756654.928571][3385:3390] CHIP:DMG:         InvokeResponseIBs =
          [1649756654.928647][3385:3390] CHIP:DMG:         [
          [1649756654.928708][3385:3390] CHIP:DMG:                 InvokeResponseIB =
          [1649756654.928794][3385:3390] CHIP:DMG:                 {
          [1649756654.928864][3385:3390] CHIP:DMG:                         CommandStatusIB =
          [1649756654.928948][3385:3390] CHIP:DMG:                         {
          [1649756654.929021][3385:3390] CHIP:DMG:                                 CommandPathIB =
          [1649756654.929109][3385:3390] CHIP:DMG:                                 {
          [1649756654.929191][3385:3390] CHIP:DMG:                                         EndpointId = 0x0,
          [1649756654.929284][3385:3390] CHIP:DMG:                                         ClusterId = 0x3c,
          [1649756654.929376][3385:3390] CHIP:DMG:                                         CommandId = 0x1,
          [1649756654.929459][3385:3390] CHIP:DMG:                                 },
          [1649756654.929551][3385:3390] CHIP:DMG:
          [1649756654.929632][3385:3390] CHIP:DMG:                                 StatusIB =
          [1649756654.929720][3385:3390] CHIP:DMG:                                 {
          [1649756654.929804][3385:3390] CHIP:DMG:                                         status = 0x00 (SUCCESS),
          [1649756654.929878][3385:3390] CHIP:DMG:                                 },
          [1649756654.929946][3385:3390] CHIP:DMG:
          [1649756654.930017][3385:3390] CHIP:DMG:                         },
          [1649756654.930109][3385:3390] CHIP:DMG:
          [1649756654.930176][3385:3390] CHIP:DMG:                 },
          [1649756654.930256][3385:3390] CHIP:DMG:
          [1649756654.930314][3385:3390] CHIP:DMG:         ],
          [1649756654.930389][3385:3390] CHIP:DMG:
          [1649756654.930448][3385:3390] CHIP:DMG:         InteractionModelRevision = 1
          [1649756654.930555][3385:3390] CHIP:DMG: },
          [1649756654.930703][3385:3390] CHIP:DMG: Received Command Response Status for Endpoint=0 Cluster=0x0000_003C Command=0x0000_0001 Status=0x0
          [1649756654.930801][3385:3390] CHIP:DMG: ICR moving to [AwaitingDe]
      disabled: true

    - label: "THn starts a commissioning process with DUT_CE"
      PICS: CADMIN.S
      verification: |
          On nth controller using chip tool connect to the accessory


          ./chip-tool pairing onnetwork 1 20202021

          Verify you got below message
          Device commissioning completed with success
      disabled: true

    - label:
          "Repeat Step 3 and Step 4 an additional (SupportedFabrics - 2) times
          to reach an index value of SupportedFabrics on DUT_CE"
      PICS: CADMIN.S.C01.Rsp
      verification: |
          Repeat step 3 until  CommissionedFabrics=SupportedFabrics
      disabled: true

    - label:
          "THn starts a commissioning process and opens a commissioning window
          with DUT_CE"
      PICS: CADMIN.S.C01.Rsp
      verification: |
          On nth controller using chip tool connect to the accessory


          ./chip-tool pairing onnetwork 1 20202021

          CHIP:DMG: Received Command Response Data, Endpoint=0 Cluster=0x0000_003E Command=0x0000_0008
          [1649756670.402192][10794:10799] CHIP:CTL: Device returned status 5 on receiving the NOC
          [1649756670.402221][10794:10799] CHIP:CTL: Add NOC failed with error ../../third_party/connectedhomeip/src/controller/CHIPDeviceController.cpp:1110: CHIP Error 0x0000000B: No memory
          [1649756670.402241][10794:10799] CHIP:CTL: Failed to perform commissioning step 12
      disabled: true

    - label: "TH_CR1 removes FabricIndex1"
      PICS: OPCREDS.S.C0a.Rsp
      verification: |
          on 1st controller using chip tool, remove fabric with FabricIndex=1

          ./chip-tool operationalcredentials remove-fabric 1 1 0
      disabled: true
