# 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) ,"

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

          verify the supported fabric value in  TH_CR1 (chip-tool) Log

          [1673255944.863014][1855:1857] CHIP:TOO: Endpoint: 0 Cluster: 0x0000_003E Attribute 0x0000_0002 DataVersion: 1416179233
          [1673255944.866488][1855:1857] CHIP:TOO:   SupportedFabrics: 16
          [1673255944.866687][1855:1857] CHIP:EM: <<< [E:54030i M:262581331 (Ack:252819622)] (S) Msg TX to 1:0000000000000001 [2933] --- Type 0000:10 (SecureChannel:StandaloneAck)
          [1673255944.866740][1855:1857] CHIP:IN: (S) Sending msg 262581331 on secure session with LSID: 35076
          [1673255944.866870][1855:1857] CHIP:EM: Flushed pending ack for MessageCounter:252819622 on exchange 54030i
      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 step 1)

          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 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 THn (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
