# 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"
    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
          $ ./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

          Verify in TH as commissioner side:

          [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 as commissioner side:

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