# 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]

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



          Verify you got below message
          Device commissioning completed with success


          avahi-browse _matter._tcp -rt

          Verify 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 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 ble-wifi 1 chipsetup4 matter123 20202021 3841

          ./chip-tool pairing onnetwork 2 20202021

          avahi-browse _matter._tcp -rt

          Verify on the TH Log:

          +   eth0 IPv6 8840D142C33AB653-0000000000000002
      disabled: true
