# 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.2.3. [TC-BRBINFO-2.3] Attributes [DUT-Client]

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

tests:
    - label: "Note"
      verification: |
          For DUT as client test cases, Chip-tool command used below are an example to verify the functionality. For certification test, we expect DUT should have a capability or way to run the equivalent command.
      disabled: true

    - label: "DUT reads VendorName from the TH"
      PICS: BRBINFO.C.A0001
      verification: |
          ./chip-tool bridgeddevicebasic read vendor-name  1 3

          Verify that DUT reads VendorName from the TH successfully on TH(all-clusters-app) Log

          [1656495199.434300][2158:2163] CHIP:TOO:   VendorName: TEST_VENDOR
      disabled: true

    - label: "DUT reads VendorID from the TH"
      PICS: BRBINFO.C.A0002
      verification: |
          ./chip-tool bridgeddevicebasic read vendor-id  1 3

          Verify that DUT reads VendorID from the TH successfully on TH(all-clusters-app) Log

          [1656495322.252171][2177:2182] CHIP:TOO:   VendorID: 65521
      disabled: true

    - label: "DUT reads ProductName from the TH"
      PICS: BRBINFO.C.A0003
      verification: |
          ./chip-tool bridgeddevicebasic read product-name  1 3

          Verify that DUT reads ProductName from the TH successfully on TH(clusters-app)

          [1656495708.412745][2200:2205] CHIP:TOO:   ProductName: TEST_PRODUCT
      disabled: true

    - label: "DUT reads NodeLabel from the TH"
      PICS: BRBINFO.C.A0005
      verification: |
          Nodelabel is an optional Attribute -

          ./chip-tool bridgeddevicebasic read node-label 1 3

          Verify Node-label is read sucessfully on TH(all-clusters-app)

          [1657696463.081741][15476:15481] CHIP:TOO: Endpoint: 3 Cluster: 0x0000_0039 Attribute 0x0000_0005 DataVersion: 2577979325
          [1657696463.081791][15476:15481] CHIP:TOO:   NodeLabel: Light 1
      disabled: true

    - label: "DUT reads Location from the TH"
      PICS: BRBINFO.C.A0006
      verification: |
          ./chip-tool bridgeddevicebasic read location 1 3

          Verify that DUT reads Location from the TH successfully on TH(all-clusters-app) Log

          Note: The Location attribute is optional so no example log can be provided.
      disabled: true

    - label: "DUT reads HardwareVersion from the TH"
      PICS: BRBINFO.C.A0007
      verification: |
          ./chip-tool bridgeddevicebasic read hardware-version  1 3

          Verify that DUT reads HardwareVersion from the TH successfully on TH(all-clusters-app) Log

          [1656496175.564718][2302:2307] CHIP:TOO:   HardwareVersion: 0
      disabled: true

    - label: "DUT reads HardwareVersionString from the TH"
      PICS: BRBINFO.C.A0008
      verification: |
          ./chip-tool bridgeddevicebasic read hardware-version-string  1 3

          Verify that DUT reads HardwareVersionString from the TH successfully on TH(all-clusters-app) Log

          [1656496257.298675][2315:2320] CHIP:TOO:   HardwareVersionString: TEST_VERSION
      disabled: true

    - label: "DUT reads SoftwareVersion from the TH"
      PICS: BRBINFO.C.A0009
      verification: |
          ./chip-tool bridgeddevicebasic read software-version 1 3

          Verify that DUT reads SoftwareVersion from the TH successfully

          [1656496411.609866][2348:2353] CHIP:TOO:   SoftwareVersion: 1
      disabled: true

    - label: "DUT reads SoftwareVersionString from the TH"
      PICS: BRBINFO.C.A000a
      verification: |
          ./chip-tool bridgeddevicebasic read software-version-string  1 3

          Verify that DUT reads SoftwareVersionString from the TH successfully on TH(all-clusters-app) Log

          [1656496498.568951][2362:2367] CHIP:TOO:   SoftwareVersionString: 1.0
      disabled: true

    - label: "DUT reads ManufacturingDate from the TH"
      PICS: BRBINFO.C.A000b
      verification: |
          ./chip-tool bridgeddevicebasic read manufacturing-date  1 3

          Verify that DUT reads ManufacturingDate from the TH successfully on TH(all-clusters-app) Log

          [1656496661.777852][2388:2393] CHIP:TOO:   ManufacturingDate: 20200101
      disabled: true

    - label: "DUT reads PartNumber from the TH"
      PICS: BRBINFO.C.A000c
      verification: |
          ./chip-tool bridgeddevicebasic read part-number  1 3

          Verify that DUT reads PartNumber from the TH successfully on TH(all-clusters-app) Log

          [1656496800.941788][2405:2410] CHIP:TOO:   PartNumber: 1234
      disabled: true

    - label: "DUT reads ProductURL from the TH"
      PICS: BRBINFO.C.A000d
      verification: |
          ./chip-tool bridgeddevicebasic read product-url  1 3

          Verify that DUT reads ProductURL from the TH successfully on TH(all-clusters-app) Log

          [1656497181.118653][2436:2441] CHIP:TOO:   ProductURL: https://example.com/myproduct
      disabled: true

    - label: "DUT reads ProductLabel from the TH"
      PICS: BRBINFO.C.A000e
      verification: |
          ./chip-tool bridgeddevicebasic read product-label  1 3

          Verify that DUT reads ProductLabel from the TH successfully on TH(all-clusters-app) Log

          [1656501313.811305][2602:2607] CHIP:TOO:   ProductLabel: ABCD
      disabled: true

    - label: "DUT reads SerialNumber from the TH"
      PICS: BRBINFO.C.A000f
      verification: |
          ./chip-tool bridgeddevicebasic read serial-number  1 3

          Verify that DUT reads SerialNumber from the TH successfully on TH(all-clusters-app) Log

          [1656501452.183890][2624:2630] CHIP:TOO:   SerialNumber: 5678
      disabled: true

    - label: "DUT reads Reachable from the TH"
      PICS: BRBINFO.C.A0011
      verification: |
          ./chip-tool bridgeddevicebasic read reachable 1 3

          Verify in reachable attribute is read successfully in DUT as client side log

          [1657696571.056869][15499:15504] CHIP:TOO: Endpoint: 3 Cluster: 0x0000_0039 Attribute 0x0000_0011 DataVersion: 2577979325
          [1657696571.056932][15499:15504] CHIP:TOO:   Reachable: TRUE
      disabled: true

    - label: "DUT reads UniqueID from the TH"
      PICS: BRBINFO.C.A0012
      verification: |
          ./chip-tool bridgeddevicebasic read unique-id 1 3

          Verify that DUT reads UniqueID from the TH successfully on TH(all-clusters-app) Log

          [1656501734.253827][2673:2679] CHIP:TOO:   UniqueID: 30789FE4FCF832C9
      disabled: true
