# 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.8. [TC-DD-1.8] QR Code Onboarding Payload Verification [DUT -
    Commissioner]

PICS:
    - MCORE.ROLE.COMMISSIONER
    - MCORE.DD.QR_COMMISSIONING

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

tests:
    - label: "Scan the TH Devices QR code using DUT"
      PICS: MCORE.DD.SCAN_QR_CODE
      verification: |
          1. Get the QR code from the TH
          ubuntu@matter-7:~/Apr18_dut/connectedhomeip/examples/all-clusters-app/linux/out/all-clusters-app$ sudo ./chip-all-clusters-app --wifi

          [13293:13293] CHIP:DL: Device Configuration:
          [1653306603.740569][13293:13293] CHIP:DL:   Serial Number: TEST_SN
          [1653306603.740607][13293:13293] CHIP:DL:   Vendor Id: 65521 (0xFFF1)
          [1653306603.740644][13293:13293] CHIP:DL:   Product Id: 32769 (0x8001)
          [1653306603.740676][13293:13293] CHIP:DL:   Hardware Version: 0
          [1653306603.740700][13293:13293] CHIP:DL:   Setup Pin Code (0 for UNKNOWN/ERROR): 20202021
          [1653306603.740722][13293:13293] CHIP:DL:   Setup Discriminator (0xFFFF for UNKNOWN/ERROR): 3840 (0xF00)
          [1653306603.740752][13293:13293] CHIP:DL:   Manufacturing Date: (not set)
          [1653306603.740777][13293:13293] CHIP:DL:   Device Type: 65535 (0xFFFF)
          [1653306603.740798][13293:13293] CHIP:-: ==== Onboarding payload for Standard Commissioning Flow ====
          [1653306603.740846][13293:13293] CHIP:SVR: SetupQRCode: [MT:-24J042C00KA0648G00]
          [1653306603.740877][13293:13293] CHIP:SVR: Copy/paste the below URL in a browser to see the QR Code:
          [1653306603.740898][13293:13293] CHIP:SVR: https://dhrishi.github.io/connectedhomeip/qrcode.html?data=MT%3A-24J042C00KA0648G00
          [1653306603.740929][13293:13293] CHIP:SVR: Manual pairing code: [34970112332]
          [1653306603.740951][13293:13293] CHIP:-: ==== Onboarding payload for Custom Commissioning Flows ====
          [1653306603.741000][13293:13293] CHIP:SVR: SetupQRCode: [MT:-24J0YXE00KA0648G00]
          [1653306603.741028][13293:13293] CHIP:SVR: Copy/paste the below URL in a browser to see the QR Code:
          [1653306603.741049][13293:13293] CHIP:SVR: https://dhrishi.github.io/connectedhomeip/qrcode.html?data=MT%3A-24J0YXE00KA0648G00
          [1653306603.741081][13293:13293] CHIP:SVR: Manual pairing code: [749701123365521327694]

          CHIP:DL:   Setup Discriminator (0xFFFF for UNKNOWN/ERROR): 3841 (0xF01)
          CHIP:DL:   Manufacturing Date: (not set)
          CHIP:DL:   Device Type: 65535 (0xFFFF)
          CHIP:SVR: SetupQRCode: [MT:-24J0CEK01KA0648G00]
          CHIP:SVR: Copy/paste the below URL in a browser to see the QR Code:
          CHIP:SVR: https://dhrishi.github.io/connectedhomeip/qrcode.html?data=MT%3A-24J0CEK01KA0648G00
          CHIP:SVR: Manual pairing code: [34970112332]
          CHIP:SVR: SetupQRCode: [MT:-24J048N01KA0648G00]
           CHIP:SVR: Copy/paste the below URL in a browser to see the QR Code:
           CHIP:SVR: https://dhrishi.github.io/connectedhomeip/qrcode.html?data=MT%3A-24J048N01KA0648G00



          2. Parse the DUT"s QR Code using the TH commissioner: chip-tool
          ubuntu@matter-7:~/Apr18_cntrl/connectedhomeip/examples/chip-tool/out/debug$ ./chip-tool payload parse-setup-payload MT:-24J048N01KA0648G00

          Verify in DUT as client side:
          [1650266365.939678][10146:10146] CHIP:SPL: CommissioningFlow: 2
          [1650266365.939704][10146:10146] CHIP:SPL: VendorID: 65521
          [1650266365.939724][10146:10146] CHIP:SPL: Version: 0
          [1650266365.939744][10146:10146] CHIP:SPL: ProductID: 32769
          [1650266365.939763][10146:10146] CHIP:SPL: Discriminator: 3841
          [1650266365.939782][10146:10146] CHIP:SPL: SetUpPINCode: 20202021
          [1650266365.939801][10146:10146] CHIP:SPL: RendezvousInformation: 2
      disabled: true

    - label:
          "Using the DUT, parse the THs QR code to onboard the TH Device onto
          the Matter network."
      PICS: ""
      verification: |
          ./chip-tool pairing code 1 MT:-24J042C00KA0648G00

          Verify in DUT as client side:
          CHIP:DMG: Received Command Response Data, Endpoint=0 Cluster=0x0000_0030 Command=0x0000_0005
          CHIP:CTL: Received CommissioningComplete response, errorCode=0
          CHIP:CTL: Successfully finished commissioning step "SendComplete"
          CHIP:CTL: Commissioning stage next step: "SendComplete" -> "Cleanup"
          CHIP:CTL: Performing next commissioning step "Cleanup"
          CHIP:CTL: Successfully finished commissioning step "Cleanup"
          CHIP:TOO: Device commissioning completed with success
          CHIP:DMG: ICR moving to [AwaitingDe]
      disabled: true

    - label:
          "Scan the TH Devices QR code (that includes the additional TLV data)
          using DUT. Using the example provided above, the payload would be
          MT:-24J029Q00KA064IJ3P0IXZB0DK5N1K8SQ1RYCU1-A40."
      PICS: MCORE.DD.SCAN_QR_CODE
      verification: |
          1. Get QR code from TH as server side:
          $ ./out/all-clusters-app/chip-all-clusters-app
          ...
          [1657211128.302755][365927:365927] CHIP:SVR: SetupQRCode: [MT:-24J029Q00KA0648G00]
          [1657211128.302783][365927:365927] CHIP:SVR: Copy/paste the below URL in a browser to see the QR Code:
          [1657211128.302804][365927:365927] CHIP:SVR: https://dhrishi.github.io/connectedhomeip/qrcode.html?data=MT%3A-24J029Q00KA0648G00

          2. Build TLV Data into TH"s QR code
          $ ./chip-tool payload generate-qrcode --existing-payload MT:-24J029Q00KA0648G00 --tlvBytes hex:152C000A3132333435363738393018
          [1657211213125] [28612:16578643] CHIP: [TOO] QR Code: MT:-24J029Q00KA064IJ3P0IXZB0DK5N1K8SQ1RYCU1-A40
      disabled: true

    - label:
          "Using the DUT, parse the THs QR code to onboard the TH Device onto
          the Matter network."
      PICS: ""
      verification: |
          ./chip-tool pairing code 1 MT:-24J0AFN00KA064IJ3P0IXZB0DK5N1K8SQ1RYCU1-A40

          Verify in DUT as client side:
          [1657210956708] [28601:16575811] CHIP: [CTL] Received CommissioningComplete response, errorCode=0
          [1657210956708] [28601:16575811] CHIP: [CTL] Successfully finished commissioning step "SendComplete"
          [1657210956708] [28601:16575811] CHIP: [CTL] Commissioning stage next step: "SendComplete" -> "Cleanup"
          [1657210956708] [28601:16575811] CHIP: [CTL] Performing next commissioning step "Cleanup"
          [1657210956708] [28601:16575811] CHIP: [CTL] Successfully finished commissioning step "Cleanup"
          [1657210956709] [28601:16575811] CHIP: [TOO] Device commissioning completed with success
      disabled: true
