# 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: 84.2.2. [TC-DESC-2.2] Descriptor Cluster Attributes [DUT-Client]

PICS:
    - DESC.C

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

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

    - label: "Pre-Conditions"
      verification: |
          Commission TH to DUT
      disabled: true

    - label: "DUT reads DeviceTypeList from TH."
      PICS: DESC.C.A0000
      verification: |
          Product maker needs to provide instructions for how to trigger the command on the DUT. For comparison, the DUT behavior for this test step can be simulated using chip-tool (when DUT is a commissioner/Client)

          ./chip-tool descriptor read device-list 1 0

          verify the " device-list response" on the TH (all-cluster-app) log:

          [1660049876.238277][36511:36511] CHIP:IM: Received Read request
          [1660049876.238408][36511:36511] CHIP:DMG: ReadRequestMessage =
          [1660049876.238477][36511:36511] CHIP:DMG: {
          [1660049876.238525][36511:36511] CHIP:DMG: 	AttributePathIBs =
          [1660049876.238602][36511:36511] CHIP:DMG: 	[
          [1660049876.238677][36511:36511] CHIP:DMG: 		AttributePathIB =
          [1660049876.238766][36511:36511] CHIP:DMG: 		{
          [1660049876.238857][36511:36511] CHIP:DMG: 			Endpoint = 0x0,
          [1660049876.238963][36511:36511] CHIP:DMG: 			Cluster = 0x1d,
          [1660049876.239062][36511:36511] CHIP:DMG: 			Attribute = 0x0000_0000,
          [1660049876.239156][36511:36511] CHIP:DMG: 		}
          [1660049876.239246][36511:36511] CHIP:DMG:
          [1660049876.239331][36511:36511] CHIP:DMG: 	],
          [1660049876.239408][36511:36511] CHIP:DMG:
          [1660049876.239490][36511:36511] CHIP:DMG: 	isFabricFiltered = true,
          [1660049876.239568][36511:36511] CHIP:DMG: 	InteractionModelRevision = 1
          [1660049876.239639][36511:36511] CHIP:DMG: },
      disabled: true

    - label: "DUT reads ServerList from the TH"
      PICS: DESC.C.A0001
      verification: |
          ./chip-tool descriptor read server-list 1 0

          verify the " server-list response" on the TH (all-cluster-app) log:

          [1657095388.496869][3451:3456] CHIP:TOO: Endpoint: 0 Cluster: 0x0000_001D Attribute 0x0000_0001 DataVersion: 2880250959
          [1660049905.629940][36511:36511] CHIP:IM: Received Read request
          [1660049905.630388][36511:36511] CHIP:DMG: ReadRequestMessage =
          [1660049905.630834][36511:36511] CHIP:DMG: {
          [1660049905.631175][36511:36511] CHIP:DMG: 	AttributePathIBs =
          [1660049905.631815][36511:36511] CHIP:DMG: 	[
          [1660049905.632509][36511:36511] CHIP:DMG: 		AttributePathIB =
          [1660049905.633291][36511:36511] CHIP:DMG: 		{
          [1660049905.634105][36511:36511] CHIP:DMG: 			Endpoint = 0x0,
          [1660049905.634422][36511:36511] CHIP:DMG: 			Cluster = 0x1d,
          [1660049905.634714][36511:36511] CHIP:DMG: 			Attribute = 0x0000_0001,
          [1660049905.635065][36511:36511] CHIP:DMG: 		}
          [1660049905.635366][36511:36511] CHIP:DMG:
          [1660049905.635466][36511:36511] CHIP:DMG: 	],
          [1660049905.635925][36511:36511] CHIP:DMG:
          [1660049905.636339][36511:36511] CHIP:DMG: 	isFabricFiltered = true,
          [1660049905.636431][36511:36511] CHIP:DMG: 	InteractionModelRevision = 1
          [1660049905.636651][36511:36511] CHIP:DMG: },
      disabled: true

    - label: "DUT reads ClientList from the TH"
      PICS: DESC.C.A0002
      verification: |
          ./chip-tool descriptor read client-list 1 0

          verify the " client-list response" on the TH (all-cluster-app) log:
          [1660049929.094511][36511:36511] CHIP:IM: Received Read request
          [1660049929.094621][36511:36511] CHIP:DMG: ReadRequestMessage =
          [1660049929.094659][36511:36511] CHIP:DMG: {
          [1660049929.094680][36511:36511] CHIP:DMG: 	AttributePathIBs =
          [1660049929.094706][36511:36511] CHIP:DMG: 	[
          [1660049929.094729][36511:36511] CHIP:DMG: 		AttributePathIB =
          [1660049929.094761][36511:36511] CHIP:DMG: 		{
          [1660049929.094788][36511:36511] CHIP:DMG: 			Endpoint = 0x0,
          [1660049929.094821][36511:36511] CHIP:DMG: 			Cluster = 0x1d,
          [1660049929.094855][36511:36511] CHIP:DMG: 			Attribute = 0x0000_0002,
          [1660049929.094886][36511:36511] CHIP:DMG: 		}
          [1660049929.094914][36511:36511] CHIP:DMG:
          [1660049929.094940][36511:36511] CHIP:DMG: 	],
          [1660049929.094966][36511:36511] CHIP:DMG:
          [1660049929.094993][36511:36511] CHIP:DMG: 	isFabricFiltered = true,
          [1660049929.095019][36511:36511] CHIP:DMG: 	InteractionModelRevision = 1
          [1660049929.095041][36511:36511] CHIP:DMG: },
      disabled: true

    - label: "DUT reads PartsList from the TH"
      PICS: DESC.C.A0003
      verification: |
          ./chip-tool descriptor read  parts-list 1 0

          verify the " parts-list response" on the TH (all-cluster-app) log:

          [1660049948.708577][36511:36511] CHIP:IM: Received Read request
          [1660049948.708668][36511:36511] CHIP:DMG: ReadRequestMessage =
          [1660049948.708701][36511:36511] CHIP:DMG: {
          [1660049948.708723][36511:36511] CHIP:DMG: 	AttributePathIBs =
          [1660049948.708748][36511:36511] CHIP:DMG: 	[
          [1660049948.708771][36511:36511] CHIP:DMG: 		AttributePathIB =
          [1660049948.708832][36511:36511] CHIP:DMG: 		{
          [1660049948.708925][36511:36511] CHIP:DMG: 			Endpoint = 0x0,
          [1660049948.709818][36511:36511] CHIP:DMG: 			Cluster = 0x1d,
          [1660049948.710771][36511:36511] CHIP:DMG: 			Attribute = 0x0000_0003,
          [1660049948.711682][36511:36511] CHIP:DMG: 		}
          [1660049948.712502][36511:36511] CHIP:DMG:
          [1660049948.713252][36511:36511] CHIP:DMG: 	],
          [1660049948.713823][36511:36511] CHIP:DMG:
          [1660049948.714389][36511:36511] CHIP:DMG: 	isFabricFiltered = true,
          [1660049948.714998][36511:36511] CHIP:DMG: 	InteractionModelRevision = 1
          [1660049948.715573][36511:36511] CHIP:DMG: },
      disabled: true
