# 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]

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

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

tests:
    - label: "Preconditions"
      verification: |
          1 - 5.1.3 - QR code/ Manual Pairing Code is printed on the device or in additional provided materials (ex: manual)
      disabled: true

    - label: "Scan the DUTs QR code using the TH."
      verification: |
          1. Run DUT. Example for DUT=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

          Verify in TH (CHIP-TOOL)

          [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: "Reboot the DUT device."
      verification: |
          1. Verify DUT is advertising in commissioning mode. On DUT, verify through commissioning

          Verify in TH (CHIP-TOOL)

           ./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
