# 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.15. [TC-DD-1.15] Onboarding Payload Verification - Unique Discriminator
    and Passcode Values [DUT - Commissionee]
PICS:
    - MCORE.ROLE.COMMISSIONEE

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

tests:
    - label: "Preconditions"
      verification: |
          1 - 5.1 - Onboarding payload is printed on the device or in additional provided materials (ex: manual) through a QR Code, a manually entered code or as content in an NFC tag.
      disabled: true

    - label:
          "Using the TH Onboarding payload reader, scan or read the Onboarding
          payload from DUT1"
      verification: |
          1.Run DUT. Example for DUT=all-clusters app
          ./chip-all-clusters-app --version 0 --vendor-id 0xFFF1 --product-id 0x8001 --custom-flow 2 --capabilities 4 --discriminator 3840 --passcode 20202021

          2. Parse payload for DUT1
          ./chip-tool payload parse-setup-payload MT:-24J029Q00KA0648G00

          Verify in TH (CHIP-TOOL)

          [1667815270.314685][10645:10645] CHIP:SPL: Parsing base38Representation: MT:-24J029Q00KA0648G00
          [1667815270.315022][10645:10645] CHIP:SPL: Version:             0
          [1667815270.315088][10645:10645] CHIP:SPL: VendorID:            65521
          [1667815270.315134][10645:10645] CHIP:SPL: ProductID:           32769
          [1667815270.315183][10645:10645] CHIP:SPL: Custom flow:         2    (CUSTOM)
          [1667815270.315238][10645:10645] CHIP:SPL: Discovery Bitmask:   0x04 (On IP network)
          [1667815270.315295][10645:10645] CHIP:SPL: Long discriminator:  3840   (0xf00)
          [1667815270.315346][10645:10645] CHIP:SPL: Passcode:            20202021
      disabled: true

    - label:
          "Using the TH, parse the Onboarding payload from previous step and
          verify that the Discriminator and Passcode for DUT1 are present."
      verification: |
          DUT1 Descriminator: 3840
          DUT1 Passcode: 20202021
      disabled: true

    - label:
          "Using the TH Onboarding payload reader, scan or read the Onboarding
          payload from DUT2"
      verification: |
          1.Run DUT. Example for DUT=all-clusters app
          ./chip-all-clusters-app --version 0 --vendor-id 0xFFF1 --product-id 0x8001 --custom-flow 2 --capabilities 4 --discriminator 3841 --passcode 20202022

          2. Parse payload for DUT2

          ./chip-tool payload parse-setup-payload MT:-24J0ALY010O0648G00
          Verify in TH (CHIP-TOOL)

          [1651194577916] [16053:466154] CHIP: [SPL] Parsing base38Representation: MT:-24J0IRV01WCCN68G00
          [1651194577916] [16053:466154] CHIP: [SPL] CommissioningFlow: 0
          [1651194577916] [16053:466154] CHIP: [SPL] VendorID: 65521
          [1651194577916] [16053:466154] CHIP: [SPL] Version: 0
          [1651194577916] [16053:466154] CHIP: [SPL] ProductID: 32769
          [1651194577916] [16053:466154] CHIP: [SPL] Discriminator: 3841
          [1651194577916] [16053:466154] CHIP: [SPL] SetUpPINCode: 20212022
          [1651194577916] [16053:466154] CHIP: [SPL] RendezvousInformation: 4
      disabled: true

    - label:
          "Using the TH, parse the Onboarding payload from previous step and
          verify that the Discriminator and Passcode for DUT2 are present."
      verification: |
          DUT2 Descriminator: 3841
          DUT2 Passcode: 20212022
      disabled: true

    - label:
          "Compare the Discriminator values for DUT1 (Step 1.b) and DUT2 (Step
          2.b)"
      verification: |
          1. Verify DUT1 Descriminator in Step 1.b is NOT equal to DUT2 Descriminator in Step 2.b
      disabled: true

    - label:
          "Compare the Passcode values for DUT1 (Step 1.b) and DUT2 (Step 2.b)"
      verification: |
          Verify DUT1 Passcode in step 1b is not equal DUT2 Passcode in step 2b
      disabled: true
