# 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.3.3. [TC-DD-3.3] User Directed Commissioning [DUT - Commissionee]

PICS:
    - MCORE.ROLE.COMMISSIONEE
    - MCORE.DD.UI
    - MCORE.DD.COMM_DISCOVERY

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

tests:
    - label:
          "DUT start scanning for available commissioners using Commissioner
          Discovery"
      verification: |
          DUT should make 4 retries with 100ms timeout
      disabled: true

    - label: "TH is instructed to advertise Commissioner Discovery service"
      verification: |
          ubuntu@ubuntu:~/may23_DUT/connectedhomeip/examples/tv-app/linux/out/tv-app$ sudo ./chip-tv-app

          Verify in tv-app side

          CHIP:DL: Using wifi MAC for hostname
          CHIP:DIS: Advertise operational node DFC28FF9FE811EF2-FFFFFFEFFFFFFFFF
          CHIP:DIS: CHIP minimal mDNS configured as "Operational device".
          CHIP:DIS: Broadcasting mDns reply for query from
      disabled: true

    - label:
          "DUT start scanning for available commissioners using Commissioner
          Discovery"
      verification: |
          connectedhomeip/examples/tv-casting-app/linux/out/tv-casting-app$ sudo ./chip-tv-casting-app


          Verify in tv-casting-app side

          CHIP:SVR: Discovered Commissioner #0
          [1653478433.097515][3785:3785] CHIP:DIS:         Hostname: E45F010F19FF0000        [1653478433.097546][3785:3785] CHIP:DIS:         IP Address #1: fe80::d83a:21ff:fe24:b6d6
          [1653478433.097570][3785:3785] CHIP:DIS:         Port: 5540
          [1653478433.097593][3785:3785] CHIP:DIS:         Mrp Interval idle: 5000 ms
          [1653478433.097615][3785:3785] CHIP:DIS:         Mrp Interval active: 300 ms
          [1653478433.097641][3785:3785] CHIP:DIS:         Rotating ID: 0000406E4D7073744BF234AD391DAE869837
          [1653478433.097664][3785:3785] CHIP:DIS:         Device Name: Test TV casting app
          [1653478433.097686][3785:3785] CHIP:DIS:         Vendor ID: 65521
          [1653478433.097709][3785:3785] CHIP:DIS:         Product ID: 32769
          [1653478433.097731][3785:3785] CHIP:DIS:         Device Type: 35
          [1653478433.097753][3785:3785] CHIP:DIS:         Pairing Hint: 33
          [1653478433.097775][3785:3785] CHIP:DIS:         Instance Name: C1E39719B158802A
          [1653478433.097797][3785:3785] CHIP:DIS:         Commissioning Mode: 0
          [1653478433.097821][3785:3785] CHIP:SVR: Discovered Commissioner #1
          [1653478433.097841][3785:3785] CHIP:DIS:         Hostname: E45F010F27530000        [1653478433.097867][3785:3785] CHIP:DIS:         IP Address #1: fe80::e65f:1ff:fe0f:2755
          [1653478433.097890][3785:3785] CHIP:DIS:         Port: 5650
          [1653478433.097912][3785:3785] CHIP:DIS:         Mrp Interval idle: 5000 ms
          [1653478433.097934][3785:3785] CHIP:DIS:         Mrp Interval active: 300 ms
          [1653478433.097956][3785:3785] CHIP:DIS:         Device Name: Test TV
          [1653478433.097979][3785:3785] CHIP:DIS:         Vendor ID: 65521
          [1653478433.098001][3785:3785] CHIP:DIS:         Product ID: 32769
          [1653478433.098023][3785:3785] CHIP:DIS:         Device Type: 35
          [1653478433.098056][3785:3785] CHIP:DIS:         Instance Name: 02DEC0D7B8A76577
          [1653478433.098076][3785:3785] CHIP:DIS:         Commissioning Mode: 0
          [1653478433.098103][3785:3785] CHIP:SVR: 2 commissioner(s) discovered. Select one (by number# above) to request commissioning from:
          [1653478433.098124][3785:3785] CHIP:SVR: Example: cast request 0
      disabled: true

    - label:
          "DUT is instructed to start the commissioning procedure with the TH
          found at Step 3"
      verification: |
          Out of scope for V1.0
      disabled: true

    - label: "TH verifies the Identification Declaration message"
      verification: |
          Out of scope for V1.0
      disabled: true

    - label: "TH start the commissioning procedure with DUT"
      verification: |
          ./chip-tool pairing ethernet 1 20202021 3840   fe80::e65f:1ff:fe0f:2755  5640

          Verify in TH log:

          [1653559159.021348][4240:4246] CHIP:DMG: Received Command Response Data, Endpoint=0 Cluster=0x0000_0030 Command=0x0000_0005
          [1653559159.021432][4240:4246] CHIP:CTL: Received CommissioningComplete response, errorCode=0
          [1653559159.021499][4240:4246] CHIP:CTL: Successfully finished commissioning step "SendComplete"
          [1653559159.021554][4240:4246] CHIP:CTL: Commissioning stage next step: "SendComplete" -> "Cleanup"
          [1653559159.021611][4240:4246] CHIP:CTL: Performing next commissioning step "Cleanup"
          [1653559159.021725][4240:4246] CHIP:CTL: Successfully finished commissioning step "Cleanup"
          [1653559159.021790][4240:4246] CHIP:TOO: Device commissioning completed with success
      disabled: true
