# 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.1.14. [TC-DD-1.14] Onboarding Payload Verification - Custom Flow = 2 [DUT
    - Commissionee]

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

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

tests:
    - label: "Power on the DUT device."
      verification: |
          1. Verify DUT is NOT advertising in commissioning mode. On DUT, the DUT should not show up

          $  ./chip-tool discover commissionables
      disabled: true

    - label: "Scan the DUTs QR code from the previous step using the TH."
      verification: |
          1. Run DUT. Example for DUT=all-clusters app
          $ ./out/all-clusters-app/chip-all-clusters-app --version 0 --vendor-id 0xFFF1 --product-id 0x8001 --custom-flow 0 --capabilities 4 --discriminator 3840 --passcode 20202021

          2. Parse onboarding payload using TH=chip-tool
          $  ./chip-tool payload parse-setup-payload MT:-24J0AFN00KA0648G00
          [1651193251086] [15494:447566] CHIP: [SPL] Parsing base38Representation: MT:-24J0AFN00KA0648G00
          [1651193251087] [15494:447566] CHIP: [SPL] CommissioningFlow: 2
          [1651193251087] [15494:447566] CHIP: [SPL] VendorID: 65521
          [1651193251087] [15494:447566] CHIP: [SPL] Version: 0
          [1651193251087] [15494:447566] CHIP: [SPL] ProductID: 32769
          [1651193251087] [15494:447566] CHIP: [SPL] Discriminator: 3840
          [1651193251087] [15494:447566] CHIP: [SPL] SetUpPINCode: 20202021
          [1651193251087] [15494:447566] CHIP: [SPL] RendezvousInformation: 4
      disabled: true

    - label:
          "Verify that the TH presents User with a URL in the
          CommissioningCustomFlowUrl field of the DCL. Verify that the
          CommissioningCustomFlow field is set to a value = 2"
      verification: |
          1. Verify CommissioningCustomFlow=2
          2. Verify CommissioningModeInitialStepsHint has bit 0 (Power Cycle) set to 0 and bit 1 (Device Manufacturer URL) set to 1
          3. Verify CommissioningModeInitialStepsHint contains a valid, non-zero integer
      disabled: true

    - label:
          "Follow any steps from the URL provided by the pairing hint in the DCL
          for putting the DUT Commissionee into commissioning mode"
      verification: |
          1. Follow vendor-specific steps from the pairing hint to put DUT into commissioning mode

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

          $  ./chip-tool discover commissionables
          [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
      disabled: true
