# 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:
    3.4.8. [TC-SC-4.8] Compressed Fabric ID remains the same for Nodes
    commissioned to the same fabric [DUT - Commissioner]

PICS:
    - MCORE.ROLE.COMMISSIONER

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

tests:
    - label: "Commission TH1 to DUTs Fabric"
      verification: |
          1. Provision the device using 1st controller chip-tool (as example commissioner) on the raspi (use above instructions)

          ./chip-tool pairing onnetwork 2 20202021


          avahi-browse _matter._tcp -rt

          Verify Compressed Fabric ID on the TH Log:

          eth0 IPv6 8840D142C33AB653-0000000000000001             _matter._tcp         local
      disabled: true

    - label: "Commission TH2 to DUTs Fabric"
      verification: |
          Using your DUT Controller connect to the accessory.

          Below is the example when using chip tool as controller

          ./chip-tool pairing ble-wifi 1 chipsetup4 matter123 20202021 3841




          avahi-browse _matter._tcp -rt

          Verify Compressed Fabric ID on the TH Log:

          +   eth0 IPv6 8840D142C33AB653-0000000000000001             _matter._tcp         local
      disabled: true

    - label: "Send RemoveFabric from DUT to TH1 and comission DUT to TH1 again"
      verification: |
          ./chip-tool operationalcredentials remove-fabric 1 1 0

          Verify in TH all-clusters-app log


          CHIP:DMG: Received Command Response Data, Endpoint=0 Cluster=0x0000_003E Command=0x0000_0008
          [1651571274.154864][10562:10567] CHIP:TOO: Endpoint: 0 Cluster: 0x0000_003E Command 0x0000_0008
          [1651571274.155030][10562:10567] CHIP:TOO:   NOCResponse: {
          [1651571274.155102][10562:10567] CHIP:TOO:     statusCode: 0
          [1651571274.155159][10562:10567] CHIP:TOO:     fabricIndex: 1
          [1651571274.155215][10562:10567] CHIP:TOO:    }


          ./chip-tool pairing ble-wifi 1 chipsetup4 matter123 20202021 3841

          avahi-browse _matter._tcp -rt

          Verify Compressed Fabric ID on the TH Log:

          +   eth0 IPv6 8840D142C33AB653-0000000000000001             _matter._tcp         local
      disabled: true

    - label: "Send RemoveFabric from DUT to TH2 and comission DUT to TH2 again"
      verification: |
          ./chip-tool operationalcredentials remove-fabric 1 2 0

          Verify in TH all-clusters-app log

          [1657628679275] [78509:912135] CHIP: [DMG] Received Command Response Data, Endpoint=0 Cluster=0x0000_003E Command=0x0000_0008
          [1657628679275] [78509:912135] CHIP: [TOO] Endpoint: 0 Cluster: 0x0000_003E Command 0x0000_0008
          [1657628679275] [78509:912135] CHIP: [TOO]   NOCResponse: {
          [1657628679275] [78509:912135] CHIP: [TOO]     statusCode: 0
          [1657628679275] [78509:912135] CHIP: [TOO]     fabricIndex: 1
          [1657628679275] [78509:912135] CHIP: [TOO]    }
          [1657628679275] [78509:912135] CHIP: [DMG] ICR mov



          ./chip-tool pairing onnetwork 2 20202021

          avahi-browse _matter._tcp -rt

          VerifyCompressed Fabric ID on the TH Log:

          +   eth0 IPv6 8840D142C33AB653-0000000000000002
      disabled: true
