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

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

tests:
    - label: "Scan the DUTs QR code 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
          ...
          [1657213978.633542][366513:366513] CHIP:DL: Device Configuration:
          [1657213978.633637][366513:366513] CHIP:DL:   Serial Number: (not set)
          [1657213978.633681][366513:366513] CHIP:DL:   Vendor Id: 65521 (0xFFF1)
          [1657213978.633721][366513:366513] CHIP:DL:   Product Id: 32769 (0x8001)
          [1657213978.633773][366513:366513] CHIP:DL:   Hardware Version: 0
          [1657213978.633815][366513:366513] CHIP:DL:   Setup Pin Code (0 for UNKNOWN/ERROR): 20202021
          [1657213978.633875][366513:366513] CHIP:DL:   Setup Discriminator (0xFFFF for UNKNOWN/ERROR): 3840 (0xF00)
          [1657213978.633927][366513:366513] CHIP:DL:   Manufacturing Date: (not set)
          [1657213978.633985][366513:366513] CHIP:DL:   Device Type: 65535 (0xFFFF)
          [1657213978.634025][366513:366513] CHIP:-: ==== Onboarding payload for Standard Commissioning Flow ====
          [1657213978.634100][366513:366513] CHIP:SVR: SetupQRCode: [MT:-24J0AFN00KA0648G00]

          2. Parse onboarding payload using TH=chip-tool
          $ ./chip-tool payload parse-setup-payload MT:-24J0AFN00KA0648G00
          [1657214153060] [29000:16610528] CHIP: [SPL] Parsing base38Representation: MT:-24J0AFN00KA0648G00
          [1657214153060] [29000:16610528] CHIP: [SPL] Version:       0
          [1657214153060] [29000:16610528] CHIP: [SPL] VendorID:      65521
          [1657214153060] [29000:16610528] CHIP: [SPL] ProductID:     32769
          [1657214153060] [29000:16610528] CHIP: [SPL] Custom flow:   0    (STANDARD)
          [1657214153060] [29000:16610528] CHIP: [SPL] Capabilities:  0x04 (On IP network)
          [1657214153060] [29000:16610528] CHIP: [SPL] Discriminator: 3840
          [1657214153060] [29000:16610528] CHIP: [SPL] Passcode:      20202021
      disabled: true

    - label:
          "Verify that the TH presents the user with a pairing hint in the
          CommissioningModeInitialStepsHint field of the DCL. Verify that the
          CommissioningCustomFlow field is set to a value = 0"
      verification: |
          1. Verify CommissioningCustomFlow=0
          2. Verify CommissioningModeInitialStepsHint contains a valid, non-zero integer = 1 for Standard Commissioning flow
      disabled: true

    - label:
          "If CommissioningCustomFlow field in Step 2 = 0 (Standard
          Commissioning Flow), reboot the DUT device"
      verification: |
          1. Verify DUT is advertising in commissioning mode. On DUT, verify through commissioning

          $  ./chip-tool pairing code 1 MT:-24J0AFN00KA0648G00
          ...
          [1657214364908] [29006:16612760] CHIP: [CTL] Starting commissioning discovery over DNS-SD
          [1657214364908] [29006:16612760] CHIP: [DL] Browsing for: _matterc._udp,_L3840
          [1657214365080] [29006:16612761] CHIP: [DL] Mdns: OnBrowseAdd  name: E5EFE5FB9DC494B9, type: _matterc._udp., domain: local., interface: 7        [1657214365080] [29006:16612761] CHIP: [DL] Resolve type=_matterc._udp name=E5EFE5FB9DC494B9 interface=7
          [1657214365080] [29006:16612761] CHIP: [DL] Mdns : OnNewInterface hostname:DCA6328D2B9F0000.local. fullname:E5EFE5FB9DC494B9._matterc._udp.local. interface: 7        [1657214365082] [29006:16612761] CHIP: [DL] Mdns: OnNewAddress interface: 7 ip:fd54:23a1:c6de:4637:4c4:ee82:2a0f:b5e2
          [1657214365082] [29006:16612761] CHIP: [DL] Mdns: OnNewAddress interface: 7 ip:fe80::1e81:3e0:3865:2d29
          [1657214365082] [29006:16612761] CHIP: [DL] Mdns: OnNewAddress interface: 7 ip:192.168.1.10
          [1657214365082] [29006:16612761] CHIP: [CTL] Discovered device to be commissioned over DNS-SD
      disabled: true
