# 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
    - CADMIN.S.F00

config:
    nodeId: 0x12344321
    cluster: "Basic Information"
    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 TH_CR1 - 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 TH_CR1 (chip tool), open commissioning window using BCM

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

          Verify success response On TH_CR1(chip-tool) Log

          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 TH_CR1+1 controller using chip tool connect to the accessory

          ./chip-tool pairing onnetwork 2 20202021  --commissioner-name beta

          Verify you got below message on TH_CR1+1(chip-tool) log
          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  (Supported fabrics value obtained in the precondition)

          Use the following command to verify the currentcommissioned fabric (Output number may vary depends on the number successful commissioning )

          ./chip-tool operationalcredentials read commissioned-fabrics 1 0

          [1660907933.677983][33780:33785] CHIP:TOO:   CommissionedFabrics: 16
      disabled: true

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

          ./chip-tool pairing onnetwork 6 20202021 --commissioner-name 4

          Verify DUT_CE responds with NOCResponse with a StatusCode of 0x05 on TH (chip-tool) log

          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 13
      disabled: true

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

          ./chip-tool operationalcredentials remove-fabric 1 1 0

          CHIP:DMG: Received Command Response Data, Endpoint=0 Cluster=0x0000_003E Command=0x0000_0008
          CHIP:TOO: Endpoint: 0 Cluster: 0x0000_003E Command 0x0000_0008
          CHIP:TOO:   NOCResponse: {
          CHIP:TOO:     statusCode: 0
          CHIP:TOO:     fabricIndex: 1
          CHIP:TOO:    }
          CHIP:DMG: ICR moving to [AwaitingDe]

          Verify CommissionedFabrics=SupportedFabrics-1 on  TH_CR2(chip-tool) log

          ./chip-tool operationalcredentials read commissioned-fabrics 2 0 --commissioner-name beta

          [1660907933.677983][33780:33785] CHIP:TOO:   CommissionedFabrics: 15
      disabled: true
