# 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.4.7. [TC-SC-4.7] Commissioner Discovery - Commissionee

PICS:
    - MCORE.ROLE.COMMISSIONEE

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

tests:
    - label:
          "TH is instructed to start advertising its presence as a commissioner
          in the network"
      verification: |
          To verify this test case use TV Reference app
      disabled: true

    - label: "Scan for DNS-SD commissioner advertisements from TH"
      PICS:
          MCORE.SC.DEVTYPE_SUBTYPE && MCORE.SC.VP_KEY && MCORE.SC.DT_KEY &&
          MCORE.SC.DN_KEY &&
      verification: |
          if DUT supports discovering UDC, DUT should be able to scan the TV-app

          Execute the below command on TH terminal and verify the AAA records:


           $  avahi-browse -rt _matterd._udp

          ++   eth0 IPv6 8BA9B3B40B98E9BB                              _matterd._udp        local
          =   eth0 IPv6 8BA9B3B40B98E9BB                              _matterd._udp        local
             hostname = [E45F0149AE290000.local]
             address = [fe80::e65f:1ff:fe49:ae29]
             port = [5650]
             txt = ["T=1" "SAI=300" "SII=5000" "DN=Test TV" "DT=35" "VP=65521+32769"]
      disabled: true

    - label:
          "By any means, TH adds an unknown key/value pair in the advertised
          data(e.g. AB=12345)"
      verification: |
          Run the  unknown key/value pair on TH Terminal:

          avahi-publish-service --subtype=_V123._sub._matterd._udp DD200C20D25AE5F7 _matterd._udp 33333 VP=123+456 DT=35 DN="Living Room TV" INVALID_TEST=40
      disabled: true

    - label: "Scan for DNS-SD commissioner advertisements from TH"
      verification: |
          Verify the DUT commissioner is able to discover the TH.

          As an example, In the case of chip-tool as commissioner, you can verify with the below command, (Use the equivalent command on the DUT)

          % sudo ./out/debug/chip-tool discover commissionables

          [1659544548029] [13752:9267297] CHIP: [DL] _OnPlatformEvent
          [1659544548030] [13752:9267297] CHIP: [DIS] Browsing for: _matterc._udp
          [1659544548031] [13752:9267297] CHIP: [DIS] Mdns: OnBrowseAdd  name: DD200C20D25AE5F7, type: _matterc._udp., domain: local., interface: 8        [1659544548031] [13752:9267297] CHIP: [DIS] Resolve type=_matterc._udp name=DD200C20D25AE5F7 interface=8
          [1659544548032] [13752:9267297] CHIP: [DIS] Mdns : OnNewInterface hostname:ubuntuserverAccessory1.local. fullname:DD200C20D25AE5F7._matterc._udp.local. interface: 8 port: 26411 TXT:D=840CM=2INVALID_TEST=40        [1659544548033] [13752:9267297] CHIP: [DIS] Mdns: OnNewAddress interface: 8 ip:fd5d:9cc0:fc52:0:dea6:32ff:fe8d:7072
          [1659544548033] [13752:9267297] CHIP: [DIS] Mdns: Resolve success on interface 8
          [1659544548033] [13752:9267297] CHIP: [DIS] Discovered node:
          [1659544548033] [13752:9267297] CHIP: [DIS]         Hostname: ubuntuserverAcce        [1659544548033] [13752:9267297] CHIP: [DIS]         IP Address #1: fd5d:9cc0:fc52:0:dea6:32ff:fe8d:7072
          [1659544548033] [13752:9267297] CHIP: [DIS]         Port: 11111
          [1659544548033] [13752:9267297] CHIP: [DIS]         Mrp Interval idle: not present
          [1659544548033] [13752:9267297] CHIP: [DIS]         Mrp Interval active: not present
          [1659544548033] [13752:9267297] CHIP: [DIS]         TCP Supported: 0
          [1659544548033] [13752:9267297] CHIP: [DIS]         Long Discriminator: 840
          [1659544548033] [13752:9267297] CHIP: [DIS]         Instance Name: DD200C20D25AE5F7
          [1659544548033] [13752:9267297] CHIP: [DIS]         Commissioning Mode: 2
          [1659544548033] [13752:9267297] CHIP: [DIS] Discovered node:
          [1659544548033] [13752:9267297] CHIP: [DIS]         Hostname: ubuntuserverAcce        [1659544548033] [13752:9267297] CHIP: [DIS]         IP Address #1: fd5d:9cc0:fc52:0:dea6:32ff:fe8d:7072
          [1659544548033] [13752:9267297] CHIP: [DIS]         Port: 11111
          [1659544548033] [13752:9267297] CHIP: [DIS]         Mrp Interval idle: not present
          [1659544548033] [13752:9267297] CHIP: [DIS]         Mrp Interval active: not present
          [1659544548033] [13752:9267297] CHIP: [DIS]         TCP Supported: 0
          [1659544548033] [13752:9267297] CHIP: [DIS]         Long Discriminator: 840
          [1659544548033] [13752:9267297] CHIP: [DIS]         Instance Name: DD200C20D25AE5F7
          [1659544548033] [13752:9267297] CHIP: [DIS]         Commissioning Mode: 2
          [1659544578034] [13752:9267291] CHIP: [CTL] Shutting down the commissioner
          [1659544578034] [13752:9267291] CHIP: [CTL] Stopping commissioning discovery over DNS-SD
          [1659544578034] [13752:9267291] CHIP: [CTL] Shutting down the controller
          [1659544578034] [13752:9267291] CHIP: [IN] Expiring all sessions for fabric 0x4!!
          [1659544578034] [13752:9267291] CHIP: [FP] Forgetting fabric 0x4
      disabled: true
