# 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"
    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: "TH receives Onboarding Payload from the DUT"
      verification: |
          1. 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

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

    - label:
          "Follow any custom steps, guided by a service provided by the DUTs
          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 as commissioner side:

          [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: "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

          Verify on the TH as commissioner side:
          CHIP:CTL: Received CommissioningComplete response
          CHIP:CTL: Rendezvous cleanup
          CHIP:TOO: Device commissioning completed with success
      disabled: true
