# 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.3. [TC-SC-4.3] Operational Discovery - Node

PICS:
    - MCORE.ROLE.COMMISSIONEE

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

tests:
    - label: "TH is instructed to start advertising a service using DNS-SD"
      verification: |
          verification step to be updated.
      disabled: true

    - label: "Scan for DNS-SD advertising"
      PICS:
          MCORE.COM.WIFI && MCORE.COM.ETH && MCORE.COM.THR &&
          MCORE.SC.SII_OP_DISCOVERY_KEY && MCORE.SC.SAI_OP_DISCOVERY_KEY &&
          MCORE.SC.T_KEY
      verification: |
          ubuntu@ubuntu:~$ avahi-browse -rt _matter._tcp

          Verify on the TH Log:

          + veth721e1d9 IPv6 433B62F8F07F4327-0000000000000001             _matter._tcp         local
          = veth721e1d9 IPv6 433B62F8F07F4327-0000000000000001             _matter._tcp         local
             hostname = [E45F0149AE290000.local]
             address = [fe80::28e0:95ff:fed9:3085]
             port = [5540]
             txt = ["T=1" "SAI=300" "SII=5000"]
      disabled: true

    - label:
          "TH is instructed to start advertising an operational service using
          DNS-SD with non-standard TXT record keys"
      verification: |
          ubuntu@ubuntu:~$ avahi-browse -rt _matter._tcp


          Verify on the TH Log:

          ++ veth34b1077 IPv6 4B475AAEB62F42A1-0000000000000001             _matter._tcp         local
          = veth34b1077 IPv6 4B475AAEB62F42A1-0000000000000001             _matter._tcp         local
             hostname = [E45F0149AE290000.local]
             address = [fe80::14ad:64ff:fe95:d164]
             port = [5540]
             txt = ["T=1" "SAI=300" "SII=5000"]
      disabled: true

    - label:
          "DUT is rebooted and Commissioned again, then put in Commissioning
          Mode using Open Basic Commissioning Window command, DUT is instructed
          to advertise its service with the modified TXT record."
      verification: |
          avahi-publish-service --subtype=_S3._sub._matter._tcp --subtype=_L840._sub._matter._tcp DD200C20D25AE5F7 --subtype=_CM._sub._matter._tcp _matter._tcp 11111 D=840 CM=2  INVALID_TEST=40


          Verify on the TH Log:

          ubuntu@ubuntu:~$ avahi-browse -rt _matter._tcp


          + br-21ec3c459020 IPv4 DD200C20D25AE5F7                              _matter._tcp         local
          + docker0 IPv4 DD200C20D25AE5F7                              _matter._tcp         local
          + br-50884ced4bd8 IPv4 DD200C20D25AE5F7                              _matter._tcp         local
          +   eth0 IPv6 DD200C20D25AE5F7                              _matter._tcp         local
          +   eth0 IPv4 DD200C20D25AE5F7                              _matter._tcp         local
          +     lo IPv4 DD200C20D25AE5F7                              _matter._tcp         local
          = br-21ec3c459020 IPv4 DD200C20D25AE5F7                              _matter._tcp         local
             hostname = [ubuntu-2.local]
             address = [172.18.0.1]
             port = [11111]
             txt = ["INVALID_TEST=40" "CM=2" "D=840"]
          = docker0 IPv4 DD200C20D25AE5F7                              _matter._tcp         local
             hostname = [ubuntu-2.local]
             address = [172.17.0.1]
             port = [11111]
             txt = ["INVALID_TEST=40" "CM=2" "D=840"]
          = br-50884ced4bd8 IPv4 DD200C20D25AE5F7                              _matter._tcp         local
             hostname = [ubuntu-2.local]
             address = [172.19.0.1]
             port = [11111]
             txt = ["INVALID_TEST=40" "CM=2" "D=840"]
          =   eth0 IPv6 DD200C20D25AE5F7                              _matter._tcp         local
             hostname = [ubuntu-2.local]
             address = [fd00::ef]
             port = [11111]
             txt = ["INVALID_TEST=40" "CM=2" "D=840"]
          =   eth0 IPv4 DD200C20D25AE5F7                              _matter._tcp         local
             hostname = [ubuntu-2.local]
             address = [192.168.1.70]
             port = [11111]
             txt = ["INVALID_TEST=40" "CM=2" "D=840"]
          =     lo IPv4 DD200C20D25AE5F7                              _matter._tcp         local
             hostname = [ubuntu-2.local]
             address = [127.0.0.1]
             port = [11111]
             txt = ["INVALID_TEST=40" "CM=2" "D=840"]
          +   eth0 IPv6 21F41C9933CAAF62-000000000000003C             _matter._tcp         local
          +   eth0 IPv6 5DA80B8DD9E64426-0000000000000046             _matter._tcp         local
          +   eth0 IPv6 B1605B84E886EDCF-0000000000000258             _matter._tcp         local
          =   eth0 IPv6 21F41C9933CAAF62-000000000000003C             _matter._tcp         local
             hostname = [E45F010EBE440000.local]
             address = [fe80::e65f:1ff:fe0e:be44]
             port = [5540]
             txt = ["T=1" "SAI=300" "SII=5000"]
          =   eth0 IPv6 5DA80B8DD9E64426-0000000000000046             _matter._tcp         local
             hostname = [E45F010EBE440000.local]
             address = [fe80::e65f:1ff:fe0e:be44]
             port = [5540]
             txt = ["T=1" "SAI=300" "SII=5000"]
          =   eth0 IPv6 B1605B84E886EDCF-0000000000000258             _matter._tcp         local
             hostname = [E45F010EBE440000.local]
             address = [fe80::e65f:1ff:fe0e:be44]
             port = [5540]
             txt = ["T=1" "SAI=300" "SII=5000"]
      disabled: true

    - label: "Scan for DNS-SD advertising"
      PICS:
          MCORE.COM.WIFI && MCORE.COM.ETH && MCORE.COM.THR &&
          MCORE.SC.SII_OP_DISCOVERY_KEY && MCORE.SC.SAI_OP_DISCOVERY_KEY &&
          MCORE.SC.T_KEY
      verification: |
          verification step to be updated.
      disabled: true
