# 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"
      verification: |
          Reset Devices to factory defaults
      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 using BCM

          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 2 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 6 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
