# 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.3.19. [TC-DD-3.19] Commissioning Flow - Commission, Unpair and
    Re-commission Device [DUT - Commissionee]

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

tests:
    - label:
          "Place DUT into commissioning mode using the DUTs manufacturers means
          to be discovered by the TH Commissioner"
      verification: |
          DUT Commissionee:
          $ ./out/all-clusters-app/chip-all-clusters-app --discriminator 3841

          [1651111142.369356][32024:32024] CHIP:DL: Device Configuration:
          [1651111142.369395][32024:32024] CHIP:DL:   Serial Number: TEST_SN
          [1651111142.369438][32024:32024] CHIP:DL:   Vendor Id: 65521 (0xFFF1)
          [1651111142.369470][32024:32024] CHIP:DL:   Product Id: 32769 (0x8001)
          [1651111142.369496][32024:32024] CHIP:DL:   Hardware Version: 0
          [1651111142.369514][32024:32024] CHIP:DL:   Setup Pin Code (0 for UNKNOWN/ERROR): 20202021
          [1651111142.369531][32024:32024] CHIP:DL:   Setup Discriminator (0xFFFF for UNKNOWN/ERROR): 3841 (0xF01)
          [1651111142.369555][32024:32024] CHIP:DL:   Manufacturing Date: (not set)
          [1651111142.369573][32024:32024] CHIP:DL:   Device Type: 65535 (0xFFFF)
          [1651111142.370760][32024:32024] CHIP:SVR: SetupQRCode: [MT:-24J0ALY01KA0648G00]

          TH Commissioner:
          $ ./chip-tool discover commissionables

          [1651111150395] [95835:65674062] CHIP: [DL] Mdns: OnNewAddress interface: 7 ip:192.168.1.2
          [1651111150395] [95835:65674062] CHIP: [DIS]         Vendor ID: 65521
          [1651111150395] [95835:65674062] CHIP: [DIS]         Product ID: 32769
          [1651111150395] [95835:65674062] CHIP: [DIS]         Long Discriminator: 3841
          [1651111150395] [95835:65674062] CHIP: [DIS]         Pairing Hint: 33
          [1651111150395] [95835:65674062] CHIP: [DIS]         Hostname: DCA6328D2B9F0000        [1651111150395] [95835:65674062] CHIP: [DIS]         Instance Name: B4B6B83476500D4A
          [1651111150395] [95835:65674062] CHIP: [DIS]         IP Address #1: fe80::dea6:32ff:fe8d:2b9f
          [1651111150395] [95835:65674062] CHIP: [DIS]         IP Address #2: fe80::dea6:32ff:fe8d:2ba0
          [1651111150395] [95835:65674062] CHIP: [DIS]         IP Address #3: 192.168.1.2
          [1651111150395] [95835:65674062] CHIP: [DIS]         Port: 5540
          [1651111150395] [95835:65674062] CHIP: [DIS]         Commissioning Mode: 1
          [1651111150395] [95835:65674062] CHIP: [DIS]         Mrp Interval idle: 5000 ms
          [1651111150395] [95835:65674062] CHIP: [DIS]         Mrp Interval active: 300 ms
      disabled: true

    - label:
          "Scan DUTs QR code using the TH Commissioner. Follow any steps needed
          for the Commissioner/Commissionee to complete the commissioning
          process over the DUT Commissionees method of device discovery"
      verification: |
          DUT Commissionee:
          [1651111335.475159][32130:32130] CHIP:SVR: Commissioning completed successfully
          [1651111335.475204][32130:32130] CHIP:DIS: Updating services using commissioning mode 0

          TH Commissioner:
          $ ./chip-tool pairing code 1 MT:-24J0ALY01KA0648G00

          [1651111335378] [95843:65675989] CHIP: [CTL] Received CommissioningComplete response
          [1651111335378] [95843:65675989] CHIP: [CTL] Successfully finished commissioning step "SendComplete"
          [1651111335378] [95843:65675989] CHIP: [CTL] Commissioning stage next step: "SendComplete" -> "Cleanup"
          [1651111335378] [95843:65675989] CHIP: [CTL] Performing next commissioning step "Cleanup"
          [1651111335378] [95843:65675989] CHIP: [CTL] Successfully finished commissioning step "Cleanup"
          [1651111335378] [95843:65675989] CHIP: [TOO] Device commissioning completed with success
      disabled: true

    - label:
          "Using TH Commissioner, unpair the DUT Commissionee from the Matter
          network."
      verification: |
          TH Commissioner:
          ./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]
      disabled: true

    - label:
          "Place DUT Commissionee back into commissioning mode using the DUT
          manufacturers means to be discovered by the TH Commissioner"
      verification: |
          1. On RasPi DUT $ rm -rf /tmp/chip*
          2. On RasPi DUT $ ./out/all-clusters-app/chip-all-clusters-app --discriminator 3841

          On TH chip-tool:
          $ ./chip-tool discover commissionables
          [1651111576350] [95850:65678872] CHIP: [DL] Mdns: OnNewAddress interface: 7 ip:192.168.1.2
          [1651111576350] [95850:65678872] CHIP: [DIS]         Vendor ID: 65521
          [1651111576350] [95850:65678872] CHIP: [DIS]         Product ID: 32769
          [1651111576350] [95850:65678872] CHIP: [DIS]         Long Discriminator: 3841
          [1651111576350] [95850:65678872] CHIP: [DIS]         Pairing Hint: 33
          [1651111576350] [95850:65678872] CHIP: [DIS]         Hostname: DCA6328D2B9F0000        [1651111576350] [95850:65678872] CHIP: [DIS]         Instance Name: F17CF4C2DECCDA4B
          [1651111576350] [95850:65678872] CHIP: [DIS]         IP Address #1: fe80::dea6:32ff:fe8d:2ba0
          [1651111576350] [95850:65678872] CHIP: [DIS]         IP Address #2: fe80::dea6:32ff:fe8d:2b9f
          [1651111576350] [95850:65678872] CHIP: [DIS]         IP Address #3: 192.168.1.2
          [1651111576350] [95850:65678872] CHIP: [DIS]         Port: 5540
          [1651111576350] [95850:65678872] CHIP: [DIS]         Commissioning Mode: 1
          [1651111576350] [95850:65678872] CHIP: [DIS]         Mrp Interval idle: 5000 ms
          [1651111576350] [95850:65678872] CHIP: [DIS]         Mrp Interval active: 300 ms
      disabled: true

    - label:
          "Scan DUTs QR code using the TH Commissioner. Follow any steps needed
          for the Commissioner/Commissionee to complete the commissioning
          process over the DUT Commissionees method of device discovery"
      verification: |
          DUT Commissionee:
          [1651111614.006849][32259:32259] CHIP:SVR: Commissioning completed successfully
          [1651111614.006893][32259:32259] CHIP:DIS: Updating services using commissioning mode 0

          TH Commissioner:
          $ ./chip-tool pairing code 1 MT:-24J0ALY01KA0648G00

          [1651111613912] [95856:65679504] CHIP: [CTL] Received CommissioningComplete response
          [1651111613912] [95856:65679504] CHIP: [CTL] Successfully finished commissioning step "SendComplete"
          [1651111613912] [95856:65679504] CHIP: [CTL] Commissioning stage next step: "SendComplete" -> "Cleanup"
          [1651111613912] [95856:65679504] CHIP: [CTL] Performing next commissioning step "Cleanup"
          [1651111613912] [95856:65679504] CHIP: [CTL] Successfully finished commissioning step "Cleanup"
          [1651111613912] [95856:65679504] CHIP: [TOO] Device commissioning completed with success
      disabled: true
