# 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.9. [TC-DD-3.9] Commissioning Flow - Custom Flow = 2 [DUT - Commissionee]

PICS:
    - MCORE.ROLE.COMMISSIONEE
    - MCORE.DD.CUSTOM_COMM_FLOW

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

tests:
    - label: "Preconditions"
      verification: |
          1 - Commissioner is on an operational network and has accurate date, time, timezone, regulatory, and fabric information available.
      disabled: true

    - label: "Step 1: TH receives Onboarding Payload from the DUT"
      verification: |
          1. Run DUT. Example for DUT=all-clusters app
          ./chip-all-clusters-app --version 0 --vendor-id 0xFFF1 --product-id 0x8001 --custom-flow 2 --capabilities 4 --discriminator 3840 --passcode 20202021

          2. Parse the DUT commissionee QR Code using the TH commissioner: chip-tool
           ./chip-tool payload parse-setup-payload MT:-24J029Q00KA0648G00
          [1657230447725] [31078:16782733] CHIP: [SPL] Parsing base38Representation: MT:-24J029Q00KA0648G00
          [1657230447725] [31078:16782733] CHIP: [SPL] Version:       0
          [1657230447725] [31078:16782733] CHIP: [SPL] VendorID:      65521
          [1657230447725] [31078:16782733] CHIP: [SPL] ProductID:     32769
          [1657230447725] [31078:16782733] CHIP: [SPL] Custom flow:   2    (CUSTOM)
          [1657230447725] [31078:16782733] CHIP: [SPL] Capabilities:  0x04 (On IP network)
          [1657230447725] [31078:16782733] CHIP: [SPL] Discriminator: 3840
          [1657230447725] [31078:16782733] CHIP: [SPL] Passcode:      20202021

          3. Verify that the CommissioningFlow is set to 2 (Custom Flow)
      disabled: true

    - label:
          "Step 2: Follow any custom steps, guided by a service provided by the
          DUT's manufacturer for initial device setup, then place the DUT
          Commissionee into commissioning mode."
      verification: |
          1. Follow DUT vendor-specific steps to put DUT into commissioning mode

          2. Verify DUT is advertising in commissioning mode. On DUT,

          For devices already on the network:
            ./chip-tool discover commissionables
          Verify in TH (CHIP-TOOL)

          [1651192893436] [15304:442604] CHIP: [DL] Mdns: OnNewAddress interface: 24 ip:fe80::dea6:32ff:fe8d:6e32
          [1651192893436] [15304:442604] CHIP: [DIS]         Vendor ID: 65521
          [1651192893436] [15304:442604] CHIP: [DIS]         Product ID: 32769
          [1651192893436] [15304:442604] CHIP: [DIS]         Long Discriminator: 3840
          [1651192893436] [15304:442604] CHIP: [DIS]         Pairing Hint: 33
          [1651192893436] [15304:442604] CHIP: [DIS]         Hostname: DCA6328D6E320000
          [1651192893436] [15304:442604] CHIP: [DIS]         Instance Name: 914762134DA8E7D1
          [1651192893436] [15304:442604] CHIP: [DIS]         IP Address #1: fe80::dea6:32ff:fe8d:6e32
          [1651192893436] [15304:442604] CHIP: [DIS]         Port: 5540
          [1651192893436] [15304:442604] CHIP: [DIS]         Commissioning Mode: 1
          [1651192893436] [15304:442604] CHIP: [DIS]         Mrp Interval idle: 5000 ms
          [1651192893436] [15304:442604] CHIP: [DIS]         Mrp Interval active: 300 ms


          For devices not on the network (i.e. BLE discovery):
          1. Discover commissionables over BLE using a BLE discovery tool of choice.
          Try NRF Connect app (https://www.nordicsemi.com/Products/Development-tools/nrf-connect-for-desktop)
          OR
          HCIDump (https://ubuntu.com/core/docs/bluez/reference/commands)
          Observe the DUT advertising in a commissionable state
      disabled: true

    - label: "Step 3: DUT is commissioned by the TH"
      verification: |
          1. Pair the DUT commissionee using the TH=chip-tool commissioner on the applicable Discovery technology (IP, BLE, etc.)
          2. Verify that the DUT is commissioned to the TH commissioner successfully

           ./chip-tool pairing code 1 MT:-24J029Q00KA0648G00

          Verify on the TH (CHIP-TOOL):
          CHIP:CTL: Received CommissioningComplete response
          CHIP:CTL: Rendezvous cleanup
          CHIP:TOO: Device commissioning completed with success
      disabled: true
